{"version":3,"file":"mtproto.worker-CNB1eRAp.js","sources":["src/helpers/bytes/bufferConcats.ts","src/lib/polyfill.ts","src/lib/appManagers/utils/peers/isAnyChat.ts","src/lib/appManagers/utils/peers/isUser.ts","src/helpers/peerIdPolyfill.ts","src/config/modes.ts","src/config/debug.ts","src/config/tabId.ts","src/environment/ctx.ts","src/helpers/array/indexOfAndSplice.ts","src/helpers/context.ts","src/helpers/eventListenerBase.ts","src/helpers/makeError.ts","src/environment/userAgent.ts","src/helpers/dT.ts","src/lib/logger.ts","src/lib/mtproto/superMessagePort.ts","src/lib/crypto/cryptoMessagePort.ts","src/environment/utils.ts","src/lib/mtproto/mtproto_config.ts","src/lib/mtproto/mtprotoMessagePort.ts","src/lib/rootScope.ts","src/helpers/noop.ts","src/helpers/cancellablePromise.ts","src/helpers/schedulers/throttle.ts","src/helpers/object/safeAssign.ts","src/lib/files/idb.ts","src/lib/storage.ts","src/config/databases/state.ts","src/lib/stateStorage.ts","src/helpers/object/setDeepProperty.ts","src/lib/appManagers/appStateManager.ts","src/config/app.ts","src/helpers/schedulers/pause.ts","src/lib/mtproto/transports/http.ts","src/lib/mtproto/transports/websocket.ts","src/helpers/array/randomize.ts","src/lib/mtproto/transports/obfuscation.ts","src/lib/mtproto/transports/abridged.ts","src/lib/mtproto/connectionStatus.ts","src/helpers/bytes/bytesToHex.ts","src/lib/mtproto/transports/tcpObfuscated.ts","src/lib/mtproto/dcConfigurator.ts","src/lib/mtproto/transports/controller.ts","src/lib/appManagers/utils/storages/resetStoragesPromise.ts","src/lib/serviceWorker/serviceMessagePort.ts","src/helpers/callbackify.ts","src/lib/appManagers/manager.ts","src/lib/appManagers/utils/storages/createStorages.ts","src/helpers/recordPromise.ts","src/lib/appManagers/utils/storages/loadStorages.ts","src/lib/appManagers/appStoragesManager.ts","src/lib/mtproto/passwordManager.ts","src/helpers/object/deepEqual.ts","src/lib/mtproto/referenceDatabase.ts","src/helpers/tsNow.ts","src/config/latinizeMap.ts","src/helpers/cleanSearchText.ts","src/helpers/array/flatten.ts","src/lib/searchIndex.ts","src/helpers/long/compareLong.ts","src/helpers/compareValue.ts","src/helpers/slicedArray.ts","src/helpers/array/forEachReverse.ts","src/helpers/array/insertInDescendSortedArray.ts","src/helpers/object/safeReplaceObject.ts","src/lib/appManagers/utils/messageId/clearMessageId.ts","src/lib/appManagers/utils/messageId/getServerMessageId.ts","src/lib/appManagers/utils/dialogs/getDialogIndexKey.ts","src/helpers/object/isObject.ts","src/lib/appManagers/utils/dialogs/getDialogIndex.ts","src/lib/appManagers/utils/peers/getPeerId.ts","src/lib/appManagers/utils/messages/getPeerIdsFromMessage.ts","src/helpers/object/defineNotNumerableProperties.ts","src/lib/appManagers/utils/dialogs/setDialogIndex.ts","src/lib/appManagers/utils/dialogs/isDialog.ts","src/lib/appManagers/utils/dialogs/getDialogKey.ts","src/lib/appManagers/utils/dialogs/getDialogThreadId.ts","src/lib/storages/dialogs.ts","src/helpers/object/copy.ts","src/helpers/array/findAndSplice.ts","src/lib/storages/filters.ts","src/helpers/array/filterUnique.ts","src/vendor/emoji/regex.ts","src/lib/richTextProcessor/index.ts","src/lib/richTextProcessor/combineSameEntities.ts","src/lib/richTextProcessor/findConflictingEntity.ts","src/lib/richTextProcessor/sortEntities.ts","src/lib/richTextProcessor/mergeEntities.ts","src/lib/richTextProcessor/parseMarkdown.ts","src/helpers/applyMixins.ts","src/lib/appManagers/apiUpdatesManager.ts","src/lib/appManagers/appAvatarsManager.ts","src/helpers/random.ts","src/lib/appManagers/appCallsManager.ts","src/lib/appManagers/utils/chats/hasRights.ts","src/lib/appManagers/utils/chats/getParticipantPeerId.ts","src/lib/appManagers/utils/peers/getPeerActiveUsernames.ts","src/lib/appManagers/appChatsManager.ts","src/helpers/string/capitalizeFirstLetter.ts","src/lib/richTextProcessor/matchUrlProtocol.ts","src/lib/richTextProcessor/wrapUrl.ts","src/helpers/dom/setInnerHTML.ts","src/lib/richTextProcessor/setBlankToAnchor.ts","src/vendor/solid/dist/solid.js","src/lib/langPack.ts","src/helpers/date.ts","src/helpers/object/safeReplaceArrayInObject.ts","src/lib/richTextProcessor/spoiler.ts","src/lib/richTextProcessor/encodeSpoiler.ts","src/lib/richTextProcessor/wrapPlainText.ts","src/lib/appManagers/utils/docs/getDocumentInputFileLocation.ts","src/helpers/fileName.ts","src/lib/appManagers/utils/docs/getDocumentDownloadOptions.ts","src/lib/appManagers/utils/docs/getDocumentURL.ts","src/environment/mimeTypeMap.ts","src/helpers/bytes/bytesFromHex.ts","src/helpers/bytes/bytesCmp.ts","src/helpers/fixChromiumMp4.ts","src/lib/appManagers/appDocsManager.ts","src/lib/appManagers/utils/messages/repliesAreEqual.ts","src/lib/appManagers/utils/drafts/draftsAreEqual.ts","src/lib/appManagers/appDraftsManager.ts","src/helpers/object/validateInitObject.ts","src/lib/richTextProcessor/fixEmoji.ts","src/lib/appManagers/appEmojiManager.ts","src/lib/appManagers/appGroupCallsManager.ts","src/lib/appManagers/utils/photos/getPhotoInput.ts","src/lib/appManagers/utils/photos/getPhotoMediaInput.ts","src/lib/appManagers/utils/inlineBots/generateQId.ts","src/lib/appManagers/utils/docs/getDocumentMediaInput.ts","src/lib/appManagers/appInlineBotsManager.ts","src/lib/appManagers/utils/messageId/isLegacyMessageId.ts","src/lib/appManagers/appMessagesIdsManager.ts","src/components/lazyLoadQueueBase.ts","src/helpers/middleware.ts","src/helpers/object/getObjectKeysAndSort.ts","src/helpers/string/splitStringByLength.ts","src/helpers/schedulers/debounce.ts","src/lib/richTextProcessor/matchUrl.ts","src/lib/appManagers/utils/reactions/availableReactionToReaction.ts","src/lib/appManagers/utils/reactions/reactionsEqual.ts","src/lib/appManagers/utils/messages/filterMessagesByInputFilter.ts","src/helpers/getFileNameForUpload.ts","src/lib/appManagers/appTabsManager.ts","src/lib/appManagers/utils/messages/getGroupedText.ts","src/lib/appManagers/utils/stickers/getStickerEffectThumb.ts","src/lib/appManagers/utils/docs/getDocumentInput.ts","src/helpers/object/setBooleanFlag.ts","src/lib/appManagers/utils/messages/getMessageThreadId.ts","src/config/tld.ts","src/lib/richTextProcessor/checkBrackets.ts","src/config/emoji.ts","src/vendor/emoji/index.ts","src/lib/richTextProcessor/getEmojiUnified.ts","src/lib/richTextProcessor/parseEntities.ts","src/lib/richTextProcessor/wrapMessageEntities.ts","src/lib/appManagers/utils/messages/getSearchType.ts","src/lib/appManagers/utils/messages/getHistoryStorageKey.ts","src/lib/appManagers/utils/messages/getFwdFromName.ts","src/lib/appManagers/utils/messages/getMainGroupedMessage.ts","src/lib/appManagers/utils/messages/getUnreadReactions.ts","src/lib/appManagers/utils/messages/isMentionUnread.ts","src/lib/appManagers/utils/messages/canMessageHaveFactCheck.ts","src/lib/appManagers/appMessagesManager.ts","src/helpers/string/convertInputKeyToKey.ts","src/lib/appManagers/appNotificationsManager.ts","src/helpers/restrictions.ts","src/lib/appManagers/utils/peers/isPeerRestricted.ts","src/lib/appManagers/utils/peers/getPeerPhoto.ts","src/lib/appManagers/appPeersManager.ts","src/lib/appManagers/appPhotosManager.ts","src/lib/appManagers/appPollsManager.ts","src/lib/appManagers/appPrivacyManager.ts","src/lib/appManagers/utils/chats/getParticipantsCount.ts","src/helpers/callbackifyAll.ts","src/lib/appManagers/appProfileManager.ts","__vite-browser-external","node_modules/.pnpm/js-md5@0.8.3/node_modules/js-md5/src/md5.js","node_modules/.pnpm/big-integer@1.6.52/node_modules/big-integer/BigInteger.js","src/helpers/bigInt/bigIntConstants.ts","src/helpers/bigInt/bigIntConversion.ts","src/lib/appManagers/appReactionsManager.ts","src/helpers/fixBase64String.ts","src/helpers/array/toArray.ts","src/lib/appManagers/appStickersManager.ts","src/helpers/cleanUsername.ts","src/lib/appManagers/utils/users/canSendToUser.ts","src/lib/appManagers/appUsersManager.ts","src/lib/appManagers/appWebPagesManager.ts","src/helpers/blob/blobSafeMimeType.ts","src/helpers/blob/blobConstruct.ts","src/lib/files/memoryWriter.ts","src/lib/files/cacheStorage.ts","src/helpers/blob/readBlobAs.ts","src/helpers/blob/readBlobAsArrayBuffer.ts","src/helpers/fixFirefoxSvg.ts","src/lib/appManagers/utils/photos/getPhotoDownloadOptions.ts","src/lib/appManagers/utils/webFiles/getWebFileDownloadOptions.ts","src/lib/appManagers/utils/webDocs/getWebDocumentDownloadOptions.ts","src/lib/appManagers/utils/webDocs/isWebDocument.ts","src/lib/appManagers/utils/webFiles/isWebFileLocation.ts","src/lib/appManagers/utils/download/getDownloadFileNameFromOptions.ts","src/lib/appManagers/utils/download/getDownloadMediaDetails.ts","src/helpers/blob/readBlobAsUint8Array.ts","src/helpers/string/fileNameRFC.ts","src/lib/files/downloadWriter.ts","src/lib/files/downloadStorage.ts","src/helpers/number/clamp.ts","src/lib/mtproto/apiFileManager.ts","src/lib/localStorage.ts","src/lib/sessionStorage.ts","src/lib/mtproto/api_methods.ts","src/helpers/toggleStorages.ts","src/lib/mtproto/apiManager.ts","src/lib/storages/peers.ts","src/lib/storages/utils/thumbs/generateEmptyThumb.ts","src/lib/storages/utils/thumbs/getStickerThumbKey.ts","src/lib/storages/utils/thumbs/getThumbKey.ts","src/lib/storages/thumbs.ts","src/lib/mtproto/schema.ts","node_modules/.pnpm/pako@2.1.0/node_modules/pako/dist/pako_inflate.min.js","src/helpers/gzipUncompress.ts","src/helpers/number/intToUint.ts","src/helpers/long/ulongFromInts.ts","src/lib/mtproto/tl_utils.ts","src/helpers/bytes/addPadding.ts","src/helpers/long/longToBytes.ts","src/helpers/bytes/convertToUint8Array.ts","src/helpers/long/sortLongsArray.ts","src/lib/mtproto/networker.ts","src/lib/mtproto/networkerFactory.ts","src/lib/mtproto/rsaKeysManager.ts","src/helpers/bytes/bytesXor.ts","src/lib/mtproto/authorizer.ts","src/lib/mtproto/timeManager.ts","src/lib/appManagers/appWebDocsManager.ts","src/lib/appManagers/appPaymentsManager.ts","src/lib/appManagers/utils/attachMenuBots/getAttachMenuBotIcon.ts","src/lib/appManagers/appAttachMenuBotsManager.ts","src/lib/appManagers/appSeamlessLoginManager.ts","src/lib/appManagers/appThemesManager.ts","src/lib/appManagers/appUsernamesManager.ts","src/lib/appManagers/appChatInvitesManager.ts","src/lib/appManagers/utils/stories/cacheType.ts","src/lib/appManagers/utils/stories/insertStory.ts","src/lib/appManagers/appStoriesManager.ts","src/lib/appManagers/appBotsManager.ts","src/lib/appManagers/appBoostsManager.ts","src/lib/appManagers/appStatisticsManager.ts","src/lib/appManagers/appBusinessManager.ts","src/lib/appManagers/appTranslationsManager.ts","src/lib/appManagers/appGifsManager.ts","src/lib/appManagers/createManagers.ts","src/lib/appManagers/appManagersManager.ts","src/helpers/listenMessagePort.ts","src/lib/mtproto/mtproto.worker.ts"],"sourcesContent":["export default function bufferConcats(...args: (ArrayBuffer | Uint8Array | number[])[]) {\n const length = args.reduce((acc, v) => acc + ((v as ArrayBuffer).byteLength || (v as Uint8Array).length), 0);\n\n const tmp = new Uint8Array(length);\n\n let lastLength = 0;\n args.forEach((b) => {\n tmp.set(b instanceof ArrayBuffer ? new Uint8Array(b) : b, lastLength);\n lastLength += (b as ArrayBuffer).byteLength || (b as Uint8Array).length;\n });\n\n return tmp/* .buffer */;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport bufferConcats from '../helpers/bytes/bufferConcats';\n\nUint8Array.prototype.concat = function(...args: Array) {\n return bufferConcats(this, ...args);\n};\n\n/* Uint8Array.prototype.toString = function() {\n return String.fromCharCode.apply(null, [...this]);\n}; */\n\nUint8Array.prototype.toJSON = function() {\n return [...this];\n // return {type: 'bytes', value: [...this]};\n};\n\nPromise.prototype.finally = Promise.prototype.finally || function(this: Promise, fn: () => any) {\n const onFinally = (callback: typeof fn) => Promise.resolve(fn()).then(callback);\n return this.then(\n result => onFinally(() => result),\n reason => onFinally(() => Promise.reject(reason))\n );\n};\n\ndeclare global {\n interface Uint8Array {\n concat: (...args: Array) => Uint8Array,\n // toString: () => string,\n toJSON: () => number[],\n // toJSON: () => {type: 'bytes', value: number[]},\n }\n\n interface Promise {\n finally: (onfinally?: () => void) => Promise;\n }\n}\n","export default function isAnyChat(peerId: PeerId) {\n return +peerId < 0;\n}\n","export default function isUser(peerId: PeerId) {\n return +peerId >= 0;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport isAnyChat from '../lib/appManagers/utils/peers/isAnyChat';\nimport isUser from '../lib/appManagers/utils/peers/isUser';\n\nString.prototype.toUserId = function() {\n return (+this).toUserId();\n};\n\nString.prototype.toChatId = function() {\n return (+this).toChatId();\n};\n\nString.prototype.toPeerId = function(isChat?: boolean) {\n return (+this).toPeerId(isChat);\n};\n\nString.prototype.isPeerId = function() {\n return /^[\\d-]/.test(this.toString());\n};\n\n// * don't return just 'this', because Firefox returns empty `Number` class\nNumber.prototype.toUserId = function() {\n return +this;\n};\n\nNumber.prototype.toChatId = function() {\n return Math.abs(this as any);\n};\n\n// * don't return just 'this', because Firefox returns empty `Number` class\nNumber.prototype.toPeerId = function(isChat?: boolean) {\n return isChat === undefined ? +this : (isChat ? -Math.abs(this as number) : +this);\n};\n\nNumber.prototype.isPeerId = function() {\n return true;\n};\n\n[\n ['isUser' as const, isUser],\n ['isAnyChat' as const, isAnyChat]\n].forEach((value) => {\n const newMethod = Array.isArray(value) ? value[0] : value;\n const originMethod = Array.isArray(value) ? value[1] : value;\n // @ts-ignore\n String.prototype[newMethod] = function() {\n // @ts-ignore\n // eslint-disable-next-line no-useless-call\n return originMethod.call(null, this.toString());\n };\n\n // @ts-ignore\n Number.prototype[newMethod] = function() {\n // * don't use just 'this', because Firefox returns empty `Number` class\n // @ts-ignore\n // eslint-disable-next-line no-useless-call\n return originMethod.call(null, +this);\n };\n});\n\ndeclare global {\n interface String {\n toUserId(): UserId;\n toChatId(): ChatId;\n toPeerId(isChat?: boolean): PeerId;\n isPeerId(): this is string;\n\n isUser(): boolean;\n isAnyChat(): boolean;\n }\n\n interface Number {\n toUserId(): UserId;\n toChatId(): ChatId;\n toPeerId(isChat?: boolean): PeerId;\n isPeerId(): this is PeerId;\n\n isUser(): boolean;\n isAnyChat(): boolean;\n }\n}\n\nexport {};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {TransportType} from '../lib/mtproto/dcConfigurator';\n\nconst Modes = {\n test: location.search.indexOf('test=1') > 0/* || true */,\n debug: location.search.indexOf('debug=1') > 0,\n http: false,\n ssl: true, // location.search.indexOf('ssl=1') > 0 || location.protocol === 'https:' && location.search.indexOf('ssl=0') === -1,\n asServiceWorker: !!import.meta.env.VITE_MTPROTO_SW,\n transport: 'websocket' as TransportType,\n noSharedWorker: location.search.indexOf('noSharedWorker=1') > 0,\n multipleTransports: !!(import.meta.env.VITE_MTPROTO_AUTO && import.meta.env.VITE_MTPROTO_HAS_HTTP && import.meta.env.VITE_MTPROTO_HAS_WS)\n};\n\nif(import.meta.env.VITE_MTPROTO_HAS_HTTP) {\n const httpOnly = Modes.http = location.search.indexOf('http=1') > 0;\n if(httpOnly) {\n Modes.multipleTransports = false;\n }\n}\n\n// * start with HTTP first\nif(Modes.multipleTransports) {\n Modes.http = true;\n}\n\nif(Modes.http) {\n Modes.transport = 'https';\n}\n\nexport default Modes;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Modes from './modes';\n\nexport const IS_BETA = import.meta.env.DEV;\nexport const DEBUG = (IS_BETA || Modes.debug)/* && false */;\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\nexport default DEBUG;\n\n// let m = DEBUG;\n/* if(!DEBUG) {\n ctx.sandpitTurtle = () => {\n //if(!m) {\n for(let i in MOUNT_CLASS_TO) {\n ctx[i] = MOUNT_CLASS_TO[i];\n }\n //m = true;\n //}\n\n //DEBUG = !DEBUG;\n };\n} */\n\n/* export const superDebug = (object: any, key: string) => {\n var d = object[key];\n var beforeStr = '', afterStr = '';\n for(var r of d) {\n beforeStr += r.before.hex + '\\n';\n afterStr += r.after.hex + '\\n';\n }\n\n beforeStr = beforeStr.trim();\n afterStr = afterStr.trim();\n //var beforeStr = d.map((r) => r.before.hex).join('\\n');\n //var afterStr = d.map((r) => r.after.hex).join('\\n');\n\n var dada = (name: string, str: string) => {\n var a = document.createElement('a');\n a.target = '_blank';\n a.download = name + '.txt';\n a.href = URL.createObjectURL(new Blob([str], {\n type: 'text/plain'\n }));\n document.body.append(a);\n a.click();\n };\n\n dada(key + '_' + 'before', beforeStr);\n dada(key + '_' + 'after', afterStr);\n}\n\nMOUNT_CLASS_TO.superDebug = superDebug; */\n","const tabId = Date.now() % Math.random() * 100000000 | 0;\nexport default tabId;\n","const ctx = typeof(window) !== 'undefined' ? window : self;\n\nexport default ctx;\n","export default function indexOfAndSplice(array: Array, item: T) {\n const idx = array.indexOf(item);\n const spliced = idx === -1 ? undefined : array.splice(idx, 1);\n return spliced?.[0];\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// в SW может быть сразу две переменных TRUE\nexport const IS_SERVICE_WORKER = typeof ServiceWorkerGlobalScope !== 'undefined' && self instanceof ServiceWorkerGlobalScope;\nexport const IS_WEB_WORKER = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope && !IS_SERVICE_WORKER;\nexport const IS_WORKER = IS_WEB_WORKER || IS_SERVICE_WORKER;\n\nexport const getWindowClients = () => {\n return (self as any as ServiceWorkerGlobalScope)\n .clients\n .matchAll({includeUncontrolled: false, type: 'window'});\n};\n\nexport const getLastWindowClient = () => getWindowClients().then((windowClients) => windowClients.slice(-1)[0]);\n\nconst postMessage = (listener: WindowClient | DedicatedWorkerGlobalScope, ...args: any[]) => {\n try {\n // @ts-ignore\n listener.postMessage(...args);\n } catch(err) {\n console.error('[worker] postMessage error:', err, args);\n }\n};\n\nconst notifyServiceWorker = (all: boolean, ...args: any[]) => {\n getWindowClients().then((listeners) => {\n if(!listeners.length) {\n // console.trace('no listeners?', self, listeners);\n return;\n }\n\n listeners.slice(all ? 0 : -1).forEach((listener) => {\n postMessage(listener, ...args);\n });\n });\n};\n\nconst notifyWorker = (...args: any[]) => {\n postMessage(self as any as DedicatedWorkerGlobalScope, ...args);\n};\n\nconst noop = () => {};\n\nexport const notifySomeone = IS_SERVICE_WORKER ? notifyServiceWorker.bind(null, false) : (IS_WEB_WORKER ? notifyWorker : noop);\nexport const notifyAll = IS_SERVICE_WORKER ? notifyServiceWorker.bind(null, true) : (IS_WEB_WORKER ? notifyWorker : noop);\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// import { MOUNT_CLASS_TO } from \"../config/debug\";\nimport type {ArgumentTypes, SuperReturnType} from '../types';\n\n// class EventSystem {\n// wm: WeakMap>> = new WeakMap();\n\n// add(target: any, event: any, listener: any) {\n// let listeners = this.wm.get(target);\n// if (listeners === undefined) {\n// listeners = {};\n// }\n// let listenersForEvent = listeners[event];\n// if (listenersForEvent === undefined) {\n// listenersForEvent = new Set();\n// }\n// listenersForEvent.add(listener);\n// listeners[event] = listenersForEvent;\n// //target.addEventListener(event, listener);\n// this.wm.set(target, listeners);\n// };\n\n// remove(target: any, event: any, listener: any) {\n// let listeners = this.wm.get(target);\n// if (!listeners) return;\n// let listenersForEvent = listeners[event];\n// if (!listenersForEvent) return;\n// listenersForEvent.delete(listener);\n// };\n\n// /* fire(target, event) {\n// let listeners = this.wm.get(target);\n// if (!listeners) return;\n// let listenersForEvent = listeners[event];\n// if (!listenersForEvent) return;\n// for (let handler of handlers) {\n// setTimeout(handler, 0, event, target); // we use a setTimeout here because we want event triggering to be asynchronous.\n// }\n// }; */\n// }\n\n// console.log = () => {};\n\n// const e = new EventSystem();\n// MOUNT_CLASS_TO.e = e;\n\nexport type EventListenerListeners = Record;\n// export type EventListenerListeners = Record any>;\n// export type EventListenerListeners = {[name in string]: Function};\n\n/**\n * Better not to remove listeners during setting\n * Should add listener callback only once\n */\n\ntype ListenerObject = {callback: T, options: boolean | AddEventListenerOptions};\n\n// type EventLitenerCallback = (data: T) =>\n// export default class EventListenerBase {\nexport default class EventListenerBase {\n protected listeners: Partial<{\n [k in keyof Listeners]: Set>\n }>;\n protected listenerResults: Partial<{\n [k in keyof Listeners]: ArgumentTypes\n }>;\n\n private reuseResults: boolean;\n\n constructor(reuseResults?: boolean) {\n this._constructor(reuseResults);\n }\n\n public _constructor(reuseResults?: boolean): any {\n this.reuseResults = reuseResults;\n this.listeners = {};\n this.listenerResults = {};\n }\n\n public addEventListener(name: T, callback: Listeners[T], options?: boolean | AddEventListenerOptions) {\n const listenerObject: ListenerObject = {callback, options};\n (this.listeners[name] ??= new Set()).add(listenerObject); // ! add before because if you don't, you won't be able to delete it from callback\n\n if(this.listenerResults.hasOwnProperty(name)) {\n callback(...this.listenerResults[name]);\n\n if((options as AddEventListenerOptions)?.once) {\n this.listeners[name].delete(listenerObject);\n return;\n }\n }\n\n // e.add(this, name, {callback, once});\n }\n\n public addMultipleEventsListeners(obj: {\n [name in keyof Listeners]?: Listeners[name]\n }) {\n for(const i in obj) {\n this.addEventListener(i, obj[i]);\n }\n }\n\n public removeEventListener(\n name: T,\n callback: Listeners[T],\n options?: boolean | AddEventListenerOptions\n ) {\n if(this.listeners[name]) {\n for(const l of this.listeners[name]) {\n if(l.callback === callback) {\n this.listeners[name].delete(l);\n break;\n }\n }\n }\n // e.remove(this, name, callback);\n }\n\n protected invokeListenerCallback>(\n name: T,\n listener: L,\n ...args: ArgumentTypes\n ) {\n let result: any, error: any;\n try {\n result = listener.callback(...args);\n } catch(err) {\n error = err;\n // console.error('listener callback error', err);\n }\n\n if((listener.options as AddEventListenerOptions)?.once) {\n this.removeEventListener(name, listener.callback);\n }\n\n if(error) {\n throw error;\n }\n\n return result;\n }\n\n private _dispatchEvent(\n name: T,\n collectResults: boolean,\n ...args: ArgumentTypes\n ) {\n if(this.reuseResults) {\n this.listenerResults[name] = args;\n }\n\n const arr: Array> = collectResults && [];\n\n const listeners = this.listeners[name];\n if(listeners) {\n for(const listener of listeners) {\n const result = this.invokeListenerCallback(name, listener, ...args);\n if(arr) {\n arr.push(result);\n }\n }\n }\n\n return arr;\n }\n\n public dispatchResultableEvent(name: T, ...args: ArgumentTypes) {\n return this._dispatchEvent(name, true, ...args);\n }\n\n // * must be protected, but who cares\n public dispatchEvent(\n name: T,\n ...args: ArgumentTypes\n ) {\n // @ts-ignore\n this._dispatchEvent(name, false, ...args);\n }\n\n public cleanup() {\n this.listeners = {};\n this.listenerResults = {};\n }\n}\n","const CACHED_ERRORS: {[key in Error['type']]?: ApiError} = {};\nexport default function makeError(type: Error['type']) {\n return CACHED_ERRORS[type] ??= {\n type\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport ctx from './ctx';\n\nexport const USER_AGENT = navigator ? navigator.userAgent : null;\nexport const IS_APPLE = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1;\nexport const IS_ANDROID = navigator.userAgent.toLowerCase().indexOf('android') !== -1;\nexport const IS_CHROMIUM = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\nexport const CHROMIUM_VERSION = (() => {\n try {\n return +navigator.userAgent.match(/Chrom(?:e|ium)\\/(.+?)(?:\\s|\\.)/)[1];\n } catch(err) {\n }\n})();\n\n// https://stackoverflow.com/a/58065241\nexport const IS_APPLE_MOBILE = (/iPad|iPhone|iPod/.test(navigator.platform) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\n !(ctx as any).MSStream;\n\nexport const IS_SAFARI = !!('safari' in ctx) || !!(USER_AGENT && (/\\b(iPad|iPhone|iPod)\\b/.test(USER_AGENT) || (!!USER_AGENT.match('Safari') && !USER_AGENT.match('Chrome'))))/* || true */;\nexport const IS_FIREFOX = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n\nexport const IS_MOBILE_SAFARI = IS_SAFARI && IS_APPLE_MOBILE;\n\nexport const IS_MOBILE = (navigator.maxTouchPoints === undefined || navigator.maxTouchPoints > 0) && navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i) != -1;\n","const _logTimer = Date.now();\nexport default function dT() {\n return '[' + ((Date.now() - _logTimer) / 1000).toFixed(3) + ']';\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport DEBUG from '../config/debug';\nimport {IS_FIREFOX, IS_SAFARI} from '../environment/userAgent';\nimport {IS_SERVICE_WORKER, IS_WEB_WORKER} from '../helpers/context';\nimport dT from '../helpers/dT';\n\nexport enum LogTypes {\n None = 0,\n Error = 1,\n Warn = 2,\n Log = 4,\n Debug = 8\n};\n\nexport const LOG_LEVELS = [LogTypes.None, LogTypes.Error, LogTypes.Warn, LogTypes.Log, LogTypes.Debug];\n\nconst IS_WEBKIT = IS_SAFARI || IS_FIREFOX;\n\n// let getCallerFunctionNameFromLine: (line: string) => string;\n// if(IS_WEBKIT) {\n// getCallerFunctionNameFromLine = (line) => {\n// const splitted = line.split('@');\n// return splitted[0];\n// };\n// } else {\n// getCallerFunctionNameFromLine = (line: string) => {\n// const splitted = line.trim().split(' ');\n// if(splitted.length === 3) {\n// return splitted[1].slice(splitted[1].lastIndexOf('.') + 1);\n// }\n// };\n// }\n\nconst STYLES_SUPPORTED = !IS_WEBKIT;\n// const LINE_INDEX = IS_WEBKIT ? 2 : 3;\n\n// function getCallerFunctionName() {\n// const stack = new Error().stack;\n// const lines = stack.split('\\n');\n// const line = lines[LINE_INDEX] || lines[lines.length - 1];\n// // const match = line.match(/\\.([^\\.]+?)\\s/);\n// // line = match ? match[1] : line.trim();\n// const caller = getCallerFunctionNameFromLine(line) || '';\n// return '[' + caller + ']';\n// }\n\nexport const LOGGER_STYLES = {\n reset: '\\x1b[0m',\n bright: '\\x1b[1m',\n dim: '\\x1b[2m',\n underscore: '\\x1b[4m',\n blink: '\\x1b[5m',\n reverse: '\\x1b[7m',\n hidden: '\\x1b[8m',\n // Foreground (text) colors\n fg: {\n black: '\\x1b[30m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m'\n },\n // Background colors\n bg: {\n black: '\\x1b[40m',\n red: '\\x1b[41m',\n green: '\\x1b[42m',\n yellow: '\\x1b[43m',\n blue: '\\x1b[44m',\n magenta: '\\x1b[45m',\n cyan: '\\x1b[46m',\n white: '\\x1b[47m'\n }\n};\n\nexport type Logger = {\n (...args: any[]): void;\n warn(...args: any[]): void;\n info(...args: any[]): void;\n error(...args: any[]): void;\n trace(...args: any[]): void;\n debug(...args: any[]): void;\n assert(...args: any[]): void;\n // log(...args: any[]): void;\n group(...args: any[]): void;\n groupCollapsed(...args: any[]): void;\n groupEnd(...args: any[]): void;\n setPrefix(newPrefix: string): void;\n setLevel(level: 0 | 1 | 2 | 3 | 4): void;\n bindPrefix(prefix: string, type?: LogTypes): Logger;\n};\n\nconst methods: ['debug' | 'info' | 'warn' | 'error' | 'assert' | 'trace'/* | 'log' */ | 'group' | 'groupCollapsed' | 'groupEnd', LogTypes][] = [\n ['debug', LogTypes.Debug],\n ['info', LogTypes.Log],\n ['warn', LogTypes.Warn],\n ['error', LogTypes.Error],\n ['assert', LogTypes.Error],\n ['trace', LogTypes.Log],\n ['group', LogTypes.Log],\n ['groupCollapsed', LogTypes.Log],\n ['groupEnd', LogTypes.Log]\n // [\"log\", LogTypes.Log]\n];\n\nexport function logger(prefix: string, type: LogTypes = LogTypes.Log | LogTypes.Warn | LogTypes.Error, ignoreDebugReset = false, style = ''): Logger {\n let originalPrefix: string;\n if(!DEBUG && !ignoreDebugReset/* || true */) {\n type = LogTypes.Error;\n }\n\n if(!STYLES_SUPPORTED) {\n style = '';\n } else if(!style) {\n if(IS_SERVICE_WORKER) style = LOGGER_STYLES.fg.yellow;\n else if(IS_WEB_WORKER) style = LOGGER_STYLES.fg.cyan;\n }\n\n const originalStyle = style;\n if(style) style = `%s ${style}%s`;\n else style = '%s';\n\n // level = LogLevels.log | LogLevels.warn | LogLevels.error | LogLevels.debug\n\n const log: Logger = function(...args: any[]) {\n return type & LogTypes.Log && console.log(style, dT(), prefix, /* getCallerFunctionName(), */ ...args);\n } as any;\n\n methods.forEach(([method, logType]) => {\n log[method] = function(...args: any[]) {\n return type & logType && console[method](style, dT(), prefix, /* getCallerFunctionName(), */ ...args);\n };\n });\n\n log.setPrefix = function(newPrefix: string) {\n originalPrefix = newPrefix;\n prefix = '[' + newPrefix + ']';\n };\n\n log.setPrefix(prefix);\n\n log.setLevel = function(level: 0 | 1 | 2 | 3 | 4) {\n type = LOG_LEVELS.slice(0, level + 1).reduce((acc, v) => acc | v, 0) as any;\n };\n\n const prefixCache: {[prefix: string]: Logger} = {};\n log.bindPrefix = function(prefix: string, _type = type) {\n return prefixCache[prefix] ??= logger(\n // `${originalPrefix}] ${LOGGER_STYLES.fg.magenta}[${prefix}`,\n `${originalPrefix}] ${STYLES_SUPPORTED && originalStyle ? LOGGER_STYLES.reset : ''}[${prefix}`,\n // `${originalPrefix}] [${prefix}`,\n _type,\n ignoreDebugReset,\n // originalStyle || LOGGER_STYLES.reset\n originalStyle\n // LOGGER_STYLES.reset\n );\n };\n\n return log;\n};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport DEBUG from '../../config/debug';\nimport tabId from '../../config/tabId';\nimport ctx from '../../environment/ctx';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport {IS_WORKER} from '../../helpers/context';\nimport EventListenerBase from '../../helpers/eventListenerBase';\nimport makeError from '../../helpers/makeError';\nimport {Awaited, WorkerTaskTemplate, WorkerTaskVoidTemplate} from '../../types';\nimport {logger} from '../logger';\n\ntype SuperMessagePortTask = WorkerTaskTemplate & {\n transfer?: Transferable[]\n};\n\ninterface InvokeTask extends SuperMessagePortTask {\n type: 'invoke',\n payload: WorkerTaskVoidTemplate & {withAck?: boolean, void?: boolean}\n}\n\ninterface ResultTask extends SuperMessagePortTask {\n type: 'result',\n payload: {\n taskId: number,\n result?: any,\n error?: any\n }\n}\n\ninterface AckTask extends SuperMessagePortTask {\n type: 'ack',\n payload: {\n cached: boolean,\n taskId: number\n result?: any,\n error?: any,\n }\n}\n\ninterface PingTask extends SuperMessagePortTask {\n type: 'ping'\n}\n\ninterface PongTask extends SuperMessagePortTask {\n type: 'pong'\n}\n\ninterface BatchTask extends SuperMessagePortTask {\n type: 'batch',\n payload: Task[]\n}\n\ninterface CloseTask extends SuperMessagePortTask {\n type: 'close'\n}\n\n// interface OpenTask extends SuperMessagePortTask {\n// type: 'open'\n// }\n\ninterface LockTask extends SuperMessagePortTask {\n type: 'lock',\n payload: string\n}\n\ntype Task = InvokeTask | ResultTask | AckTask | PingTask | PongTask | BatchTask | CloseTask/* | OpenTask */ | LockTask;\ntype TaskMap = {\n [type in Task as type['type']]?: (task: Extract, source: MessageEventSource, event: MessageEvent) => void | Promise\n};\n\nexport type AckedResult = {\n cached: boolean,\n result: Promise\n};\n// export type AckedResult = {\n// cached: true,\n// result: T\n// } | {\n// cached: false,\n// result: Promise\n// };\n\ntype ListenPort = WindowProxy | MessagePort | ServiceWorker | Worker | ServiceWorkerContainer;\ntype SendPort = Pick/* WindowProxy | MessagePort | ServiceWorker | Worker */;\n\nexport type MessageListenPort = ListenPort;\nexport type MessageSendPort = SendPort;\n\ntype ListenerCallback = (payload: any, source: MessageEventSource, event: MessageEvent) => any;\ntype Listeners = Record;\n\nconst USE_LOCKS = true;\nconst USE_BATCHING = true;\n\n// const PING_INTERVAL = DEBUG && false ? 0x7FFFFFFF : 5000;\n// const PING_TIMEOUT = DEBUG && false ? 0x7FFFFFFF : 10000;\n\nexport default class SuperMessagePort<\n Workers extends Listeners,\n Masters extends Listeners,\n IsMaster extends boolean,\n Receive extends Listeners = IsMaster extends true ? Masters : Workers,\n Send extends Listeners = IsMaster extends true ? Workers : Masters\n> extends EventListenerBase {\n protected listenPorts: Array;\n protected sendPorts: Array;\n protected pingResolves: Map void>;\n\n protected taskId: number;\n protected awaiting: {\n [id: number]: {\n resolve: any,\n reject: any,\n taskType: string,\n port?: SendPort\n }\n };\n protected pending: Map;\n\n protected log: ReturnType;\n protected debug: boolean;\n protected releasingPending: boolean;\n\n protected processTaskMap: TaskMap;\n\n protected onPortDisconnect: (source: MessageEventSource) => void;\n // protected onPortConnect: (source: MessageEventSource) => void;\n\n protected heldLocks: Map void, id: string}>;\n protected requestedLocks: Map;\n\n constructor(protected logSuffix?: string) {\n super(false);\n\n this.listenPorts = [];\n this.sendPorts = [];\n this.pingResolves = new Map();\n this.taskId = 0;\n this.awaiting = {};\n this.pending = new Map();\n this.log = logger('MP' + (logSuffix ? '-' + logSuffix : ''));\n this.debug = DEBUG;\n this.heldLocks = new Map();\n this.requestedLocks = new Map();\n\n this.processTaskMap = {\n result: this.processResultTask,\n ack: this.processAckTask,\n invoke: this.processInvokeTask,\n ping: this.processPingTask,\n pong: this.processPongTask,\n close: this.processCloseTask,\n // open: this.processOpenTask,\n lock: this.processLockTask,\n batch: this.processBatchTask\n };\n }\n\n public setOnPortDisconnect(callback: (source: MessageEventSource) => void) {\n this.onPortDisconnect = callback;\n }\n\n // public setOnPortConnect(callback: (source: MessageEventSource) => void) {\n // this.onPortConnect = callback;\n // }\n\n public attachPort(port: MessageEventSource) {\n this.attachListenPort(port);\n this.attachSendPort(port);\n }\n\n public attachListenPort(port: ListenPort) {\n this.listenPorts.push(port);\n port.addEventListener('message', this.onMessage as any);\n }\n\n public attachSendPort(port: SendPort) {\n this.log.warn('attaching send port');\n\n (port as MessagePort).start?.();\n\n this.sendPorts.push(port);\n // this.sendPing(port);\n\n // const task = this.createTask('open', undefined);\n // this.postMessage(port, task);\n\n if(typeof(window) !== 'undefined' && USE_LOCKS) {\n if('locks' in navigator) {\n const id = ['lock', tabId, this.logSuffix || '', Math.random() * 0x7FFFFFFF | 0].join('-');\n this.log.warn('created lock', id);\n const promise = new Promise((resolve) => this.heldLocks.set(port, {resolve, id}))\n .then(() => this.heldLocks.delete(port));\n navigator.locks.request(id, () => {\n this.resendLockTask(port);\n return promise;\n });\n } else {\n window.addEventListener('beforeunload', () => {\n const task = this.createTask('close', undefined);\n this.postMessage(undefined, task);\n });\n }\n }\n\n this.releasePending();\n }\n\n public resendLockTask(port: SendPort) {\n const lock = this.heldLocks.get(port);\n if(!lock) {\n return;\n }\n\n this.pushTask(this.createTask('lock', lock.id), port);\n }\n\n // ! Can't rely on ping because timers can be suspended\n // protected sendPing(port: SendPort, loop = IS_WORKER) {\n // let timeout: number;\n // const promise = new Promise((resolve, reject) => {\n // this.pingResolves.set(port, resolve);\n // this.pushTask(this.createTask('ping', undefined), port);\n\n // timeout = ctx.setTimeout(() => {\n // reject();\n // }, PING_TIMEOUT);\n // });\n\n // promise.then(() => {\n // // this.log('got pong');\n\n // clearTimeout(timeout);\n // this.pingResolves.delete(port);\n\n // if(loop) {\n // this.sendPingWithTimeout(port);\n // }\n // }, () => {\n // this.pingResolves.delete(port);\n // this.detachPort(port);\n // });\n // }\n\n // protected sendPingWithTimeout(port: SendPort, timeout = PING_INTERVAL) {\n // ctx.setTimeout(() => {\n // if(!this.sendPorts.includes(port)) {\n // return;\n // }\n\n // this.sendPing(port);\n // }, timeout);\n // }\n\n public detachPort(port: ListenPort) {\n this.log.warn('disconnecting port');\n\n indexOfAndSplice(this.listenPorts, port);\n indexOfAndSplice(this.sendPorts, port as any);\n\n port.removeEventListener?.('message', this.onMessage as any);\n (port as MessagePort).close?.();\n\n this.onPortDisconnect?.(port as any);\n\n const heldLock = this.heldLocks.get(port as SendPort);\n heldLock?.resolve();\n\n const error = makeError('PORT_DISCONNECTED');\n for(const id in this.awaiting) {\n const task = this.awaiting[id];\n if(task.port === port) {\n task.reject(error);\n delete this.awaiting[id];\n }\n }\n }\n\n protected postMessage(port: SendPort | SendPort[], task: Task) {\n const ports = Array.isArray(port) ? port : (port ? [port] : this.sendPorts);\n ports.forEach((port) => {\n if(import.meta.env.MODE === 'test') {\n return;\n }\n\n port.postMessage(task, task.transfer as any);\n });\n }\n\n protected onMessage = (event: MessageEvent) => {\n const task: Task = event.data;\n // this.log('got message', task);\n\n const source: MessageEventSource = event.source || event.currentTarget as any; // can have no source\n\n // @ts-ignore\n this.processTaskMap[task.type](task, source, event);\n };\n\n protected async releasePending() {\n // return;\n\n if(/* !this.listenPorts.length || !this.sendPorts.length || */this.releasingPending) {\n return;\n }\n\n this.releasingPending = true;\n // const perf = performance.now();\n\n if(USE_BATCHING) {\n await Promise.resolve();\n }\n // await pause(0);\n\n this.debug && this.log.debug('releasing tasks, length:', this.pending.size/* , performance.now() - perf */);\n\n this.pending.forEach((portTasks, port) => {\n let tasks: Task[] = portTasks;\n if(USE_BATCHING) {\n let batchTask: BatchTask;\n tasks = [];\n portTasks.forEach((task) => {\n if(task.transfer) {\n batchTask = undefined;\n tasks.push(task);\n } else {\n if(!batchTask) {\n batchTask = this.createTask('batch', []);\n tasks.push(batchTask);\n }\n\n batchTask.payload.push(task);\n }\n });\n }\n\n const ports = port ? [port] : this.sendPorts;\n if(!ports.length) {\n return;\n }\n\n tasks.forEach((task) => {\n // if(USE_BATCHING && task.type === 'batch') {\n // this.log(`batching ${task.payload.length} tasks`);\n // }\n\n try {\n // if(IS_SERVICE_WORKER && !port) {\n // notifyAll(task);\n // } else {\n this.postMessage(ports, task);\n // }\n } catch(err) {\n this.log.error('postMessage error:', err, task, ports);\n }\n });\n\n this.pending.delete(port);\n });\n\n this.debug && this.log.debug('released tasks');\n\n this.releasingPending = false;\n }\n\n protected processResultTask = (task: ResultTask) => {\n const {taskId, result, error} = task.payload;\n const deferred = this.awaiting[taskId];\n if(!deferred) {\n return;\n }\n\n this.debug && this.log.debug('done', deferred.taskType, result, error);\n 'error' in task.payload ? deferred.reject(error) : deferred.resolve(result);\n delete this.awaiting[taskId];\n };\n\n protected processAckTask = (task: AckTask) => {\n const payload = task.payload;\n const deferred = this.awaiting[payload.taskId];\n if(!deferred) {\n return;\n }\n\n // * will finish the init promise with incoming result\n const previousResolve: (acked: AckedResult) => void = deferred.resolve;\n // const previousReject = deferred.reject;\n\n // if(payload.cached) {\n // if('result' in payload) {\n // previousResolve({\n // cached: true,\n // result: payload.result\n // });\n // } else {\n // previousReject(payload.error);\n // }\n // } else {\n // const ret: AckedResult = {\n // cached: false,\n // result: new Promise((resolve, reject) => {\n // deferred.resolve = resolve;\n // deferred.reject = reject;\n // })\n // };\n\n // previousResolve(ret);\n // }\n\n const ret: AckedResult = {\n cached: payload.cached,\n result: payload.cached ? ('result' in payload ? Promise.resolve(payload.result) : Promise.reject(payload.error)) : new Promise((resolve, reject) => {\n deferred.resolve = resolve;\n deferred.reject = reject;\n })\n };\n\n previousResolve(ret);\n\n if(payload.cached) {\n delete this.awaiting[payload.taskId];\n }\n };\n\n protected processPingTask = (task: PingTask, source: MessageEventSource, event: MessageEvent) => {\n this.pushTask(this.createTask('pong', undefined), event.source);\n };\n\n protected processPongTask = (task: PongTask, source: MessageEventSource, event: MessageEvent) => {\n const pingResolve = this.pingResolves.get(source);\n if(pingResolve) {\n this.pingResolves.delete(source);\n pingResolve();\n }\n };\n\n protected processCloseTask = (task: CloseTask, source: MessageEventSource, event: MessageEvent) => {\n this.detachPort(source);\n };\n\n protected processBatchTask = (task: BatchTask, source: MessageEventSource, event: MessageEvent) => {\n if(!USE_BATCHING) {\n return;\n }\n\n const newEvent: MessageEvent = {data: event.data, source: event.source, currentTarget: event.currentTarget} as any;\n task.payload.forEach((task) => {\n // @ts-ignore\n newEvent.data = task;\n this.onMessage(newEvent);\n });\n };\n\n // * it's just an 'open' callback, DO NOT attach port from here\n // protected processOpenTask = (task: OpenTask, source: MessageEventSource, event: MessageEvent) => {\n // this.onPortConnect?.(source);\n // };\n\n protected processLockTask = (task: LockTask, source: MessageEventSource, event: MessageEvent) => {\n const id = task.payload;\n if(this.requestedLocks.has(id)) {\n return;\n }\n\n this.requestedLocks.set(id, source);\n navigator.locks.request(id, () => {\n this.processCloseTask(undefined, source, undefined);\n this.requestedLocks.delete(id);\n });\n };\n\n protected processInvokeTask = async(task: InvokeTask, source: MessageEventSource, event: MessageEvent) => {\n const id = task.id;\n const innerTask = task.payload;\n\n let resultTaskPayload: ResultTask['payload'];\n let resultTask: ResultTask, ackTask: AckTask;\n if(!innerTask.void) {\n resultTaskPayload = {taskId: id};\n resultTask = this.createTask('result', resultTaskPayload);\n }\n\n if(innerTask.withAck) {\n ackTask = this.createTask('ack', {\n taskId: id,\n cached: true\n });\n }\n\n let isPromise: boolean;\n try {\n const listeners = this.listeners[innerTask.type];\n if(!listeners?.size) {\n throw new Error('no listener');\n }\n\n const listener = listeners.values().next().value;\n\n // @ts-ignore\n let result = this.invokeListenerCallback(innerTask.type, listener, innerTask.payload, source, event);\n if(innerTask.void) {\n return;\n }\n\n isPromise = result instanceof Promise;\n\n if(ackTask) {\n const cached = !isPromise;\n ackTask.payload.cached = cached;\n if(cached) ackTask.payload.result = result;\n this.pushTask(ackTask, source);\n\n if(cached) {\n return;\n }\n }\n\n if(isPromise) {\n result = await result;\n }\n\n resultTaskPayload.result = result;\n } catch(error) {\n this.log.error('worker task error:', error, task);\n if(innerTask.void) {\n return;\n }\n\n if(ackTask && ackTask.payload.cached) {\n ackTask.payload.error = error;\n this.pushTask(ackTask, source);\n return;\n }\n\n resultTaskPayload.error = error;\n }\n\n this.pushTask(resultTask, source);\n };\n\n protected createTask[0]>(type: T, payload: K['payload'], transfer?: Transferable[]): K {\n return {\n type,\n payload,\n id: this.taskId++,\n transfer\n } as K;\n }\n\n protected createInvokeTask(type: string, payload: any, withAck?: boolean, _void?: boolean, transfer?: Transferable[]): InvokeTask {\n return this.createTask('invoke', {\n type,\n payload,\n withAck,\n void: _void\n }, transfer);\n }\n\n protected pushTask(task: Task, port?: SendPort) {\n let tasks = this.pending.get(port);\n if(!tasks) {\n this.pending.set(port, tasks = []);\n }\n\n tasks.push(task);\n this.releasePending();\n }\n\n public invokeVoid(type: T, payload: Parameters[0], port?: SendPort, transfer?: Transferable[]) {\n const task = this.createInvokeTask(type as string, payload, undefined, true, transfer);\n this.pushTask(task, port);\n }\n\n public invoke(type: T, payload: Parameters[0], withAck?: false, port?: SendPort, transfer?: Transferable[]): Promise>>;\n public invoke(type: T, payload: Parameters[0], withAck?: true, port?: SendPort, transfer?: Transferable[]): Promise>>>;\n public invoke(type: T, payload: Parameters[0], withAck?: boolean, port?: SendPort, transfer?: Transferable[]) {\n this.debug && this.log.debug('start', type, payload);\n\n let task: InvokeTask;\n const promise = new Promise>>((resolve, reject) => {\n task = this.createInvokeTask(type as string, payload, withAck, undefined, transfer);\n this.awaiting[task.id] = {resolve, reject, taskType: type as string, port};\n this.pushTask(task, port);\n });\n\n if(IS_WORKER) {\n promise.finally(() => {\n clearInterval(interval);\n });\n\n const interval = ctx.setInterval(() => {\n this.log.error('task still has no result', task, port);\n }, 60e3);\n } else if(false) {\n // let timedOut = false;\n const startTime = Date.now();\n promise.finally(() => {\n const elapsedTime = Date.now() - startTime;\n if(elapsedTime >= TIMEOUT) {\n this.log.error(`task was processing ${Date.now() - startTime}ms`, task.payload.payload, port);\n }/* else {\n clearTimeout(timeout);\n } */\n });\n\n const TIMEOUT = 10;\n // const timeout = ctx.setTimeout(() => {\n // timedOut = true;\n // // this.log.error(`task is processing more than ${TIMEOUT} milliseconds`, task, port);\n // }, TIMEOUT);\n }\n\n return promise;\n }\n\n public invokeExceptSource(type: T, payload: Parameters[0], source?: SendPort) {\n const ports = this.sendPorts.slice();\n indexOfAndSplice(ports, source);\n\n ports.forEach((target) => {\n this.invokeVoid(type, payload, target);\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {CryptoMethods} from './crypto_methods';\nimport SuperMessagePort from '../mtproto/superMessagePort';\nimport {Awaited} from '../../types';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport {IS_WORKER} from '../../helpers/context';\n\ntype CryptoEvent = {\n invoke: (payload: {method: T, args: Parameters}) => ReturnType,\n port: (payload: void, source: MessageEventSource, event: MessageEvent) => void,\n terminate: () => void\n};\n\nexport class CryptoMessagePort extends SuperMessagePort {\n private lastIndex: number;\n\n constructor() {\n super('CRYPTO');\n this.lastIndex = -1;\n }\n\n public invokeCryptoNew({method, args, transfer}: {\n method: T,\n args: Parameters,\n transfer?: Transferable[]\n }): Promise>> {\n const payload = {method, args};\n const listeners = this.listeners['invoke'];\n if(listeners?.size) { // already in worker\n // try {\n let result: any = listeners.values().next().value.callback(payload);\n if(!IS_WORKER && !(result instanceof Promise)) {\n result = Promise.resolve(result);\n }\n\n return result;\n // } catch(err) {\n // return Promise.reject(err);\n // }\n }\n\n const sendPortIndex = method === 'aes-encrypt' || method === 'aes-decrypt' ?\n this.lastIndex = (this.lastIndex + 1) % this.sendPorts.length :\n 0;\n // @ts-ignore\n return this.invoke('invoke', payload, undefined, this.sendPorts[sendPortIndex], transfer);\n }\n\n public invokeCrypto(method: T, ...args: Parameters): Promise>> {\n return this.invokeCryptoNew({method, args});\n }\n}\n\nconst cryptoMessagePort = new CryptoMessagePort();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.cryptoMessagePort = cryptoMessagePort);\nexport default cryptoMessagePort;\n","import type ENVIRONMENT from '.';\n\nlet environment: typeof ENVIRONMENT;\nexport function getEnvironment() {\n return environment;\n}\n\nexport function setEnvironment(env: typeof environment) {\n return environment = env;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDialogFilter} from '../storages/filters';\n\n/**\n * Legacy Webogram's format, don't change dcID to camelCase. date is timestamp\n */\nexport type UserAuth = {dcID: number | string, date: number, id: PeerId};\nexport type REAL_FOLDER_ID = 0 | 1;\n\nexport const NULL_PEER_ID: PeerId = 0;\nexport const REPLIES_PEER_ID: PeerId = 1271266957;\nexport const REPLIES_HIDDEN_CHANNEL_ID: ChatId = 777;\nexport const HIDDEN_PEER_ID: PeerId = 2666000;\nexport const SERVICE_PEER_ID: PeerId = 777000;\nexport const MUTE_UNTIL = 0x7FFFFFFF;\nexport const BOT_START_PARAM = '';\nexport const MAX_FILE_SAVE_SIZE = 20 * 1024 * 1024;\nexport const THUMB_TYPE_FULL = '';\nexport const TOPIC_COLORS = [0x6FB9F0, 0xFFD67E, 0xCB86DB, 0x8EEE98, 0xFF93B2, 0xFB6F5F];\nexport const ATTACH_MENU_BOT_ICON_NAME = 'default_static';\nexport const MESSAGE_ID_OFFSET = 0x100000000;\nexport const GENERAL_TOPIC_ID = MESSAGE_ID_OFFSET + 1;\nexport const CAN_HIDE_TOPIC = false;\nexport const T_ME_PREFIXES = new Set(['web', 'k', 'z', 'a']);\nexport const SEND_WHEN_ONLINE_TIMESTAMP = 0x7FFFFFFE;\nexport const SERVER_IMAGE_MIME_TYPES = new Set(['image/jpeg', 'image/png', 'image/bmp', 'image/gif']);\nexport const STARS_CURRENCY = 'XTR';\n\nexport const FOLDER_ID_ALL: REAL_FOLDER_ID = 0;\nexport const FOLDER_ID_ARCHIVE: REAL_FOLDER_ID = 1;\nexport const REAL_FOLDERS: Set = new Set([FOLDER_ID_ALL, FOLDER_ID_ARCHIVE]);\nexport const START_LOCAL_ID = Math.max(...Array.from(REAL_FOLDERS)) + 1 as MyDialogFilter['localId'];\n\nexport const TEST_NO_STORIES = false;\nexport const TEST_NO_SAVED = false;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport type {getEnvironment} from '../../environment/utils';\nimport type loadState from '../appManagers/utils/state/loadState';\nimport type {StoragesResults} from '../appManagers/utils/storages/loadStorages';\nimport type {LocalStorageProxyTask} from '../localStorage';\nimport type {Awaited} from '../../types';\nimport type {Mirrors, MirrorTaskPayload, NotificationBuildTaskPayload, TabState} from './mtprotoworker';\nimport type toggleStorages from '../../helpers/toggleStorages';\nimport SuperMessagePort from './superMessagePort';\n\nexport type MTProtoManagerTaskPayload = {name: string, method: string, args: any[]};\n\ntype MTProtoBroadcastEvent = {\n event: (payload: {name: string, args: any[]}, source: MessageEventSource) => void\n};\n\nexport default class MTProtoMessagePort extends SuperMessagePort<{\n environment: (environment: ReturnType) => void,\n crypto: (payload: {method: string, args: any[]}) => Promise,\n state: (payload: {userId: UserId} & Awaited> & {storagesResults?: StoragesResults}) => void,\n manager: (payload: MTProtoManagerTaskPayload) => any,\n toggleStorages: (payload: {enabled: boolean, clearWrite: boolean}) => ReturnType,\n serviceWorkerOnline: (online: boolean) => void,\n serviceWorkerPort: (payload: void, source: MessageEventSource, event: MessageEvent) => void,\n cryptoPort: (payload: void, source: MessageEventSource, event: MessageEvent) => void,\n createObjectURL: (blob: Blob) => string,\n tabState: (payload: TabState, source: MessageEventSource) => void,\n createProxyWorkerURLs: (payload: {originalUrl: string, blob: Blob}) => string[],\n} & MTProtoBroadcastEvent, {\n convertWebp: (payload: {fileName: string, bytes: Uint8Array}) => Promise,\n convertOpus: (payload: {fileName: string, bytes: Uint8Array}) => Promise,\n localStorageProxy: (payload: LocalStorageProxyTask['payload']) => Promise,\n mirror: (payload: MirrorTaskPayload) => void,\n notificationBuild: (payload: NotificationBuildTaskPayload) => void,\n receivedServiceMessagePort: (payload: void) => void,\n // hello: () => void\n} & MTProtoBroadcastEvent, Master> {\n private static INSTANCE: MTProtoMessagePort;\n\n constructor() {\n super('MTPROTO');\n\n MTProtoMessagePort.INSTANCE = this;\n\n MOUNT_CLASS_TO && (MOUNT_CLASS_TO.mtprotoMessagePort = this);\n }\n\n public static getInstance() {\n return this.INSTANCE as MTProtoMessagePort;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Message, StickerSet, Update, NotifyPeer, PeerNotifySettings, PollResults, Poll, WebPage, GroupCall, GroupCallParticipant, ReactionCount, MessagePeerReaction, PhoneCall, Config, Reaction, AttachMenuBot, PeerSettings, StoryItem, PeerStories, SavedDialog, SavedReactionTag} from '../layer';\nimport type {Dialog, ForumTopic, MessagesStorageKey, MyMessage} from './appManagers/appMessagesManager';\nimport type {MyDialogFilter} from './storages/filters';\nimport type {AnyDialog, Folder} from './storages/dialogs';\nimport type {UserTyping} from './appManagers/appProfileManager';\nimport type {MyDraftMessage} from './appManagers/appDraftsManager';\nimport type {ConnectionStatusChange} from './mtproto/connectionStatus';\nimport type {GroupCallId} from './appManagers/appGroupCallsManager';\nimport type {AppManagers} from './appManagers/managers';\nimport type {State} from '../config/state';\nimport type {Progress} from './appManagers/appDownloadManager';\nimport type {CallId} from './appManagers/appCallsManager';\nimport type {MyDocument} from './appManagers/appDocsManager';\nimport type {MTAppConfig} from './mtproto/appConfig';\nimport type StoriesCacheType from './appManagers/utils/stories/cacheType';\nimport type {StoriesListPosition} from './appManagers/appStoriesManager';\nimport {NULL_PEER_ID, UserAuth} from './mtproto/mtproto_config';\nimport EventListenerBase from '../helpers/eventListenerBase';\nimport {MOUNT_CLASS_TO} from '../config/debug';\nimport MTProtoMessagePort from './mtproto/mtprotoMessagePort';\nimport {IS_WORKER} from '../helpers/context';\nimport {RtmpCallInstance} from './calls/rtmpCallsController';\n\nexport type BroadcastEvents = {\n 'chat_full_update': ChatId,\n 'chat_update': ChatId,\n 'chat_toggle_forum': {chatId: ChatId, enabled: boolean},\n 'chat_participant': Update.updateChannelParticipant,\n 'chat_participation': {chatId: ChatId, left: boolean},\n 'chat_requests': {requestsPending: number, recentRequesters: UserId[], chatId: ChatId}\n\n 'channel_update': ChatId,\n\n 'user_update': UserId,\n 'user_auth': UserAuth,\n 'user_full_update': UserId,\n\n 'attach_menu_bot': AttachMenuBot,\n\n 'emoji_status_change': void,\n\n 'peer_pinned_messages': {peerId: PeerId, mids?: number[], pinned?: boolean, unpinAll?: true},\n 'peer_pinned_hidden': {peerId: PeerId, maxId: number},\n 'peer_typings': {peerId: PeerId, threadId?: number, typings: UserTyping[]},\n 'peer_block': {peerId: PeerId, blocked?: boolean, blockedMyStoriesFrom?: boolean},\n 'peer_title_edit': {peerId: PeerId, threadId?: number},\n 'peer_bio_edit': PeerId,\n 'peer_deleted': PeerId, // left chat, deleted user dialog, left channel\n 'peer_full_update': PeerId,\n 'peer_settings': {peerId: PeerId, settings: PeerSettings},\n 'peer_stories': {peerId: PeerId, available: boolean},\n 'peer_stories_hidden': {peerId: PeerId, hidden: boolean},\n\n 'filter_delete': MyDialogFilter,\n 'filter_update': MyDialogFilter,\n 'filter_new': MyDialogFilter,\n 'filter_order': number[],\n 'filter_joined': MyDialogFilter,\n\n 'folder_unread': Omit,\n\n 'dialog_draft': {peerId: PeerId, dialog: Dialog | ForumTopic, drop: boolean, draft: MyDraftMessage | undefined},\n 'dialog_unread': {peerId: PeerId, dialog: Dialog | ForumTopic},\n 'dialog_flush': {peerId: PeerId, dialog: Dialog},\n 'dialog_drop': AnyDialog,\n 'dialog_migrate': {migrateFrom: PeerId, migrateTo: PeerId},\n // 'dialog_top': Dialog,\n 'dialog_notify_settings': Dialog | ForumTopic,\n // 'dialog_order': {dialog: Dialog, pos: number},\n 'dialogs_multiupdate': Map, saved?: Map}>,\n\n 'history_append': {storageKey: MessagesStorageKey, message: Message.message},\n 'history_update': {storageKey: MessagesStorageKey, message: MyMessage, sequential?: boolean},\n 'history_reply_markup': {peerId: PeerId},\n 'history_multiappend': MyMessage,\n // 'history_delete': {peerId: PeerId, msgs: Map},\n 'history_delete': {peerId: PeerId, msgs: Set},\n 'history_forbidden': PeerId,\n 'history_reload': PeerId,\n 'history_count': {historyKey: string, count: number},\n 'history_delete_key': {historyKey: string, mid: number},\n // 'history_request': void,\n\n 'message_edit': {storageKey: MessagesStorageKey, peerId: PeerId, mid: number, message: MyMessage},\n 'message_sent': {storageKey: MessagesStorageKey, tempId: number, tempMessage: any, mid: number, message: MyMessage},\n 'message_error': {storageKey: MessagesStorageKey, peerId: PeerId, tempId: number, error: ApiError},\n 'message_transcribed': {peerId: PeerId, mid: number, text: string, pending?: boolean},\n 'messages_views': {peerId: PeerId, mid: number, views: number}[],\n 'messages_reactions': {message: Message.message, changedResults: ReactionCount[], removedResults: ReactionCount[]}[],\n 'messages_pending': void,\n 'messages_read': void,\n 'messages_downloaded': {peerId: PeerId, mids: number[]},\n 'messages_media_read': {peerId: PeerId, mids: number[]},\n\n 'story_update': {peerId: PeerId, story: StoryItem, modifiedPinned?: boolean, modifiedArchive?: boolean, modifiedPinnedToTop?: boolean},\n 'story_deleted': {peerId: PeerId, id: number},\n 'story_expired': {peerId: PeerId, id: number},\n 'story_new': {peerId: PeerId, story: StoryItem, cacheType: StoriesCacheType, maxReadId: number},\n 'stories_stories': PeerStories,\n 'stories_read': {peerId: PeerId, maxReadId: number},\n 'stories_downloaded': {peerId: PeerId, ids: number[]},\n 'stories_position': {peerId: PeerId, position: StoriesListPosition},\n\n 'replies_updated': Message.message,\n 'replies_short_update': Message.message,\n\n 'scheduled_new': Message.message,\n 'scheduled_delete': {peerId: PeerId, mids: number[]},\n\n 'grouped_edit': {peerId: PeerId, groupedId: string, deletedMids: number[], messages: Message.message[]},\n\n 'stickers_installed': StickerSet.stickerSet,\n 'stickers_deleted': StickerSet.stickerSet,\n 'stickers_updated': {type: 'recent' | 'faved', stickers: MyDocument[]},\n 'stickers_top': Long,\n 'stickers_order': {type: 'masks' | 'emojis' | 'stickers', order: Long[]},\n 'sticker_updated': {type: 'recent' | 'faved', document: MyDocument, faved: boolean},\n\n 'gifs_updated': MyDocument[],\n 'gif_updated': {document: MyDocument, saved: boolean},\n\n 'state_cleared': void,\n 'state_synchronized': void,\n 'state_synchronizing': void,\n\n 'contacts_update': UserId,\n 'avatar_update': {peerId: PeerId, threadId?: number},\n 'poll_update': {poll: Poll, results: PollResults},\n 'invalidate_participants': ChatId,\n // 'channel_settings': {channelId: number},\n 'webpage_updated': {id: WebPage.webPage['id'], msgs: {peerId: PeerId, mid: number, isScheduled: boolean}[]},\n\n 'connection_status_change': ConnectionStatusChange,\n 'settings_updated': {key: string, value: any, settings: State['settings']},\n 'draft_updated': {peerId: PeerId, threadId: number, draft: MyDraftMessage | undefined, force?: boolean},\n\n 'background_change': void,\n\n 'privacy_update': Update.updatePrivacy,\n\n 'notify_settings': Update.updateNotifySettings,\n 'notify_peer_type_settings': {key: Exclude, settings: PeerNotifySettings},\n\n 'notification_reset': string,\n 'notification_cancel': string,\n\n 'language_change': string,\n\n 'theme_change': {x: number, y: number} | void,\n 'theme_changed': void,\n\n 'media_play': void,\n\n 'emoji_recent': {emoji: AppEmoji, deleted?: boolean},\n\n 'download_progress': Progress,\n 'document_downloading': DocId,\n 'document_downloaded': DocId,\n\n 'choosing_sticker': boolean\n\n 'group_call_update': GroupCall,\n 'group_call_participant': {groupCallId: GroupCallId, participant: GroupCallParticipant},\n // 'group_call_video_track_added': {instance: GroupCallInstance}\n\n 'call_update': PhoneCall,\n 'call_signaling': {callId: CallId, data: Uint8Array},\n\n 'rtmp_call_update': RtmpCallInstance,\n\n 'quick_reaction': Reaction,\n\n 'service_notification': Update.updateServiceNotification,\n\n 'logging_out': void,\n\n 'payment_sent': {peerId: PeerId, mid: number, receiptMessage: Message.messageService},\n\n 'web_view_result_sent': Long,\n\n 'premium_toggle': boolean,\n 'premium_toggle_private': {isNew: boolean, isPremium: boolean},\n\n 'saved_tags': {savedPeerId: PeerId, tags: SavedReactionTag[]},\n 'saved_tags_clear': void,\n\n 'stars_balance': Long,\n\n 'file_speed_limited': {increaseTimes: number, isUpload: boolean},\n\n 'config': Config,\n 'app_config': MTAppConfig,\n 'managers_ready': void // ! inner\n};\n\nexport type BroadcastEventsListeners = {\n [name in keyof BroadcastEvents]: (e: BroadcastEvents[name]) => void\n};\n\nexport class RootScope extends EventListenerBase {\n public myId: PeerId;\n private connectionStatus: {[name: string]: ConnectionStatusChange};\n public settings: State['settings'];\n public managers: AppManagers;\n public premium: boolean;\n\n constructor() {\n super();\n\n this.myId = NULL_PEER_ID;\n this.connectionStatus = {};\n this.premium = false;\n\n this.addEventListener('user_auth', ({id}) => {\n this.myId = id.toPeerId();\n });\n\n this.addEventListener('premium_toggle_private', ({isNew, isPremium}) => {\n this.premium = isPremium;\n if(!isNew) { // * only on change\n this.dispatchEventSingle('premium_toggle', isPremium);\n }\n });\n\n this.addEventListener('connection_status_change', (status) => {\n this.connectionStatus[status.name] = status;\n });\n\n this.dispatchEvent = (e, ...args) => {\n super.dispatchEvent(e, ...args);\n MTProtoMessagePort.getInstance().invokeVoid('event', {name: e as string, args});\n };\n\n if(!IS_WORKER) {\n this.addEventListener('settings_updated', ({settings}) => {\n this.settings = settings;\n });\n }\n }\n\n public getConnectionStatus() {\n return this.connectionStatus;\n }\n\n public getPremium() {\n return this.premium;\n }\n\n public dispatchEventSingle(...args: any[]) {\n // @ts-ignore\n super.dispatchEvent(...args);\n }\n}\n\nconst rootScope = new RootScope();\nMOUNT_CLASS_TO.rootScope = rootScope;\nexport default rootScope;\n","export default function noop() {}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport noop from './noop';\n\nexport interface CancellablePromise extends Promise {\n resolve?: (value: T) => void,\n reject?: (...args: any[]) => void,\n cancel?: (reason?: any) => void,\n\n notify?: (...args: any[]) => void,\n notifyAll?: (...args: any[]) => void,\n lastNotify?: any,\n listeners?: Array<(...args: any[]) => void>,\n addNotifyListener?: (callback: (...args: any[]) => void) => void,\n\n isFulfilled?: boolean,\n isRejected?: boolean,\n\n onFinish?: () => void,\n _resolve?: (value: T) => void,\n _reject?: (...args: any[]) => void\n}\n\nconst deferredHelper = {\n isFulfilled: false,\n isRejected: false,\n\n notify: () => {},\n notifyAll: function(...args: any[]) {\n this.lastNotify = args;\n this.listeners?.forEach((callback: any) => callback(...args));\n },\n\n addNotifyListener: function(callback: (...args: any[]) => void) {\n if(this.lastNotify) {\n callback(...this.lastNotify);\n }\n\n (this.listeners ??= []).push(callback);\n },\n\n resolve: function(value) {\n if(this.isFulfilled || this.isRejected) return;\n\n this.isFulfilled = true;\n this._resolve(value);\n this.onFinish();\n },\n\n reject: function(...args) {\n if(this.isRejected || this.isFulfilled) return;\n\n this.isRejected = true;\n this._reject(...args);\n this.onFinish();\n },\n\n onFinish: function() {\n this.notify = this.notifyAll = this.lastNotify = null;\n if(this.listeners) this.listeners.length = 0;\n\n if(this.cancel) {\n this.cancel = noop;\n }\n }\n} as CancellablePromise;\n\nexport default function deferredPromise() {\n let resolve: (value: T) => void, reject: (...args: any[]) => void;\n const deferred: CancellablePromise = new Promise((_resolve, _reject) => {\n resolve = _resolve, reject = _reject;\n });\n\n Object.assign(deferred, deferredHelper);\n deferred._resolve = resolve;\n deferred._reject = reject;\n\n return deferred;\n}\n\nexport function bindPromiseToDeferred(promise: Promise, deferred: CancellablePromise) {\n promise.then(deferred.resolve.bind(deferred), deferred.reject.bind(deferred));\n}\n\n(self as any).deferredPromise = deferredPromise;\n","// * Jolly Cobra's schedulers\n\nimport {AnyToVoidFunction} from '../../types';\n\nexport default function throttle(\n fn: F,\n ms: number,\n shouldRunFirst = true\n) {\n let interval: number | null = null;\n let isPending: boolean;\n let args: Parameters;\n\n const clear = () => {\n clearInterval(interval!);\n interval = null;\n };\n\n const ret = (..._args: Parameters) => {\n isPending = true;\n args = _args;\n\n if(!interval) {\n if(shouldRunFirst) {\n isPending = false;\n // @ts-ignore\n fn(...args);\n }\n\n interval = setInterval(() => {\n if(!isPending) {\n clear();\n return;\n }\n\n isPending = false;\n // @ts-ignore\n fn(...args);\n }, ms) as any;\n }\n };\n\n ret.clear = clear;\n\n return ret;\n}\n","export default function safeAssign(object: T, fromObject: any) {\n if(fromObject) {\n for(const i in fromObject) {\n if(fromObject[i] !== undefined) {\n // @ts-ignore\n object[i] = fromObject[i];\n }\n }\n }\n\n return object;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {Database} from '../../config/databases';\nimport Modes from '../../config/modes';\nimport makeError from '../../helpers/makeError';\nimport safeAssign from '../../helpers/object/safeAssign';\nimport {logger} from '../logger';\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/createIndex\n */\nexport type IDBIndex = {\n indexName: string,\n keyPath: string,\n objectParameters: IDBIndexParameters\n};\n\nexport type IDBStore = {\n name: string,\n indexes?: IDBIndex[]\n};\n\nexport type IDBOptions = {\n name?: string,\n storeName: string,\n stores?: IDBStore[],\n version?: number\n};\n\nconst DEBUG = false;\n\nexport class IDB {\n private static INSTANCES: IDB[] = [];\n private openDbPromise: Promise;\n private db: IDBDatabase;\n private storageIsAvailable: boolean;\n private log: ReturnType;\n private name: string;\n private version: number;\n private stores: IDBStore[];\n\n constructor(db: Database) {\n safeAssign(this, db);\n\n if(Modes.test) {\n this.name += '_test';\n }\n\n this.storageIsAvailable = true;\n this.log = logger(['IDB', db.name].join('-'));\n this.log('constructor');\n\n this.openDatabase(true);\n\n IDB.INSTANCES.push(this);\n }\n\n public isAvailable() {\n return this.storageIsAvailable;\n }\n\n public openDatabase(createNew = false): Promise {\n if(this.openDbPromise && !createNew) {\n return this.openDbPromise;\n }\n\n const createIndexes = (os: IDBObjectStore, store: IDBStore) => {\n const indexNames = Array.from(os.indexNames);\n for(const indexName of indexNames) {\n os.deleteIndex(indexName);\n }\n\n if(!store.indexes?.length) {\n return;\n }\n\n for(const index of store.indexes) {\n if(os.indexNames.contains(index.indexName)) {\n continue;\n }\n\n os.createIndex(index.indexName, index.keyPath, index.objectParameters);\n }\n };\n\n const createObjectStore = (db: IDBDatabase, store: IDBStore) => {\n const os = db.createObjectStore(store.name);\n createIndexes(os, store);\n };\n\n try {\n var request = indexedDB.open(this.name, this.version);\n\n if(!request) {\n return Promise.reject();\n }\n } catch(error) {\n this.log.error('error opening db', (error as Error).message);\n this.storageIsAvailable = false;\n return Promise.reject(error);\n }\n\n let finished = false;\n setTimeout(() => {\n if(!finished) {\n request.onerror(makeError('IDB_CREATE_TIMEOUT') as Event);\n }\n }, 3000);\n\n return this.openDbPromise = new Promise((resolve, reject) => {\n request.onsuccess = (event) => {\n finished = true;\n const db = request.result;\n let calledNew = false;\n\n this.log('Opened');\n\n db.onerror = (error) => {\n this.storageIsAvailable = false;\n this.log.error('Error creating/accessing IndexedDB database', error);\n reject(error);\n };\n\n db.onclose = (e) => {\n this.log.error('closed:', e);\n !calledNew && this.openDatabase();\n };\n\n db.onabort = (e) => {\n this.log.error('abort:', e);\n const transaction = e.target as IDBTransaction;\n\n this.openDatabase(calledNew = true);\n\n if(transaction.onerror) {\n transaction.onerror(e);\n }\n\n db.close();\n };\n\n db.onversionchange = (e) => {\n this.log.error('onversionchange, lol?');\n };\n\n resolve(this.db = db);\n };\n\n request.onerror = (event) => {\n finished = true;\n this.storageIsAvailable = false;\n this.log.error('Error creating/accessing IndexedDB database', event);\n reject(event);\n };\n\n request.onupgradeneeded = (event) => {\n finished = true;\n this.log.warn('performing idb upgrade from', event.oldVersion, 'to', event.newVersion);\n\n const target = event.target as IDBOpenDBRequest;\n const db = target.result;\n this.stores.forEach((store) => {\n /* if(db.objectStoreNames.contains(store.name)) {\n //if(event.oldVersion === 1) {\n db.deleteObjectStore(store.name);\n //}\n } */\n\n if(!db.objectStoreNames.contains(store.name)) {\n createObjectStore(db, store);\n } else {\n const txn = target.transaction;\n const os = txn.objectStore(store.name);\n createIndexes(os, store);\n }\n });\n };\n });\n }\n\n public static create>(db: T) {\n return this.INSTANCES.find((instance) => instance.name === db.name) ?? new IDB(db);\n }\n\n public static closeDatabases(preserve?: IDB) {\n this.INSTANCES.forEach((storage) => {\n if(preserve && preserve === storage) {\n return;\n }\n\n const db = storage.db;\n if(db) {\n db.onclose = () => {};\n db.close();\n }\n });\n }\n}\n\nexport default class IDBStorage, StoreName extends string = T['stores'][0]['name']> {\n private log: ReturnType;\n private storeName: T['stores'][0]['name'];\n private idb: IDB;\n\n constructor(db: T, storeName: typeof db['stores'][0]['name']) {\n this.storeName = storeName;\n this.log = logger(['IDB', db.name, storeName].join('-'));\n this.idb = IDB.create(db);\n }\n\n /**\n * ! WARNING ! function requires at least one opened connection\n */\n /* public static clearObjectStores() {\n const storage = this.STORAGES[0];\n this.closeDatabases(storage);\n\n const names = Array.from(storage.db.objectStoreNames);\n const promises = names.map((name) => storage.clear(name));\n return Promise.all(promises);\n } */\n\n /* public static deleteDatabase() {\n this.closeDatabases();\n\n const storages = this.STORAGES;\n const dbNames = Array.from(new Set(storages.map((storage) => storage.name)));\n const promises = dbNames.map((dbName) => {\n return new Promise((resolve, reject) => {\n const deleteRequest = indexedDB.deleteDatabase(dbName);\n\n deleteRequest.onerror = () => {\n reject();\n };\n\n deleteRequest.onsuccess = () => {\n resolve();\n };\n });\n });\n\n return Promise.all(promises);\n } */\n\n public delete(entryName: string | string[], storeName?: StoreName): Promise {\n // return Promise.resolve();\n const isArray = Array.isArray(entryName);\n if(!isArray) {\n entryName = [].concat(entryName);\n }\n\n return this.getObjectStore('readwrite', (objectStore) => {\n const promises = (entryName as string[]).map((entryName) => objectStore.delete(entryName));\n return isArray ? promises : promises[0];\n }, DEBUG ? 'delete: ' + (entryName as string[]).join(', ') : '', storeName);\n }\n\n public clear(storeName?: StoreName): Promise {\n return this.getObjectStore('readwrite', (objectStore) => objectStore.clear(), DEBUG ? 'clear' : '', storeName);\n }\n\n public save(entryName: string | string[], value: any | any[], storeName?: StoreName) {\n // const handleError = (error: Error) => {\n // this.log.error('save: transaction error:', entryName, value, db, error, error && error.name);\n // if((!error || error.name === 'InvalidStateError')/* && false */) {\n // setTimeout(() => {\n // this.save(entryName, value);\n // }, 2e3);\n // } else {\n // //console.error('IndexedDB saveFile transaction error:', error, error && error.name);\n // }\n // };\n\n const isArray = Array.isArray(entryName);\n if(!isArray) {\n entryName = [].concat(entryName);\n value = [].concat(value);\n }\n\n return this.getObjectStore('readwrite', (objectStore) => {\n const promises = (entryName as string[]).map((entryName, idx) => objectStore.put(value[idx], entryName));\n return isArray ? promises : promises[0];\n }, DEBUG ? 'save: ' + (entryName as string[]).join(', ') : '', storeName);\n }\n\n // public saveFile(fileName: string, blob: Blob | Uint8Array) {\n // //return Promise.resolve(blobConstruct([blob]));\n // if(!(blob instanceof Blob)) {\n // blob = blobConstruct(blob);\n // }\n\n // return this.save(fileName, blob);\n // }\n\n /* public saveFileBase64(db: IDBDatabase, fileName: string, blob: Blob | any): Promise {\n if(this.getBlobSize(blob) > 10 * 1024 * 1024) {\n return Promise.reject();\n }\n\n if(!(blob instanceof Blob)) {\n var safeMimeType = blobSafeMimeType(blob.type || 'image/jpeg');\n var address = 'data:' + safeMimeType + ';base64,' + bytesToBase64(blob);\n return this.storagePutB64String(db, fileName, address).then(() => {\n return blob;\n });\n }\n\n try {\n var reader = new FileReader();\n } catch (e) {\n this.storageIsAvailable = false;\n return Promise.reject();\n }\n\n let promise = new Promise((resolve, reject) => {\n reader.onloadend = () => {\n this.storagePutB64String(db, fileName, reader.result as string).then(() => {\n resolve(blob);\n }, reject);\n }\n\n reader.onerror = reject;\n });\n\n\n try {\n reader.readAsDataURL(blob);\n } catch (e) {\n this.storageIsAvailable = false;\n return Promise.reject();\n }\n\n return promise;\n }\n\n public storagePutB64String(db: IDBDatabase, fileName: string, b64string: string) {\n try {\n var objectStore = db.transaction([this.storeName], 'readwrite')\n .objectStore(this.storeName);\n var request = objectStore.put(b64string, fileName);\n } catch(error) {\n this.storageIsAvailable = false;\n return Promise.reject(error);\n }\n\n return new Promise((resolve, reject) => {\n request.onsuccess = function(event) {\n resolve();\n };\n\n request.onerror = reject;\n });\n }\n\n public getBlobSize(blob: any) {\n return blob.size || blob.byteLength || blob.length;\n } */\n\n public get(entryName: string[], storeName?: StoreName): Promise;\n public get(entryName: string, storeName?: StoreName): Promise;\n public get(entryName: string | string[], storeName?: StoreName): Promise | Promise {\n // return Promise.reject();\n\n const isArray = Array.isArray(entryName);\n if(!isArray) {\n if(!entryName) {\n return undefined;\n }\n\n entryName = [].concat(entryName);\n } else if(!entryName.length) {\n return Promise.resolve([]) as any;\n }\n\n return this.getObjectStore('readonly', (objectStore) => {\n const promises = (entryName as string[]).map((entryName) => objectStore.get(entryName));\n return isArray ? promises : promises[0];\n }, DEBUG ? 'get: ' + (entryName as string[]).join(', ') : '', storeName);\n }\n\n private getObjectStore(\n mode: IDBTransactionMode,\n callback: (objectStore: IDBObjectStore) => IDBRequest | IDBRequest[],\n log?: string,\n storeName = this.storeName\n ) {\n let perf: number;\n\n if(log) {\n perf = performance.now();\n this.log(log + ': start');\n }\n\n return this.idb.openDatabase().then((db) => {\n return new Promise((resolve, reject) => {\n /* if(mode === 'readwrite') {\n return;\n } */\n\n // * https://developer.chrome.com/blog/indexeddb-durability-mode-now-defaults-to-relaxed\n const transaction = db.transaction([storeName], mode, {durability: 'relaxed'});\n\n const onError = () => {\n clearTimeout(timeout);\n reject(transaction.error);\n };\n\n // let resolved = false;\n const onComplete = (/* what: string */) => {\n clearTimeout(timeout);\n\n if(log) {\n this.log(log + ': end', performance.now() - perf/* , what */);\n }\n\n // if(resolved) {\n // return;\n // }\n\n // resolved = true;\n const results = requests.map((r) => r.result);\n resolve(isArray ? results : results[0]);\n };\n\n transaction.onerror = onError;\n\n // * have to wait while clearing or setting something\n const waitForTransactionComplete = mode === 'readwrite';\n if(waitForTransactionComplete) {\n transaction.oncomplete = () => onComplete(/* 'transaction' */);\n }\n\n const timeout = setTimeout(() => {\n this.log.error('transaction not finished', transaction, log);\n }, 10000);\n\n /* transaction.addEventListener('abort', (e) => {\n //handleError();\n this.log.error('IndexedDB: transaction abort!', transaction.error);\n }); */\n\n const callbackResult = callback(transaction.objectStore(storeName));\n\n const isArray = Array.isArray(callbackResult);\n const requests: IDBRequest[] = isArray ? callbackResult : [].concat(callbackResult) as any;\n\n if(waitForTransactionComplete) {\n return;\n }\n\n const length = requests.length;\n let left = length;\n\n const onRequestFinished = () => {\n if(transaction.error) {\n return;\n }\n\n if(!--left) {\n onComplete(/* 'requests' */);\n }\n };\n\n for(let i = 0; i < length; ++i) {\n const request = requests[i];\n request.onerror = onError;\n request.onsuccess = onRequestFinished;\n }\n });\n });\n }\n\n public getAll(storeName?: StoreName): Promise {\n return this.getObjectStore('readonly', (objectStore) => objectStore.getAll(), DEBUG ? 'getAll' : '', storeName);\n }\n\n /* public getAllKeys(): Promise> {\n console.time('getAllEntries');\n return this.openDatabase().then((db) => {\n var objectStore = db.transaction([this.storeName], 'readonly')\n .objectStore(this.storeName);\n var request = objectStore.getAllKeys();\n\n return new Promise((resolve, reject) => {\n request.onsuccess = function(event) {\n // @ts-ignore\n var result = event.target.result;\n resolve(result);\n console.timeEnd('getAllEntries');\n }\n\n request.onerror = reject;\n });\n });\n } */\n\n /* public isFileExists(fileName: string): Promise {\n console.time('isFileExists');\n return this.openDatabase().then((db) => {\n var objectStore = db.transaction([this.storeName], 'readonly')\n .objectStore(this.storeName);\n var request = objectStore.openCursor(fileName);\n\n return new Promise((resolve, reject) => {\n request.onsuccess = function(event) {\n // @ts-ignore\n var cursor = event.target.result;\n resolve(!!cursor);\n console.timeEnd('isFileExists');\n }\n\n request.onerror = reject;\n });\n });\n } */\n\n /* public getFileWriter(fileName: string, mimeType: string) {\n var fakeWriter = FileManager.getFakeFileWriter(mimeType, (blob) => {\n return this.saveFile(fileName, blob);\n });\n\n return Promise.resolve(fakeWriter);\n } */\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {Database} from '../config/databases';\nimport {MOUNT_CLASS_TO} from '../config/debug';\n// import DATABASE_SESSION from \"../config/databases/session\";\nimport deferredPromise, {CancellablePromise} from '../helpers/cancellablePromise';\nimport {IS_WORKER} from '../helpers/context';\nimport throttle from '../helpers/schedulers/throttle';\n// import { WorkerTaskTemplate } from \"../types\";\nimport IDBStorage from './files/idb';\n\nfunction noop() {}\n\n/* export interface LocalStorageProxySetTask extends WorkerTaskTemplate {\n type: 'localStorageProxy',\n payload: {\n type: 'set',\n keys: string[],\n values: any[]\n }\n};\n\nexport interface LocalStorageProxyDeleteTask extends WorkerTaskTemplate {\n type: 'localStorageProxy',\n payload: {\n type: 'delete',\n keys: string[]\n }\n}; */\n\nconst THROTTLE_TIME = 16;\n\n/* Storage extends {[name: string]: any} *//* Storage extends Record */\nexport default class AppStorage<\n Storage extends Record,\n T extends Database\n> {\n private static STORAGES: AppStorage>[] = [];\n private storage: IDBStorage;// new CacheStorageController('session');\n\n // private cache: Partial<{[key: string]: Storage[typeof key]}> = {};\n private cache: Partial = {};\n private useStorage: boolean;\n private savingFreezed: boolean;\n\n private getPromises: Map> = new Map();\n private getThrottled: () => void;\n\n private keysToSet: Set = new Set();\n private saveThrottled: () => void;\n private saveDeferred = deferredPromise();\n\n private keysToDelete: Set = new Set();\n private deleteThrottled: () => void;\n private deleteDeferred = deferredPromise();\n\n constructor(private db: T, private storeName: typeof db['stores'][number]['name']) {\n this.storage = new IDBStorage(db, storeName);\n\n if(AppStorage.STORAGES.length) {\n this.useStorage = AppStorage.STORAGES[0].useStorage;\n } else {\n this.useStorage = true;\n }\n\n this.savingFreezed = false;\n\n AppStorage.STORAGES.push(this);\n\n this.saveThrottled = throttle(async() => {\n const deferred = this.saveDeferred;\n this.saveDeferred = deferredPromise();\n\n const set = this.keysToSet;\n if(set.size) {\n const keys = Array.from(set.values()) as string[];\n set.clear();\n\n const values = keys.map((key) => this.cache[key]);\n try {\n // console.log('setItem: will set', key/* , value */);\n // await this.cacheStorage.delete(key); // * try to prevent memory leak in Chrome leading to 'Unexpected internal error.'\n // await this.storage.save(key, new Response(value, {headers: {'Content-Type': 'application/json'}}));\n\n /* if(db === DATABASE_SESSION && !('localStorage' in self)) { // * support legacy Webogram's localStorage\n self.postMessage({\n type: 'localStorageProxy',\n payload: {\n type: 'set',\n keys,\n values\n }\n } as LocalStorageProxySetTask);\n } */\n\n await this.storage.save(keys, values);\n // console.log('setItem: have set', key/* , value */);\n } catch(e) {\n // this.useCS = false;\n console.error('[AS]: set error:', e, keys, values);\n }\n }\n\n deferred.resolve();\n\n if(set.size) {\n this.saveThrottled();\n }\n }, THROTTLE_TIME, false);\n\n this.deleteThrottled = throttle(async() => {\n const deferred = this.deleteDeferred;\n this.deleteDeferred = deferredPromise();\n\n const set = this.keysToDelete;\n if(set.size) {\n const keys = Array.from(set.values()) as string[];\n set.clear();\n\n try {\n /* if(db === DATABASE_SESSION && !('localStorage' in self)) { // * support legacy Webogram's localStorage\n self.postMessage({\n type: 'localStorageProxy',\n payload: {\n type: 'delete',\n keys\n }\n } as LocalStorageProxyDeleteTask);\n } */\n\n await this.storage.delete(keys);\n } catch(e) {\n console.error('[AS]: delete error:', e, keys);\n }\n }\n\n deferred.resolve();\n\n if(set.size) {\n this.deleteThrottled();\n }\n }, THROTTLE_TIME, false);\n\n this.getThrottled = throttle(async() => {\n const keys = Array.from(this.getPromises.keys());\n\n // const perf = performance.now();\n this.storage.get(keys as string[]).then((values) => {\n for(let i = 0, length = keys.length; i < length; ++i) {\n const key = keys[i];\n const deferred = this.getPromises.get(key);\n if(deferred) {\n // @ts-ignore\n deferred.resolve(this.cache[key] = values[i]);\n this.getPromises.delete(key);\n }\n }\n\n // console.log('[AS]: get time', keys, performance.now() - perf);\n }, (error: ApiError) => {\n const ignoreErrors: Set = new Set(['NO_ENTRY_FOUND', 'STORAGE_OFFLINE']);\n if(!ignoreErrors.has(error.type)) {\n this.useStorage = false;\n console.error('[AS]: get error:', error, keys, storeName);\n }\n\n for(let i = 0, length = keys.length; i < length; ++i) {\n const key = keys[i];\n const deferred = this.getPromises.get(key);\n if(deferred) {\n // deferred.reject(error);\n deferred.resolve(undefined);\n this.getPromises.delete(key);\n }\n }\n }).finally(() => {\n if(this.getPromises.size) {\n this.getThrottled();\n }\n });\n }, THROTTLE_TIME, false);\n }\n\n public isAvailable() {\n return this.useStorage;\n }\n\n public getCache() {\n return this.cache;\n }\n\n public getFromCache(key: T) {\n return this.cache[key];\n }\n\n public setToCache(key: keyof Storage, value: Storage[typeof key]) {\n return this.cache[key] = value;\n }\n\n public async get(key: T, useCache = true): Promise {\n if(this.cache.hasOwnProperty(key) && useCache) {\n return this.getFromCache(key);\n } else if(this.useStorage) {\n const r = this.getPromises.get(key);\n if(r) return r as any;\n\n const p = deferredPromise();\n this.getPromises.set(key, p as any);\n\n this.getThrottled();\n\n return p;\n }/* else {\n throw 'something went wrong';\n } */\n }\n\n public getAll() {\n return this.storage.getAll().catch(() => []);\n }\n\n public set(obj: Partial, onlyLocal = false) {\n // console.log('storageSetValue', obj, callback, arguments);\n\n const canUseStorage = this.useStorage && !onlyLocal && !this.savingFreezed;\n for(const key in obj) {\n if(obj.hasOwnProperty(key)) {\n const value = obj[key];\n this.setToCache(key, value);\n\n // let perf = /* DEBUG */false ? performance.now() : 0;\n // value = JSON.stringify(value);\n\n // if(perf) {\n // let elapsedTime = performance.now() - perf;\n // if(elapsedTime > 10) {\n // console.warn('LocalStorage set: stringify time by JSON.stringify:', elapsedTime, key);\n // }\n // }\n\n /* perf = performance.now();\n value = stringify(value);\n console.log('LocalStorage set: stringify time by own stringify:', performance.now() - perf); */\n\n if(canUseStorage) {\n this.keysToSet.add(key);\n this.keysToDelete.delete(key);\n this.saveThrottled();\n }\n }\n }\n\n return canUseStorage ? this.saveDeferred : Promise.resolve();\n }\n\n public delete(key: keyof Storage, saveLocal = false) {\n /* if(!this.cache.hasOwnProperty(key)) {\n return;\n } */\n\n // ! it is needed here\n key = '' + (key as string);\n\n if(!saveLocal) {\n delete this.cache[key];\n }\n\n if(this.useStorage) {\n this.keysToSet.delete(key);\n this.keysToDelete.add(key);\n this.deleteThrottled();\n }\n\n return this.useStorage ? this.deleteDeferred : Promise.resolve();\n }\n\n public clear(saveLocal = false) {\n if(!saveLocal) {\n for(const i in this.cache) {\n delete this.cache[i];\n }\n }\n\n return this.storage.clear().catch(noop);\n }\n\n public static toggleStorage(enabled: boolean, clearWrite: boolean) {\n return Promise.all(this.STORAGES.map((storage) => {\n storage.useStorage = enabled;\n\n if(!IS_WORKER || !clearWrite) {\n return;\n }\n\n if(!enabled) {\n storage.keysToSet.clear();\n storage.keysToDelete.clear();\n storage.getPromises.forEach((deferred) => deferred.resolve(undefined));\n storage.getPromises.clear();\n return storage.clear(true);\n } else {\n return storage.set(storage.cache);\n }\n })).catch(noop);\n }\n\n public static freezeSaving>(callback: () => any, names: T['stores'][number]['name'][]) {\n this.STORAGES.forEach((storage) => storage.savingFreezed = true);\n try {\n callback();\n } catch(err) {\n console.error('freezeSaving callback error:', err);\n }\n this.STORAGES.forEach((storage) => storage.savingFreezed = false);\n }\n\n /* public deleteDatabase() {\n return IDBStorage.deleteDatabase().catch(noop);\n } */\n}\n\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.AppStorage = AppStorage);\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Database} from '.';\nimport type {IDBIndex} from '../../lib/files/idb';\n\nconst DATABASE_STATE: Database<'session' | 'stickerSets' | 'users' | 'chats' | 'messages' | 'dialogs'> = {\n name: 'tweb',\n version: 7,\n stores: [{\n name: 'session'\n }, {\n name: 'stickerSets'\n }, {\n name: 'users'\n }, {\n name: 'chats'\n }, {\n name: 'dialogs'\n // indexes: [\n // ...(new Array(20 + 2).fill(0)).map((_, idx) => {\n // const name = `index_${idx}`;\n // const index: IDBIndex = {\n // indexName: name,\n // keyPath: name,\n // objectParameters: {}\n // };\n\n // return index\n // })\n // ]\n }, {\n name: 'messages'\n }]\n};\n\nexport default DATABASE_STATE;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {ChatSavedPosition} from './appManagers/appImManager';\nimport type {AppDraftsManager} from './appManagers/appDraftsManager';\nimport type {State} from '../config/state';\nimport {MOUNT_CLASS_TO} from '../config/debug';\nimport {LangPackDifference} from '../layer';\nimport AppStorage from './storage';\nimport DATABASE_STATE from '../config/databases/state';\n\nclass StateStorage extends AppStorage<{\n chatPositions: {\n [peerId_threadId: string]: ChatSavedPosition\n },\n langPack: LangPackDifference,\n drafts: AppDraftsManager['drafts'],\n user_auth: any, // support old webk format\n} & State, typeof DATABASE_STATE> {\n constructor() {\n super(DATABASE_STATE, 'session');\n }\n}\n\nconst stateStorage = new StateStorage();\nMOUNT_CLASS_TO.stateStorage = stateStorage;\nexport default stateStorage;\n","export const DEEP_PATH_JOINER = '\\x01';\n\nexport function joinDeepPath(...args: any[]) {\n return args.join(DEEP_PATH_JOINER);\n}\n\nexport function splitDeepPath(path: string) {\n return path.split(DEEP_PATH_JOINER);\n}\n\nexport default function setDeepProperty(\n object: any,\n key: string,\n value?: any,\n deleteIfUndefined?: boolean\n) {\n const splitted = key.split(DEEP_PATH_JOINER);\n const length = splitted.length;\n let lastObject = object/* , fractalPart: string */; // fix fractal number key\n for(let i = 0; i < length - 1; ++i) {\n const part = splitted[i];\n // if(fractalPart) {\n // part = fractalPart + '.' + part;\n // fractalPart = undefined;\n // } else if(!Number.isNaN(+part)) {\n // fractalPart = part;\n // continue;\n // }\n lastObject = lastObject[part] ??= {};\n }\n\n const lastKey = /* (fractalPart ? fractalPart + '.' : '') + */splitted[length - 1];\n if(value === undefined && deleteIfUndefined/* && arguments.length === 2 */) {\n delete lastObject[lastKey];\n } else {\n lastObject[lastKey] = value;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {State} from '../../config/state';\nimport rootScope from '../rootScope';\nimport stateStorage from '../stateStorage';\nimport setDeepProperty, {splitDeepPath} from '../../helpers/object/setDeepProperty';\nimport MTProtoMessagePort from '../mtproto/mtprotoMessagePort';\n\nexport class AppStateManager {\n private state: State = {} as any;\n private storage = stateStorage;\n\n // ! for mtproto worker use only\n public newVersion: string;\n public oldVersion: string;\n public userId: UserId;\n\n public getState() {\n return Promise.resolve(this.state);\n }\n\n public setByKey(key: string, value: any) {\n setDeepProperty(this.state, key, value);\n\n const first = splitDeepPath(key)[0] as keyof State;\n if(first === 'settings') {\n rootScope.dispatchEvent('settings_updated', {key, value, settings: this.state.settings});\n }\n\n return this.pushToState(first, this.state[first]);\n }\n\n public pushToState(key: T, value: State[T], direct = true, onlyLocal?: boolean) {\n if(direct) {\n this.state[key] = value;\n }\n\n return this.setKeyValueToStorage(key, value, onlyLocal);\n }\n\n public setKeyValueToStorage(key: T, value: State[T] = this.state[key], onlyLocal?: boolean) {\n MTProtoMessagePort.getInstance().invokeVoid('mirror', {name: 'state', key, value});\n\n return this.storage.set({\n [key]: value\n }, onlyLocal);\n }\n\n /* public resetState() {\n for(let i in this.state) {\n // @ts-ignore\n this.state[i] = false;\n }\n sessionStorage.set(this.state).then(() => {\n location.reload();\n });\n } */\n}\n\nconst appStateManager = new AppStateManager();\nexport default appStateManager;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {TrueDcId} from '../types';\n\nexport const MAIN_DOMAINS = ['web.telegram.org', 'webk.telegram.org'];\nexport const DEFAULT_BACKGROUND_SLUG = 'pattern';\n\nconst threads = Math.min(4, navigator.hardwareConcurrency ?? 4);\n\nconst App = {\n id: +import.meta.env.VITE_API_ID,\n hash: import.meta.env.VITE_API_HASH,\n version: import.meta.env.VITE_VERSION,\n versionFull: import.meta.env.VITE_VERSION_FULL,\n build: +import.meta.env.VITE_BUILD,\n langPackVersion: '5.5.8',\n langPack: 'webk',\n langPackCode: 'en',\n domains: MAIN_DOMAINS,\n baseDcId: 2 as TrueDcId,\n isMainDomain: MAIN_DOMAINS.includes(location.hostname),\n suffix: 'K',\n threads,\n cryptoWorkers: threads\n};\n\nif(App.isMainDomain) { // use Webogram credentials then\n App.id = 2496;\n App.hash = '8da85b0d5bfe62527e5b244c209159c3';\n}\n\nexport default App;\n","export default function pause(ms: number) {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type MTPNetworker from '../networker';\nimport type {DcId, TrueDcId} from '../../../types';\nimport pause from '../../../helpers/schedulers/pause';\nimport {logger, LogTypes} from '../../logger';\nimport MTTransport from './transport';\nimport Modes from '../../../config/modes';\nimport transportController from './controller';\n// import networkStats from '../networkStats';\n\nconst TEST_DROPPING_REQUESTS: TrueDcId = undefined;\n\nexport default class HTTP implements MTTransport {\n public networker: MTPNetworker;\n private log: ReturnType;\n\n private pending: Array<{\n resolve: (body: Uint8Array) => void,\n reject: any,\n body: Uint8Array\n }> = [];\n private releasing: boolean;\n\n public connected: boolean;\n private destroyed: boolean;\n private debug: boolean;\n\n constructor(protected dcId: DcId, protected url: string, logSuffix: string) {\n this.debug = Modes.debug && false;\n\n let logTypes = LogTypes.Error | LogTypes.Log;\n if(this.debug) logTypes |= LogTypes.Debug;\n\n this.log = logger(`HTTP-${dcId}` + logSuffix, logTypes);\n this.log('constructor');\n\n this.connected = false;\n }\n\n public _send(body: Uint8Array, mode?: RequestMode) {\n this.debug && this.log.debug('-> body length to send:', body.length);\n\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 30e3);\n\n // networkStats.addSent(this.dcId, length);\n return fetch(this.url, {method: 'POST', body, mode, signal: controller.signal}).then(async(response) => {\n if(response.status !== 200 && !mode) {\n response.arrayBuffer().then((buffer) => {\n this.log.error('not 200',\n new TextDecoder('utf-8').decode(new Uint8Array(buffer)));\n });\n\n throw response;\n }\n\n this.setConnected(true);\n\n // * test resending by dropping random request\n if(TEST_DROPPING_REQUESTS && this.dcId === TEST_DROPPING_REQUESTS && Math.random() > .5) {\n controller.abort();\n throw 'test';\n }\n\n const buffer = await response.arrayBuffer();\n // networkStats.addReceived(this.dcId, buffer.byteLength);\n return new Uint8Array(buffer);\n }).catch((err) => {\n this.setConnected(false);\n throw err;\n }).finally(() => {\n clearTimeout(timeout);\n });\n }\n\n private setConnected(connected: boolean) {\n if(this.connected === connected || this.destroyed) {\n return;\n }\n\n this.connected = connected;\n\n if(import.meta.env.VITE_MTPROTO_AUTO && Modes.multipleTransports) {\n transportController.setTransportValue('https', connected);\n }\n }\n\n public destroy() {\n this.setConnected(false);\n this.destroyed = true;\n this.pending.forEach((pending) => pending.reject());\n this.pending.length = 0;\n }\n\n public send(body: Uint8Array) {\n if(this.networker) {\n return this._send(body);\n } else {\n const promise = new Promise((resolve, reject) => {\n this.pending.push({resolve, reject, body});\n });\n\n this.releasePending();\n\n return promise;\n }\n }\n\n private async releasePending() {\n if(this.releasing) return;\n\n this.releasing = true;\n // this.log('-> messages to send:', this.pending.length);\n for(let i = 0; i < this.pending.length; ++i) {\n const pending = this.pending[i];\n const {body, resolve} = pending;\n\n try {\n const result = await this._send(body);\n resolve(result);\n this.pending.splice(i, 1);\n } catch(err) {\n this.log.error('Send plain request error:', err);\n await pause(5000);\n }\n\n --i;\n }\n\n this.releasing = false;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {logger, LogTypes} from '../../logger';\nimport Modes from '../../../config/modes';\nimport EventListenerBase from '../../../helpers/eventListenerBase';\nimport {MTConnection} from './transport';\n\nconst TEST_NO_WEBSOCKET = false;\n\n// let closeSocketBefore = Date.now() + 30e3;\n// let closeSocketAfter = Date.now() + 10e3;\n\nexport default class Socket extends EventListenerBase<{\n open: () => void,\n message: (buffer: ArrayBuffer) => any,\n close: () => void,\n}> implements MTConnection {\n private ws: WebSocket;\n private log: ReturnType;\n private debug = Modes.debug && false;\n\n constructor(protected dcId: number, protected url: string, logSuffix: string) {\n super();\n\n if(TEST_NO_WEBSOCKET) {\n this.url = url = 'wss://localhost:8081';\n }\n\n let logTypes = LogTypes.Error | LogTypes.Log;\n if(this.debug) logTypes |= LogTypes.Debug;\n this.log = logger(`WS-${dcId}` + logSuffix, logTypes);\n this.log('constructor');\n this.connect();\n\n return this;\n }\n\n private removeListeners() {\n if(!this.ws) {\n return;\n }\n\n this.ws.removeEventListener('open', this.handleOpen);\n this.ws.removeEventListener('close', this.handleClose);\n this.ws.removeEventListener('error', this.handleError);\n this.ws.removeEventListener('message', this.handleMessage);\n this.ws = undefined;\n }\n\n private connect() {\n this.ws = new WebSocket(this.url, 'binary');\n this.ws.binaryType = 'arraybuffer';\n this.ws.addEventListener('open', this.handleOpen);\n this.ws.addEventListener('close', this.handleClose);\n this.ws.addEventListener('error', this.handleError);\n this.ws.addEventListener('message', this.handleMessage);\n\n // if(Date.now() < closeSocketBefore) {\n // if(Date.now() >= closeSocketAfter) {\n // this.ws.close();\n // }\n }\n\n public close() {\n if(!this.ws) {\n return;\n }\n\n this.log('close execution');\n\n try {\n this.ws.close();\n } catch(err) {\n\n }\n this.handleClose();\n }\n\n private handleOpen = () => {\n this.log('opened');\n\n this.debug && this.log.debug('sending init packet');\n this.dispatchEvent('open');\n };\n\n private handleError = (e: Event) => {\n this.log.error('handleError', e);\n this.close();\n };\n\n private handleClose = (e?: CloseEvent) => {\n this.log('closed', e/* , this.pending, this.ws.bufferedAmount */);\n\n this.removeListeners();\n this.dispatchEvent('close');\n };\n\n private handleMessage = (event: MessageEvent) => {\n this.debug && this.log.debug('<-', 'handleMessage', /* event, */event.data.byteLength);\n\n this.dispatchEvent('message', event.data as ArrayBuffer);\n };\n\n public send = (body: Uint8Array) => {\n this.debug && this.log.debug('-> body length to send:', body.length);\n\n this.ws.send(body);\n };\n}\n","export default function randomize(arr: T) {\n if(crypto && 'getRandomValues' in crypto) {\n crypto.getRandomValues(arr);\n } else {\n throw new Error('NO_SECURE_RANDOM');\n }\n\n return arr;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// import aesjs from 'aes-js';\nimport randomize from '../../../helpers/array/randomize';\nimport cryptoMessagePort from '../../crypto/cryptoMessagePort';\nimport {Codec} from './codec';\n\n/*\n@cryptography/aes не работает с массивами которые не кратны 4, поэтому использую intermediate а не abridged\n*/\nexport default class Obfuscation {\n /* private enc: aesjs.ModeOfOperation.ModeOfOperationCTR;\n private dec: aesjs.ModeOfOperation.ModeOfOperationCTR; */\n\n private id: number;\n private idPromise: Promise;\n private process: (data: Uint8Array, operation: 'encrypt' | 'decrypt') => ReturnType;\n\n // private cryptoEncKey: CryptoKey;\n // private cryptoDecKey: CryptoKey;\n // private cryptoKey: CryptoKey;\n\n // private encIv: Uint8Array;\n // private decIv: Uint8Array;\n\n // private decIvCounter: Counter;\n\n public async init(codec: Codec) {\n if(this.idPromise !== undefined) {\n this.release();\n }\n\n const initPayload = new Uint8Array(64);\n randomize(initPayload);\n\n while(true) {\n const val = (initPayload[3] << 24) | (initPayload[2] << 16) | (initPayload[1] << 8) | initPayload[0];\n const val2 = (initPayload[7] << 24) | (initPayload[6] << 16) | (initPayload[5] << 8) | initPayload[4];\n if(initPayload[0] !== 0xef &&\n val !== 0x44414548 &&\n val !== 0x54534f50 &&\n val !== 0x20544547 &&\n val !== 0x4954504f &&\n val !== 0xeeeeeeee &&\n val !== 0xdddddddd &&\n val2 !== 0x00000000) {\n // initPayload[56] = initPayload[57] = initPayload[58] = initPayload[59] = transport;\n break;\n }\n randomize(initPayload);\n }\n\n // //////////////////////initPayload.subarray(60, 62).hex = dcId;\n /* initPayload.set(new Uint8Array([161, 208, 67, 71, 118, 109, 20, 111, 113, 255, 134, 10, 159, 241, 7, 44, 217, 82, 187, 76, 108, 131, 200, 186, 33, 57, 177, 251, 52, 34, 18, 54, 65, 105, 37, 89, 38, 20, 47, 168, 126, 181, 24, 138, 212, 68, 60, 150, 225, 37, 181, 4, 201, 50, 72, 151, 168, 143, 204, 169, 81, 187, 241, 23]));\n console.log('initPayload', initPayload); */\n\n const reversedPayload = initPayload.slice().reverse();\n\n const encKey = initPayload.slice(8, 40);\n const encIv = /* this.encIv = */initPayload.slice(40, 56);\n const decKey = reversedPayload.slice(8, 40);\n const decIv = /* this.decIv = */reversedPayload.slice(40, 56);\n\n /* this.enc = new aesjs.ModeOfOperation.ctr(encKey, new aesjs.Counter(encIv as any));\n this.dec = new aesjs.ModeOfOperation.ctr(decKey, new aesjs.Counter(decIv as any)); */\n\n // console.log('encKey', encKey.hex, encIv.hex);\n // console.log('decKey', decKey.hex, decIv.hex);\n\n const idPromise = this.idPromise = cryptoMessagePort.invokeCrypto('aes-ctr-prepare', {\n encKey,\n encIv,\n decKey,\n decIv\n });\n\n this.process = async(data, operation) => {\n await idPromise;\n return this._process(data, operation);\n };\n\n this.id = await idPromise;\n\n this.process = this._process;\n\n // this.decIvCounter = new Counter(this.decIv);\n /* const key = this.cryptoEncKey = await subtle.importKey(\n 'raw',\n encKey,\n {name: 'AES-CTR'},\n false,\n ['encrypt']\n ); */\n\n // this.cryptoDecKey = await subtle.importKey(\n // 'raw',\n // decKey,\n // {name: 'AES-CTR'},\n // false,\n // ['encrypt']\n // );\n\n // this.cryptoKey = await subtle.importKey(\n // 'raw',\n // encKey,\n // {name: 'AES-CTR'},\n // false,\n // ['encrypt', 'decrypt']\n // );\n\n initPayload.set(codec.obfuscateTag, 56);\n const encrypted = await this.encode(initPayload.slice());\n\n // console.log('encrypted', encrypted);\n\n initPayload.set(encrypted.slice(56, 64), 56);\n\n return initPayload;\n }\n\n /* public encode(payload: Uint8Array) {\n let startTime = performance.now();\n let res = this.enc.encrypt(payload);\n let time = performance.now() - startTime;\n\n try {\n startTime = performance.now();\n let arr = this.encNew.encrypt(payload);\n //let resNew = bytesFromWords({words: arr, sigBytes: arr.length});\n let resNew = new Uint8Array(bytesFromWordss(arr));\n let time2 = performance.now() - startTime;\n console.log('Obfuscation: encode comparison:', res, arr, resNew, res.hex === resNew.hex, time2 < time);\n } catch(err) {\n console.error('Obfuscation: error:', err);\n }\n\n return res;\n }\n\n public decode(payload: Uint8Array) {\n let res = this.dec.encrypt(payload);\n\n try {\n let arr = this.decNew.decrypt(payload);\n //let resNew = bytesFromWords({words: arr, sigBytes: arr.length});\n let resNew = new Uint8Array(bytesFromWordss(arr));\n console.log('Obfuscation: decode comparison:', res, arr, resNew, res.hex === resNew.hex);\n } catch(err) {\n console.error('Obfuscation: error:', err);\n }\n\n return res;\n } */\n\n private _process = (data: Uint8Array, operation: 'encrypt' | 'decrypt') => {\n return cryptoMessagePort.invokeCryptoNew({\n method: 'aes-ctr-process',\n args: [{id: this.id, data, operation}],\n transfer: [data.buffer]\n }) as Promise;\n };\n\n public encode(payload: Uint8Array) {\n /* return subtle.encrypt({\n name: 'AES-CTR',\n counter: this.encIv,\n length: 64\n },\n this.cryptoEncKey,\n payload\n ); */\n return this.process(payload, 'encrypt');\n }\n\n public decode(payload: Uint8Array) {\n return this.process(payload, 'decrypt');\n }\n\n public async release() {\n const idPromise = this.idPromise;\n if(idPromise === undefined) {\n return;\n }\n\n this.id = undefined;\n this.idPromise = undefined;\n\n const id = await idPromise;\n cryptoMessagePort.invokeCrypto('aes-ctr-destroy', id);\n }\n\n public destroy() {\n this.release();\n }\n\n // public encode(payload: Uint8Array) {\n // let res = this.encNew.encrypt(payload);\n // let bytes = new Uint8Array(bytesFromWordss(res));\n\n // return bytes;\n // }\n\n // public async decode(payload: Uint8Array) {\n // const counter = this.decIvCounter.counter.slice();\n // this.decIvCounter.increment();\n\n // const n: ArrayBuffer = await subtle.encrypt({\n // name: 'AES-CTR',\n // counter: counter,\n // length: 64\n // },\n // this.cryptoDecKey,\n // payload\n // );\n\n // const decoded = this.decNew.update(payload);\n\n // console.log('decode', bytesToHex(decoded), 'new', n, bytesToHex(new Uint8Array(n)));\n\n // return decoded;\n // }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// import { bytesFromHex, addPadding } from \"../../bin_utils\";\nimport {Codec} from './codec';\n\nclass AbridgedPacketCodec implements Codec {\n public tag = 0xef;\n public obfuscateTag = new Uint8Array([this.tag, this.tag, this.tag, this.tag]);\n\n public encodePacket(data: Uint8Array) {\n const len = data.byteLength >> 2;\n let header: Uint8Array;\n if(len < 127) {\n header = new Uint8Array([len]);\n } else { // Length: payload length, divided by four, and encoded as 3 length bytes (little endian)\n // header = new Uint8Array([0x7f, ...addPadding(bytesFromHex(len.toString(16)).reverse(), 3, true)/* .reverse() */]);\n header = new Uint8Array([0x7f, len & 0xFF, (len >> 8) & 0xFF, (len >> 16) & 0xFF]);\n // console.log('got nobody cause im braindead', header, len);\n }\n\n return header.concat(data);\n // return new Uint8Array([...header, ...data]);\n }\n\n public readPacket(data: Uint8Array) {\n let length = data[0];\n if(length >= 127) { // 0x7f\n length = data[1] | (data[2] << 8) | (data[3] << 16);\n\n return data.slice(4, length << 2 + 1); // need +1\n }\n\n return data.slice(1, length << 2 + 1); // need +1\n }\n}\n\nexport default new AbridgedPacketCodec();\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport enum ConnectionStatus {\n Connected,\n Connecting,\n Closed,\n TimedOut\n};\n\nexport type ConnectionStatusChange = {\n _: 'networkerStatus',\n status: ConnectionStatus,\n dcId: number,\n name: string,\n isFileNetworker: boolean,\n isFileDownload: boolean,\n isFileUpload: boolean,\n retryAt?: number\n};\n","export default function bytesToHex(bytes: ArrayLike) {\n const length = bytes.length;\n const arr: string[] = new Array(length);\n for(let i = 0; i < length; ++i) {\n arr[i] = (bytes[i] < 16 ? '0' : '') + (bytes[i] || 0).toString(16);\n }\n return arr.join('');\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Modes from '../../../config/modes';\nimport {logger, LogTypes} from '../../logger';\nimport MTPNetworker from '../networker';\nimport Obfuscation from './obfuscation';\nimport MTTransport, {MTConnection, MTConnectionConstructable} from './transport';\n// import intermediatePacketCodec from './intermediate';\nimport abridgedPacketCodec from './abridged';\n// import paddedIntermediatePacketCodec from './padded';\nimport {ConnectionStatus} from '../connectionStatus';\nimport transportController from './controller';\nimport bytesToHex from '../../../helpers/bytes/bytesToHex';\n// import networkStats from '../networkStats';\nimport ctx from '../../../environment/ctx';\n\nexport default class TcpObfuscated implements MTTransport {\n private codec = abridgedPacketCodec;\n private obfuscation = new Obfuscation();\n public networker: MTPNetworker;\n\n private pending: Array> = [];\n\n private debug = Modes.debug && false/* true */;\n private log: ReturnType;\n public connected = false;\n private lastCloseTime: number;\n public connection: MTConnection;\n\n private autoReconnect = true;\n private reconnectTimeout: number;\n private releasingPending: boolean;\n\n // private debugPayloads: MTPNetworker['debugRequests'] = [];\n\n constructor(\n private Connection: MTConnectionConstructable,\n private dcId: number,\n private url: string,\n private logSuffix: string,\n private retryTimeout: number\n ) {\n let logTypes = LogTypes.Error | LogTypes.Log;\n if(this.debug) logTypes |= LogTypes.Debug;\n this.log = logger(`TCP-${dcId}` + logSuffix, logTypes);\n this.log('constructor');\n\n this.connect();\n }\n\n private onOpen = async() => {\n this.connected = true;\n\n if(import.meta.env.VITE_MTPROTO_AUTO && Modes.multipleTransports) {\n transportController.setTransportOpened('websocket');\n }\n\n const initPayload = await this.obfuscation.init(this.codec);\n if(!this.connected) {\n return;\n }\n\n this.connection.send(initPayload);\n\n if(this.networker) {\n this.pending.length = 0; // ! clear queue and reformat messages to container, because if sending simultaneously 10+ messages, connection will die\n this.networker.onTransportOpen();\n }/* else {\n for(const pending of this.pending) {\n if(pending.encoded && pending.body) {\n pending.encoded = this.encodeBody(pending.body);\n }\n }\n } */\n\n setTimeout(() => {\n this.releasePending();\n }, 0);\n };\n\n private onMessage = async(buffer: ArrayBuffer) => {\n // networkStats.addReceived(this.dcId, buffer.byteLength);\n\n const time = Date.now();\n let data = await this.obfuscation.decode(new Uint8Array(buffer));\n data = this.codec.readPacket(data);\n\n if(this.networker) { // authenticated!\n // this.pending = this.pending.filter((p) => p.body); // clear pending\n\n this.networker.onTransportData(data, time);\n\n // this.dd();\n return;\n }\n\n // console.log('got hex:', data.hex);\n const pending = this.pending.shift();\n if(!pending) {\n this.debug && this.log.debug('no pending for res:', bytesToHex(data));\n return;\n }\n\n pending.resolve(data);\n };\n\n private onClose = () => {\n this.clear();\n\n let needTimeout: number, retryAt: number;\n if(this.autoReconnect) {\n const time = Date.now();\n const diff = time - this.lastCloseTime;\n needTimeout = !isNaN(diff) && diff < this.retryTimeout ? this.retryTimeout - diff : 0;\n retryAt = time + needTimeout;\n }\n\n if(this.networker) {\n this.networker.setConnectionStatus(ConnectionStatus.Closed, retryAt);\n this.pending.length = 0;\n }\n\n if(this.autoReconnect) {\n this.log('will try to reconnect after timeout:', needTimeout / 1000);\n this.reconnectTimeout = ctx.setTimeout(this.reconnect, needTimeout);\n } else {\n this.log('reconnect isn\\'t needed');\n }\n };\n\n public clear() {\n if(import.meta.env.VITE_MTPROTO_AUTO && Modes.multipleTransports) {\n if(this.connected) {\n transportController.setTransportClosed('websocket');\n }\n }\n\n this.connected = false;\n\n if(this.connection) {\n this.connection.removeEventListener('open', this.onOpen);\n this.connection.removeEventListener('close', this.onClose);\n this.connection.removeEventListener('message', this.onMessage);\n this.connection = undefined;\n }\n }\n\n /**\n * invoke only when closed\n */\n public reconnect = () => {\n if(this.reconnectTimeout !== undefined) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = undefined;\n }\n\n if(this.connection) {\n return;\n }\n\n this.log('trying to reconnect...');\n this.lastCloseTime = Date.now();\n\n if(!this.networker) {\n for(const pending of this.pending) {\n if(pending.bodySent) {\n pending.bodySent = false;\n }\n }\n } else {\n this.networker.setConnectionStatus(ConnectionStatus.Connecting);\n }\n\n this.connect();\n }\n\n public forceReconnect() {\n this.close();\n this.reconnect();\n }\n\n public destroy() {\n this.setAutoReconnect(false);\n this.close();\n\n if(this.obfuscation) {\n this.obfuscation.destroy();\n }\n\n this.pending.forEach((pending) => {\n if(pending.reject) {\n pending.reject();\n }\n });\n this.pending.length = 0;\n }\n\n public close() {\n const connection = this.connection;\n if(connection) {\n const connected = this.connected;\n this.clear();\n if(connected) { // wait for buffered messages if they are there\n connection.addEventListener('message', this.onMessage);\n connection.addEventListener('close', () => {\n connection.removeEventListener('message', this.onMessage);\n }, {once: true});\n connection.close();\n }\n }\n }\n\n /**\n * Will connect if enable and disconnected \\\n * Will reset reconnection timeout if disable\n */\n public setAutoReconnect(enable: boolean) {\n this.autoReconnect = enable;\n\n if(!enable) {\n if(this.reconnectTimeout !== undefined) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = undefined;\n }\n } else if(!this.connection && this.reconnectTimeout === undefined) {\n this.reconnect();\n }\n }\n\n private connect() {\n if(this.connection) {\n this.close();\n }\n\n this.connection = new this.Connection(this.dcId, this.url, this.logSuffix);\n this.connection.addEventListener('open', this.onOpen);\n this.connection.addEventListener('close', this.onClose);\n this.connection.addEventListener('message', this.onMessage);\n }\n\n public changeUrl(url: string) {\n if(this.url === url) {\n return;\n }\n\n this.url = url;\n this.forceReconnect();\n }\n\n private encodeBody(body: Uint8Array) {\n const toEncode = this.codec.encodePacket(body);\n\n // this.log('send before obf:', /* body.hex, nonce.hex, */ toEncode.hex);\n const encoded = this.obfuscation.encode(toEncode);\n // this.log('send after obf:', enc.hex);\n\n return encoded;\n }\n\n public send(body: Uint8Array) {\n this.debug && this.log.debug('-> body length to pending:', body.length);\n\n const encoded: typeof body = /* this.connected ? this.encodeBody(body) : */undefined;\n\n // return;\n\n if(this.networker) {\n this.pending.push({body, encoded});\n this.releasePending();\n } else {\n const promise = new Promise((resolve, reject) => {\n this.pending.push({resolve, reject, body, encoded});\n });\n\n this.releasePending();\n\n return promise;\n }\n }\n\n private async releasePending(/* tt = false */) {\n if(!this.connected || this.releasingPending) {\n // this.connect();\n return;\n }\n\n this.releasingPending = true;\n\n /* if(!tt) {\n this.releasePendingDebounced();\n return;\n } */\n\n // this.log('-> messages to send:', this.pending.length);\n let length = this.pending.length;\n let sent = false;\n // for(let i = length - 1; i >= 0; --i) {\n for(let i = 0; i < length; ++i) {\n const pending = this.pending[i];\n if(!pending) {\n break;\n }\n\n const {body, bodySent} = pending;\n if(body && !bodySent) {\n // this.debugPayloads.push({before: body.slice(), after: enc});\n\n this.debug && this.log.debug('-> body length to send:', body.length);\n\n // if(!encoded) {\n // encoded = pending.encoded = this.encodeBody(body);\n // }\n\n const encoded = pending.encoded ??= await this.encodeBody(body);\n if(!this.connected) {\n break;\n }\n\n // networkStats.addSent(this.dcId, encoded.byteLength);\n this.connection.send(encoded);\n\n if(!pending.resolve) { // remove if no response needed\n this.pending.splice(i--, 1);\n length--;\n } else {\n pending.bodySent = true;\n }\n\n sent = true;\n // delete pending.body;\n }\n }\n\n this.releasingPending = undefined;\n\n if(this.pending.length && sent) {\n this.releasePending();\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport MTTransport, {MTConnectionConstructable} from './transports/transport';\nimport Modes from '../../config/modes';\nimport App from '../../config/app';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport HTTP from './transports/http';\nimport Socket from './transports/websocket';\nimport TcpObfuscated from './transports/tcpObfuscated';\nimport {IS_WEB_WORKER} from '../../helpers/context';\nimport {DcId} from '../../types';\nimport {getEnvironment} from '../../environment/utils';\nimport SocketProxied from './transports/socketProxied';\n\nexport type TransportType = 'websocket' | 'https' | 'http';\nexport type ConnectionType = 'client' | 'download' | 'upload';\ntype Servers = {\n [transportType in TransportType]: {\n [connectionType in ConnectionType]: {\n [dcId: DcId]: MTTransport[]\n }\n }\n};\n\nconst TEST_SUFFIX = Modes.test ? '_test' : '';\nconst PREMIUM_SUFFIX = '_premium';\nconst RETRY_TIMEOUT_CLIENT = 3000;\nconst RETRY_TIMEOUT_DOWNLOAD = 3000;\n\nexport function getTelegramConnectionSuffix(connectionType: ConnectionType) {\n return connectionType === 'client' ? '' : '-1';\n}\n\nexport function constructTelegramWebSocketUrl(dcId: DcId, connectionType: ConnectionType, premium?: boolean) {\n if(!import.meta.env.VITE_MTPROTO_HAS_WS) {\n return;\n }\n\n const suffix = getTelegramConnectionSuffix(connectionType);\n const path = connectionType !== 'client' ? 'apiws' + TEST_SUFFIX + (premium ? PREMIUM_SUFFIX : '') : ('apiws' + TEST_SUFFIX);\n const chosenServer = `wss://${App.suffix.toLowerCase()}ws${dcId}${suffix}.web.telegram.org/${path}`;\n\n return chosenServer;\n}\n\nexport class DcConfigurator {\n private sslSubdomains = ['pluto', 'venus', 'aurora', 'vesta', 'flora'];\n\n private dcOptions = Modes.test ?\n [\n {id: 1, host: '149.154.175.10', port: 80},\n {id: 2, host: '149.154.167.40', port: 80},\n {id: 3, host: '149.154.175.117', port: 80}\n ] :\n [\n {id: 1, host: '149.154.175.50', port: 80},\n {id: 2, host: '149.154.167.50', port: 80},\n {id: 3, host: '149.154.175.100', port: 80},\n {id: 4, host: '149.154.167.91', port: 80},\n {id: 5, host: '149.154.171.5', port: 80}\n ];\n\n public chosenServers: Servers = {} as any;\n\n private transportSocket = (dcId: DcId, connectionType: ConnectionType, premium?: boolean) => {\n if(!import.meta.env.VITE_MTPROTO_HAS_WS) {\n return;\n }\n\n const chosenServer = constructTelegramWebSocketUrl(dcId, connectionType, premium);\n const logSuffix = connectionType === 'upload' ? '-U' : connectionType === 'download' ? '-D' : '';\n\n const retryTimeout = connectionType === 'client' ? RETRY_TIMEOUT_CLIENT : RETRY_TIMEOUT_DOWNLOAD;\n\n let oooohLetMeLive: MTConnectionConstructable;\n if(import.meta.env.VITE_MTPROTO_SW || !import.meta.env.VITE_SAFARI_PROXY_WEBSOCKET) {\n oooohLetMeLive = Socket;\n } else {\n oooohLetMeLive = (getEnvironment().IS_SAFARI && IS_WEB_WORKER && typeof(SocketProxied) !== 'undefined') /* || true */ ? SocketProxied : Socket;\n }\n\n return new TcpObfuscated(oooohLetMeLive, dcId, chosenServer, logSuffix, retryTimeout);\n };\n\n private transportHTTP = (dcId: DcId, connectionType: ConnectionType, premium?: boolean) => {\n if(!import.meta.env.VITE_MTPROTO_HAS_HTTP) {\n return;\n }\n\n let chosenServer: string;\n if(Modes.ssl || !Modes.http) {\n const suffix = getTelegramConnectionSuffix(connectionType);\n const subdomain = this.sslSubdomains[dcId - 1] + suffix;\n const path = Modes.test ? 'apiw_test1' : 'apiw1';\n chosenServer = 'https://' + subdomain + '.web.telegram.org/' + path;\n } else {\n for(const dcOption of this.dcOptions) {\n if(dcOption.id === dcId) {\n chosenServer = 'http://' + dcOption.host + (dcOption.port !== 80 ? ':' + dcOption.port : '') + '/apiw1';\n break;\n }\n }\n }\n\n const logSuffix = connectionType === 'upload' ? '-U' : connectionType === 'download' ? '-D' : '';\n return new HTTP(dcId, chosenServer, logSuffix);\n };\n\n public chooseServer(\n dcId: DcId,\n connectionType: ConnectionType = 'client',\n transportType: TransportType = Modes.transport,\n reuse = true,\n premium?: boolean\n ) {\n /* if(transportType === 'websocket' && !Modes.multipleConnections) {\n connectionType = 'client';\n } */\n\n if(!this.chosenServers.hasOwnProperty(transportType)) {\n this.chosenServers[transportType] = {\n client: {},\n download: {},\n upload: {}\n };\n }\n\n const servers = this.chosenServers[transportType][connectionType];\n\n if(!(dcId in servers)) {\n servers[dcId] = [];\n }\n\n const transports = servers[dcId];\n\n if(!transports.length || !reuse/* || (upload && transports.length < 1) */) {\n let transport: MTTransport;\n\n if(import.meta.env.VITE_MTPROTO_HAS_WS && import.meta.env.VITE_MTPROTO_HAS_HTTP) {\n transport = (transportType === 'websocket' ? this.transportSocket : this.transportHTTP)(dcId, connectionType, premium);\n } else if(!import.meta.env.VITE_MTPROTO_HTTP) {\n transport = this.transportSocket(dcId, connectionType, premium);\n } else {\n transport = this.transportHTTP(dcId, connectionType, premium);\n }\n\n if(!transport) {\n console.error('No chosenServer!', dcId);\n return null;\n }\n\n if(reuse) {\n transports.push(transport);\n }\n\n return transport;\n }\n\n return transports[0];\n }\n\n public static removeTransport(obj: any, transport: T) {\n for(const transportType in obj) {\n // @ts-ignore\n for(const connectionType in obj[transportType]) {\n // @ts-ignore\n for(const dcId in obj[transportType][connectionType]) {\n // @ts-ignore\n const transports: T[] = obj[transportType][connectionType][dcId];\n indexOfAndSplice(transports, transport);\n }\n }\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport App from '../../../config/app';\nimport deferredPromise from '../../../helpers/cancellablePromise';\nimport EventListenerBase from '../../../helpers/eventListenerBase';\nimport pause from '../../../helpers/schedulers/pause';\nimport {TransportType, DcConfigurator} from '../dcConfigurator';\nimport type HTTP from './http';\nimport type TcpObfuscated from './tcpObfuscated';\nimport MTTransport from './transport';\n\nexport class MTTransportController extends EventListenerBase<{\n change: (opened: MTTransportController['opened']) => void,\n transport: (type: TransportType) => void\n}> {\n private opened: Map;\n private transports: {[k in TransportType]?: MTTransport};\n private pinging: boolean;\n private dcConfigurator: DcConfigurator;\n\n constructor() {\n super(true);\n\n this.opened = new Map();\n /* this.addEventListener('change', (opened) => {\n this.dispatchEvent('transport', opened.get('websocket') || !opened.get('https') ? 'websocket' : 'https');\n }); */\n\n this.addEventListener('change', (opened) => {\n if(!opened.get('websocket')) {\n this.waitForWebSocket();\n }\n });\n\n // setTimeout(() => {\n // this.waitForWebSocket();\n // }, 200); // wait for first transport so won't have delay for first WS\n }\n\n public async pingTransports() {\n const dcConfigurator = this.dcConfigurator ??= new DcConfigurator();\n const timeout = 2000;\n const transports: {[k in TransportType]?: MTTransport} = this.transports = {\n https: dcConfigurator.chooseServer(App.baseDcId, 'client', 'https', false),\n websocket: dcConfigurator.chooseServer(App.baseDcId, 'client', 'websocket', false)\n };\n\n const httpPromise = deferredPromise();\n ((this.transports.https as HTTP)._send(new Uint8Array(), 'no-cors') as any as Promise)\n .then(() => httpPromise.resolve(true), () => httpPromise.resolve(false));\n setTimeout(() => httpPromise.resolve(false), timeout);\n\n const websocketPromise = deferredPromise();\n const socket = transports.websocket as TcpObfuscated;\n socket.setAutoReconnect(false);\n socket.connection.addEventListener('close', () => websocketPromise.resolve(false), {once: true});\n socket.connection.addEventListener('open', () => websocketPromise.resolve(true), {once: true});\n setTimeout(() => {\n if(websocketPromise.isFulfilled || websocketPromise.isRejected) {\n return;\n }\n\n if(socket.connection) {\n socket.connection.close();\n }\n\n websocketPromise.resolve(false);\n }, timeout);\n\n const [isHttpAvailable, isWebSocketAvailable] = await Promise.all([httpPromise, websocketPromise]);\n\n for(const transportType in transports) {\n const transport = transports[transportType as TransportType];\n transport.destroy();\n }\n\n const result = {\n https: isHttpAvailable || this.opened.get('https') > 0,\n websocket: isWebSocketAvailable || this.opened.get('websocket') > 0\n };\n\n // result.websocket = false;\n return result;\n }\n\n public async waitForWebSocket() {\n if(this.pinging) return;\n this.pinging = true;\n\n while(true) {\n const {https, websocket} = await this.pingTransports();\n if(https || websocket) {\n this.dispatchEvent('transport', websocket || !https ? 'websocket' : 'https');\n }\n\n if(websocket) {\n break;\n }\n\n await pause(10000);\n }\n\n this.pinging = false;\n }\n\n public setTransportValue(type: TransportType, value: boolean) {\n let length = this.opened.get(type) || 0;\n length += value ? 1 : -1;\n\n this.opened.set(type, length);\n this.dispatchEvent('change', this.opened);\n }\n\n public setTransportOpened(type: TransportType) {\n return this.setTransportValue(type, true);\n }\n\n public setTransportClosed(type: TransportType) {\n return this.setTransportValue(type, false);\n }\n}\n\nconst transportController = new MTTransportController();\nexport default transportController;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport deferredPromise, {CancellablePromise} from '../../../../helpers/cancellablePromise';\nimport type {StoragesResults} from './loadStorages';\n\nconst RESET_STORAGES_PROMISE: CancellablePromise<{\n storages: Set,\n callback: () => void\n}> = deferredPromise();\nexport default RESET_STORAGES_PROMISE;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {WebPushApiManager} from '../mtproto/webPushApiManager';\nimport type {PushNotificationObject} from './push';\nimport type {MyUploadFile} from '../mtproto/apiFileManager';\nimport SuperMessagePort from '../mtproto/superMessagePort';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport {InputFileLocation, InputGroupCall} from '../../layer';\nimport {GroupCallRtmpState} from '../appManagers/appGroupCallsManager';\n\nexport type ServicePushPingTaskPayload = {\n localNotifications: boolean,\n lang: {\n push_action_mute1d: string\n push_action_settings: string\n push_message_nopreview: string\n },\n settings: WebPushApiManager['settings']\n};\n\nexport type ServiceRequestFilePartTaskPayload = {\n docId: DocId,\n dcId: number,\n offset: number,\n limit: number\n};\n\nexport type ServiceRequestRtmpPartTaskPayload = {\n request: InputFileLocation.inputGroupCallStream,\n dcId: number,\n};\n\nexport type ServiceDownloadTaskPayload = {\n headers: any,\n id: string\n};\n\nexport type ServiceEvent = {\n port: (payload: void, source: MessageEventSource, event: MessageEvent) => void\n};\n\nexport default class ServiceMessagePort extends SuperMessagePort<{\n // from main thread to service worker\n notificationsClear: () => void,\n toggleStorages: (payload: {enabled: boolean, clearWrite: boolean}) => void,\n pushPing: (payload: ServicePushPingTaskPayload, source: MessageEventSource, event: MessageEvent) => void,\n hello: (payload: void, source: MessageEventSource, event: MessageEvent) => void,\n shownNotification: (payload: string) => void,\n leaveRtmpCall: (payload: [Long, boolean]) => void,\n toggleStreamInUse: (payload: {url: string, inUse: boolean}) => void,\n\n // from mtproto worker\n download: (payload: ServiceDownloadTaskPayload) => void,\n downloadChunk: (payload: {id: ServiceDownloadTaskPayload['id'], chunk: Uint8Array}) => void\n downloadFinalize: (payload: ServiceDownloadTaskPayload['id']) => void,\n downloadCancel: (payload: ServiceDownloadTaskPayload['id']) => void\n}, {\n // to main thread\n pushClick: (payload: PushNotificationObject) => void,\n hello: (payload: void, source: MessageEventSource) => void,\n share: (payload: ShareData) => void,\n rtmpStreamTime: (payload: {callId: Long, time: string}) => void,\n rtmpStreamDestroyed: (payload: Long) => void,\n downloadRequestReceived: (payload: string) => void,\n\n // to mtproto worker\n requestFilePart: (payload: ServiceRequestFilePartTaskPayload) => MaybePromise,\n cancelFilePartRequests: (payload: DocId) => void,\n requestRtmpState: (payload: InputGroupCall) => MaybePromise,\n requestRtmpPart: (payload: ServiceRequestRtmpPartTaskPayload) => MaybePromise,\n} & ServiceEvent, Master> {\n constructor() {\n super('SERVICE');\n\n MOUNT_CLASS_TO && (MOUNT_CLASS_TO.serviceMessagePort = this);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Awaited} from '../types';\n\nexport default function callbackify, R>(\n smth: T,\n callback: (result: Awaited) => R\n): T extends Promise ? Promise> : R {\n if(smth instanceof Promise) {\n // @ts-ignore\n return smth.then(callback);\n } else {\n return callback(smth as any) as any;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {CryptoMessagePort} from '../crypto/cryptoMessagePort';\nimport type {ApiFileManager} from '../mtproto/apiFileManager';\nimport type {ApiManager} from '../mtproto/apiManager';\nimport type {Authorizer} from '../mtproto/authorizer';\nimport type {DcConfigurator} from '../mtproto/dcConfigurator';\nimport type {NetworkerFactory} from '../mtproto/networkerFactory';\nimport type {PasswordManager} from '../mtproto/passwordManager';\nimport type {ReferenceDatabase} from '../mtproto/referenceDatabase';\nimport type {TimeManager} from '../mtproto/timeManager';\nimport type {RootScope} from '../rootScope';\nimport type DialogsStorage from '../storages/dialogs';\nimport type FiltersStorage from '../storages/filters';\nimport type PeersStorage from '../storages/peers';\nimport type ThumbsStorage from '../storages/thumbs';\nimport type {ApiUpdatesManager} from './apiUpdatesManager';\nimport type {AppAvatarsManager} from './appAvatarsManager';\nimport type {AppCallsManager} from './appCallsManager';\nimport type {AppChatsManager} from './appChatsManager';\nimport type {AppDocsManager} from './appDocsManager';\nimport type {AppDraftsManager} from './appDraftsManager';\nimport type {AppEmojiManager} from './appEmojiManager';\nimport type {AppGroupCallsManager} from './appGroupCallsManager';\nimport type {AppInlineBotsManager} from './appInlineBotsManager';\nimport type {AppMessagesIdsManager} from './appMessagesIdsManager';\nimport type {AppMessagesManager} from './appMessagesManager';\nimport type {AppNotificationsManager} from './appNotificationsManager';\nimport type AppPaymentsManager from './appPaymentsManager';\nimport type {AppPeersManager} from './appPeersManager';\nimport type {AppPhotosManager} from './appPhotosManager';\nimport type {AppPollsManager} from './appPollsManager';\nimport type {AppPrivacyManager} from './appPrivacyManager';\nimport type {AppProfileManager} from './appProfileManager';\nimport type {AppReactionsManager} from './appReactionsManager';\nimport type {AppStateManager} from './appStateManager';\nimport type {AppStickersManager} from './appStickersManager';\nimport type {AppStoragesManager} from './appStoragesManager';\nimport type {AppUsersManager} from './appUsersManager';\nimport type AppWebDocsManager from './appWebDocsManager';\nimport type {AppWebPagesManager} from './appWebPagesManager';\nimport type AppAttachMenuBotsManager from './appAttachMenuBotsManager';\nimport type AppSeamlessLoginManager from './appSeamlessLoginManager';\nimport type AppThemesManager from './appThemesManager';\nimport type AppUsernamesManager from './appThemesManager';\nimport type AppChatInvitesManager from './appChatInvitesManager';\nimport type AppStoriesManager from './appStoriesManager';\nimport type AppBotsManager from './appBotsManager';\nimport type AppBoostsManager from './appBoostsManager';\nimport type AppStatisticsManager from './appStatisticsManager';\nimport type AppBusinessManager from './appBusinessManager';\nimport type AppTranslationsManager from './appTranslationsManager';\nimport type {AppManagers} from './managers';\nimport AppGifsManager from './appGifsManager';\n\nexport class AppManager {\n protected appPeersManager: AppPeersManager;\n protected appChatsManager: AppChatsManager;\n protected appDocsManager: AppDocsManager;\n protected appPhotosManager: AppPhotosManager;\n protected appPollsManager: AppPollsManager;\n protected appUsersManager: AppUsersManager;\n protected appWebPagesManager: AppWebPagesManager;\n protected appDraftsManager: AppDraftsManager;\n protected appProfileManager: AppProfileManager;\n protected appNotificationsManager: AppNotificationsManager;\n protected apiUpdatesManager: ApiUpdatesManager;\n protected appAvatarsManager: AppAvatarsManager;\n protected appGroupCallsManager: AppGroupCallsManager;\n protected appCallsManager: AppCallsManager;\n protected appReactionsManager: AppReactionsManager;\n protected appMessagesManager: AppMessagesManager;\n protected appMessagesIdsManager: AppMessagesIdsManager;\n protected appPrivacyManager: AppPrivacyManager;\n protected appInlineBotsManager: AppInlineBotsManager;\n protected appStickersManager: AppStickersManager;\n protected referenceDatabase: ReferenceDatabase;\n protected appEmojiManager: AppEmojiManager;\n protected dialogsStorage: DialogsStorage;\n protected filtersStorage: FiltersStorage;\n protected apiManager: ApiManager;\n // protected apiManager: ApiManagerProxy;\n protected passwordManager: PasswordManager;\n protected cryptoWorker: CryptoMessagePort;\n protected apiFileManager: ApiFileManager;\n protected peersStorage: PeersStorage;\n protected thumbsStorage: ThumbsStorage;\n protected networkerFactory: NetworkerFactory;\n protected rootScope: RootScope;\n protected authorizer: Authorizer;\n protected dcConfigurator: DcConfigurator;\n protected timeManager: TimeManager;\n protected appStoragesManager: AppStoragesManager;\n protected appStateManager: AppStateManager;\n protected appWebDocsManager: AppWebDocsManager;\n protected appPaymentsManager: AppPaymentsManager;\n protected appAttachMenuBotsManager: AppAttachMenuBotsManager;\n protected appSeamlessLoginManager: AppSeamlessLoginManager;\n protected appThemesManager: AppThemesManager;\n protected appUsernamesManager: AppUsernamesManager;\n protected appChatInvitesManager: AppChatInvitesManager;\n protected appStoriesManager: AppStoriesManager;\n protected appBotsManager: AppBotsManager;\n protected appBoostsManager: AppBoostsManager;\n protected appStatisticsManager: AppStatisticsManager;\n protected appBusinessManager: AppBusinessManager;\n protected appTranslationsManager: AppTranslationsManager;\n protected appGifsManager: AppGifsManager;\n\n public clear: (init?: boolean) => void;\n\n public setManagers(managers: AppManagers) {\n Object.assign(this, managers);\n // this.after();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Chat} from '../../../../layer';\nimport type {Dialog} from '../../appMessagesManager';\nimport type {User} from '../../appUsersManager';\nimport DATABASE_STATE from '../../../../config/databases/state';\nimport AppStorage from '../../../storage';\n\nexport type StoragesStorages = {\n users: AppStorage, typeof DATABASE_STATE>,\n chats: AppStorage, typeof DATABASE_STATE>,\n dialogs: AppStorage, typeof DATABASE_STATE>\n};\n\nexport default function createStorages() {\n const names: (keyof StoragesStorages)[] = ['users', 'chats', 'dialogs'];\n const storages: StoragesStorages = {} as any;\n for(const name of names) {\n // @ts-ignore\n storages[name] = new AppStorage(DATABASE_STATE, name);\n }\n\n return storages;\n}\n","import {logger} from '../lib/logger';\nimport dT from './dT';\n\nexport function recordPromise>(promise: T, description: string, log?: ReturnType | Console) {\n const perf = performance.now();\n (log || console).warn(dT(), 'start', description);\n promise.then(() => {\n (log || console).warn(dT(), 'end', description, performance.now() - perf);\n });\n return promise;\n}\n\nexport function recordPromiseBound(log: ReturnType | Console) {\n return (...args: [Parameters[0], Parameters[1]]) => {\n return recordPromise(...args, log);\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Chat} from '../../../../layer';\nimport type {Dialog} from '../../appMessagesManager';\nimport type {User} from '../../appUsersManager';\nimport type {StoragesStorages} from './createStorages';\nimport {recordPromiseBound} from '../../../../helpers/recordPromise';\nimport {Awaited} from '../../../../types';\nimport {logger} from '../../../logger';\nimport RESET_STORAGES_PROMISE from './resetStoragesPromise';\nimport noop from '../../../../helpers/noop';\n\nexport type StoragesResults = Awaited>;\n\nasync function loadStoragesInner(storages: StoragesStorages) {\n const recordPromise = recordPromiseBound(logger('STORAGES-LOADER'));\n const storagesKeys = Object.keys(storages) as Array;\n const storagesPromises: Promise[] = storagesKeys.map((key) => {\n const promise = storages[key].getAll();\n return recordPromise(promise, 'storage ' + (key as any as string));\n });\n\n const storagesResults: {\n users: User[],\n chats: Chat[],\n dialogs: Dialog[]\n } = {} as any;\n const arr = await Promise.all(storagesPromises);\n for(let i = 0, length = storagesKeys.length; i < length; ++i) {\n storagesResults[storagesKeys[i]] = arr[i] as any;\n }\n\n arr.splice(0, storagesKeys.length);\n\n // * will reset storages before setting the new state\n const {storages: resetStorages, callback} = await RESET_STORAGES_PROMISE;\n if(resetStorages.size) {\n const clearPromises: Promise[] = [];\n for(const key of resetStorages) {\n storagesResults[key].length = 0;\n clearPromises.push(storages[key].clear());\n }\n\n resetStorages.clear();\n await Promise.all(clearPromises).catch(noop);\n }\n\n callback();\n\n return storagesResults;\n}\n\nlet promise: ReturnType;\nexport default function loadStorages(storages: StoragesStorages) {\n return promise ??= loadStoragesInner(storages);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {logger} from '../logger';\nimport {AppManager} from './manager';\nimport createStorages from './utils/storages/createStorages';\nimport loadStorages from './utils/storages/loadStorages';\n\nexport class AppStoragesManager extends AppManager {\n private storages: ReturnType;\n\n // private loadPromise: CancellablePromise;\n\n private log: ReturnType;\n\n constructor() {\n super();\n\n this.log = logger('STORAGES');\n this.storages = createStorages();\n // this.loadPromise = deferredPromise();\n }\n\n public loadStorages() {\n return loadStorages(this.storages);\n // loadStorages(this.storages).then((storagesResults) => {\n // this.loadPromise.resolve(storagesResults);\n // });\n\n // return this.loadPromise;\n }\n\n // public setStoragesResults(storagesResults: StoragesResults) {\n // this.loadPromise.resolve(storagesResults);\n // }\n\n public async loadStorage(name: T) {\n return this.loadStorages().then((storagesResults) => {\n return {\n storage: this.storages[name],\n results: storagesResults[name]\n };\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {AccountPassword, AccountUpdatePasswordSettings, InputCheckPasswordSRP, PasswordKdfAlgo} from '../../layer';\nimport randomize from '../../helpers/array/randomize';\nimport {AppManager} from '../appManagers/manager';\n\nexport class PasswordManager extends AppManager {\n public getState(): Promise {\n return this.apiManager.invokeApi('account.getPassword').then((result) => {\n return result;\n });\n }\n\n public updateSettings(settings: {\n hint?: string,\n email?: string,\n newPassword?: string,\n currentPassword?: string\n } = {}) {\n // state = Object.assign({}, state);\n // state.new_algo = Object.assign({}, state.new_algo);\n\n return this.getState().then((state) => {\n let currentHashPromise: Promise;\n let newHashPromise: Promise;\n const params: AccountUpdatePasswordSettings = {\n password: null,\n new_settings: {\n _: 'account.passwordInputSettings',\n hint: settings.hint,\n email: settings.email\n }\n };\n\n if(settings.currentPassword) {\n currentHashPromise = this.cryptoWorker.invokeCrypto('computeSRP', settings.currentPassword, state, false) as any;\n } else {\n currentHashPromise = Promise.resolve({\n _: 'inputCheckPasswordEmpty'\n });\n }\n\n // * https://core.telegram.org/api/srp#setting-a-new-2fa-password, but still there is a mistake, TDesktop passes 'new_algo' everytime\n const newAlgo = state.new_algo as PasswordKdfAlgo.passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow;\n const salt1 = new Uint8Array(newAlgo.salt1.length + 32);\n randomize(salt1);\n salt1.set(newAlgo.salt1, 0);\n newAlgo.salt1 = salt1;\n\n if(settings.newPassword) {\n newHashPromise = this.cryptoWorker.invokeCrypto('computeSRP', settings.newPassword, state, true) as any;\n } else {\n newHashPromise = Promise.resolve(new Uint8Array());\n }\n\n return Promise.all([currentHashPromise, newHashPromise]).then((hashes) => {\n params.password = hashes[0];\n params.new_settings.new_algo = newAlgo;\n params.new_settings.new_password_hash = hashes[1];\n params.new_settings.hint ??= '';\n\n return this.apiManager.invokeApi('account.updatePasswordSettings', params);\n });\n });\n }\n\n public getInputCheckPassword(password: string, state: AccountPassword) {\n return this.cryptoWorker.invokeCrypto('computeSRP', password, state, false) as Promise;\n }\n\n public check(password: string, state: AccountPassword, options: any = {}) {\n return this.getInputCheckPassword(password, state).then((inputCheckPassword) => {\n // console.log('SRP', inputCheckPassword);\n return this.apiManager.invokeApi('auth.checkPassword', {\n password: inputCheckPassword as InputCheckPasswordSRP.inputCheckPasswordSRP\n }, options).then((auth) => {\n if(auth._ === 'auth.authorization') {\n this.apiManager.setUser(auth.user);\n }\n\n return auth;\n });\n });\n }\n\n public confirmPasswordEmail(code: string) {\n return this.apiManager.invokeApi('account.confirmPasswordEmail', {code});\n }\n\n public resendPasswordEmail() {\n return this.apiManager.invokeApi('account.resendPasswordEmail');\n }\n\n public cancelPasswordEmail() {\n return this.apiManager.invokeApi('account.cancelPasswordEmail');\n }\n\n /* public requestRecovery(options: any = {}) {\n return apiManager.invokeApi('auth.requestPasswordRecovery', {}, options);\n }\n\n public recover(code: any, options: any = {}) {\n return apiManager.invokeApi('auth.recoverPassword', {\n code\n }, options);\n } */\n}\n","/**\n * ignores `undefined` properties\n */\nexport default function deepEqual(x: T, y: T, ignoreKeys?: (keyof T)[]): boolean {\n const ignoreSet = ignoreKeys && new Set(ignoreKeys);\n const okok = (obj: any) => Object.keys(obj).filter((key) => obj[key] !== undefined);\n const ok = ignoreKeys ? (obj: any) => okok(obj).filter((key) => !ignoreSet.has(key as any)) : okok,\n tx = typeof x,\n ty = typeof y;\n return x && y && tx === 'object' && tx === ty ? (\n ok(x).length === ok(y).length &&\n ok(x).every((key) => deepEqual((x as any)[key], (y as any)[key], ignoreKeys))\n ) : (x === y);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Photo, StoryItem, WallPaper} from '../../layer';\nimport {logger} from '../logger';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\nimport deepEqual from '../../helpers/object/deepEqual';\nimport {AppManager} from '../appManagers/manager';\nimport makeError from '../../helpers/makeError';\n\nexport type ReferenceContext =\n ReferenceContext.referenceContextProfilePhoto |\n ReferenceContext.referenceContextMessage |\n ReferenceContext.referenceContextEmojiesSounds |\n ReferenceContext.referenceContextReactions |\n ReferenceContext.referenceContextUserFull |\n ReferenceContext.referenceContextCustomEmoji |\n ReferenceContext.referenceContextAttachMenuBotIcon |\n ReferenceContext.referenceContextWallPaper |\n ReferenceContext.referenceContextStoryItem |\n ReferenceContext.referenceContextPremiumPromo |\n ReferenceContext.referenceContextWebPage |\n ReferenceContext.referenceContextBotApp |\n ReferenceContext.referenceContextChatInvite |\n ReferenceContext.referenceContextEffects |\n ReferenceContext.referenceContextStarsTransaction;\n\nexport namespace ReferenceContext {\n export type referenceContextProfilePhoto = {\n type: 'profilePhoto',\n peerId: PeerId\n };\n\n export type referenceContextMessage = {\n type: 'message',\n peerId: PeerId,\n messageId: number\n };\n\n export type referenceContextEmojiesSounds = {\n type: 'emojiesSounds'\n };\n\n export type referenceContextReactions = {\n type: 'reactions'\n };\n\n export type referenceContextUserFull = {\n type: 'userFull',\n userId: UserId\n };\n\n export type referenceContextCustomEmoji = {\n type: 'customEmoji',\n docId: DocId\n };\n\n export type referenceContextAttachMenuBotIcon = {\n type: 'attachMenuBotIcon',\n botId: BotId\n };\n\n export type referenceContextWallPaper = {\n type: 'wallPaper',\n wallPaperId: WallPaper['id']\n };\n\n export type referenceContextStoryItem = {\n type: 'storyItem',\n peerId: PeerId,\n storyId: StoryItem['id'],\n };\n\n export type referenceContextPremiumPromo = {\n type: 'premiumPromo'\n };\n\n export type referenceContextWebPage = {\n type: 'webPage',\n url: string\n };\n\n export type referenceContextBotApp = {\n type: 'botApp',\n botId: BotId,\n appName: string\n };\n\n export type referenceContextChatInvite = {\n type: 'chatInvite',\n hash: string\n };\n\n export type referenceContextEffects = {\n type: 'effects'\n };\n\n export type referenceContextStarsTransaction = {\n type: 'starsTransaction',\n peerId: PeerId,\n mid: number\n };\n}\n\nexport type ReferenceBytes = Photo.photo['file_reference'];\nexport type ReferenceContexts = Set;\n\n// type ReferenceBytes = Uint8Array;\n\nexport class ReferenceDatabase extends AppManager {\n private contexts: Map = new Map();\n // private references: Map = new Map();\n private links: {[hex: string]: ReferenceBytes} = {};\n private log = logger('RD', undefined, true);\n private refreshEmojiesSoundsPromise: Promise;\n\n // constructor() {\n // super();\n\n // apiManager.addTaskListener('refreshReference', (task: RefreshReferenceTask) => {\n // const originalPayload = task.payload;\n\n // assumeType(task);\n // task.originalPayload = originalPayload;\n\n // this.refreshReference(originalPayload).then((bytes) => {\n // task.payload = bytes;\n // }, (err) => {\n // task.error = err;\n // }).then(() => apiManager.postMessage(task));\n // });\n // }\n\n public saveContext(reference: ReferenceBytes, context: ReferenceContext, contexts?: ReferenceContexts) {\n [contexts, reference] = this.getContexts(reference);\n if(!contexts) {\n contexts = new Set();\n this.contexts.set(reference, contexts);\n }\n\n this.links[bytesToHex(reference)] = reference;\n for(const _context of contexts) {\n if(deepEqual(_context, context)) {\n return;\n }\n }\n\n contexts.add(context);\n }\n\n public getReferenceByLink(reference: ReferenceBytes) {\n return this.links[bytesToHex(reference)];\n }\n\n public getContexts(reference: ReferenceBytes): [ReferenceContexts, ReferenceBytes] {\n const contexts = this.contexts.get(reference) || (reference = this.getReferenceByLink(reference) || reference, this.contexts.get(reference));\n return [contexts, reference];\n }\n\n public getContext(reference: ReferenceBytes): [ReferenceContext, ReferenceBytes] {\n const contexts = this.getContexts(reference);\n return contexts[0] ? [contexts[0].values().next().value, contexts[1]] : undefined;\n }\n\n public deleteContext(reference: ReferenceBytes, context: ReferenceContext, contexts?: ReferenceContexts) {\n [contexts, reference] = this.getContexts(reference);\n if(contexts) {\n for(const _context of contexts) {\n if(deepEqual(_context, context)) {\n contexts.delete(_context);\n if(!contexts.size) {\n this.contexts.delete(reference);\n delete this.links[bytesToHex(reference)];\n }\n return true;\n }\n }\n }\n\n return false;\n }\n\n public refreshReference(reference: ReferenceBytes, context?: ReferenceContext): Promise {\n this.log('refreshReference: start', reference.slice(), context);\n if(!context) {\n const c = this.getContext(reference);\n if(!c) {\n this.log('refreshReference: got no context for reference:', reference.slice());\n return Promise.reject('NO_CONTEXT');\n }\n\n [context, reference] = c;\n }\n\n let promise: Promise;\n switch(context?.type) {\n case 'message': {\n promise = this.appMessagesManager.reloadMessages(context.peerId, context.messageId, true);\n break;\n // .then(() => {\n // console.log('FILE_REFERENCE_EXPIRED: got message', context, appMessagesManager.getMessage((context as ReferenceContext.referenceContextMessage).messageId).media, reference);\n // });\n }\n\n case 'emojiesSounds': {\n promise = this.refreshEmojiesSoundsPromise || this.appStickersManager.getAnimatedEmojiSounds(true).then(() => {\n this.refreshEmojiesSoundsPromise = undefined;\n });\n break;\n }\n\n case 'userFull': {\n promise = Promise.resolve(this.appProfileManager.getProfile(context.userId, true));\n break;\n }\n\n case 'customEmoji': {\n promise = this.appEmojiManager.getCustomEmojiDocuments([context.docId]);\n break;\n }\n\n case 'attachMenuBotIcon': {\n promise = this.appAttachMenuBotsManager.getAttachMenuBot(context.botId, true) as any;\n break;\n }\n\n case 'wallPaper': {\n promise = this.appThemesManager.getWallPaperById(context.wallPaperId);\n break;\n }\n\n case 'storyItem': {\n promise = Promise.resolve(this.appStoriesManager.getStoryById(context.peerId, context.storyId, true));\n break;\n }\n\n case 'premiumPromo': {\n promise = Promise.resolve(this.appPaymentsManager.getPremiumPromo(true));\n break;\n }\n\n case 'webPage': {\n promise = Promise.resolve(this.appWebPagesManager.getWebPage(context.url));\n break;\n }\n\n case 'botApp': {\n promise = Promise.resolve(this.appAttachMenuBotsManager.getBotApp(context.botId, context.appName));\n break;\n }\n\n case 'chatInvite': {\n promise = Promise.resolve(this.appChatInvitesManager.checkChatInvite(context.hash));\n break;\n }\n\n case 'effects': {\n promise = Promise.resolve(this.appReactionsManager.getAvailableEffects(true));\n break;\n }\n\n default: {\n this.log.warn('refreshReference: not implemented context', context);\n return Promise.reject();\n }\n }\n\n const hex = bytesToHex(reference);\n this.log('refreshReference: refreshing reference:', hex);\n return promise.then(() => {\n const newHex = bytesToHex(reference);\n this.log('refreshReference: refreshed, reference before:', hex, 'after:', newHex);\n if(hex !== newHex) {\n return reference;\n }\n\n this.deleteContext(reference, context);\n\n const newContext = this.getContext(reference);\n if(newContext) {\n return this.refreshReference(reference, newContext[0]);\n }\n\n this.log.error('refreshReference: no new context, reference before:', hex, 'after:', newHex, context);\n\n throw makeError('NO_NEW_CONTEXT');\n });\n }\n\n /* public replaceReference(oldReference: ReferenceBytes, newReference: ReferenceBytes) {\n const contexts = this.contexts.get(oldReference);\n if(contexts) {\n this.contexts.delete(oldReference);\n this.contexts.set(newReference, contexts);\n }\n } */\n}\n","export default function tsNow(seconds?: true) {\n const t = Date.now();\n return seconds ? t / 1000 | 0 : t;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\n// From https://raw.githubusercontent.com/FGRibreau/latenize/master/latinize_map.js\nconst LatinizeMap: {[k: string]: string} = {'Á': 'A', 'Ă': 'A', 'Ắ': 'A', 'Ặ': 'A', 'Ằ': 'A', 'Ẳ': 'A', 'Ẵ': 'A', 'Ǎ': 'A', 'Â': 'A', 'Ấ': 'A', 'Ậ': 'A', 'Ầ': 'A', 'Ẩ': 'A', 'Ẫ': 'A', 'Ä': 'A', 'Ǟ': 'A', 'Ȧ': 'A', 'Ǡ': 'A', 'Ạ': 'A', 'Ȁ': 'A', 'À': 'A', 'Ả': 'A', 'Ȃ': 'A', 'Ā': 'A', 'Ą': 'A', 'Å': 'A', 'Ǻ': 'A', 'Ḁ': 'A', 'Ⱥ': 'A', 'Ã': 'A', 'Ꜳ': 'AA', 'Æ': 'AE', 'Ǽ': 'AE', 'Ǣ': 'AE', 'Ꜵ': 'AO', 'Ꜷ': 'AU', 'Ꜹ': 'AV', 'Ꜻ': 'AV', 'Ꜽ': 'AY', 'Ḃ': 'B', 'Ḅ': 'B', 'Ɓ': 'B', 'Ḇ': 'B', 'Ƀ': 'B', 'Ƃ': 'B', 'Ć': 'C', 'Č': 'C', 'Ç': 'C', 'Ḉ': 'C', 'Ĉ': 'C', 'Ċ': 'C', 'Ƈ': 'C', 'Ȼ': 'C', 'Ď': 'D', 'Ḑ': 'D', 'Ḓ': 'D', 'Ḋ': 'D', 'Ḍ': 'D', 'Ɗ': 'D', 'Ḏ': 'D', 'Dz': 'D', 'Dž': 'D', 'Đ': 'D', 'Ƌ': 'D', 'DZ': 'DZ', 'DŽ': 'DZ', 'É': 'E', 'Ĕ': 'E', 'Ě': 'E', 'Ȩ': 'E', 'Ḝ': 'E', 'Ê': 'E', 'Ế': 'E', 'Ệ': 'E', 'Ề': 'E', 'Ể': 'E', 'Ễ': 'E', 'Ḙ': 'E', 'Ë': 'E', 'Ė': 'E', 'Ẹ': 'E', 'Ȅ': 'E', 'È': 'E', 'Ẻ': 'E', 'Ȇ': 'E', 'Ē': 'E', 'Ḗ': 'E', 'Ḕ': 'E', 'Ę': 'E', 'Ɇ': 'E', 'Ẽ': 'E', 'Ḛ': 'E', 'Ꝫ': 'ET', 'Ḟ': 'F', 'Ƒ': 'F', 'Ǵ': 'G', 'Ğ': 'G', 'Ǧ': 'G', 'Ģ': 'G', 'Ĝ': 'G', 'Ġ': 'G', 'Ɠ': 'G', 'Ḡ': 'G', 'Ǥ': 'G', 'Ḫ': 'H', 'Ȟ': 'H', 'Ḩ': 'H', 'Ĥ': 'H', 'Ⱨ': 'H', 'Ḧ': 'H', 'Ḣ': 'H', 'Ḥ': 'H', 'Ħ': 'H', 'Í': 'I', 'Ĭ': 'I', 'Ǐ': 'I', 'Î': 'I', 'Ï': 'I', 'Ḯ': 'I', 'İ': 'I', 'Ị': 'I', 'Ȉ': 'I', 'Ì': 'I', 'Ỉ': 'I', 'Ȋ': 'I', 'Ī': 'I', 'Į': 'I', 'Ɨ': 'I', 'Ĩ': 'I', 'Ḭ': 'I', 'Ꝺ': 'D', 'Ꝼ': 'F', 'Ᵹ': 'G', 'Ꞃ': 'R', 'Ꞅ': 'S', 'Ꞇ': 'T', 'Ꝭ': 'IS', 'Ĵ': 'J', 'Ɉ': 'J', 'Ḱ': 'K', 'Ǩ': 'K', 'Ķ': 'K', 'Ⱪ': 'K', 'Ꝃ': 'K', 'Ḳ': 'K', 'Ƙ': 'K', 'Ḵ': 'K', 'Ꝁ': 'K', 'Ꝅ': 'K', 'Ĺ': 'L', 'Ƚ': 'L', 'Ľ': 'L', 'Ļ': 'L', 'Ḽ': 'L', 'Ḷ': 'L', 'Ḹ': 'L', 'Ⱡ': 'L', 'Ꝉ': 'L', 'Ḻ': 'L', 'Ŀ': 'L', 'Ɫ': 'L', 'Lj': 'L', 'Ł': 'L', 'LJ': 'LJ', 'Ḿ': 'M', 'Ṁ': 'M', 'Ṃ': 'M', 'Ɱ': 'M', 'Ń': 'N', 'Ň': 'N', 'Ņ': 'N', 'Ṋ': 'N', 'Ṅ': 'N', 'Ṇ': 'N', 'Ǹ': 'N', 'Ɲ': 'N', 'Ṉ': 'N', 'Ƞ': 'N', 'Nj': 'N', 'Ñ': 'N', 'NJ': 'NJ', 'Ó': 'O', 'Ŏ': 'O', 'Ǒ': 'O', 'Ô': 'O', 'Ố': 'O', 'Ộ': 'O', 'Ồ': 'O', 'Ổ': 'O', 'Ỗ': 'O', 'Ö': 'O', 'Ȫ': 'O', 'Ȯ': 'O', 'Ȱ': 'O', 'Ọ': 'O', 'Ő': 'O', 'Ȍ': 'O', 'Ò': 'O', 'Ỏ': 'O', 'Ơ': 'O', 'Ớ': 'O', 'Ợ': 'O', 'Ờ': 'O', 'Ở': 'O', 'Ỡ': 'O', 'Ȏ': 'O', 'Ꝋ': 'O', 'Ꝍ': 'O', 'Ō': 'O', 'Ṓ': 'O', 'Ṑ': 'O', 'Ɵ': 'O', 'Ǫ': 'O', 'Ǭ': 'O', 'Ø': 'O', 'Ǿ': 'O', 'Õ': 'O', 'Ṍ': 'O', 'Ṏ': 'O', 'Ȭ': 'O', 'Ƣ': 'OI', 'Ꝏ': 'OO', 'Ɛ': 'E', 'Ɔ': 'O', 'Ȣ': 'OU', 'Ṕ': 'P', 'Ṗ': 'P', 'Ꝓ': 'P', 'Ƥ': 'P', 'Ꝕ': 'P', 'Ᵽ': 'P', 'Ꝑ': 'P', 'Ꝙ': 'Q', 'Ꝗ': 'Q', 'Ŕ': 'R', 'Ř': 'R', 'Ŗ': 'R', 'Ṙ': 'R', 'Ṛ': 'R', 'Ṝ': 'R', 'Ȑ': 'R', 'Ȓ': 'R', 'Ṟ': 'R', 'Ɍ': 'R', 'Ɽ': 'R', 'Ꜿ': 'C', 'Ǝ': 'E', 'Ś': 'S', 'Ṥ': 'S', 'Š': 'S', 'Ṧ': 'S', 'Ş': 'S', 'Ŝ': 'S', 'Ș': 'S', 'Ṡ': 'S', 'Ṣ': 'S', 'Ṩ': 'S', 'ẞ': 'SS', 'Ť': 'T', 'Ţ': 'T', 'Ṱ': 'T', 'Ț': 'T', 'Ⱦ': 'T', 'Ṫ': 'T', 'Ṭ': 'T', 'Ƭ': 'T', 'Ṯ': 'T', 'Ʈ': 'T', 'Ŧ': 'T', 'Ɐ': 'A', 'Ꞁ': 'L', 'Ɯ': 'M', 'Ʌ': 'V', 'Ꜩ': 'TZ', 'Ú': 'U', 'Ŭ': 'U', 'Ǔ': 'U', 'Û': 'U', 'Ṷ': 'U', 'Ü': 'U', 'Ǘ': 'U', 'Ǚ': 'U', 'Ǜ': 'U', 'Ǖ': 'U', 'Ṳ': 'U', 'Ụ': 'U', 'Ű': 'U', 'Ȕ': 'U', 'Ù': 'U', 'Ủ': 'U', 'Ư': 'U', 'Ứ': 'U', 'Ự': 'U', 'Ừ': 'U', 'Ử': 'U', 'Ữ': 'U', 'Ȗ': 'U', 'Ū': 'U', 'Ṻ': 'U', 'Ų': 'U', 'Ů': 'U', 'Ũ': 'U', 'Ṹ': 'U', 'Ṵ': 'U', 'Ꝟ': 'V', 'Ṿ': 'V', 'Ʋ': 'V', 'Ṽ': 'V', 'Ꝡ': 'VY', 'Ẃ': 'W', 'Ŵ': 'W', 'Ẅ': 'W', 'Ẇ': 'W', 'Ẉ': 'W', 'Ẁ': 'W', 'Ⱳ': 'W', 'Ẍ': 'X', 'Ẋ': 'X', 'Ý': 'Y', 'Ŷ': 'Y', 'Ÿ': 'Y', 'Ẏ': 'Y', 'Ỵ': 'Y', 'Ỳ': 'Y', 'Ƴ': 'Y', 'Ỷ': 'Y', 'Ỿ': 'Y', 'Ȳ': 'Y', 'Ɏ': 'Y', 'Ỹ': 'Y', 'Ź': 'Z', 'Ž': 'Z', 'Ẑ': 'Z', 'Ⱬ': 'Z', 'Ż': 'Z', 'Ẓ': 'Z', 'Ȥ': 'Z', 'Ẕ': 'Z', 'Ƶ': 'Z', 'IJ': 'IJ', 'Œ': 'OE', 'ᴀ': 'A', 'ᴁ': 'AE', 'ʙ': 'B', 'ᴃ': 'B', 'ᴄ': 'C', 'ᴅ': 'D', 'ᴇ': 'E', 'ꜰ': 'F', 'ɢ': 'G', 'ʛ': 'G', 'ʜ': 'H', 'ɪ': 'I', 'ʁ': 'R', 'ᴊ': 'J', 'ᴋ': 'K', 'ʟ': 'L', 'ᴌ': 'L', 'ᴍ': 'M', 'ɴ': 'N', 'ᴏ': 'O', 'ɶ': 'OE', 'ᴐ': 'O', 'ᴕ': 'OU', 'ᴘ': 'P', 'ʀ': 'R', 'ᴎ': 'N', 'ᴙ': 'R', 'ꜱ': 'S', 'ᴛ': 'T', 'ⱻ': 'E', 'ᴚ': 'R', 'ᴜ': 'U', 'ᴠ': 'V', 'ᴡ': 'W', 'ʏ': 'Y', 'ᴢ': 'Z', 'á': 'a', 'ă': 'a', 'ắ': 'a', 'ặ': 'a', 'ằ': 'a', 'ẳ': 'a', 'ẵ': 'a', 'ǎ': 'a', 'â': 'a', 'ấ': 'a', 'ậ': 'a', 'ầ': 'a', 'ẩ': 'a', 'ẫ': 'a', 'ä': 'a', 'ǟ': 'a', 'ȧ': 'a', 'ǡ': 'a', 'ạ': 'a', 'ȁ': 'a', 'à': 'a', 'ả': 'a', 'ȃ': 'a', 'ā': 'a', 'ą': 'a', 'ᶏ': 'a', 'ẚ': 'a', 'å': 'a', 'ǻ': 'a', 'ḁ': 'a', 'ⱥ': 'a', 'ã': 'a', 'ꜳ': 'aa', 'æ': 'ae', 'ǽ': 'ae', 'ǣ': 'ae', 'ꜵ': 'ao', 'ꜷ': 'au', 'ꜹ': 'av', 'ꜻ': 'av', 'ꜽ': 'ay', 'ḃ': 'b', 'ḅ': 'b', 'ɓ': 'b', 'ḇ': 'b', 'ᵬ': 'b', 'ᶀ': 'b', 'ƀ': 'b', 'ƃ': 'b', 'ɵ': 'o', 'ć': 'c', 'č': 'c', 'ç': 'c', 'ḉ': 'c', 'ĉ': 'c', 'ɕ': 'c', 'ċ': 'c', 'ƈ': 'c', 'ȼ': 'c', 'ď': 'd', 'ḑ': 'd', 'ḓ': 'd', 'ȡ': 'd', 'ḋ': 'd', 'ḍ': 'd', 'ɗ': 'd', 'ᶑ': 'd', 'ḏ': 'd', 'ᵭ': 'd', 'ᶁ': 'd', 'đ': 'd', 'ɖ': 'd', 'ƌ': 'd', 'ı': 'i', 'ȷ': 'j', 'ɟ': 'j', 'ʄ': 'j', 'dz': 'dz', 'dž': 'dz', 'é': 'e', 'ĕ': 'e', 'ě': 'e', 'ȩ': 'e', 'ḝ': 'e', 'ê': 'e', 'ế': 'e', 'ệ': 'e', 'ề': 'e', 'ể': 'e', 'ễ': 'e', 'ḙ': 'e', 'ë': 'e', 'ė': 'e', 'ẹ': 'e', 'ȅ': 'e', 'è': 'e', 'ẻ': 'e', 'ȇ': 'e', 'ē': 'e', 'ḗ': 'e', 'ḕ': 'e', 'ⱸ': 'e', 'ę': 'e', 'ᶒ': 'e', 'ɇ': 'e', 'ẽ': 'e', 'ḛ': 'e', 'ꝫ': 'et', 'ḟ': 'f', 'ƒ': 'f', 'ᵮ': 'f', 'ᶂ': 'f', 'ǵ': 'g', 'ğ': 'g', 'ǧ': 'g', 'ģ': 'g', 'ĝ': 'g', 'ġ': 'g', 'ɠ': 'g', 'ḡ': 'g', 'ᶃ': 'g', 'ǥ': 'g', 'ḫ': 'h', 'ȟ': 'h', 'ḩ': 'h', 'ĥ': 'h', 'ⱨ': 'h', 'ḧ': 'h', 'ḣ': 'h', 'ḥ': 'h', 'ɦ': 'h', 'ẖ': 'h', 'ħ': 'h', 'ƕ': 'hv', 'í': 'i', 'ĭ': 'i', 'ǐ': 'i', 'î': 'i', 'ï': 'i', 'ḯ': 'i', 'ị': 'i', 'ȉ': 'i', 'ì': 'i', 'ỉ': 'i', 'ȋ': 'i', 'ī': 'i', 'į': 'i', 'ᶖ': 'i', 'ɨ': 'i', 'ĩ': 'i', 'ḭ': 'i', 'ꝺ': 'd', 'ꝼ': 'f', 'ᵹ': 'g', 'ꞃ': 'r', 'ꞅ': 's', 'ꞇ': 't', 'ꝭ': 'is', 'ǰ': 'j', 'ĵ': 'j', 'ʝ': 'j', 'ɉ': 'j', 'ḱ': 'k', 'ǩ': 'k', 'ķ': 'k', 'ⱪ': 'k', 'ꝃ': 'k', 'ḳ': 'k', 'ƙ': 'k', 'ḵ': 'k', 'ᶄ': 'k', 'ꝁ': 'k', 'ꝅ': 'k', 'ĺ': 'l', 'ƚ': 'l', 'ɬ': 'l', 'ľ': 'l', 'ļ': 'l', 'ḽ': 'l', 'ȴ': 'l', 'ḷ': 'l', 'ḹ': 'l', 'ⱡ': 'l', 'ꝉ': 'l', 'ḻ': 'l', 'ŀ': 'l', 'ɫ': 'l', 'ᶅ': 'l', 'ɭ': 'l', 'ł': 'l', 'lj': 'lj', 'ſ': 's', 'ẜ': 's', 'ẛ': 's', 'ẝ': 's', 'ḿ': 'm', 'ṁ': 'm', 'ṃ': 'm', 'ɱ': 'm', 'ᵯ': 'm', 'ᶆ': 'm', 'ń': 'n', 'ň': 'n', 'ņ': 'n', 'ṋ': 'n', 'ȵ': 'n', 'ṅ': 'n', 'ṇ': 'n', 'ǹ': 'n', 'ɲ': 'n', 'ṉ': 'n', 'ƞ': 'n', 'ᵰ': 'n', 'ᶇ': 'n', 'ɳ': 'n', 'ñ': 'n', 'nj': 'nj', 'ó': 'o', 'ŏ': 'o', 'ǒ': 'o', 'ô': 'o', 'ố': 'o', 'ộ': 'o', 'ồ': 'o', 'ổ': 'o', 'ỗ': 'o', 'ö': 'o', 'ȫ': 'o', 'ȯ': 'o', 'ȱ': 'o', 'ọ': 'o', 'ő': 'o', 'ȍ': 'o', 'ò': 'o', 'ỏ': 'o', 'ơ': 'o', 'ớ': 'o', 'ợ': 'o', 'ờ': 'o', 'ở': 'o', 'ỡ': 'o', 'ȏ': 'o', 'ꝋ': 'o', 'ꝍ': 'o', 'ⱺ': 'o', 'ō': 'o', 'ṓ': 'o', 'ṑ': 'o', 'ǫ': 'o', 'ǭ': 'o', 'ø': 'o', 'ǿ': 'o', 'õ': 'o', 'ṍ': 'o', 'ṏ': 'o', 'ȭ': 'o', 'ƣ': 'oi', 'ꝏ': 'oo', 'ɛ': 'e', 'ᶓ': 'e', 'ɔ': 'o', 'ᶗ': 'o', 'ȣ': 'ou', 'ṕ': 'p', 'ṗ': 'p', 'ꝓ': 'p', 'ƥ': 'p', 'ᵱ': 'p', 'ᶈ': 'p', 'ꝕ': 'p', 'ᵽ': 'p', 'ꝑ': 'p', 'ꝙ': 'q', 'ʠ': 'q', 'ɋ': 'q', 'ꝗ': 'q', 'ŕ': 'r', 'ř': 'r', 'ŗ': 'r', 'ṙ': 'r', 'ṛ': 'r', 'ṝ': 'r', 'ȑ': 'r', 'ɾ': 'r', 'ᵳ': 'r', 'ȓ': 'r', 'ṟ': 'r', 'ɼ': 'r', 'ᵲ': 'r', 'ᶉ': 'r', 'ɍ': 'r', 'ɽ': 'r', 'ↄ': 'c', 'ꜿ': 'c', 'ɘ': 'e', 'ɿ': 'r', 'ś': 's', 'ṥ': 's', 'š': 's', 'ṧ': 's', 'ş': 's', 'ŝ': 's', 'ș': 's', 'ṡ': 's', 'ṣ': 's', 'ṩ': 's', 'ʂ': 's', 'ᵴ': 's', 'ᶊ': 's', 'ȿ': 's', 'ɡ': 'g', 'ß': 'ss', 'ᴑ': 'o', 'ᴓ': 'o', 'ᴝ': 'u', 'ť': 't', 'ţ': 't', 'ṱ': 't', 'ț': 't', 'ȶ': 't', 'ẗ': 't', 'ⱦ': 't', 'ṫ': 't', 'ṭ': 't', 'ƭ': 't', 'ṯ': 't', 'ᵵ': 't', 'ƫ': 't', 'ʈ': 't', 'ŧ': 't', 'ᵺ': 'th', 'ɐ': 'a', 'ᴂ': 'ae', 'ǝ': 'e', 'ᵷ': 'g', 'ɥ': 'h', 'ʮ': 'h', 'ʯ': 'h', 'ᴉ': 'i', 'ʞ': 'k', 'ꞁ': 'l', 'ɯ': 'm', 'ɰ': 'm', 'ᴔ': 'oe', 'ɹ': 'r', 'ɻ': 'r', 'ɺ': 'r', 'ⱹ': 'r', 'ʇ': 't', 'ʌ': 'v', 'ʍ': 'w', 'ʎ': 'y', 'ꜩ': 'tz', 'ú': 'u', 'ŭ': 'u', 'ǔ': 'u', 'û': 'u', 'ṷ': 'u', 'ü': 'u', 'ǘ': 'u', 'ǚ': 'u', 'ǜ': 'u', 'ǖ': 'u', 'ṳ': 'u', 'ụ': 'u', 'ű': 'u', 'ȕ': 'u', 'ù': 'u', 'ủ': 'u', 'ư': 'u', 'ứ': 'u', 'ự': 'u', 'ừ': 'u', 'ử': 'u', 'ữ': 'u', 'ȗ': 'u', 'ū': 'u', 'ṻ': 'u', 'ų': 'u', 'ᶙ': 'u', 'ů': 'u', 'ũ': 'u', 'ṹ': 'u', 'ṵ': 'u', 'ᵫ': 'ue', 'ꝸ': 'um', 'ⱴ': 'v', 'ꝟ': 'v', 'ṿ': 'v', 'ʋ': 'v', 'ᶌ': 'v', 'ⱱ': 'v', 'ṽ': 'v', 'ꝡ': 'vy', 'ẃ': 'w', 'ŵ': 'w', 'ẅ': 'w', 'ẇ': 'w', 'ẉ': 'w', 'ẁ': 'w', 'ⱳ': 'w', 'ẘ': 'w', 'ẍ': 'x', 'ẋ': 'x', 'ᶍ': 'x', 'ý': 'y', 'ŷ': 'y', 'ÿ': 'y', 'ẏ': 'y', 'ỵ': 'y', 'ỳ': 'y', 'ƴ': 'y', 'ỷ': 'y', 'ỿ': 'y', 'ȳ': 'y', 'ẙ': 'y', 'ɏ': 'y', 'ỹ': 'y', 'ź': 'z', 'ž': 'z', 'ẑ': 'z', 'ʑ': 'z', 'ⱬ': 'z', 'ż': 'z', 'ẓ': 'z', 'ȥ': 'z', 'ẕ': 'z', 'ᵶ': 'z', 'ᶎ': 'z', 'ʐ': 'z', 'ƶ': 'z', 'ɀ': 'z', 'ff': 'ff', 'ffi': 'ffi', 'ffl': 'ffl', 'fi': 'fi', 'fl': 'fl', 'ij': 'ij', 'œ': 'oe', 'st': 'st', 'ₐ': 'a', 'ₑ': 'e', 'ᵢ': 'i', 'ⱼ': 'j', 'ₒ': 'o', 'ᵣ': 'r', 'ᵤ': 'u', 'ᵥ': 'v', 'ₓ': 'x', 'Ё': 'YO', 'Й': 'I', 'Ц': 'TS', 'У': 'U', 'К': 'K', 'Е': 'E', 'Н': 'N', 'Г': 'G', 'Ш': 'SH', 'Щ': 'SCH', 'З': 'Z', 'Х': 'H', 'Ъ': '', 'ё': 'yo', 'й': 'i', 'ц': 'ts', 'у': 'u', 'к': 'k', 'е': 'e', 'н': 'n', 'г': 'g', 'ш': 'sh', 'щ': 'sch', 'з': 'z', 'х': 'h', 'ъ': '', 'Ф': 'F', 'Ы': 'I', 'В': 'V', 'А': 'A', 'П': 'P', 'Р': 'R', 'О': 'O', 'Л': 'L', 'Д': 'D', 'Ж': 'ZH', 'Э': 'E', 'ф': 'f', 'ы': 'i', 'в': 'v', 'а': 'a', 'п': 'p', 'р': 'r', 'о': 'o', 'л': 'l', 'д': 'd', 'ж': 'zh', 'э': 'e', 'Я': 'Ya', 'Ч': 'CH', 'С': 'S', 'М': 'M', 'И': 'I', 'Т': 'T', 'Ь': '', 'Б': 'B', 'Ю': 'YU', 'я': 'ya', 'ч': 'ch', 'с': 's', 'м': 'm', 'и': 'i', 'т': 't', 'ь': '', 'б': 'b', 'ю': 'yu'};\n\nexport default LatinizeMap;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport LatinizeMap from '../config/latinizeMap';\n\nexport const badCharsRe = /[`~!@#$%^&*()\\-_=+\\[\\]\\\\|{}'\";:\\/?.>,<]+/g;\nconst trimRe = /^\\s+|\\s$/g;\n\nconst C2L: {[k: string]: string} = {\n 'й': 'q',\n 'ц': 'w',\n 'у': 'e',\n 'к': 'r',\n 'е': 't',\n 'н': 'y',\n 'г': 'u',\n 'ш': 'i',\n 'щ': 'o',\n 'з': 'p',\n 'х': '[',\n 'ъ': ']',\n 'ф': 'a',\n 'ы': 's',\n 'в': 'd',\n 'а': 'f',\n 'п': 'g',\n 'р': 'h',\n 'о': 'j',\n 'л': 'k',\n 'д': 'l',\n 'ж': ';',\n 'э': '\\'',\n 'я': 'z',\n 'ч': 'x',\n 'с': 'c',\n 'м': 'v',\n 'и': 'b',\n 'т': 'n',\n 'ь': 'm',\n 'б': ',',\n 'ю': '.',\n '.': '/'\n};\n\nexport function clearBadCharsAndTrim(text: string) {\n return text.replace(badCharsRe, '').replace(trimRe, '');\n}\n\nexport function fixCyrillic(text: string) {\n return text.toLowerCase().replace(/[\\wа-я]/g, (ch) => {\n const latinizeCh = C2L[ch];\n return latinizeCh ?? ch;\n });\n}\n\nexport function latinizeString(text: string) {\n return text.replace(/[^A-Za-z0-9]/g, (ch) => {\n const latinizeCh = LatinizeMap[ch];\n return latinizeCh ?? ch;\n });\n}\n\nexport default function cleanSearchText(text: string, latinize = true) {\n return processSearchText(text, {\n clearBadChars: true,\n latinize,\n ignoreCase: true\n });\n}\n\nexport type ProcessSearchTextOptions = Partial<{\n clearBadChars: boolean,\n latinize: boolean,\n ignoreCase: boolean,\n includeTag: boolean\n}>;\n\nexport function processSearchText(text = '', options: ProcessSearchTextOptions = {}) {\n const hasTag = options.includeTag && text.charAt(0) === '%';\n const originalText = text;\n if(options.clearBadChars) text = clearBadCharsAndTrim(text);\n if(options.latinize) text = latinizeString(text);\n if(options.ignoreCase) text = text.toLowerCase();\n if(hasTag) text = '%' + text;\n if(options.latinize) text += '\\x01' + fixCyrillic(originalText);\n return text;\n}\n","export default function flatten(arr: T[][]): T[] {\n return arr.reduce((acc, val) => (acc.push(...val), acc), []);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {processSearchText, ProcessSearchTextOptions} from '../helpers/cleanSearchText';\nimport flatten from '../helpers/array/flatten';\n\ntype SearchIndexOptions = ProcessSearchTextOptions & {\n minChars?: number,\n fullWords?: boolean\n};\n\nexport default class SearchIndex {\n private fullTexts: Map = new Map();\n\n // minChars can be 0 because it requires at least one word (one symbol) to be found\n constructor(private options: SearchIndexOptions = {}) {\n options.minChars ??= 0;\n }\n\n public indexObject(id: SearchWhat, searchText: string) {\n /* if(searchIndex.fullTexts.hasOwnProperty(id)) {\n return false;\n } */\n\n if(searchText.trim()) {\n searchText = this.processSearchText(searchText);\n }\n\n if(!searchText) {\n this.fullTexts.delete(id);\n return false;\n }\n\n this.fullTexts.set(id, searchText);\n\n /* const shortIndexes = searchIndex.shortIndexes;\n searchText.split(' ').forEach((searchWord) => {\n let len = Math.min(searchWord.length, 3),\n wordPart, i;\n for(i = 1; i <= len; i++) {\n wordPart = searchWord.substr(0, i);\n if(shortIndexes[wordPart] === undefined) {\n shortIndexes[wordPart] = [id];\n } else {\n shortIndexes[wordPart].push(id);\n }\n }\n }); */\n }\n\n public indexObjectArray(id: SearchWhat, searchText: string[]) {\n return this.indexObject(id, searchText.join(' '));\n }\n\n private _search(\n query: string,\n queryWords = query.split(' ').filter((word) => word.trim()),\n minChars = this.options.minChars\n ) {\n const newFoundObjs: Array<{fullText: string, fullTextLength: number, totalChars?: number, what: SearchWhat, foundChars: number}> = [];\n const fullTexts = this.fullTexts;\n const queryWordsLength = queryWords.length;\n fullTexts.forEach((fullText, what) => {\n let found = true;\n let foundChars = 0;\n // let totalChars = 0;\n for(let i = 0; i < queryWordsLength; ++i) { // * verify that all words are found\n const word = queryWords[i];\n const idx = fullText.indexOf(word);\n const isLastWord = i === (queryWordsLength - 1);\n if(\n idx === -1 || // * if not found at all\n (this.options.fullWords && !isLastWord && fullText[idx + word.length] !== ' ') || // * if not last word, then next char must be space\n (idx !== 0 && fullText[idx - 1] !== ' '/* && !badCharsRe.test(fullText[idx - 1]) */) // * search only from word beginning\n ) {\n found = false;\n break;\n }\n\n foundChars += word.length;\n\n // * count how many chars could possibly be found\n // const nextSpaceIdx = fullText.indexOf(' ', idx);\n // const textWordLength = (nextSpaceIdx === -1 ? fullText.length : nextSpaceIdx) - idx;\n // totalChars += textWordLength;\n }\n\n if(found) {\n foundChars += queryWordsLength - 1;\n const fullTextLength = fullText.length;\n if(minChars <= foundChars || fullTextLength <= foundChars) {\n newFoundObjs.push({fullText, fullTextLength/* , totalChars */, what, foundChars});\n }\n }\n });\n\n return newFoundObjs;\n }\n\n public search(query: string, minChars?: number) {\n query = this.processSearchText(query);\n\n const queries = query.split('\\x01');\n const results = queries.map((query) => this._search(query, undefined, minChars));\n const newFoundObjs = flatten(results);\n\n newFoundObjs.sort((a, b) => {\n const aLeftChars = a.fullTextLength - a.foundChars;\n const bLeftChars = b.fullTextLength - b.foundChars;\n return aLeftChars - bLeftChars || a.fullTextLength - b.fullTextLength;\n });\n\n const newFoundObjs2: Set = new Set(newFoundObjs.map((o) => o.what));\n return newFoundObjs2;\n }\n\n public processSearchText(query: string) {\n return this.options ? processSearchText(query, this.options) : query;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function compareLong(str1: string, str2: string) {\n const str1Length = str1.length;\n if(str1Length !== str2.length) {\n const diff = str1Length - str2.length;\n return diff < 0 ? -1 : (diff > 0 ? 1 : 0);\n }\n\n const maxPartLength = 15;\n for(let i = 0; i < str1Length; i += maxPartLength) {\n const v1 = +str1.slice(i, i + maxPartLength);\n const v2 = +str2.slice(i, i + maxPartLength);\n const diff = v1 - v2;\n if(diff) {\n return diff;\n }\n }\n\n return 0;\n}\n","import compareLong from './long/compareLong';\n\nexport default function compareValue(val1: string | number, val2: typeof val1) {\n if((val1 as number).toExponential) {\n const diff = (val1 as number) - (val2 as number);\n return diff < 0 ? -1 : (diff > 0 ? 1 : 0);\n }\n\n return compareLong(val1 as string, val2 as string);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MOUNT_CLASS_TO} from '../config/debug';\nimport indexOfAndSplice from './array/indexOfAndSplice';\nimport compareValue from './compareValue';\n\n/**\n * Descend sorted storage\n */\n\ntype ItemType = number | string;\n\nexport enum SliceEnd {\n None = 0,\n Top = 1,\n Bottom = 2,\n Both = SliceEnd.Top | SliceEnd.Bottom\n};\n\nexport interface Slice extends Array {\n // slicedArray: SlicedArray;\n end: SliceEnd;\n\n isEnd: (side: SliceEnd) => boolean;\n setEnd: (side: SliceEnd) => void;\n unsetEnd: (side: SliceEnd) => void;\n getEnds: () => {top: boolean, bottom: boolean, both: boolean};\n\n slice: (from?: number, to?: number) => Slice;\n splice: (start: number, deleteCount: number, ...items: ItemType[]) => Slice;\n}\n\nexport interface SliceConstructor {\n // new(...items: T[]): Slice;\n new(length: number): Slice;\n}\n\nexport type SliceSerialized = {\n values: Slice,\n isEnd: {\n top: boolean,\n bottom: boolean,\n both: boolean\n }\n};\n\nexport type SlicedArraySerialized = {\n slices: SliceSerialized[]\n};\n\nexport default class SlicedArray {\n public slices: Slice[]/* = [[7,6,5],[4,3,2],[1,0,-1]] */;\n private sliceConstructor: SliceConstructor;\n public compareValue: (a: T, b: T) => number;\n\n constructor() {\n // @ts-ignore\n this.sliceConstructor = SlicedArray.getSliceConstructor(this);\n this.compareValue ??= compareValue;\n\n const first = this.constructSlice();\n // first.setEnd(SliceEnd.Bottom);\n this.slices = [first];\n }\n\n private static getSliceConstructor(slicedArray: SlicedArray) {\n return class Slice extends Array implements Slice {\n // slicedArray: SlicedArray;\n end: SliceEnd = SliceEnd.None;\n\n /* constructor(...items: ItemType[]) {\n super(...items);\n //this.slicedArray = slicedArray;\n } */\n\n isEnd(side: SliceEnd): boolean {\n if((this.end & side) === side) {\n return true;\n }/* else if(!this.slicedArray) {\n return false;\n } */\n\n let isEnd = false;\n if(side === SliceEnd.Top) {\n const slice = slicedArray.last;\n isEnd = slice.end & side ? this.includes(slice[slice.length - 1])/* || !slice.length */ : false;\n } else if(side === SliceEnd.Bottom) {\n const slice = slicedArray.first;\n isEnd = slice.end & side ? this.includes(slice[0])/* || !slice.length */ : false;\n } else if(side === SliceEnd.Both) {\n return this.isEnd(SliceEnd.Top) && this.isEnd(SliceEnd.Bottom);\n }\n\n if(isEnd) {\n this.setEnd(side);\n }\n\n return isEnd;\n }\n\n getEnds() {\n return {\n top: this.isEnd(SliceEnd.Top),\n bottom: this.isEnd(SliceEnd.Bottom),\n both: this.isEnd(SliceEnd.Both)\n };\n }\n\n setEnd(side: SliceEnd) {\n this.end |= side;\n }\n\n unsetEnd(side: SliceEnd) {\n this.end &= ~side;\n }\n\n splice(start: number, deleteCount: number, ...items: ItemType[]) {\n const ret = super.splice(start, deleteCount, ...items);\n\n if(!this.length) {\n const slices = slicedArray.slices as ItemType[][];\n const idx = slices.indexOf(this);\n if(idx !== -1) {\n if(slices.length === 1) { // left empty slice without ends\n this.unsetEnd(SliceEnd.Both);\n } else { // delete this slice\n slices.splice(idx, 1);\n }\n }\n }\n\n return ret;\n }\n }\n }\n\n public constructSlice(...items: T[]) {\n // const slice = new Slice(this, ...items);\n // can't pass items directly to constructor because first argument is length\n const slice = new this.sliceConstructor(items.length);\n for(let i = 0, length = items.length; i < length; ++i) {\n slice[i] = items[i];\n }\n return slice;\n\n // ! code below will slow execution in 15 times\n /* const self = this;\n const p: Slice = new Proxy(slice, {\n get: function(target, name: any) {\n if(name === 'constructor') {\n const p = new Proxy(Slice, {\n construct: (target, args) => {\n return self.constructSlice(...args);\n }\n });\n\n return p;\n }\n\n return target[name];\n }\n });\n\n return p; */\n\n /*\n var p = slicedArray.constructSlice();\n p.length = 100000;\n p.fill(255);\n\n var a = new Array(100000);\n a.fill(255);\n\n var b = 0;\n var perf = performance.now();\n for(var i = 0; i < p.length; ++i) {\n b += p[i];\n }\n\n console.log('perf 1', performance.now() - perf);\n\n b = 0;\n perf = performance.now();\n for(var i = 0; i < a.length; ++i) {\n b += a[i];\n }\n\n console.log('perf 2', performance.now() - perf);\n */\n }\n\n public insertSlice(slice: T[], flatten = true) {\n if(!slice.length) {\n return;\n }\n\n const first = this.slices[0];\n if(!first.length) {\n first.push(...slice);\n return first;\n }\n\n const lowerBound = slice[slice.length - 1];\n const upperBound = slice[0];\n\n let foundSlice: Slice, lowerIndex = -1, upperIndex = -1, foundSliceIndex = 0;\n for(; foundSliceIndex < this.slices.length; ++foundSliceIndex) {\n foundSlice = this.slices[foundSliceIndex];\n lowerIndex = foundSlice.indexOf(lowerBound);\n upperIndex = foundSlice.indexOf(upperBound);\n\n if(upperIndex !== -1 && -1 !== lowerIndex) {\n break;\n } else if(upperIndex !== -1 || -1 !== lowerIndex) {\n break;\n }\n }\n\n if(upperIndex !== -1 && -1 !== lowerIndex) {\n\n } else if(upperIndex !== -1) { // ([1, 2, 3] | [1, 2, 3, 4, 5]) -> [1, 2, 3, 4, 5]\n const sliced = slice.slice(foundSlice.length - upperIndex);\n foundSlice.push(...sliced);\n } else if(lowerIndex !== -1) { // ([1, 2, 3] | [-1, 0, 1]) -> [-1, 0, 1, 2, 3]\n const sliced = slice.slice(0, slice.length - lowerIndex - 1);\n foundSlice.unshift(...sliced);\n } else {\n let insertIndex = 0;\n for(const length = this.slices.length; insertIndex < length; ++insertIndex) { // * maybe should iterate from the end, could be faster ?\n const s = this.slices[insertIndex];\n if(this.compareValue(slice[0], s[0]) === 1) {\n break;\n }\n }\n\n this.slices.splice(insertIndex, 0, this.constructSlice(...slice));\n foundSliceIndex = insertIndex;\n }\n\n if(flatten) {\n return this.flatten(foundSliceIndex);\n }\n }\n\n private flatten(foundSliceIndex: number) {\n if(this.slices.length >= 2) {\n for(let i = 0, length = this.slices.length; i < (length - 1); ++i) {\n const prevSlice = this.slices[i];\n const nextSlice = this.slices[i + 1];\n\n const upperIndex = prevSlice.indexOf(nextSlice[0]);\n if(upperIndex !== -1) {\n prevSlice.setEnd(nextSlice.end);\n this.slices.splice(i + 1, 1);\n\n if(i < foundSliceIndex) {\n --foundSliceIndex;\n }\n\n --length; // respect array bounds\n --i; // repeat from the same place\n\n this.insertSlice(nextSlice, false);\n }\n }\n }\n\n return this.slices[foundSliceIndex];\n }\n\n // *\n\n get first() {\n return this.slices[0];\n }\n\n get last() {\n return this.slices[this.slices.length - 1];\n }\n\n get slice() {\n return this.first;\n }\n\n get length() {\n return this.slice.length;\n }\n\n public findSlice(item: T) {\n for(let i = 0, length = this.slices.length; i < length; ++i) {\n const slice = this.slices[i];\n const index = slice.indexOf(item);\n if(index !== -1) {\n return {slice, index};\n }\n }\n\n return undefined;\n }\n\n // * offset will be exclusive, so if offsetId is in slice, then offset will be +1\n public findOffsetInSlice(offsetId: T, slice: Slice) {\n for(let offset = 0; offset < slice.length; ++offset) {\n if(this.compareValue(offsetId, slice[offset]) >= 0) {\n /* if(!offset) { // because can't find 3 in [[5,4], [2,1]]\n return undefined;\n } */\n\n return {\n slice,\n offset: offsetId === slice[offset] ? offset + 1 : offset\n };\n }\n }\n }\n\n public findSliceOffset(maxId: T): ReturnType['findOffsetInSlice']> & {sliceIndex: number} {\n let slice: Slice;\n for(let i = 0; i < this.slices.length; ++i) {\n slice = this.slices[i];\n\n const found = this.findOffsetInSlice(maxId, slice);\n if(found) {\n return {\n ...found,\n sliceIndex: i\n };\n }\n }\n\n if(slice?.isEnd(SliceEnd.Top)) {\n return {\n slice,\n offset: slice.length,\n sliceIndex: this.slices.length - 1\n };\n }\n }\n\n // * https://core.telegram.org/api/offsets\n public sliceMe(offsetId: T, addOffset: number, limit: number) {\n let slice = this.slice;\n let offset = 0;\n let sliceOffset = 0;\n\n if(offsetId) {\n const pos = this.findSliceOffset(offsetId);\n if(!pos) {\n return;\n }\n\n slice = pos.slice;\n offset = sliceOffset = pos.offset;\n\n // if(slice.includes(offsetId)) {\n // sliceOffset += 1;\n // }\n\n /* if(slice.includes(offsetId) && add_offset < 0) {\n add_offset += 1;\n } */\n } else if(!slice.isEnd(SliceEnd.Bottom)) {\n return;\n }\n\n const sliceStart = Math.max(sliceOffset + addOffset, 0);\n const sliceEnd = sliceOffset + addOffset + limit;\n // const fixHalfBackLimit = add_offset && !(limit / add_offset % 2) && (sliceEnd % 2) ? 1 : 0;\n // sliceEnd += fixHalfBackLimit;\n\n const sliced = slice.slice(sliceStart, sliceEnd) as Slice;\n\n const topWasMeantToLoad = addOffset < 0 ? limit + addOffset : limit;\n const bottomWasMeantToLoad = Math.abs(addOffset);\n\n // can use 'slice' here to check because if it's end, then 'sliced' is out of 'slice'\n // useful when there is only 1 message in chat on its reopening\n const topFulfilled = (slice.length - sliceOffset) >= topWasMeantToLoad || (slice.isEnd(SliceEnd.Top) ? (sliced.setEnd(SliceEnd.Top), true) : false);\n const bottomFulfilled = (sliceOffset - bottomWasMeantToLoad) >= 0 || (slice.isEnd(SliceEnd.Bottom) ? (sliced.setEnd(SliceEnd.Bottom), true) : false);\n\n // if(topFulfilled) sliced.isEnd(SliceEnd.Top);\n // if(bottomFulfilled) sliced.isEnd(SliceEnd.Bottom);\n\n return {\n slice: sliced,\n offsetIdOffset: offset,\n fulfilled: SliceEnd.None | (topFulfilled && bottomFulfilled ? SliceEnd.Both : ((topFulfilled ? SliceEnd.Top : SliceEnd.None) | (bottomFulfilled ? SliceEnd.Bottom : SliceEnd.None)))\n };\n }\n\n public unshift(...items: T[]) {\n let slice = this.first;\n if(!slice.length) {\n slice.setEnd(SliceEnd.Bottom);\n } else if(!slice.isEnd(SliceEnd.Bottom)) {\n slice = this.constructSlice();\n slice.setEnd(SliceEnd.Bottom);\n this.slices.unshift(slice);\n }\n\n slice.unshift(...items);\n }\n\n public push(...items: T[]) {\n let slice = this.last;\n if(!slice.length) {\n slice.setEnd(SliceEnd.Top);\n } else if(!slice.isEnd(SliceEnd.Top)) {\n slice = this.constructSlice();\n slice.setEnd(SliceEnd.Top);\n this.slices.push(slice);\n }\n\n slice.push(...items);\n }\n\n public delete(item: T) {\n const found = this.findSlice(item);\n if(found) {\n found.slice.splice(found.index, 1);\n return true;\n }\n\n return false;\n }\n\n public deleteSlice(slice: Slice) {\n indexOfAndSplice(this.slices, slice);\n }\n\n public toJSON() {\n const slices: SlicedArraySerialized['slices'] = this.slices.map((slice) => {\n return {\n values: slice.slice(),\n isEnd: slice.getEnds()\n };\n });\n\n const serialized: SlicedArraySerialized = {\n slices\n };\n\n return JSON.stringify(serialized);\n }\n\n public static fromJSON(json: string) {\n const parsed: SlicedArraySerialized = JSON.parse(json);\n const sliced = new SlicedArray();\n parsed.slices.forEach((slice) => {\n const inserted = sliced.insertSlice(slice.values) || sliced.first;\n if(slice.isEnd.top) inserted.setEnd(SliceEnd.Top);\n if(slice.isEnd.bottom) inserted.setEnd(SliceEnd.Bottom);\n });\n\n return sliced;\n }\n}\n\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.SlicedArray = SlicedArray);\n","export default function forEachReverse(array: Array, callback: (value: T, index?: number, array?: Array) => void) {\n for(let length = array.length, i = length - 1; i >= 0; --i) {\n callback(array[i], i, array);\n }\n};\n","export default function insertInDescendSortedArray(array: Array, element: T, getProperty: K, pos?: number, cmp?: (val1: number, val2: number) => number): number;\nexport default function insertInDescendSortedArray(array: Array, element: T, getProperty?: (element: T) => number, pos?: number, cmp?: (val1: number, val2: number) => number): number;\nexport default function insertInDescendSortedArray(array: Array, element: T, getProperty: K | ((element: T) => T[K]), pos?: number, cmp?: (val1: number, val2: number) => number): number {\n if(!getProperty) {\n getProperty = (element) => element as any;\n } else if(typeof(getProperty) !== 'function') {\n const property = getProperty;\n getProperty = (element) => element[property];\n }\n\n cmp ||= (val1, val2) => val1 - val2;\n\n const sortProperty = getProperty(element);\n\n pos ??= array.indexOf(element);\n if(pos !== -1) {\n const prev = array[pos - 1];\n const next = array[pos + 1];\n if((!prev || cmp(getProperty(prev), sortProperty) >= 0) && (!next || cmp(getProperty(next), sortProperty) <= 0)) {\n // console.warn('same pos', pos, sortProperty, prev, next);\n return pos;\n }\n\n array.splice(pos, 1);\n }\n\n const len = array.length;\n if(!len || cmp(sortProperty, getProperty(array[len - 1])) <= 0) {\n return array.push(element) - 1;\n } else if(cmp(sortProperty, getProperty(array[0])) >= 0) {\n array.unshift(element);\n return 0;\n } else {\n for(let i = 0; i < len; i++) {\n if(cmp(sortProperty, getProperty(array[i])) > 0) {\n array.splice(i, 0, element);\n return i;\n }\n }\n }\n\n console.error('wtf', array, element);\n return array.indexOf(element);\n}\n","export default function safeReplaceObject(wasObject: any, newObject: any) {\n if(!wasObject) {\n return newObject;\n }\n\n for(var key in wasObject) {\n if(!newObject.hasOwnProperty(key)) {\n delete wasObject[key];\n }\n }\n\n for(var key in newObject) {\n // if (newObject.hasOwnProperty(key)) { // useless\n wasObject[key] = newObject[key];\n // }\n }\n\n return wasObject;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MESSAGE_ID_OFFSET} from '../../../mtproto/mtproto_config';\n\nexport default function clearMessageId(messageId: number, toServer?: boolean) {\n if(messageId === undefined) {\n return;\n }\n\n messageId = +messageId.toFixed(0);\n if(!toServer) {\n return messageId;\n }\n\n return messageId < MESSAGE_ID_OFFSET ? messageId : messageId % MESSAGE_ID_OFFSET;\n // const q = MESSAGE_ID_OFFSET;\n // if(messageId < q) { // id 0 -> mid 0xFFFFFFFF, so 0xFFFFFFFF must convert to 0\n // return messageId;\n // }\n\n // const l = MESSAGE_ID_INCREMENT - 1;\n // const used = messageId & l;\n // if(used !== l) {\n // messageId -= used + 1;\n // }\n\n // return toServer ? (messageId - q) / MESSAGE_ID_INCREMENT : messageId;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport clearMessageId from './clearMessageId';\n\n/**\n * * will ignore outgoing offset\n */\nexport default function getServerMessageId(messageId: number) {\n return clearMessageId(messageId, true);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {DialogFilter} from '../../../../layer';\n\nexport default function getDialogIndexKey(localId: DialogFilter.dialogFilter['localId'] = 0) {\n return `index_${localId}` as const;\n // return filterId !== undefined && filterId > 1 ? `filter_${filterId}` as const : 'main' as const;\n // const indexStr = filterId > 1 ?\n // `index_${filterId}` as const :\n // 'index' as const;\n\n // return indexStr;\n}\n","export default function isObject>(object: any): object is T {\n return typeof(object) === 'object' && object !== null;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Dialog, ForumTopic, SavedDialog} from '../../../../layer';\nimport type {REAL_FOLDER_ID} from '../../../mtproto/mtproto_config';\nimport getDialogIndexKey from './getDialogIndexKey';\n\nexport default function getDialogIndex(\n dialog: Dialog.dialog | ForumTopic.forumTopic | SavedDialog.savedDialog,\n indexKey: ReturnType = getDialogIndexKey((dialog as Dialog).folder_id as REAL_FOLDER_ID)\n) {\n return dialog?.[indexKey as 'index_0'];\n}\n","import isObject from '../../../../helpers/object/isObject';\nimport {InputChannel, InputPeer, InputUser, Peer} from '../../../../layer';\nimport {NULL_PEER_ID} from '../../../mtproto/mtproto_config';\n\nexport default function getPeerId(peerId: {user_id: UserId} | {channel_id: ChatId} | {chat_id: ChatId} | InputUser | InputPeer | InputChannel | PeerId | string): PeerId {\n if(peerId !== undefined && ((peerId as string).isPeerId ? (peerId as string).isPeerId() : false)) return peerId as PeerId;\n // if(typeof(peerId) === 'string' && /^[uc]/.test(peerId)) return peerId as PeerId;\n // if(typeof(peerId) === 'number') return peerId;\n else if(isObject(peerId)) {\n const userId = (peerId as Peer.peerUser).user_id;\n if(userId !== undefined) {\n return userId.toPeerId(false);\n }\n\n const chatId = (peerId as Peer.peerChannel).channel_id || (peerId as Peer.peerChat).chat_id;\n if(chatId !== undefined) {\n return chatId.toPeerId(true);\n }\n\n return NULL_PEER_ID; // maybe it is an inputPeerSelf\n // } else if(!peerId) return 'u0';\n } else if(!peerId) return NULL_PEER_ID;\n\n const isUser = (peerId as string).charAt(0) === 'u';\n const peerParams = (peerId as string).substr(1).split('_');\n\n return isUser ? peerParams[0].toPeerId() : (peerParams[0] || '').toPeerId(true);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Message, MessageAction, MessageMedia, Peer, WebPage, WebPageAttribute} from '../../../../layer';\nimport getPeerId from '../peers/getPeerId';\n\nexport default function getPeerIdsFromMessage(message: Message.message | Message.messageService) {\n const peerIds: number[] = [\n message.fromId,\n message.viaBotId,\n (message as Message.message).fwdFromId\n ];\n\n const media = (message as Message.message).media;\n if(media) {\n const userIds: UserId[] = [\n (media as MessageMedia.messageMediaContact).user_id,\n ...((media as MessageMedia.messageMediaGiveawayResults).winners || [])\n ];\n peerIds.push(...userIds.filter(Boolean).map((userId) => userId.toPeerId()));\n\n const chatIds: ChatId[] = [\n ...((media as MessageMedia.messageMediaGiveaway).channels || []),\n (media as MessageMedia.messageMediaGiveawayResults).channel_id\n ];\n peerIds.push(...chatIds.filter(Boolean).map((chatId) => chatId.toPeerId(true)));\n\n const peers: Peer[] = [\n ...((media as MessageMedia.messageMediaPoll).results?.recent_voters || []),\n (media as MessageMedia.messageMediaStory).peer\n ];\n const webPage = (media as MessageMedia.messageMediaWebPage)?.webpage as WebPage.webPage;\n if(webPage) {\n const storyAttribute = webPage.attributes?.find((attribute) => attribute._ === 'webPageAttributeStory') as WebPageAttribute.webPageAttributeStory;\n peers.push(storyAttribute?.peer);\n }\n peerIds.push(...peers.filter(Boolean).map((peer) => getPeerId(peer)));\n }\n\n const recentReactions = ((message as Message.message).reactions)?.recent_reactions;\n if(recentReactions?.length) {\n peerIds.push(...recentReactions.map((reaction) => getPeerId(reaction.peer_id)));\n }\n\n const action = (message as Message.messageService).action;\n if(action) {\n const userIds: UserId[] = [\n ...((action as MessageAction.messageActionChatAddUser).users || []),\n (action as MessageAction.messageActionChatDeleteUser).user_id,\n (action as MessageAction.messageActionChatJoinedByLink).inviter_id\n ];\n peerIds.push(...userIds.filter(Boolean).map((userId) => userId.toPeerId()));\n\n const chatIds: ChatId[] = [\n (action as MessageAction.messageActionChatMigrateTo).channel_id,\n (action as MessageAction.messageActionChannelMigrateFrom).chat_id\n ];\n peerIds.push(...chatIds.filter(Boolean).map((chatId) => chatId.toPeerId(true)));\n\n const peers: Peer[] = [\n (action as MessageAction.messageActionGiftCode).boost_peer,\n ...(action as MessageAction.messageActionRequestedPeer).peers || [],\n (action as MessageAction.messageActionGeoProximityReached).from_id,\n (action as MessageAction.messageActionGeoProximityReached).to_id\n ];\n peerIds.push(...peers.filter(Boolean).map((peer) => getPeerId(peer)));\n }\n\n const recentRepliers = ((message as Message.message).replies)?.recent_repliers;\n if(recentRepliers?.length) {\n peerIds.push(...recentRepliers.map((reply) => getPeerId(reply)));\n }\n\n const savedPeerId = (message as Message.message).saved_peer_id;\n if(savedPeerId) {\n peerIds.push(getPeerId(savedPeerId));\n }\n\n const fwdHeader = (message as Message.message).fwd_from;\n if(fwdHeader) {\n peerIds.push(...[\n fwdHeader.from_id,\n fwdHeader.saved_from_id,\n fwdHeader.saved_from_peer\n ].filter(Boolean).map((peer) => getPeerId(peer)));\n }\n\n return new Set(peerIds.filter(Boolean));\n}\n","export default function defineNotNumerableProperties(obj: T, names: (keyof T)[]) {\n // const perf = performance.now();\n const props = {writable: true, configurable: true};\n const out: {[name in keyof T]?: typeof props} = {};\n names.forEach((name) => {\n if(!obj.hasOwnProperty(name)) {\n out[name] = props;\n }\n });\n Object.defineProperties(obj, out);\n // console.log('defineNotNumerableProperties time:', performance.now() - perf);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {AnyDialog} from '../../../storages/dialogs';\nimport type {Dialog} from '../../appMessagesManager';\nimport type getDialogIndexKey from './getDialogIndexKey';\n\nexport default function setDialogIndex(\n dialog: AnyDialog,\n indexKey: ReturnType,\n index: number\n) {\n return (dialog as Dialog)[indexKey] = index;\n}\n","import type {AnyDialog} from '../../../storages/dialogs';\nimport type {ForumTopic, SavedDialog, Dialog} from '../../appMessagesManager';\n\nexport function isForumTopic(dialog: AnyDialog): dialog is ForumTopic {\n return dialog?._ === 'forumTopic';\n}\n\nexport function isSavedDialog(dialog: AnyDialog): dialog is SavedDialog {\n return dialog?._ === 'savedDialog';\n}\n\nexport function isDialog(dialog: AnyDialog): dialog is Dialog {\n return dialog?._ === 'dialog';\n}\n","import {AnyDialog} from '../../../storages/dialogs';\nimport {isDialog, isForumTopic, isSavedDialog} from './isDialog';\n\nexport default function getDialogKey(dialog: AnyDialog) {\n let key: number;\n if(isDialog(dialog)) {\n key = dialog.peerId;\n } else if(isForumTopic(dialog)) {\n key = dialog.id;\n } else if(isSavedDialog(dialog)) {\n key = dialog.savedPeerId;\n }\n\n return key;\n}\n","import type {AnyDialog} from '../../../storages/dialogs';\nimport getDialogKey from './getDialogKey';\nimport {isDialog} from './isDialog';\n\nexport default function getDialogThreadId(dialog: AnyDialog) {\n if(isDialog(dialog)) {\n return;\n }\n\n return getDialogKey(dialog);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {Chat, ForumTopic as MTForumTopic, DialogPeer, Message, MessagesForumTopics, MessagesPeerDialogs, Update, Peer, MessagesMessages, MessagesSavedDialogs} from '../../layer';\nimport type {AppMessagesManager, Dialog, ForumTopic, MyMessage, SavedDialog} from '../appManagers/appMessagesManager';\nimport type DATABASE_STATE from '../../config/databases/state';\nimport tsNow from '../../helpers/tsNow';\nimport SearchIndex from '../searchIndex';\nimport {SliceEnd} from '../../helpers/slicedArray';\nimport {MyDialogFilter} from './filters';\nimport {CAN_HIDE_TOPIC, FOLDER_ID_ALL, FOLDER_ID_ARCHIVE, NULL_PEER_ID, REAL_FOLDERS, REAL_FOLDER_ID, TEST_NO_SAVED} from '../mtproto/mtproto_config';\nimport {MaybePromise, NoneToVoidFunction} from '../../types';\nimport ctx from '../../environment/ctx';\nimport AppStorage from '../storage';\nimport forEachReverse from '../../helpers/array/forEachReverse';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport insertInDescendSortedArray from '../../helpers/array/insertInDescendSortedArray';\nimport safeReplaceObject from '../../helpers/object/safeReplaceObject';\nimport getServerMessageId from '../appManagers/utils/messageId/getServerMessageId';\nimport {AppManager} from '../appManagers/manager';\nimport getDialogIndexKey from '../appManagers/utils/dialogs/getDialogIndexKey';\nimport isObject from '../../helpers/object/isObject';\nimport getDialogIndex from '../appManagers/utils/dialogs/getDialogIndex';\nimport getPeerIdsFromMessage from '../appManagers/utils/messages/getPeerIdsFromMessage';\nimport {AppStoragesManager} from '../appManagers/appStoragesManager';\nimport defineNotNumerableProperties from '../../helpers/object/defineNotNumerableProperties';\nimport setDialogIndex from '../appManagers/utils/dialogs/setDialogIndex';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport pause from '../../helpers/schedulers/pause';\nimport {BroadcastEvents} from '../rootScope';\nimport assumeType from '../../helpers/assumeType';\nimport makeError from '../../helpers/makeError';\nimport callbackify from '../../helpers/callbackify';\nimport {logger} from '../logger';\nimport getPeerId from '../appManagers/utils/peers/getPeerId';\nimport {isDialog, isSavedDialog, isForumTopic} from '../appManagers/utils/dialogs/isDialog';\nimport getDialogKey from '../appManagers/utils/dialogs/getDialogKey';\nimport getDialogThreadId from '../appManagers/utils/dialogs/getDialogThreadId';\n\nexport enum FilterType {\n Folder,\n Forum,\n Saved\n}\n\nexport type FolderDialog = {\n dialog: Dialog,\n index: number\n};\n\nexport type Folder = {\n dialogs: AnyDialog[],\n id: number,\n count: number,\n unreadMessagesCount: number,\n unreadPeerIds: Set,\n unreadUnmutedPeerIds: Set,\n dispatchUnreadTimeout?: number\n};\n\nexport type AnyDialog = Dialog | ForumTopic | SavedDialog;\n\nexport const GLOBAL_FOLDER_ID: REAL_FOLDER_ID = undefined;\n\n// let spentTime = 0;\nexport default class DialogsStorage extends AppManager {\n private storage: AppStoragesManager['storages']['dialogs'];\n\n private dialogs: {[peerId: PeerId]: Dialog};\n private savedDialogs: {[peerId: PeerId]: SavedDialog};\n\n private folders: {[folderId: number]: Folder};\n\n private allDialogsLoaded: {[folder_id: number]: boolean};\n private dialogsOffsetDate: {[folder_id: number]: number};\n private pinnedOrders: {[folder_id: number]: PeerId[]};\n private dialogsNum: number;\n\n private dialogsIndex: SearchIndex;\n\n private cachedResults: {\n query: string,\n count: number,\n dialogs: (Dialog | ForumTopic)[],\n folderId: number\n };\n\n private forumTopics: Map,\n deletedTopics: Set,\n getTopicPromises: Map>,\n index: SearchIndex,\n getTopicsPromise?: Promise\n }>;\n\n private savedDialogsPromises: Map>;\n\n private log = logger('DIALOGS');\n\n protected after() {\n this.clear(true);\n\n const onFilterUpdate = (filter: MyDialogFilter) => {\n const dialogs = this.getCachedDialogs(false);\n for(let i = 0; i < dialogs.length; ++i) {\n this.processDialogForFilter(dialogs[i], filter);\n }\n };\n\n this.rootScope.addEventListener('filter_order', () => {\n const dialogs = this.getCachedDialogs(false);\n // const indexKeys: ReturnType[] = [];\n for(const filterId in this.folders) {\n if(!this.isVirtualFilter(+filterId)) {\n delete this.folders[filterId];\n }\n\n // indexKeys.push(this.getDialogIndexKey(+filterId));\n }\n\n for(let i = 0; i < dialogs.length; ++i) {\n const dialog = dialogs[i];\n // for(const indexKey of indexKeys) {\n // delete dialog[indexKey];\n // }\n\n this.processDialogForFilters(dialog);\n }\n });\n\n this.rootScope.addEventListener('filter_update', onFilterUpdate);\n this.rootScope.addEventListener('filter_new', onFilterUpdate);\n\n this.rootScope.addEventListener('filter_delete', (filter) => {\n const dialogs = this.getCachedDialogs(false);\n\n const indexKey = this.getDialogIndexKeyByFilterId(filter.id);\n for(let i = 0; i < dialogs.length; ++i) {\n const dialog = dialogs[i];\n delete dialog[indexKey];\n }\n\n delete this.folders[filter.id];\n });\n\n this.rootScope.addEventListener('dialog_notify_settings', (dialog) => {\n this.processChangedUnreadOrUnmuted(dialog.peerId);\n });\n\n this.rootScope.addEventListener('chat_update', (chatId) => {\n const peerId = chatId.toPeerId(true);\n const dialog = this.getDialogOnly(peerId);\n if(dialog && !this.canSaveDialog(peerId, dialog)) {\n this.dropDialogOnDeletion(peerId);\n }\n });\n\n this.rootScope.addEventListener('chat_toggle_forum', ({chatId, enabled}) => {\n const peerId = chatId.toPeerId(true);\n if(!enabled) {\n this.flushForumTopicsCache(peerId);\n }\n\n this.processChangedUnreadOrUnmuted(peerId);\n });\n\n this.rootScope.addEventListener('user_auth', () => {\n this.rootScope.addEventListener('premium_toggle', () => {\n [FOLDER_ID_ALL, FOLDER_ID_ARCHIVE].forEach((folderId) => {\n this.apiUpdatesManager.processLocalUpdate({_: 'updatePinnedDialogs', folder_id: folderId});\n });\n });\n });\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateFolderPeers: this.onUpdateFolderPeers,\n\n updateDialogPinned: this.onUpdateDialogPinned,\n updateSavedDialogPinned: this.onUpdateDialogPinned,\n\n updateChannelPinnedTopic: this.onUpdateChannelPinnedTopic,\n\n updatePinnedDialogs: this.onUpdatePinnedDialogs,\n updatePinnedSavedDialogs: this.onUpdatePinnedDialogs,\n\n updateChannelPinnedTopics: this.onUpdateChannelPinnedTopics,\n\n updateChannelViewForumAsMessages: this.onUpdateChannelViewForumAsMessages\n });\n\n return Promise.all([\n this.appStateManager.getState(),\n this.appStoragesManager.loadStorage('dialogs')\n ]).then(([state, {results: dialogs, storage}]) => {\n this.storage = storage;\n this.dialogs = this.storage.getCache();\n\n for(const folderId of REAL_FOLDERS) {\n const order = state.pinnedOrders[folderId];\n if(!order) {\n continue;\n }\n\n const _order = this.getPinnedOrders(folderId);\n _order.splice(0, _order.length, ...order);\n }\n\n if(dialogs.length) {\n AppStorage.freezeSaving(this.setDialogsFromState.bind(this, dialogs), ['chats', 'dialogs', 'messages', 'users']);\n }\n\n this.allDialogsLoaded = state.allDialogsLoaded || {};\n\n if(dialogs.length) {\n this.appDraftsManager.addMissedDialogs();\n }\n });\n }\n\n public indexMyDialog() {\n const peerId = this.appUsersManager.getSelf().id.toPeerId(false);\n const dialog = this.getDialogOnly(peerId);\n if(dialog) {\n const peerText = this.appPeersManager.getPeerSearchText(peerId);\n this.dialogsIndex.indexObject(peerId, peerText);\n }\n }\n\n private setDialogsFromState(dialogs: Dialog[]) {\n for(let i = 0, length = dialogs.length; i < length; ++i) {\n const dialog = dialogs[i];\n if(!dialog) {\n continue;\n }\n\n // if(dialog.peerId !== SERVICE_PEER_ID) {\n dialog.top_message = getServerMessageId(dialog.top_message); // * fix outgoing message to avoid copying dialog\n // }\n\n if(dialog.topMessage) {\n this.appMessagesManager.saveMessages([dialog.topMessage]);\n }\n\n for(let i = 0; i <= 21; ++i) {\n const indexKey: ReturnType = `index_${i}` as any;\n delete dialog[indexKey];\n }\n // delete dialog.indexes;\n\n this.saveDialog({\n dialog,\n ignoreOffsetDate: true\n });\n\n // ! WARNING, убрать это когда нужно будет делать чтобы pending сообщения сохранялись\n const message = this.appMessagesManager.getMessageByPeer(dialog.peerId, dialog.top_message);\n if(!message) {\n this.appMessagesManager.reloadConversation(dialog.peerId);\n }\n }\n }\n\n public isDialogsLoaded(folderId: number) {\n return !!this.allDialogsLoaded[folderId];\n }\n\n public setDialogsLoaded(folderId: number, loaded: boolean) {\n const isVirtualFilter = this.isVirtualFilter(folderId);\n\n if(folderId === GLOBAL_FOLDER_ID && loaded) {\n this.allDialogsLoaded[FOLDER_ID_ALL] = loaded;\n this.allDialogsLoaded[FOLDER_ID_ARCHIVE] = loaded;\n } else {\n if(isVirtualFilter) {\n defineNotNumerableProperties(this.allDialogsLoaded, [folderId]);\n }\n\n this.allDialogsLoaded[folderId] = loaded;\n }\n\n if(isVirtualFilter) {\n return;\n }\n\n if(Array.from(REAL_FOLDERS).every((folderId) => this.allDialogsLoaded[folderId])) {\n this.allDialogsLoaded[GLOBAL_FOLDER_ID] = true;\n }\n\n this.saveAllDialogsLoaded();\n }\n\n private saveAllDialogsLoaded() {\n this.appStateManager.pushToState('allDialogsLoaded', this.allDialogsLoaded);\n }\n\n public clear = (init = false) => {\n if(!init) {\n this.storage.clear();\n\n this.allDialogsLoaded = {};\n this.saveAllDialogsLoaded();\n\n // * clear not numerable properties\n this.pinnedOrders = Object.assign({}, this.pinnedOrders);\n for(const folderId of REAL_FOLDERS) {\n this.resetPinnedOrder(folderId);\n }\n this.savePinnedOrders();\n } else {\n this.allDialogsLoaded = {};\n this.pinnedOrders = {};\n for(const folderId of REAL_FOLDERS) {\n this.pinnedOrders[folderId] = [];\n }\n }\n\n this.forumTopics = new Map();\n this.savedDialogsPromises = new Map();\n this.folders = {};\n this.dialogsOffsetDate = {};\n this.dialogsNum = 0;\n this.dialogsIndex = this.createSearchIndex();\n this.cachedResults = {\n query: '',\n count: 0,\n dialogs: [],\n folderId: 0\n };\n this.savedDialogs = {};\n };\n\n private createSearchIndex() {\n return new SearchIndex({\n clearBadChars: true,\n ignoreCase: true,\n latinize: true,\n includeTag: true\n });\n }\n\n public handleDialogUnpinning(dialog: AnyDialog, folderId: number) {\n delete dialog.pFlags.pinned;\n indexOfAndSplice(this.getPinnedOrders(folderId), getDialogKey(dialog));\n this.savePinnedOrders();\n }\n\n public savePinnedOrders() {\n this.appStateManager.pushToState('pinnedOrders', this.pinnedOrders);\n }\n\n public resetPinnedOrder(folderId: number) {\n this.getPinnedOrders(folderId).length = 0;\n }\n\n public getPinnedOrders(folderId: number) {\n let orders = this.pinnedOrders[folderId];\n if(!orders && this.isVirtualFilter(folderId)) {\n defineNotNumerableProperties(this.pinnedOrders, [folderId]);\n orders = this.pinnedOrders[folderId] = [];\n }\n\n return orders;\n }\n\n public isDialogPinned(peerId: PeerId, folderId: number) {\n const filter = this.filtersStorage.getFilter(folderId);\n let isPinned: boolean;\n if(filter) {\n isPinned = filter.pinnedPeerIds.indexOf(peerId) !== -1;\n } else {\n isPinned = !!this.getDialogOnly(peerId).pFlags.pinned;\n }\n\n return isPinned;\n }\n\n public getOffsetDate(folderId: number): number {\n const offsetDate = this.dialogsOffsetDate[folderId] || 0;\n if(folderId === GLOBAL_FOLDER_ID && !offsetDate) { // make request not from beginning if we have loaded some dialogs\n return Math.min(...Array.from(REAL_FOLDERS).sort((a, b) => a - b));\n }\n\n return offsetDate;\n }\n\n private generateFolder(id: number) {\n const folder: Folder = {\n dialogs: [],\n id,\n count: null,\n unreadMessagesCount: 0,\n unreadPeerIds: new Set(),\n unreadUnmutedPeerIds: new Set()\n };\n\n defineNotNumerableProperties(folder, ['dispatchUnreadTimeout']);\n\n return folder;\n }\n\n public getFolder(id: number) {\n return this.folders[id] ??= this.generateFolder(id);\n }\n\n public isVirtualFilter(filterId: number) {\n return this.getFilterType(filterId) !== FilterType.Folder;\n }\n\n public getFilterType(filterId: number) {\n if(filterId && filterId < 0) return FilterType.Forum;\n else if(filterId === this.appPeersManager.peerId) return FilterType.Saved;\n else return FilterType.Folder;\n }\n\n public isFilterIdForForum(filterId: number) {\n return filterId && filterId < 0;\n }\n\n public getFilterIdForForum(forumTopic: ForumTopic) {\n return forumTopic.peerId;\n }\n\n public getFolderDialogs(id: number, skipMigrated = true): Folder['dialogs'] {\n if(id === GLOBAL_FOLDER_ID) { // * it won't be sorted\n return this.getCachedDialogs(skipMigrated);\n }\n\n const folder = this.getFolder(id);\n const filterType = this.getFilterType(id);\n if(filterType === FilterType.Forum) {\n return skipMigrated ? folder.dialogs.filter((forumTopic) => !(forumTopic as ForumTopic).pFlags.hidden) : folder.dialogs;\n } else if(filterType === FilterType.Saved) {\n return folder.dialogs;\n }\n\n return skipMigrated ? folder.dialogs.filter((dialog) => (dialog as Dialog).migratedTo === undefined) : folder.dialogs;\n }\n\n public getNextDialog(currentPeerId: PeerId, next: boolean, filterId: number) {\n const folder = this.getFolderDialogs(filterId, true);\n let dialog: Folder['dialogs'][0];\n if(!currentPeerId) {\n if(next) {\n dialog = folder[0];\n }\n } else {\n const idx = folder.findIndex((dialog) => dialog.peerId === currentPeerId);\n if(idx !== -1) {\n const nextIndex = next ? idx + 1 : idx - 1;\n dialog = folder[nextIndex];\n }\n }\n\n return dialog;\n }\n\n public getDialogIndexKeyByFilterId(filterId: number) {\n if(this.isVirtualFilter(filterId)) return getDialogIndexKey();\n if(REAL_FOLDERS.has(filterId)) return getDialogIndexKey(filterId as REAL_FOLDER_ID);\n const filter = this.filtersStorage.getFilter(filterId);\n return getDialogIndexKey(filter.localId);\n }\n\n private isDialogUnmuted(dialog: Dialog | ForumTopic) {\n return !this.appNotificationsManager.isPeerLocalMuted({\n peerId: dialog.peerId,\n respectType: true,\n threadId: isForumTopic(dialog) ? (dialog as ForumTopic).id : undefined\n });\n }\n\n public getFolderUnreadCount(filterId: number) {\n const folder = this.getFolder(filterId);\n return {unreadUnmutedCount: folder.unreadUnmutedPeerIds.size, unreadCount: folder.unreadPeerIds.size};\n }\n\n public getCachedDialogs(skipMigrated?: boolean) {\n const arrays = Array.from(REAL_FOLDERS).map((folderId) => this.getFolderDialogs(folderId, skipMigrated));\n return [].concat(...arrays) as Dialog[];\n }\n\n private setDialogIndexInFilter(\n dialog: AnyDialog,\n indexKey: ReturnType,\n filter?: MyDialogFilter\n ) {\n // if(this.isTopic(dialog)) {\n // return dialog['index_0'];\n // }\n\n let index: number;\n\n const isVirtual = this.isVirtualFilter(this.getDialogFilterId(dialog));\n const isRealFolder = isVirtual || REAL_FOLDERS.has(filter.id);\n /* if(isRealFolder) {\n // index = getDialogIndex(dialog, indexKey);\n index = this.generateIndexForDialog(dialog, true);\n } else */if(this.filtersStorage.testDialogForFilter(dialog, filter)) {\n const pinnedIds = isVirtual ?\n this.getPinnedOrdersByDialog(dialog) :\n filter.pinnedPeerIds;\n\n const pinnedKey = getDialogKey(dialog);\n const pinnedIndex = pinnedIds.indexOf(pinnedKey);\n\n if(pinnedIndex !== -1) {\n index = this.generateDialogIndex(this.generateDialogPinnedDateByIndex(pinnedIds.length - 1 - pinnedIndex), true);\n } else if(dialog.pFlags?.pinned || isRealFolder) {\n index = this.generateIndexForDialog(dialog, true, undefined, !isRealFolder);\n } else {\n index = getDialogIndex(dialog) ?? this.generateIndexForDialog(dialog, true);\n }\n }\n\n // if(!dialog.hasOwnProperty(indexKey)) {\n // defineNotNumerableProperties(dialog, [indexKey]);\n // }\n\n return setDialogIndex(dialog, indexKey, index);\n }\n\n public getDialog(peerId: PeerId, folderId?: number, topicOrSavedId?: number, skipMigrated = true): [Folder['dialogs'][0], number] | [] {\n const folders: Folder['dialogs'][] = [];\n\n if(topicOrSavedId) {\n folderId = peerId;\n // skipMigrated = false;\n }\n\n if(folderId === undefined) {\n folders.push(...Array.from(REAL_FOLDERS).map((folderId) => this.getFolder(folderId).dialogs));\n } else {\n folders.push(this.getFolderDialogs(folderId, false));\n }\n\n let verify: (d: Folder['dialogs'][0]) => boolean;\n if(topicOrSavedId) {\n if(this.isFilterIdForForum(folderId)) {\n verify = (dialog) => (dialog as ForumTopic).id === topicOrSavedId;\n } else {\n verify = (dialog) => (dialog as SavedDialog).savedPeerId === topicOrSavedId;\n }\n } else {\n verify = (dialog) => dialog.peerId === peerId;\n }\n\n for(const folder of folders) {\n let i = 0, skipped = 0;\n for(let length = folder.length; i < length; ++i) {\n const dialog = folder[i];\n if(verify(dialog)) {\n return [dialog, i - skipped];\n } else if(skipMigrated && ((dialog as ForumTopic).pFlags.hidden || (dialog as Dialog).migratedTo !== undefined)) {\n ++skipped;\n }\n }\n }\n\n return [];\n }\n\n public getDialogOnly(peerId: PeerId) {\n return this.dialogs[peerId];\n }\n\n public getAnyDialog(peerId: PeerId, topicOrSavedId?: number) {\n if(topicOrSavedId) {\n return peerId.isUser() ? this.savedDialogs[topicOrSavedId] : this.getForumTopic(peerId, topicOrSavedId);\n }\n\n return this.dialogs[peerId];\n }\n\n public getDialogIndex(\n peerId: PeerId | Parameters[0],\n indexKey: ReturnType,\n topicOrSavedId?: number\n ) {\n const dialog = isObject(peerId) ? peerId : this.getAnyDialog(peerId, topicOrSavedId);\n return getDialogIndex(dialog, indexKey);\n }\n\n /*\n var date = Date.now() / 1000 | 0;\n var m = date * 0x10000;\n\n var k = (date + 1) * 0x10000;\n k - m;\n 65536\n */\n public generateDialogIndex(date?: number, isPinned?: boolean) {\n date ??= tsNow(true) + this.timeManager.getServerTimeOffset();\n return (date * 0x10000) + (isPinned ? 0 : (++this.dialogsNum & 0xFFFF));\n }\n\n // public makeFilterForTopics(id: number): MyDialogFilter {\n // return {\n // _: 'dialogFilter',\n // id,\n\n // };\n // }\n\n public getDialogFilterId(dialog: AnyDialog) {\n let filterId: number;\n if(isForumTopic(dialog)) {\n filterId = this.getFilterIdForForum(dialog);\n } else if(isSavedDialog(dialog)) {\n filterId = dialog.peerId;\n } else {\n filterId = dialog.folder_id;\n }\n\n return filterId;\n }\n\n public getPinnedOrdersByDialog(dialog: AnyDialog) {\n return this.getPinnedOrders(this.getDialogFilterId(dialog));\n }\n\n public processDialogForFilters(dialog: AnyDialog, noIndex?: boolean) {\n // let perf = performance.now();\n if(!isDialog(dialog)) {\n this.processDialogForFilter(dialog, undefined, noIndex);\n return;\n }\n\n const filters = this.filtersStorage.getFilters();\n for(const id in filters) {\n const filter = filters[id];\n this.processDialogForFilter(dialog, filter, noIndex);\n }\n // spentTime += (performance.now() - perf);\n // console.log('generate index time:', spentTime);\n }\n\n public processDialogForFilter(\n dialog: AnyDialog,\n filter?: MyDialogFilter,\n noIndex?: boolean\n ) {\n const folderId = filter?.id ?? this.getDialogFilterId(dialog);\n\n const indexKey = this.getDialogIndexKeyByFilterId(folderId);\n const folder = this.getFolder(folderId);\n const dialogs = folder.dialogs;\n\n const m: {[key in AnyDialog['_']]: (dialog: any) => boolean} = {\n dialog: (dialog1: Dialog) => dialog1.peerId === (dialog as Dialog).peerId,\n forumTopic: (dialog1: ForumTopic) => dialog1.id === (dialog as ForumTopic).id,\n savedDialog: (dialog1: SavedDialog) => dialog1.savedPeerId === (dialog as SavedDialog).savedPeerId\n };\n\n const cmp = m[dialog._];\n const wasIndex = dialogs.findIndex(cmp);\n const wasDialog = dialogs[wasIndex];\n const wasDialogIndex = this.getDialogIndex(wasDialog, indexKey);\n\n if(noIndex && !this.isVirtualFilter(folderId) && folderId > FOLDER_ID_ARCHIVE) {\n noIndex = undefined;\n }\n\n const newDialogIndex = noIndex ? undefined : this.setDialogIndexInFilter(dialog, indexKey, filter);\n\n if(wasDialogIndex === newDialogIndex) {\n return false;\n }\n\n if(!!wasDialogIndex !== !!newDialogIndex) {\n this.prepareFolderUnreadCountModifyingByDialog(folderId, dialog, !!newDialogIndex);\n }\n\n if(wasIndex !== -1) {\n dialogs.splice(wasIndex, 1);\n if(folder.count !== null) {\n --folder.count;\n }\n }\n\n if(newDialogIndex) {\n insertInDescendSortedArray(dialogs, dialog, (dialog) => this.getDialogIndex(dialog, indexKey), -1);\n\n if(wasIndex === -1 && folder.count !== null) {\n ++folder.count;\n }\n }\n\n return true;\n }\n\n public prepareDialogUnreadCountModifying(dialog: AnyDialog, toggle?: boolean) {\n if(isSavedDialog(dialog)) {\n return () => {};\n }\n\n const isTopic = isForumTopic(dialog);\n const callbacks: NoneToVoidFunction[] = [];\n\n const folderId = isTopic ? this.getFilterIdForForum(dialog) : dialog.folder_id;\n callbacks.push(this.prepareFolderUnreadCountModifyingByDialog(folderId, dialog, toggle));\n\n if(!isTopic) {\n const filters = this.filtersStorage.getFilters();\n for(const id in filters) {\n const filter = filters[id];\n if(this.filtersStorage.testDialogForFilter(dialog, filter)) {\n callbacks.push(this.prepareFolderUnreadCountModifyingByDialog(filter.id, dialog, toggle));\n }\n }\n }\n\n return () => !toggle && callbacks.forEach((callback) => callback());\n }\n\n public prepareFolderUnreadCountModifyingByDialog(folderId: number, dialog: AnyDialog, toggle?: boolean) {\n if(isSavedDialog(dialog)) {\n if(toggle !== undefined) {\n return;\n }\n\n return () => {};\n }\n\n const wasUnreadCount = this.appMessagesManager.getDialogUnreadCount(dialog);\n const wasUnmuted = this.isDialogUnmuted(dialog);\n\n if(toggle !== undefined) {\n const addMessagesCount = toggle ? wasUnreadCount : -wasUnreadCount;\n // this.modifyFolderUnreadCount(folderId, addMessagesCount, !!wasUnreadCount, wasUnreadCount && wasUnmuted, dialog);\n this.modifyFolderUnreadCount(folderId, addMessagesCount, toggle && !!wasUnreadCount, toggle && !!wasUnreadCount && wasUnmuted, dialog);\n return;\n }\n\n return () => {\n const newUnreadCount = this.appMessagesManager.getDialogUnreadCount(dialog);\n const newUnmuted = this.isDialogUnmuted(dialog);\n\n const addMessagesCount = newUnreadCount - wasUnreadCount;\n this.modifyFolderUnreadCount(folderId, addMessagesCount, !!newUnreadCount, newUnreadCount && newUnmuted, dialog);\n };\n }\n\n public modifyFolderUnreadCount(\n folderId: number,\n addMessagesCount: number,\n toggleDialog: boolean,\n toggleUnmuted: boolean,\n dialog: Dialog | ForumTopic\n ) {\n const {peerId} = dialog;\n const isForum = this.appPeersManager.isForum(peerId);\n const isTopic = isForumTopic(dialog);\n if(isForum && !isTopic && !(dialog as Dialog).pFlags.view_forum_as_messages) {\n const forumUnreadCount = this.getForumUnreadCount(peerId);\n if(forumUnreadCount instanceof Promise) {\n forumUnreadCount.then(({count, hasUnmuted}) => {\n dialog = this.getDialogOnly(peerId);\n const folder = this.getFolder(folderId);\n if(\n !dialog ||\n !this.appPeersManager.isForum(peerId) ||\n !folder ||\n !folder.dialogs.some((dialog) => dialog.peerId === peerId)\n ) {\n return;\n }\n\n this.modifyFolderUnreadCount(folderId, 0, false, false, dialog);\n });\n\n return;\n } else {\n addMessagesCount = 0;\n toggleDialog = forumUnreadCount.count > 0;\n toggleUnmuted = forumUnreadCount.hasUnmuted;\n }\n }\n\n const folder = this.getFolder(folderId);\n if(addMessagesCount) {\n folder.unreadMessagesCount = Math.max(0, folder.unreadMessagesCount + addMessagesCount);\n }\n\n const key = getDialogKey(dialog);\n if(toggleDialog) {\n folder.unreadPeerIds.add(key);\n } else {\n folder.unreadPeerIds.delete(key);\n }\n\n if(toggleUnmuted) {\n folder.unreadUnmutedPeerIds.add(key);\n } else {\n folder.unreadUnmutedPeerIds.delete(key);\n }\n\n folder.dispatchUnreadTimeout ??= ctx.setTimeout(() => {\n folder.dispatchUnreadTimeout = undefined;\n const _folder = {...folder};\n delete _folder.dialogs;\n this.rootScope.dispatchEvent('folder_unread', _folder);\n\n if(isTopic) { // * refresh forum dialog unread count\n this.processChangedUnreadOrUnmuted(peerId);\n }\n }, 0);\n }\n\n public processChangedUnreadOrUnmuted(peerId: PeerId) {\n const dialog = this.getDialogOnly(peerId);\n if(!dialog) {\n return;\n }\n\n this.processDialogForFilters(dialog);\n this.prepareDialogUnreadCountModifying(dialog)(); // * because counter won't be changed if only changed muted status\n this.rootScope.dispatchEvent('dialog_unread', {\n peerId,\n dialog\n });\n }\n\n public generateIndexForDialog(\n dialog: AnyDialog,\n justReturn?: boolean,\n message?: MyMessage,\n noPinnedOrderUpdate?: boolean\n ) {\n if(!justReturn/* && !isTopic */) {\n return;\n }\n\n const isTopic = isForumTopic(dialog);\n const _isDialog = isDialog(dialog);\n let topDate = 0, isPinned: boolean;\n if(isTopic && dialog.pFlags.hidden && CAN_HIDE_TOPIC) { // general topic must be first\n topDate = this.generateDialogPinnedDateByIndex(0xFFF);\n isPinned = true;\n } else if(dialog.pFlags.pinned && !noPinnedOrderUpdate) {\n topDate = this.generateDialogPinnedDate(dialog);\n isPinned = true;\n } else {\n const {peerId} = dialog;\n message ||= this.appMessagesManager.getMessageByPeer(peerId, dialog.top_message);\n\n topDate = (message as Message.message)?.date || topDate;\n\n if(_isDialog) {\n const channelId = this.appPeersManager.isChannel(peerId) && peerId.toChatId();\n if(channelId) {\n const channel = this.appChatsManager.getChat(channelId) as Chat.channel;\n if(!topDate || (channel.date && channel.date > topDate)) {\n topDate = channel.date;\n }\n }\n }\n\n if(\n (isTopic || _isDialog) &&\n dialog.draft?._ === 'draftMessage' &&\n dialog.draft.date > topDate\n ) {\n topDate = dialog.draft.date;\n }\n }\n\n topDate ||= tsNow(true);\n\n const index = this.generateDialogIndex(topDate, isPinned);\n if(justReturn) {\n return index;\n }\n\n const indexKey = getDialogIndexKey((dialog as Dialog).folder_id);\n setDialogIndex(dialog, indexKey, index);\n }\n\n public generateDialogPinnedDateByIndex(pinnedIndex: number) {\n return 0x7fff0000 + (pinnedIndex & 0xFFFF); // 0xFFFF - потому что в папках может быть бесконечное число пиннедов\n }\n\n public generateDialogPinnedDate(dialog: AnyDialog) {\n const order = this.getPinnedOrdersByDialog(dialog);\n\n const dialogKey = getDialogKey(dialog);\n let pinnedIndex = order.indexOf(dialogKey);\n if(pinnedIndex === -1) {\n order.unshift(dialogKey);\n pinnedIndex = 0;\n\n if(isDialog(dialog)) {\n this.savePinnedOrders();\n }\n }\n\n return this.generateDialogPinnedDateByIndex(order.length - 1 - pinnedIndex);\n }\n\n /* public generateDialog(peerId: PeerId) {\n const dialog: Dialog = {\n _: 'dialog',\n pFlags: {},\n peer: this.appPeersManager.getOutputPeer(peerId),\n top_message: 0,\n read_inbox_max_id: 0,\n read_outbox_max_id: 0,\n unread_count: 0,\n unread_mentions_count: 0,\n notify_settings: {\n _: 'peerNotifySettings',\n },\n };\n\n return dialog;\n } */\n\n private getDialogMessageForState(dialog: AnyDialog) {\n const {peerId} = dialog;\n const threadId = isSavedDialog(dialog) ? dialog.savedPeerId : undefined;\n const historyStorage = this.appMessagesManager.getHistoryStorage(peerId, threadId);\n const messagesStorage = this.appMessagesManager.getHistoryMessagesStorage(peerId);\n const history = historyStorage.history.slice;\n let incomingMessage: MyMessage;\n for(let i = 0, length = history.length; i < length; ++i) {\n const mid = history[i];\n const message: MyMessage = this.appMessagesManager.getMessageFromStorage(messagesStorage, mid);\n if(message && !message.pFlags.is_outgoing/* || peerId === SERVICE_PEER_ID */) {\n incomingMessage = message;\n break;\n }\n }\n\n return incomingMessage;\n }\n\n public setDialogToState(dialog: AnyDialog) {\n if(!isDialog(dialog)) {\n return;\n }\n\n const {peerId, pts} = dialog;\n const incomingMessage = this.getDialogMessageForState(dialog);\n if(incomingMessage) {\n const peerIds = getPeerIdsFromMessage(incomingMessage);\n this.peersStorage.requestPeersForKey(peerIds, `topMessage_${peerId}`);\n }\n\n dialog.topMessage = incomingMessage;\n\n // DO NOT TOUCH THESE LINES, SOME REAL MAGIC HERE.\n // * Read service chat when refreshing page with outgoing & getting new service outgoing message\n /* if(incomingMessage && dialog.read_inbox_max_id >= dialog.top_message) {\n dialog.unread_count = 0;\n }\n\n dialog.read_inbox_max_id = this.appMessagesIdsManager.clearMessageId(dialog.read_inbox_max_id);\n dialog.read_outbox_max_id = this.appMessagesIdsManager.clearMessageId(dialog.read_outbox_max_id); */\n // CAN TOUCH NOW\n\n if(peerId.isAnyChat() && pts) {\n const newPts = this.apiUpdatesManager.getChannelState(peerId.toChatId(), pts).pts;\n dialog.pts = newPts;\n }\n\n this.storage.set({\n [peerId]: dialog\n });\n\n this.peersStorage.requestPeer(peerId, 'dialog');\n\n /* for(let id in this.filtersStorage.filters) {\n const filter = this.filtersStorage.filters[id];\n\n if(this.filtersStorage.testDialogForFilter(dialog, filter)) {\n\n }\n } */\n }\n\n public pushDialog({dialog, offsetDate, ignoreOffsetDate, saveGlobalOffset}: {\n dialog: AnyDialog,\n offsetDate?: number,\n ignoreOffsetDate?: boolean,\n saveGlobalOffset?: boolean\n }) {\n const _isDialog = isDialog(dialog);\n const {peerId} = dialog;\n const key = getDialogKey(dialog);\n\n if(_isDialog) {\n this.dialogs[key] = dialog;\n } else if(isForumTopic(dialog)) {\n const forumTopics = this.getForumTopicsCache(peerId);\n forumTopics.topics.set(key, dialog);\n } else if(isSavedDialog(dialog)) {\n this.savedDialogs[key] = dialog;\n }\n\n offsetDate ??= this.getDialogOffsetDate(dialog);\n\n // if(!isTopic) {\n this.processDialogForFilters(dialog);\n // }\n\n if(offsetDate && !dialog.pFlags.pinned) {\n if(_isDialog && saveGlobalOffset) {\n const savedGlobalOffsetDate = this.dialogsOffsetDate[GLOBAL_FOLDER_ID];\n if(!savedGlobalOffsetDate || offsetDate < savedGlobalOffsetDate) {\n this.setDialogOffsetDate(GLOBAL_FOLDER_ID, offsetDate);\n }\n }\n\n const folderId = this.getDialogFilterId(dialog);\n const savedOffsetDate = this.dialogsOffsetDate[folderId];\n if(!savedOffsetDate || offsetDate < savedOffsetDate) {\n // if(pos !== -1) {\n if(!ignoreOffsetDate && !this.isDialogsLoaded(folderId)) {\n this.dropDialog(peerId, getDialogThreadId(dialog), true);\n return;\n }\n\n this.setDialogOffsetDate(folderId, offsetDate);\n }\n }\n\n this.setDialogToState(dialog);\n\n // if(pos === -1) {\n // this.prepareFolderUnreadCountModifyingByDialog(folder_id, dialog, true);\n // }\n\n // const indexKey = getDialogIndexKey(folder_id);\n // /* const newPos = */insertInDescendSortedArray(dialogs, dialog, (dialog) => getDialogIndex(dialog, indexKey), -1);\n /* if(pos !== -1 && pos !== newPos) {\n rootScope.dispatchEvent('dialog_order', {dialog, pos: newPos});\n } */\n }\n\n public dropDialogFromFolders(peerId: PeerId, topicOrSavedId?: number, keepLocal?: boolean) {\n const foundDialog = this.getDialog(peerId, undefined, topicOrSavedId, false);\n const [dialog, index] = foundDialog;\n if(dialog) {\n const filterId = this.getDialogFilterId(dialog);\n\n // const folder = this.getFolder(filterId);\n // folder.dialogs.splice(index, 1);\n const wasPinned = indexOfAndSplice(this.getPinnedOrders(filterId), getDialogKey(dialog)) !== undefined;\n\n this.processDialogForFilters(dialog, true);\n\n if(!keepLocal) {\n if(isForumTopic(dialog)) {\n const cache = this.getForumTopicsCache(peerId);\n cache.index.indexObject(topicOrSavedId, '');\n } else if(isSavedDialog(dialog)) {\n\n } else {\n this.dialogsIndex.indexObject(peerId, '');\n }\n }\n\n if(wasPinned) {\n this.savePinnedOrders();\n }\n }\n\n return foundDialog;\n }\n\n public dropDialog(peerId: PeerId, topicOrSavedId?: number, keepLocal?: boolean) {\n const dialog = this.getAnyDialog(peerId, topicOrSavedId);\n const foundDialog = this.dropDialogFromFolders(peerId, topicOrSavedId, keepLocal);\n if(dialog) {\n if(!keepLocal) {\n if(isForumTopic(dialog)) {\n this.getForumTopicsCache(peerId).topics.delete(topicOrSavedId);\n } else if(isSavedDialog(dialog)) {\n delete this.savedDialogs[topicOrSavedId];\n } else {\n delete this.dialogs[peerId];\n }\n }\n\n this.clearDialogFromState(dialog, keepLocal);\n }\n\n return foundDialog;\n }\n\n public clearDialogFromState(dialog: AnyDialog, keepLocal: boolean) {\n if(!isDialog(dialog)) {\n return;\n }\n\n const {peerId} = dialog;\n this.peersStorage.requestPeersForKey([], `topMessage_${peerId}`);\n this.peersStorage.releasePeer(peerId, 'dialog');\n this.storage.delete(peerId, keepLocal);\n }\n\n public dropDialogWithEvent(peerId: PeerId, topicOrSavedId?: number) {\n const dropped = this.dropDialog(peerId, topicOrSavedId);\n if(dropped.length) {\n this.rootScope.dispatchEvent('dialog_drop', dropped[0]);\n }\n\n return dropped;\n }\n\n /**\n * leaving chat, leaving channel, deleting private dialog\n */\n public dropDialogOnDeletion(peerId: PeerId, topicOrSavedId?: number) {\n this.dropDialogWithEvent(peerId, topicOrSavedId);\n\n // * drop 'you joined this channel' service message\n if(this.appPeersManager.isBroadcast(peerId)) {\n const historyStorage = this.appMessagesManager.getHistoryStorage(peerId);\n const mid = historyStorage?.channelJoinedMid;\n if(mid) {\n historyStorage.channelJoinedMid = undefined;\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateDeleteChannelMessages',\n channel_id: peerId.toChatId(),\n messages: [mid],\n pts: undefined,\n pts_count: undefined\n });\n }\n }\n\n this.rootScope.dispatchEvent('peer_deleted', peerId);\n }\n\n public applyDialogs(\n result: MessagesPeerDialogs | MessagesForumTopics | ({_: 'messages.savedDialogs', dialogs: SavedDialog[]} & Parameters[0]),\n peerId?: PeerId\n ) {\n // * В эту функцию попадут только те диалоги, в которых есть read_inbox_max_id и read_outbox_max_id, в отличие от тех, что будут в getTopMessages\n\n const isForum = result._ === 'messages.forumTopics';\n const isSaved = result._ === 'messages.savedDialogs';\n const isDialog = !isForum && !isSaved;\n const items = isForum ? result.topics : result.dialogs;\n if(isForum) {\n this.processTopics(peerId, result);\n } else if(isDialog) {\n // ! fix 'dialogFolder', maybe there is better way to do it, this only can happen by 'messages.getPinnedDialogs' by folder_id: 0\n forEachReverse(result.dialogs, (dialog, idx, arr) => {\n if(dialog._ === 'dialogFolder') {\n arr.splice(idx, 1);\n }\n });\n }\n\n this.appMessagesManager.saveApiResult(result);\n\n // this.appMessagesManager.log('applyConversation', dialogsResult);\n\n const updatedDialogs: BroadcastEvents['dialogs_multiupdate'] = new Map();\n const getUpdateCache = (peerId: PeerId) => {\n let cache = updatedDialogs.get(peerId);\n if(!cache) {\n updatedDialogs.set(peerId, cache = {});\n }\n\n return cache;\n };\n\n items.forEach((dialog) => {\n assumeType(dialog);\n const peerId = this.getDialogPeerId(dialog);\n let topMid = dialog.top_message;\n\n const {pendingTopMsgs} = this.appMessagesManager;\n let pendingTopMsgKey: keyof typeof pendingTopMsgs, dialogKey: number;\n if(isDialog) {\n pendingTopMsgKey = peerId;\n } else if(isForum) {\n dialogKey = this.appMessagesIdsManager.generateMessageId(\n (dialog as ForumTopic).id,\n this.getDialogPeerId(dialog).toChatId()\n );\n pendingTopMsgKey = `${peerId}_${dialogKey}`;\n } else {\n dialogKey = getPeerId((dialog as SavedDialog).peer);\n pendingTopMsgKey = `${peerId}_${dialogKey}`;\n }\n\n const topPendingMid = pendingTopMsgs[pendingTopMsgKey];\n if(topPendingMid) {\n const topPendingMessage = this.appMessagesManager.getMessageByPeer(peerId, topPendingMid) as MyMessage;\n const topMessage = this.appMessagesManager.getMessageByPeer(peerId, topMid) as MyMessage;\n if(!topMid || (topPendingMessage && (!topMessage || topPendingMessage?.date > topMessage?.date))) {\n dialog.top_message = topMid = topPendingMid;\n this.appMessagesManager.getHistoryStorage(peerId, dialogKey).maxId = topPendingMid;\n }\n }\n\n if(topMid || (dialog as Dialog | ForumTopic).draft?._ === 'draftMessage') {\n if(this.saveDialog({dialog})) {\n const cache = getUpdateCache(peerId);\n\n if(isForum) {\n (cache.topics ??= new Map()).set(\n (dialog as ForumTopic).id,\n dialog as ForumTopic\n );\n } else if(isSaved) {\n (cache.saved ??= new Map()).set(\n (dialog as SavedDialog).savedPeerId,\n dialog as SavedDialog\n );\n } else {\n cache.dialog = dialog as Dialog;\n }\n }\n } else {\n this.dropDialogWithEvent(peerId, dialogKey);\n }\n\n const key = this.appMessagesManager.getUpdateAfterReloadKey(peerId, dialogKey);\n const updates = this.appMessagesManager.newUpdatesAfterReloadToHandle[key];\n if(updates !== undefined) {\n const slicedUpdates = [...updates]; // ! have to clone set, otherwise will have infinite loop if element is inserted again\n for(const update of slicedUpdates) {\n updates.delete(update);\n this.apiUpdatesManager.saveUpdate(update);\n }\n\n if(!updates.size) {\n delete this.appMessagesManager.newUpdatesAfterReloadToHandle[key];\n }\n }\n });\n\n if(updatedDialogs.size) {\n this.rootScope.dispatchEvent('dialogs_multiupdate', updatedDialogs);\n }\n }\n\n // ! do not use draft here, empty dialogs with drafts are excluded from .getDialogs response\n private getDialogOffsetDate(dialog: AnyDialog) {\n const message = this.getDialogMessageForState(dialog);\n return message?.date || 0;\n }\n\n private setDialogOffsetDate(folderId: number, offsetDate: number) {\n this.log('setting offset date', folderId, offsetDate);\n return this.dialogsOffsetDate[folderId] = offsetDate;\n }\n\n public canSaveDialog(peerId: PeerId, dialog: Dialog) {\n if(peerId.isAnyChat()) {\n const chat: Chat = this.appChatsManager.getChat(peerId.toChatId());\n // ! chatForbidden stays for chat where you're kicked\n if(\n chat._ === 'channelForbidden' ||\n // (chat as Chat.chat).pFlags.deactivated || // ! deactivated means migrated, must save them\n // || chat._ === 'chatForbidden'\n (chat as Chat.chat).pFlags.left\n // || (chat as any).pFlags.kicked\n ) {\n return false;\n }\n } else if(this.appUsersManager.isDeleted(peerId.toUserId()) && !getServerMessageId(dialog.top_message)) {\n return false;\n }\n\n return true;\n }\n\n public getDialogPeerId(dialog: AnyDialog) {\n const {peerId} = dialog;\n if(peerId) {\n return peerId;\n }\n\n if(isSavedDialog(dialog)) {\n return this.appPeersManager.peerId;\n }\n\n return this.appPeersManager.getPeerId(dialog.peer);\n }\n\n /**\n * Won't save migrated from peer, forbidden peers, left and kicked\n */\n public saveDialog({\n dialog,\n folderId,\n ignoreOffsetDate,\n saveGlobalOffset\n }: {\n dialog: AnyDialog,\n folderId?: REAL_FOLDER_ID,\n ignoreOffsetDate?: boolean,\n saveGlobalOffset?: boolean\n }) {\n const isTopic = isForumTopic(dialog);\n const isSaved = isSavedDialog(dialog);\n const _isDialog = isDialog(dialog);\n\n const peerId = this.getDialogPeerId(dialog);\n const channelId = this.appPeersManager.isChannel(peerId) ? peerId.toChatId() : undefined;\n\n const savedPeerId = isSaved ? getPeerId(dialog.peer) : undefined;\n const topicId = isTopic ?\n dialog.id = this.appMessagesIdsManager.generateMessageId(dialog.id, channelId) :\n (isSaved ? savedPeerId : undefined);\n if(_isDialog) {\n folderId ??= dialog.folder_id ?? FOLDER_ID_ALL;\n }\n\n if(!peerId) {\n this.log.error('saveConversation no peerId???', dialog, folderId);\n return false;\n }\n\n if(_isDialog && dialog._ !== 'dialog'/* || peerId === 239602833 */) {\n this.log.error('saveConversation not regular dialog', dialog, Object.assign({}, dialog));\n }\n\n if(_isDialog && !channelId && peerId.isAnyChat()) {\n const chat = this.appChatsManager.getChat(peerId.toChatId()) as Chat.chat;\n if(chat && chat.migrated_to && chat.pFlags.deactivated) {\n const migratedToPeer = this.appPeersManager.getPeerId(chat.migrated_to);\n this.appMessagesManager.migratedFromTo[peerId] = migratedToPeer;\n this.appMessagesManager.migratedToFrom[migratedToPeer] = peerId;\n dialog.migratedTo = migratedToPeer;\n // return;\n }\n }\n\n if(_isDialog && !this.canSaveDialog(peerId, dialog)) {\n return false;\n }\n\n if(isTopic) {\n const cache = this.getForumTopicsCache(peerId);\n cache.index.indexObject(topicId, dialog.title);\n } else if(_isDialog && !dialog.migratedTo) {\n const peerText = this.appPeersManager.getPeerSearchText(peerId);\n this.dialogsIndex.indexObject(peerId, peerText);\n }\n\n const wasDialogBefore = this.getAnyDialog(peerId, topicId);\n\n let mid: number, message: MyMessage;\n if(dialog.top_message || true) {\n mid = this.appMessagesIdsManager.generateMessageId(dialog.top_message, channelId);// dialog.top_message;\n\n // preserve outgoing message\n const wasTopMessage = wasDialogBefore?.top_message && this.appMessagesManager.getMessageByPeer(peerId, wasDialogBefore.top_message) as MyMessage;\n if(wasTopMessage?.pFlags?.is_outgoing && wasDialogBefore.top_message >= mid) {\n mid = wasDialogBefore.top_message;\n }\n\n message = this.appMessagesManager.getMessageByPeer(peerId, mid);\n }/* else {\n mid = this.appMessagesManager.generateTempMessageId(peerId);\n message = {\n _: 'message',\n id: mid,\n mid,\n from_id: this.appPeersManager.getOutputPeer(this.appUsersManager.getSelf().id.toPeerId(false)),\n peer_id: this.appPeersManager.getOutputPeer(peerId),\n pFlags: {out: true},\n date: 0,\n message: ''\n };\n this.appMessagesManager.saveMessages([message], {isOutgoing: true});\n } */\n\n // if(!message?.pFlags) {\n // this.appMessagesManager.log.error('saveConversation no message:', dialog, message);\n // }\n\n dialog.top_message = mid;\n // dialog.unread_count = wasDialogBefore && dialog.read_inbox_max_id === getServerMessageId(wasDialogBefore.read_inbox_max_id) ? wasDialogBefore.unread_count : dialog.unread_count;\n if(!isSaved) {\n dialog.read_inbox_max_id = this.appMessagesIdsManager.generateMessageId(wasDialogBefore && !dialog.read_inbox_max_id ? (wasDialogBefore as typeof dialog).read_inbox_max_id : dialog.read_inbox_max_id, channelId);\n dialog.read_outbox_max_id = this.appMessagesIdsManager.generateMessageId(wasDialogBefore && !dialog.read_outbox_max_id ? (wasDialogBefore as typeof dialog).read_outbox_max_id : dialog.read_outbox_max_id, channelId);\n }\n\n if(_isDialog && dialog.folder_id === undefined) {\n if(dialog._ === 'dialog') {\n // ! СЛОЖНО ! СМОТРИ В getTopMessages\n dialog.folder_id = wasDialogBefore ? (wasDialogBefore as typeof dialog).folder_id : folderId;\n }/* else if(dialog._ === 'dialogFolder') {\n dialog.folder_id = dialog.folder.id;\n } */\n }\n\n if(!isSaved) {\n dialog.draft = this.appDraftsManager.saveDraft({\n peerId,\n threadId: topicId,\n draft: dialog.draft\n });\n } else {\n dialog.savedPeerId = savedPeerId;\n }\n dialog.peerId = peerId;\n // dialog.indexes ??= {} as any;\n\n // * Because we saved message without dialog present\n if(!isSaved && message && message.pFlags.is_outgoing) {\n const isOut = message.pFlags.out;\n const maxId = dialog[isOut ? 'read_outbox_max_id' : 'read_inbox_max_id'];\n if(mid > maxId) {\n message.pFlags.unread = true;\n\n if(!dialog.unread_count && !isOut) {\n ++dialog.unread_count;\n }\n } else {\n delete message.pFlags.unread;\n }\n }\n\n const historyStorage = this.appMessagesManager.getHistoryStorage(peerId, topicId);\n const slice = historyStorage.history.slice;\n if(!mid) {\n\n } else if(!slice.length || !slice.isEnd(SliceEnd.Bottom)) { // * second condition will probably never happen, however, if it does, then it will fix slice with top_message\n historyStorage.history.unshift(mid);\n historyStorage.count ||= historyStorage.history.length;\n if(this.appMessagesManager.mergeReplyKeyboard(historyStorage, message)) {\n this.rootScope.dispatchEvent('history_reply_markup', {peerId});\n }\n\n if(historyStorage.originalInsertSlice) {\n this.appMessagesManager.insertChannelJoinedService(peerId, historyStorage, historyStorage.history.slice);\n }\n } else if(_isDialog && !wasDialogBefore) {\n this.appMessagesManager.insertChannelJoinedService(peerId, historyStorage);\n }\n\n // * if set channel joined message\n if(_isDialog && dialog.top_message < historyStorage.history.first[0]) {\n mid = dialog.top_message = historyStorage.history.first[0];\n dialog.topMessage = this.appMessagesManager.getMessageByPeer(peerId, dialog.top_message);\n }\n\n historyStorage.maxId = mid;\n if(!isSaved) {\n historyStorage.readMaxId = dialog.read_inbox_max_id;\n historyStorage.readOutboxMaxId = dialog.read_outbox_max_id;\n\n this.appNotificationsManager.savePeerSettings({\n peerId,\n threadId: isTopic ? dialog.id : undefined,\n settings: dialog.notify_settings\n });\n }\n\n if(_isDialog && channelId && dialog.pts) {\n this.apiUpdatesManager.addChannelState(channelId, dialog.pts);\n }\n\n this.generateIndexForDialog(dialog);\n\n if(wasDialogBefore) {\n // fix unread count\n const releaseUnreadCount = this.dialogsStorage.prepareDialogUnreadCountModifying(wasDialogBefore);\n safeReplaceObject(wasDialogBefore, dialog);\n releaseUnreadCount();\n }\n\n this.pushDialog({\n dialog,\n ignoreOffsetDate,\n saveGlobalOffset\n });\n\n if(isTopic) {\n this.processTopicUpdate(dialog, wasDialogBefore as ForumTopic);\n }\n\n return true;\n }\n\n public processTopicUpdate(topic: ForumTopic, oldTopic?: ForumTopic) {\n if(!oldTopic) {\n return;\n }\n\n const {peerId, id: threadId} = topic;\n const isIconChanged = topic.icon_emoji_id !== (oldTopic as ForumTopic).icon_emoji_id;\n const isTitleChanged = topic.title !== (oldTopic as ForumTopic).title;\n const isChanged = isIconChanged || isTitleChanged;\n\n if(isIconChanged) {\n this.rootScope.dispatchEvent('avatar_update', {peerId, threadId});\n }\n\n if(isChanged) {\n this.rootScope.dispatchEvent('peer_title_edit', {peerId, threadId});\n }\n }\n\n public getDialogs(options: {\n query?: string,\n offsetIndex?: number,\n limit?: number,\n filterId?: number,\n skipMigrated?: boolean,\n forceLocal?: boolean,\n recursion?: boolean,\n filterType?: FilterType\n }): MaybePromise<{\n dialogs: Folder['dialogs'],\n count: number,\n isTopEnd: boolean,\n isEnd: boolean\n }> {\n const {\n query = '',\n offsetIndex,\n limit = 20,\n filterId = FOLDER_ID_ALL,\n filterType = this.getFilterType(filterId),\n skipMigrated = filterType === FilterType.Forum,\n forceLocal,\n recursion\n } = options;\n\n const isForum = this.isFilterIdForForum(filterId);\n const isVirtualFilter = this.isVirtualFilter(filterId);\n if(!isVirtualFilter && !REAL_FOLDERS.has(filterId)) {\n const promises: Promise[] = [];\n\n const fillContactsResult = this.appUsersManager.fillContacts();\n if(!fillContactsResult.cached) {\n promises.push(fillContactsResult.promise);\n }\n\n const reloadMissingDialogsPromise = this.filtersStorage.reloadMissingPeerIds(filterId);\n if(reloadMissingDialogsPromise) {\n promises.push(reloadMissingDialogsPromise);\n }\n\n if(promises.length) {\n return Promise.all(promises).then(() => {\n return this.getDialogs(options);\n });\n }\n }\n\n // let's load only first pages by certain folderId. next pages will load without folder filtering\n const realFolderId/* : REAL_FOLDER_ID */ =\n (!REAL_FOLDERS.has(filterId) || this.getOffsetDate(filterId)) && !isVirtualFilter ?\n GLOBAL_FOLDER_ID :\n filterId/* as REAL_FOLDER_ID */;\n let curDialogStorage = this.getFolderDialogs(filterId, skipMigrated);\n\n const indexKey = this.getDialogIndexKeyByFilterId(filterId);\n const isSearchSupported = filterType !== FilterType.Saved;\n const isServerSearchSupported = filterType === FilterType.Forum;\n\n if(TEST_NO_SAVED && filterType === FilterType.Saved) {\n throw makeError('SAVED_DIALOGS_UNSUPPORTED');\n }\n\n if(query && isSearchSupported) {\n if(!limit || this.cachedResults.query !== query || this.cachedResults.folderId !== filterId || recursion) {\n this.cachedResults.query = query;\n this.cachedResults.folderId = filterId;\n\n const index = isForum ? this.getForumTopicsCache(filterId).index : this.dialogsIndex;\n const results = index.search(query);\n\n const dialogs: DialogsStorage['cachedResults']['dialogs'] = [];\n if(isForum) for(const topicId of results) {\n const topic = this.getForumTopic(filterId, topicId);\n if(topic) {\n dialogs.push(topic);\n }\n } else for(const peerId of results) {\n const dialog = this.dialogs[peerId];\n if(dialog && dialog.folder_id === filterId) {\n dialogs.push(dialog);\n }\n }\n\n dialogs.sort((d1, d2) => this.getDialogIndex(d2, indexKey) - this.getDialogIndex(d1, indexKey));\n this.cachedResults.dialogs = dialogs;\n this.cachedResults.count = dialogs.length;\n }\n\n curDialogStorage = this.cachedResults.dialogs;\n } else {\n this.cachedResults.query = '';\n }\n\n let offset = 0;\n if(offsetIndex > 0) {\n for(let length = curDialogStorage.length; offset < length; ++offset) {\n if(offsetIndex > this.getDialogIndex(curDialogStorage[offset], indexKey)) {\n break;\n }\n }\n }\n\n const loadedAll = this.isDialogsLoaded(realFolderId);\n const isEnoughDialogs = curDialogStorage.length >= (offset + limit);\n if((isServerSearchSupported ? false : query) || loadedAll || isEnoughDialogs || forceLocal) {\n const dialogs = curDialogStorage.slice(offset, offset + limit);\n return {\n dialogs,\n count: loadedAll ? curDialogStorage.length : this.getFolder(filterId).count,\n isTopEnd: curDialogStorage.length && ((dialogs[0] && dialogs[0] === curDialogStorage[0]) || this.getDialogIndex(curDialogStorage[0], indexKey) < offsetIndex),\n isEnd: ((isServerSearchSupported ? false : query) || loadedAll) && (offset + limit) >= curDialogStorage.length\n };\n }\n\n return this.appMessagesManager.getTopMessages({\n limit,\n folderId: realFolderId,\n query,\n offsetTopicId: isForum && query ? (curDialogStorage[curDialogStorage.length - 1] as ForumTopic)?.id : undefined\n }).then((result) => {\n if(query) {\n return this.getDialogs({\n ...options,\n forceLocal: true,\n recursion: true\n });\n }\n\n const folder = this.getFolder(filterId);\n folder.count = result.count;\n\n if(skipMigrated) {\n curDialogStorage = this.getFolderDialogs(filterId, skipMigrated);\n }\n\n offset = 0;\n if(offsetIndex > 0) {\n for(let length = curDialogStorage.length; offset < length; ++offset) {\n if(offsetIndex > this.getDialogIndex(curDialogStorage[offset], indexKey)) {\n break;\n }\n }\n }\n\n // this.log.warn(offset, offset + limit, curDialogStorage.dialogs.length, this.dialogs.length);\n\n const dialogs = curDialogStorage.slice(offset, offset + limit);\n return {\n dialogs,\n count: result.count ?? curDialogStorage.length,\n isTopEnd: curDialogStorage.length && ((dialogs[0] && dialogs[0] === curDialogStorage[0]) || this.getDialogIndex(curDialogStorage[0], indexKey) < offsetIndex),\n // isEnd: this.isDialogsLoaded(realFolderId) && (offset + limit) >= curDialogStorage.length\n isEnd: result.isEnd && curDialogStorage[curDialogStorage.length - 1] === dialogs[dialogs.length - 1]\n };\n });\n }\n\n public async markFolderAsRead(folderId: number) {\n const folder = this.getFolder(folderId);\n const peerIds = [...folder.unreadPeerIds];\n for(const peerId of peerIds) {\n await this.appMessagesManager.markDialogUnread(peerId, true);\n }\n }\n\n // * FORUMS SECTION\n\n public flushForumTopicsCache(peerId: PeerId) {\n const cache = this.forumTopics.get(peerId);\n if(!cache) {\n return;\n }\n\n const folder = this.folders[peerId];\n if(folder) {\n if(folder.dispatchUnreadTimeout) {\n clearTimeout(folder.dispatchUnreadTimeout);\n }\n\n delete this.allDialogsLoaded[peerId];\n delete this.pinnedOrders[peerId];\n delete this.dialogsOffsetDate[peerId];\n delete this.folders[peerId];\n }\n\n cache.topics.clear();\n\n // for permanent delete\n // this.forumTopics.delete(peerId);\n }\n\n public getForumTopicsCache(peerId: PeerId) {\n let forumTopics = this.forumTopics.get(peerId);\n if(!forumTopics) {\n forumTopics = {\n topics: new Map(),\n deletedTopics: new Set(),\n getTopicPromises: new Map(),\n index: this.createSearchIndex()\n };\n\n this.forumTopics.set(peerId, forumTopics);\n }\n\n return forumTopics;\n }\n\n public getForumTopicById(peerId: PeerId, topicId?: number): Promise {\n if(!this.appPeersManager.isForum(peerId)) {\n return Promise.reject(makeError('CHANNEL_FORUM_MISSING'));\n }\n\n const cache = this.getForumTopicsCache(peerId);\n let promise: CancellablePromise;\n if(topicId) {\n promise = cache.getTopicPromises.get(topicId);\n if(promise) {\n return promise;\n }\n\n if(cache.deletedTopics.has(topicId)) {\n return Promise.resolve(undefined);\n }\n\n cache.getTopicPromises.set(topicId, promise = deferredPromise());\n }\n\n cache.getTopicsPromise ??= pause(0).then(() => {\n const promises: {[topicId: number]: typeof promise} = {};\n const ids: number[] = [];\n for(const [topicId, promise] of cache.getTopicPromises) {\n promises[topicId] = promise;\n ids.push(getServerMessageId(topicId));\n }\n\n cache.getTopicPromises.clear();\n\n const fullfillLeft = () => {\n for(const topicId in promises) {\n promises[topicId].resolve(undefined);\n cache.deletedTopics.add(+topicId);\n }\n };\n\n if(this.getForumTopicsCache(peerId) !== cache) {\n fullfillLeft();\n return;\n }\n\n return this.apiManager.invokeApi('channels.getForumTopicsByID', {\n channel: this.appChatsManager.getChannelInput(peerId.toChatId()),\n topics: ids\n }).then((messagesForumTopics) => {\n if(this.getForumTopicsCache(peerId) !== cache) {\n return;\n }\n\n this.applyDialogs(messagesForumTopics, peerId);\n\n messagesForumTopics.topics.forEach((forumTopic) => {\n if(isForumTopic(forumTopic as ForumTopic)) {\n promises[forumTopic.id].resolve(forumTopic as ForumTopic);\n delete promises[forumTopic.id];\n }\n });\n\n return messagesForumTopics;\n }, () => {}).then(() => {\n fullfillLeft();\n\n cache.getTopicsPromise = undefined;\n if(cache.getTopicPromises.size) {\n this.getForumTopicById(peerId);\n }\n });\n });\n\n return promise || cache.getTopicsPromise;\n }\n\n public getForumTopic(peerId: PeerId, topicId: number) {\n const forumTopics = this.forumTopics.get(peerId);\n return forumTopics?.topics?.get(topicId);\n }\n\n public getForumTopicOrReload(peerId: PeerId, topicId: number) {\n const forumTopic = this.getForumTopic(peerId, topicId);\n if(forumTopic) {\n return forumTopic;\n }\n\n const cache = this.getForumTopicsCache(peerId);\n return cache?.deletedTopics?.has(topicId) ? undefined : this.getForumTopicById(peerId, topicId);\n }\n\n public processTopics>(peerId: PeerId, result: T) {\n return callbackify(result, (result) => {\n if('pts' in result) {\n this.apiUpdatesManager.addChannelState(peerId.toChatId(), result.pts);\n }\n\n const peer = this.appPeersManager.getOutputPeer(peerId);\n result.topics = result.topics.map((topic) => {\n if(!isForumTopic(topic as ForumTopic)) {\n return;\n }\n\n (topic as ForumTopic).peer = peer;\n topic.id = this.appMessagesIdsManager.generateMessageId(topic.id, (peer as Peer.peerChannel).channel_id);\n return topic;\n }).filter(Boolean);\n\n return result;\n });\n }\n\n public processTopicsPromise[1]>>(peerId: PeerId, promise: T): T {\n return promise.then((result) => {\n this.processTopics(peerId, result);\n return result;\n }) as any;\n }\n\n public getForumUnreadCount(peerId: PeerId, ignoreIfAsMessages?: boolean) {\n if(!this.appPeersManager.isForum(peerId)) {\n return;\n }\n\n if(ignoreIfAsMessages) {\n const dialog = this.getDialogOnly(peerId);\n if(dialog && dialog.pFlags.view_forum_as_messages) {\n return;\n }\n }\n\n const folder = this.getFolder(peerId);\n\n const f = folder.dialogs.length >= 20 || this.isDialogsLoaded(peerId) ?\n folder.dialogs.slice(0, 20) :\n callbackify(this.getDialogs({filterId: peerId, limit: 20}), (result) => {\n return result.dialogs;\n });\n\n return callbackify(f, (dialogs) => {\n assumeType(dialogs);\n return {\n count: dialogs.reduce((acc, v) => acc + +!!v.unread_count, 0),\n hasUnmuted: dialogs.some((dialog) => dialog.unread_count && this.isDialogUnmuted(dialog))\n };\n });\n }\n\n public canManageTopic(forumTopic: ForumTopic) {\n if(forumTopic.pFlags.my) {\n return true;\n }\n\n const chatId = forumTopic.peerId.toChatId();\n return ((this.appChatsManager.getChat(chatId) as Chat.channel).admin_rights ? this.appChatsManager.hasRights(forumTopic.peerId.toChatId(), 'manage_topics') : false);\n }\n\n // * FORUMS SECTION END\n\n // * SAVED SECTION\n\n public getSavedDialogById(peerId: PeerId) {\n let promise = this.savedDialogsPromises.get(peerId);\n if(promise) {\n return promise;\n }\n\n const myId = this.appPeersManager.peerId;\n promise = this.apiManager.invokeApi('messages.getSavedHistory', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n add_offset: 0,\n hash: 0,\n limit: 1,\n max_id: 0,\n min_id: 0,\n offset_date: 0,\n offset_id: 0\n }).then((messagesMessages) => {\n assumeType>(messagesMessages);\n\n if(this.savedDialogsPromises.get(peerId) === promise) {\n this.savedDialogsPromises.delete(peerId);\n }\n\n this.appMessagesManager.saveApiResult(messagesMessages);\n\n const messages = messagesMessages.messages;\n const message = messages[0];\n if(!message) {\n this.log('reloaded saved dialog is empty', peerId);\n this.dropDialogOnDeletion(myId, peerId);\n return;\n }\n\n const pinnedOrder = this.getPinnedOrders(myId);\n const dialog: SavedDialog = {\n _: 'savedDialog',\n peer: this.appPeersManager.getOutputPeer(peerId),\n pFlags: {\n pinned: pinnedOrder.includes(peerId) || undefined\n },\n top_message: message.id || 0\n };\n\n this.log('saving reloaded saved dialog', peerId);\n this.applyDialogs({\n _: 'messages.savedDialogs',\n dialogs: [dialog]\n });\n\n return dialog.peerId ? dialog : undefined;\n });\n }\n\n // * SAVED SECTION END\n\n private handleDialogTogglePinned(dialog: AnyDialog, pinned: boolean, folderId: number) {\n if(dialog) {\n if(!pinned) {\n this.handleDialogUnpinning(dialog, folderId);\n } else { // means set\n dialog.pFlags.pinned = true;\n }\n\n this.generateIndexForDialog(dialog);\n }\n\n this.appMessagesManager.scheduleHandleNewDialogs(dialog.peerId, dialog);\n }\n\n private handleDialogsPinned(folderId: number, order: (Dialog['peerId'] | ForumTopic['id'] | SavedDialog['savedPeerId'])[]) {\n const isForum = this.isFilterIdForForum(folderId);\n const isSaved = folderId === this.appPeersManager.peerId;\n const isVirtualFolder = isForum || isSaved;\n this.resetPinnedOrder(folderId);\n this.getPinnedOrders(folderId).push(...order);\n this.savePinnedOrders();\n order.reverse(); // index must be higher\n const newPinned: {[id: typeof order[0]]: true} = {};\n order.forEach((id) => {\n newPinned[id] = true;\n\n const peerId = isVirtualFolder ? folderId : id;\n const topicOrSavedId = isVirtualFolder ? id : undefined;\n\n const dialog = this.getAnyDialog(peerId, topicOrSavedId);\n this.appMessagesManager.scheduleHandleNewDialogs(peerId, dialog);\n if(!dialog) {\n return;\n }\n\n dialog.pFlags.pinned = true;\n this.generateIndexForDialog(dialog);\n });\n\n const dialogs = this.getFolderDialogs(folderId, false);\n for(const dialog of dialogs) {\n if(!dialog.pFlags.pinned) {\n break;\n }\n\n if(!newPinned[getDialogKey(dialog)]) {\n delete dialog.pFlags.pinned;\n this.generateIndexForDialog(dialog);\n this.appMessagesManager.scheduleHandleNewDialogs(dialog.peerId, dialog);\n }\n }\n }\n\n // only 0 and 1 folders\n private onUpdateFolderPeers = (update: Update.updateFolderPeers) => {\n // this.log('updateFolderPeers', update);\n const peers = update.folder_peers;\n\n peers.forEach((folderPeer) => {\n const {folder_id, peer} = folderPeer;\n\n const peerId = this.appPeersManager.getPeerId(peer);\n const dialog = this.dropDialog(peerId)[0] as Dialog;\n if(dialog) {\n if(dialog.pFlags?.pinned) {\n this.handleDialogUnpinning(dialog, folder_id);\n }\n\n (dialog as Dialog).folder_id = folder_id as REAL_FOLDER_ID;\n this.generateIndexForDialog(dialog);\n this.pushDialog({dialog}); // need for simultaneously updatePinnedDialogs\n }\n\n this.appMessagesManager.scheduleHandleNewDialogs(peerId, dialog);\n });\n };\n\n private onUpdateDialogPinned = (update: Update.updateDialogPinned | Update.updateSavedDialogPinned) => {\n const peerId = this.appPeersManager.getPeerId((update.peer as DialogPeer.dialogPeer).peer);\n let dialog: AnyDialog, folderId: number;\n if(update._ === 'updateDialogPinned') {\n folderId = update.folder_id ?? FOLDER_ID_ALL;\n // this.log('updateDialogPinned', update);\n dialog = this.getDialogOnly(peerId);\n } else {\n folderId = this.appPeersManager.peerId;\n dialog = this.getAnyDialog(this.appPeersManager.peerId, peerId);\n }\n\n // этот код внизу никогда не сработает, в папках за пиннед отвечает updateDialogFilter\n /* if(update.folder_id > 1) {\n const filter = this.filtersStorage.filters[update.folder_id];\n if(update.pFlags.pinned) {\n filter.pinned_peers.unshift(peerId);\n } else {\n filter.pinned_peers.findAndSplice((p) => p === peerId);\n }\n } */\n\n this.handleDialogTogglePinned(dialog, update.pFlags.pinned, folderId);\n };\n\n private onUpdateChannelPinnedTopic = (update: Update.updateChannelPinnedTopic) => {\n const channelId = update.channel_id;\n const peerId = channelId.toPeerId(true);\n const topicId = this.appMessagesIdsManager.generateMessageId(update.topic_id, channelId);\n const topic = this.getForumTopic(peerId, topicId);\n if(!topic) {\n return;\n }\n\n this.handleDialogTogglePinned(topic, update.pFlags.pinned, this.getFilterIdForForum(topic));\n };\n\n private onUpdatePinnedDialogs = (update: Update.updatePinnedDialogs | Update.updatePinnedSavedDialogs) => {\n const isSaved = update._ === 'updatePinnedSavedDialogs';\n let folderId: number;\n if(isSaved) {\n folderId = this.appPeersManager.peerId;\n } else {\n folderId = update.folder_id ?? FOLDER_ID_ALL;\n }\n\n if(update.order) {\n this.handleDialogsPinned(folderId, update.order.map((peer) => this.appPeersManager.getPeerId((peer as DialogPeer.dialogPeer).peer)));\n } else {\n let promise: Promise;\n if(isSaved) {\n promise = this.apiManager.invokeApi('messages.getPinnedSavedDialogs') as Promise;\n } else {\n promise = this.apiManager.invokeApi('messages.getPinnedDialogs', {\n folder_id: folderId\n });\n }\n\n promise.then((result) => {\n // * for test reordering and rendering\n // dialogsResult.dialogs.reverse();\n\n this.applyDialogs(result);\n\n this.handleDialogsPinned(folderId, result.dialogs.map((d) => d.peerId));\n });\n }\n };\n\n private onUpdateChannelPinnedTopics = async(update: Update.updateChannelPinnedTopics) => {\n const channelId = update.channel_id;\n const peerId = channelId.toPeerId(true);\n const forumTopics = this.forumTopics.get(peerId);\n if(!forumTopics) {\n return;\n }\n\n const filterId = peerId;\n if(update.order) {\n const order = update.order.map((topicId) => this.appMessagesIdsManager.generateMessageId(topicId, channelId));\n this.handleDialogsPinned(filterId, order);\n } else {\n const limit = await this.apiManager.getLimit('topicPin', true);\n\n const promise = this.apiManager.invokeApi('channels.getForumTopics', {\n channel: this.appChatsManager.getChannelInput(channelId),\n limit,\n offset_date: 0,\n offset_id: 0,\n offset_topic: 0\n });\n\n const result = await this.processTopics(peerId, promise);\n\n const topics = result.topics as ForumTopic[];\n const pinned = topics.filter((topic) => topic.pFlags.pinned);\n this.handleDialogsPinned(filterId, pinned.map((topic) => topic.id));\n }\n };\n\n private onUpdateChannelViewForumAsMessages = (update: Update.updateChannelViewForumAsMessages) => {\n const peerId = update.channel_id.toPeerId(true);\n const dialog = this.getDialogOnly(peerId);\n if(!dialog) {\n return;\n }\n\n if(update.enabled) dialog.pFlags.view_forum_as_messages = true;\n else delete dialog.pFlags.view_forum_as_messages;\n this.setDialogToState(dialog);\n };\n}\n","export default function copy(obj: T): T {\n // in case of premitives\n if(obj === null || typeof(obj) !== 'object') {\n return obj;\n }\n\n // date objects should be\n if(obj instanceof Date) {\n return new Date(obj.getTime()) as any;\n }\n\n // handle Array\n if(Array.isArray(obj)) {\n // @ts-ignore\n const clonedArr: T = obj.map((el) => copy(el)) as any as T;\n return clonedArr;\n }\n\n if(ArrayBuffer.isView(obj)) {\n // @ts-ignore\n return obj.slice();\n }\n\n // lastly, handle objects\n // @ts-ignore\n const clonedObj = new obj.constructor();\n for(var prop in obj) {\n if(obj.hasOwnProperty(prop)) {\n clonedObj[prop] = copy(obj[prop]);\n }\n }\n return clonedObj;\n}\n","export default function findAndSplice(array: Array, verify: (value: T, index?: number, array?: Array) => boolean) {\n const index = array.findIndex(verify);\n return index !== -1 ? array.splice(index, 1)[0] : undefined;\n};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {DialogFilter, InputChatlist, Update, Updates} from '../../layer';\nimport type {Dialog} from '../appManagers/appMessagesManager';\nimport type {AnyDialog} from './dialogs';\nimport forEachReverse from '../../helpers/array/forEachReverse';\nimport copy from '../../helpers/object/copy';\nimport {AppManager} from '../appManagers/manager';\nimport findAndSplice from '../../helpers/array/findAndSplice';\nimport assumeType from '../../helpers/assumeType';\nimport {FOLDER_ID_ALL, FOLDER_ID_ARCHIVE, REAL_FOLDERS, REAL_FOLDER_ID, START_LOCAL_ID} from '../mtproto/mtproto_config';\nimport makeError from '../../helpers/makeError';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport {isDialog} from '../appManagers/utils/dialogs/isDialog';\n\nexport type MyDialogFilter = Exclude;\n\nconst convertment = [\n ['pinned_peers', 'pinnedPeerIds'],\n ['exclude_peers', 'excludePeerIds'],\n ['include_peers', 'includePeerIds']\n] as ['pinned_peers' | 'exclude_peers' | 'include_peers', 'pinnedPeerIds' | 'excludePeerIds' | 'includePeerIds'][];\n\nconst PREPENDED_FILTERS = REAL_FOLDERS.size;\n\nconst LOCAL_FILTER: DialogFilter.dialogFilter = {\n _: 'dialogFilter',\n pFlags: {},\n id: 0,\n title: '',\n exclude_peers: [],\n include_peers: [],\n pinned_peers: [],\n excludePeerIds: [],\n includePeerIds: [],\n pinnedPeerIds: []\n};\n\nexport default class FiltersStorage extends AppManager {\n private filters: {[filterId: string]: MyDialogFilter};\n private filtersArr: Array;\n private localFilters: {[filterId: string]: MyDialogFilter};\n private localId: number;\n private reloadedPeerIds: Set;\n\n protected after() {\n this.clear(true);\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateDialogFilter: this.onUpdateDialogFilter,\n\n updateDialogFilters: this.onUpdateDialogFilters,\n\n updateDialogFilterOrder: this.onUpdateDialogFilterOrder\n });\n\n // delete peers when dialog is being dropped\n /* rootScope.addEventListener('peer_deleted', (peerId) => {\n for(const filterId in this.filters) {\n const filter = this.filters[filterId];\n let modified = false;\n [filter.pinned_peers, filter.include_peers, filter.exclude_peers].forEach((arr) => {\n forEachReverse(arr, (inputPeer, idx) => {\n if(getPeerId(inputPeer) === peerId) {\n arr.splice(idx, 1);\n modified = true;\n }\n });\n });\n\n if(modified) {\n this.saveDialogFilter(filter, true);\n }\n }\n }); */\n\n this.rootScope.addEventListener('premium_toggle', () => {\n this.onUpdateDialogFilters({_: 'updateDialogFilters'});\n });\n\n return this.appStateManager.getState().then((state) => {\n const filtersArr = this.prependFilters(state.filtersArr);\n filtersArr.map((filter) => {\n this.saveDialogFilter(filter, false, true);\n });\n });\n }\n\n /**\n * ! use it only with saving\n */\n private prependFilters(filters: DialogFilter[]) {\n filters = filters.slice();\n\n const allChatsFilter = this.localFilters[FOLDER_ID_ALL];\n const archiveFilter = this.localFilters[FOLDER_ID_ARCHIVE];\n\n const allChatsFilterIndex = filters.findIndex((filter) => filter._ === 'dialogFilterDefault' || filter.id === FOLDER_ID_ALL);\n if(allChatsFilterIndex !== -1) filters[allChatsFilterIndex] = allChatsFilter;\n else filters.unshift(allChatsFilter);\n\n findAndSplice(filters, (filter) => (filter as MyDialogFilter).id === FOLDER_ID_ARCHIVE);\n filters.splice(/* 1 */filters[0] === allChatsFilter ? 1 : 0, 0, archiveFilter);\n\n this.localId = START_LOCAL_ID;\n filters.forEach((filter) => {\n delete filter.localId;\n });\n\n return filters;\n }\n\n private generateLocalFilter(id: REAL_FOLDER_ID) {\n const filter: MyDialogFilter = {...copy(LOCAL_FILTER), id};\n if(id === FOLDER_ID_ALL) {\n filter.pFlags.exclude_archived = true;\n } else if(id === FOLDER_ID_ARCHIVE) {\n filter.pFlags.exclude_unarchived = true;\n }\n\n if(REAL_FOLDERS.has(id)) {\n filter.pinnedPeerIds = this.dialogsStorage.getPinnedOrders(id);\n }\n\n return filter;\n }\n\n // private getLocalFilter(id: number) {\n // return this.filters[id] ??= this.generateLocalFilter(id);\n // }\n\n public clear = (init?: boolean) => {\n if(!init) {\n // safeReplaceObject(this.filters, {});\n this.reloadedPeerIds.clear();\n this.clearFilters();\n } else {\n this.filters = {};\n this.filtersArr = [];\n this.reloadedPeerIds = new Set();\n\n this.localFilters = {};\n for(const filterId of REAL_FOLDERS) {\n this.localFilters[filterId] = this.generateLocalFilter(filterId as REAL_FOLDER_ID);\n }\n }\n\n this.localId = START_LOCAL_ID;\n };\n\n private onUpdateDialogFilter = (update: Update.updateDialogFilter) => {\n if(update.filter) {\n this.saveDialogFilter(update.filter as any);\n } else if(this.filters[update.id]) { // Папка удалена\n // this.getDialogFilters(true);\n this.rootScope.dispatchEvent('filter_delete', this.filters[update.id]);\n delete this.filters[update.id];\n findAndSplice(this.filtersArr, (filter) => (filter as DialogFilter.dialogFilter).id === update.id);\n }\n\n this.pushToState();\n };\n\n private onUpdateDialogFilters = (update: Update.updateDialogFilters) => {\n // console.warn('updateDialogFilters', update);\n\n const oldFilters = copy(this.filters);\n\n this.getDialogFilters(true).then((filters) => {\n for(const _filterId in oldFilters) {\n const filterId = +_filterId;\n if(!filters.find((filter) => filter.id === filterId)) { // * deleted\n this.onUpdateDialogFilter({_: 'updateDialogFilter', id: filterId});\n }\n }\n\n this.onUpdateDialogFilterOrder({_: 'updateDialogFilterOrder', order: filters.map((filter) => filter.id)});\n });\n };\n\n private onUpdateDialogFilterOrder = (update: Update.updateDialogFilterOrder) => {\n // console.log('updateDialogFilterOrder', update);\n\n const order = update.order.slice();\n if(!order.includes(FOLDER_ID_ARCHIVE)) {\n order.splice(order[0] === FOLDER_ID_ALL ? 1 : 0, 0, FOLDER_ID_ARCHIVE);\n }\n\n this.localId = START_LOCAL_ID;\n order.forEach((filterId) => {\n const filter = this.filters[filterId];\n delete filter.localId;\n this.setLocalId(filter);\n });\n\n this.rootScope.dispatchEvent('filter_order', order);\n\n this.pushToState();\n };\n\n private pushToState() {\n this.appStateManager.pushToState('filtersArr', this.filtersArr);\n }\n\n public testDialogForFilter(dialog: AnyDialog, filter?: MyDialogFilter) {\n if(!filter || !isDialog(dialog)) {\n return true;\n }\n\n const {peerId} = dialog;\n\n if(REAL_FOLDERS.has(filter.id)) {\n return dialog.folder_id === filter.id && this.dialogsStorage.canSaveDialog(peerId, dialog);\n }\n\n // * check whether dialog exists\n if(!this.appMessagesManager.getDialogOnly(peerId)) {\n return false;\n }\n\n // exclude_peers\n if((filter as DialogFilter.dialogFilter).excludePeerIds?.includes(peerId)) {\n return false;\n }\n\n // include_peers\n if((filter as DialogFilter.dialogFilter).includePeerIds?.includes(peerId)) {\n return true;\n }\n\n const pFlags = (filter as DialogFilter.dialogFilter).pFlags;\n\n if(!pFlags) {\n return true;\n }\n\n // exclude_archived\n if(pFlags.exclude_archived && dialog.folder_id === FOLDER_ID_ARCHIVE) {\n return false;\n }\n\n // exclude_read\n if(pFlags.exclude_read && !this.appMessagesManager.isDialogUnread(dialog)) {\n return false;\n }\n\n // exclude_muted\n if(pFlags.exclude_muted && this.appNotificationsManager.isPeerLocalMuted({peerId}) && !(dialog.unread_mentions_count && dialog.unread_count)) {\n return false;\n }\n\n if(this.appPeersManager.isAnyChat(peerId)) {\n // broadcasts\n if(pFlags.broadcasts && this.appPeersManager.isBroadcast(peerId)) {\n return true;\n }\n\n // groups\n if(pFlags.groups && this.appPeersManager.isAnyGroup(peerId)) {\n return true;\n }\n } else {\n const userId = peerId.toUserId();\n\n // bots\n if(this.appUsersManager.isBot(userId)) {\n return !!pFlags.bots;\n }\n\n // non_contacts\n if(pFlags.non_contacts && !this.appUsersManager.isContact(userId)) {\n return true;\n }\n\n // contacts\n if(pFlags.contacts && this.appUsersManager.isContact(userId)) {\n return true;\n }\n }\n\n return false;\n }\n\n public testDialogForFilterId(dialog: Dialog, filterId: number) {\n return this.testDialogForFilter(dialog, this.filters[filterId]);\n }\n\n public getFilter(filterId: number) {\n return this.filters[filterId];\n }\n\n public getFilters() {\n return this.filters;\n }\n\n public clearFilters() {\n const filters = this.getFilters();\n for(const filterId in filters) { // delete filters\n if(REAL_FOLDERS.has(+filterId)) {\n continue;\n }\n\n this.onUpdateDialogFilter({\n _: 'updateDialogFilter',\n id: +filterId\n });\n }\n }\n\n public async toggleDialogPin(peerId: PeerId, filterId: number) {\n const filter = this.filters[filterId];\n\n const index = filter.pinnedPeerIds.indexOf(peerId);\n const wasPinned = index !== -1;\n\n if(wasPinned) {\n filter.pinned_peers.splice(index, 1);\n filter.pinnedPeerIds.splice(index, 1);\n }\n\n if(!wasPinned) {\n if(filter.pinned_peers.length >= (await this.apiManager.getLimit('folderPin'))) {\n return Promise.reject(makeError('PINNED_DIALOGS_TOO_MUCH'));\n }\n\n filter.pinned_peers.unshift(this.appPeersManager.getInputPeerById(peerId));\n filter.pinnedPeerIds.unshift(peerId);\n }\n\n return this.updateDialogFilter(filter);\n }\n\n public createDialogFilter(filter: MyDialogFilter, prepend?: boolean) {\n const maxId = Math.max(1, ...Object.keys(this.filters).map((i) => +i));\n filter = copy(filter);\n filter.id = maxId + 1;\n return this.updateDialogFilter(filter, undefined, prepend);\n }\n\n public updateDialogFilter(filter: MyDialogFilter, remove = false, prepend = false) {\n return this.apiManager.invokeApi('messages.updateDialogFilter', {\n id: filter.id,\n filter: remove ? undefined : this.getOutputDialogFilter(filter)\n }).then(() => {\n this.onUpdateDialogFilter({\n _: 'updateDialogFilter',\n id: filter.id,\n filter: remove ? undefined : filter as any\n });\n\n if(prepend) {\n const f = Object.values(this.filters);\n const order = f.sort((a, b) => a.localId - b.localId).map((filter) => filter.id);\n indexOfAndSplice(order, filter.id);\n indexOfAndSplice(order, FOLDER_ID_ARCHIVE);\n order.splice(order[0] === FOLDER_ID_ALL ? 1 : 0, 0, filter.id);\n this.onUpdateDialogFilterOrder({\n _: 'updateDialogFilterOrder',\n order\n });\n }\n\n return filter;\n });\n }\n\n public updateDialogFiltersOrder(order: number[]) {\n return this.apiManager.invokeApi('messages.updateDialogFiltersOrder', {\n order\n }).then(() => {\n this.onUpdateDialogFilterOrder({\n _: 'updateDialogFilterOrder',\n order\n });\n });\n }\n\n public getOutputDialogFilter(filter: MyDialogFilter) {\n const c = copy(filter);\n /* convertment.forEach(([from, to]) => {\n c[from] = c[to].map((peerId) => this.appPeersManager.getInputPeerById(peerId));\n }); */\n\n this.filterIncludedPinnedPeers(filter);\n\n return c;\n }\n\n private filterIncludedPinnedPeers(filter: MyDialogFilter) {\n forEachReverse(filter.includePeerIds, (peerId, idx) => {\n if(filter.pinnedPeerIds.includes(peerId)) {\n filter.include_peers.splice(idx, 1);\n filter.includePeerIds.splice(idx, 1);\n }\n });\n }\n\n // private spliceMissingPeerIds(filterId: number, type: ArgumentTypes[1], missingPeerIds: PeerId[]) {\n // const filter = this.getFilter(filterId);\n // const peers = filter && filter[type];\n // if(!peers?.length) {\n // return;\n // }\n\n // let spliced = false;\n // missingPeerIds.forEach((peerId) => {\n // const inputPeer = findAndSplice(peers, (inputPeer) => getPeerId(inputPeer) === peerId);\n // if(inputPeer) {\n // spliced = true;\n // }\n // });\n\n // if(spliced) {\n // this.onUpdateDialogFilter({\n // _: 'updateDialogFilter',\n // id: filterId,\n // filter\n // });\n // }\n // }\n\n public reloadMissingPeerIds(\n filterId: number,\n type: 'pinned_peers' | 'include_peers' | 'exclude_peers' = 'pinned_peers'\n ) {\n const filter = this.getFilter(filterId);\n const peers = (filter as DialogFilter.dialogFilter)?.[type];\n if(!peers?.length) {\n return;\n }\n\n // const missingPeerIds: PeerId[] = [];\n const reloadDialogs = peers.filter((inputPeer) => {\n const peerId = this.appPeersManager.getPeerId(inputPeer);\n const isAlreadyReloaded = this.reloadedPeerIds.has(peerId);\n const dialog = this.appMessagesManager.getDialogOnly(peerId);\n // if(isAlreadyReloaded && !dialog) {\n // missingPeerIds.push(peerId);\n // }\n\n const reload = !isAlreadyReloaded && !dialog;\n return reload;\n });\n\n if(!reloadDialogs.length) {\n // if(missingPeerIds.length) {\n // this.spliceMissingPeerIds(filterId, type, missingPeerIds);\n // }\n\n return;\n }\n\n const reloadPromises = reloadDialogs.map((inputPeer) => {\n const peerId = this.appPeersManager.getPeerId(inputPeer);\n const promise = this.appMessagesManager.reloadConversation(inputPeer)\n .then((dialog) => {\n this.reloadedPeerIds.add(peerId);\n\n return dialog ? undefined : peerId;\n });\n\n return promise;\n });\n\n const reloadPromise = Promise.all(reloadPromises).then((missingPeerIds) => {\n missingPeerIds = missingPeerIds.filter(Boolean);\n if(!missingPeerIds.length) {\n return;\n }\n\n // this.spliceMissingPeerIds(filterId, type, missingPeerIds);\n });\n\n return reloadPromise;\n }\n\n public async getDialogFilters(overwrite = false): Promise {\n const keys = Object.keys(this.filters);\n if(keys.length > PREPENDED_FILTERS && !overwrite) {\n return keys.map((filterId) => this.filters[filterId]).sort((a, b) => a.localId - b.localId);\n }\n\n const messagesDialogFilters = await this.apiManager.invokeApiSingle('messages.getDialogFilters');\n const prepended = this.prependFilters(messagesDialogFilters.filters);\n return prepended.map((filter) => this.saveDialogFilter(filter, overwrite)).filter(Boolean);\n }\n\n public getSuggestedDialogsFilters() {\n return this.apiManager.invokeApi('messages.getSuggestedDialogFilters');\n }\n\n public saveDialogFilter(filter: DialogFilter, update = true, silent?: boolean) {\n // defineNotNumerableProperties(filter, ['includePeerIds', 'excludePeerIds', 'pinnedPeerIds']);\n\n if(filter._ === 'dialogFilterDefault') {\n filter = this.localFilters[FOLDER_ID_ALL];\n }\n\n assumeType(filter);\n if(!REAL_FOLDERS.has(filter.id)) {\n convertment.forEach(([from, to]) => {\n const arrayFrom = (filter as DialogFilter.dialogFilter)[from];\n if(!arrayFrom) return;\n (filter as DialogFilter.dialogFilter)[to] = arrayFrom.map((peer) => this.appPeersManager.getPeerId(peer));\n });\n\n this.filterIncludedPinnedPeers(filter);\n\n filter.include_peers = filter.pinned_peers.concat(filter.include_peers);\n filter.includePeerIds = filter.pinnedPeerIds.concat(filter.includePeerIds);\n }\n\n const oldFilter = this.filters[filter.id];\n if(oldFilter) {\n filter = Object.assign(oldFilter, filter);\n } else {\n this.filters[filter.id] = filter;\n }\n\n this.setLocalId(filter);\n\n if(!silent) {\n if(update) {\n this.rootScope.dispatchEvent('filter_update', filter);\n } else if(!oldFilter) {\n this.rootScope.dispatchEvent('filter_new', filter);\n }\n }\n\n return filter;\n }\n\n private setLocalId(filter: MyDialogFilter) {\n if(filter.localId !== undefined) {\n if(filter.localId >= this.localId) {\n this.localId = filter.localId + 1;\n }\n } else {\n filter.localId = this.localId++ as MyDialogFilter['localId'];\n findAndSplice(this.filtersArr, (_filter) => _filter.id === filter.id);\n this.filtersArr.push(filter);\n this.pushToState();\n }\n }\n\n public async isFilterIdAvailable(filterId: number) {\n if(REAL_FOLDERS.has(filterId)) {\n return true;\n }\n\n const limit = await this.apiManager.getLimit('folders');\n const isFolderAvailable = this.filtersArr.filter((filter) => !REAL_FOLDERS.has(filter.id)).slice(0, limit).some((filter) => filter.id === filterId);\n\n return isFolderAvailable;\n }\n\n public getChatlistInput(id: number): InputChatlist {\n return {\n _: 'inputChatlistDialogFilter',\n filter_id: id\n };\n }\n\n /**\n * @param filter should be client-generated\n */\n public exportChatlistInvite(filter: DialogFilter.dialogFilterChatlist) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'chatlists.exportChatlistInvite',\n params: {\n chatlist: this.getChatlistInput(filter.id),\n title: filter.title,\n peers: filter.include_peers\n },\n processResult: (exportedChatlistInvite) => {\n this.saveDialogFilter(exportedChatlistInvite.filter);\n return exportedChatlistInvite;\n }\n });\n }\n\n public deleteExportedInvite(id: number, slug: string) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'chatlists.deleteExportedInvite',\n params: {\n chatlist: this.getChatlistInput(id),\n slug\n }\n });\n }\n\n public editExportedInvite(id: number, slug: string, peerIds: PeerId[], title: string) {\n return this.apiManager.invokeApi('chatlists.editExportedInvite', {\n chatlist: this.getChatlistInput(id),\n slug,\n title,\n peers: peerIds.map((peerId) => this.appPeersManager.getInputPeerById(peerId))\n });\n }\n\n public getExportedInvites(id: number) {\n const filter = this.getFilter(id);\n if(filter?._ === 'dialogFilter') {\n return Promise.reject(makeError('FILTER_NOT_SUPPORTED'));\n }\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'chatlists.getExportedInvites',\n params: {\n chatlist: this.getChatlistInput(id)\n },\n processResult: (exportedInvites) => {\n this.appUsersManager.saveApiUsers(exportedInvites.users);\n this.appChatsManager.saveApiChats(exportedInvites.chats);\n return exportedInvites.invites;\n }\n });\n }\n\n public checkChatlistInvite(slug: string) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'chatlists.checkChatlistInvite',\n params: {slug},\n processResult: (chatlistInvite) => {\n this.appUsersManager.saveApiUsers(chatlistInvite.users);\n this.appChatsManager.saveApiChats(chatlistInvite.chats);\n return chatlistInvite;\n }\n });\n }\n\n public joinChatlistInvite(slug: string, peerIds: PeerId[]) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'chatlists.joinChatlistInvite',\n params: {\n slug,\n peers: peerIds.map((peerId) => this.appPeersManager.getInputPeerById(peerId))\n },\n processResult: (updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n const update = (updates as Updates.updates).updates.find((update) => update._ === 'updateDialogFilter') as Update.updateDialogFilter;\n const filterId = update.id;\n this.rootScope.dispatchEvent('filter_joined', this.getFilter(filterId));\n return filterId;\n }\n });\n }\n\n public getChatlistUpdates(id: number) {\n const filter = this.getFilter(id);\n if(filter?._ !== 'dialogFilterChatlist') {\n return Promise.reject(makeError('FILTER_NOT_SUPPORTED'));\n }\n\n const time = Date.now();\n return this.apiManager.invokeApiSingleProcess({\n method: 'chatlists.getChatlistUpdates',\n params: {\n chatlist: this.getChatlistInput(id)\n },\n processResult: (chatlistUpdates) => {\n this.appUsersManager.saveApiUsers(chatlistUpdates.users);\n this.appChatsManager.saveApiChats(chatlistUpdates.chats);\n\n const filter = this.getFilter(id);\n if(filter?._ === 'dialogFilterChatlist') {\n filter.updatedTime = time;\n this.pushToState();\n }\n\n return chatlistUpdates;\n }\n });\n }\n\n public joinChatlistUpdates(id: number, peerIds: PeerId[]) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'chatlists.joinChatlistUpdates',\n params: {\n chatlist: this.getChatlistInput(id),\n peers: peerIds.map((peerId) => this.appPeersManager.getInputPeerById(peerId))\n },\n processResult: (updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n }\n });\n }\n\n public hideChatlistUpdates(id: number) {\n return this.apiManager.invokeApiSingle('chatlists.hideChatlistUpdates', {\n chatlist: this.getChatlistInput(id)\n });\n }\n\n public getLeaveChatlistSuggestions(id: number) {\n return this.apiManager.invokeApiSingle('chatlists.getLeaveChatlistSuggestions', {\n chatlist: this.getChatlistInput(id)\n });\n }\n\n public leaveChatlist(id: number, peerIds: PeerId[]) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'chatlists.leaveChatlist',\n params: {\n chatlist: this.getChatlistInput(id),\n peers: peerIds.map((peerId) => this.appPeersManager.getInputPeerById(peerId))\n },\n processResult: (updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n }\n });\n }\n}\n","export default function filterUnique>(arr: T): T {\n return [...new Set(arr)] as T;\n}\n","// Copyright Twitter Inc. Licensed under MIT\n// https://github.com/twitter/twemoji-parser/blob/master/LICENSE.md\n\nconst originalString = '((?:\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d[\\udc68\\udc69]|\\ud83e\\udef1\\ud83c\\udffb\\u200d\\ud83e\\udef2\\ud83c[\\udffc-\\udfff]|\\ud83e\\udef1\\ud83c\\udffc\\u200d\\ud83e\\udef2\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\udef1\\ud83c\\udffd\\u200d\\ud83e\\udef2\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\udef1\\ud83c\\udffe\\u200d\\ud83e\\udef2\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\udef1\\ud83c\\udfff\\u200d\\ud83e\\udef2\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f?\\u200d\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1|\\ud83d\\udc6b\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6c\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6d\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc8f\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc91\\ud83c[\\udffb-\\udfff]|\\ud83e\\udd1d\\ud83c[\\udffb-\\udfff]|\\ud83d[\\udc6b-\\udc6d\\udc8f\\udc91]|\\ud83e\\udd1d)|(?:\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1)(?:\\ud83c[\\udffb-\\udfff])?\\u200d(?:\\u2695\\ufe0f?|\\u2696\\ufe0f?|\\u2708\\ufe0f?|\\ud83c[\\udf3e\\udf73\\udf7c\\udf84\\udf93\\udfa4\\udfa8\\udfeb\\udfed]|\\ud83d[\\udcbb\\udcbc\\udd27\\udd2c\\ude80\\ude92]|\\ud83e[\\uddaf-\\uddb3\\uddbc\\uddbd])|(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75]|\\u26f9)(?:(?:\\ud83c[\\udffb-\\udfff]|\\ufe0f?)\\u200d[\\u2640\\u2642]\\ufe0f?)|(?:\\ud83c[\\udfc3\\udfc4\\udfca]|\\ud83d[\\udc6e\\udc70\\udc71\\udc73\\udc77\\udc81\\udc82\\udc86\\udc87\\ude45-\\ude47\\ude4b\\ude4d\\ude4e\\udea3\\udeb4-\\udeb6]|\\ud83e[\\udd26\\udd35\\udd37-\\udd39\\udd3d\\udd3e\\uddb8\\uddb9\\uddcd-\\uddcf\\uddd4\\uddd6-\\udddd])(?:\\ud83c[\\udffb-\\udfff])?\\u200d[\\u2640\\u2642]\\ufe0f?|(?:\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83c\\udff3\\ufe0f?\\u200d\\u26a7\\ufe0f?|\\ud83c\\udff3\\ufe0f?\\u200d\\ud83c\\udf08|\\ud83d\\ude36\\u200d\\ud83c\\udf2b\\ufe0f?|\\u2764\\ufe0f?\\u200d\\ud83d\\udd25|\\u2764\\ufe0f?\\u200d\\ud83e\\ude79|\\ud83c\\udff4\\u200d\\u2620\\ufe0f?|\\ud83d\\udc15\\u200d\\ud83e\\uddba|\\ud83d\\udc3b\\u200d\\u2744\\ufe0f?|\\ud83d\\udc41\\u200d\\ud83d\\udde8|\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc6f\\u200d\\u2640\\ufe0f?|\\ud83d\\udc6f\\u200d\\u2642\\ufe0f?|\\ud83d\\ude2e\\u200d\\ud83d\\udca8|\\ud83d\\ude35\\u200d\\ud83d\\udcab|\\ud83e\\udd3c\\u200d\\u2640\\ufe0f?|\\ud83e\\udd3c\\u200d\\u2642\\ufe0f?|\\ud83e\\uddde\\u200d\\u2640\\ufe0f?|\\ud83e\\uddde\\u200d\\u2642\\ufe0f?|\\ud83e\\udddf\\u200d\\u2640\\ufe0f?|\\ud83e\\udddf\\u200d\\u2642\\ufe0f?|\\ud83d\\udc08\\u200d\\u2b1b)|[#*0-9]\\ufe0f??\\u20e3|(?:[©®\\u2122\\u265f]\\ufe0f?)|(?:\\ud83c[\\udc04\\udd70\\udd71\\udd7e\\udd7f\\ude02\\ude1a\\ude2f\\ude37\\udf21\\udf24-\\udf2c\\udf36\\udf7d\\udf96\\udf97\\udf99-\\udf9b\\udf9e\\udf9f\\udfcd\\udfce\\udfd4-\\udfdf\\udff3\\udff5\\udff7]|\\ud83d[\\udc3f\\udc41\\udcfd\\udd49\\udd4a\\udd6f\\udd70\\udd73\\udd76-\\udd79\\udd87\\udd8a-\\udd8d\\udda5\\udda8\\uddb1\\uddb2\\uddbc\\uddc2-\\uddc4\\uddd1-\\uddd3\\udddc-\\uddde\\udde1\\udde3\\udde8\\uddef\\uddf3\\uddfa\\udecb\\udecd-\\udecf\\udee0-\\udee5\\udee9\\udef0\\udef3]|[\\u203c\\u2049\\u2139\\u2194-\\u2199\\u21a9\\u21aa\\u231a\\u231b\\u2328\\u23cf\\u23ed-\\u23ef\\u23f1\\u23f2\\u23f8-\\u23fa\\u24c2\\u25aa\\u25ab\\u25b6\\u25c0\\u25fb-\\u25fe\\u2600-\\u2604\\u260e\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262a\\u262e\\u262f\\u2638-\\u263a\\u2640\\u2642\\u2648-\\u2653\\u2660\\u2663\\u2665\\u2666\\u2668\\u267b\\u267f\\u2692-\\u2697\\u2699\\u269b\\u269c\\u26a0\\u26a1\\u26a7\\u26aa\\u26ab\\u26b0\\u26b1\\u26bd\\u26be\\u26c4\\u26c5\\u26c8\\u26cf\\u26d1\\u26d3\\u26d4\\u26e9\\u26ea\\u26f0-\\u26f5\\u26f8\\u26fa\\u26fd\\u2702\\u2708\\u2709\\u270f\\u2712\\u2714\\u2716\\u271d\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u2764\\u27a1\\u2934\\u2935\\u2b05-\\u2b07\\u2b1b\\u2b1c\\u2b50\\u2b55\\u3030\\u303d\\u3297\\u3299])(?:\\ufe0f?|(?!\\ufe0e))|(?:(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75\\udd90]|[\\u261d\\u26f7\\u26f9\\u270c\\u270d])(?:\\ufe0f?|(?!\\ufe0e))|(?:\\ud83c[\\udf85\\udfc2-\\udfc4\\udfc7\\udfca]|\\ud83d[\\udc42\\udc43\\udc46-\\udc50\\udc66-\\udc69\\udc6e\\udc70-\\udc78\\udc7c\\udc81-\\udc83\\udc85-\\udc87\\udcaa\\udd7a\\udd95\\udd96\\ude45-\\ude47\\ude4b-\\ude4f\\udea3\\udeb4-\\udeb6\\udec0\\udecc]|\\ud83e[\\udd0c\\udd0f\\udd18-\\udd1c\\udd1e\\udd1f\\udd26\\udd30-\\udd39\\udd3d\\udd3e\\udd77\\uddb5\\uddb6\\uddb8\\uddb9\\uddbb\\uddcd-\\uddcf\\uddd1-\\udddd\\udec3-\\udec5\\udef0-\\udef6]|[\\u270a\\u270b]))(?:\\ud83c[\\udffb-\\udfff])?|(?:\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc65\\udb40\\udc6e\\udb40\\udc67\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc73\\udb40\\udc63\\udb40\\udc74\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc77\\udb40\\udc6c\\udb40\\udc73\\udb40\\udc7f|\\ud83c\\udde6\\ud83c[\\udde8-\\uddec\\uddee\\uddf1\\uddf2\\uddf4\\uddf6-\\uddfa\\uddfc\\uddfd\\uddff]|\\ud83c\\udde7\\ud83c[\\udde6\\udde7\\udde9-\\uddef\\uddf1-\\uddf4\\uddf6-\\uddf9\\uddfb\\uddfc\\uddfe\\uddff]|\\ud83c\\udde8\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\uddee\\uddf0-\\uddf5\\uddf7\\uddfa-\\uddff]|\\ud83c\\udde9\\ud83c[\\uddea\\uddec\\uddef\\uddf0\\uddf2\\uddf4\\uddff]|\\ud83c\\uddea\\ud83c[\\udde6\\udde8\\uddea\\uddec\\udded\\uddf7-\\uddfa]|\\ud83c\\uddeb\\ud83c[\\uddee-\\uddf0\\uddf2\\uddf4\\uddf7]|\\ud83c\\uddec\\ud83c[\\udde6\\udde7\\udde9-\\uddee\\uddf1-\\uddf3\\uddf5-\\uddfa\\uddfc\\uddfe]|\\ud83c\\udded\\ud83c[\\uddf0\\uddf2\\uddf3\\uddf7\\uddf9\\uddfa]|\\ud83c\\uddee\\ud83c[\\udde8-\\uddea\\uddf1-\\uddf4\\uddf6-\\uddf9]|\\ud83c\\uddef\\ud83c[\\uddea\\uddf2\\uddf4\\uddf5]|\\ud83c\\uddf0\\ud83c[\\uddea\\uddec-\\uddee\\uddf2\\uddf3\\uddf5\\uddf7\\uddfc\\uddfe\\uddff]|\\ud83c\\uddf1\\ud83c[\\udde6-\\udde8\\uddee\\uddf0\\uddf7-\\uddfb\\uddfe]|\\ud83c\\uddf2\\ud83c[\\udde6\\udde8-\\udded\\uddf0-\\uddff]|\\ud83c\\uddf3\\ud83c[\\udde6\\udde8\\uddea-\\uddec\\uddee\\uddf1\\uddf4\\uddf5\\uddf7\\uddfa\\uddff]|\\ud83c\\uddf4\\ud83c\\uddf2|\\ud83c\\uddf5\\ud83c[\\udde6\\uddea-\\udded\\uddf0-\\uddf3\\uddf7-\\uddf9\\uddfc\\uddfe]|\\ud83c\\uddf6\\ud83c\\udde6|\\ud83c\\uddf7\\ud83c[\\uddea\\uddf4\\uddf8\\uddfa\\uddfc]|\\ud83c\\uddf8\\ud83c[\\udde6-\\uddea\\uddec-\\uddf4\\uddf7-\\uddf9\\uddfb\\uddfd-\\uddff]|\\ud83c\\uddf9\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\udded\\uddef-\\uddf4\\uddf7\\uddf9\\uddfb\\uddfc\\uddff]|\\ud83c\\uddfa\\ud83c[\\udde6\\uddec\\uddf2\\uddf3\\uddf8\\uddfe\\uddff]|\\ud83c\\uddfb\\ud83c[\\udde6\\udde8\\uddea\\uddec\\uddee\\uddf3\\uddfa]|\\ud83c\\uddfc\\ud83c[\\uddeb\\uddf8]|\\ud83c\\uddfd\\ud83c\\uddf0|\\ud83c\\uddfe\\ud83c[\\uddea\\uddf9]|\\ud83c\\uddff\\ud83c[\\udde6\\uddf2\\uddfc]|\\ud83c[\\udccf\\udd8e\\udd91-\\udd9a\\udde6-\\uddff\\ude01\\ude32-\\ude36\\ude38-\\ude3a\\ude50\\ude51\\udf00-\\udf20\\udf2d-\\udf35\\udf37-\\udf7c\\udf7e-\\udf84\\udf86-\\udf93\\udfa0-\\udfc1\\udfc5\\udfc6\\udfc8\\udfc9\\udfcf-\\udfd3\\udfe0-\\udff0\\udff4\\udff8-\\udfff]|\\ud83d[\\udc00-\\udc3e\\udc40\\udc44\\udc45\\udc51-\\udc65\\udc6a\\udc6f\\udc79-\\udc7b\\udc7d-\\udc80\\udc84\\udc88-\\udc8e\\udc90\\udc92-\\udca9\\udcab-\\udcfc\\udcff-\\udd3d\\udd4b-\\udd4e\\udd50-\\udd67\\udda4\\uddfb-\\ude44\\ude48-\\ude4a\\ude80-\\udea2\\udea4-\\udeb3\\udeb7-\\udebf\\udec1-\\udec5\\uded0-\\uded2\\uded5-\\uded7\\udedd-\\udedf\\udeeb\\udeec\\udef4-\\udefc\\udfe0-\\udfeb\\udff0]|\\ud83e[\\udd0d\\udd0e\\udd10-\\udd17\\udd20-\\udd25\\udd27-\\udd2f\\udd3a\\udd3c\\udd3f-\\udd45\\udd47-\\udd76\\udd78-\\uddb4\\uddb7\\uddba\\uddbc-\\uddcc\\uddd0\\uddde-\\uddff\\ude70-\\ude74\\ude78-\\ude7c\\ude80-\\ude86\\ude90-\\udeac\\udeb0-\\udeba\\udec0-\\udec2\\uded0-\\uded9\\udee0-\\udee7]|[\\u23e9-\\u23ec\\u23f0\\u23f3\\u267e\\u26ce\\u2705\\u2728\\u274c\\u274e\\u2753-\\u2755\\u2795-\\u2797\\u27b0\\u27bf\\ue50a])|\\ufe0f)';\nexport default originalString;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport emojiRegExp from '../../vendor/emoji/regex';\nimport {MessageEntity} from '../../layer';\n\nconst EmojiHelper = {\n emojiMap: (code: string) => { return code; },\n shortcuts: [] as any,\n emojis: [] as any\n};\n\nexport const ALPHA_CHARS_REG_EXP = 'a-z' +\n '\\\\u00c0-\\\\u00d6\\\\u00d8-\\\\u00f6\\\\u00f8-\\\\u00ff' + // Latin-1\n '\\\\u0100-\\\\u024f' + // Latin Extended A and B\n '\\\\u0253\\\\u0254\\\\u0256\\\\u0257\\\\u0259\\\\u025b\\\\u0263\\\\u0268\\\\u026f\\\\u0272\\\\u0289\\\\u028b' + // IPA Extensions\n '\\\\u02bb' + // Hawaiian\n '\\\\u0300-\\\\u036f' + // Combining diacritics\n '\\\\u1e00-\\\\u1eff' + // Latin Extended Additional (mostly for Vietnamese)\n '\\\\u0400-\\\\u04ff\\\\u0500-\\\\u0527' + // Cyrillic\n '\\\\u2de0-\\\\u2dff\\\\ua640-\\\\ua69f' + // Cyrillic Extended A/B\n '\\\\u0591-\\\\u05bf\\\\u05c1-\\\\u05c2\\\\u05c4-\\\\u05c5\\\\u05c7' +\n '\\\\u05d0-\\\\u05ea\\\\u05f0-\\\\u05f4' + // Hebrew\n '\\\\ufb1d-\\\\ufb28\\\\ufb2a-\\\\ufb36\\\\ufb38-\\\\ufb3c\\\\ufb3e\\\\ufb40-\\\\ufb41' +\n '\\\\ufb43-\\\\ufb44\\\\ufb46-\\\\ufb4f' + // Hebrew Pres. Forms\n '\\\\u0610-\\\\u061a\\\\u0620-\\\\u065f\\\\u066e-\\\\u06d3\\\\u06d5-\\\\u06dc' +\n '\\\\u06de-\\\\u06e8\\\\u06ea-\\\\u06ef\\\\u06fa-\\\\u06fc\\\\u06ff' + // Arabic\n '\\\\u0750-\\\\u077f\\\\u08a0\\\\u08a2-\\\\u08ac\\\\u08e4-\\\\u08fe' + // Arabic Supplement and Extended A\n '\\\\ufb50-\\\\ufbb1\\\\ufbd3-\\\\ufd3d\\\\ufd50-\\\\ufd8f\\\\ufd92-\\\\ufdc7\\\\ufdf0-\\\\ufdfb' + // Pres. Forms A\n '\\\\ufe70-\\\\ufe74\\\\ufe76-\\\\ufefc' + // Pres. Forms B\n '\\\\u200c' + // Zero-Width Non-Joiner\n '\\\\u0e01-\\\\u0e3a\\\\u0e40-\\\\u0e4e' + // Thai\n '\\\\u1100-\\\\u11ff\\\\u3130-\\\\u3185\\\\uA960-\\\\uA97F\\\\uAC00-\\\\uD7AF\\\\uD7B0-\\\\uD7FF' + // Hangul (Korean)\n '\\\\u3003\\\\u3005\\\\u303b' + // Kanji/Han iteration marks\n '\\\\uff21-\\\\uff3a\\\\uff41-\\\\uff5a' + // full width Alphabet\n '\\\\uff66-\\\\uff9f' + // half width Katakana\n '\\\\uffa1-\\\\uffdc'; // half width Hangul (Korean)\nexport const ALPHA_NUMERIC_REG_EXP = '0-9\\_' + ALPHA_CHARS_REG_EXP;\nexport const DOMAIN_ADD_CHARS = '\\u00b7';\n// Based on Regular Expression for URL validation by Diego Perini\nexport const URL_ALPHANUMERIC_REG_EXP_PART = '[' + ALPHA_CHARS_REG_EXP + '0-9]';\nexport const URL_PROTOCOL_REG_EXP_PART = '((?:https?|ftp)://|mailto:)?';\nexport const URL_REG_EXP = URL_PROTOCOL_REG_EXP_PART +\n // user:pass authentication\n '(?:' + URL_ALPHANUMERIC_REG_EXP_PART + '{1,64}(?::' + URL_ALPHANUMERIC_REG_EXP_PART + '{0,64})?@)?' +\n '(?:' +\n // sindresorhus/ip-regexp\n '(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(?:\\\\.(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])){3}' +\n '|' +\n // host name\n URL_ALPHANUMERIC_REG_EXP_PART + '[' + ALPHA_CHARS_REG_EXP + DOMAIN_ADD_CHARS + '0-9\\-]{0,64}' +\n // domain name\n '(?:\\\\.' + URL_ALPHANUMERIC_REG_EXP_PART + '[' + ALPHA_CHARS_REG_EXP + DOMAIN_ADD_CHARS + '0-9\\-]{0,64}){0,10}' +\n // TLD identifier\n '(?:\\\\.(xn--[0-9a-z]{2,16}|[' + ALPHA_CHARS_REG_EXP + ']{2,24}))' +\n ')' +\n // port number\n '(?::\\\\d{2,5})?' +\n // resource path\n '(?:/(?:\\\\S{0,255}[^\\\\s.;,(\\\\[\\\\]{}<>\"\\'])?)?';\nexport const URL_PROTOCOL_REG_EXP = new RegExp('^' + URL_PROTOCOL_REG_EXP_PART.slice(0, -1), 'i');\nexport const USERNAME_REG_EXP = '[a-zA-Z\\\\d_]{5,32}';\n// export const TIMESTAMP_REG_EXP = '(?:\\\\s|^)((?:\\\\d{1,2}:)?(?:[0-5]?[0-9]):(?:[0-5][0-9]))(?:\\\\s|$)';\nexport const TIMESTAMP_REG_EXP = '(?:\\\\s|^)((?:(\\\\d{1,2}):(?:[0-5]?[0-9])|(?:\\\\d{1,2}|\\\\d{3,})):(?:[0-5][0-9]))(?:\\\\s|$)';\nexport const BOT_COMMAND_REG_EXP = '\\\\/([a-zA-Z\\\\d_]{1,32})(?:@(' + USERNAME_REG_EXP + '))?(\\\\b|$)';\nexport const FULL_REG_EXP = new RegExp('(^| )(@)(' + USERNAME_REG_EXP + ')|(' + URL_REG_EXP + ')|(\\\\n)|(' + emojiRegExp + ')|(^|[\\\\s\\\\(\\\\]])(#[' + ALPHA_NUMERIC_REG_EXP + ']{2,64})|(^|\\\\s)' + BOT_COMMAND_REG_EXP + '|' + TIMESTAMP_REG_EXP + '', 'i');\nexport const EMAIL_REG_EXP = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n// const markdownTestRegExp = /[`_*@~]/;\nexport const MARKDOWN_REG_EXP = /(^|\\s|\\n)(````?)([\\s\\S]+?)(````?)([\\s\\n\\.,:?!;]|$)|(^|\\s|\\x01)(`|~~|\\*\\*|__|_-_|\\|\\|)([^\\n]+?)\\7([\\x01\\s\\.,:?!;]|$)|@(\\d+)\\s*\\((.+?)\\)|(\\[(.+?)\\]\\((.+?)\\))/m;\nexport const SITE_HASHTAGS: {[siteName: string]: string} = {\n 'Telegram': 'tg://search_hashtag?hashtag={1}',\n 'Twitter': 'https://twitter.com/hashtag/{1}',\n 'Instagram': 'https://instagram.com/explore/tags/{1}/',\n 'Google Plus': 'https://plus.google.com/explore/{1}'\n};\n\n// export const SITE_MENTIONS: {[siteName in 'Telegram' | 'Twitter' | 'Instagram' | 'GitHub']: string} = {\n// Telegram: '#{1}',\n// Twitter: 'https://twitter.com/{1}',\n// Instagram: 'https://instagram.com/{1}/',\n// GitHub: 'https://github.com/{1}'\n// };\n\nexport const MARKDOWN_ENTITIES: {[markdown: string]: MessageEntity['_']} = {\n '`': 'messageEntityCode',\n '``': 'messageEntityPre',\n '**': 'messageEntityBold',\n '__': 'messageEntityItalic',\n '~~': 'messageEntityStrike',\n '_-_': 'messageEntityUnderline',\n '||': 'messageEntitySpoiler'\n};\n\nexport const MARKDOWN_ENTITIES_TYPES = new Set(Object.values(MARKDOWN_ENTITIES));\n\nexport const PASS_CONFLICTING_ENTITIES: Set = new Set([\n 'messageEntityEmoji',\n 'messageEntityLinebreak',\n 'messageEntityCaret'\n]);\nexport const PASS_SINGLE_CONFLICTING_ENTITIES = new Set(PASS_CONFLICTING_ENTITIES);\nfor(const i in MARKDOWN_ENTITIES) {\n PASS_CONFLICTING_ENTITIES.add(MARKDOWN_ENTITIES[i]);\n}\n\nexport const PHONE_NUMBER_REG_EXP = /^\\+\\d+$/;\n\nexport const LOCAL_ENTITIES = new Set([\n 'messageEntityLinebreak',\n 'messageEntityCaret',\n 'messageEntityHighlight',\n 'messageEntityBotCommand',\n 'messageEntityTimestamp'\n]);\n\n/* export function parseEmojis(text: string) {\n return text.replace(/:([a-z0-9\\-\\+\\*_]+?):/gi, function (all, shortcut) {\n var emojiCode = EmojiHelper.shortcuts[shortcut]\n if (emojiCode !== undefined) {\n return EmojiHelper.emojis[emojiCode][0]\n }\n return all\n })\n} */\n\n\n/* export function replaceUrlEncodings(urlWithEncoded: string) {\n return urlWithEncoded.replace(/(%[A-Z\\d]{2})+/g, (str) => {\n try {\n return decodeURIComponent(str);\n } catch (e) {\n return str;\n }\n });\n} */\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MessageEntity} from '../../layer';\n\nconst CAN_COMBINE_ENTITIES: Set = new Set([\n 'messageEntityBold',\n 'messageEntityItalic',\n 'messageEntityCode',\n 'messageEntityPre',\n 'messageEntityUnderline',\n 'messageEntityStrike',\n 'messageEntityBlockquote',\n 'messageEntitySpoiler'\n]);\nexport default function combineSameEntities(entities: MessageEntity[]) {\n // entities = entities.slice();\n for(let i = 0; i < entities.length; ++i) {\n const entity = entities[i];\n\n let nextEntityIdx = -1;\n do {\n nextEntityIdx = entities.findIndex((e, _i) => {\n return CAN_COMBINE_ENTITIES.has(e._) && _i !== i && e._ === entity._ && (e.offset - entity.length) === entity.offset;\n });\n\n if(nextEntityIdx !== -1) {\n const nextEntity = entities[nextEntityIdx];\n entity.length += nextEntity.length;\n entities.splice(nextEntityIdx, 1);\n }\n } while(nextEntityIdx !== -1);\n }\n // return entities;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {PASS_CONFLICTING_ENTITIES, PASS_SINGLE_CONFLICTING_ENTITIES} from '.';\nimport {MessageEntity} from '../../layer';\n\nconst SINGLE_ENTITIES: Set = new Set(['messageEntityPre', 'messageEntityCode']);\n\nexport default function findConflictingEntity(currentEntities: MessageEntity[], newEntity: MessageEntity) {\n let singleStart = -1, singleEnd = -1;\n return currentEntities.find((currentEntity) => {\n const {offset, length} = currentEntity;\n if(SINGLE_ENTITIES.has(currentEntity._)) {\n singleStart = offset;\n singleEnd = singleStart + length;\n }\n\n if(singleStart !== -1) {\n if(\n newEntity.offset >= singleStart &&\n newEntity.offset < singleEnd &&\n !PASS_SINGLE_CONFLICTING_ENTITIES.has(newEntity._)\n ) {\n return true;\n }\n }\n\n const isConflictingTypes = newEntity._ === currentEntity._ ||\n (!PASS_CONFLICTING_ENTITIES.has(newEntity._) && !PASS_CONFLICTING_ENTITIES.has(currentEntity._));\n\n if(!isConflictingTypes) {\n return false;\n }\n\n const isConflictingOffset = newEntity.offset >= offset &&\n (newEntity.length + newEntity.offset) <= (length + offset);\n\n return isConflictingOffset;\n });\n}\n","import {MessageEntity} from '../../layer';\n\nexport default function sortEntities(entities: MessageEntity[]) {\n entities.sort((a, b) => {\n return (a.offset - b.offset) || (b.length - a.length);\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MessageEntity} from '../../layer';\nimport findConflictingEntity from './findConflictingEntity';\nimport sortEntities from './sortEntities';\n\nexport default function mergeEntities(currentEntities: MessageEntity[], newEntities: MessageEntity[]) {\n currentEntities = currentEntities.slice();\n const filtered = newEntities.filter((e) => {\n return !findConflictingEntity(currentEntities, e);\n });\n\n currentEntities.push(...filtered);\n sortEntities(currentEntities);\n // currentEntities.sort((a, b) => a.offset - b.offset);\n // currentEntities.sort((a, b) => (a.offset - b.offset) || (a._ === 'messageEntityCaret' && -1));\n\n // * fix splitted emoji. messageEntityTextUrl can split the emoji if starts before its end (e.g. on fe0f)\n // * have to fix even if emoji supported since it's being wrapped in span\n // if(!IS_EMOJI_SUPPORTED) {\n for(let i = 0; i < currentEntities.length; ++i) {\n let entity = currentEntities[i];\n if(entity._ === 'messageEntityEmoji') {\n const nextEntity = currentEntities[i + 1];\n if(nextEntity /* && nextEntity._ !== 'messageEntityCaret' */ && nextEntity.offset < (entity.offset + entity.length)) {\n entity = currentEntities[i] = {...entity};\n entity.length = nextEntity.offset - entity.offset;\n }\n }\n }\n // }\n\n return currentEntities;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {MARKDOWN_ENTITIES, MARKDOWN_REG_EXP} from '.';\nimport {MessageEntity} from '../../layer';\nimport combineSameEntities from './combineSameEntities';\nimport findConflictingEntity from './findConflictingEntity';\nimport mergeEntities from './mergeEntities';\n\nexport default function parseMarkdown(raw: string, currentEntities: MessageEntity[] = [], noTrim?: boolean) {\n /* if(!markdownTestRegExp.test(text)) {\n return noTrim ? text : text.trim();\n } */\n\n const entities: MessageEntity[] = [];\n let pushedEntity = false;\n const pushEntity = (entity: MessageEntity) => !findConflictingEntity(currentEntities, entity) ? (entities.push(entity), pushedEntity = true) : pushedEntity = false;\n\n const newTextParts: string[] = [];\n let rawOffset = 0, match;\n while(match = raw.match(MARKDOWN_REG_EXP)) {\n const matchIndex = rawOffset + match.index;\n const possibleNextRawOffset = match.index + match[0].length;\n const beforeMatch = match.index > 0 && raw.slice(0, match.index);\n beforeMatch && newTextParts.push(beforeMatch);\n const text = match[3] || match[8] || match[11] || match[13];\n // rawOffset -= text.length;\n // text = text.replace(/^\\s+|\\s+$/g, '');\n // rawOffset += text.length;\n\n let entity: MessageEntity;\n pushedEntity = false;\n if(text.match(/^`*$/)) {\n newTextParts.push(match[0]);\n } else if(match[3]) { // pre\n let languageMatch = match[3].match(/(.*?)\\n/);\n if(!languageMatch?.[1]) {\n languageMatch = undefined;\n }\n\n let code = languageMatch ? match[3].slice(languageMatch[1].length) : match[3];\n const startIndex = code[0] === '\\n' ? 1 : 0;\n const endIndex = code[code.length - 1] === '\\n' ? -1 : undefined;\n code = code.slice(startIndex, endIndex);\n entity = {\n _: 'messageEntityPre',\n language: languageMatch?.[1] || '',\n offset: matchIndex + match[1].length,\n length: code.length\n };\n\n if(pushEntity(entity)) {\n if(endIndex) {\n rawOffset -= 1;\n }\n\n if(languageMatch) {\n rawOffset -= languageMatch[0].length;\n }\n\n let whitespace = '';\n if(match[1]) {\n whitespace = match[1];\n } else {\n const previousPart = newTextParts[newTextParts.length - 1];\n if(previousPart && !/\\s/.test(previousPart[previousPart.length - 1])) {\n whitespace = '\\n';\n }\n }\n\n newTextParts.push(whitespace, code, match[5]);\n\n rawOffset -= match[2].length + match[4].length;\n }\n } else if(match[7]) { // code|italic|bold\n const isSOH = match[6] === '\\x01';\n\n entity = {\n _: MARKDOWN_ENTITIES[match[7]] as (MessageEntity.messageEntityBold | MessageEntity.messageEntityCode | MessageEntity.messageEntityItalic | MessageEntity.messageEntitySpoiler)['_'],\n // offset: matchIndex + match[6].length,\n offset: matchIndex + (isSOH ? 0 : match[6].length),\n length: text.length\n };\n\n if(pushEntity(entity)) {\n if(!isSOH) {\n newTextParts.push(match[6] + text + match[9]);\n } else {\n newTextParts.push(text);\n }\n\n rawOffset -= match[7].length * 2 + (isSOH ? 2 : 0);\n }\n } else if(match[11]) { // custom mention\n entity = {\n _: 'messageEntityMentionName',\n user_id: match[10].toUserId(),\n offset: matchIndex,\n length: text.length\n };\n\n if(pushEntity(entity)) {\n newTextParts.push(text);\n\n rawOffset -= match[0].length - text.length;\n }\n } else if(match[12]) { // text url\n entity = {\n _: 'messageEntityTextUrl',\n url: match[14],\n offset: matchIndex,\n length: text.length\n };\n\n if(pushEntity(entity)) {\n newTextParts.push(text);\n\n rawOffset -= match[12].length - text.length;\n }\n }\n\n if(!pushedEntity) {\n newTextParts.push(match[0]);\n }\n\n raw = raw.substr(match.index + match[0].length);\n rawOffset += match.index + match[0].length;\n\n const rawOffsetDiff = rawOffset - possibleNextRawOffset;\n if(rawOffsetDiff) {\n currentEntities.forEach((entity) => {\n if(entity.offset >= matchIndex) {\n entity.offset += rawOffsetDiff;\n }\n });\n }\n }\n\n raw && newTextParts.push(raw);\n let newText = newTextParts.join('');\n if(!newText.replace(/\\s+/g, '').length) {\n newText = raw;\n entities.splice(0, entities.length);\n }\n\n // ! idk what it was here for\n // if(!entities.length && !noTrim) {\n // newText = newText.trim();\n // }\n\n currentEntities = mergeEntities(currentEntities, entities);\n combineSameEntities(currentEntities);\n\n let length = newText.length;\n if(!noTrim) {\n // trim left\n newText = newText.replace(/^\\s*/, '');\n\n let diff = length - newText.length;\n if(diff) {\n currentEntities.forEach((entity) => {\n entity.offset = Math.max(0, entity.offset - diff);\n });\n }\n\n // trim right\n newText = newText.replace(/\\s*$/, '');\n diff = length - newText.length;\n length = newText.length;\n if(diff) {\n currentEntities.forEach((entity) => {\n if((entity.offset + entity.length) > length) {\n entity.length = length - entity.offset;\n }\n });\n }\n }\n\n return [newText, currentEntities] as const;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function applyMixins(derivedCtor: any, constructors: any[]) {\n // const callbacks: Array<(...args: any[]) => any> = [];\n\n constructors.forEach((baseCtor) => {\n Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {\n const value: PropertyDescriptor = Object.getOwnPropertyDescriptor(baseCtor.prototype, name) || Object.create(null);\n /* if(name === '_constructor') {\n callbacks.push(value.value);\n return;\n } else */if(name === 'constructor') {\n return;\n }\n\n Object.defineProperty(\n derivedCtor.prototype,\n name,\n value\n );\n });\n });\n\n // if(callbacks.length) {\n // function c(...args: any[]): any {\n // callbacks.forEach((cb, idx) => {\n // // @ts-ignore\n // cb.apply(this, args[idx] || []);\n // });\n // };\n\n // Object.defineProperty(derivedCtor.prototype, 'superConstructor', {\n // configurable: true,\n // enumerable: true,\n // value: c,\n // writable: true\n // });\n // }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport DEBUG from '../../config/debug';\nimport {ConstructorDeclMap, Message, MessageEntity, MessageFwdHeader, Peer, Update, Updates} from '../../layer';\nimport {logger, LogTypes} from '../logger';\nimport assumeType from '../../helpers/assumeType';\nimport App from '../../config/app';\nimport filterUnique from '../../helpers/array/filterUnique';\nimport {AppManager} from './manager';\nimport parseMarkdown from '../richTextProcessor/parseMarkdown';\nimport ctx from '../../environment/ctx';\nimport EventListenerBase from '../../helpers/eventListenerBase';\nimport applyMixins from '../../helpers/applyMixins';\nimport tsNow from '../../helpers/tsNow';\n\ntype UpdatesState = {\n pendingPtsUpdates: (Update & {pts: number, pts_count: number})[],\n pendingSeqUpdates?: {[seq: number]: {seq: number, date: number, updates: any[]}},\n syncPending: {\n seqAwaiting?: number,\n ptsAwaiting?: boolean,\n timeout: number\n },\n syncLoading: Promise,\n\n seq?: number,\n pts?: number,\n date?: number,\n lastPtsUpdateTime?: number,\n lastDifferenceTime?: number\n};\n\nconst SYNC_DELAY = 6;\n\nclass ApiUpdatesManager {\n public updatesState: UpdatesState = {\n pendingPtsUpdates: [],\n pendingSeqUpdates: {},\n syncPending: null,\n syncLoading: null\n };\n\n private channelStates: {[channelId: ChatId]: UpdatesState} = {};\n private attached = false;\n\n private log = logger('UPDATES', LogTypes.Error | LogTypes.Warn | LogTypes.Log/* | LogTypes.Debug */);\n private debug = DEBUG;\n\n private subscriptions: {[channelId: ChatId]: {count: number, interval?: number}} = {};\n\n constructor() {\n this._constructor(false);\n }\n\n private setProxy() {\n const self = this;\n this.updatesState = new Proxy(this.updatesState, {\n set: function(target: ApiUpdatesManager['updatesState'], key: keyof ApiUpdatesManager['updatesState'], value: ApiUpdatesManager['updatesState'][typeof key]) {\n // @ts-ignore\n target[key] = value;\n self.saveUpdatesState();\n return true;\n }\n });\n }\n\n public saveUpdatesState() {\n const us = this.updatesState;\n this.appStateManager.pushToState('updates', {\n seq: us.seq,\n pts: us.pts,\n date: us.date\n });\n }\n\n private popPendingSeqUpdate() {\n const state = this.updatesState;\n const nextSeq = state.seq + 1;\n const pendingUpdatesData = state.pendingSeqUpdates[nextSeq];\n if(!pendingUpdatesData) {\n return false;\n }\n\n const updates = pendingUpdatesData.updates;\n for(let i = 0, length = updates.length; i < length; ++i) {\n this.saveUpdate(updates[i]);\n }\n\n state.seq = pendingUpdatesData.seq;\n if(pendingUpdatesData.date && state.date < pendingUpdatesData.date) {\n state.date = pendingUpdatesData.date;\n }\n delete state.pendingSeqUpdates[nextSeq];\n\n if(!this.popPendingSeqUpdate() &&\n state.syncPending?.seqAwaiting &&\n state.seq >= state.syncPending.seqAwaiting) {\n if(!state.syncPending.ptsAwaiting) {\n this.clearStatePendingSync(state);\n } else {\n delete state.syncPending.seqAwaiting;\n }\n }\n\n return true;\n }\n\n private popPendingPtsUpdate(channelId: ChatId) {\n const curState = channelId ? this.getChannelState(channelId) : this.updatesState;\n if(!curState.pendingPtsUpdates.length) {\n return false;\n }\n\n curState.pendingPtsUpdates.sort((a, b) => {\n return a.pts - b.pts;\n });\n // this.log('pop update', channelId, curState.pendingPtsUpdates)\n\n let curPts = curState.pts;\n let goodPts = 0;\n let goodIndex = 0;\n for(let i = 0, length = curState.pendingPtsUpdates.length; i < length; ++i) {\n const update = curState.pendingPtsUpdates[i];\n curPts += update.pts_count;\n if(curPts >= update.pts) {\n goodPts = update.pts;\n goodIndex = i;\n }\n }\n\n if(!goodPts) {\n return false;\n }\n\n this.log.debug('pop pending pts updates', goodPts, curState.pendingPtsUpdates.slice(0, goodIndex + 1));\n\n curState.pts = goodPts;\n for(let i = 0; i <= goodIndex; ++i) {\n const update = curState.pendingPtsUpdates[i];\n\n // @ts-ignore\n this.saveUpdate(update);\n }\n curState.pendingPtsUpdates.splice(0, goodIndex + 1);\n\n if(!curState.pendingPtsUpdates.length && curState.syncPending) {\n if(!curState.syncPending.seqAwaiting) {\n this.clearStatePendingSync(curState);\n } else {\n delete curState.syncPending.ptsAwaiting;\n }\n }\n\n return true;\n }\n\n public forceGetDifference() {\n if(!this.updatesState.syncLoading) {\n this.getDifference();\n }\n }\n\n public processLocalUpdate(update: Update) {\n this.processUpdateMessage({\n _: 'updateShort',\n update\n } as Updates, {\n local: true,\n ignoreSyncLoading: true\n });\n }\n\n public processUpdateMessage = (updateMessage: any, options: Partial<{\n override: boolean,\n ignoreSyncLoading: boolean,\n local: boolean\n }> = {}) => {\n const log = this.log.bindPrefix('processUpdateMessage');\n // return forceGetDifference()\n const processOpts = {\n date: updateMessage.date,\n seq: updateMessage.seq,\n seqStart: updateMessage.seq_start,\n ignoreSyncLoading: options.ignoreSyncLoading,\n local: options.local\n };\n\n log.debug('processUpdateMessage', updateMessage, options);\n\n switch(updateMessage._) {\n case 'updatesTooLong':\n case 'new_session_created':\n this.forceGetDifference();\n break;\n\n case 'updateShort':\n this.processUpdate(updateMessage.update, processOpts);\n break;\n\n case 'updateShortMessage':\n case 'updateShortChatMessage': {\n assumeType(updateMessage);\n log.debug('updateShortMessage | updateShortChatMessage', {...updateMessage});\n const isOut = updateMessage.pFlags.out;\n const fromId = (updateMessage as Updates.updateShortChatMessage).from_id || (isOut ? this.appPeersManager.peerId : (updateMessage as Updates.updateShortMessage).user_id);\n const toId = (updateMessage as Updates.updateShortChatMessage).chat_id ?\n (updateMessage as Updates.updateShortChatMessage).chat_id.toPeerId(true) :\n ((updateMessage as Updates.updateShortMessage).user_id.toPeerId(false) || this.appPeersManager.peerId);\n\n this.processUpdate({\n _: 'updateNewMessage',\n message: {\n _: 'message',\n pFlags: updateMessage.pFlags,\n id: updateMessage.id,\n from_id: this.appPeersManager.getOutputPeer(fromId.toPeerId()),\n peer_id: this.appPeersManager.getOutputPeer(toId),\n date: updateMessage.date,\n message: updateMessage.message,\n fwd_from: updateMessage.fwd_from,\n reply_to: updateMessage.reply_to,\n entities: updateMessage.entities,\n ttl_period: updateMessage.ttl_period\n },\n pts: updateMessage.pts,\n pts_count: updateMessage.pts_count\n }, processOpts);\n break;\n }\n\n case 'updatesCombined':\n case 'updates':\n this.appUsersManager.saveApiUsers(updateMessage.users, options.override);\n this.appChatsManager.saveApiChats(updateMessage.chats, options.override);\n\n updateMessage.updates.forEach((update: Update) => {\n this.processUpdate(update, processOpts);\n });\n break;\n\n default:\n log.warn('unknown update message', updateMessage);\n }\n };\n\n private getDifference(first = false): Promise {\n const log = this.log.bindPrefix('getDifference');\n log('get', first);\n\n const updatesState = this.updatesState;\n const wasSyncing = updatesState.syncLoading;\n if(!wasSyncing) {\n updatesState.pendingSeqUpdates = {};\n updatesState.pendingPtsUpdates = [];\n }\n\n this.clearStatePendingSync(updatesState);\n\n const promise = this.apiManager.invokeApi('updates.getDifference', {\n pts: updatesState.pts,\n pts_total_limit: first /* && false */? /* 50 */1200 : undefined,\n date: updatesState.date,\n qts: -1\n }, {\n timeout: 0x7fffffff\n }).then((differenceResult) => {\n log('result', differenceResult);\n\n if(differenceResult._ === 'updates.differenceEmpty') {\n log('apply empty diff', differenceResult.seq);\n updatesState.date = differenceResult.date;\n updatesState.seq = differenceResult.seq;\n return;\n }\n\n // ! SORRY I'M SORRY I'M SORRY\n if(first) {\n this.rootScope.dispatchEvent('state_synchronizing');\n }\n\n if(differenceResult._ !== 'updates.differenceTooLong') {\n this.appUsersManager.saveApiUsers(differenceResult.users);\n this.appChatsManager.saveApiChats(differenceResult.chats);\n\n // Should be first because of updateMessageID\n log('applying', differenceResult.other_updates.length, 'other updates');\n\n differenceResult.other_updates.forEach((update) => {\n switch(update._) {\n case 'updateChannelTooLong':\n case 'updateNewChannelMessage':\n case 'updateEditChannelMessage':\n this.processUpdate(update);\n return;\n }\n\n this.saveUpdate(update);\n });\n\n log('applying', differenceResult.new_messages.length, 'new messages');\n differenceResult.new_messages.forEach((apiMessage) => {\n this.saveUpdate({\n _: 'updateNewMessage',\n message: apiMessage,\n pts: updatesState.pts,\n pts_count: 0\n });\n });\n\n const nextState = differenceResult._ === 'updates.difference' ? differenceResult.state : differenceResult.intermediate_state;\n updatesState.seq = nextState.seq;\n updatesState.pts = nextState.pts;\n updatesState.date = nextState.date;\n } else {\n updatesState.pts = differenceResult.pts;\n updatesState.date = tsNow(true) + this.timeManager.getServerTimeOffset();\n delete updatesState.seq;\n\n this.channelStates = {};\n\n log.warn('result type', differenceResult._);\n this.onDifferenceTooLong();\n }\n\n log('apply diff', updatesState.seq, updatesState.pts);\n\n if(differenceResult._ === 'updates.differenceSlice') {\n return this.getDifference();\n } else {\n log('finish');\n }\n });\n\n if(!wasSyncing) {\n this.setDifferencePromise(updatesState, promise);\n }\n\n return promise;\n }\n\n private clearStatePendingSync(state: UpdatesState) {\n if(state.syncPending) {\n clearTimeout(state.syncPending.timeout);\n state.syncPending = null;\n }\n }\n\n private getChannelDifference(channelId: ChatId): Promise {\n const channelState = this.getChannelState(channelId);\n const wasSyncing = channelState.syncLoading;\n if(!wasSyncing) {\n channelState.pendingPtsUpdates = [];\n }\n\n const log = this.log.bindPrefix('getChannelDifference-' + channelId);\n\n this.clearStatePendingSync(channelState);\n\n log('get', channelState.pts);\n const promise = this.apiManager.invokeApi('updates.getChannelDifference', {\n channel: this.appChatsManager.getChannelInput(channelId),\n filter: {_: 'channelMessagesFilterEmpty'},\n pts: channelState.pts,\n limit: 1000\n }, {timeout: 0x7fffffff}).then((differenceResult) => {\n log('diff result', differenceResult)\n channelState.pts = 'pts' in differenceResult ? differenceResult.pts : undefined;\n channelState.lastDifferenceTime = Date.now();\n\n if(differenceResult._ === 'updates.channelDifferenceEmpty') {\n log('apply channel empty diff', differenceResult);\n return;\n }\n\n if(differenceResult._ === 'updates.channelDifferenceTooLong') {\n log('channel diff too long', differenceResult);\n delete this.channelStates[channelId];\n\n this.saveUpdate({_: 'updateChannelReload', channel_id: channelId});\n return;\n }\n\n this.appUsersManager.saveApiUsers(differenceResult.users);\n this.appChatsManager.saveApiChats(differenceResult.chats);\n\n // Should be first because of updateMessageID\n log('applying', differenceResult.other_updates.length, 'channel other updates');\n differenceResult.other_updates.forEach((update) => {\n this.saveUpdate(update);\n });\n\n log('applying', differenceResult.new_messages.length, 'channel new messages');\n differenceResult.new_messages.forEach((apiMessage) => {\n this.saveUpdate({\n _: 'updateNewChannelMessage',\n message: apiMessage,\n pts: channelState.pts,\n pts_count: 0\n });\n });\n\n log('apply channel diff', channelState.pts);\n\n if(differenceResult._ === 'updates.channelDifference' &&\n !differenceResult.pFlags.final) {\n return this.getChannelDifference(channelId);\n } else {\n log('finished channel get diff');\n }\n });\n\n if(!wasSyncing) {\n this.setDifferencePromise(channelState, promise, channelId);\n }\n\n return promise;\n }\n\n private onDifferenceTooLong() {\n for(const i in this) {\n const value = this[i];\n if(value instanceof AppManager) {\n value.clear?.();\n }\n }\n\n this.rootScope.dispatchEvent('state_cleared');\n }\n\n private setDifferencePromise(state: UpdatesState, promise: UpdatesState['syncLoading'], channelId?: ChatId) {\n state.syncLoading = promise;\n !channelId && this.rootScope.dispatchEvent('state_synchronizing');\n\n promise.then(() => {\n state.syncLoading = null;\n !channelId && this.rootScope.dispatchEvent('state_synchronized');\n }, () => {\n state.syncLoading = null;\n });\n }\n\n public addChannelState(channelId: ChatId, pts: number) {\n if(!pts) {\n throw new Error('Add channel state without pts ' + channelId);\n }\n\n return this.channelStates[channelId] ??= {\n pts,\n pendingPtsUpdates: [],\n syncPending: null,\n syncLoading: null\n };\n }\n\n public getChannelState(channelId: ChatId, pts?: number) {\n if(this.channelStates[channelId] === undefined) {\n this.addChannelState(channelId, pts);\n }\n\n return this.channelStates[channelId];\n }\n\n private processUpdate(update: Update, options: Partial<{\n date: number,\n seq: number,\n seqStart: number\n }> & Parameters[1] = {}) {\n let channelId: ChatId;\n switch(update._) {\n case 'updateNewChannelMessage':\n case 'updateEditChannelMessage':\n channelId = this.appPeersManager.getPeerId(update.message.peer_id).toChatId();\n break;\n /* case 'updateDeleteChannelMessages':\n channelId = update.channel_id;\n break; */\n case 'updateChannelTooLong':\n channelId = update.channel_id;\n if(!(channelId in this.channelStates)) {\n return false;\n }\n break;\n default:\n if('channel_id' in update && 'pts' in update) {\n channelId = update.channel_id;\n }\n break;\n }\n\n const {pts, pts_count} = update as Update.updateNewMessage;\n const curState = channelId ? this.getChannelState(channelId, pts) : this.updatesState;\n\n const log = this.log.bindPrefix(`processUpdate${channelId ? `-${channelId}` : ''}`);\n log('process', curState.pts, update);\n\n if(curState.syncLoading && !options.ignoreSyncLoading) {\n log('ignoring update, sync loading');\n return false;\n } else if(curState.syncLoading) {\n log('ignoring syncLoading');\n }\n\n if(update._ === 'updateChannelTooLong') {\n if(!curState.lastPtsUpdateTime ||\n curState.lastPtsUpdateTime < (Date.now() - SYNC_DELAY)) {\n log.warn('channel too long, get diff');\n this.getChannelDifference(channelId);\n }\n return false;\n }\n\n if(update._ === 'updateNewMessage' ||\n update._ === 'updateEditMessage' ||\n update._ === 'updateNewChannelMessage' ||\n update._ === 'updateEditChannelMessage') {\n const message = update.message as Message.message;\n const toPeerId = this.appPeersManager.getPeerId(message.peer_id);\n const fwdHeader: MessageFwdHeader.messageFwdHeader = message.fwd_from || {} as any;\n let reason: string;\n if(message.from_id && !this.appUsersManager.hasUser(this.appPeersManager.getPeerId(message.from_id), message.pFlags.post/* || channelId*/) && (reason = 'author') ||\n fwdHeader.from_id && !this.appUsersManager.hasUser(this.appPeersManager.getPeerId(fwdHeader.from_id), !!(fwdHeader.from_id as Peer.peerChannel).channel_id) && (reason = 'fwdAuthor') ||\n (fwdHeader.from_id as Peer.peerChannel)?.channel_id && !this.appChatsManager.hasChat((fwdHeader.from_id as Peer.peerChannel).channel_id, true) && (reason = 'fwdChannel') ||\n toPeerId.isUser() && !this.appUsersManager.hasUser(toPeerId) && (reason = 'toPeer User') ||\n toPeerId.isAnyChat() && !this.appChatsManager.hasChat(toPeerId.toChatId()) && (reason = 'toPeer Chat')) {\n log.warn('not enough data for message update', toPeerId, reason, message);\n if(channelId && this.appChatsManager.hasChat(channelId)) {\n this.getChannelDifference(channelId);\n } else {\n this.forceGetDifference();\n }\n return false;\n }\n } else if(channelId && !this.appChatsManager.hasChat(channelId)) {\n log('skipping update, missing channel');\n return false;\n }\n\n let popPts: boolean;\n let popSeq: boolean;\n\n if(pts) {\n const newPts = curState.pts + (pts_count || 0);\n if(newPts < pts) {\n log.warn('pts hole', curState, update, channelId && this.appChatsManager.getChat(channelId));\n curState.pendingPtsUpdates.push(update as Update.updateNewMessage);\n if(!curState.syncPending && !curState.syncLoading) {\n curState.syncPending = {\n timeout: ctx.setTimeout(() => {\n curState.syncPending = null;\n\n if(curState.syncLoading) {\n return;\n }\n\n if(channelId) {\n this.getChannelDifference(channelId);\n } else {\n this.getDifference();\n }\n }, SYNC_DELAY)\n };\n }\n\n if(curState.syncPending) {\n curState.syncPending.ptsAwaiting = true;\n }\n\n return false;\n }\n\n if(pts > curState.pts) {\n curState.pts = pts;\n popPts = true;\n\n curState.lastPtsUpdateTime = Date.now();\n } else if(pts_count) {\n log.warn('duplicate update');\n return false;\n }\n\n if(channelId && options.date && this.updatesState.date < options.date) {\n this.updatesState.date = options.date;\n }\n } else if(!channelId && options.seq > 0) {\n const seq = options.seq;\n const seqStart = options.seqStart || seq;\n\n if(seqStart !== curState.seq + 1) {\n if(seqStart > curState.seq) {\n log.warn('seq hole', curState, curState.syncPending?.seqAwaiting);\n\n curState.pendingSeqUpdates[seqStart] ??= {seq, date: options.date, updates: []};\n curState.pendingSeqUpdates[seqStart].updates.push(update);\n\n if(!curState.syncPending) {\n curState.syncPending = {\n timeout: ctx.setTimeout(() => {\n curState.syncPending = null;\n\n if(curState.syncLoading) {\n return;\n }\n\n this.getDifference();\n }, SYNC_DELAY)\n };\n }\n\n if(!curState.syncPending.seqAwaiting ||\n curState.syncPending.seqAwaiting < seqStart) {\n curState.syncPending.seqAwaiting = seqStart;\n }\n return false;\n }\n }\n\n if(curState.seq !== seq) {\n curState.seq = seq;\n if(options.date && curState.date < options.date) {\n curState.date = options.date;\n }\n\n popSeq = true;\n }\n }\n\n this.saveUpdate(update);\n\n if(popPts) {\n this.popPendingPtsUpdate(channelId);\n } else if(popSeq) {\n this.popPendingSeqUpdate();\n }\n }\n\n public saveUpdate(update: Update) {\n this.log.debug('update', update);\n this.dispatchEvent(update._, update as any);\n }\n\n public subscribeToChannelUpdates(channelId: ChatId) {\n const subscription = this.subscriptions[channelId] ??= {count: 0};\n ++subscription.count;\n\n const cb = () => {\n const state = this.getChannelState(channelId);\n if(!state.syncLoading && (!state.lastDifferenceTime || (Date.now() - state.lastDifferenceTime) > 2500)) {\n this.getChannelDifference(channelId);\n }\n };\n\n subscription.interval ??= ctx.setInterval(cb, 3000);\n cb();\n }\n\n public unsubscribeFromChannelUpdates(channelId: ChatId, force?: boolean) {\n const subscription = this.subscriptions[channelId];\n if(!subscription?.interval || (--subscription.count && !force)) {\n return;\n }\n\n clearInterval(subscription.interval);\n subscription.interval = undefined;\n delete this.subscriptions[channelId];\n }\n\n public attach(langCode?: string) {\n if(this.attached) return;\n\n // return;\n\n this.log('attach');\n\n this.attached = true;\n\n this.appStateManager.getState().then(({updates: state}) => {\n const newVersion = this.appStateManager.newVersion/* || '1.6.0' */;\n\n // rootScope.broadcast('state_synchronizing');\n if(!state || !state.pts || !state.date/* || !state.seq */) { // seq can be undefined because of updates.differenceTooLong\n this.log('will get new state');\n\n this.updatesState.syncLoading = new Promise((resolve) => {\n this.apiManager.invokeApi('updates.getState', {}, {noErrorBox: true}).then((stateResult) => {\n this.updatesState.seq = stateResult.seq;\n this.updatesState.pts = stateResult.pts;\n this.updatesState.date = stateResult.date;\n this.saveUpdatesState();\n // setTimeout(() => {\n this.updatesState.syncLoading = null;\n resolve();\n // rootScope.broadcast('state_synchronized');\n // }, 1000);\n\n // ! for testing\n // updatesState.seq = 1\n // updatesState.pts = stateResult.pts - 5000\n // updatesState.date = 1\n // getDifference()\n });\n });\n } else {\n // ! for testing\n /* state.seq = 1;\n state.pts = state.pts - 15;\n state.date = 1; */\n // state.pts -= 100;\n\n // state.date = 1628623682;\n // state.pts = 2007500;\n // state.seq = 503;\n\n Object.assign(this.updatesState, state);\n\n this.log('will get difference', Object.assign({}, state));\n\n this.getDifference(true)/* .finally(() => {\n if(this.updatesState.syncLoading) {\n rootScope.broadcast('state_synchronizing');\n }\n }) */;\n }\n\n this.apiManager.setUpdatesProcessor(this.processUpdateMessage);\n\n // this.updatesState.syncLoading.then(() => {\n this.setProxy();\n // });\n\n if(newVersion) {\n this.updatesState.syncLoading.then(async() => {\n const strs: Record = {\n en: 'was updated to version',\n ru: 'обновлён до версии'\n };\n\n const getChangelog = (lang: string) => {\n return fetch(`changelogs/${lang}_${newVersion.split(' ')[0]}.md`)\n .then((res) => (res.status === 200 && res.ok && res.text()) || Promise.reject())\n .then((text) => {\n const langStr = strs[lang] || strs.en;\n const pre = `**Telegram Web${App.suffix} ${langStr} ${newVersion}**\\n\\n`;\n\n text = pre + text;\n\n const [message, entities] = parseMarkdown(text, []);\n\n const update: Update.updateServiceNotification = {\n _: 'updateServiceNotification',\n entities,\n message,\n type: 'local',\n pFlags: {},\n inbox_date: tsNow(true),\n media: undefined\n };\n\n this.processLocalUpdate(update);\n });\n };\n\n const languages = filterUnique([langCode, 'en']);\n for(const language of languages) {\n try {\n await getChangelog(language);\n break;\n } catch(err) {\n\n }\n }\n });\n }\n });\n }\n}\n\ninterface ApiUpdatesManager extends EventListenerBase<{\n [name in Update['_']]: (update: ConstructorDeclMap[name]) => void\n}>, AppManager {}\napplyMixins(ApiUpdatesManager, [EventListenerBase, AppManager]);\n\nexport {ApiUpdatesManager};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {joinDeepPath} from '../../helpers/object/setDeepProperty';\nimport {UserProfilePhoto, ChatPhoto, InputFileLocation} from '../../layer';\nimport {DownloadOptions} from '../mtproto/apiFileManager';\nimport MTProtoMessagePort from '../mtproto/mtprotoMessagePort';\nimport {AppManager} from './manager';\n\nexport type PeerPhotoSize = 'photo_small' | 'photo_big';\n\nexport class AppAvatarsManager extends AppManager {\n private savedAvatarURLs: {\n [peerId: PeerId]: {\n [size in PeerPhotoSize]?: string | Promise\n }\n } = {};\n\n protected after() {\n this.rootScope.addEventListener('avatar_update', ({peerId, threadId}) => {\n if(threadId) {\n return;\n }\n\n this.removeFromAvatarsCache(peerId);\n });\n }\n\n public isAvatarCached(peerId: PeerId, size?: PeerPhotoSize) {\n const saved = this.savedAvatarURLs[peerId];\n if(size === undefined) {\n return !!saved;\n }\n\n return !!(saved && saved[size] && !(saved[size] instanceof Promise));\n }\n\n public removeFromAvatarsCache(peerId: PeerId) {\n if(this.savedAvatarURLs[peerId]) {\n delete this.savedAvatarURLs[peerId];\n MTProtoMessagePort.getInstance().invokeVoid('mirror', {\n name: 'avatars',\n key: '' + peerId\n });\n }\n }\n\n public loadAvatar(peerId: PeerId, photo: UserProfilePhoto.userProfilePhoto | ChatPhoto.chatPhoto, size: PeerPhotoSize) {\n const saved = this.savedAvatarURLs[peerId] ??= {};\n if(saved[size]) {\n return saved[size];\n }\n\n // console.warn('will invoke downloadSmallFile:', peerId);\n const peerPhotoFileLocation: InputFileLocation.inputPeerPhotoFileLocation = {\n _: 'inputPeerPhotoFileLocation',\n pFlags: {},\n peer: this.appPeersManager.getInputPeerById(peerId),\n photo_id: photo.photo_id\n };\n\n const downloadOptions: DownloadOptions = {dcId: photo.dc_id, location: peerPhotoFileLocation};\n if(size === 'photo_big') {\n peerPhotoFileLocation.pFlags.big = true;\n downloadOptions.limitPart = 512 * 1024;\n }\n\n const promise = this.apiFileManager.download(downloadOptions);\n return saved[size] = promise.then((blob) => {\n const url = saved[size] = URL.createObjectURL(blob);\n\n MTProtoMessagePort.getInstance().invokeVoid('mirror', {\n name: 'avatars',\n key: joinDeepPath(peerId, size),\n value: url\n });\n\n return url;\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nconst arrays = {\n 8: new Uint8Array(1),\n 16: new Uint16Array(1),\n 32: new Uint32Array(1)\n};\nexport function nextRandomUint(bits: 8 | 16 | 32) {\n const array = arrays[bits];\n crypto.getRandomValues(array);\n return array[0];\n}\n\nexport function randomLong() {\n return '' + nextRandomUint(32) + nextRandomUint(32) % 0xFFFFFF;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {getEnvironment} from '../../environment/utils';\nimport safeReplaceObject from '../../helpers/object/safeReplaceObject';\nimport {nextRandomUint} from '../../helpers/random';\nimport {InputPhoneCall, MessagesDhConfig, PhoneCall, PhoneCallDiscardReason, PhoneCallProtocol, PhonePhoneCall} from '../../layer';\nimport {AppManager} from './manager';\n\nexport type CallId = PhoneCall['id'];\n\nexport type MyPhoneCall = Exclude;\n\nexport class AppCallsManager extends AppManager {\n private calls: Map;\n\n protected after() {\n this.calls = new Map();\n\n if(!getEnvironment().IS_CALL_SUPPORTED) {\n return;\n }\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updatePhoneCall: (update) => {\n this.saveCall(update.phone_call);\n },\n\n updatePhoneCallSignalingData: (update) => {\n this.rootScope.dispatchEvent('call_signaling', {callId: update.phone_call_id, data: update.data});\n }\n });\n }\n\n public computeKey(g_b: Uint8Array, a: Uint8Array, p: Uint8Array) {\n return this.cryptoWorker.invokeCrypto('compute-dh-key', g_b, a, p);\n }\n\n public saveCall(call: PhoneCall) {\n const isDiscarded = call._ === 'phoneCallDiscarded';\n const oldCall = this.calls.get(call.id);\n if(oldCall) {\n // if(shouldUpdate) {\n safeReplaceObject(oldCall, call);\n // }\n\n if(isDiscarded) {\n this.calls.delete(call.id);\n }\n\n call = oldCall;\n } else if(!isDiscarded) {\n this.calls.set(call.id, call as any);\n }\n\n this.rootScope.dispatchEvent('call_update', call);\n\n return call;\n }\n\n public getCall(callId: CallId) {\n return this.calls.get(callId);\n }\n\n public getCallInput(id: CallId): InputPhoneCall {\n const call = this.getCall(id);\n return {\n _: 'inputPhoneCall',\n id: call.id,\n access_hash: call.access_hash\n };\n }\n\n public savePhonePhoneCall(phonePhoneCall: PhonePhoneCall) {\n this.appUsersManager.saveApiUsers(phonePhoneCall.users);\n return this.saveCall(phonePhoneCall.phone_call);\n }\n\n public generateDh() {\n return this.apiManager.invokeApi('messages.getDhConfig', {\n version: 0,\n random_length: 256\n }).then((dhConfig) => {\n return this.cryptoWorker.invokeCrypto('generate-dh', dhConfig as MessagesDhConfig.messagesDhConfig);\n });\n }\n\n // private verifyProtocolCompatibility(protocol: PhoneCallProtocol) {\n // const my = getCallProtocol();\n // const myVersion = my.library_versions[0];\n // return !protocol.library_versions.find((version) => {\n // return compareVersion(myVersion, version) > 0;\n // });\n // }\n\n public async requestCall(userId: UserId, protocol: PhoneCallProtocol, g_a_hash: Uint8Array, video?: boolean) {\n const phonePhoneCall = await this.apiManager.invokeApi('phone.requestCall', {\n user_id: this.appUsersManager.getUserInput(userId),\n protocol: protocol,\n video: video,\n random_id: nextRandomUint(32),\n g_a_hash: g_a_hash\n });\n\n return this.savePhonePhoneCall(phonePhoneCall);\n }\n\n public async discardCall(callId: CallId, duration: number, reason: PhoneCallDiscardReason['_'], video?: boolean) {\n if(!this.getCall(callId)) {\n return;\n }\n\n const updates = await this.apiManager.invokeApi('phone.discardCall', {\n video,\n peer: this.getCallInput(callId),\n duration,\n reason: {\n _: reason\n },\n connection_id: '0'\n });\n\n this.apiUpdatesManager.processUpdateMessage(updates);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Chat, ChatAdminRights, ChatBannedRights} from '../../../../layer';\nimport {ChatRights} from '../../appChatsManager';\n\n/**\n * Check the user's ability to do an action in chat\n * @param id\n * @param action creator can still send messages to left channel. so this function shows server rights. see canSendToPeer for local rights in messages manager.\n * @param rights do not provide this parameter when checking rights for self\n * @param isThread\n * @returns\n */\nexport default function hasRights(\n chat: Exclude,\n action: ChatRights,\n rights?: ChatAdminRights | ChatBannedRights,\n isThread?: boolean\n) {\n if(!chat) return false;\n\n if((chat as Chat.chat).pFlags.deactivated && action !== 'view_messages') {\n return false;\n }\n\n const isCheckingRightsForSelf = rights === undefined;\n if((chat as Chat.chat).pFlags.creator && isCheckingRightsForSelf/* && action !== 'anonymous' */) {\n return true;\n }\n\n if(chat._ === 'chatForbidden' ||\n chat._ === 'channelForbidden' ||\n // (chat as any).pFlags.kicked ||\n (chat.pFlags.left && !(chat as Chat.channel).pFlags.megagroup)) {\n return false;\n }\n\n // const adminRights = chat.admin_rights;\n // const bannedRights = (chat as Chat.channel).banned_rights || chat.default_banned_rights;\n\n if(!rights) {\n rights = chat.admin_rights || (chat as Chat.channel).banned_rights || chat.default_banned_rights;\n\n if(!rights) {\n return false;\n }\n }\n\n let myFlags: Partial<{[flag in keyof ChatBannedRights['pFlags'] | keyof ChatAdminRights['pFlags']]: true}> = {};\n if(rights) {\n myFlags = rights.pFlags as any;\n }\n\n // const adminFlags = adminRights?.pFlags || {};\n // const bannedFlags = bannedRights?.pFlags || {};\n\n const isAdmin = rights._ === 'chatAdminRights';\n\n switch(action) {\n case 'embed_links':\n case 'send_games':\n case 'send_gifs':\n case 'send_inline':\n case 'send_media':\n case 'send_messages':\n case 'send_polls':\n case 'send_stickers':\n case 'send_photos':\n case 'send_videos':\n case 'send_roundvideos':\n case 'send_audios':\n case 'send_voices':\n case 'send_docs':\n case 'send_plain': {\n // if(!isThread && chat.pFlags.left) {\n // return false;\n // }\n\n if(!isAdmin && myFlags[action]) {\n return false;\n }\n\n if(chat._ === 'channel') {\n if(!chat.pFlags.megagroup && !myFlags.post_messages) {\n return false;\n }\n }\n\n break;\n }\n\n // * revoke foreign messages\n case 'delete_messages':\n case 'manage_call': {\n return !!myFlags[action];\n }\n\n case 'pin_messages': {\n return isAdmin ? !!(myFlags[action] || (!(chat as Chat.channel).pFlags.megagroup && myFlags.post_messages)) : !myFlags[action];\n }\n\n // case 'change_info': {\n // return adminRights || isCheckingRightsForSelf ? adminFlags[action] : !myFlags[action];\n // }\n\n case 'invite_links': {\n if(chat._ === 'chat') {\n return false;\n }\n\n return isAdmin && !!myFlags['invite_users'];\n }\n\n // * only creator can do that\n case 'change_type':\n case 'delete_chat': {\n return false;\n }\n\n case 'change_info':\n case 'invite_users': {\n return isAdmin || (chat as Chat.channel).pFlags.broadcast ? !!myFlags[action] : !myFlags[action];\n }\n\n case 'delete_stories':\n case 'edit_stories':\n case 'post_stories':\n case 'add_admins':\n case 'anonymous':\n case 'post_messages':\n case 'edit_messages': {\n return isAdmin && !!myFlags[action];\n }\n\n case 'ban_users':\n case 'change_permissions': {\n return isAdmin && !!myFlags['ban_users'];\n }\n\n case 'view_participants': {\n return !!(chat._ === 'chat' || !chat.pFlags.broadcast || chat.pFlags.creator || chat.admin_rights);\n }\n\n case 'create_giveaway': {\n return isAdmin && !!myFlags['post_messages'];\n }\n\n // * regular user can only create a new topic and manage their own topics (so this will only say whether user is eligible to create a new topic)\n // * admin can manage all topics\n case 'manage_topics': {\n return isAdmin ? !!myFlags[action] : !myFlags[action];\n }\n\n // case 'view_statistics': {\n // return isAdmin && !!myFlags['other'];\n // }\n }\n\n return true;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {ChannelParticipant, ChatParticipant} from '../../../../layer';\nimport getPeerId from '../peers/getPeerId';\n\nexport default function getParticipantPeerId(participant: PeerId | ChannelParticipant | ChatParticipant): PeerId {\n if(typeof(participant) !== 'object') {\n return participant;\n }\n\n const peerId = (participant as ChannelParticipant.channelParticipantBanned).peer ?\n getPeerId((participant as ChannelParticipant.channelParticipantBanned).peer) :\n (participant as ChatParticipant.chatParticipant).user_id.toPeerId();\n return peerId;\n}\n","import {Chat, User} from '../../../../layer';\n\nexport default function getPeerActiveUsernames(peer: User | Chat) {\n if(!peer) {\n return [];\n }\n\n const usernames = (peer as Chat.channel).usernames;\n if(usernames) {\n return usernames\n .filter((username) => username.pFlags.active)\n // .sort((a, b) => +!!b.pFlags.editable - +!!a.pFlags.editable)\n .map((username) => username.username);\n }\n\n return (peer as Chat.channel).username ? [(peer as Chat.channel).username] : [];\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport deepEqual from '../../helpers/object/deepEqual';\nimport isObject from '../../helpers/object/isObject';\nimport safeReplaceObject from '../../helpers/object/safeReplaceObject';\nimport {ChannelParticipant, ChannelsCreateChannel, ChannelsSendAsPeers, Chat, ChatAdminRights, ChatBannedRights, ChatFull, ChatInvite, ChatParticipant, ChatPhoto, ChatReactions, EmojiStatus, InputChannel, InputChatPhoto, InputFile, InputPeer, MessagesChats, MessagesSponsoredMessages, Peer, SponsoredMessage, Update, Updates} from '../../layer';\nimport {AppManager} from './manager';\nimport hasRights from './utils/chats/hasRights';\nimport getParticipantPeerId from './utils/chats/getParticipantPeerId';\nimport {AppStoragesManager} from './appStoragesManager';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\nimport {randomLong} from '../../helpers/random';\nimport tsNow from '../../helpers/tsNow';\nimport getPeerActiveUsernames from './utils/peers/getPeerActiveUsernames';\nimport MTProtoMessagePort from '../mtproto/mtprotoMessagePort';\nimport getPeerId from './utils/peers/getPeerId';\nimport callbackify from '../../helpers/callbackify';\n\nexport type Channel = Chat.channel;\nexport type ChatRights = keyof ChatBannedRights['pFlags'] | keyof ChatAdminRights['pFlags'] |\n 'change_type' | 'change_permissions' | 'delete_chat' | 'view_participants' |\n 'invite_links' | 'create_giveaway'/* | 'view_statistics' */;\n\nconst TEST_SPONSORED = false;\n\nexport class AppChatsManager extends AppManager {\n private storage: AppStoragesManager['storages']['chats'];\n\n private chats: {[id: ChatId]: Exclude};\n // private usernames: any;\n // private channelAccess: any;\n // private megagroups: {[id: number]: true};\n\n private recommendations: {[chatId: ChatId]: MaybePromise};\n\n protected after() {\n this.clear(true);\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateChannelParticipant: this.onUpdateChannelParticipant,\n\n updateChatDefaultBannedRights: this.onUpdateChatDefaultBannedRights\n });\n\n return Promise.all([\n this.appStateManager.getState(),\n this.appStoragesManager.loadStorage('chats')\n ]).then(([state, {results: chats, storage}]) => {\n this.storage = storage;\n\n this.saveApiChats(chats);\n\n this.peersStorage.addEventListener('peerNeeded', (peerId) => {\n if(peerId.isUser() || this.storage.getFromCache(peerId.toChatId())) {\n return;\n }\n\n this.storage.set({\n [peerId.toChatId()]: this.getChat(peerId.toChatId())\n });\n });\n\n this.peersStorage.addEventListener('peerUnneeded', (peerId) => {\n if(peerId.isUser() || !this.storage.getFromCache(peerId.toChatId())) {\n return;\n }\n\n this.storage.delete(peerId.toChatId());\n });\n\n this.rootScope.addEventListener('premium_toggle', () => {\n this.recommendations = {};\n });\n });\n }\n\n public clear = (init = false) => {\n if(!init) {\n for(const chatId in this.chats) {\n if(!chatId) continue;\n if(!this.peersStorage.isPeerNeeded(chatId.toPeerId(true))) {\n const chat = this.chats[chatId];\n this.appUsersManager.modifyUsernamesCache(chat, false);\n\n this.storage.delete(chatId);\n delete this.chats[chatId];\n }\n }\n } else {\n this.chats = {};\n }\n\n this.recommendations = {};\n };\n\n public saveApiChats(apiChats: any[], override?: boolean) {\n if(!apiChats || (apiChats as any).saved) return;\n (apiChats as any).saved = true;\n apiChats.forEach((chat) => this.saveApiChat(chat, override));\n }\n\n public saveApiChat(chat: Chat, override?: boolean) {\n if(!chat || chat._ === 'chatEmpty') return;\n /* if(chat._ !== 'chat' && chat._ !== 'channel') {\n return;\n } */\n\n // * exclude from state\n // defineNotNumerableProperties(chat, ['rTitle', 'initials']);\n\n const oldChat = this.chats[chat.id];\n\n /* if(oldChat && !override) {\n return;\n } */\n\n (chat as Chat.chat).pFlags ??= {};\n\n if((chat as Chat.channel).pFlags.min && oldChat !== undefined) {\n return;\n }\n\n if(chat._ === 'channel' &&\n chat.participants_count === undefined &&\n oldChat !== undefined &&\n (oldChat as Chat.channel).participants_count) {\n chat.participants_count = (oldChat as Chat.channel).participants_count;\n }\n\n if((chat as Chat.channel).photo?._ === 'chatPhotoEmpty') {\n delete (chat as Chat.channel).photo;\n }\n\n const changedUsername = this.appUsersManager.setUsernameToCache(chat, oldChat);\n\n /* if(chat.username) {\n let searchUsername = searchIndexManager.cleanUsername(chat.username);\n this.usernames[searchUsername] = chat.id;\n } */\n\n if((chat as Chat.channel).emoji_status?._ === 'emojiStatusEmpty') {\n delete (chat as Chat.channel).emoji_status;\n }\n\n const peerId = chat.id.toPeerId(true);\n if(oldChat === undefined) {\n this.chats[chat.id] = chat;\n this.mirrorChat(chat);\n } else {\n const oldPhotoId = ((oldChat as Chat.chat).photo as ChatPhoto.chatPhoto)?.photo_id;\n const newPhotoId = ((chat as Chat.chat).photo as ChatPhoto.chatPhoto)?.photo_id;\n const toggledForum = (oldChat as Chat.channel).pFlags.forum !== (chat as Chat.channel).pFlags.forum;\n const changedPhoto = oldPhotoId !== newPhotoId || toggledForum;\n const changedEmojiStatus = ((oldChat as Chat.channel).emoji_status as EmojiStatus.emojiStatus)?.document_id !==\n ((chat as Chat.channel).emoji_status as EmojiStatus.emojiStatus)?.document_id;\n\n const changedTitle = oldChat.title !== chat.title || changedUsername;\n\n const changedAnyBadge = changedEmojiStatus ||\n (oldChat as Chat.channel).pFlags.verified !== (chat as Chat.channel).pFlags.verified ||\n (oldChat as Chat.channel).pFlags.scam !== (chat as Chat.channel).pFlags.scam ||\n (oldChat as Chat.channel).pFlags.fake !== (chat as Chat.channel).pFlags.fake;\n\n const changedParticipation = (oldChat as Chat.channel).pFlags.left !== (chat as Chat.channel).pFlags.left;\n\n const storiesCallback = this.appStoriesManager.saveApiPeerStories(chat as Chat.channel, oldChat as Chat.channel);\n\n safeReplaceObject(oldChat, chat);\n this.mirrorChat(oldChat);\n this.rootScope.dispatchEvent('chat_update', chat.id);\n\n storiesCallback?.();\n\n if(changedParticipation) {\n this.rootScope.dispatchEvent('chat_participation', {chatId: chat.id, left: !!(chat as Chat.channel).pFlags.left});\n }\n\n if(changedPhoto) {\n this.rootScope.dispatchEvent('avatar_update', {peerId});\n }\n\n if(changedTitle || changedAnyBadge) {\n this.rootScope.dispatchEvent('peer_title_edit', {peerId});\n }\n\n if(toggledForum) {\n this.rootScope.dispatchEvent('chat_toggle_forum', {chatId: chat.id, enabled: !!(chat as Chat.channel).pFlags.forum});\n }\n }\n\n if(this.peersStorage.isPeerNeeded(peerId)) {\n this.storage.set({\n [chat.id]: chat\n });\n }\n }\n\n private mirrorChat(chat: Chat) {\n MTProtoMessagePort.getInstance().invokeVoid('mirror', {\n name: 'peers',\n key: '' + chat.id.toPeerId(true),\n value: chat\n });\n }\n\n public getChat(id: ChatId) {\n return this.chats[id];\n }\n\n public getChats() {\n return this.chats;\n }\n\n /**\n * Check the user's ability to do an action in chat\n * @param id\n * @param action creator can still send messages to left channel. so this function shows server rights. see canSendToPeer for local rights in messages manager.\n * @param rights do not provide this parameter when checking rights for self\n * @param isThread\n * @returns\n */\n public hasRights(id: ChatId, action: ChatRights, rights?: ChatAdminRights | ChatBannedRights, isThread?: boolean) {\n return hasRights(this.getChat(id), action, rights, isThread);\n }\n\n public editChatDefaultBannedRights(id: ChatId, banned_rights: ChatBannedRights) {\n const chat = this.getChat(id) as Chat.chat;\n if(chat.default_banned_rights) {\n if(chat.default_banned_rights.until_date === banned_rights.until_date && deepEqual(chat.default_banned_rights.pFlags, banned_rights.pFlags)) {\n return Promise.resolve();\n }\n }\n\n return this.apiManager.invokeApi('messages.editChatDefaultBannedRights', {\n peer: this.appPeersManager.getInputPeerById(id.toPeerId(true)),\n banned_rights\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n /* public resolveUsername(username: string) {\n return this.usernames[username] || 0;\n } */\n\n /* public saveChannelAccess(id: ChatId, accessHash: string) {\n this.channelAccess[id] = accessHash;\n } */\n\n /* public saveIsMegagroup(id: ChatId) {\n this.megagroups[id] = true;\n } */\n\n public isChannel(id: ChatId) {\n const chat = this.chats[id];\n return !!(chat && (chat._ === 'channel' || chat._ === 'channelForbidden')/* || this.channelAccess[id] */);\n }\n\n public isMegagroup(id: ChatId) {\n /* if(this.megagroups[id]) {\n return true;\n } */\n\n const chat: Chat = this.chats[id];\n return !!(chat as Chat.channel)?.pFlags?.megagroup;\n }\n\n public isForum(id: ChatId) {\n const chat = this.chats[id];\n return !!(chat as Chat.channel)?.pFlags?.forum;\n }\n\n public isBroadcast(id: ChatId) {\n return this.isChannel(id) && !this.isMegagroup(id);\n }\n\n public isInChat(id: ChatId) {\n let good = true;\n const chat: Chat = this.getChat(id);\n if(!chat ||\n chat._ === 'channelForbidden' ||\n chat._ === 'chatForbidden' ||\n (chat as any as Chat.chatEmpty)._ === 'chatEmpty' ||\n (chat as Chat.chat).pFlags.left ||\n // || (chat as any).pFlags.kicked\n (chat as Chat.chat).pFlags.deactivated) {\n good = false;\n }\n\n return good;\n }\n\n public isPublic(id: ChatId) {\n const chat: Chat = this.getChat(id);\n return !!getPeerActiveUsernames(chat)[0];\n }\n\n public getChannelInput(id: ChatId): InputChannel {\n const chat: Chat = this.getChat(id);\n if(!chat || !(chat as Chat.channel).access_hash) {\n return {\n _: 'inputChannelEmpty'\n };\n } else {\n return {\n _: 'inputChannel',\n channel_id: id,\n access_hash: (chat as Chat.channel).access_hash/* || this.channelAccess[id] */ || '0'\n };\n }\n }\n\n public getInputPeer(id: ChatId) {\n return this.isChannel(id) ? this.getChannelInputPeer(id) : this.getChatInputPeer(id);\n }\n\n public getChatInputPeer(id: ChatId): InputPeer.inputPeerChat {\n return {\n _: 'inputPeerChat',\n chat_id: id\n };\n }\n\n public getChannelInputPeer(id: ChatId): InputPeer.inputPeerChannel {\n return {\n _: 'inputPeerChannel',\n channel_id: id,\n access_hash: (this.getChat(id) as Chat.channel).access_hash/* || this.channelAccess[id] */ || 0\n };\n }\n\n public hasChat(id: ChatId, allowMin?: true) {\n const chat = this.chats[id];\n return isObject(chat) && (allowMin || !(chat as Chat.channel).pFlags.min);\n }\n\n public getChatString(id: ChatId) {\n const chat = this.getChat(id);\n if(this.isChannel(id)) {\n return (this.isMegagroup(id) ? 's' : 'c') + id + '_' + (chat as Chat.channel).access_hash;\n }\n return 'g' + id;\n }\n\n public getChatSearchText(id: ChatId) {\n const chat = this.chats[id];\n if(!chat) {\n return '';\n }\n\n const arr: string[] = [\n chat.title,\n ...getPeerActiveUsernames(chat)\n ];\n\n return arr.filter(Boolean).join(' ');\n }\n\n public createChannel(options: ChannelsCreateChannel): Promise {\n return this.apiManager.invokeApi('channels.createChannel', options).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n\n const channelId = (updates as any).chats[0].id;\n return channelId;\n });\n }\n\n public inviteToChannel(id: ChatId, userIds: UserId[]) {\n const input = this.getChannelInput(id);\n const usersInputs = userIds.map((u) => this.appUsersManager.getUserInput(u));\n\n return this.apiManager.invokeApi('channels.inviteToChannel', {\n channel: input,\n users: usersInputs\n }).then((messagesInvitedUsers) => {\n const timestamp = tsNow(true);\n const participantUpdates: Update.updateChannelParticipant[] = userIds.map((userId) => {\n return this.generateUpdateChannelParticipant({\n chatId: id,\n newParticipant: {\n _: 'channelParticipant',\n date: timestamp,\n user_id: userId\n }\n });\n });\n\n participantUpdates.forEach((update) => {\n this.apiUpdatesManager.processLocalUpdate(update);\n });\n\n this.onChatUpdatedForce(id, messagesInvitedUsers.updates);\n return messagesInvitedUsers.missing_invitees;\n });\n }\n\n public createChat(title: string, userIds: UserId[]): Promise {\n return this.apiManager.invokeApi('messages.createChat', {\n users: userIds.map((u) => this.appUsersManager.getUserInput(u)),\n title\n }).then((invitedUsers) => {\n this.apiUpdatesManager.processUpdateMessage(invitedUsers.updates);\n\n const chatId = (invitedUsers.updates as Updates.updates).chats[0].id;\n return chatId;\n });\n }\n\n private onChatUpdated = (chatId: ChatId, updates?: Updates, forceInvalidation?: boolean) => {\n // console.log('onChatUpdated', chatId, updates);\n\n this.apiUpdatesManager.processUpdateMessage(updates);\n // * can have no updates on editAdmin\n if((forceInvalidation || (updates as Updates.updates)?.updates?.length) && this.isChannel(chatId)) {\n this.rootScope.dispatchEvent('invalidate_participants', chatId);\n }\n };\n\n private onChatUpdatedForce = (chatId: ChatId, updates?: Updates) => {\n return this.onChatUpdated(chatId, updates, true);\n }\n\n public leaveChannel(id: ChatId) {\n return this.apiManager.invokeApi('channels.leaveChannel', {\n channel: this.getChannelInput(id)\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public joinChannel(id: ChatId) {\n return this.apiManager.invokeApi('channels.joinChannel', {\n channel: this.getChannelInput(id)\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public addToChat(id: ChatId, userId: UserId) {\n if(this.isChannel(id)) return this.inviteToChannel(id, [userId]);\n else return this.addChatUser(id, userId);\n }\n\n public addChatUser(id: ChatId, userId: UserId, fwdLimit = 100) {\n return this.apiManager.invokeApi('messages.addChatUser', {\n chat_id: id,\n user_id: this.appUsersManager.getUserInput(userId),\n fwd_limit: fwdLimit\n }).then((messagesInvitedUsers) => {\n this.onChatUpdated(id, messagesInvitedUsers.updates);\n return messagesInvitedUsers.missing_invitees;\n });\n }\n\n public deleteChatUser(id: ChatId, userId: UserId) {\n return this.apiManager.invokeApi('messages.deleteChatUser', {\n chat_id: id,\n user_id: this.appUsersManager.getUserInput(userId)\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public leaveChat(id: ChatId) {\n return this.deleteChatUser(id, this.appUsersManager.getSelf().id);\n }\n\n public leave(id: ChatId) {\n return this.isChannel(id) ? this.leaveChannel(id) : this.leaveChat(id);\n }\n\n public delete(id: ChatId) {\n return this.isChannel(id) ? this.deleteChannel(id) : this.deleteChat(id);\n }\n\n public deleteChannel(id: ChatId) {\n return this.apiManager.invokeApi('channels.deleteChannel', {\n channel: this.getChannelInput(id)\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public deleteChat(id: ChatId) {\n // return this.leaveChat(id).then(() => {\n return this.apiManager.invokeApi('messages.deleteChat', {\n chat_id: id\n });\n // });\n }\n\n public migrateChat(id: ChatId): Promise {\n const chat: Chat = this.getChat(id);\n if(chat._ === 'channel') return Promise.resolve(chat.id);\n return this.apiManager.invokeApi('messages.migrateChat', {\n chat_id: id\n }).then((updates) => {\n this.onChatUpdated(id, updates);\n const update: Update.updateChannel = (updates as Updates.updates).updates.find((u) => u._ === 'updateChannel') as any;\n return update.channel_id;\n });\n }\n\n public updateUsername(id: ChatId, username: string, doNotRefresh?: boolean) {\n const promise = this.apiManager.invokeApi('channels.updateUsername', {\n channel: this.getChannelInput(id),\n username\n });\n\n return this.refreshChatAfterRequest(id, promise, doNotRefresh);\n }\n\n public editAdmin(\n id: ChatId,\n participant: PeerId | ChannelParticipant | ChatParticipant,\n rights: ChatAdminRights,\n rank: string = ''\n ) {\n const wasChannel = this.isChannel(id);\n const peerId = getParticipantPeerId(participant);\n const userId = peerId.toUserId();\n return this.migrateChat(id).then((id) => {\n return this.apiManager.invokeApi('channels.editAdmin', {\n channel: this.getChannelInput(id),\n user_id: this.appUsersManager.getUserInput(userId),\n admin_rights: rights,\n rank\n }).then((updates) => {\n const timestamp = tsNow(true);\n const update = this.generateUpdateChannelParticipant({\n chatId: id,\n newParticipant: Object.keys(rights.pFlags).length ? {\n _: 'channelParticipantAdmin',\n date: timestamp,\n admin_rights: rights,\n promoted_by: this.appUsersManager.getSelf().id,\n user_id: userId,\n rank,\n pFlags: {}\n } : {\n _: 'channelParticipant',\n date: timestamp,\n user_id: userId\n },\n prevParticipant: participant,\n wasChannel\n });\n this.apiUpdatesManager.processLocalUpdate(update);\n\n this.onChatUpdatedForce(id, updates);\n });\n });\n }\n\n public editPhoto(id: ChatId, inputFile: InputFile) {\n const inputChatPhoto: InputChatPhoto = {\n _: 'inputChatUploadedPhoto',\n file: inputFile\n };\n\n let promise: any;\n if(this.isChannel(id)) {\n promise = this.apiManager.invokeApi('channels.editPhoto', {\n channel: this.getChannelInput(id),\n photo: inputChatPhoto\n });\n } else {\n promise = this.apiManager.invokeApi('messages.editChatPhoto', {\n chat_id: id,\n photo: inputChatPhoto\n });\n }\n\n return promise.then(this.onChatUpdated.bind(this, id));\n }\n\n public editTitle(id: ChatId, title: string) {\n let promise: any;\n\n if(this.isChannel(id)) {\n promise = this.apiManager.invokeApi('channels.editTitle', {\n channel: this.getChannelInput(id),\n title\n });\n } else {\n promise = this.apiManager.invokeApi('messages.editChatTitle', {\n chat_id: id,\n title\n });\n }\n\n return promise.then(this.onChatUpdated.bind(this, id));\n }\n\n public editAbout(id: ChatId, about: string) {\n const peerId = id.toPeerId(true);\n return this.apiManager.invokeApi('messages.editChatAbout', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n about\n }).then((bool) => {\n if(bool) {\n this.rootScope.dispatchEvent('peer_bio_edit', peerId);\n }\n\n return bool;\n });\n }\n\n private generateUpdateChannelParticipant({\n chatId: id,\n prevParticipant: prevParticipant,\n newParticipant,\n wasChannel\n }: {\n chatId: ChatId,\n prevParticipant?: PeerId | ChannelParticipant | ChatParticipant,\n newParticipant: ChannelParticipant,\n wasChannel?: boolean\n }): Update.updateChannelParticipant {\n const timestamp = tsNow(true);\n const peerId = getParticipantPeerId(prevParticipant || newParticipant);\n return {\n _: 'updateChannelParticipant',\n channel_id: id,\n date: timestamp,\n actor_id: undefined,\n qts: undefined,\n user_id: peerId,\n prev_participant: wasChannel ? prevParticipant as ChannelParticipant : undefined,\n new_participant: newParticipant,\n pFlags: {}\n };\n }\n\n public async editBanned(\n id: ChatId,\n participant: PeerId | ChannelParticipant | ChatParticipant,\n bannedRights: ChatBannedRights\n ) {\n const peerId = getParticipantPeerId(participant);\n const wasChannel = this.isChannel(id);\n if(!wasChannel) {\n const channelId = await this.migrateChat(id);\n id = channelId;\n }\n\n return this.apiManager.invokeApi('channels.editBanned', {\n channel: this.getChannelInput(id),\n participant: this.appPeersManager.getInputPeerById(peerId),\n banned_rights: bannedRights\n }).then((updates) => {\n const timestamp = tsNow(true);\n const update = this.generateUpdateChannelParticipant({\n chatId: id,\n wasChannel,\n prevParticipant: participant,\n newParticipant: Object.keys(bannedRights.pFlags).length ? {\n _: 'channelParticipantBanned',\n date: timestamp,\n banned_rights: bannedRights,\n kicked_by: this.appUsersManager.getSelf().id,\n peer: this.appPeersManager.getOutputPeer(peerId),\n pFlags: bannedRights.pFlags.view_messages ? {left: true} : {}\n } : undefined\n });\n\n this.apiUpdatesManager.processLocalUpdate(update);\n\n this.onChatUpdated(id, updates);\n });\n }\n\n public clearChannelParticipantBannedRights(id: ChatId, participant: PeerId | ChannelParticipant) {\n return this.editBanned(id, participant, {\n _: 'chatBannedRights',\n until_date: 0,\n pFlags: {}\n });\n }\n\n public kickFromChannel(id: ChatId, participant: PeerId | ChannelParticipant) {\n return this.editBanned(id, participant, {\n _: 'chatBannedRights',\n until_date: 0,\n pFlags: {\n view_messages: true\n }\n });\n }\n\n public kickFromChat(id: ChatId, participant: PeerId | ChannelParticipant | ChatParticipant) {\n if(this.isChannel(id)) return this.kickFromChannel(id, participant as ChannelParticipant);\n else return this.deleteChatUser(id, isObject(participant) ? getParticipantPeerId(participant) : (participant as PeerId).toUserId());\n }\n\n public resolveChannel(id: ChatId) {\n return this.apiManager.invokeApiSingle('channels.getChannels', {\n id: [{\n _: 'inputChannel',\n channel_id: id,\n access_hash: '0'\n }]\n }).then((messagesChats) => {\n this.saveApiChats(messagesChats.chats);\n });\n }\n\n public setChatAvailableReactions(id: ChatId, reactions: ChatReactions) {\n this.appProfileManager.modifyCachedFullChat(id, (chatFull) => {\n chatFull.available_reactions = reactions;\n });\n\n return this.apiManager.invokeApi('messages.setChatAvailableReactions', {\n peer: this.getInputPeer(id),\n available_reactions: reactions\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public getSendAs(channelId: ChatId) {\n const onResult = (sendAsPeers: ChannelsSendAsPeers) => {\n this.appUsersManager.saveApiUsers(sendAsPeers.users);\n this.saveApiChats(sendAsPeers.chats);\n\n return sendAsPeers.peers;\n };\n\n const inputPeer = this.getChannelInputPeer(channelId);\n const result = this.apiManager.invokeApiCacheable('channels.getSendAs', {\n peer: inputPeer\n }, {cacheSeconds: 60, syncIfHasResult: true});\n return callbackify(result, onResult);\n }\n\n public checkUsername(chatId: ChatId, username: string) {\n return this.apiManager.invokeApi('channels.checkUsername', {\n channel: this.getChannelInput(chatId),\n username\n });\n }\n\n public getSponsoredMessage(chatId: ChatId): Promise {\n // let promise: Promise;\n // if(TEST_SPONSORED) promise = Promise.resolve({\n // '_': 'messages.sponsoredMessages',\n // 'messages': [\n // {\n // '_': 'sponsoredMessage',\n // 'pFlags': {},\n // 'flags': 9,\n // 'random_id': new Uint8Array([80, 5, 249, 174, 44, 73, 173, 14, 246, 81, 187, 182, 223, 5, 4, 128]),\n // 'from_id': {\n // '_': 'peerUser',\n // 'user_id': 983000232\n // },\n // 'start_param': 'GreatMinds',\n // 'message': 'This is a long sponsored message. In fact, it has the maximum length allowed on the platform – 160 characters 😬😬. It\\'s promoting a bot with a start parameter.' + chatId\n // }\n // ],\n // 'chats': [],\n // 'users': [\n // {\n // '_': 'user',\n // 'pFlags': {\n // 'bot': true,\n // 'verified': true,\n // 'apply_min_photo': true\n // },\n // 'flags': 34226219,\n // 'id': 983000232,\n // 'access_hash': '-294959558742535650',\n // 'first_name': 'Quiz Bot',\n // 'username': 'QuizBot',\n // 'photo': {\n // '_': 'userProfilePhoto',\n // 'pFlags': {},\n // 'flags': 2,\n // 'photo_id': '4221953848856651689',\n // 'stripped_thumb': new Uint8Array([1, 8, 8, 155, 247, 95, 103, 255, 0, 110, 138, 40, 174, 132, 142, 6, 238, 127]),\n // 'dc_id': 2\n // },\n // 'bot_info_version': 11,\n // 'bot_inline_placeholder': 'Search a quiz...',\n // 'sortName': 'quiz bot'\n // }\n // ]\n // });\n\n const promise = this.apiManager.invokeApiCacheable('channels.getSponsoredMessages', {\n channel: this.getChannelInput(chatId)\n }, {cacheSeconds: 300});\n\n return promise.then((sponsoredMessages) => {\n if(sponsoredMessages._ !== 'messages.sponsoredMessages') {\n return sponsoredMessages;\n }\n\n this.appPeersManager.saveApiPeers(sponsoredMessages);\n\n const sponsoredMessage = sponsoredMessages.messages.shift();\n sponsoredMessages.messages.push(sponsoredMessage);\n\n sponsoredMessages.messages.forEach((sponsoredMessage) => {\n if(sponsoredMessage.photo) {\n sponsoredMessage.photo = this.appPhotosManager.savePhoto(sponsoredMessage.photo);\n }\n\n // sponsoredMessage.pFlags.can_report = true;\n });\n\n return sponsoredMessages;\n });\n }\n\n public viewSponsoredMessage(chatId: ChatId, randomId: SponsoredMessage['random_id']) {\n return this.apiManager.invokeApiSingle('channels.viewSponsoredMessage', {\n channel: this.getChannelInput(chatId),\n random_id: randomId\n });\n }\n\n public clickSponsoredMessage(chatId: ChatId, randomId: SponsoredMessage['random_id']) {\n return this.apiManager.invokeApiSingle('channels.clickSponsoredMessage', {\n channel: this.getChannelInput(chatId),\n random_id: randomId\n });\n }\n\n public deactivateAllUsernames(chatId: ChatId, doNotRefresh?: boolean) {\n const promise = this.apiManager.invokeApi('channels.deactivateAllUsernames', {\n channel: this.getChannelInput(chatId)\n });\n\n return this.refreshChatAfterRequest(chatId, promise, doNotRefresh);\n }\n\n public makeChannelPrivate(chatId: ChatId) {\n const promises: Promise[] = [\n this.updateUsername(chatId, '', true),\n this.deactivateAllUsernames(chatId, true)\n ];\n\n const promise = Promise.all(promises).then(() => true);\n return this.refreshChatAfterRequest(chatId, promise);\n }\n\n public refreshChatAfterRequest>(chatId: ChatId, promise: T, doNotRefresh?: boolean): T {\n if(doNotRefresh) {\n return promise;\n }\n\n return promise.then((value) => {\n return this.getChannels([chatId]).then(() => value);\n }) as T;\n }\n\n public getChannels(chatIds: ChatId[]) {\n return this.apiManager.invokeApi('channels.getChannels', {\n id: chatIds.map((chatId) => this.getChannelInput(chatId))\n }).then((messagesChats) => {\n this.saveApiChats(messagesChats.chats);\n });\n }\n\n public toggleSomething(\n chatId: ChatId,\n what: 'toggleJoinToSend' | 'toggleJoinRequest' | 'toggleForum' | 'togglePreHistoryHidden' | 'toggleSignatures' | 'toggleAntiSpam' | 'toggleViewForumAsMessages' | 'toggleParticipantsHidden',\n enabled: boolean,\n forceInvalidation?: boolean\n ) {\n return this.migrateChat(chatId).then((channelId) => {\n return this.apiManager.invokeApi(`channels.${what}`, {\n channel: this.getChannelInput(channelId),\n enabled\n }).then((forceInvalidation ? this.onChatUpdatedForce : this.onChatUpdated).bind(this, channelId));\n });\n }\n\n public toggleParticipantsHidden(id: ChatId, enabled: boolean) {\n return this.toggleSomething(id, 'toggleParticipantsHidden', enabled, true);\n }\n\n public togglePreHistoryHidden(id: ChatId, enabled: boolean) {\n return this.toggleSomething(id, 'togglePreHistoryHidden', enabled);\n }\n\n public toggleSignatures(id: ChatId, enabled: boolean) {\n return this.toggleSomething(id, 'toggleSignatures', enabled);\n }\n\n public toggleNoForwards(id: ChatId, enabled: boolean) {\n return this.apiManager.invokeApi('messages.toggleNoForwards', {\n peer: this.getInputPeer(id),\n enabled\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public toggleJoinToSend(chatId: ChatId, enabled: boolean) {\n return this.toggleSomething(chatId, 'toggleJoinToSend', enabled);\n }\n\n public toggleJoinRequest(chatId: ChatId, enabled: boolean) {\n return this.toggleSomething(chatId, 'toggleJoinRequest', enabled);\n }\n\n public toggleForum(chatId: ChatId, enabled: boolean) {\n return this.toggleSomething(chatId, 'toggleForum', enabled);\n }\n\n public toggleAntiSpam(id: ChatId, enabled: boolean) {\n return this.toggleSomething(id, 'toggleAntiSpam', enabled);\n }\n\n public toggleViewForumAsMessages(chatId: ChatId, enabled: boolean) {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateChannelViewForumAsMessages',\n channel_id: chatId,\n enabled\n });\n\n return this.toggleSomething(chatId, 'toggleViewForumAsMessages', enabled);\n }\n\n public editForumTopic(options: {\n chatId: ChatId,\n topicId: number,\n title?: string,\n iconEmojiId?: DocId,\n closed?: boolean,\n hidden?: boolean\n }) {\n const {chatId, topicId, title, iconEmojiId, closed, hidden} = options;\n return this.apiManager.invokeApi('channels.editForumTopic', {\n channel: this.getChannelInput(chatId),\n topic_id: getServerMessageId(topicId),\n title,\n icon_emoji_id: iconEmojiId,\n closed,\n hidden\n }).then(this.onChatUpdated.bind(this, chatId));\n }\n\n public async createForumTopic(options: {\n chatId: ChatId,\n title: string,\n iconColor: number,\n iconEmojiId: DocId\n }) {\n const {chatId, title, iconColor, iconEmojiId} = options;\n\n const channelFull = await this.appProfileManager.getChannelFull(chatId);\n const sendAsInputPeer = channelFull.default_send_as && this.appPeersManager.getInputPeerById(this.appPeersManager.getPeerId(channelFull.default_send_as));\n\n return this.apiManager.invokeApi('channels.createForumTopic', {\n channel: this.getChannelInput(chatId),\n title,\n icon_color: iconColor,\n icon_emoji_id: iconEmojiId,\n random_id: randomLong(),\n send_as: sendAsInputPeer\n }).then((updates) => {\n this.onChatUpdated(chatId, updates);\n\n const update = (updates as Updates.updates).updates.find((update) => update._ === 'updateNewChannelMessage') as Update.updateNewChannelMessage;\n return this.appMessagesIdsManager.generateMessageId(update.message.id, chatId);\n });\n }\n\n public updatePinnedForumTopic(chatId: ChatId, topicId: number, pinned: boolean) {\n return this.apiManager.invokeApi('channels.updatePinnedForumTopic', {\n channel: this.getChannelInput(chatId),\n topic_id: getServerMessageId(topicId),\n pinned\n }).then(this.onChatUpdated.bind(this, chatId));\n }\n\n public getGroupsForDiscussion() {\n return this.apiManager.invokeApi('channels.getGroupsForDiscussion').then((messagesChats) => {\n this.saveApiChats(messagesChats.chats);\n return messagesChats.chats;\n });\n }\n\n public async setDiscussionGroup(id: ChatId, groupId: ChatId) {\n if(this.getChat(groupId) && !this.isChannel(groupId)) {\n groupId = await this.migrateChat(groupId);\n }\n\n if(groupId) {\n const channelFull = await this.appProfileManager.getChannelFull(groupId);\n if(channelFull.pFlags.hidden_prehistory) {\n await this.togglePreHistoryHidden(groupId, false);\n }\n }\n\n return this.apiManager.invokeApi('channels.setDiscussionGroup', {\n broadcast: this.getChannelInput(id),\n group: this.getChannelInput(groupId)\n }).then(() => {\n const channelFull = this.appProfileManager.getCachedFullChat(id) as ChatFull.channelFull;\n const newOrWasGroupId = groupId || channelFull.linked_chat_id;\n const groupChannelFull = this.appProfileManager.getCachedFullChat(newOrWasGroupId) as ChatFull.channelFull;\n if(channelFull) {\n channelFull.linked_chat_id = groupId;\n }\n\n if(groupChannelFull) {\n groupChannelFull.linked_chat_id = id;\n }\n\n if(channelFull) this.rootScope.dispatchEvent('chat_full_update', id);\n if(groupChannelFull) this.rootScope.dispatchEvent('chat_full_update', newOrWasGroupId);\n });\n }\n\n public async toggleSlowMode(id: ChatId, seconds: number) {\n id = await this.migrateChat(id);\n return this.apiManager.invokeApi('channels.toggleSlowMode', {\n channel: this.getChannelInput(id),\n seconds\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public hideChatJoinRequest(chatId: ChatId, userId: UserId, approved: boolean) {\n return this.apiManager.invokeApi('messages.hideChatJoinRequest', {\n peer: this.appChatsManager.getInputPeer(chatId),\n user_id: this.appUsersManager.getUserInput(userId),\n approved\n }).then((updates) => {\n return this.onChatUpdated(chatId, updates, true);\n });\n }\n\n public getChannelRecommendations(chatId: ChatId) {\n const result = this.recommendations[chatId];\n if(result) {\n return result;\n }\n\n const promise = this.recommendations[chatId] = this.apiManager.invokeApiSingleProcess({\n method: 'channels.getChannelRecommendations',\n params: {\n channel: this.getChannelInput(chatId)\n },\n processResult: (messagesChats) => {\n this.saveApiChats(messagesChats.chats);\n\n if(this.recommendations[chatId] === promise) {\n this.recommendations[chatId] = messagesChats;\n }\n\n return messagesChats;\n }\n });\n\n return promise;\n }\n\n public reportSponsoredMessage(chatId: ChatId, randomId: SponsoredMessage['random_id'], option: Uint8Array) {\n return this.apiManager.invokeApi('channels.reportSponsoredMessage', {\n channel: this.getChannelInput(chatId),\n random_id: randomId,\n option\n });\n }\n\n private onUpdateChannelParticipant = (update: Update.updateChannelParticipant) => {\n this.appProfileManager.invalidateChannelParticipants(update.channel_id);\n this.rootScope.dispatchEvent('chat_participant', update);\n };\n\n private onUpdateChatDefaultBannedRights = (update: Update.updateChatDefaultBannedRights) => {\n const chatId = this.appPeersManager.getPeerId(update.peer).toChatId();\n const chat = this.chats[chatId] as Chat.chat;\n if(chat) {\n chat.default_banned_rights = update.default_banned_rights;\n this.rootScope.dispatchEvent('chat_update', chatId);\n }\n };\n}\n","export default function capitalizeFirstLetter(string: string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n","const SKIP_PROTOCOLS: Set = new Set([\n 'javascript:'\n]);\nexport default function matchUrlProtocol(text: string) {\n if(!text) {\n return null;\n }\n\n try {\n const protocol = new URL(text).protocol;\n if(SKIP_PROTOCOLS.has(protocol)) {\n return null;\n }\n\n return protocol;\n } catch(err) {\n return null;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type addAnchorListener from '../../helpers/addAnchorListener';\nimport {PHONE_NUMBER_REG_EXP} from '.';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport matchUrlProtocol from './matchUrlProtocol';\nimport {T_ME_PREFIXES} from '../mtproto/mtproto_config';\n\nexport default function wrapUrl(url: string, unsafe?: number | boolean) {\n if(!matchUrlProtocol(url)) {\n url = 'https://' + url;\n }\n\n const out: {url: string, onclick?: Parameters[0]['name']} = {url};\n let tgMeMatch, telescoPeMatch, tgMatch;\n let onclick: typeof out['onclick'];\n /* if(unsafe === 2) {\n url = 'tg://unsafe_url?url=' + encodeURIComponent(url);\n } else */if((tgMeMatch = url.match(/^(?:https?:\\/\\/)?(?:(.+?)\\.)?(?:(?:web|k|z|a)\\.)?t(?:elegram)?\\.me(?:\\/(.+))?/))) {\n const u = new URL(url);\n let prefix = tgMeMatch[1];\n if(prefix && T_ME_PREFIXES.has(tgMeMatch[1])) {\n prefix = undefined;\n }\n\n if(prefix) {\n u.pathname = prefix + (u.pathname === '/' ? '' : u.pathname);\n }\n\n const fullPath = u.pathname.slice(1);\n const path = fullPath.split('/');\n\n if(path[0] && path[0][0] === '$' && path[0].length > 1) {\n onclick = 'invoice';\n } else if(/^\\+/.test(fullPath) && !PHONE_NUMBER_REG_EXP.test(fullPath)) { // second regexp is for phone numbers (t.me/+38050...)\n onclick = 'joinchat';\n } else if(path[0]) switch(path[0]) {\n case 'm':\n case 'addlist':\n case 'joinchat':\n case 'addstickers':\n case 'addemoji':\n case 'voicechat':\n case 'invoice':\n case 'boost':\n case 'giftcode':\n if(path.length !== 1 && !prefix) {\n onclick = path[0];\n break;\n }\n\n default:\n if(path.length <= 2 || path[1]?.match(/^\\d+(?:\\?(?:comment|thread)=\\d+)?$/) || path[1] === 's') {\n onclick = 'im';\n break;\n }\n\n break;\n }\n } else if((telescoPeMatch = url.match(/^(?:https?:\\/\\/)?telesco\\.pe\\/([^/?]+)\\/(\\d+)/))) {\n onclick = 'im';\n } else if((tgMatch = url.match(/tg:(?:\\/\\/)?(.+?)(?:\\?|$)/))) {\n onclick = 'tg_' + tgMatch[1] as any;\n }/* else if(unsafe) {\n url = 'tg://unsafe_url?url=' + encodeURIComponent(url);\n } */\n\n if(!(window as any)[onclick]) {\n onclick = undefined;\n }\n\n out.onclick = onclick;\n return out;\n}\n\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.wrapUrl = wrapUrl);\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// import I18n from '../../lib/langPack';\n\nexport default function setInnerHTML(elem: Element, html: string | DocumentFragment | Element) {\n setDirection(elem);\n if(html === undefined) {\n elem.replaceChildren();\n } else if(typeof(html) === 'string') {\n if(!html) elem.replaceChildren();\n else elem.textContent = html;\n } else {\n elem.replaceChildren(html);\n }\n}\n\nexport function setDirection(elem: Element) {\n // if(!I18n.isRTL) {\n elem.setAttribute('dir', 'auto');\n // }\n}\n\nexport function getDirection(): 'auto' {\n return 'auto';\n}\n","export default function setBlankToAnchor(anchor: HTMLAnchorElement) {\n anchor.target = '_blank';\n anchor.rel = 'noopener noreferrer';\n return anchor;\n}\n","let taskIdCounter = 1,\n isCallbackScheduled = false,\n isPerformingWork = false,\n taskQueue = [],\n currentTask = null,\n shouldYieldToHost = null,\n yieldInterval = 5,\n deadline = 0,\n maxYieldInterval = 300,\n scheduleCallback = null,\n scheduledCallback = null;\nconst maxSigned31BitInt = 1073741823;\nfunction setupScheduler() {\n const channel = new MessageChannel(),\n port = channel.port2;\n scheduleCallback = () => port.postMessage(null);\n channel.port1.onmessage = () => {\n if (scheduledCallback !== null) {\n const currentTime = performance.now();\n deadline = currentTime + yieldInterval;\n const hasTimeRemaining = true;\n try {\n const hasMoreWork = scheduledCallback(hasTimeRemaining, currentTime);\n if (!hasMoreWork) {\n scheduledCallback = null;\n } else port.postMessage(null);\n } catch (error) {\n port.postMessage(null);\n throw error;\n }\n }\n };\n if (navigator && navigator.scheduling && navigator.scheduling.isInputPending) {\n const scheduling = navigator.scheduling;\n shouldYieldToHost = () => {\n const currentTime = performance.now();\n if (currentTime >= deadline) {\n if (scheduling.isInputPending()) {\n return true;\n }\n return currentTime >= maxYieldInterval;\n } else {\n return false;\n }\n };\n } else {\n shouldYieldToHost = () => performance.now() >= deadline;\n }\n}\nfunction enqueue(taskQueue, task) {\n function findIndex() {\n let m = 0;\n let n = taskQueue.length - 1;\n while (m <= n) {\n const k = n + m >> 1;\n const cmp = task.expirationTime - taskQueue[k].expirationTime;\n if (cmp > 0) m = k + 1;else if (cmp < 0) n = k - 1;else return k;\n }\n return m;\n }\n taskQueue.splice(findIndex(), 0, task);\n}\nfunction requestCallback(fn, options) {\n if (!scheduleCallback) setupScheduler();\n let startTime = performance.now(),\n timeout = maxSigned31BitInt;\n if (options && options.timeout) timeout = options.timeout;\n const newTask = {\n id: taskIdCounter++,\n fn,\n startTime,\n expirationTime: startTime + timeout\n };\n enqueue(taskQueue, newTask);\n if (!isCallbackScheduled && !isPerformingWork) {\n isCallbackScheduled = true;\n scheduledCallback = flushWork;\n scheduleCallback();\n }\n return newTask;\n}\nfunction cancelCallback(task) {\n task.fn = null;\n}\nfunction flushWork(hasTimeRemaining, initialTime) {\n isCallbackScheduled = false;\n isPerformingWork = true;\n try {\n return workLoop(hasTimeRemaining, initialTime);\n } finally {\n currentTask = null;\n isPerformingWork = false;\n }\n}\nfunction workLoop(hasTimeRemaining, initialTime) {\n let currentTime = initialTime;\n currentTask = taskQueue[0] || null;\n while (currentTask !== null) {\n if (currentTask.expirationTime > currentTime && (!hasTimeRemaining || shouldYieldToHost())) {\n break;\n }\n const callback = currentTask.fn;\n if (callback !== null) {\n currentTask.fn = null;\n const didUserCallbackTimeout = currentTask.expirationTime <= currentTime;\n callback(didUserCallbackTimeout);\n currentTime = performance.now();\n if (currentTask === taskQueue[0]) {\n taskQueue.shift();\n }\n } else taskQueue.shift();\n currentTask = taskQueue[0] || null;\n }\n return currentTask !== null;\n}\n\nconst sharedConfig = {\n context: undefined,\n registry: undefined\n};\nfunction setHydrateContext(context) {\n sharedConfig.context = context;\n}\nfunction nextHydrateContext() {\n return {\n ...sharedConfig.context,\n id: `${sharedConfig.context.id}${sharedConfig.context.count++}-`,\n count: 0\n };\n}\n\nconst equalFn = (a, b) => a === b;\nconst $PROXY = Symbol(\"solid-proxy\");\nconst $TRACK = Symbol(\"solid-track\");\nconst $DEVCOMP = Symbol(\"solid-dev-component\");\nconst signalOptions = {\n equals: equalFn\n};\nlet ERROR = null;\nlet runEffects = runQueue;\nconst STALE = 1;\nconst PENDING = 2;\nconst UNOWNED = {\n owned: null,\n cleanups: null,\n context: null,\n owner: null\n};\nconst NO_INIT = {};\nvar Owner = null;\nlet Transition = null;\nlet Scheduler = null;\nlet ExternalSourceConfig = null;\nlet Listener = null;\nlet Updates = null;\nlet Effects = null;\nlet ExecCount = 0;\nfunction createRoot(fn, detachedOwner) {\n const listener = Listener,\n owner = Owner,\n unowned = fn.length === 0,\n current = detachedOwner === undefined ? owner : detachedOwner,\n root = unowned ? UNOWNED : {\n owned: null,\n cleanups: null,\n context: current ? current.context : null,\n owner: current\n },\n updateFn = unowned ? fn : () => fn(() => untrack(() => cleanNode(root)));\n Owner = root;\n Listener = null;\n try {\n return runUpdates(updateFn, true);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n}\nfunction createSignal(value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const s = {\n value,\n observers: null,\n observerSlots: null,\n comparator: options.equals || undefined\n };\n const setter = value => {\n if (typeof value === \"function\") {\n if (Transition && Transition.running && Transition.sources.has(s)) value = value(s.tValue);else value = value(s.value);\n }\n return writeSignal(s, value);\n };\n return [readSignal.bind(s), setter];\n}\nfunction createComputed(fn, value, options) {\n const c = createComputation(fn, value, true, STALE);\n if (Scheduler && Transition && Transition.running) Updates.push(c);else updateComputation(c);\n}\nfunction createRenderEffect(fn, value, options) {\n const c = createComputation(fn, value, false, STALE);\n if (Scheduler && Transition && Transition.running) Updates.push(c);else updateComputation(c);\n}\nfunction createEffect(fn, value, options) {\n runEffects = runUserEffects;\n const c = createComputation(fn, value, false, STALE),\n s = SuspenseContext && useContext(SuspenseContext);\n if (s) c.suspense = s;\n if (!options || !options.render) c.user = true;\n Effects ? Effects.push(c) : updateComputation(c);\n}\nfunction createReaction(onInvalidate, options) {\n let fn;\n const c = createComputation(() => {\n fn ? fn() : untrack(onInvalidate);\n fn = undefined;\n }, undefined, false, 0),\n s = SuspenseContext && useContext(SuspenseContext);\n if (s) c.suspense = s;\n c.user = true;\n return tracking => {\n fn = tracking;\n updateComputation(c);\n };\n}\nfunction createMemo(fn, value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const c = createComputation(fn, value, true, 0);\n c.observers = null;\n c.observerSlots = null;\n c.comparator = options.equals || undefined;\n if (Scheduler && Transition && Transition.running) {\n c.tState = STALE;\n Updates.push(c);\n } else updateComputation(c);\n return readSignal.bind(c);\n}\nfunction isPromise(v) {\n return v && typeof v === \"object\" && \"then\" in v;\n}\nfunction createResource(pSource, pFetcher, pOptions) {\n let source;\n let fetcher;\n let options;\n if (arguments.length === 2 && typeof pFetcher === \"object\" || arguments.length === 1) {\n source = true;\n fetcher = pSource;\n options = pFetcher || {};\n } else {\n source = pSource;\n fetcher = pFetcher;\n options = pOptions || {};\n }\n let pr = null,\n initP = NO_INIT,\n id = null,\n loadedUnderTransition = false,\n scheduled = false,\n resolved = (\"initialValue\" in options),\n dynamic = typeof source === \"function\" && createMemo(source);\n const contexts = new Set(),\n [value, setValue] = (options.storage || createSignal)(options.initialValue),\n [error, setError] = createSignal(undefined),\n [track, trigger] = createSignal(undefined, {\n equals: false\n }),\n [state, setState] = createSignal(resolved ? \"ready\" : \"unresolved\");\n if (sharedConfig.context) {\n id = `${sharedConfig.context.id}${sharedConfig.context.count++}`;\n let v;\n if (options.ssrLoadFrom === \"initial\") initP = options.initialValue;else if (sharedConfig.load && (v = sharedConfig.load(id))) initP = v;\n }\n function loadEnd(p, v, error, key) {\n if (pr === p) {\n pr = null;\n key !== undefined && (resolved = true);\n if ((p === initP || v === initP) && options.onHydrated) queueMicrotask(() => options.onHydrated(key, {\n value: v\n }));\n initP = NO_INIT;\n if (Transition && p && loadedUnderTransition) {\n Transition.promises.delete(p);\n loadedUnderTransition = false;\n runUpdates(() => {\n Transition.running = true;\n completeLoad(v, error);\n }, false);\n } else completeLoad(v, error);\n }\n return v;\n }\n function completeLoad(v, err) {\n runUpdates(() => {\n if (err === undefined) setValue(() => v);\n setState(err !== undefined ? \"errored\" : resolved ? \"ready\" : \"unresolved\");\n setError(err);\n for (const c of contexts.keys()) c.decrement();\n contexts.clear();\n }, false);\n }\n function read() {\n const c = SuspenseContext && useContext(SuspenseContext),\n v = value(),\n err = error();\n if (err !== undefined && !pr) throw err;\n if (Listener && !Listener.user && c) {\n createComputed(() => {\n track();\n if (pr) {\n if (c.resolved && Transition && loadedUnderTransition) Transition.promises.add(pr);else if (!contexts.has(c)) {\n c.increment();\n contexts.add(c);\n }\n }\n });\n }\n return v;\n }\n function load(refetching = true) {\n if (refetching !== false && scheduled) return;\n scheduled = false;\n const lookup = dynamic ? dynamic() : source;\n loadedUnderTransition = Transition && Transition.running;\n if (lookup == null || lookup === false) {\n loadEnd(pr, untrack(value));\n return;\n }\n if (Transition && pr) Transition.promises.delete(pr);\n const p = initP !== NO_INIT ? initP : untrack(() => fetcher(lookup, {\n value: value(),\n refetching\n }));\n if (!isPromise(p)) {\n loadEnd(pr, p, undefined, lookup);\n return p;\n }\n pr = p;\n if (\"value\" in p) {\n if (p.status === \"success\") loadEnd(pr, p.value, undefined, lookup);else loadEnd(pr, undefined, undefined, lookup);\n return p;\n }\n scheduled = true;\n queueMicrotask(() => scheduled = false);\n runUpdates(() => {\n setState(resolved ? \"refreshing\" : \"pending\");\n trigger();\n }, false);\n return p.then(v => loadEnd(p, v, undefined, lookup), e => loadEnd(p, undefined, castError(e), lookup));\n }\n Object.defineProperties(read, {\n state: {\n get: () => state()\n },\n error: {\n get: () => error()\n },\n loading: {\n get() {\n const s = state();\n return s === \"pending\" || s === \"refreshing\";\n }\n },\n latest: {\n get() {\n if (!resolved) return read();\n const err = error();\n if (err && !pr) throw err;\n return value();\n }\n }\n });\n if (dynamic) createComputed(() => load(false));else load(false);\n return [read, {\n refetch: load,\n mutate: setValue\n }];\n}\nfunction createDeferred(source, options) {\n let t,\n timeout = options ? options.timeoutMs : undefined;\n const node = createComputation(() => {\n if (!t || !t.fn) t = requestCallback(() => setDeferred(() => node.value), timeout !== undefined ? {\n timeout\n } : undefined);\n return source();\n }, undefined, true);\n const [deferred, setDeferred] = createSignal(Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, options);\n updateComputation(node);\n setDeferred(() => Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value);\n return deferred;\n}\nfunction createSelector(source, fn = equalFn, options) {\n const subs = new Map();\n const node = createComputation(p => {\n const v = source();\n for (const [key, val] of subs.entries()) if (fn(key, v) !== fn(key, p)) {\n for (const c of val.values()) {\n c.state = STALE;\n if (c.pure) Updates.push(c);else Effects.push(c);\n }\n }\n return v;\n }, undefined, true, STALE);\n updateComputation(node);\n return key => {\n const listener = Listener;\n if (listener) {\n let l;\n if (l = subs.get(key)) l.add(listener);else subs.set(key, l = new Set([listener]));\n onCleanup(() => {\n l.delete(listener);\n !l.size && subs.delete(key);\n });\n }\n return fn(key, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value);\n };\n}\nfunction batch(fn) {\n return runUpdates(fn, false);\n}\nfunction untrack(fn) {\n if (!ExternalSourceConfig && Listener === null) return fn();\n const listener = Listener;\n Listener = null;\n try {\n if (ExternalSourceConfig) return ExternalSourceConfig.untrack(fn);\n return fn();\n } finally {\n Listener = listener;\n }\n}\nfunction on(deps, fn, options) {\n const isArray = Array.isArray(deps);\n let prevInput;\n let defer = options && options.defer;\n return prevValue => {\n let input;\n if (isArray) {\n input = Array(deps.length);\n for (let i = 0; i < deps.length; i++) input[i] = deps[i]();\n } else input = deps();\n if (defer) {\n defer = false;\n return prevValue;\n }\n const result = untrack(() => fn(input, prevInput, prevValue));\n prevInput = input;\n return result;\n };\n}\nfunction onMount(fn) {\n createEffect(() => untrack(fn));\n}\nfunction onCleanup(fn) {\n if (Owner === null) ;else if (Owner.cleanups === null) Owner.cleanups = [fn];else Owner.cleanups.push(fn);\n return fn;\n}\nfunction catchError(fn, handler) {\n ERROR || (ERROR = Symbol(\"error\"));\n Owner = createComputation(undefined, undefined, true);\n Owner.context = {\n ...Owner.context,\n [ERROR]: [handler]\n };\n if (Transition && Transition.running) Transition.sources.add(Owner);\n try {\n return fn();\n } catch (err) {\n handleError(err);\n } finally {\n Owner = Owner.owner;\n }\n}\nfunction getListener() {\n return Listener;\n}\nfunction getOwner() {\n return Owner;\n}\nfunction runWithOwner(o, fn) {\n const prev = Owner;\n const prevListener = Listener;\n Owner = o;\n Listener = null;\n try {\n return runUpdates(fn, true);\n } catch (err) {\n handleError(err);\n } finally {\n Owner = prev;\n Listener = prevListener;\n }\n}\nfunction enableScheduling(scheduler = requestCallback) {\n Scheduler = scheduler;\n}\nfunction startTransition(fn) {\n if (Transition && Transition.running) {\n fn();\n return Transition.done;\n }\n const l = Listener;\n const o = Owner;\n return Promise.resolve().then(() => {\n Listener = l;\n Owner = o;\n let t;\n if (Scheduler || SuspenseContext) {\n t = Transition || (Transition = {\n sources: new Set(),\n effects: [],\n promises: new Set(),\n disposed: new Set(),\n queue: new Set(),\n running: true\n });\n t.done || (t.done = new Promise(res => t.resolve = res));\n t.running = true;\n }\n runUpdates(fn, false);\n Listener = Owner = null;\n return t ? t.done : undefined;\n });\n}\nconst [transPending, setTransPending] = /*@__PURE__*/createSignal(false);\nfunction useTransition() {\n return [transPending, startTransition];\n}\nfunction resumeEffects(e) {\n Effects.push.apply(Effects, e);\n e.length = 0;\n}\nfunction createContext(defaultValue, options) {\n const id = Symbol(\"context\");\n return {\n id,\n Provider: createProvider(id),\n defaultValue\n };\n}\nfunction useContext(context) {\n return Owner && Owner.context && Owner.context[context.id] !== undefined ? Owner.context[context.id] : context.defaultValue;\n}\nfunction children(fn) {\n const children = createMemo(fn);\n const memo = createMemo(() => resolveChildren(children()));\n memo.toArray = () => {\n const c = memo();\n return Array.isArray(c) ? c : c != null ? [c] : [];\n };\n return memo;\n}\nlet SuspenseContext;\nfunction getSuspenseContext() {\n return SuspenseContext || (SuspenseContext = createContext());\n}\nfunction enableExternalSource(factory, untrack = fn => fn()) {\n if (ExternalSourceConfig) {\n const {\n factory: oldFactory,\n untrack: oldUntrack\n } = ExternalSourceConfig;\n ExternalSourceConfig = {\n factory: (fn, trigger) => {\n const oldSource = oldFactory(fn, trigger);\n const source = factory(x => oldSource.track(x), trigger);\n return {\n track: x => source.track(x),\n dispose() {\n source.dispose();\n oldSource.dispose();\n }\n };\n },\n untrack: fn => oldUntrack(() => untrack(fn))\n };\n } else {\n ExternalSourceConfig = {\n factory,\n untrack\n };\n }\n}\nfunction readSignal() {\n const runningTransition = Transition && Transition.running;\n if (this.sources && (runningTransition ? this.tState : this.state)) {\n if ((runningTransition ? this.tState : this.state) === STALE) updateComputation(this);else {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(this), false);\n Updates = updates;\n }\n }\n if (Listener) {\n const sSlot = this.observers ? this.observers.length : 0;\n if (!Listener.sources) {\n Listener.sources = [this];\n Listener.sourceSlots = [sSlot];\n } else {\n Listener.sources.push(this);\n Listener.sourceSlots.push(sSlot);\n }\n if (!this.observers) {\n this.observers = [Listener];\n this.observerSlots = [Listener.sources.length - 1];\n } else {\n this.observers.push(Listener);\n this.observerSlots.push(Listener.sources.length - 1);\n }\n }\n if (runningTransition && Transition.sources.has(this)) return this.tValue;\n return this.value;\n}\nfunction writeSignal(node, value, isComp) {\n let current = Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value;\n if (!node.comparator || !node.comparator(current, value)) {\n if (Transition) {\n const TransitionRunning = Transition.running;\n if (TransitionRunning || !isComp && Transition.sources.has(node)) {\n Transition.sources.add(node);\n node.tValue = value;\n }\n if (!TransitionRunning) node.value = value;\n } else node.value = value;\n if (node.observers && node.observers.length) {\n runUpdates(() => {\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n const TransitionRunning = Transition && Transition.running;\n if (TransitionRunning && Transition.disposed.has(o)) continue;\n if (TransitionRunning ? !o.tState : !o.state) {\n if (o.pure) Updates.push(o);else Effects.push(o);\n if (o.observers) markDownstream(o);\n }\n if (!TransitionRunning) o.state = STALE;else o.tState = STALE;\n }\n if (Updates.length > 10e5) {\n Updates = [];\n if (false) ;\n throw new Error();\n }\n }, false);\n }\n }\n return value;\n}\nfunction updateComputation(node) {\n if (!node.fn) return;\n cleanNode(node);\n const time = ExecCount;\n runComputation(node, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, time);\n if (Transition && !Transition.running && Transition.sources.has(node)) {\n queueMicrotask(() => {\n runUpdates(() => {\n Transition && (Transition.running = true);\n Listener = Owner = node;\n runComputation(node, node.tValue, time);\n Listener = Owner = null;\n }, false);\n });\n }\n}\nfunction runComputation(node, value, time) {\n let nextValue;\n const owner = Owner,\n listener = Listener;\n Listener = Owner = node;\n try {\n nextValue = node.fn(value);\n } catch (err) {\n if (node.pure) {\n if (Transition && Transition.running) {\n node.tState = STALE;\n node.tOwned && node.tOwned.forEach(cleanNode);\n node.tOwned = undefined;\n } else {\n node.state = STALE;\n node.owned && node.owned.forEach(cleanNode);\n node.owned = null;\n }\n }\n node.updatedAt = time + 1;\n return handleError(err);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n if (!node.updatedAt || node.updatedAt <= time) {\n if (node.updatedAt != null && \"observers\" in node) {\n writeSignal(node, nextValue, true);\n } else if (Transition && Transition.running && node.pure) {\n Transition.sources.add(node);\n node.tValue = nextValue;\n } else node.value = nextValue;\n node.updatedAt = time;\n }\n}\nfunction createComputation(fn, init, pure, state = STALE, options) {\n const c = {\n fn,\n state: state,\n updatedAt: null,\n owned: null,\n sources: null,\n sourceSlots: null,\n cleanups: null,\n value: init,\n owner: Owner,\n context: Owner ? Owner.context : null,\n pure\n };\n if (Transition && Transition.running) {\n c.state = 0;\n c.tState = state;\n }\n if (Owner === null) ;else if (Owner !== UNOWNED) {\n if (Transition && Transition.running && Owner.pure) {\n if (!Owner.tOwned) Owner.tOwned = [c];else Owner.tOwned.push(c);\n } else {\n if (!Owner.owned) Owner.owned = [c];else Owner.owned.push(c);\n }\n }\n if (ExternalSourceConfig && c.fn) {\n const [track, trigger] = createSignal(undefined, {\n equals: false\n });\n const ordinary = ExternalSourceConfig.factory(c.fn, trigger);\n onCleanup(() => ordinary.dispose());\n const triggerInTransition = () => startTransition(trigger).then(() => inTransition.dispose());\n const inTransition = ExternalSourceConfig.factory(c.fn, triggerInTransition);\n c.fn = x => {\n track();\n return Transition && Transition.running ? inTransition.track(x) : ordinary.track(x);\n };\n }\n return c;\n}\nfunction runTop(node) {\n const runningTransition = Transition && Transition.running;\n if ((runningTransition ? node.tState : node.state) === 0) return;\n if ((runningTransition ? node.tState : node.state) === PENDING) return lookUpstream(node);\n if (node.suspense && untrack(node.suspense.inFallback)) return node.suspense.effects.push(node);\n const ancestors = [node];\n while ((node = node.owner) && (!node.updatedAt || node.updatedAt < ExecCount)) {\n if (runningTransition && Transition.disposed.has(node)) return;\n if (runningTransition ? node.tState : node.state) ancestors.push(node);\n }\n for (let i = ancestors.length - 1; i >= 0; i--) {\n node = ancestors[i];\n if (runningTransition) {\n let top = node,\n prev = ancestors[i + 1];\n while ((top = top.owner) && top !== prev) {\n if (Transition.disposed.has(top)) return;\n }\n }\n if ((runningTransition ? node.tState : node.state) === STALE) {\n updateComputation(node);\n } else if ((runningTransition ? node.tState : node.state) === PENDING) {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(node, ancestors[0]), false);\n Updates = updates;\n }\n }\n}\nfunction runUpdates(fn, init) {\n if (Updates) return fn();\n let wait = false;\n if (!init) Updates = [];\n if (Effects) wait = true;else Effects = [];\n ExecCount++;\n try {\n const res = fn();\n completeUpdates(wait);\n return res;\n } catch (err) {\n if (!wait) Effects = null;\n Updates = null;\n handleError(err);\n }\n}\nfunction completeUpdates(wait) {\n if (Updates) {\n if (Scheduler && Transition && Transition.running) scheduleQueue(Updates);else runQueue(Updates);\n Updates = null;\n }\n if (wait) return;\n let res;\n if (Transition) {\n if (!Transition.promises.size && !Transition.queue.size) {\n const sources = Transition.sources;\n const disposed = Transition.disposed;\n Effects.push.apply(Effects, Transition.effects);\n res = Transition.resolve;\n for (const e of Effects) {\n \"tState\" in e && (e.state = e.tState);\n delete e.tState;\n }\n Transition = null;\n runUpdates(() => {\n for (const d of disposed) cleanNode(d);\n for (const v of sources) {\n v.value = v.tValue;\n if (v.owned) {\n for (let i = 0, len = v.owned.length; i < len; i++) cleanNode(v.owned[i]);\n }\n if (v.tOwned) v.owned = v.tOwned;\n delete v.tValue;\n delete v.tOwned;\n v.tState = 0;\n }\n setTransPending(false);\n }, false);\n } else if (Transition.running) {\n Transition.running = false;\n Transition.effects.push.apply(Transition.effects, Effects);\n Effects = null;\n setTransPending(true);\n return;\n }\n }\n const e = Effects;\n Effects = null;\n if (e.length) runUpdates(() => runEffects(e), false);\n if (res) res();\n}\nfunction runQueue(queue) {\n for (let i = 0; i < queue.length; i++) runTop(queue[i]);\n}\nfunction scheduleQueue(queue) {\n for (let i = 0; i < queue.length; i++) {\n const item = queue[i];\n const tasks = Transition.queue;\n if (!tasks.has(item)) {\n tasks.add(item);\n Scheduler(() => {\n tasks.delete(item);\n runUpdates(() => {\n Transition.running = true;\n runTop(item);\n }, false);\n Transition && (Transition.running = false);\n });\n }\n }\n}\nfunction runUserEffects(queue) {\n let i,\n userLength = 0;\n for (i = 0; i < queue.length; i++) {\n const e = queue[i];\n if (!e.user) runTop(e);else queue[userLength++] = e;\n }\n if (sharedConfig.context) {\n if (sharedConfig.count) {\n sharedConfig.effects || (sharedConfig.effects = []);\n sharedConfig.effects.push(...queue.slice(0, userLength));\n return;\n } else if (sharedConfig.effects) {\n queue = [...sharedConfig.effects, ...queue];\n userLength += sharedConfig.effects.length;\n delete sharedConfig.effects;\n }\n setHydrateContext();\n }\n for (i = 0; i < userLength; i++) runTop(queue[i]);\n}\nfunction lookUpstream(node, ignore) {\n const runningTransition = Transition && Transition.running;\n if (runningTransition) node.tState = 0;else node.state = 0;\n for (let i = 0; i < node.sources.length; i += 1) {\n const source = node.sources[i];\n if (source.sources) {\n const state = runningTransition ? source.tState : source.state;\n if (state === STALE) {\n if (source !== ignore && (!source.updatedAt || source.updatedAt < ExecCount)) runTop(source);\n } else if (state === PENDING) lookUpstream(source, ignore);\n }\n }\n}\nfunction markDownstream(node) {\n const runningTransition = Transition && Transition.running;\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n if (runningTransition ? !o.tState : !o.state) {\n if (runningTransition) o.tState = PENDING;else o.state = PENDING;\n if (o.pure) Updates.push(o);else Effects.push(o);\n o.observers && markDownstream(o);\n }\n }\n}\nfunction cleanNode(node) {\n let i;\n if (node.sources) {\n while (node.sources.length) {\n const source = node.sources.pop(),\n index = node.sourceSlots.pop(),\n obs = source.observers;\n if (obs && obs.length) {\n const n = obs.pop(),\n s = source.observerSlots.pop();\n if (index < obs.length) {\n n.sourceSlots[s] = index;\n obs[index] = n;\n source.observerSlots[index] = s;\n }\n }\n }\n }\n if (Transition && Transition.running && node.pure) {\n if (node.tOwned) {\n for (i = node.tOwned.length - 1; i >= 0; i--) cleanNode(node.tOwned[i]);\n delete node.tOwned;\n }\n reset(node, true);\n } else if (node.owned) {\n for (i = node.owned.length - 1; i >= 0; i--) cleanNode(node.owned[i]);\n node.owned = null;\n }\n if (node.cleanups) {\n for (i = node.cleanups.length - 1; i >= 0; i--) node.cleanups[i]();\n node.cleanups = null;\n }\n if (Transition && Transition.running) node.tState = 0;else node.state = 0;\n}\nfunction reset(node, top) {\n if (!top) {\n node.tState = 0;\n Transition.disposed.add(node);\n }\n if (node.owned) {\n for (let i = 0; i < node.owned.length; i++) reset(node.owned[i]);\n }\n}\nfunction castError(err) {\n if (err instanceof Error) return err;\n return new Error(typeof err === \"string\" ? err : \"Unknown error\", {\n cause: err\n });\n}\nfunction runErrors(err, fns, owner) {\n try {\n for (const f of fns) f(err);\n } catch (e) {\n handleError(e, owner && owner.owner || null);\n }\n}\nfunction handleError(err, owner = Owner) {\n const fns = ERROR && owner && owner.context && owner.context[ERROR];\n const error = castError(err);\n if (!fns) {\n console.error(\"solid error\", error);\n return;\n }\n if (Effects) Effects.push({\n fn() {\n runErrors(error, fns, owner);\n },\n state: STALE\n });else runErrors(error, fns, owner);\n}\nfunction resolveChildren(children) {\n if (typeof children === \"function\" && !children.length) return resolveChildren(children());\n if (Array.isArray(children)) {\n const results = [];\n for (let i = 0; i < children.length; i++) {\n const result = resolveChildren(children[i]);\n Array.isArray(result) ? results.push.apply(results, result) : results.push(result);\n }\n return results;\n }\n return children;\n}\nfunction createProvider(id, options) {\n return function provider(props) {\n let res;\n createRenderEffect(() => res = untrack(() => {\n Owner.context = {\n ...Owner.context,\n [id]: props.value\n };\n return children(() => props.children);\n }), undefined);\n return res;\n };\n}\nfunction onError(fn) {\n ERROR || (ERROR = Symbol(\"error\"));\n if (Owner === null) ;else if (Owner.context === null || !Owner.context[ERROR]) {\n Owner.context = {\n ...Owner.context,\n [ERROR]: [fn]\n };\n mutateContext(Owner, ERROR, [fn]);\n } else Owner.context[ERROR].push(fn);\n}\nfunction mutateContext(o, key, value) {\n if (o.owned) {\n for (let i = 0; i < o.owned.length; i++) {\n if (o.owned[i].context === o.context) mutateContext(o.owned[i], key, value);\n if (!o.owned[i].context) {\n o.owned[i].context = o.context;\n mutateContext(o.owned[i], key, value);\n } else if (!o.owned[i].context[key]) {\n o.owned[i].context[key] = value;\n mutateContext(o.owned[i], key, value);\n }\n }\n }\n}\n\nfunction observable(input) {\n return {\n subscribe(observer) {\n if (!(observer instanceof Object) || observer == null) {\n throw new TypeError(\"Expected the observer to be an object.\");\n }\n const handler = typeof observer === \"function\" ? observer : observer.next && observer.next.bind(observer);\n if (!handler) {\n return {\n unsubscribe() {}\n };\n }\n const dispose = createRoot(disposer => {\n createEffect(() => {\n const v = input();\n untrack(() => handler(v));\n });\n return disposer;\n });\n if (getOwner()) onCleanup(dispose);\n return {\n unsubscribe() {\n dispose();\n }\n };\n },\n [Symbol.observable || \"@@observable\"]() {\n return this;\n }\n };\n}\nfunction from(producer) {\n const [s, set] = createSignal(undefined, {\n equals: false\n });\n if (\"subscribe\" in producer) {\n const unsub = producer.subscribe(v => set(() => v));\n onCleanup(() => \"unsubscribe\" in unsub ? unsub.unsubscribe() : unsub());\n } else {\n const clean = producer(set);\n onCleanup(clean);\n }\n return s;\n}\n\nconst FALLBACK = Symbol(\"fallback\");\nfunction dispose(d) {\n for (let i = 0; i < d.length; i++) d[i]();\n}\nfunction mapArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n len = 0,\n indexes = mapFn.length > 1 ? [] : null;\n onCleanup(() => dispose(disposers));\n return () => {\n let newItems = list() || [],\n i,\n j;\n newItems[$TRACK];\n return untrack(() => {\n let newLen = newItems.length,\n newIndices,\n newIndicesNext,\n temp,\n tempdisposers,\n tempIndexes,\n start,\n end,\n newEnd,\n item;\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n indexes && (indexes = []);\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n }\n else if (len === 0) {\n mapped = new Array(newLen);\n for (j = 0; j < newLen; j++) {\n items[j] = newItems[j];\n mapped[j] = createRoot(mapper);\n }\n len = newLen;\n } else {\n temp = new Array(newLen);\n tempdisposers = new Array(newLen);\n indexes && (tempIndexes = new Array(newLen));\n for (start = 0, end = Math.min(len, newLen); start < end && items[start] === newItems[start]; start++);\n for (end = len - 1, newEnd = newLen - 1; end >= start && newEnd >= start && items[end] === newItems[newEnd]; end--, newEnd--) {\n temp[newEnd] = mapped[end];\n tempdisposers[newEnd] = disposers[end];\n indexes && (tempIndexes[newEnd] = indexes[end]);\n }\n newIndices = new Map();\n newIndicesNext = new Array(newEnd + 1);\n for (j = newEnd; j >= start; j--) {\n item = newItems[j];\n i = newIndices.get(item);\n newIndicesNext[j] = i === undefined ? -1 : i;\n newIndices.set(item, j);\n }\n for (i = start; i <= end; i++) {\n item = items[i];\n j = newIndices.get(item);\n if (j !== undefined && j !== -1) {\n temp[j] = mapped[i];\n tempdisposers[j] = disposers[i];\n indexes && (tempIndexes[j] = indexes[i]);\n j = newIndicesNext[j];\n newIndices.set(item, j);\n } else disposers[i]();\n }\n for (j = start; j < newLen; j++) {\n if (j in temp) {\n mapped[j] = temp[j];\n disposers[j] = tempdisposers[j];\n if (indexes) {\n indexes[j] = tempIndexes[j];\n indexes[j](j);\n }\n } else mapped[j] = createRoot(mapper);\n }\n mapped = mapped.slice(0, len = newLen);\n items = newItems.slice(0);\n }\n return mapped;\n });\n function mapper(disposer) {\n disposers[j] = disposer;\n if (indexes) {\n const [s, set] = createSignal(j);\n indexes[j] = set;\n return mapFn(newItems[j], s);\n }\n return mapFn(newItems[j]);\n }\n };\n}\nfunction indexArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n signals = [],\n len = 0,\n i;\n onCleanup(() => dispose(disposers));\n return () => {\n const newItems = list() || [];\n newItems[$TRACK];\n return untrack(() => {\n if (newItems.length === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n signals = [];\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n return mapped;\n }\n if (items[0] === FALLBACK) {\n disposers[0]();\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n }\n for (i = 0; i < newItems.length; i++) {\n if (i < items.length && items[i] !== newItems[i]) {\n signals[i](() => newItems[i]);\n } else if (i >= items.length) {\n mapped[i] = createRoot(mapper);\n }\n }\n for (; i < items.length; i++) {\n disposers[i]();\n }\n len = signals.length = disposers.length = newItems.length;\n items = newItems.slice(0);\n return mapped = mapped.slice(0, len);\n });\n function mapper(disposer) {\n disposers[i] = disposer;\n const [s, set] = createSignal(newItems[i]);\n signals[i] = set;\n return mapFn(s, i);\n }\n };\n}\n\nlet hydrationEnabled = false;\nfunction enableHydration() {\n hydrationEnabled = true;\n}\nfunction createComponent(Comp, props) {\n if (hydrationEnabled) {\n if (sharedConfig.context) {\n const c = sharedConfig.context;\n setHydrateContext(nextHydrateContext());\n const r = untrack(() => Comp(props || {}));\n setHydrateContext(c);\n return r;\n }\n }\n return untrack(() => Comp(props || {}));\n}\nfunction trueFn() {\n return true;\n}\nconst propTraps = {\n get(_, property, receiver) {\n if (property === $PROXY) return receiver;\n return _.get(property);\n },\n has(_, property) {\n if (property === $PROXY) return true;\n return _.has(property);\n },\n set: trueFn,\n deleteProperty: trueFn,\n getOwnPropertyDescriptor(_, property) {\n return {\n configurable: true,\n enumerable: true,\n get() {\n return _.get(property);\n },\n set: trueFn,\n deleteProperty: trueFn\n };\n },\n ownKeys(_) {\n return _.keys();\n }\n};\nfunction resolveSource(s) {\n return !(s = typeof s === \"function\" ? s() : s) ? {} : s;\n}\nfunction resolveSources() {\n for (let i = 0, length = this.length; i < length; ++i) {\n const v = this[i]();\n if (v !== undefined) return v;\n }\n}\nfunction mergeProps(...sources) {\n let proxy = false;\n for (let i = 0; i < sources.length; i++) {\n const s = sources[i];\n proxy = proxy || !!s && $PROXY in s;\n sources[i] = typeof s === \"function\" ? (proxy = true, createMemo(s)) : s;\n }\n if (proxy) {\n return new Proxy({\n get(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n const v = resolveSource(sources[i])[property];\n if (v !== undefined) return v;\n }\n },\n has(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n if (property in resolveSource(sources[i])) return true;\n }\n return false;\n },\n keys() {\n const keys = [];\n for (let i = 0; i < sources.length; i++) keys.push(...Object.keys(resolveSource(sources[i])));\n return [...new Set(keys)];\n }\n }, propTraps);\n }\n const sourcesMap = {};\n const defined = Object.create(null);\n for (let i = sources.length - 1; i >= 0; i--) {\n const source = sources[i];\n if (!source) continue;\n const sourceKeys = Object.getOwnPropertyNames(source);\n for (let i = sourceKeys.length - 1; i >= 0; i--) {\n const key = sourceKeys[i];\n if (key === \"__proto__\" || key === \"constructor\") continue;\n const desc = Object.getOwnPropertyDescriptor(source, key);\n if (!defined[key]) {\n defined[key] = desc.get ? {\n enumerable: true,\n configurable: true,\n get: resolveSources.bind(sourcesMap[key] = [desc.get.bind(source)])\n } : desc.value !== undefined ? desc : undefined;\n } else {\n const sources = sourcesMap[key];\n if (sources) {\n if (desc.get) sources.push(desc.get.bind(source));else if (desc.value !== undefined) sources.push(() => desc.value);\n }\n }\n }\n }\n const target = {};\n const definedKeys = Object.keys(defined);\n for (let i = definedKeys.length - 1; i >= 0; i--) {\n const key = definedKeys[i],\n desc = defined[key];\n if (desc && desc.get) Object.defineProperty(target, key, desc);else target[key] = desc ? desc.value : undefined;\n }\n return target;\n}\nfunction splitProps(props, ...keys) {\n if ($PROXY in props) {\n const blocked = new Set(keys.length > 1 ? keys.flat() : keys[0]);\n const res = keys.map(k => {\n return new Proxy({\n get(property) {\n return k.includes(property) ? props[property] : undefined;\n },\n has(property) {\n return k.includes(property) && property in props;\n },\n keys() {\n return k.filter(property => property in props);\n }\n }, propTraps);\n });\n res.push(new Proxy({\n get(property) {\n return blocked.has(property) ? undefined : props[property];\n },\n has(property) {\n return blocked.has(property) ? false : property in props;\n },\n keys() {\n return Object.keys(props).filter(k => !blocked.has(k));\n }\n }, propTraps));\n return res;\n }\n const otherObject = {};\n const objects = keys.map(() => ({}));\n for (const propName of Object.getOwnPropertyNames(props)) {\n const desc = Object.getOwnPropertyDescriptor(props, propName);\n const isDefaultDesc = !desc.get && !desc.set && desc.enumerable && desc.writable && desc.configurable;\n let blocked = false;\n let objectIndex = 0;\n for (const k of keys) {\n if (k.includes(propName)) {\n blocked = true;\n isDefaultDesc ? objects[objectIndex][propName] = desc.value : Object.defineProperty(objects[objectIndex], propName, desc);\n }\n ++objectIndex;\n }\n if (!blocked) {\n isDefaultDesc ? otherObject[propName] = desc.value : Object.defineProperty(otherObject, propName, desc);\n }\n }\n return [...objects, otherObject];\n}\nfunction lazy(fn) {\n let comp;\n let p;\n const wrap = props => {\n const ctx = sharedConfig.context;\n if (ctx) {\n const [s, set] = createSignal();\n sharedConfig.count || (sharedConfig.count = 0);\n sharedConfig.count++;\n (p || (p = fn())).then(mod => {\n setHydrateContext(ctx);\n sharedConfig.count--;\n set(() => mod.default);\n setHydrateContext();\n });\n comp = s;\n } else if (!comp) {\n const [s] = createResource(() => (p || (p = fn())).then(mod => mod.default));\n comp = s;\n }\n let Comp;\n return createMemo(() => (Comp = comp()) && untrack(() => {\n if (false) ;\n if (!ctx) return Comp(props);\n const c = sharedConfig.context;\n setHydrateContext(ctx);\n const r = Comp(props);\n setHydrateContext(c);\n return r;\n }));\n };\n wrap.preload = () => p || ((p = fn()).then(mod => comp = () => mod.default), p);\n return wrap;\n}\nlet counter = 0;\nfunction createUniqueId() {\n const ctx = sharedConfig.context;\n return ctx ? `${ctx.id}${ctx.count++}` : `cl-${counter++}`;\n}\n\nconst narrowedError = name => `Stale read from <${name}>.`;\nfunction For(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(mapArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Index(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(indexArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Show(props) {\n const keyed = props.keyed;\n const condition = createMemo(() => props.when, undefined, {\n equals: (a, b) => keyed ? a === b : !a === !b\n });\n return createMemo(() => {\n const c = condition();\n if (c) {\n const child = props.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn ? untrack(() => child(keyed ? c : () => {\n if (!untrack(condition)) throw narrowedError(\"Show\");\n return props.when;\n })) : child;\n }\n return props.fallback;\n }, undefined, undefined);\n}\nfunction Switch(props) {\n let keyed = false;\n const equals = (a, b) => (keyed ? a[1] === b[1] : !a[1] === !b[1]) && a[2] === b[2];\n const conditions = children(() => props.children),\n evalConditions = createMemo(() => {\n let conds = conditions();\n if (!Array.isArray(conds)) conds = [conds];\n for (let i = 0; i < conds.length; i++) {\n const c = conds[i].when;\n if (c) {\n keyed = !!conds[i].keyed;\n return [i, c, conds[i]];\n }\n }\n return [-1];\n }, undefined, {\n equals\n });\n return createMemo(() => {\n const [index, when, cond] = evalConditions();\n if (index < 0) return props.fallback;\n const c = cond.children;\n const fn = typeof c === \"function\" && c.length > 0;\n return fn ? untrack(() => c(keyed ? when : () => {\n if (untrack(evalConditions)[0] !== index) throw narrowedError(\"Match\");\n return cond.when;\n })) : c;\n }, undefined, undefined);\n}\nfunction Match(props) {\n return props;\n}\nlet Errors;\nfunction resetErrorBoundaries() {\n Errors && [...Errors].forEach(fn => fn());\n}\nfunction ErrorBoundary(props) {\n let err;\n if (sharedConfig.context && sharedConfig.load) err = sharedConfig.load(sharedConfig.context.id + sharedConfig.context.count);\n const [errored, setErrored] = createSignal(err, undefined);\n Errors || (Errors = new Set());\n Errors.add(setErrored);\n onCleanup(() => Errors.delete(setErrored));\n return createMemo(() => {\n let e;\n if (e = errored()) {\n const f = props.fallback;\n return typeof f === \"function\" && f.length ? untrack(() => f(e, () => setErrored())) : f;\n }\n return catchError(() => props.children, setErrored);\n }, undefined, undefined);\n}\n\nconst suspenseListEquals = (a, b) => a.showContent === b.showContent && a.showFallback === b.showFallback;\nconst SuspenseListContext = createContext();\nfunction SuspenseList(props) {\n let [wrapper, setWrapper] = createSignal(() => ({\n inFallback: false\n })),\n show;\n const listContext = useContext(SuspenseListContext);\n const [registry, setRegistry] = createSignal([]);\n if (listContext) {\n show = listContext.register(createMemo(() => wrapper()().inFallback));\n }\n const resolved = createMemo(prev => {\n const reveal = props.revealOrder,\n tail = props.tail,\n {\n showContent = true,\n showFallback = true\n } = show ? show() : {},\n reg = registry(),\n reverse = reveal === \"backwards\";\n if (reveal === \"together\") {\n const all = reg.every(inFallback => !inFallback());\n const res = reg.map(() => ({\n showContent: all && showContent,\n showFallback\n }));\n res.inFallback = !all;\n return res;\n }\n let stop = false;\n let inFallback = prev.inFallback;\n const res = [];\n for (let i = 0, len = reg.length; i < len; i++) {\n const n = reverse ? len - i - 1 : i,\n s = reg[n]();\n if (!stop && !s) {\n res[n] = {\n showContent,\n showFallback\n };\n } else {\n const next = !stop;\n if (next) inFallback = true;\n res[n] = {\n showContent: next,\n showFallback: !tail || next && tail === \"collapsed\" ? showFallback : false\n };\n stop = true;\n }\n }\n if (!stop) inFallback = false;\n res.inFallback = inFallback;\n return res;\n }, {\n inFallback: false\n });\n setWrapper(() => resolved);\n return createComponent(SuspenseListContext.Provider, {\n value: {\n register: inFallback => {\n let index;\n setRegistry(registry => {\n index = registry.length;\n return [...registry, inFallback];\n });\n return createMemo(() => resolved()[index], undefined, {\n equals: suspenseListEquals\n });\n }\n },\n get children() {\n return props.children;\n }\n });\n}\nfunction Suspense(props) {\n let counter = 0,\n show,\n ctx,\n p,\n flicker,\n error;\n const [inFallback, setFallback] = createSignal(false),\n SuspenseContext = getSuspenseContext(),\n store = {\n increment: () => {\n if (++counter === 1) setFallback(true);\n },\n decrement: () => {\n if (--counter === 0) setFallback(false);\n },\n inFallback,\n effects: [],\n resolved: false\n },\n owner = getOwner();\n if (sharedConfig.context && sharedConfig.load) {\n const key = sharedConfig.context.id + sharedConfig.context.count;\n let ref = sharedConfig.load(key);\n if (ref) {\n if (typeof ref !== \"object\" || ref.status !== \"success\") p = ref;else sharedConfig.gather(key);\n }\n if (p && p !== \"$$f\") {\n const [s, set] = createSignal(undefined, {\n equals: false\n });\n flicker = s;\n p.then(() => {\n if (sharedConfig.done) return set();\n sharedConfig.gather(key);\n setHydrateContext(ctx);\n set();\n setHydrateContext();\n }, err => {\n error = err;\n set();\n });\n }\n }\n const listContext = useContext(SuspenseListContext);\n if (listContext) show = listContext.register(store.inFallback);\n let dispose;\n onCleanup(() => dispose && dispose());\n return createComponent(SuspenseContext.Provider, {\n value: store,\n get children() {\n return createMemo(() => {\n if (error) throw error;\n ctx = sharedConfig.context;\n if (flicker) {\n flicker();\n return flicker = undefined;\n }\n if (ctx && p === \"$$f\") setHydrateContext();\n const rendered = createMemo(() => props.children);\n return createMemo(prev => {\n const inFallback = store.inFallback(),\n {\n showContent = true,\n showFallback = true\n } = show ? show() : {};\n if ((!inFallback || p && p !== \"$$f\") && showContent) {\n store.resolved = true;\n dispose && dispose();\n dispose = ctx = p = undefined;\n resumeEffects(store.effects);\n return rendered();\n }\n if (!showFallback) return;\n if (dispose) return prev;\n return createRoot(disposer => {\n dispose = disposer;\n if (ctx) {\n setHydrateContext({\n id: ctx.id + \"f\",\n count: 0\n });\n ctx = undefined;\n }\n return props.fallback;\n }, owner);\n });\n });\n }\n });\n}\n\nconst DEV = undefined;\n\nexport { $DEVCOMP, $PROXY, $TRACK, DEV, ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, batch, cancelCallback, catchError, children, createComponent, createComputed, createContext, createDeferred, createEffect, createMemo, createReaction, createRenderEffect, createResource, createRoot, createSelector, createSignal, createUniqueId, enableExternalSource, enableHydration, enableScheduling, equalFn, from, getListener, getOwner, indexArray, lazy, mapArray, mergeProps, observable, on, onCleanup, onError, onMount, requestCallback, resetErrorBoundaries, runWithOwner, sharedConfig, splitProps, startTransition, untrack, useContext, useTransition };\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type lang from '../lang';\nimport type langSign from '../langSign';\nimport type {State} from '../config/state';\nimport DEBUG, {MOUNT_CLASS_TO} from '../config/debug';\nimport {HelpCountriesList, HelpCountry, LangPackDifference, LangPackString} from '../layer';\nimport stateStorage from './stateStorage';\nimport App from '../config/app';\nimport rootScope from './rootScope';\nimport {IS_MOBILE} from '../environment/userAgent';\nimport deepEqual from '../helpers/object/deepEqual';\nimport safeAssign from '../helpers/object/safeAssign';\nimport capitalizeFirstLetter from '../helpers/string/capitalizeFirstLetter';\nimport matchUrlProtocol from './richTextProcessor/matchUrlProtocol';\nimport wrapUrl from './richTextProcessor/wrapUrl';\nimport {setDirection} from '../helpers/dom/setInnerHTML';\nimport setBlankToAnchor from './richTextProcessor/setBlankToAnchor';\nimport {createSignal} from 'solid-js';\n\nexport const langPack: {[actionType: string]: LangPackKey} = {\n 'messageActionChatCreate': 'ActionCreateGroup',\n 'messageActionChatCreateYou': 'ActionYouCreateGroup',\n 'messageActionChatEditTitle': 'ActionChangedTitle',\n 'messageActionChatEditPhoto': 'ActionChangedPhoto',\n 'messageActionChatEditVideo': 'ActionChangedVideo',\n 'messageActionChatDeletePhoto': 'ActionRemovedPhoto',\n 'messageActionChatReturn': 'ActionAddUserSelf',\n 'messageActionChatReturnYou': 'ActionAddUserSelfYou',\n 'messageActionChatJoined': 'ActionAddUserSelfMega',\n 'messageActionChatJoinedYou': 'ChannelMegaJoined',\n 'messageActionChatAddUser': 'ActionAddUser',\n 'messageActionChatAddUsers': 'ActionAddUser',\n 'messageActionChatLeave': 'ActionLeftUser',\n 'messageActionChatLeaveYou': 'YouLeft',\n 'messageActionChatDeleteUser': 'ActionKickUser',\n 'messageActionChatJoinedByLink': 'ActionInviteUser',\n 'messageActionPinMessage': 'Chat.Service.Group.UpdatedPinnedMessage',\n 'messageActionContactSignUp': 'Chat.Service.PeerJoinedTelegram',\n 'messageActionChannelCreate': 'ActionCreateChannel',\n 'messageActionChannelEditTitle': 'Chat.Service.Channel.UpdatedTitle',\n 'messageActionChannelEditPhoto': 'Chat.Service.Channel.UpdatedPhoto',\n 'messageActionChannelEditVideo': 'Chat.Service.Channel.UpdatedVideo',\n 'messageActionChannelDeletePhoto': 'Chat.Service.Channel.RemovedPhoto',\n 'messageActionHistoryClear': 'HistoryCleared',\n 'messageActionDiscussionStarted': 'DiscussionStarted',\n 'messageActionGiveawayLaunch': 'BoostingGiveawayJustStarted',\n 'messageActionChannelJoined': 'ChannelJoined',\n\n 'messageActionChannelMigrateFrom': 'ActionMigrateFromGroup',\n\n 'messageActionPhoneCall.video_in_ok': 'ChatList.Service.VideoCall.incoming',\n 'messageActionPhoneCall.video_out_ok': 'ChatList.Service.VideoCall.outgoing',\n 'messageActionPhoneCall.video_missed': 'ChatList.Service.VideoCall.Missed',\n 'messageActionPhoneCall.video_cancelled': 'ChatList.Service.VideoCall.Cancelled',\n 'messageActionPhoneCall.in_ok': 'ChatList.Service.Call.incoming',\n 'messageActionPhoneCall.out_ok': 'ChatList.Service.Call.outgoing',\n 'messageActionPhoneCall.missed': 'ChatList.Service.Call.Missed',\n 'messageActionPhoneCall.cancelled': 'ChatList.Service.Call.Cancelled',\n\n 'messageActionGroupCall.started': 'Chat.Service.VoiceChatStarted.Channel',\n 'messageActionGroupCall.started_by': 'Chat.Service.VoiceChatStarted',\n 'messageActionGroupCall.started_byYou': 'Chat.Service.VoiceChatStartedYou',\n 'messageActionGroupCall.ended': 'Chat.Service.VoiceChatFinished.Channel',\n 'messageActionGroupCall.ended_by': 'Chat.Service.VoiceChatFinished',\n 'messageActionGroupCall.ended_byYou': 'Chat.Service.VoiceChatFinishedYou',\n\n 'messageActionBotAllowed': 'Chat.Service.BotPermissionAllowed'\n};\n\nexport type LangPackKey = /* string | */keyof typeof lang | keyof typeof langSign;\n\nexport type FormatterArgument = string | number | Node | FormatterArgument[];\nexport type FormatterArguments = FormatterArgument[];\n\nexport const UNSUPPORTED_LANG_PACK_KEY: LangPackKey = IS_MOBILE ? 'Message.Unsupported.Mobile' : 'Message.Unsupported.Desktop';\n\nnamespace I18n {\n export const strings: Map = new Map();\n export const countriesList: HelpCountry[] = [];\n let pluralRules: Intl.PluralRules;\n\n let cacheLangPackPromise: Promise;\n export let lastRequestedLangCode: string;\n export let lastRequestedNormalizedLangCode: string;\n export let lastAppliedLangCode: string;\n export let requestedServerLanguage = false;\n export let timeFormat: State['settings']['timeFormat'];\n export let isRTL = false;\n\n export const [langCodeNormalized, setLangCodeNormalized] = createSignal();\n\n export function setRTL(rtl: boolean) {\n isRTL = rtl;\n }\n\n function setLangCode(langCode: string) {\n lastRequestedLangCode = langCode;\n lastRequestedNormalizedLangCode = langCode.split('-')[0];\n setLangCodeNormalized(lastRequestedNormalizedLangCode.split('-')[0] as any);\n }\n\n export function getCacheLangPack(): Promise {\n if(cacheLangPackPromise) return cacheLangPackPromise;\n return cacheLangPackPromise = Promise.all([\n stateStorage.get('langPack') as Promise,\n polyfillPromise\n ]).then(([langPack]) => {\n if(!langPack/* || true */) {\n return loadLocalLangPack();\n } else if(DEBUG && false) {\n return getLangPack(langPack.lang_code);\n }/* else if(langPack.appVersion !== App.langPackVersion) {\n return getLangPack(langPack.lang_code);\n } */\n\n if(!lastRequestedLangCode) {\n setLangCode(langPack.lang_code);\n }\n\n applyLangPack(langPack);\n return langPack;\n }).finally(() => {\n cacheLangPackPromise = undefined;\n });\n }\n\n function updateAmPm() {\n if(timeFormat === 'h12') {\n try {\n const dateTimeFormat = getDateTimeFormat({hour: 'numeric', minute: 'numeric', hour12: true});\n const date = new Date();\n date.setHours(0);\n const amText = dateTimeFormat.format(date);\n amPmCache.am = amText.split(/\\s/)[1];\n date.setHours(12);\n const pmText = dateTimeFormat.format(date);\n amPmCache.pm = pmText.split(/\\s/)[1];\n } catch(err) {\n console.error('cannot get am/pm', err);\n amPmCache = {am: 'AM', pm: 'PM'};\n }\n }\n }\n\n export function setTimeFormat(\n format: State['settings']['timeFormat'],\n haveToUpdate = !!timeFormat && timeFormat !== format\n ) {\n timeFormat = format;\n\n updateAmPm();\n\n if(haveToUpdate) {\n cachedDateTimeFormats.clear();\n const elements = Array.from(document.querySelectorAll(`.i18n`)) as HTMLElement[];\n elements.forEach((element) => {\n const instance = weakMap.get(element);\n\n if(instance instanceof IntlDateElement) {\n instance.update();\n }\n });\n }\n }\n\n export function loadLocalLangPack() {\n const defaultCode = App.langPackCode;\n setLangCode(defaultCode);\n return Promise.all([\n import('../lang'),\n import('../langSign'),\n import('../countries')\n ]).then(([lang, langSign, countries]) => {\n const strings: LangPackString[] = [];\n formatLocalStrings(lang.default, strings);\n formatLocalStrings(langSign.default, strings);\n\n const langPack: LangPackDifference = {\n _: 'langPackDifference',\n from_version: 0,\n lang_code: defaultCode,\n strings,\n version: 0,\n local: true,\n countries: countries.default\n };\n return saveLangPack(langPack);\n });\n }\n\n export function loadLangPack(langCode: string, web?: boolean) {\n web = true;\n requestedServerLanguage = true;\n const managers = rootScope.managers;\n return Promise.all([\n managers.apiManager.invokeApiCacheable('langpack.getLangPack', {\n lang_code: langCode,\n lang_pack: web ? 'web' : App.langPack\n }),\n !web && managers.apiManager.invokeApiCacheable('langpack.getLangPack', {\n lang_code: langCode,\n lang_pack: 'android'\n }),\n import('../lang'),\n import('../langSign'),\n managers.apiManager.invokeApiCacheable('help.getCountriesList', {\n lang_code: langCode,\n hash: 0\n }) as Promise,\n polyfillPromise\n ]);\n }\n\n export function getStrings(langCode: string, strings: string[]) {\n return rootScope.managers.apiManager.invokeApi('langpack.getStrings', {\n lang_pack: App.langPack,\n lang_code: langCode,\n keys: strings\n });\n }\n\n export function formatLocalStrings(strings: any, pushTo: LangPackString[] = []) {\n for(const i in strings) {\n // @ts-ignore\n const v = strings[i];\n if(typeof(v) === 'string') {\n pushTo.push({\n _: 'langPackString',\n key: i,\n value: v\n });\n } else {\n pushTo.push({\n _: 'langPackStringPluralized',\n key: i,\n ...v\n });\n }\n }\n\n return pushTo;\n }\n\n export function getLangPack(langCode: string, web?: boolean) {\n setLangCode(langCode);\n return loadLangPack(langCode, web).then(([langPack1, langPack2, localLangPack1, localLangPack2, countries, _]) => {\n let strings: LangPackString[] = [];\n\n [localLangPack1, localLangPack2].forEach((l) => {\n formatLocalStrings(l.default as any, strings);\n });\n\n strings = strings.concat(...[langPack1.strings, langPack2.strings].filter(Boolean));\n\n langPack1.strings = strings;\n langPack1.countries = countries;\n return saveLangPack(langPack1);\n });\n }\n\n export function saveLangPack(langPack: LangPackDifference) {\n langPack.appVersion = App.langPackVersion;\n\n return stateStorage.set({langPack}).then(() => {\n applyLangPack(langPack);\n return langPack;\n });\n }\n\n export const polyfillPromise = (function checkIfPolyfillNeeded() {\n if(typeof(Intl) !== 'undefined' && typeof(Intl.PluralRules) !== 'undefined'/* && false */) {\n return Promise.resolve();\n } else {\n return import('./pluralPolyfill').then((_Intl) => {\n (window as any).Intl = Object.assign(typeof(Intl) !== 'undefined' ? Intl : {}, _Intl.default);\n });\n }\n })();\n\n export function applyLangPack(langPack: LangPackDifference) {\n const currentLangCode = lastRequestedLangCode;\n if(langPack.lang_code !== currentLangCode) {\n return;\n }\n\n try {\n pluralRules = new Intl.PluralRules(lastRequestedNormalizedLangCode);\n } catch(err) {\n console.error('pluralRules error', err);\n pluralRules = new Intl.PluralRules(lastRequestedNormalizedLangCode.split('-', 1)[0]);\n }\n\n try {\n pluralRules = new Intl.PluralRules(langPack.lang_code);\n } catch(err) {\n console.error('pluralRules error', err);\n pluralRules = new Intl.PluralRules(langPack.lang_code.split('-', 1)[0]);\n }\n\n strings.clear();\n\n for(const string of langPack.strings) {\n strings.set(string.key as LangPackKey, string);\n }\n\n if(langPack.countries) {\n countriesList.length = 0;\n countriesList.push(...langPack.countries.countries);\n\n langPack.countries.countries.forEach((country) => {\n if(country.name) {\n const langPackKey: any = country.default_name;\n strings.set(langPackKey, {\n _: 'langPackString',\n key: langPackKey,\n value: country.name\n });\n }\n });\n }\n\n if(lastAppliedLangCode !== currentLangCode) {\n if(lastAppliedLangCode && rootScope.myId) {\n rootScope.managers.appReactionsManager.resetAvailableReactions();\n rootScope.managers.appUsersManager.indexMyself();\n rootScope.managers.dialogsStorage.indexMyDialog();\n }\n\n lastAppliedLangCode = currentLangCode;\n cachedDateTimeFormats.clear();\n updateAmPm();\n rootScope.dispatchEvent('language_change', currentLangCode);\n }\n\n const elements = Array.from(document.querySelectorAll(`.i18n`)) as HTMLElement[];\n elements.forEach((element) => {\n const instance = weakMap.get(element);\n\n if(instance) {\n instance.update();\n }\n });\n }\n\n function pushNextArgument(out: ReturnType, args: FormatterArguments, indexHolder: {i: number}, i?: number) {\n const arg = args[i === undefined ? indexHolder.i++ : i];\n if(Array.isArray(arg)) {\n out.push(...arg as any);\n } else {\n out.push(arg);\n }\n }\n\n export function superFormatter(input: string, args?: FormatterArguments, indexHolder?: {i: number}): Exclude[] {\n if(!indexHolder) { // set starting index for arguments without order\n indexHolder = {i: 0};\n const indexes = input.match(/(%|un)\\d+/g);\n if(indexes?.length) {\n indexHolder.i = Math.max(...indexes.map((str) => +str.replace(/\\D/g, '')));\n }\n }\n\n const out: ReturnType = [];\n const regExp = /(\\*\\*|__)(.+?)\\1|(\\n)|(\\[.+?\\]\\(.*?\\))|un\\d|%\\d\\$.|%\\S/g;\n\n let lastIndex = 0;\n input.replace(regExp, (match, p1: any, p2: any, p3: any, p4: string, offset: number, string: string) => {\n // console.table({match, p1, p2, offset, string});\n\n if(offset > lastIndex) {\n out.push(string.slice(lastIndex, offset));\n }\n\n if(p1) {\n // offset += p1.length;\n let element: HTMLElement;\n switch(p1) {\n case '**': {\n element = document.createElement('b');\n break;\n }\n\n case '__': {\n element = document.createElement('i');\n break;\n }\n }\n\n element.append(...superFormatter(p2, args, indexHolder) as any);\n out.push(element);\n } else if(p3) {\n out.push(document.createElement('br'));\n } else if(p4) {\n const idx = p4.lastIndexOf(']');\n const text = p4.slice(1, idx);\n\n const url = p4.slice(idx + 2, p4.length - 1);\n let a: HTMLAnchorElement;\n if(url && matchUrlProtocol(url)) {\n a = document.createElement('a');\n const wrappedUrl = wrapUrl(url);\n a.href = wrappedUrl.url;\n if(wrappedUrl.onclick) a.setAttribute('onclick', wrappedUrl.onclick + '(this)');\n setBlankToAnchor(a);\n } else {\n a = args[indexHolder.i++] as HTMLAnchorElement;\n\n if(a instanceof DocumentFragment) { // right after wrapRichText\n a = a.firstChild as any;\n }\n\n if(typeof(a) !== 'string') {\n a.textContent = ''; // reset content\n }\n }\n\n const formatted = superFormatter(text, args, indexHolder) as any;\n if(typeof(a) === 'string') {\n out.push(...formatted);\n } else {\n a.append(...formatted);\n out.push(a);\n }\n } else if(args) {\n const index = match.replace(/\\D/g, '');\n pushNextArgument(\n out,\n args,\n indexHolder,\n !index || Number.isNaN(+index) ? undefined : Math.min(args.length - 1, +index - 1)\n );\n }\n\n lastIndex = offset + match.length;\n return '';\n });\n\n if(lastIndex !== input.length) {\n out.push(input.slice(lastIndex));\n }\n\n return out;\n }\n\n export function format(key: LangPackKey, plain: true, args?: FormatterArguments): string;\n export function format(key: LangPackKey, plain?: false, args?: FormatterArguments): ReturnType;\n export function format(key: LangPackKey, plain = false, args?: FormatterArguments): ReturnType | string {\n const str = strings.get(key);\n let input: string;\n if(str) {\n if(str._ === 'langPackStringPluralized' && args?.length) {\n let v = args[0] as number | string;\n if(typeof(v) === 'string') v = +v.replace(/\\D/g, '');\n const s = pluralRules.select(v);\n // @ts-ignore\n input = str[s + '_value'] || str['other_value'];\n } else if(str._ === 'langPackString') {\n input = str.value;\n } else {\n // input = '[' + key + ']';\n input = key;\n }\n } else {\n // input = '[' + key + ']';\n input = key;\n }\n\n const result = superFormatter(input, args);\n if(plain) { // * let's try a hack now... (don't want to replace []() entity)\n return result.map((item) => item instanceof Node ? item.textContent : item).join('');\n } else {\n return result;\n }\n\n /* if(plain) {\n if(args?.length) {\n const regExp = /un\\d|%\\d\\$.|%./g;\n let i = 0;\n input = input.replace(regExp, (match, offset, string) => {\n return '' + args[i++];\n });\n }\n\n return input;\n } else {\n return superFormatter(input, args);\n } */\n }\n\n export const weakMap: WeakMap> = new WeakMap();\n\n export type IntlElementBaseOptions = {\n element?: HTMLElement,\n property?: 'innerText' | 'innerHTML' | 'placeholder' | 'textContent',\n };\n\n abstract class IntlElementBase {\n public element: IntlElementBaseOptions['element'];\n public property: IntlElementBaseOptions['property'];\n\n constructor(options?: Options) {\n this.element = options?.element || document.createElement('span');\n this.element.classList.add('i18n');\n\n this.property = options?.property;\n\n weakMap.set(this.element, this);\n }\n\n abstract update(options?: Options): void;\n }\n\n export type IntlElementOptions = IntlElementBaseOptions & {\n key?: LangPackKey,\n args?: FormatterArguments\n };\n export class IntlElement extends IntlElementBase {\n public key: IntlElementOptions['key'];\n public args: IntlElementOptions['args'];\n\n constructor(options: IntlElementOptions = {}) {\n super({...options, property: options.property ?? 'innerHTML'});\n\n if(options?.key) {\n this.update(options);\n }\n }\n\n public update(options?: IntlElementOptions) {\n safeAssign(this, options);\n\n if(this.property === 'innerHTML') {\n this.element.replaceChildren(...format(this.key, false, this.args) as any);\n if(this.args?.length) {\n this.element.normalize();\n }\n } else {\n // @ts-ignore\n const v = this.element[this.property];\n const formatted = format(this.key, true, this.args);\n\n // * hasOwnProperty won't work here\n if(v === undefined) this.element.dataset[this.property] = formatted;\n else (this.element as HTMLInputElement)[this.property] = formatted;\n }\n }\n\n public compareAndUpdate(options?: IntlElementOptions) {\n if(this.key === options.key && deepEqual(this.args, options.args)) {\n return;\n }\n\n return this.update(options);\n }\n }\n\n const cachedDateTimeFormats: Map = new Map();\n export function getDateTimeFormat(options: Intl.DateTimeFormatOptions = {}) {\n const json = JSON.stringify(options);\n let dateTimeFormat = cachedDateTimeFormats.get(json);\n if(!dateTimeFormat) {\n dateTimeFormat = new Intl.DateTimeFormat(lastRequestedNormalizedLangCode + '-u-hc-' + timeFormat, options);\n cachedDateTimeFormats.set(json, dateTimeFormat);\n }\n\n return dateTimeFormat;\n }\n\n export let amPmCache = {am: 'AM', pm: 'PM'};\n export type IntlDateElementOptions = IntlElementBaseOptions & {\n date?: Date,\n options: Intl.DateTimeFormatOptions\n };\n export class IntlDateElement extends IntlElementBase {\n public date: IntlDateElementOptions['date'];\n public options: IntlDateElementOptions['options'];\n\n constructor(options: IntlDateElementOptions) {\n super({...options, property: options.property ?? 'textContent'});\n setDirection(this.element);\n\n if(options?.date) {\n this.update(options);\n }\n }\n\n public update(options?: IntlDateElementOptions) {\n safeAssign(this, options);\n\n let text: string;\n if(this.options.hour && this.options.minute && Object.keys(this.options).length === 2/* && false */) {\n const hours = this.date.getHours();\n text = ('0' + (timeFormat === 'h12' ? (hours % 12) || 12 : hours)).slice(-2) + ':' + ('0' + this.date.getMinutes()).slice(-2);\n // if(this.options.second) {\n // text += ':' + ('0' + this.date.getSeconds()).slice(-2);\n // }\n\n if(timeFormat === 'h12') {\n text += ' ' + (hours < 12 ? amPmCache.am : amPmCache.pm);\n }\n } else {\n // * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle#adding_an_hour_cycle_via_the_locale_string\n const dateTimeFormat = getDateTimeFormat(this.options);\n text = capitalizeFirstLetter(dateTimeFormat.format(this.date));\n }\n\n (this.element as any)[this.property] = text;\n }\n }\n\n export function i18n(key: LangPackKey, args?: FormatterArguments) {\n return new IntlElement({key, args}).element;\n }\n\n export function i18n_(options: IntlElementOptions) {\n return new IntlElement(options).element;\n }\n\n export function _i18n(element: HTMLElement, key: LangPackKey, args?: FormatterArguments, property?: IntlElementOptions['property']) {\n return new IntlElement({element, key, args, property}).element;\n }\n}\n\nexport {I18n};\nexport default I18n;\n\nconst i18n = I18n.i18n;\nexport {i18n};\n\nconst i18n_ = I18n.i18n_;\nexport {i18n_};\n\nconst _i18n = I18n._i18n;\nexport {_i18n};\n\nexport function joinElementsWith>(\n elements: T[],\n joiner: T | string | ((isLast: boolean) => T)\n): T[] {\n const arr = elements.slice(0, 1) as T[];\n for(let i = 1; i < elements.length; ++i) {\n const isLast = (elements.length - 1) === i;\n arr.push(typeof(joiner) === 'function' ? (joiner as any)(isLast) : joiner);\n arr.push(elements[i]);\n }\n\n return arr;\n}\n\n\nexport function join(elements: (Node | string)[], useLast: boolean, plain: true): string;\nexport function join(elements: (Node | string)[], useLast?: boolean, plain?: false): (string | Node)[];\nexport function join(elements: (Node | string)[], useLast: boolean, plain: boolean): string | (string | Node)[];\nexport function join(elements: (Node | string)[], useLast = true, plain?: boolean): string | (string | Node)[] {\n const joined = joinElementsWith(elements, (isLast) => {\n const langPackKey: LangPackKey = isLast && useLast ? 'AutoDownloadSettings.LastDelimeter' : 'AutoDownloadSettings.Delimeter';\n return plain ? I18n.format(langPackKey, true) : i18n(langPackKey);\n });\n\n return plain ? joined.join('') : joined;\n}\n\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.I18n = I18n);\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MOUNT_CLASS_TO} from '../config/debug';\nimport I18n, {i18n} from '../lib/langPack';\nimport capitalizeFirstLetter from './string/capitalizeFirstLetter';\n\nexport const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\nexport const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\nexport const monthsLocalized = months.slice();\nexport const daysLocalized = days.slice();\n\nexport const ONE_DAY = 86400;\nexport const ONE_DAY_MINUTES = 1440;\nexport const ONE_WEEK = 604800;\nexport const ONE_WEEK_MINUTES = 10080;\n\nexport function getWeekDays() {\n const dateTimeFormat = I18n.getDateTimeFormat({weekday: 'long'});\n const date = new Date(Date.UTC(2017, 0, 2));\n const out: string[] = [];\n for(let i = 0; i < 7; ++i) {\n out.push(capitalizeFirstLetter(dateTimeFormat.format(date)));\n date.setDate(date.getDate() + 1);\n }\n return out;\n}\n\nexport function getMonths() {\n const dateTimeFormat = I18n.getDateTimeFormat({month: 'long'});\n const date = new Date(Date.UTC(2017, 0, 1));\n const out: string[] = [];\n for(let i = 0; i < 12; ++i) {\n out.push(capitalizeFirstLetter(dateTimeFormat.format(date)));\n date.setMonth(date.getMonth() + 1);\n }\n return out;\n}\n\nexport function fillLocalizedDates() {\n monthsLocalized.splice(0, monthsLocalized.length, ...getMonths());\n daysLocalized.splice(0, daysLocalized.length, ...getWeekDays());\n}\n\n// https://stackoverflow.com/a/6117889\nexport const getWeekNumber = (date: Date) => {\n const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n const dayNum = d.getUTCDay() || 7;\n d.setUTCDate(d.getUTCDate() + 4 - dayNum);\n const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\n return Math.ceil((((d.getTime() - yearStart.getTime()) / ONE_DAY) + 1) / 7);\n};\n\nexport function formatDate(date: Date, today?: Date) {\n if(!today) {\n today = new Date();\n today.setHours(0, 0, 0, 0);\n }\n\n const options: Intl.DateTimeFormatOptions = {\n day: 'numeric',\n month: 'long'\n };\n\n if(date.getFullYear() !== today.getFullYear()) {\n options.year = 'numeric';\n }\n\n return new I18n.IntlDateElement({\n date,\n options\n }).element;\n}\n\nexport function formatDateAccordingToTodayNew(time: Date) {\n const today = new Date();\n const now = today.getTime() / 1000 | 0;\n const timestamp = time.getTime() / 1000 | 0;\n\n const options: Intl.DateTimeFormatOptions = {};\n if((now - timestamp) < ONE_DAY && today.getDate() === time.getDate()) { // if the same day\n options.hour = options.minute = '2-digit';\n } else if(today.getFullYear() !== time.getFullYear()) { // different year\n options.year = options.day = 'numeric';\n options.month = '2-digit';\n } else if((now - timestamp) < (ONE_DAY * 7) && getWeekNumber(today) === getWeekNumber(time)) { // current week\n options.weekday = 'short';\n } else { // same year\n options.month = 'short';\n options.day = 'numeric';\n }\n\n return new I18n.IntlDateElement({\n date: time,\n options\n }).element;\n}\n\nconst formatTimeOptions: Intl.DateTimeFormatOptions = {\n hour: '2-digit',\n minute: '2-digit'\n};\n\nexport function formatFullSentTimeRaw(timestamp: number, options: {\n capitalize?: boolean\n noToday?: boolean,\n combined?: boolean\n} = {}) {\n if(options.combined) {\n options.noToday = true;\n }\n\n const date = new Date();\n const time = new Date(timestamp * 1000);\n const now = date.getTime() / 1000 | 0;\n const diff = now - timestamp;\n\n const timeEl = options.combined ? undefined : formatTime(time);\n\n let dateEl: HTMLElement;\n if(!options.noToday && diff < ONE_DAY && date.getDate() === time.getDate()) { // if the same day\n dateEl = i18n(options.capitalize ? 'Date.Today' : 'Peer.Status.Today');\n } else if(!options.noToday && diff > 0 && diff < (ONE_DAY * 2) && new Date(date.getTime() - ONE_DAY * 1000).getDate() === time.getDate()) { // yesterday\n dateEl = i18n(options.capitalize ? 'Yesterday' : 'Peer.Status.Yesterday');\n\n if(options.capitalize) {\n dateEl.style.textTransform = 'capitalize';\n }\n } else if(date.getFullYear() !== time.getFullYear()) { // different year\n dateEl = new I18n.IntlDateElement({\n date: time,\n options: {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n ...(options.combined ? formatTimeOptions: {})\n }\n }).element;\n // dateStr = months[time.getMonth()].slice(0, 3) + ' ' + time.getDate() + ', ' + time.getFullYear();\n } else {\n dateEl = new I18n.IntlDateElement({\n date: time,\n options: {\n month: 'short',\n day: 'numeric',\n ...(options.combined ? formatTimeOptions: {})\n }\n }).element;\n // dateStr = months[time.getMonth()].slice(0, 3) + ' ' + time.getDate();\n }\n\n return {dateEl, timeEl};\n}\n\nexport function formatFullSentTime(timestamp: number, capitalize = true, noToday = false) {\n const {dateEl, timeEl} = formatFullSentTimeRaw(timestamp, {\n capitalize,\n noToday\n });\n\n const fragment = document.createDocumentFragment();\n fragment.append(dateEl, ' ', i18n('ScheduleController.at'), ' ', timeEl);\n return fragment;\n}\n\nexport function formatTime(date: Date) {\n return new I18n.IntlDateElement({\n date,\n options: formatTimeOptions\n }).element;\n}\n\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.formatDateAccordingToTodayNew = formatDateAccordingToTodayNew);\n\nexport const getFullDate = (date: Date, options: Partial<{\n noTime: true,\n noSeconds: true,\n monthAsNumber: true,\n leadingZero: true,\n shortYear: boolean\n}> = {}) => {\n const joiner = options.monthAsNumber ? '.' : ' ';\n const time = ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + (options.noSeconds ? '' : ':' + ('0' + date.getSeconds()).slice(-2));\n const fullYear = date.getFullYear();\n\n return (options.leadingZero ? ('0' + date.getDate()).slice(-2) : date.getDate()) +\n joiner + (options.monthAsNumber ? ('0' + (date.getMonth() + 1)).slice(-2) : months[date.getMonth()]) +\n joiner + (('' + fullYear).slice(options.shortYear ? 2 : 0)) +\n (options.noTime ? '' : ', ' + time);\n};\n\nexport function formatMonthsDuration(months: number, bold?: boolean) {\n const isYears = months >= 12 && !(months % 12);\n return i18n(\n bold ? (isYears ? 'BoldYears' : 'BoldMonths') : (isYears ? 'Years' : 'Months'),\n [isYears ? months / 12 : months]\n );\n}\n\n// https://github.com/DrKLO/Telegram/blob/d52b2c921abd3c1e8d6368858313ad0cb0468c07/TMessagesProj/src/main/java/org/telegram/ui/Adapters/FiltersView.java\nconst minYear = 2013;\nconst yearPattern = new RegExp('20[0-9]{1,2}');\nconst anyLetterRegExp = `\\\\p{L}`;\nconst monthPattern = new RegExp(`(${anyLetterRegExp}{3,})`, 'iu');\nconst monthYearOrDayPattern = new RegExp(`(${anyLetterRegExp}{3,}) ([0-9]{0,4})`, 'iu');\nconst yearOrDayAndMonthPattern = new RegExp(`([0-9]{0,4}) (${anyLetterRegExp}{2,})`, 'iu');\nconst shortDate = new RegExp('^([0-9]{1,4})(\\\\.| |/|\\\\-)([0-9]{1,4})$', 'i');\nconst longDate = new RegExp('^([0-9]{1,2})(\\\\.| |/|\\\\-)([0-9]{1,2})(\\\\.| |/|\\\\-)([0-9]{1,4})$', 'i');\nconst numberOfDaysEachMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nexport type DateData = {\n title: string,\n minDate: number,\n maxDate: number,\n};\nexport function fillTipDates(query: string, dates: DateData[]) {\n const q = query.trim().toLowerCase();\n\n if(q.length < 3) {\n return;\n }\n\n if(['today', I18n.format('Peer.Status.Today', true)].some((haystack) => haystack.indexOf(q) === 0)) {\n const date = new Date();\n const year = date.getFullYear();\n const month = date.getMonth();\n const day = date.getDate();\n date.setFullYear(year, month, day);\n date.setHours(0, 0, 0);\n\n const minDate = date.getTime();\n date.setFullYear(year, month, day + 1);\n date.setHours(0, 0, 0);\n\n const maxDate = date.getTime() - 1;\n dates.push({\n title: I18n.format('Date.Today', true),\n minDate,\n maxDate\n });\n return;\n }\n\n if(['yesterday', I18n.format('Peer.Status.Yesterday', true)].some((haystack) => haystack.indexOf(q) === 0)) {\n const date = new Date();\n const year = date.getFullYear();\n const month = date.getMonth();\n const day = date.getDate();\n date.setFullYear(year, month, day);\n date.setHours(0, 0, 0);\n\n const minDate = date.getTime() - 86400000;\n date.setFullYear(year, month, day + 1);\n date.setHours(0, 0, 0);\n\n const maxDate = date.getTime() - 86400001;\n dates.push({\n title: capitalizeFirstLetter(I18n.format('Yesterday', true)),\n minDate,\n maxDate\n });\n return;\n }\n\n const dayOfWeek = getDayOfWeek(q);\n if(dayOfWeek >= 0) {\n const date = new Date();\n const now = date.getTime();\n const currentDay = date.getDay();\n const distance = dayOfWeek - currentDay;\n date.setDate(date.getDate() + distance);\n if(date.getTime() > now) {\n date.setTime(date.getTime() - 604800000);\n }\n const year = date.getFullYear()\n const month = date.getMonth();\n const day = date.getDate();\n date.setFullYear(year, month, day);\n date.setHours(0, 0, 0);\n\n const minDate = date.getTime();\n date.setFullYear(year, month, day + 1);\n date.setHours(0, 0, 0);\n\n const maxDate = date.getTime() - 1;\n dates.push({\n title: formatWeekLong(minDate),\n minDate,\n maxDate\n });\n return;\n }\n\n let matches: any[];\n if((matches = shortDate.exec(q)) !== null) {\n const g1 = matches[1];\n const g2 = matches[3];\n const k = parseInt(g1);\n const k1 = parseInt(g2);\n if(k > 0 && k <= 31) {\n if(k1 >= minYear && k <= 12) {\n const selectedYear = k1;\n const month = k - 1;\n createForMonthYear(dates, month, selectedYear);\n return;\n } else if(k1 <= 12) {\n const day = k - 1;\n const month = k1 - 1;\n createForDayMonth(dates, day, month);\n }\n } else if(k >= minYear && k1 <= 12) {\n const selectedYear = k;\n const month = k1 - 1;\n createForMonthYear(dates, month, selectedYear);\n }\n\n return;\n }\n\n if((matches = longDate.exec(q)) !== null) {\n const g1 = matches[1];\n const g2 = matches[3];\n const g3 = matches[5];\n if(!matches[2] === matches[4]) {\n return;\n }\n\n const day = parseInt(g1);\n const month = parseInt(g2) - 1;\n let year = parseInt(g3);\n if(year >= 10 && year <= 99) {\n year += 2000;\n }\n\n const currentYear = new Date().getFullYear();\n if(validDateForMonth(day - 1, month) && year >= minYear && year <= currentYear) {\n const date = new Date();\n date.setFullYear(year, month, day);\n date.setHours(0, 0, 0);\n\n const minDate = date.getTime();\n date.setFullYear(year, month, day + 1);\n date.setHours(0, 0, 0);\n\n const maxDate = date.getTime() - 1;\n dates.push({\n title: formatterYearMax(minDate),\n minDate,\n maxDate\n });\n return;\n }\n\n return;\n }\n\n if((matches = monthYearOrDayPattern.exec(q)) !== null) {\n const g1 = matches[1];\n const g2 = matches[2];\n const month = getMonth(g1);\n if(month >= 0) {\n const k = +g2 || new Date().getUTCFullYear();\n if(k > 0 && k <= 31) {\n const day = k - 1;\n createForDayMonth(dates, day, month);\n return;\n } else if(k >= minYear) {\n const selectedYear = k;\n createForMonthYear(dates, month, selectedYear);\n return;\n }\n }\n }\n\n if((matches = yearOrDayAndMonthPattern.exec(q)) !== null) {\n const g1 = matches[1];\n const g2 = matches[2];\n const month = getMonth(g2);\n if(month >= 0) {\n const k = +g1;\n if(k > 0 && k <= 31) {\n const day = k - 1;\n createForDayMonth(dates, day, month);\n return;\n } else if(k >= minYear) {\n const selectedYear = k;\n createForMonthYear(dates, month, selectedYear);\n }\n }\n }\n\n if((matches = monthPattern.exec(q)) !== null) {\n const g1 = matches[1];\n const month = getMonth(g1);\n if(month >= 0) {\n const currentYear = new Date().getFullYear();\n for(let i = currentYear; i >= minYear; --i) {\n createForMonthYear(dates, month, i);\n }\n }\n }\n\n if((matches = yearPattern.exec(q)) !== null) {\n let selectedYear = +matches[0];\n const currentYear = new Date().getFullYear();\n if(selectedYear < minYear) {\n selectedYear = minYear;\n for(let i = currentYear; i >= selectedYear; i--) {\n const date = new Date();\n date.setFullYear(i, 0, 1);\n date.setHours(0, 0, 0);\n\n const minDate = date.getTime();\n date.setFullYear(i + 1, 0, 1);\n date.setHours(0, 0, 0);\n\n const maxDate = date.getTime() - 1;\n dates.push({\n title: '' + i,\n minDate,\n maxDate\n });\n }\n } else if(selectedYear <= currentYear) {\n const date = new Date();\n date.setFullYear(selectedYear, 0, 1);\n date.setHours(0, 0, 0);\n\n const minDate = date.getTime();\n date.setFullYear(selectedYear + 1, 0, 1);\n date.setHours(0, 0, 0);\n\n const maxDate = date.getTime() - 1;\n dates.push({\n title: '' + selectedYear,\n minDate,\n maxDate\n });\n }\n\n return;\n }\n}\n\nfunction createForMonthYear(dates: DateData[], month: number, selectedYear: number) {\n const currentYear = new Date().getFullYear();\n const today = Date.now();\n if(selectedYear >= minYear && selectedYear <= currentYear) {\n const date = new Date();\n date.setFullYear(selectedYear, month, 1);\n date.setHours(0, 0, 0);\n const minDate = date.getTime();\n if(minDate > today) {\n return;\n }\n date.setMonth(date.getMonth() + 1);\n const maxDate = date.getTime() - 1;\n\n dates.push({\n title: formatterMonthYear(minDate),\n minDate,\n maxDate\n });\n }\n}\n\nfunction createForDayMonth(dates: DateData[], day: number, month: number) {\n if(validDateForMonth(day, month)) {\n const currentYear = new Date().getFullYear();\n const today = Date.now();\n\n for(let i = currentYear; i >= minYear; i--) {\n if(month === 1 && day === 28 && !isLeapYear(i)) {\n continue;\n }\n\n const date = new Date();\n date.setFullYear(i, month, day + 1);\n date.setHours(0, 0, 0);\n\n const minDate = date.getTime();\n if(minDate > today) {\n continue;\n }\n\n date.setFullYear(i, month, day + 2);\n date.setHours(0, 0, 0);\n const maxDate = date.getTime() - 1;\n if(i === currentYear) {\n dates.push({\n title: formatterDayMonth(minDate),\n minDate,\n maxDate\n });\n } else {\n dates.push({\n title: formatterYearMax(minDate),\n minDate,\n maxDate\n });\n }\n }\n }\n}\n\nfunction formatterMonthYear(timestamp: number) {\n const date = new Date(timestamp);\n return monthsLocalized[date.getMonth()]/* .slice(0, 3) */ + ' ' + date.getFullYear();\n}\n\nfunction formatterDayMonth(timestamp: number) {\n const date = new Date(timestamp);\n return monthsLocalized[date.getMonth()]/* .slice(0, 3) */ + ' ' + date.getDate();\n}\n\nfunction formatterYearMax(timestamp: number) {\n const date = new Date(timestamp);\n return ('0' + date.getDate()).slice(-2) + '.' + ('0' + (date.getMonth() + 1)).slice(-2) + '.' + date.getFullYear();\n}\n\nfunction formatWeekLong(timestamp: number) {\n const date = new Date(timestamp);\n return daysLocalized[date.getDay()];\n}\n\nfunction validDateForMonth(day: number, month: number) {\n if(month >= 0 && month < 12) {\n if(day >= 0 && day < numberOfDaysEachMonth[month]) {\n return true;\n }\n }\n return false;\n}\n\nfunction isLeapYear(year: number) {\n return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n}\n\nfunction getMonth(q: string) {\n q = q.toLowerCase();\n for(let i = 0; i < 12; i++) {\n if([months[i], monthsLocalized[i]].some((month) => month.toLowerCase().indexOf(q) === 0)) {\n return i;\n }\n }\n return -1;\n}\n\nfunction getDayOfWeek(q: string) {\n const c = new Date();\n if(q.length <= 3) {\n return -1;\n }\n\n for(let i = 0; i < 7; i++) {\n c.setDate(c.getDate() + 1);\n\n if(formatWeekLong(c.getTime()).toLowerCase().indexOf(q) === 0) {\n return c.getDay();\n }\n }\n return -1;\n}\n\nMOUNT_CLASS_TO.fillTipDates = fillTipDates;\n","/**\n * Will be used for FILE_REFERENCE_EXPIRED\n * @param key\n * @param wasObject\n * @param newObject\n */\nexport default function safeReplaceArrayInObject(key: K, wasObject: any, newObject: any) {\n if('byteLength' in newObject[key]) { // Uint8Array\n newObject[key] = [...newObject[key]];\n }\n\n if(wasObject && wasObject[key] !== newObject[key]) {\n wasObject[key].length = newObject[key].length;\n (newObject[key] as any[]).forEach((v, i) => {\n wasObject[key][i] = v;\n });\n\n /* wasObject[key].set(newObject[key]); */\n newObject[key] = wasObject[key];\n }\n}\n","export default function spoiler(text: string): string {\n const chars = '⠁⠂⠄⠈⠐⠠⡀⢀⠃⠅⠆⠉⠊⠌⠑⠒⠔⠘⠡⠢⠤⠨⠰⡁⡂⡄⡈⡐⡠⢁⢂⢄⢈⢐⢠⣀⠇⠋⠍⠎⠓⠕⠖⠙⠚⠜⠣⠥⠦⠩⠪⠬⠱⠲⠴⠸⡃⡅⡆⡉⡊⡌⡑⡒⡔⡘⡡⡢⡤⡨⡰⢃⢅⢆⢉⢊⢌⢑⢒⢔⢘⢡⢢⢤⢨⢰⣁⣂⣄⣈⣐⣠⠏⠗⠛⠝⠞⠧⠫⠭⠮⠳⠵⠶⠹⠺⠼⡇⡋⡍⡎⡓⡕⡖⡙⡚⡜⡣⡥⡦⡩⡪⡬⡱⡲⡴⡸⢇⢋⢍⢎⢓⢕⢖⢙⢚⢜⢣⢥⢦⢩⢪⢬⢱⢲⢴⢸⣃⣅⣆⣉⣊⣌⣑⣒⣔⣘⣡⣢⣤⣨⣰⠟⠯⠷⠻⠽⠾⡏⡗⡛⡝⡞⡧⡫⡭⡮⡳⡵⡶⡹⡺⡼⢏⢗⢛⢝⢞⢧⢫⢭⢮⢳⢵⢶⢹⢺⢼⣇⣋⣍⣎⣓⣕⣖⣙⣚⣜⣣⣥⣦⣩⣪⣬⣱⣲⣴⣸⠿⡟⡯⡷⡻⡽⡾⢟⢯⢷⢻⢽⢾⣏⣗⣛⣝⣞⣧⣫⣭⣮⣳⣵⣶⣹⣺⣼⡿⢿⣟⣯⣷⣻⣽⣾⣿';\n const charsLength = chars.length;\n\n const out: string[] = [];\n for(let i = 0; i < text.length; ++i) {\n const char = text.charCodeAt(i);\n out.push(chars[char % charsLength]);\n }\n\n return out.join('');\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MessageEntity} from '../../layer';\nimport spoiler from './spoiler';\n\nexport default function encodeSpoiler(text: string, entity: MessageEntity.messageEntitySpoiler) {\n const before = text.slice(0, entity.offset);\n const spoilerBefore = text.slice(entity.offset, entity.offset + entity.length);\n const spoilerAfter = spoiler(spoilerBefore)/* '▚'.repeat(entity.length) */;\n const after = text.slice(entity.offset + entity.length);\n text = before + spoilerAfter + after;\n return {text, entityText: spoilerAfter};\n};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MessageEntity} from '../../layer';\nimport encodeSpoiler from './encodeSpoiler';\n\n/**\n * ! This function is still unsafe to use with .innerHTML\n */\nexport default function wrapPlainText(text: string, entities: MessageEntity[] = []) {\n entities.forEach((entity) => {\n if(entity._ === 'messageEntitySpoiler') {\n text = encodeSpoiler(text, entity).text;\n }\n });\n\n return text;\n // if(entities?.length) {\n // entities = entities.filter((entity) => entity._ === 'messageEntitySpoiler');\n // }\n\n // return wrapRichText(text, {\n // entities,\n // noEncoding: true,\n // noTextFormat: true,\n // noLinebreaks: true,\n // noLinks: true\n // }).textContent;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Document, InputFileLocation} from '../../../../layer';\n\nexport default function getDocumentInputFileLocation(doc: Document.document, thumbSize?: string): InputFileLocation.inputDocumentFileLocation {\n return {\n _: 'inputDocumentFileLocation',\n id: doc.id,\n access_hash: doc.access_hash,\n file_reference: doc.file_reference,\n thumb_size: thumbSize\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {InputFileLocation, InputGeoPoint, InputStickerSet, InputWebFileLocation} from '../layer';\nimport type {DownloadOptions} from '../lib/mtproto/apiFileManager';\n\nconst FILENAME_JOINER = '_';\n\nexport function getFileNameByLocation(location: InputFileLocation | InputWebFileLocation, options?: Partial<{\n fileName: string,\n downloadId: string\n}>) {\n const fileName = '';// (options?.fileName || '').split('.');\n const ext = fileName[fileName.length - 1] || '';\n\n let str: string;\n switch(location._) {\n case 'inputPhotoFileLocation': {\n str = ['photo', fileName[0], location.id, location.thumb_size].filter(Boolean).join(FILENAME_JOINER);\n break;\n }\n\n case 'inputDocumentFileLocation': {\n str = ['document', fileName[0], location.id, location.thumb_size].filter(Boolean).join(FILENAME_JOINER);\n break;\n }\n\n case 'inputPeerPhotoFileLocation':\n str = ['peerPhoto', location.photo_id, location.pFlags.big ? 'big' : 'small'].join(FILENAME_JOINER);\n break;\n\n case 'inputStickerSetThumb': {\n const id = (location.stickerset as InputStickerSet.inputStickerSetID).id ||\n (location.stickerset as InputStickerSet.inputStickerSetShortName).short_name ||\n (location.stickerset as InputStickerSet.inputStickerSetDice).emoticon ||\n location.stickerset._;\n str = ['stickerSetThumb', id, location.thumb_version].join(FILENAME_JOINER);\n break;\n }\n\n case 'inputFileLocation': {\n str = [location.volume_id, location.local_id].join(FILENAME_JOINER);\n break;\n }\n\n case 'inputWebFileLocation': {\n str = ['webFile', location.url].join(FILENAME_JOINER);\n break;\n }\n\n case 'inputWebFileGeoPointLocation': {\n const geoPoint = location.geo_point as InputGeoPoint.inputGeoPoint;\n str = ['geoPoint', geoPoint.lat, geoPoint.long, location.w, location.h, location.zoom, location.scale].join(FILENAME_JOINER);\n break;\n }\n\n default: {\n console.error('Unrecognized location:', location);\n str = '';\n break;\n }\n }\n\n return str + (options?.downloadId ? '_download' : '') + (ext ? '.' + ext : ext);\n}\n\nexport type FileURLType = 'photo' | 'thumb' | 'document' | 'stream' | 'download';\nexport function getFileURL(type: FileURLType, options: DownloadOptions) {\n // console.log('getFileURL', location);\n // const perf = performance.now();\n const encoded = encodeURIComponent(JSON.stringify(options));\n // console.log('getFileURL encode:', performance.now() - perf, encoded);\n\n return /* '/' + */type + '/' + encoded;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Document, PhotoSize, VideoSize} from '../../../../layer';\nimport type {DownloadOptions} from '../../../mtproto/apiFileManager';\nimport getDocumentInputFileLocation from './getDocumentInputFileLocation';\n\nexport default function getDocumentDownloadOptions(\n doc: Document.document,\n thumb?: PhotoSize.photoSize | Extract,\n queueId?: number,\n onlyCache?: boolean\n): DownloadOptions {\n const inputFileLocation = getDocumentInputFileLocation(doc, thumb?.type);\n\n let mimeType: MTMimeType;\n if(thumb?._ === 'photoSize') {\n mimeType = doc.sticker ? 'image/webp' : (doc.mime_type.startsWith('image/') ? doc.mime_type : 'image/jpeg');\n } else {\n mimeType = doc.mime_type || 'application/octet-stream';\n }\n\n return {\n dcId: doc.dc_id,\n location: inputFileLocation,\n size: thumb ? thumb.size : doc.size,\n mimeType,\n fileName: doc.file_name,\n queueId,\n onlyCache\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {FileURLType, getFileURL} from '../../../../helpers/fileName';\nimport {Document, PhotoSize} from '../../../../layer';\nimport getDocumentDownloadOptions from './getDocumentDownloadOptions';\n\nexport default function getDocumentURL(doc: Document.document, download = false, thumb?: PhotoSize.photoSize) {\n let type: FileURLType;\n if(download) {\n type = 'download';\n } else if(thumb) {\n type = 'thumb';\n } else if(doc.supportsStreaming) {\n type = 'stream';\n } else {\n type = 'document';\n }\n\n return getFileURL(type, getDocumentDownloadOptions(doc, thumb));\n}\n","export const EXTENSION_MIME_TYPE_MAP: {[ext in MTFileExtension]: MTMimeType} = {\n pdf: 'application/pdf',\n tgv: 'application/x-tgwallpattern',\n tgs: 'application/x-tgsticker',\n json: 'application/json',\n wav: 'audio/wav',\n mp3: 'audio/mpeg',\n ogg: 'audio/ogg',\n jpeg: 'image/jpeg',\n jpg: 'image/jpeg',\n png: 'image/png',\n gif: 'image/gif',\n webp: 'image/webp',\n mp4: 'video/mp4',\n webm: 'video/webm',\n mov: 'video/quicktime',\n svg: 'image/svg+xml',\n avif: 'image/avif',\n jxl: 'image/jxl',\n bmp: 'image/bmp'\n};\n\nexport const MIME_TYPE_EXTENSION_MAP: {[mimeType in MTMimeType]?: MTFileExtension} = {};\n\nfor(const ext in EXTENSION_MIME_TYPE_MAP) {\n MIME_TYPE_EXTENSION_MAP[EXTENSION_MIME_TYPE_MAP[ext as MTFileExtension]] = ext as MTFileExtension;\n}\n","export default function bytesFromHex(hexString: string) {\n const len = hexString.length;\n const bytes = new Uint8Array(Math.ceil(len / 2));\n let start = 0;\n\n if(len % 2) { // read 0x581 as 0x0581\n bytes[start++] = parseInt(hexString.charAt(0), 16);\n }\n\n for(let i = start; i < len; i += 2) {\n bytes[start++] = parseInt(hexString.substr(i, 2), 16);\n }\n\n return bytes;\n}\n","export default function bytesCmp(bytes1: number[] | Uint8Array, bytes2: number[] | Uint8Array) {\n const len = bytes1.length;\n if(len !== bytes2.length) {\n return false;\n }\n\n for(let i = 0; i < len; ++i) {\n if(bytes1[i] !== bytes2[i]) {\n return false;\n }\n }\n\n return true;\n}\n","import bytesFromHex from './bytes/bytesFromHex';\nimport bytesCmp from './bytes/bytesCmp';\n\nfunction readLengthField(buf: Uint8Array, offset: number) {\n let length = 0;\n let size = 0;\n\n for(let i = 0; i < 4; i++) {\n const byte = buf[offset + i];\n length = (length << 7) + (byte & 0x7f);\n size++;\n if((byte & 0x80) === 0) {\n break;\n }\n }\n\n return [size, length];\n}\n\nfunction parseDecoderSpecificInfo(buf: Uint8Array) {\n if(buf[0] !== 0x05) {\n throw new Error('Invalid DecoderSpecificInfo tag');\n }\n\n const [lenSz, len] = readLengthField(buf, 1);\n const offset = 1 + lenSz;\n\n return buf.subarray(offset, offset + len);\n}\n\nfunction parseDecoderConfigDescriptor(buf: Uint8Array) {\n if(buf[0] !== 0x04) {\n throw new Error('Invalid DecoderConfigDescriptor tag');\n }\n\n const [lenSz, len] = readLengthField(buf, 1);\n let offset = 1 + lenSz;\n\n offset += 1 + // oti\n 1 + // flags\n 3 + // bufferSizeDB\n 4 + // maxBitRate\n 4; // avgBitRate\n\n const decoderSpecificInfo = parseDecoderSpecificInfo(buf.subarray(offset));\n\n return decoderSpecificInfo;\n}\n\nfunction parseES_Descriptor(buf: Uint8Array) {\n if(buf[0] !== 0x03) {\n throw new Error('Invalid ES_Descriptor tag');\n }\n\n const dv = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n const [lenSz, len] = readLengthField(buf, 1);\n let offset = 1 + lenSz;\n offset += 2; // ES_ID\n const flags = dv.getUint8(offset);\n offset += 1;\n\n const streamDependenceFlag = flags & 0x80;\n const URL_Flag = flags & 0x40;\n\n if(streamDependenceFlag) {\n offset += 2;\n }\n if(URL_Flag) {\n const URLlength = readLengthField(buf, offset);\n offset += 1 + URLlength[0] + URLlength[1];\n }\n\n const decoderConfigDescriptor = parseDecoderConfigDescriptor(buf.subarray(offset));\n\n return {decoderConfigDescriptor};\n}\n\n// function isoMakePath(box: any) {\n// const path = []\n// let cur = box\n// while(cur._parent) {\n// path.unshift(cur.type)\n// cur = cur._parent\n// }\n// return path.join('.')\n// }\n\nconst BROKEN_DSCI = [0x13, 0x88];\n// a proper working esds, containing:\n// - profile = AAC_LC, sample rate = 22050, channels = MONO\n// - sync extension with profile = AAC_SBR, sample rate = 44100\nconst FIXED_ESDS = bytesFromHex('0327000100041940150000000001f4000000bb750507138856e5a5');\nconst ESDS = new TextEncoder().encode('esds');\nconst MP4A = new TextEncoder().encode('mp4a');\n\nfunction findUint8ArrayBack(buf: Uint8Array, needle: Uint8Array, start = buf.length) {\n for(let i = start - needle.length; i >= 0; i--) {\n let found = true;\n for(let j = 0; j < needle.length; j++) {\n if(buf[i + j] !== needle[j]) {\n found = false;\n break;\n }\n }\n if(found) return i;\n }\n\n return -1;\n}\n\nfunction fixMp4ForChromium(u8: Uint8Array) {\n const dv = new DataView(u8.buffer, u8.byteOffset, u8.byteLength);\n\n // starting from end is more efficient because mdat is usually at the start\n let pos = u8.length;\n let found = null;\n while(true) {\n const esdsOffset = findUint8ArrayBack(u8, ESDS, pos);\n if(esdsOffset === -1) break;\n pos = esdsOffset;\n\n // validate size\n const esdsSize = dv.getUint32(esdsOffset - 4); // mp4 box\n if(esdsSize < 0 || esdsOffset + esdsSize > u8.length) {\n // invalid esds\n continue;\n }\n\n // esds can only be inside mp4a\n const mp4aOffset = findUint8ArrayBack(u8, MP4A, esdsOffset);\n if(mp4aOffset === -1 || esdsOffset - mp4aOffset > 100) continue;\n\n found = {offset: esdsOffset + 8, size: esdsSize - 12};\n }\n\n if(!found) throw new Error('No ESDS found');\n\n const esds = u8.subarray(found.offset, found.offset + found.size);\n\n const parsed = parseES_Descriptor(esds);\n if(!parsed) throw new Error('Invalid ESDS');\n if(!bytesCmp(parsed.decoderConfigDescriptor, BROKEN_DSCI)) {\n throw new Error('Not a broken DSCI');\n }\n\n if(found.size < FIXED_ESDS.length) {\n throw new Error(`ESDS Size not enough (expected at least ${FIXED_ESDS.length}, got ${found.size})`);\n }\n\n u8.set(FIXED_ESDS, found.offset);\n}\n\nexport default function tryPatchMp4(u8: Uint8Array) {\n // since we are patching chunks and not the entire file, only the chunk\n // containing the ESDS will succeed, so we can safely ignore errors\n //\n // there's an edge case where the ESDS is split between two chunks, but\n // that's quite unlikely to happen, so we ignore it for now\n\n try {\n fixMp4ForChromium(u8);\n return true;\n } catch(e) {\n return false;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {ThumbCache} from '../storages/thumbs';\nimport {Document, DocumentAttribute, PhotoSize, WallPaper} from '../../layer';\nimport {ReferenceContext} from '../mtproto/referenceDatabase';\nimport {getFullDate} from '../../helpers/date';\nimport isObject from '../../helpers/object/isObject';\nimport safeReplaceArrayInObject from '../../helpers/object/safeReplaceArrayInObject';\nimport {AppManager} from './manager';\nimport wrapPlainText from '../richTextProcessor/wrapPlainText';\nimport assumeType from '../../helpers/assumeType';\nimport {getEnvironment} from '../../environment/utils';\nimport MTProtoMessagePort from '../mtproto/mtprotoMessagePort';\nimport getDocumentInputFileLocation from './utils/docs/getDocumentInputFileLocation';\nimport getDocumentURL from './utils/docs/getDocumentURL';\nimport makeError from '../../helpers/makeError';\nimport {EXTENSION_MIME_TYPE_MAP} from '../../environment/mimeTypeMap';\nimport {THUMB_TYPE_FULL} from '../mtproto/mtproto_config';\nimport tsNow from '../../helpers/tsNow';\nimport appManagersManager from './appManagersManager';\nimport tryPatchMp4 from '../../helpers/fixChromiumMp4';\n\nexport type MyDocument = Document.document;\n\n// TODO: если залить картинку файлом, а потом перезайти в диалог - превьюшка заново скачается\n\ntype WallPaperId = WallPaper.wallPaper['id'];\n\nlet uploadWallPaperTempId = 0;\n\nexport class AppDocsManager extends AppManager {\n private docs: {\n [docId: DocId]: MyDocument\n };\n\n private uploadingWallPapers: {\n [id: WallPaperId]: {\n cacheContext: ThumbCache,\n file: File\n }\n };\n\n private fixingChromiumMp4: {[src: string]: MaybePromise};\n\n private requestingDocParts: {[docId: DocId]: Set<() => void>};\n\n protected after() {\n this.docs = {};\n this.uploadingWallPapers = {};\n this.fixingChromiumMp4 = {};\n this.requestingDocParts = {};\n\n MTProtoMessagePort.getInstance().addEventListener('serviceWorkerOnline', (online) => {\n if(!online) {\n this.onServiceWorkerFail();\n }\n });\n }\n\n private onServiceWorkerFail = () => {\n for(const id in this.docs) {\n const doc = this.docs[id];\n\n if(doc.supportsStreaming) {\n delete doc.supportsStreaming;\n this.thumbsStorage.deleteCacheContext(doc);\n }\n }\n };\n\n public saveDoc(doc: Document, context?: ReferenceContext): MyDocument {\n if(!doc || doc._ === 'documentEmpty') {\n return;\n }\n\n const oldDoc = this.docs[doc.id];\n\n if(doc.file_reference) { // * because we can have a new object w/o the file_reference while sending\n safeReplaceArrayInObject('file_reference', oldDoc, doc);\n this.referenceDatabase.saveContext(doc.file_reference, context);\n }\n\n // console.log('saveDoc', apiDoc, this.docs[apiDoc.id]);\n // if(oldDoc) {\n // //if(doc._ !== 'documentEmpty' && doc._ === d._) {\n // if(doc.thumbs) {\n // if(!oldDoc.thumbs) oldDoc.thumbs = doc.thumbs;\n // /* else if(apiDoc.thumbs[0].bytes && !d.thumbs[0].bytes) {\n // d.thumbs.unshift(apiDoc.thumbs[0]);\n // } else if(d.thumbs[0].url) { // fix for converted thumb in safari\n // apiDoc.thumbs[0] = d.thumbs[0];\n // } */\n // }\n\n // //}\n\n // return oldDoc;\n\n // //return Object.assign(d, apiDoc, context);\n // //return context ? Object.assign(d, context) : d;\n // }\n\n if(!oldDoc) {\n this.docs[doc.id] = doc;\n }\n\n // * exclude from state\n // defineNotNumerableProperties(doc, [/* 'thumbs', */'type', 'h', 'w', 'file_name',\n // 'file', 'duration', 'downloaded', 'url', 'audioTitle',\n // 'audioPerformer', 'sticker', 'stickerEmoji', 'stickerEmojiRaw',\n // 'stickerSetInput', 'stickerThumbConverted', 'animated', 'supportsStreaming']);\n\n for(let i = 0, length = doc.attributes.length; i < length; ++i) {\n const attribute = doc.attributes[i];\n switch(attribute._) {\n case 'documentAttributeFilename': {\n doc.file_name = wrapPlainText(attribute.file_name);\n break;\n }\n\n case 'documentAttributeAudio': {\n if(doc.type === 'round') {\n break;\n }\n\n doc.duration = attribute.duration;\n doc.type = attribute.pFlags.voice && doc.mime_type === EXTENSION_MIME_TYPE_MAP.ogg ? 'voice' : 'audio';\n break;\n }\n\n case 'documentAttributeVideo': {\n doc.duration = attribute.duration;\n doc.w = attribute.w;\n doc.h = attribute.h;\n // apiDoc.supportsStreaming = attribute.pFlags?.supports_streaming/* && apiDoc.size > 524288 */;\n if(/* apiDoc.thumbs && */attribute.pFlags.round_message) {\n doc.type = 'round';\n } else /* if(apiDoc.thumbs) */ {\n doc.type = 'video';\n }\n break;\n }\n\n case 'documentAttributeCustomEmoji':\n case 'documentAttributeSticker': {\n if(attribute.alt !== undefined) {\n doc.stickerEmojiRaw = attribute.alt;\n }\n\n if(attribute.stickerset) {\n if(attribute.stickerset._ === 'inputStickerSetEmpty') {\n delete attribute.stickerset;\n } else if(attribute.stickerset._ === 'inputStickerSetID') {\n doc.stickerSetInput = attribute.stickerset;\n }\n }\n\n // * there can be no thumbs, then it is a document\n if(/* apiDoc.thumbs && */doc.mime_type === EXTENSION_MIME_TYPE_MAP.webp && (doc.thumbs || getEnvironment().IS_WEBP_SUPPORTED)) {\n doc.type = 'sticker';\n doc.sticker = 1;\n } else if(doc.mime_type === EXTENSION_MIME_TYPE_MAP.webm) {\n // if(!getEnvironment().IS_WEBM_SUPPORTED) {\n // break;\n // }\n\n doc.type = 'sticker';\n doc.sticker = 3;\n doc.animated = true;\n }\n break;\n }\n\n case 'documentAttributeImageSize': {\n doc.type = 'photo';\n doc.w = attribute.w;\n doc.h = attribute.h;\n break;\n }\n\n case 'documentAttributeAnimated': {\n if((doc.mime_type === EXTENSION_MIME_TYPE_MAP.gif || doc.mime_type === EXTENSION_MIME_TYPE_MAP.mp4)/* && apiDoc.thumbs */) {\n doc.type = 'gif';\n }\n\n doc.animated = true;\n break;\n }\n }\n }\n\n if(!doc.mime_type) {\n const ext = (doc.file_name || '').split('.').pop();\n const mappedMimeType = ext && EXTENSION_MIME_TYPE_MAP[ext.toLowerCase() as any as MTFileExtension];\n if(mappedMimeType) {\n doc.mime_type = mappedMimeType;\n } else {\n switch(doc.type) {\n case 'gif':\n case 'video':\n case 'round':\n doc.mime_type = EXTENSION_MIME_TYPE_MAP.mp4;\n break;\n case 'sticker':\n doc.mime_type = EXTENSION_MIME_TYPE_MAP.webp;\n break;\n case 'audio':\n doc.mime_type = EXTENSION_MIME_TYPE_MAP.mp3;\n break;\n case 'voice':\n doc.mime_type = EXTENSION_MIME_TYPE_MAP.ogg;\n break;\n default:\n doc.mime_type = 'application/octet-stream';\n break;\n }\n }\n } else if(doc.mime_type === EXTENSION_MIME_TYPE_MAP.pdf) {\n doc.type = 'pdf';\n } else if(doc.mime_type === EXTENSION_MIME_TYPE_MAP.gif) {\n doc.type = 'gif';\n } else if(doc.mime_type === EXTENSION_MIME_TYPE_MAP.tgs && doc.file_name === 'AnimatedSticker.tgs') {\n doc.type = 'sticker';\n doc.animated = true;\n doc.sticker = 2;\n }\n\n if(doc.type === 'voice' || doc.type === 'round') {\n // browser will identify extension\n const attribute = doc.attributes.find((attribute) => attribute._ === 'documentAttributeFilename') as DocumentAttribute.documentAttributeFilename;\n const ext = attribute && attribute.file_name.split('.').pop();\n const date = getFullDate(new Date(doc.date * 1000), {monthAsNumber: true, leadingZero: true}).replace(/[:\\.]/g, '-').replace(', ', '_');\n doc.file_name = `${doc.type}_${date}${ext ? '.' + ext : ''}`;\n }\n\n if(appManagersManager.isServiceWorkerOnline && ((doc.type === 'gif' && doc.size > 8e6) || doc.type === 'audio' || doc.type === 'video')/* || doc.mime_type.indexOf('video/') === 0 */) {\n doc.supportsStreaming = true;\n\n const cacheContext = this.thumbsStorage.getCacheContext(doc);\n if(!cacheContext.url) {\n this.thumbsStorage.setCacheContextURL(doc, undefined, getDocumentURL(doc), 0);\n }\n } else {\n doc.supportsStreaming = false;\n }\n\n // for testing purposes\n // doc.supportsStreaming = false;\n // doc.url = ''; // * this will break upload urls\n\n doc.file_name ||= '';\n\n /* if(!doc.url) {\n doc.url = this.getFileURL(doc);\n } */\n\n if(oldDoc) {\n return Object.assign(oldDoc, doc);\n }\n\n return doc;\n }\n\n public getDoc(docId: DocId | MyDocument): MyDocument {\n return isObject(docId) ? docId : this.docs[docId];\n }\n\n public downloadDoc(doc: MyDocument, queueId?: number, onlyCache?: boolean) {\n return this.apiFileManager.downloadMedia({\n media: doc,\n queueId,\n onlyCache\n });\n }\n\n public saveWebPConvertedStrippedThumb(docId: DocId, bytes: Uint8Array) {\n const doc = this.getDoc(docId);\n if(!doc) {\n return;\n }\n\n const thumb = doc.thumbs && doc.thumbs.find((thumb) => thumb._ === 'photoStrippedSize') as PhotoSize.photoStrippedSize;\n if(!thumb) {\n return;\n }\n\n doc.pFlags.stickerThumbConverted = true;\n thumb.bytes = bytes;\n }\n\n public prepareWallPaperUpload(file: File) {\n const id = 'wallpaper-upload-' + ++uploadWallPaperTempId;\n\n const thumb = {\n _: 'photoSize',\n h: 0,\n w: 0,\n location: {} as any,\n size: file.size,\n type: THUMB_TYPE_FULL\n } as PhotoSize.photoSize;\n let document: MyDocument = {\n _: 'document',\n access_hash: '',\n attributes: [],\n dc_id: 0,\n file_reference: [],\n id,\n mime_type: file.type as MTMimeType,\n size: file.size,\n date: tsNow(true),\n pFlags: {},\n thumbs: [thumb],\n file_name: file.name\n };\n\n document = this.saveDoc(document);\n\n const cacheContext = this.thumbsStorage.setCacheContextURL(document, undefined, URL.createObjectURL(file), file.size);\n\n const wallpaper: WallPaper.wallPaper = {\n _: 'wallPaper',\n access_hash: '',\n document: document,\n id,\n slug: id,\n pFlags: {}\n };\n\n this.uploadingWallPapers[id] = {\n cacheContext,\n file\n };\n\n return wallpaper;\n }\n\n public uploadWallPaper(id: WallPaperId) {\n const {cacheContext, file} = this.uploadingWallPapers[id];\n delete this.uploadingWallPapers[id];\n\n const upload = this.apiFileManager.upload({file, fileName: file.name});\n return upload.then((inputFile) => {\n return this.apiManager.invokeApi('account.uploadWallPaper', {\n file: inputFile,\n mime_type: file.type,\n settings: {\n _: 'wallPaperSettings',\n pFlags: {}\n }\n }).then((wallPaper) => {\n assumeType(wallPaper);\n wallPaper.document = this.saveDoc(wallPaper.document);\n this.thumbsStorage.setCacheContextURL(wallPaper.document, undefined, cacheContext.url, cacheContext.downloaded);\n\n return wallPaper;\n });\n });\n }\n\n public requestDocPart(docId: DocId, dcId: number, offset: number, limit: number) {\n const doc = this.getDoc(docId);\n if(!doc) return Promise.reject(makeError('NO_DOC'));\n\n const set = this.requestingDocParts[docId] ??= new Set();\n\n const onFinish = () => {\n if(\n set.delete(cancel) &&\n !set.size &&\n this.requestingDocParts[docId] === set\n ) {\n delete this.requestingDocParts[docId];\n }\n };\n\n let canceled = false;\n const cancel = () => {\n canceled = true;\n onFinish();\n };\n\n set.add(cancel);\n\n const promise = this.apiFileManager.requestFilePart({\n dcId,\n location: getDocumentInputFileLocation(doc),\n offset,\n limit,\n checkCancel: () => {\n if(canceled) {\n throw makeError('DOWNLOAD_CANCELED');\n }\n }\n });\n\n promise.finally(onFinish);\n\n return promise;\n }\n\n public cancelDocPartsRequests(docId: DocId) {\n const set = this.requestingDocParts[docId];\n if(!set) return;\n\n for(const cancel of set) {\n cancel();\n }\n }\n\n public fixChromiumMp4(src: string) {\n return this.fixingChromiumMp4[src] ??= fetch(src)\n .then((response) => response.arrayBuffer())\n .then((ab) => {\n const u8 = new Uint8Array(ab);\n tryPatchMp4(u8);\n return this.fixingChromiumMp4[src] = URL.createObjectURL(new Blob([u8]));\n });\n }\n}\n","import deepEqual from '../../../../helpers/object/deepEqual';\nimport {InputReplyTo, MessageReplyHeader} from '../../../../layer';\n\nexport default function repliesAreEqual(reply1: MessageReplyHeader | InputReplyTo, reply2: MessageReplyHeader | InputReplyTo) {\n return deepEqual(reply1, reply2);\n}\n","import deepEqual from '../../../../helpers/object/deepEqual';\nimport {DraftMessage} from '../../../../layer';\nimport repliesAreEqual from '../messages/repliesAreEqual';\n\nexport default function draftsAreEqual(draft1: DraftMessage, draft2: DraftMessage) {\n return deepEqual(draft1 as DraftMessage.draftMessage, draft2 as DraftMessage.draftMessage, ['date', 'reply_to']) &&\n repliesAreEqual((draft1 as DraftMessage.draftMessage)?.reply_to, (draft2 as DraftMessage.draftMessage)?.reply_to);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {MessageEntity, DraftMessage, MessagesSaveDraft, MessageReplyHeader, InputReplyTo, MessageMedia, WebPage, InputMedia} from '../../layer';\nimport tsNow from '../../helpers/tsNow';\nimport stateStorage from '../stateStorage';\nimport assumeType from '../../helpers/assumeType';\nimport {AppManager} from './manager';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\nimport draftsAreEqual from './utils/drafts/draftsAreEqual';\nimport isObject from '../../helpers/object/isObject';\n\nexport type MyDraftMessage = DraftMessage.draftMessage;\n\nexport class AppDraftsManager extends AppManager {\n private drafts: {[peerIdAndThreadId: string]: MyDraftMessage};\n private getAllDraftPromise: Promise;\n\n protected after() {\n this.clear(true);\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateDraftMessage: (update) => {\n const peerId = this.appPeersManager.getPeerId(update.peer);\n this.saveDraft({\n peerId,\n threadId: update.threadId,\n draft: update.draft,\n notify: true,\n force: true\n });\n }\n });\n\n /* return */stateStorage.get('drafts').then((drafts) => {\n this.drafts = drafts || {};\n });\n }\n\n public clear = (init?: boolean) => {\n if(!init) {\n this.getAllDraftPromise = undefined;\n }\n\n this.drafts = {};\n };\n\n private getKey(peerId: PeerId, threadId?: number) {\n return '' + peerId + (threadId ? '_' + threadId : '');\n }\n\n public getDraft(peerId: PeerId, threadId?: number) {\n return this.drafts[this.getKey(peerId, threadId)];\n }\n\n // private generateDialog(peerId: PeerId) {\n // const dialog = this.dialogsStorage.generateDialog(peerId);\n // dialog.draft = this.drafts[peerId];\n // this.dialogsStorage.saveDialog(dialog);\n // this.appMessagesManager.newDialogsToHandle[peerId] = dialog;\n // this.appMessagesManager.scheduleHandleNewDialogs();\n // }\n\n public addMissedDialogs() {\n return this.getAllDrafts().then(() => {\n for(const key in this.drafts) {\n if(key.indexOf('_') !== -1) { // exclude threads\n continue;\n }\n\n const peerId = key.toPeerId();\n const dialog = this.appMessagesManager.getDialogOnly(peerId);\n if(!dialog) {\n this.appMessagesManager.reloadConversation(peerId);\n // this.generateDialog(peerId);\n }\n }\n });\n }\n\n private getAllDrafts() {\n return this.getAllDraftPromise ??= this.apiManager.invokeApi('messages.getAllDrafts')\n .then((updates) => {\n const p = this.apiUpdatesManager.updatesState.syncLoading || Promise.resolve();\n return p.then(() => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n });\n }\n\n public saveDraft({\n peerId,\n threadId,\n draft: apiDraft,\n notify,\n force\n }: {\n peerId: PeerId,\n threadId?: number,\n draft: DraftMessage,\n notify?: boolean,\n force?: boolean\n }) {\n const draft = this.processApiDraft(apiDraft, peerId);\n\n const key = this.getKey(peerId, threadId);\n if(draft) {\n this.drafts[key] = draft;\n } else {\n delete this.drafts[key];\n }\n\n stateStorage.set({\n drafts: this.drafts\n });\n\n if(notify) {\n // console.warn(dT(), 'save draft', peerId, apiDraft, options)\n this.rootScope.dispatchEvent('draft_updated', {\n peerId,\n threadId,\n draft,\n force\n });\n }\n\n return draft;\n }\n\n private isEmptyDraft(draft: DraftMessage) {\n if(draft?._ !== 'draftMessage') {\n return true;\n }\n\n if(draft.reply_to !== undefined && (draft.reply_to as InputReplyTo.inputReplyToMessage).reply_to_msg_id > 0) {\n return false;\n }\n\n if(!draft.message.length) {\n return true;\n }\n\n return false;\n }\n\n private processApiDraft(draft: DraftMessage, peerId: PeerId): MyDraftMessage {\n if(draft?._ !== 'draftMessage') {\n return undefined;\n }\n\n const replyTo = draft.reply_to as InputReplyTo.inputReplyToMessage;\n if(replyTo?.reply_to_msg_id) {\n const channelId = this.appPeersManager.isChannel(peerId) ? peerId.toChatId() : undefined;\n replyTo.reply_to_msg_id = this.appMessagesIdsManager.generateMessageId(replyTo.reply_to_msg_id, channelId);\n replyTo.top_msg_id &&= this.appMessagesIdsManager.generateMessageId(replyTo.top_msg_id, channelId);\n replyTo.reply_to_peer_id &&= this.appPeersManager.getPeerId(replyTo.reply_to_peer_id);\n }\n\n return draft;\n }\n\n public syncDraft(peerId: PeerId, threadId: number, localDraft?: DraftMessage, saveOnServer = true, force = false) {\n // console.warn(dT(), 'sync draft', peerID)\n const serverDraft = this.getDraft(peerId, threadId);\n if(draftsAreEqual(serverDraft, localDraft)) {\n // console.warn(dT(), 'equal drafts', localDraft, serverDraft)\n return true;\n }\n\n // console.warn(dT(), 'changed draft', localDraft, serverDraft)\n const params: MessagesSaveDraft = {\n peer: this.appPeersManager.getInputPeerById(peerId),\n message: ''\n };\n\n let draftObj: DraftMessage;\n if(this.isEmptyDraft(localDraft)) {\n draftObj = {_: 'draftMessageEmpty'};\n } else {\n assumeType(localDraft);\n const message = localDraft.message;\n const entities: MessageEntity[] = localDraft.entities;\n\n const replyTo = localDraft.reply_to as InputReplyTo.inputReplyToMessage;\n if(replyTo) {\n params.reply_to = {\n _: 'inputReplyToMessage',\n reply_to_msg_id: getServerMessageId(replyTo.reply_to_msg_id)\n };\n\n if(replyTo.reply_to_peer_id && !isObject(replyTo.reply_to_peer_id)) {\n params.reply_to.reply_to_peer_id = this.appPeersManager.getInputPeerById(replyTo.reply_to_peer_id);\n }\n }\n\n if(entities?.length) {\n params.entities = this.appMessagesManager.getInputEntities(entities);\n }\n\n if(localDraft.pFlags.no_webpage) {\n params.no_webpage = localDraft.pFlags.no_webpage;\n }\n\n if(localDraft.pFlags.invert_media) {\n params.invert_media = localDraft.pFlags.invert_media;\n }\n\n if(localDraft.media) {\n params.media = localDraft.media;\n }\n\n params.message = message;\n }\n\n if(threadId) {\n const inputReplyTo: InputReplyTo.inputReplyToMessage = params.reply_to ??= {_: 'inputReplyToMessage'} as any;\n if(!inputReplyTo.reply_to_msg_id) {\n inputReplyTo.reply_to_msg_id = getServerMessageId(threadId);\n } else {\n inputReplyTo.top_msg_id = getServerMessageId(threadId);\n }\n }\n\n const saveLocalDraft = draftObj || localDraft;\n saveLocalDraft.date = tsNow(true) + this.timeManager.getServerTimeOffset();\n\n this.saveDraft({\n peerId,\n threadId,\n draft: saveLocalDraft,\n notify: true,\n force\n });\n\n if(saveOnServer) {\n const promise = this.apiManager.invokeApi('messages.saveDraft', params);\n const dialog = this.dialogsStorage.getDialogOnly(peerId); // * create or delete dialog when draft changes\n if(!dialog || !getServerMessageId(dialog.top_message)) {\n return promise.then(() => {\n return this.appMessagesManager.reloadConversation(peerId);\n });\n }\n\n return promise;\n }\n\n return true;\n }\n\n public clearAllDrafts() {\n return this.apiManager.invokeApi('messages.clearAllDrafts').then((bool) => {\n if(!bool) {\n return;\n }\n\n for(const combined in this.drafts) {\n const [peerId, threadId] = combined.split('_');\n this.rootScope.dispatchEvent('draft_updated', {\n peerId: peerId.toPeerId(),\n threadId: threadId ? +threadId : undefined,\n draft: undefined\n });\n }\n });\n }\n\n public clearDraft(peerId: PeerId, threadId: number) {\n const emptyDraft: DraftMessage.draftMessageEmpty = {\n _: 'draftMessageEmpty'\n };\n\n if(threadId) {\n this.syncDraft(peerId, threadId, emptyDraft as any, false, true);\n } else {\n this.saveDraft({\n peerId,\n threadId,\n draft: emptyDraft,\n notify: true,\n force: true\n });\n }\n }\n\n public setDraft(peerId: PeerId, threadId: number, message: string, entities?: MessageEntity[]) {\n const draft: DraftMessage.draftMessage = {\n _: 'draftMessage',\n date: tsNow(true),\n message,\n pFlags: {},\n entities\n };\n\n if(threadId) {\n this.syncDraft(peerId, threadId, draft, false, true);\n } else {\n this.saveDraft({\n peerId,\n threadId,\n draft,\n notify: true,\n force: true\n });\n }\n }\n}\n","import copy from './copy';\nimport isObject from './isObject';\n\nexport default function validateInitObject(\n initObject: any,\n currentObject: any,\n onReplace?: (key: string) => void,\n previousKey?: string,\n ignorePaths?: Set,\n path?: string\n) {\n for(const key in initObject) {\n const _path = path ? `${path}.${key}` : key;\n if(ignorePaths?.has(_path)) {\n continue;\n }\n\n if(typeof(currentObject[key]) !== typeof(initObject[key])) {\n currentObject[key] = copy(initObject[key]);\n onReplace?.(previousKey || key);\n } else if(isObject(initObject[key])) {\n validateInitObject(initObject[key], currentObject[key], onReplace, previousKey || key, ignorePaths, _path);\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MessageEntity} from '../../layer';\n\nexport default function fixEmoji(text: string, entities?: MessageEntity[]) {\n /* if(!IS_EMOJI_SUPPORTED) {\n return text;\n } */\n // '$`\\ufe0f'\n\n text = text.replace(/[\\u2640\\u2642\\u2764](?!\\ufe0f)/g, (match, offset, string) => {\n if(entities) {\n const length = match.length;\n\n offset += length;\n entities.forEach((entity) => {\n const end = entity.offset + entity.length;\n if(end === offset) { // current entity\n entity.length += length;\n } else if(end > offset) {\n entity.offset += length;\n }\n });\n }\n\n // console.log([match, offset, string]);\n return match + '\\ufe0f';\n });\n\n return text;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDocument} from './appDocsManager';\nimport App from '../../config/app';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport isObject from '../../helpers/object/isObject';\nimport validateInitObject from '../../helpers/object/validateInitObject';\nimport fixEmoji from '../richTextProcessor/fixEmoji';\nimport SearchIndex from '../searchIndex';\nimport stateStorage from '../stateStorage';\nimport {AppManager} from './manager';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport pause from '../../helpers/schedulers/pause';\nimport filterUnique from '../../helpers/array/filterUnique';\nimport assumeType from '../../helpers/assumeType';\nimport {EmojiGroup, EmojiList, MessagesEmojiGroups} from '../../layer';\n\ntype EmojiLangPack = {\n keywords: {\n [keyword: string]: string[],\n },\n version: number,\n langCode: string\n};\n\nconst EMOJI_LANG_PACK: EmojiLangPack = {\n keywords: {},\n version: 0,\n langCode: App.langPackCode\n};\n\nconst RECENT_MAX_LENGTH = 32;\n\ntype EmojiType = 'native' | 'custom';\ntype EmojiGroupType = 'esg' | 'stickers' | 'status' | 'profilePhoto';\n\nexport class AppEmojiManager extends AppManager {\n private static POPULAR_EMOJI = ['😂', '😘', '❤️', '😍', '😊', '😁', '👍', '☺️', '😔', '😄', '😭', '💋', '😒', '😳', '😜', '🙈', '😉', '😃', '😢', '😝', '😱', '😡', '😏', '😞', '😅', '😚', '🙊', '😌', '😀', '😋', '😆', '👌', '😐', '😕'];\n private keywordLangPacks: {\n [langCode: string]: EmojiLangPack\n } = {};\n\n private index: SearchIndex;\n private indexedLangPacks: {[langCode: string]: boolean} = {};\n\n private getKeywordsPromises: {[langCode: string]: Promise} = {};\n\n private recent: {native?: string[], custom?: DocId[]} = {};\n private getRecentEmojisPromises: {native?: Promise, custom?: Promise} = {};\n\n private getCustomEmojiDocumentsPromise: Promise;\n private getCustomEmojiDocumentPromises: Map> = new Map();\n\n private emojiGroups: {[type in EmojiGroupType]?: MaybePromise<{group: EmojiGroup, document: MyDocument}[]>} = {};\n\n /* public getPopularEmoji() {\n return stateStorage.get('emojis_popular').then((popEmojis) => {\n var result = []\n if (popEmojis && popEmojis.length) {\n for (var i = 0, len = popEmojis.length; i < len; i++) {\n result.push({code: popEmojis[i][0], rate: popEmojis[i][1]})\n }\n callback(result)\n return\n }\n\n return stateStorage.get('emojis_recent').then((recentEmojis) => {\n recentEmojis = recentEmojis || popular || []\n var shortcut\n var code\n for (var i = 0, len = recentEmojis.length; i < len; i++) {\n shortcut = recentEmojis[i]\n if (Array.isArray(shortcut)) {\n shortcut = shortcut[0]\n }\n if (shortcut && typeof shortcut === 'string') {\n if (shortcut.charAt(0) == ':') {\n shortcut = shortcut.substr(1, shortcut.length - 2)\n }\n if (code = shortcuts[shortcut]) {\n result.push({code: code, rate: 1})\n }\n }\n }\n callback(result)\n });\n });\n }\n\n function pushPopularEmoji (code) {\n getPopularEmoji(function (popularEmoji) {\n var exists = false\n var count = popularEmoji.length\n var result = []\n for (var i = 0; i < count; i++) {\n if (popularEmoji[i].code == code) {\n exists = true\n popularEmoji[i].rate++\n }\n result.push([popularEmoji[i].code, popularEmoji[i].rate])\n }\n if (exists) {\n result.sort(function (a, b) {\n return b[1] - a[1]\n })\n } else {\n if (result.length > 41) {\n result = result.slice(0, 41)\n }\n result.push([code, 1])\n }\n ConfigStorage.set({emojis_popular: result})\n })\n } */\n\n public getEmojiKeywords(langCode: string = App.langPackCode) {\n const promise = this.getKeywordsPromises[langCode];\n if(promise) {\n return promise;\n }\n\n const storageKey: any = 'emojiKeywords_' + langCode;\n return this.getKeywordsPromises[langCode] = stateStorage.get(storageKey).then((pack: EmojiLangPack) => {\n if(!isObject(pack)) {\n pack = {} as any;\n }\n\n validateInitObject(EMOJI_LANG_PACK, pack);\n\n // important\n pack.langCode = langCode;\n this.keywordLangPacks[langCode] = pack;\n\n return this.apiManager.invokeApi('messages.getEmojiKeywordsDifference', {\n lang_code: pack.langCode,\n from_version: pack.version\n }).then((keywordsDifference) => {\n pack.version = keywordsDifference.version;\n\n const packKeywords = pack.keywords;\n const keywords = keywordsDifference.keywords;\n for(let i = 0, length = keywords.length; i < length; ++i) {\n const {keyword, emoticons} = keywords[i];\n packKeywords[keyword] = emoticons;\n }\n\n stateStorage.set({\n [storageKey]: pack\n });\n\n return pack;\n }, () => {\n return pack;\n });\n });\n }\n\n public getBothEmojiKeywords() {\n const promises: Promise[] = [\n this.getEmojiKeywords()\n ];\n\n if(this.networkerFactory.language !== App.langPackCode) {\n promises.push(this.getEmojiKeywords(this.networkerFactory.language));\n }\n\n if(!this.recent.native) {\n promises.push(this.getRecentEmojis('native'));\n }\n\n if(this.rootScope.premium) {\n promises.push(this.appStickersManager.preloadEmojiSets());\n }\n\n return Promise.all(promises);\n }\n\n private indexEmojis() {\n if(!this.index) {\n this.index = new SearchIndex({minChars: 2, fullWords: true});\n }\n\n for(const langCode in this.keywordLangPacks) {\n if(this.indexedLangPacks[langCode]) {\n continue;\n }\n\n const pack = this.keywordLangPacks[langCode];\n const keywords = pack.keywords;\n\n for(const keyword in keywords) {\n const emoticons = keywords[keyword];\n this.index.indexObject(emoticons, keyword);\n }\n\n this.indexedLangPacks[langCode] = true;\n }\n }\n\n private searchEmojis({q, limit = 40, minChars = 2, addCustom}: {\n q: string,\n limit?: number,\n minChars?: number,\n addCustom?: boolean,\n }) {\n this.indexEmojis();\n\n q = q.toLowerCase().replace(/_/g, ' ');\n\n // const perf = performance.now();\n let emojis: Array/* , docIds: Array */;\n if(q.trim()) {\n const set = this.index.search(q, minChars);\n emojis = Array.from(set).reduce((acc, v) => (acc.push(...v), acc), []);\n emojis.length = Math.min(40, emojis.length);\n } else {\n emojis = this.recent.native.concat(AppEmojiManager.POPULAR_EMOJI).slice(0, RECENT_MAX_LENGTH);\n emojis = filterUnique(emojis);\n }\n\n const appEmojis: AppEmoji[] = [];\n const customEmojiIndex = addCustom && this.appStickersManager.getEmojisSearchIndex();\n emojis.forEach((emoji) => {\n if(/* this.rootScope.premium && */customEmojiIndex) {\n const customEmojisResult = customEmojiIndex.search(emoji, minChars);\n const customEmojis = Array.from(customEmojisResult).map((docId) => ({docId, emoji}));\n appEmojis.push(...customEmojis);\n }\n\n appEmojis.push({emoji});\n });\n\n appEmojis.length = Math.min(limit, appEmojis.length);\n // docIds = emojis.reduce((acc, emoji) => {\n // acc.push(...customEmojiIndex.search(emoji));\n // return acc;\n // }, []);\n\n // docIds = filterUnique(docIds);\n // docIds.length = Math.min(40, docIds.length);\n\n // appEmojis.push(\n // ...(docIds || []).map((docId) => ({docId, emoji: ''})),\n // ...emojis.map((emoji) => ({emoji}))\n // );\n // console.log('searchEmojis', q, 'time', performance.now() - perf);\n\n /* for(let i = 0, length = emojis.length; i < length; ++i) {\n if(emojis[i].includes(zeroWidthJoiner) && !emojis[i].includes('\\ufe0f')) {\n emojis[i] += '\\ufe0f';\n }\n } */\n\n return appEmojis;\n }\n\n public async prepareAndSearchEmojis(options: Parameters[0]) {\n await Promise.all([\n this.getBothEmojiKeywords(),\n this.appStickersManager.preloadEmojiSets()\n ]);\n\n return this.searchEmojis(options);\n }\n\n public getRecentEmojis(type: 'custom'): Promise;\n public getRecentEmojis(type: 'native'): Promise;\n public getRecentEmojis(type: T): Promise {\n const promises = this.getRecentEmojisPromises;\n return promises[type] ??= this.appStateManager.getState().then((state) => {\n let recent: string[] | DocId[] = [];\n if(type === 'native') {\n const {recentEmoji} = state;\n recent = Array.isArray(recentEmoji) && recentEmoji.length ? recentEmoji : AppEmojiManager.POPULAR_EMOJI;\n } else {\n const {recentCustomEmoji} = state;\n recent = Array.isArray(recentCustomEmoji) && recentCustomEmoji.length ? recentCustomEmoji : [];\n }\n\n return this.recent[type] = recent as any;\n }) as any;\n }\n\n public modifyRecentEmoji(emoji: AppEmoji, add: boolean) {\n const type: EmojiType = emoji.docId ? 'custom' : 'native';\n emoji.emoji = fixEmoji(emoji.emoji);\n // @ts-ignore\n this.getRecentEmojis(type).then((recent) => {\n const i = emoji.docId || emoji.emoji;\n indexOfAndSplice(recent, i);\n if(add) recent.unshift(i);\n recent.splice(RECENT_MAX_LENGTH, recent.length - RECENT_MAX_LENGTH);\n\n this.appStateManager.pushToState(type === 'custom' ? 'recentCustomEmoji' : 'recentEmoji', recent);\n this.rootScope.dispatchEvent('emoji_recent', {emoji, deleted: !add});\n });\n }\n\n public pushRecentEmoji(emoji: AppEmoji) {\n return this.modifyRecentEmoji(emoji, true);\n }\n\n public deleteRecentEmoji(emoji: AppEmoji) {\n return this.modifyRecentEmoji(emoji, false);\n }\n\n public getCustomEmojiDocuments(docIds: DocId[]): Promise {\n if(!docIds.length) return Promise.resolve([]);\n return this.apiManager.invokeApi('messages.getCustomEmojiDocuments', {document_id: docIds}).then((documents) => {\n return documents.map((doc) => {\n return this.appDocsManager.saveDoc(doc, {\n type: 'customEmoji',\n docId: doc.id\n });\n });\n }, () => {\n return new Array(docIds.length).fill(undefined);\n });\n }\n\n public getCachedCustomEmojiDocuments(docIds: DocId[]) {\n return docIds.map((docId) => this.appDocsManager.getDoc(docId));\n }\n\n private setDebouncedGetCustomEmojiDocuments() {\n if(this.getCustomEmojiDocumentsPromise || !this.getCustomEmojiDocumentPromises.size) {\n return;\n }\n\n this.getCustomEmojiDocumentsPromise = pause(0).then(() => {\n const allIds = [...this.getCustomEmojiDocumentPromises.keys()];\n const promises: Promise[] = [];\n do {\n const ids = allIds.splice(0, 100);\n const promise = this.getCustomEmojiDocuments(ids).then((docs) => {\n docs.forEach((doc, idx) => {\n const docId = ids[idx];\n const deferred = this.getCustomEmojiDocumentPromises.get(docId);\n this.getCustomEmojiDocumentPromises.delete(docId);\n deferred.resolve(doc);\n });\n });\n\n promises.push(promise);\n } while(allIds.length);\n\n return Promise.all(promises);\n }).finally(() => {\n this.getCustomEmojiDocumentsPromise = undefined;\n this.setDebouncedGetCustomEmojiDocuments();\n });\n }\n\n public getCustomEmojiDocument(id: DocId) {\n let promise = this.getCustomEmojiDocumentPromises.get(id);\n if(promise) {\n return promise;\n }\n\n const doc = this.appDocsManager.getDoc(id);\n if(doc) {\n return doc;\n }\n\n promise = deferredPromise();\n this.getCustomEmojiDocumentPromises.set(id, promise);\n\n this.setDebouncedGetCustomEmojiDocuments();\n\n return promise;\n }\n\n public getCustomEmojis() {\n return this.appStickersManager.getEmojiStickers();\n }\n\n public getEmojiGroups(type: EmojiGroupType) {\n const pushPremiumGroup = (groups: EmojiGroup[]) => {\n if(groups.some((group) => group._ === 'emojiGroupPremium')) {\n return;\n }\n\n groups.push({\n _: 'emojiGroupPremium',\n title: 'Premium',\n icon_emoji_id: '5269590556232664327'\n });\n };\n\n return this.emojiGroups[type] ??= this.apiManager.invokeApiSingleProcess({\n method: type === 'esg' || type === 'stickers' ? 'messages.getEmojiGroups' : (type === 'status' ? 'messages.getEmojiStatusGroups' : 'messages.getEmojiProfilePhotoGroups'),\n params: {hash: 0},\n processResult: async(messagesEmojiGroups) => {\n assumeType(messagesEmojiGroups);\n\n // * until layer 179\n if(type === 'esg' || type === 'stickers') {\n pushPremiumGroup(messagesEmojiGroups.groups);\n }\n\n const documents = await Promise.all(messagesEmojiGroups.groups.map((emojiGroup) => this.getCustomEmojiDocument(emojiGroup.icon_emoji_id)));\n return this.emojiGroups[type] = messagesEmojiGroups.groups.map((group, idx) => {\n return {group, document: documents[idx]};\n });\n }\n });\n }\n\n public searchCustomEmoji(emoticon: string) {\n return this.apiManager.invokeApiCacheable(\n 'messages.searchCustomEmoji',\n {hash: 0, emoticon},\n {cacheSeconds: 3600, syncIfHasResult: true}\n ) as MaybePromise;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/evgeny-nadymov/telegram-react\n * Copyright (C) 2018 Evgeny Nadymov\n * https://github.com/evgeny-nadymov/telegram-react/blob/master/LICENSE\n */\n\nimport type GroupCallConnectionInstance from '../calls/groupCallConnectionInstance';\nimport safeReplaceObject from '../../helpers/object/safeReplaceObject';\nimport {nextRandomUint} from '../../helpers/random';\nimport {DataJSON, GroupCall, GroupCallParticipant, GroupCallParticipantVideoSourceGroup, GroupCallStreamChannel, InputFileLocation, InputGroupCall, PhoneJoinGroupCall, PhoneJoinGroupCallPresentation, Update, Updates} from '../../layer';\nimport {logger} from '../logger';\nimport {NULL_PEER_ID} from '../mtproto/mtproto_config';\nimport {AppManager} from './manager';\nimport getPeerId from './utils/peers/getPeerId';\nimport {DcId} from '../../types';\nimport assumeType from '../../helpers/assumeType';\n\nexport type GroupCallId = GroupCall['id'];\nexport type MyGroupCall = GroupCall | InputGroupCall;\n\nexport type GroupCallConnectionType = 'main' | 'presentation';\n\nexport type JoinGroupCallJsonPayload = {\n fingerprints: {\n fingerprint: string;\n setup: string;\n hash: string;\n }[];\n pwd: string;\n ssrc: number;\n 'ssrc-groups': GroupCallParticipantVideoSourceGroup.groupCallParticipantVideoSourceGroup[];\n ufrag: string;\n};\n\nconst GET_PARTICIPANTS_LIMIT = 100;\n\nexport type GroupCallOutputSource = 'main' | 'presentation' | number;\n\nexport interface GroupCallRtmpState {\n channels: GroupCallStreamChannel[];\n dcId: DcId;\n time: number;\n}\n\nexport interface CallRecordParams {\n name: string;\n recordVideo: boolean;\n videoHorizontal: boolean;\n}\n\nexport class AppGroupCallsManager extends AppManager {\n private log: ReturnType;\n\n private groupCalls: Map;\n private participants: Map>;\n private nextOffsets: Map;\n\n private cachedStreamChannels: Map>;\n\n // private doNotDispatchParticipantUpdate: PeerId;\n\n protected after() {\n this.log = logger('GROUP-CALLS');\n\n this.groupCalls = new Map();\n this.participants = new Map();\n this.nextOffsets = new Map();\n\n this.cachedStreamChannels = new Map();\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateGroupCall: (update) => {\n this.saveGroupCall(update.call, update.chat_id);\n },\n\n updateGroupCallParticipants: (update) => {\n this.saveGroupCall(update.call);\n\n // this.getGroupCallFull(update.call.id, true); // ! WARNING TEMP\n\n const groupCallId = update.call.id;\n this.saveApiParticipants(groupCallId, update.participants);\n }\n });\n\n this.rootScope.addEventListener('group_call_update', (groupCall) => {\n if(groupCall._ === 'groupCallDiscarded') {\n this.participants.delete(groupCall.id);\n }\n });\n }\n\n public getCachedParticipants(groupCallId: GroupCallId) {\n let participants = this.participants.get(groupCallId);\n if(!participants) {\n this.participants.set(groupCallId, participants = new Map());\n }\n\n return participants;\n }\n\n private prepareToSavingNextOffset(groupCallId: GroupCallId) {\n const nextOffsetsMap = this.nextOffsets;\n\n const setNextOffset = (newNextOffset: string) => {\n if(nextOffsetsMap.get(groupCallId) === nextOffset) {\n nextOffsetsMap.set(groupCallId, newNextOffset);\n }\n };\n\n const nextOffset = nextOffsetsMap.get(groupCallId);\n return {\n nextOffset,\n setNextOffset\n };\n }\n\n public saveApiParticipant(groupCallId: GroupCallId, participant: GroupCallParticipant, skipCounterUpdating?: boolean) {\n const participants = this.getCachedParticipants(groupCallId);\n\n const peerId = getPeerId(participant.peer);\n\n const oldParticipant = participants.get(peerId);\n const hasLeft = participant.pFlags.left;\n if(!oldParticipant && hasLeft) {\n return;\n }\n\n // * fix missing flag\n if(!participant.pFlags.muted && !participant.pFlags.can_self_unmute) {\n participant.pFlags.can_self_unmute = true;\n }\n\n if(oldParticipant) {\n safeReplaceObject(oldParticipant, participant);\n participant = oldParticipant;\n } else {\n participants.set(peerId, participant);\n }\n\n // if(!skipCounterUpdating) {\n const groupCall = this.getGroupCall(groupCallId);\n if(groupCall?._ === 'groupCall') {\n let modified = false;\n if(hasLeft) {\n --groupCall.participants_count;\n modified = true;\n } else if(participant.pFlags.just_joined && !oldParticipant && !participant.pFlags.self) {\n ++groupCall.participants_count;\n modified = true;\n }\n\n if(modified) {\n this.rootScope.dispatchEvent('group_call_update', groupCall);\n }\n }\n // }\n\n if(hasLeft) {\n participants.delete(peerId);\n }\n\n if(oldParticipant || true/* && this.doNotDispatchParticipantUpdate !== peerId */) {\n this.rootScope.dispatchEvent('group_call_participant', {\n groupCallId,\n participant\n });\n }\n }\n\n public saveApiParticipants(groupCallId: GroupCallId, apiParticipants: GroupCallParticipant[], skipCounterUpdating?: boolean) {\n if((apiParticipants as any).saved) return;\n (apiParticipants as any).saved = true;\n apiParticipants.forEach((p) => this.saveApiParticipant(groupCallId, p, skipCounterUpdating));\n }\n\n public async editParticipant(groupCallId: GroupCallId, participant: GroupCallParticipant, options: Partial<{\n muted: boolean,\n volume: number,\n raiseHand: boolean,\n videoStopped: boolean,\n videoPaused: boolean,\n presentationPaused: boolean\n }>) {\n this.saveApiParticipant(groupCallId, participant);\n\n const peerId = participant.pFlags.self ? NULL_PEER_ID : getPeerId(participant.peer);\n const updates = await this.apiManager.invokeApiSingle('phone.editGroupCallParticipant', {\n call: this.getGroupCallInput(groupCallId),\n participant: peerId === NULL_PEER_ID ? this.appPeersManager.getInputPeerSelf() : this.appPeersManager.getInputPeerById(peerId),\n muted: options.muted,\n volume: options.volume,\n raise_hand: options.raiseHand,\n video_paused: options.videoPaused,\n video_stopped: options.videoStopped,\n presentation_paused: options.presentationPaused\n });\n\n // do not replace with peerId because it can be null\n // if(!processUpdate) this.doNotDispatchParticipantUpdate = getPeerId(participant.peer);\n this.apiUpdatesManager.processUpdateMessage(updates);\n // if(!processUpdate) this.doNotDispatchParticipantUpdate = undefined;\n }\n\n public getGroupCall(id: GroupCallId) {\n return this.groupCalls.get(id);\n }\n\n public async getGroupCallFull(id: GroupCallId, override?: boolean): Promise {\n const call = this.getGroupCall(id);\n if(call && call._ !== 'inputGroupCall' && !override) {\n return call;\n }\n\n const limit = this.getCachedParticipants(id).size ? 0 : GET_PARTICIPANTS_LIMIT;\n return this.apiManager.invokeApiSingleProcess({\n method: 'phone.getGroupCall',\n params: {\n call: this.getGroupCallInput(id),\n limit\n },\n processResult: (groupCall) => {\n // ? maybe I should save group call after participants so I can avoid passing the 'skipCounterUpdating' flag ?\n this.appUsersManager.saveApiUsers(groupCall.users);\n this.appChatsManager.saveApiChats(groupCall.chats);\n this.saveApiParticipants(id, groupCall.participants, true);\n const call = this.saveGroupCall(groupCall.call) as GroupCall;\n\n if(limit && this.nextOffsets.get(id) === undefined) {\n this.nextOffsets.set(id, groupCall.participants_next_offset);\n }\n\n return call;\n }\n });\n }\n\n public saveGroupCall(call: MyGroupCall, chatId?: ChatId) {\n const oldCall = this.groupCalls.get(call.id);\n const shouldUpdate = call._ !== 'inputGroupCall' && (!oldCall || oldCall._ !== 'groupCallDiscarded');\n if(oldCall) {\n if(shouldUpdate) {\n safeReplaceObject(oldCall, call);\n }\n\n call = oldCall;\n } else {\n this.groupCalls.set(call.id, call);\n }\n\n if(shouldUpdate) {\n this.rootScope.dispatchEvent('group_call_update', call as any);\n }\n\n return call;\n }\n\n public async createGroupCall(chatId: ChatId, scheduleDate?: number, title?: string, rtmp = false) {\n const updates = await this.apiManager.invokeApi('phone.createGroupCall', {\n peer: this.appPeersManager.getInputPeerById(chatId.toPeerId(true)),\n random_id: nextRandomUint(32),\n schedule_date: scheduleDate,\n title,\n rtmp_stream: rtmp\n });\n\n this.apiUpdatesManager.processUpdateMessage(updates);\n\n const update = (updates as Updates.updates).updates.find((update) => update._ === 'updateGroupCall') as Update.updateGroupCall;\n return update.call;\n }\n\n public getGroupCallInput(id: GroupCallId): InputGroupCall {\n const groupCall = this.getGroupCall(id);\n if(!groupCall) throw new Error(`Group call ${id} not found`);\n return {\n _: 'inputGroupCall',\n id: groupCall.id,\n access_hash: groupCall.access_hash\n };\n }\n\n // public generateSelfParticipant(): GroupCallParticipant {\n // const mainSources = this.currentGroupCall.connections.main.sources;\n // const presentationSources = this.currentGroupCall.connections.presentation?.sources;\n // return {\n // _: 'groupCallParticipant',\n // pFlags: {\n // can_self_unmute: true,\n // self: true\n // },\n // source: mainSources.audio.source,\n // video: this.generateSelfVideo(mainSources.video),\n // presentation: presentationSources && this.generateSelfVideo(presentationSources.video, presentationSources.audio?.source),\n // date: tsNow(true),\n // peer: this.appPeersManager.getOutputPeer(rootScope.myId)\n // };\n // }\n\n public async getGroupCallParticipants(id: GroupCallId) {\n const {nextOffset, setNextOffset} = this.prepareToSavingNextOffset(id);\n\n if(nextOffset !== '') {\n await this.apiManager.invokeApiSingleProcess({\n method: 'phone.getGroupParticipants',\n params: {\n call: this.getGroupCallInput(id),\n ids: [],\n sources: [],\n offset: nextOffset || '',\n limit: GET_PARTICIPANTS_LIMIT\n },\n processResult: (groupCallParticipants) => {\n const newNextOffset = groupCallParticipants.count === groupCallParticipants.participants.length ? '' : groupCallParticipants.next_offset;\n\n this.appChatsManager.saveApiChats(groupCallParticipants.chats);\n this.appUsersManager.saveApiUsers(groupCallParticipants.users);\n this.saveApiParticipants(id, groupCallParticipants.participants);\n\n setNextOffset(newNextOffset);\n }\n });\n }\n\n return {\n participants: this.getCachedParticipants(id),\n isEnd: this.nextOffsets.get(id) === ''\n };\n }\n\n public hangUp(id: GroupCallId, discard?: boolean | number) {\n const groupCallInput = this.getGroupCallInput(id);\n let promise: Promise;\n if(typeof(discard) === 'boolean' && discard) {\n promise = this.apiManager.invokeApi('phone.discardGroupCall', {\n call: groupCallInput\n });\n } else if(typeof(discard) === 'number') {\n promise = this.apiManager.invokeApi('phone.leaveGroupCall', {\n call: groupCallInput,\n source: discard\n });\n } else {\n promise = this.apiManager.invokeApi('phone.joinGroupCall', {\n call: groupCallInput,\n join_as: this.appPeersManager.getInputPeerSelf(),\n muted: true,\n video_stopped: true,\n params: {\n _: 'dataJSON',\n data: ''\n }\n });\n }\n\n return promise.then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n\n public async joinGroupCall(groupCallId: GroupCallId, params: DataJSON, options: GroupCallConnectionInstance['options']) {\n const groupCallInput = this.getGroupCallInput(groupCallId);\n let promise: Promise;\n if(options.type === 'main') {\n const request: PhoneJoinGroupCall = {\n call: groupCallInput,\n join_as: this.appPeersManager.getInputPeerSelf(),\n params,\n muted: options.isMuted,\n video_stopped: !options.joinVideo\n };\n\n promise = this.apiManager.invokeApi('phone.joinGroupCall', request);\n this.log(`[api] joinGroupCall id=${groupCallId}`, request);\n } else {\n const request: PhoneJoinGroupCallPresentation = {\n call: groupCallInput,\n params\n };\n\n promise = this.apiManager.invokeApi('phone.joinGroupCallPresentation', request);\n this.log(`[api] joinGroupCallPresentation id=${groupCallId}`, request);\n }\n\n const updates = await promise;\n this.apiUpdatesManager.processUpdateMessage(updates);\n\n const update = (updates as Updates.updates).updates.find((update) => update._ === 'updateGroupCallConnection') as Update.updateGroupCallConnection;\n return update;\n }\n\n public leaveGroupCallPresentation(groupCallId: GroupCallId) {\n return this.apiManager.invokeApi('phone.leaveGroupCallPresentation', {\n call: this.getGroupCallInput(groupCallId)\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n\n public async _fetchRtmpState(call: InputGroupCall, retry = 0, dcId?: DcId): Promise {\n const full = await this.getGroupCallFull(call.id);\n if(full._ === 'groupCallDiscarded') {\n throw new Error('Group call discarded');\n }\n\n dcId ??= full.stream_dc_id || await this.apiManager.getBaseDcId();\n\n try {\n const res = await this.apiManager.invokeApi('phone.getGroupCallStreamChannels', {call}, {dcId});\n return {\n channels: res.channels,\n dcId,\n time: Date.now()\n };\n } catch(error) {\n assumeType(error);\n\n if(error.code === 400 && error.type.indexOf('CALL_MIGRATE') === 0) {\n const dcId = +error.type.match(/^(CALL_MIGRATE_)(\\d+)/)[2] as DcId;\n return this._fetchRtmpState(call, retry, dcId);\n }\n\n if(error.type === 'GROUPCALL_INVALID' && retry < 3) {\n // this sometimes happens for some reason. retry\n return this._fetchRtmpState(call, retry + 1);\n }\n\n throw error;\n }\n }\n\n public fetchRtmpState(call: InputGroupCall, overwrite?: boolean) {\n const cached = this.cachedStreamChannels.get(call.id);\n if(cached && !overwrite) {\n return cached;\n }\n\n const promise = this._fetchRtmpState(call);\n promise.finally(() => {\n setTimeout(() => {\n if(this.cachedStreamChannels.get(call.id) === promise) {\n this.cachedStreamChannels.delete(call.id);\n }\n }, 1000);\n });\n this.cachedStreamChannels.set(call.id, promise);\n return promise;\n }\n\n public fetchRtmpPart(location: InputFileLocation.inputGroupCallStream, dcId: number) {\n // return Promise.reject(makeError('TIME_TOO_BIG'));\n return this.apiFileManager.requestFilePart({\n dcId,\n location,\n offset: 0,\n limit: 512 * 1024,\n priority: 32,\n floodMaxTimeout: 0\n });\n }\n\n public fetchRtmpUrl(peerId: PeerId, revoke = false) {\n return this.apiManager.invokeApi('phone.getGroupCallStreamRtmpUrl', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n revoke\n });\n }\n\n public async startRecording(call: InputGroupCall, params: CallRecordParams) {\n const updates = await this.apiManager.invokeApi('phone.toggleGroupCallRecord', {\n start: true,\n call,\n video: params.recordVideo,\n video_portrait: params.videoHorizontal,\n title: params.name || undefined\n });\n\n this.apiUpdatesManager.processUpdateMessage(updates);\n }\n\n public async stopRecording(call: InputGroupCall) {\n const updates = await this.apiManager.invokeApi('phone.toggleGroupCallRecord', {\n start: false,\n call\n });\n\n this.apiUpdatesManager.processUpdateMessage(updates);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {InputPhoto} from '../../../../layer';\nimport {MyPhoto} from '../../appPhotosManager';\n\nexport default function getPhotoInput(photo: MyPhoto): InputPhoto.inputPhoto {\n return {\n _: 'inputPhoto',\n id: photo.id,\n access_hash: photo.access_hash,\n file_reference: photo.file_reference\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {InputMedia} from '../../../../layer';\nimport {MyPhoto} from '../../appPhotosManager';\nimport getPhotoInput from './getPhotoInput';\n\nexport default function getPhotoMediaInput(photo: MyPhoto): InputMedia.inputMediaPhoto {\n return {\n _: 'inputMediaPhoto',\n id: getPhotoInput(photo),\n ttl_seconds: 0,\n pFlags: {}\n };\n}\n","import {MessagesBotResults} from '../../../../layer';\n\nexport default function generateQId(queryId: MessagesBotResults.messagesBotResults['query_id'], resultId: string) {\n return queryId + '_' + resultId;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Document, InputMedia} from '../../../../layer';\n\nexport default function getMediaInput(doc: Document.document): InputMedia.inputMediaDocument {\n return {\n _: 'inputMediaDocument',\n id: {\n _: 'inputDocument',\n id: doc.id,\n access_hash: doc.access_hash,\n file_reference: doc.file_reference\n },\n ttl_seconds: 0,\n pFlags: {}\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {MyDocument} from './appDocsManager';\nimport type {MyPhoto} from './appPhotosManager';\nimport type {MyTopPeer} from './appUsersManager';\nimport type {AppMessagesManager} from './appMessagesManager';\nimport {BotInlineResult, GeoPoint, InputGeoPoint, MessageMedia} from '../../layer';\nimport insertInDescendSortedArray from '../../helpers/array/insertInDescendSortedArray';\nimport {AppManager} from './manager';\nimport getPhotoMediaInput from './utils/photos/getPhotoMediaInput';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\nimport generateQId from './utils/inlineBots/generateQId';\nimport getDocumentMediaInput from './utils/docs/getDocumentMediaInput';\n\nexport class AppInlineBotsManager extends AppManager {\n private inlineResults: {[queryAndResultIds: string]: BotInlineResult} = {};\n private setHash: {\n [botId: UserId]: {\n peerId: PeerId,\n time: number\n }\n } = {};\n\n public getGeoInput(geo: GeoPoint): InputGeoPoint {\n return geo._ === 'geoPoint' ? {\n _: 'inputGeoPoint',\n lat: geo.lat,\n long: geo.long,\n accuracy_radius: geo.accuracy_radius\n } : {\n _: 'inputGeoPointEmpty'\n };\n }\n\n public getInlineResults(peerId: PeerId, botId: BotId, query = '', offset = '', geo?: GeoPoint) {\n return this.apiManager.invokeApi('messages.getInlineBotResults', {\n bot: this.appUsersManager.getUserInput(botId),\n peer: this.appPeersManager.getInputPeerById(peerId),\n query,\n geo_point: geo ? this.getGeoInput(geo) : undefined,\n offset\n }, {/* timeout: 1, */stopTime: -1, noErrorBox: true}).then((botResults) => {\n const queryId = botResults.query_id;\n\n /* if(botResults.switch_pm) {\n botResults.switch_pm.rText = wrapRichText(botResults.switch_pm.text, {noLinebreaks: true, noLinks: true});\n } */\n\n botResults.results.forEach((result) => {\n if(result._ === 'botInlineMediaResult') {\n result.document = this.appDocsManager.saveDoc(result.document);\n result.photo = this.appPhotosManager.savePhoto(result.photo);\n } else {\n result.content = this.appWebDocsManager.saveWebDocument(result.content);\n result.thumb = this.appWebDocsManager.saveWebDocument(result.thumb);\n }\n\n this.inlineResults[generateQId(queryId, result.id)] = result;\n });\n\n return botResults;\n });\n }\n\n private pushPopularBot(botId: BotId) {\n this.appUsersManager.getTopPeers('bots_inline').then((topPeers) => {\n const botPeerId = botId.toPeerId();\n const index = topPeers.findIndex((topPeer) => topPeer.id === botPeerId);\n let topPeer: MyTopPeer;\n if(index !== -1) {\n topPeer = topPeers[index];\n } else {\n topPeer = {\n id: botPeerId,\n rating: 0\n };\n }\n\n ++topPeer.rating;\n insertInDescendSortedArray(topPeers, topPeer, 'rating');\n\n this.appStateManager.setKeyValueToStorage('topPeersCache');\n\n // rootScope.$broadcast('inline_bots_popular')\n });\n }\n\n public switchToPM(fromPeerId: PeerId, botId: BotId, startParam: string) {\n this.setHash[botId] = {peerId: fromPeerId, time: Date.now()};\n return this.appMessagesManager.startBot(botId, undefined, startParam);\n }\n\n /*\n function resolveInlineMention (username) {\n return AppPeersManager.resolveUsername(username).then(function (peerId) {\n if (peerId.isUser()) {\n var bot = AppUsersManager.getUser(peerId)\n if (bot.pFlags.bot && bot.bot_inline_placeholder !== undefined) {\n var resolvedBot = {\n username: username,\n id: peerId,\n placeholder: bot.bot_inline_placeholder\n }\n if (bot.pFlags.bot_inline_geo &&\n GeoLocationManager.isAvailable()) {\n return checkGeoLocationAccess(peerId).then(function () {\n return GeoLocationManager.getPosition().then(function (coords) {\n resolvedBot.geo = coords\n return qSync.when(resolvedBot)\n })\n })['catch'](function () {\n return qSync.when(resolvedBot)\n })\n }\n return qSync.when(resolvedBot)\n }\n }\n return $q.reject()\n }, function (error) {\n error.handled = true\n return $q.reject(error)\n })\n }\n\n function regroupWrappedResults (results, rowW, rowH) {\n if (!results ||\n !results[0] ||\n ['photo', 'gif', 'sticker'].indexOf(results[0].type) === -1) {\n return\n }\n var ratios = []\n angular.forEach(results, function (result) {\n var w\n var h, doc\n var photo\n if (result._ === 'botInlineMediaResult') {\n if (doc = result.document) {\n w = result.document.w\n h = result.document.h\n }\n else if (photo = result.photo) {\n var photoSize = (photo.sizes || [])[0]\n w = photoSize && photoSize.w\n h = photoSize && photoSize.h\n }\n }else {\n w = result.w\n h = result.h\n }\n if (!w || !h) {\n w = h = 1\n }\n ratios.push(w / h)\n })\n\n var rows = []\n var curCnt = 0\n var curW = 0\n angular.forEach(ratios, function (ratio) {\n var w = ratio * rowH\n curW += w\n if (!curCnt || curCnt < 4 && curW < (rowW * 1.1)) {\n curCnt++\n } else {\n rows.push(curCnt)\n curCnt = 1\n curW = w\n }\n })\n if (curCnt) {\n rows.push(curCnt)\n }\n\n var i = 0\n var thumbs = []\n var lastRowI = rows.length - 1\n angular.forEach(rows, function (rowCnt, rowI) {\n var lastRow = rowI === lastRowI\n var curRatios = ratios.slice(i, i + rowCnt)\n var sumRatios = 0\n angular.forEach(curRatios, function (ratio) {\n sumRatios += ratio\n })\n angular.forEach(curRatios, function (ratio, j) {\n var thumbH = rowH\n var thumbW = rowW * ratio / sumRatios\n var realW = thumbH * ratio\n if (lastRow && thumbW > realW) {\n thumbW = realW\n }\n var result = results[i + j]\n result.thumbW = Math.floor(thumbW) - 2\n result.thumbH = Math.floor(thumbH) - 2\n })\n\n i += rowCnt\n })\n } */\n\n public async checkSwitchReturn(botId: BotId) {\n const bot = this.appUsersManager.getUser(botId);\n if(!bot || !bot.pFlags.bot || !bot.bot_inline_placeholder) {\n return;\n }\n\n const peerData = this.setHash[botId];\n if(peerData) {\n delete this.setHash[botId];\n if((Date.now() - peerData.time) < 3600e3) {\n return peerData.peerId;\n }\n }\n }\n\n public switchInlineQuery(peerId: PeerId, threadId: number, botId: BotId, query: string) {\n const message = '@' + this.appPeersManager.getPeerUsername(botId.toPeerId()) + ' ' + query;\n this.appDraftsManager.setDraft(peerId, threadId, message);\n }\n\n public callbackButtonClick(peerId: PeerId, mid: number, button: any) {\n return this.apiManager.invokeApi('messages.getBotCallbackAnswer', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(mid),\n data: button.data\n }, {/* timeout: 1, */stopTime: -1, noErrorBox: true});\n }\n\n /* function gameButtonClick (id) {\n var message = AppMessagesManager.getMessage(id)\n var peerId = AppMessagesManager.getMessagePeer(message)\n\n return MtpApiManager.invokeApi('messages.getBotCallbackAnswer', {\n peer: AppPeersManager.getInputPeerByID(peerId),\n msg_id: AppMessagesIDsManager.getMessageLocalID(id)\n }, {timeout: 1, stopTime: -1, noErrorBox: true}).then(function (callbackAnswer) {\n if (typeof callbackAnswer.message === 'string' &&\n callbackAnswer.message.length) {\n showCallbackMessage(callbackAnswer.message, callbackAnswer.pFlags.alert)\n }\n else if (typeof callbackAnswer.url === 'string') {\n AppGamesManager.openGame(message.media.game.id, id, callbackAnswer.url)\n }\n })\n } */\n\n public sendInlineResult(\n peerId: PeerId,\n botId: BotId,\n queryAndResultIds: string,\n options: Parameters[0] = {}\n ) {\n const inlineResult = this.inlineResults[queryAndResultIds];\n if(!inlineResult) {\n return;\n }\n\n this.pushPopularBot(botId);\n const splitted = queryAndResultIds.split('_');\n const queryId = splitted.shift();\n const resultId = splitted.join('_');\n options.viaBotId = botId;\n options.queryId = queryId;\n options.resultId = resultId;\n if(inlineResult.send_message.reply_markup) {\n options.replyMarkup = inlineResult.send_message.reply_markup;\n }\n\n if(inlineResult.send_message._ === 'botInlineMessageText') {\n this.appMessagesManager.sendText({\n ...options,\n peerId,\n text: inlineResult.send_message.message,\n entities: inlineResult.send_message.entities\n });\n } else {\n let caption = '';\n let inputMedia: Parameters[0]['inputMedia'], messageMedia: MessageMedia;\n const sendMessage = inlineResult.send_message;\n switch(sendMessage._) {\n case 'botInlineMessageMediaAuto': {\n caption = sendMessage.message;\n\n if(inlineResult._ === 'botInlineMediaResult') {\n const {document, photo} = inlineResult;\n if(document) {\n inputMedia = getDocumentMediaInput(document as MyDocument);\n } else {\n inputMedia = getPhotoMediaInput(photo as MyPhoto);\n }\n } else {\n const webDocument = inlineResult.content || inlineResult.thumb;\n\n if(webDocument) {\n if(inlineResult.type === 'photo') {\n inputMedia = {\n _: 'inputMediaPhotoExternal',\n pFlags: {},\n url: webDocument.url\n };\n } else {\n inputMedia = {\n _: 'inputMediaDocumentExternal',\n pFlags: {},\n url: webDocument.url\n };\n }\n\n options.webDocument = webDocument;\n }\n }\n\n break;\n }\n\n case 'botInlineMessageMediaGeo': {\n inputMedia = {\n _: 'inputMediaGeoPoint',\n geo_point: this.getGeoInput(sendMessage.geo)\n };\n\n options.geoPoint = sendMessage.geo;\n\n break;\n }\n\n case 'botInlineMessageMediaVenue': {\n inputMedia = {\n _: 'inputMediaVenue',\n geo_point: this.getGeoInput(sendMessage.geo),\n title: sendMessage.title,\n address: sendMessage.address,\n provider: sendMessage.provider,\n venue_id: sendMessage.venue_id,\n venue_type: sendMessage.venue_type\n };\n\n options.geoPoint = sendMessage.geo;\n\n break;\n }\n\n case 'botInlineMessageMediaContact': {\n inputMedia = {\n _: 'inputMediaContact',\n phone_number: sendMessage.phone_number,\n first_name: sendMessage.first_name,\n last_name: sendMessage.last_name,\n vcard: sendMessage.vcard\n };\n\n break;\n }\n\n case 'botInlineMessageMediaInvoice': {\n // const photo = sendMessage.photo;\n // inputMedia = {\n // _: 'inputMediaInvoice',\n // description: sendMessage.description,\n // title: sendMessage.title,\n // photo: photo && {\n // _: 'inputWebDocument',\n // attributes: photo.attributes,\n // mime_type: photo.mime_type,\n // size: photo.size,\n // url: photo.url\n // },\n // invoice: undefined,\n // payload: undefined,\n // provider: undefined,\n // provider_data: undefined,\n // start_param: undefined\n // };\n\n messageMedia = {\n _: 'messageMediaInvoice',\n title: sendMessage.title,\n description: sendMessage.description,\n photo: sendMessage.photo,\n currency: sendMessage.currency,\n total_amount: sendMessage.total_amount,\n pFlags: {\n shipping_address_requested: sendMessage.pFlags.shipping_address_requested,\n test: sendMessage.pFlags.test\n },\n start_param: undefined\n };\n\n break;\n }\n }\n\n if(!inputMedia && messageMedia) {\n inputMedia = {\n _: 'messageMediaPending',\n messageMedia\n };\n }\n\n this.appMessagesManager.sendOther({...options, peerId, inputMedia});\n }\n }\n\n /* function checkGeoLocationAccess (botID) {\n var key = 'bot_access_geo' + botID\n return Storage.get(key).then(function (geoAccess) {\n if (geoAccess && geoAccess.granted) {\n return true\n }\n return ErrorService.confirm({\n type: 'BOT_ACCESS_GEO_INLINE'\n }).then(function () {\n var setHash = {}\n setHash[key] = {granted: true, time: tsNow()}\n Storage.set(setHash)\n return true\n }, function () {\n var setHash = {}\n setHash[key] = {denied: true, time: tsNow()}\n Storage.set(setHash)\n return $q.reject()\n })\n })\n } */\n}\n","import {MESSAGE_ID_OFFSET} from '../../../mtproto/mtproto_config';\n\nexport default function isLegacyMessageId(messageId: number) {\n return typeof(messageId) === 'number' && messageId < MESSAGE_ID_OFFSET;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MESSAGE_ID_OFFSET} from '../mtproto/mtproto_config';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\nimport isLegacyMessageId from './utils/messageId/isLegacyMessageId';\n\nexport class AppMessagesIdsManager {\n // private channelLocals: {[channelId: ChatId]: number} = {};\n // private channelsByLocals: {[local: number]: ChatId} = {};\n // private channelCurLocal = 0;\n\n public generateTempMessageId(messageId: number, channelId: ChatId) {\n return +(this.generateMessageId(messageId, channelId) + 0.0001).toFixed(4);\n }\n\n public generateMessageId(messageId: number, channelId?: ChatId) {\n if(\n !channelId ||\n !Number.isInteger(messageId) ||\n messageId <= 0\n ) {\n return messageId;\n }\n\n messageId = getServerMessageId(messageId);\n // let localStart = this.channelLocals[channelId];\n const localStart = MESSAGE_ID_OFFSET;\n // if(!localStart) {\n // localStart = ++this.channelCurLocal * MESSAGE_ID_OFFSET;\n // this.channelsByLocals[localStart] = channelId;\n // this.channelLocals[channelId] = localStart;\n // }\n\n return localStart + messageId;\n }\n\n public incrementMessageId(messageId: number, increment: number) {\n return this.generateMessageId(getServerMessageId(messageId) + increment, isLegacyMessageId(messageId) ? 1 : 0);\n }\n\n public getMessageIdInfo(mid: number, channelId?: ChatId) {\n const messageId = getServerMessageId(mid);\n return {messageId, channelId: mid === messageId ? undefined : channelId};\n // if(mid === messageId) {\n // return {messageId, channelId: undefined as number};\n // }\n\n // const channelId = this.channelsByLocals[mid - messageId];\n // return {messageId, channelId};\n }\n\n public splitMessageIdsByChannels(mids: number[], _channelId?: ChatId) {\n const out: Array<[ChatId, {mids: number[], messageIds: number[]}]> = [];\n let prevItem: typeof out[0];\n for(let i = 0, length = mids.length; i < length; ++i) {\n const mid = mids[i];\n const {messageId, channelId} = this.getMessageIdInfo(mid, _channelId);\n if(!prevItem || prevItem[0] !== channelId) {\n prevItem = [channelId, {mids: [], messageIds: []}];\n out.push(prevItem);\n }\n\n prevItem[1].mids.push(mid);\n prevItem[1].messageIds.push(messageId);\n }\n\n return out;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport indexOfAndSplice from '../helpers/array/indexOfAndSplice';\nimport {Middleware} from '../helpers/middleware';\nimport throttle from '../helpers/schedulers/throttle';\nimport {logger, LogTypes} from '../lib/logger';\n\nconst PARALLEL_LIMIT = 8;\nconst IGNORE_ERRORS: Set = new Set(['NO_ENTRY_FOUND', 'STORAGE_OFFLINE', 'MIDDLEWARE', 'NO_AUTO_DOWNLOAD']);\n\nexport type LazyLoadElementBase = {\n load: () => Promise,\n middleware?: Middleware\n};\n\nexport default class LazyLoadQueueBase {\n public queueId = 0;\n protected queue: Array = [];\n protected inProcess: Set = new Set();\n\n protected lockPromise: Promise = null;\n protected unlockResolve: () => void = null;\n\n protected log = logger('LL', LogTypes.Error);\n protected processQueue: () => void;\n\n constructor(protected parallelLimit = PARALLEL_LIMIT) {\n this.processQueue = throttle(() => this._processQueue(), 8, false);\n }\n\n public clear() {\n this.inProcess.clear(); // ацтеки забьются, будет плохо\n\n this.queue.length = 0;\n // unreachable code\n /* for(let item of this.inProcess) {\n this.lazyLoadMedia.push(item);\n } */\n }\n\n public lock() {\n if(this.lockPromise) return;\n\n // const perf = performance.now();\n this.lockPromise = new Promise((resolve, reject) => {\n this.unlockResolve = resolve;\n });\n\n /* if(DEBUG) {\n this.lockPromise.then(() => {\n this.log('was locked for:', performance.now() - perf);\n });\n } */\n }\n\n public unlock() {\n if(!this.unlockResolve) return;\n\n this.unlockResolve();\n this.unlockResolve = this.lockPromise = null;\n\n this.processQueue();\n }\n\n protected async processItem(item: LazyLoadElementBase) {\n if(this.lockPromise) {\n return;\n }\n\n this.inProcess.add(item);\n\n /* if(DEBUG) {\n this.log('will load media', this.lockPromise, item);\n } */\n\n try {\n // await new Promise((resolve) => setTimeout(resolve, 2e3));\n // await new Promise((resolve, reject) => window.requestAnimationFrame(() => window.requestAnimationFrame(resolve)));\n // await item.load(item.div);\n await this.loadItem(item);\n } catch(err) {\n if(!IGNORE_ERRORS.has((err as ApiError)?.type)) {\n this.log.error('loadMediaQueue error:', err/* , item */);\n }\n }\n\n this.inProcess.delete(item);\n\n /* if(DEBUG) {\n this.log('loaded media', item);\n } */\n\n this.processQueue();\n }\n\n protected loadItem(item: LazyLoadElementBase) {\n return item.load();\n }\n\n protected getItem() {\n return this.queue.shift();\n }\n\n protected addElement(method: 'push' | 'unshift', el: LazyLoadElementBase) {\n this.queue[method](el);\n this.processQueue();\n }\n\n protected _processQueue(item?: LazyLoadElementBase) {\n if(!this.queue.length || this.lockPromise || (this.parallelLimit > 0 && this.inProcess.size >= this.parallelLimit)) return;\n\n // console.log('_processQueue start');\n // let added = 0;\n do {\n if(item) {\n indexOfAndSplice(this.queue, item);\n } else {\n item = this.getItem();\n }\n\n if(item) {\n this.processItem(item);\n } else {\n break;\n }\n\n item = null;\n // ++added;\n } while(this.inProcess.size < this.parallelLimit && this.queue.length);\n // console.log('_processQueue end, added', added, this.queue.length);\n }\n\n public push(el: LazyLoadElementBase) {\n this.addElement('push', el);\n }\n\n public unshift(el: LazyLoadElementBase) {\n this.addElement('unshift', el);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport indexOfAndSplice from './array/indexOfAndSplice';\nimport makeError from './makeError';\n\nexport type Middleware = {\n (): boolean;\n create(): MiddlewareHelper;\n onClean: (callback: VoidFunction) => void;\n onDestroy: (callback: VoidFunction) => void;\n};\n\nconst createDetails = (): {\n cleaned?: boolean,\n inner: MiddlewareHelper[],\n onCleanCallbacks: VoidFunction[],\n middleware?: Middleware\n} => ({\n cleaned: false,\n inner: [],\n onCleanCallbacks: []\n});\n\nconst MIDDLEWARE_ERROR = makeError('MIDDLEWARE');\n\n// * onClean == cancel promises, etc\n// * onDestroy == destructor\nexport class MiddlewareHelper {\n private details = createDetails();\n private onDestroyCallbacks: VoidFunction[] = [];\n private parent: MiddlewareHelper;\n private destroyed: boolean;\n\n public clean() {\n const details = this.details;\n details.cleaned = true;\n details.inner.splice(0, details.inner.length).forEach((helper) => helper.destroy());\n details.onCleanCallbacks.splice(0, details.onCleanCallbacks.length).forEach((callback) => callback());\n details.middleware = undefined;\n this.details = createDetails();\n }\n\n public destroy() {\n this.destroyed = true;\n this.clean();\n this.onDestroyCallbacks.splice(0, this.onDestroyCallbacks.length).forEach((callback) => callback());\n\n if(this.parent) {\n indexOfAndSplice(this.parent.details.inner, this);\n this.parent = undefined;\n }\n }\n\n private createMiddlewareForDetails(details: ReturnType, additionalCallback?: () => boolean) {\n const middleware: Middleware = () => {\n return !details.cleaned && (!additionalCallback || additionalCallback());\n };\n\n middleware.create = () => {\n if(!middleware()) throw MIDDLEWARE_ERROR;\n const helper = getMiddleware();\n helper.parent = this;\n details.inner.push(helper);\n return helper;\n };\n\n middleware.onClean = (callback) => {\n if(!middleware()) return callback();\n details.onCleanCallbacks.push(callback);\n };\n\n middleware.onDestroy = this.onDestroy;\n\n return middleware;\n }\n\n public get(additionalCallback?: () => boolean) {\n const details = this.details;\n if(details.cleaned) {\n return this.createMiddlewareForDetails(details);\n }\n\n if(additionalCallback) {\n return this.createMiddlewareForDetails(details, additionalCallback);\n }\n\n return details.middleware ??= this.createMiddlewareForDetails(details);\n }\n\n public onDestroy = (callback: VoidFunction) => {\n if(this.destroyed) return callback();\n this.onDestroyCallbacks.push(callback);\n };\n}\n\n// * will change .cleaned and new instance will be created\nexport function getMiddleware() {\n return new MiddlewareHelper();\n}\n","export default function getObjectKeysAndSort(object: {[key: string]: any} | Map, sort: 'asc' | 'desc' = 'asc') {\n if(!object) return [];\n const ids = object instanceof Map ? [...object.keys()] : Object.keys(object).map((i) => +i);\n if(sort === 'asc') return ids.sort((a, b) => a - b);\n else return ids.sort((a, b) => b - a);\n}\n","export default function splitStringByLength(str: string, maxLength: number) {\n if(str.length < maxLength) return [str];\n let length = 0, lastSliceStartIndex = 0, arrayIndex = 0;\n const delimiter = ' ';// '\\n';\n const out: string[] = [];\n\n const cut = (end?: number) => {\n let part = str.slice(lastSliceStartIndex, end);\n const _arrayIndex = arrayIndex++;\n if(part.length > maxLength) {\n const overflowPart = part.slice(maxLength);\n const splitted = splitStringByLength(overflowPart, maxLength);\n splitted.forEach((part) => {\n out[arrayIndex++] = part;\n });\n\n part = part.slice(0, maxLength);\n }\n\n lastSliceStartIndex = end;\n length = 0;\n out[_arrayIndex] = (out[_arrayIndex] || '') + part;\n };\n\n let lastIndex = 0;\n do {\n let index = str.indexOf(delimiter, lastIndex);\n if(index === -1) {\n if(lastIndex !== (str.length - 1)) {\n cut();\n }\n\n break;\n }\n\n index += delimiter.length;\n\n const partLength = index - lastIndex;\n if((length + partLength) > maxLength) {\n cut(length);\n }\n\n lastIndex = index;\n length += partLength;\n } while(true);\n\n return out;\n}\n","// * Jolly Cobra's schedulers\n\nimport ctx from '../../environment/ctx';\nimport {AnyFunction, Awaited} from '../../types';\nimport noop from '../noop';\n\nexport type DebounceReturnType = {\n (...args: Parameters): Promise>>;\n clearTimeout(): void;\n isDebounced(): boolean;\n};\n\nexport default function debounce(\n fn: F,\n ms: number,\n shouldRunFirst = true,\n shouldRunLast = true\n): DebounceReturnType {\n let waitingTimeout: number;\n let waitingPromise: Promise>>, resolve: (result: any) => void, reject: () => void;\n let hadNewCall = false;\n\n const invoke = (args: Parameters) => {\n const _resolve = resolve, _reject = reject;\n try {\n const result = fn.apply(null, args);\n _resolve(result);\n } catch(err) {\n console.error('debounce error', err);\n // @ts-ignore\n _reject(err);\n }\n };\n\n const debounce = (...args: Parameters) => {\n if(!waitingPromise) waitingPromise = new Promise((_resolve, _reject) => (resolve = _resolve, reject = _reject));\n\n if(waitingTimeout) {\n clearTimeout(waitingTimeout);\n hadNewCall = true;\n reject();\n waitingPromise = new Promise((_resolve, _reject) => (resolve = _resolve, reject = _reject));\n } else if(shouldRunFirst) {\n invoke(args);\n hadNewCall = false;\n }\n\n const _waitingTimeout = ctx.setTimeout(() => {\n // will run if should run last or first but with new call\n if(shouldRunLast && (!shouldRunFirst || hadNewCall)) {\n invoke(args);\n }\n\n // if debounce was called during invoking\n if(waitingTimeout === _waitingTimeout) {\n waitingTimeout = waitingPromise = resolve = reject = undefined;\n hadNewCall = false;\n }\n }, ms);\n\n waitingTimeout = _waitingTimeout;\n waitingPromise.catch(noop);\n return waitingPromise;\n };\n\n debounce.clearTimeout = () => {\n if(waitingTimeout) {\n ctx.clearTimeout(waitingTimeout);\n reject();\n waitingTimeout = waitingPromise = resolve = reject = undefined;\n hadNewCall = false;\n }\n };\n\n debounce.isDebounced = () => !!waitingTimeout;\n\n return debounce;\n}\n","import {URL_REG_EXP} from '.';\n\nexport default function matchUrl(text: string) {\n return !text ? null : text.match(URL_REG_EXP);\n}\n","import {AvailableReaction, Reaction} from '../../../../layer';\n\nexport default function availableReactionToReaction(availableReaction: AvailableReaction): Reaction.reactionEmoji {\n return {\n _: 'reactionEmoji',\n emoticon: availableReaction.reaction\n };\n}\n","import deepEqual from '../../../../helpers/object/deepEqual';\nimport {AvailableReaction, Reaction} from '../../../../layer';\nimport availableReactionToReaction from './availableReactionToReaction';\n\nexport default function reactionsEqual(r1: Reaction | AvailableReaction, r2: Reaction | AvailableReaction) {\n if(typeof(r1) !== typeof(r2)) {\n return false;\n }\n\n [r1, r2] = [r1, r2].map((r) => {\n return r._ === 'availableReaction' ? availableReactionToReaction(r) : r;\n });\n\n return deepEqual(r1, r2);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDocument} from '../../appDocsManager';\nimport type {MyInputMessagesFilter, MyMessage} from '../../appMessagesManager';\nimport {Message, MessageMedia, MessageEntity, MessageAction, Reaction} from '../../../../layer';\nimport matchUrl from '../../../richTextProcessor/matchUrl';\nimport reactionsEqual from '../reactions/reactionsEqual';\n\nexport default function filterMessagesByInputFilter({\n inputFilter,\n messages,\n limit,\n savedReaction\n}: {\n inputFilter: MyInputMessagesFilter,\n messages: Array,\n limit: number,\n savedReaction?: (Reaction.reactionEmoji | Reaction.reactionCustomEmoji)[]\n}) {\n if(inputFilter === 'inputMessagesFilterEmpty' && !savedReaction) {\n return messages.slice(0, limit);\n }\n\n const foundMsgs: MyMessage[] = [];\n if(!messages.length) {\n return foundMsgs;\n }\n\n let filtering = true;\n const neededContents: Partial<{\n [messageMediaType in MessageMedia['_']]: boolean\n }> & Partial<{\n avatar: boolean,\n url: boolean\n }> = {},\n neededDocTypes: MyDocument['type'][] = [],\n // excludeDocTypes: MyDocument['type'][] = [],\n neededFlags: (keyof Message.message['pFlags'])[] = [];\n\n switch(inputFilter) {\n case 'inputMessagesFilterPhotos':\n neededContents['messageMediaPhoto'] = true;\n break;\n\n case 'inputMessagesFilterPhotoVideo':\n neededContents['messageMediaPhoto'] = true;\n neededContents['messageMediaDocument'] = true;\n neededDocTypes.push('video');\n break;\n\n case 'inputMessagesFilterVideo':\n neededContents['messageMediaDocument'] = true;\n neededDocTypes.push('video');\n break;\n\n case 'inputMessagesFilterDocument':\n neededContents['messageMediaDocument'] = true;\n // excludeDocTypes.push('video');\n neededDocTypes.push(undefined, 'photo', 'pdf');\n break;\n\n case 'inputMessagesFilterVoice':\n neededContents['messageMediaDocument'] = true;\n neededDocTypes.push('voice');\n break;\n\n case 'inputMessagesFilterRoundVoice':\n neededContents['messageMediaDocument'] = true;\n neededDocTypes.push('round', 'voice');\n break;\n\n case 'inputMessagesFilterRoundVideo':\n neededContents['messageMediaDocument'] = true;\n neededDocTypes.push('round');\n break;\n\n case 'inputMessagesFilterMusic':\n neededContents['messageMediaDocument'] = true;\n neededDocTypes.push('audio');\n break;\n\n case 'inputMessagesFilterUrl':\n neededContents['url'] = true;\n break;\n\n case 'inputMessagesFilterChatPhotos':\n neededContents['avatar'] = true;\n break;\n\n case 'inputMessagesFilterPinned':\n neededFlags.push('pinned');\n break;\n\n /* case 'inputMessagesFilterMyMentions':\n neededContents['mentioned'] = true;\n break; */\n\n default:\n filtering = false;\n break;\n /* return Promise.resolve({\n count: 0,\n next_rate: 0,\n history: [] as number[]\n }); */\n }\n\n if(!filtering && !savedReaction?.length) {\n return foundMsgs;\n }\n\n for(let i = 0, length = messages.length; i < length; ++i) {\n const message: Message.message | Message.messageService = messages[i];\n if(!message) continue;\n\n // || (neededContents['mentioned'] && message.totalEntities.find((e: any) => e._ === 'messageEntityMention'));\n\n let found = !filtering;\n if(neededFlags?.some((flag) => (message as any as Message.message).pFlags[flag])) {\n found = true;\n } else if(message._ === 'message') {\n if(message.media && neededContents[message.media._]/* && !message.fwd_from */) {\n const doc = (message.media as MessageMedia.messageMediaDocument).document as MyDocument;\n if(doc &&\n (\n (neededDocTypes.length && !neededDocTypes.includes(doc.type))/* ||\n excludeDocTypes.includes(doc.type) */\n )\n ) {\n continue;\n }\n\n found = true;\n } else if(neededContents['url'] && message.message) {\n const goodEntities = ['messageEntityTextUrl', 'messageEntityUrl'];\n if((message.totalEntities as MessageEntity[]).find((e) => goodEntities.includes(e._)) || matchUrl(message.message)) {\n found = true;\n }\n }\n\n if(found && savedReaction) {\n const results = message.reactions?.results;\n found = results ? savedReaction.every((reaction) => {\n return results.some((reactionCount) => reactionsEqual(reactionCount.reaction, reaction));\n }) : false;\n }\n } else if(\n neededContents['avatar'] &&\n message.action &&\n ([\n 'messageActionChannelEditPhoto' as const,\n 'messageActionChatEditPhoto' as const,\n 'messageActionChannelEditVideo' as const,\n 'messageActionChatEditVideo' as const\n ] as MessageAction['_'][]).includes(message.action._)\n ) {\n found = true;\n }\n\n if(found && foundMsgs.push(message) >= limit) {\n break;\n }\n }\n\n return foundMsgs;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport tabId from '../config/tabId';\n\nlet uploadId = 0;\nexport default function getFileNameForUpload(file: File | Blob) {\n let fileName: string;\n const mimeType = file?.type;\n if(mimeType) { // the same like apiFileName in appMessagesManager for upload!\n const ext = `${tabId}_${uploadId++}.${mimeType.split('/')[1]}`;\n\n if(['image/jpeg', 'image/png', 'image/bmp'].indexOf(mimeType) >= 0) {\n fileName = 'photo' + ext;\n } else if(mimeType.indexOf('audio/') === 0 || ['video/ogg'].indexOf(mimeType) >= 0) {\n fileName = 'audio' + ext;\n } else if(mimeType.indexOf('video/') === 0) {\n fileName = 'video' + ext;\n } else {\n fileName = 'document' + ext;\n }\n } else {\n fileName = `upload-${tabId}_${uploadId++}`;\n }\n\n return fileName;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {TabState} from '../mtproto/mtprotoworker';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport MTProtoMessagePort from '../mtproto/mtprotoMessagePort';\n\ntype Tab = {\n source: MessageEventSource,\n state: TabState\n};\n\nexport class AppTabsManager {\n private tabs: Map;\n\n constructor() {\n this.tabs = new Map();\n }\n\n public start() {\n const port = MTProtoMessagePort.getInstance();\n\n port.addEventListener('tabState', (state, source) => {\n const tab = this.tabs.get(source);\n tab.state = state;\n });\n }\n\n public getTabs() {\n return [...this.tabs.values()].filter((tab) => !!tab.state);\n }\n\n public addTab(source: MessageEventSource) {\n const tab: Tab = {\n source,\n state: undefined\n };\n\n this.tabs.set(source, tab);\n }\n\n public deleteTab(source: MessageEventSource) {\n this.tabs.delete(source);\n }\n}\n\nconst appTabsManager = new AppTabsManager();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.appTabsManager = appTabsManager);\nexport default appTabsManager;\n","import assumeType from '../../../../helpers/assumeType';\nimport {Message} from '../../../../layer';\n\nexport default function getGroupedText(messages: Message.message[]) {\n let foundMessages = 0, message: Message.message;\n for(const m of messages) {\n assumeType(m);\n if(m.message) {\n if(++foundMessages > 1) break;\n message = m;\n }\n }\n\n if(foundMessages > 1) {\n message = undefined;\n }\n\n return message;\n}\n","import {MyDocument} from '../../appDocsManager';\nimport {VideoSize} from '../../../../layer';\n\nexport default function getStickerEffectThumb(doc: MyDocument) {\n return doc.video_thumbs?.[0] as Extract;\n}\n","import {InputDocument} from '../../../../layer';\nimport type {MyDocument} from '../../appDocsManager';\n\nexport default function getDocumentInput(doc: MyDocument): InputDocument {\n return {\n _: 'inputDocument',\n id: doc.id,\n access_hash: doc.access_hash,\n file_reference: doc.file_reference\n };\n}\n","export default function setBooleanFlag(obj: T, key: keyof T, value: boolean) {\n // @ts-ignore\n if(value) obj[key] = true;\n else delete obj[key];\n}\n","import {Message} from '../../../../layer';\nimport {GENERAL_TOPIC_ID} from '../../../mtproto/mtproto_config';\nimport getPeerId from '../peers/getPeerId';\n\nexport default function getMessageThreadId(message: Message.message | Message.messageService, isForum?: boolean) {\n let threadId: number;\n const replyTo = message.reply_to;\n const savedPeerId = (message as Message.message).saved_peer_id && getPeerId((message as Message.message).saved_peer_id);\n if(savedPeerId) {\n threadId = savedPeerId;\n } else if(replyTo?._ === 'messageReplyHeader' && (!isForum || replyTo.pFlags.forum_topic)) {\n threadId = replyTo.reply_to_top_id || replyTo.reply_to_msg_id;\n } else if(isForum) {\n if(message._ === 'messageService' && message.action?._ === 'messageActionTopicCreate') {\n threadId = message.mid;\n } else {\n threadId = GENERAL_TOPIC_ID;\n }\n }\n\n return threadId;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\n// From https://github.com/stephenmathieson/node-tlds/blob/master/index.js\nconst TLD = ['abogado', 'ac', 'academy', 'accountants', 'active', 'actor', 'ad', 'adult', 'ae', 'aero', 'af', 'ag', 'agency', 'ai', 'airforce', 'al', 'allfinanz', 'alsace', 'am', 'amsterdam', 'an', 'android', 'ao', 'apartments', 'aq', 'aquarelle', 'ar', 'archi', 'army', 'arpa', 'as', 'asia', 'associates', 'at', 'attorney', 'au', 'auction', 'audio', 'autos', 'aw', 'ax', 'axa', 'az', 'ba', 'band', 'bank', 'bar', 'barclaycard', 'barclays', 'bargains', 'bayern', 'bb', 'bd', 'be', 'beer', 'berlin', 'best', 'bf', 'bg', 'bh', 'bi', 'bid', 'bike', 'bingo', 'bio', 'biz', 'bj', 'black', 'blackfriday', 'bloomberg', 'blue', 'bm', 'bmw', 'bn', 'bnpparibas', 'bo', 'boo', 'boutique', 'br', 'brussels', 'bs', 'bt', 'budapest', 'build', 'builders', 'business', 'buzz', 'bv', 'bw', 'by', 'bz', 'bzh', 'ca', 'cab', 'cal', 'camera', 'camp', 'cancerresearch', 'canon', 'capetown', 'capital', 'caravan', 'cards', 'care', 'career', 'careers', 'cartier', 'casa', 'cash', 'cat', 'catering', 'cc', 'cd', 'center', 'ceo', 'cern', 'cf', 'cg', 'ch', 'channel', 'chat', 'cheap', 'christmas', 'chrome', 'church', 'ci', 'citic', 'city', 'ck', 'cl', 'claims', 'cleaning', 'click', 'clinic', 'clothing', 'club', 'cm', 'cn', 'co', 'coach', 'codes', 'coffee', 'college', 'cologne', 'com', 'community', 'company', 'computer', 'condos', 'construction', 'consulting', 'contractors', 'cooking', 'cool', 'coop', 'country', 'cr', 'credit', 'creditcard', 'cricket', 'crs', 'cruises', 'cu', 'cuisinella', 'cv', 'cw', 'cx', 'cy', 'cymru', 'cz', 'dabur', 'dad', 'dance', 'dating', 'day', 'dclk', 'de', 'deals', 'degree', 'delivery', 'democrat', 'dental', 'dentist', 'desi', 'design', 'dev', 'diamonds', 'diet', 'digital', 'direct', 'directory', 'discount', 'dj', 'dk', 'dm', 'dnp', 'do', 'docs', 'domains', 'doosan', 'durban', 'dvag', 'dz', 'eat', 'ec', 'edu', 'education', 'ee', 'eg', 'email', 'emerck', 'energy', 'engineer', 'engineering', 'enterprises', 'equipment', 'er', 'es', 'esq', 'estate', 'et', 'eu', 'eurovision', 'eus', 'events', 'everbank', 'exchange', 'expert', 'exposed', 'fail', 'farm', 'fashion', 'feedback', 'fi', 'finance', 'financial', 'firmdale', 'fish', 'fishing', 'fit', 'fitness', 'fj', 'fk', 'flights', 'florist', 'flowers', 'flsmidth', 'fly', 'fm', 'fo', 'foo', 'forsale', 'foundation', 'fr', 'frl', 'frogans', 'fund', 'furniture', 'futbol', 'ga', 'gal', 'gallery', 'garden', 'gb', 'gbiz', 'gd', 'ge', 'gent', 'gf', 'gg', 'ggee', 'gh', 'gi', 'gift', 'gifts', 'gives', 'gl', 'glass', 'gle', 'global', 'globo', 'gm', 'gmail', 'gmo', 'gmx', 'gn', 'goog', 'google', 'gop', 'gov', 'gp', 'gq', 'gr', 'graphics', 'gratis', 'green', 'gripe', 'gs', 'gt', 'gu', 'guide', 'guitars', 'guru', 'gw', 'gy', 'hamburg', 'hangout', 'haus', 'healthcare', 'help', 'here', 'hermes', 'hiphop', 'hiv', 'hk', 'hm', 'hn', 'holdings', 'holiday', 'homes', 'horse', 'host', 'hosting', 'house', 'how', 'hr', 'ht', 'hu', 'ibm', 'id', 'ie', 'ifm', 'il', 'im', 'immo', 'immobilien', 'in', 'industries', 'info', 'ing', 'ink', 'institute', 'insure', 'int', 'international', 'investments', 'io', 'iq', 'ir', 'irish', 'is', 'it', 'iwc', 'jcb', 'je', 'jetzt', 'jm', 'jo', 'jobs', 'joburg', 'jp', 'juegos', 'kaufen', 'kddi', 'ke', 'kg', 'kh', 'ki', 'kim', 'kitchen', 'kiwi', 'km', 'kn', 'koeln', 'kp', 'kr', 'krd', 'kred', 'kw', 'ky', 'kyoto', 'kz', 'la', 'lacaixa', 'land', 'lat', 'latrobe', 'lawyer', 'lb', 'lc', 'lds', 'lease', 'legal', 'lgbt', 'li', 'lidl', 'life', 'lighting', 'limited', 'limo', 'link', 'lk', 'loans', 'london', 'lotte', 'lotto', 'lr', 'ls', 'lt', 'ltda', 'lu', 'luxe', 'luxury', 'lv', 'ly', 'ma', 'madrid', 'maison', 'management', 'mango', 'market', 'marketing', 'marriott', 'mc', 'md', 'me', 'media', 'meet', 'melbourne', 'meme', 'memorial', 'menu', 'mg', 'mh', 'miami', 'mil', 'mini', 'mk', 'ml', 'mm', 'mn', 'mo', 'mobi', 'moda', 'moe', 'monash', 'money', 'mormon', 'mortgage', 'moscow', 'motorcycles', 'mov', 'mp', 'mq', 'mr', 'ms', 'mt', 'mu', 'museum', 'mv', 'mw', 'mx', 'my', 'mz', 'na', 'nagoya', 'name', 'navy', 'nc', 'ne', 'net', 'network', 'neustar', 'new', 'nexus', 'nf', 'ng', 'ngo', 'nhk', 'ni', 'nico', 'ninja', 'nl', 'no', 'np', 'nr', 'nra', 'nrw', 'ntt', 'nu', 'nyc', 'nz', 'okinawa', 'om', 'one', 'ong', 'onl', 'ooo', 'org', 'organic', 'osaka', 'otsuka', 'ovh', 'pa', 'paris', 'partners', 'parts', 'party', 'pe', 'pf', 'pg', 'ph', 'pharmacy', 'photo', 'photography', 'photos', 'physio', 'pics', 'pictures', 'pink', 'pizza', 'pk', 'pl', 'place', 'plumbing', 'pm', 'pn', 'pohl', 'poker', 'porn', 'post', 'pr', 'praxi', 'press', 'pro', 'prod', 'productions', 'prof', 'properties', 'property', 'ps', 'pt', 'pub', 'pw', 'py', 'qa', 'qpon', 'quebec', 're', 'realtor', 'recipes', 'red', 'rehab', 'reise', 'reisen', 'reit', 'ren', 'rentals', 'repair', 'report', 'republican', 'rest', 'restaurant', 'reviews', 'rich', 'rio', 'rip', 'ro', 'rocks', 'rodeo', 'rs', 'rsvp', 'ru', 'ruhr', 'rw', 'ryukyu', 'sa', 'saarland', 'sale', 'samsung', 'sarl', 'saxo', 'sb', 'sc', 'sca', 'scb', 'schmidt', 'schule', 'schwarz', 'science', 'scot', 'sd', 'se', 'services', 'sew', 'sexy', 'sg', 'sh', 'shiksha', 'shoes', 'shriram', 'si', 'singles', 'sj', 'sk', 'sky', 'sl', 'sm', 'sn', 'so', 'social', 'software', 'sohu', 'solar', 'solutions', 'soy', 'space', 'spiegel', 'sr', 'st', 'style', 'su', 'supplies', 'supply', 'support', 'surf', 'surgery', 'suzuki', 'sv', 'sx', 'sy', 'sydney', 'systems', 'sz', 'taipei', 'tatar', 'tattoo', 'tax', 'tc', 'td', 'technology', 'tel', 'temasek', 'tennis', 'tf', 'tg', 'th', 'tienda', 'tips', 'tires', 'tirol', 'tj', 'tk', 'tl', 'tm', 'tn', 'to', 'today', 'tokyo', 'tools', 'top', 'toshiba', 'town', 'toys', 'tp', 'tr', 'trade', 'training', 'travel', 'trust', 'tt', 'tui', 'tv', 'tw', 'tz', 'ua', 'ug', 'uk', 'university', 'uno', 'uol', 'us', 'uy', 'uz', 'va', 'vacations', 'vc', 've', 'vegas', 'ventures', 'versicherung', 'vet', 'vg', 'vi', 'viajes', 'video', 'villas', 'vision', 'vlaanderen', 'vn', 'vodka', 'vote', 'voting', 'voto', 'voyage', 'vu', 'wales', 'wang', 'watch', 'webcam', 'website', 'wed', 'wedding', 'wf', 'whoswho', 'wien', 'wiki', 'williamhill', 'wme', 'work', 'works', 'world', 'ws', 'wtc', 'wtf', '佛山', '集团', '在线', '한국', 'ভারত', '八卦', 'موقع', '公益', '公司', '移动', '我爱你', 'москва', 'қаз', 'онлайн', 'сайт', 'срб', '淡马锡', 'орг', '삼성', 'சிங்கப்பூர்', '商标', '商店', '商城', 'дети', 'мкд', '中文网', '中信', '中国', '中國', '谷歌', 'భారత్', 'ලංකා', 'ભારત', 'भारत', '网店', 'संगठन', '网络', 'укр', '香港', '台湾', '台灣', '手机', 'мон', 'الجزائر', 'عمان', 'ایران', 'امارات', 'بازار', 'الاردن', 'بھارت', 'المغرب', 'السعودية', 'مليسيا', 'شبكة', 'გე', '机构', '组织机构', 'ไทย', 'سورية', 'рус', 'рф', 'تونس', 'みんな', 'グーグル', '世界', 'ਭਾਰਤ', '网址', '游戏', 'vermögensberater', 'vermögensberatung', '企业', 'مصر', 'قطر', '广东', 'இலங்கை', 'இந்தியா', '新加坡', 'فلسطين', '政务', 'xxx', 'xyz', 'yachts', 'yandex', 'ye', 'yoga', 'yokohama', 'youtube', 'yt', 'za', 'zip', 'zm', 'zone', 'zuerich', 'zw'];\n\nexport default TLD;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nexport default function checkBrackets(url: string) {\n var urlLength = url.length;\n var urlOpenBrackets = url.split('(').length - 1;\n var urlCloseBrackets = url.split(')').length - 1;\n while(urlCloseBrackets > urlOpenBrackets &&\n url.charAt(urlLength - 1) === ')') {\n url = url.substr(0, urlLength - 1)\n urlCloseBrackets--;\n urlLength--;\n }\n if(urlOpenBrackets > urlCloseBrackets) {\n url = url.replace(/\\)+$/, '');\n }\n return url;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {EMOJI_VERSION} from '../environment/emojiVersionsSupport';\n\nexport const EmojiVersions: {[version in EMOJI_VERSION]: {[emoji: string]: number}} = {'14':{'1f6dd':4867, '1f6de':4916, '1f6df':4923, '1f7f0':62832, '1f979':183, '1f9cc':1557, '1fa7b':61332, '1fa7c':61330, '1faa9':51093, '1faaa':61364, '1faab':61189, '1faac':51085, '1fab7':2651, '1fab8':2631, '1fab9':2672, '1faba':2673, '1fac3':1520, '1fac4':1521, '1fac5':1505, '1fad7':3793, '1fad8':3707, '1fad9':3804, '1fae0':111, '1fae1':136, '1fae2':132, '1fae3':133, '1fae4':174, '1fae5':142, '1fae6':1385, '1fae7':61353, '1faf0':1341, '1faf1':1332, '1faf2':1333, '1faf3':1334, '1faf4':1335, '1faf5':1351, '1faf6':1360, '1faf1-1f3fb-200d-1faf2-1f3fc':0, '1faf1-1f3fb-200d-1faf2-1f3fd':0, '1faf1-1f3fb-200d-1faf2-1f3fe':0, '1faf1-1f3fb-200d-1faf2-1f3ff':0, '1faf1-1f3fc-200d-1faf2-1f3fb':0, '1faf1-1f3fc-200d-1faf2-1f3fd':0, '1faf1-1f3fc-200d-1faf2-1f3fe':0, '1faf1-1f3fc-200d-1faf2-1f3ff':0, '1faf1-1f3fd-200d-1faf2-1f3fb':0, '1faf1-1f3fd-200d-1faf2-1f3fc':0, '1faf1-1f3fd-200d-1faf2-1f3fe':0, '1faf1-1f3fd-200d-1faf2-1f3ff':0, '1faf1-1f3fe-200d-1faf2-1f3fb':0, '1faf1-1f3fe-200d-1faf2-1f3fc':0, '1faf1-1f3fe-200d-1faf2-1f3fd':0, '1faf1-1f3fe-200d-1faf2-1f3ff':0, '1faf1-1f3ff-200d-1faf2-1f3fb':0, '1faf1-1f3ff-200d-1faf2-1f3fc':0, '1faf1-1f3ff-200d-1faf2-1f3fd':0, '1faf1-1f3ff-200d-1faf2-1f3fe':0, '1fac3-1f3fb':0, '1fac3-1f3fc':0, '1fac3-1f3fd':0, '1fac3-1f3fe':0, '1fac3-1f3ff':0, '1fac4-1f3fb':0, '1fac4-1f3fc':0, '1fac4-1f3fd':0, '1fac4-1f3fe':0, '1fac4-1f3ff':0, '1fac5-1f3fb':0, '1fac5-1f3fc':0, '1fac5-1f3fd':0, '1fac5-1f3fe':0, '1fac5-1f3ff':0, '1faf0-1f3fb':0, '1faf0-1f3fc':0, '1faf0-1f3fd':0, '1faf0-1f3fe':0, '1faf0-1f3ff':0, '1faf1-1f3fb':0, '1faf1-1f3fc':0, '1faf1-1f3fd':0, '1faf1-1f3fe':0, '1faf1-1f3ff':0, '1faf2-1f3fb':0, '1faf2-1f3fc':0, '1faf2-1f3fd':0, '1faf2-1f3fe':0, '1faf2-1f3ff':0, '1faf3-1f3fb':0, '1faf3-1f3fc':0, '1faf3-1f3fd':0, '1faf3-1f3fe':0, '1faf3-1f3ff':0, '1faf4-1f3fb':0, '1faf4-1f3fc':0, '1faf4-1f3fd':0, '1faf4-1f3fe':0, '1faf4-1f3ff':0, '1faf5-1f3fb':0, '1faf5-1f3fc':0, '1faf5-1f3fd':0, '1faf5-1f3fe':0, '1faf5-1f3ff':0, '1faf6-1f3fb':0, '1faf6-1f3fc':0, '1faf6-1f3fd':0, '1faf6-1f3fe':0, '1faf6-1f3ff':0}, '':{'2049':62835, '2122':62863, '2139':62888, '2194':62764, '2195':62763, '2196':62762, '2197':62756, '2198':62758, '2199':62760, '2328':61194, '2600':4990, '2601':4998, '2602':41013, '2603':41018, '2604':41020, '2611':62851, '2614':41014, '2615':3781, '2618':2667, '2620':1106, '2622':62753, '2623':62754, '2626':62783, '2638':62780, '2639':177, '2648':62788, '2649':62789, '2650':62796, '2651':62797, '2652':62798, '2653':62799, '2660':51095, '2663':51098, '2665':51096, '2666':51097, '2668':4865, '2692':61297, '2693':4922, '2694':61300, '2696':61311, '2697':61319, '2699':61309, '2702':61284, '2705':62850, '2708':4931, '2709':61245, '2712':61259, '2714':62852, '2716':62828, '2721':62779, '2728':51029, '2733':62858, '2734':62859, '2744':41017, '2747':62860, '2753':62836, '2754':62837, '2755':62838, '2757':62839, '2763':1137, '2764':1141, '2795':62829, '2796':62830, '2797':62831, '2934':62767, '2935':62768, '3030':62840, '3297':62912, '3299':62913, '0023-20e3':62864, '002a-20e3':62865, '0030-20e3':62866, '0031-20e3':62867, '0032-20e3':62868, '0033-20e3':62869, '0034-20e3':62870, '0035-20e3':62871, '0036-20e3':62872, '0037-20e3':62873, '0038-20e3':62874, '0039-20e3':62875, '00a9':62861, '00ae':62862, '1f004':51101, '1f0cf':51100, '1f170':62882, '1f171':62884, '1f17e':62893, '1f17f':62895, '1f18e':62883, '1f191':62885, '1f192':62886, '1f193':62887, '1f194':62889, '1f195':62891, '1f196':62892, '1f197':62894, '1f198':62896, '1f199':62897, '1f19a':62898, '1f1e6-1f1e8':71594, '1f1e6-1f1e9':71595, '1f1e6-1f1ea':71596, '1f1e6-1f1eb':71597, '1f1e6-1f1ec':71598, '1f1e6-1f1ee':71599, '1f1e6-1f1f1':71600, '1f1e6-1f1f2':71601, '1f1e6-1f1f4':71602, '1f1e6-1f1f6':71603, '1f1e6-1f1f7':71604, '1f1e6-1f1f8':71605, '1f1e6-1f1f9':71606, '1f1e6-1f1fa':71607, '1f1e6-1f1fc':71608, '1f1e6-1f1fd':71609, '1f1e6-1f1ff':71610, '1f1e7-1f1e6':71611, '1f1e7-1f1e7':71612, '1f1e7-1f1e9':71613, '1f1e7-1f1ea':71614, '1f1e7-1f1eb':71615, '1f1e7-1f1ec':71616, '1f1e7-1f1ed':71617, '1f1e7-1f1ee':71618, '1f1e7-1f1ef':71619, '1f1e7-1f1f1':71620, '1f1e7-1f1f2':71621, '1f1e7-1f1f3':71622, '1f1e7-1f1f4':71623, '1f1e7-1f1f6':71624, '1f1e7-1f1f7':71625, '1f1e7-1f1f8':71626, '1f1e7-1f1f9':71627, '1f1e7-1f1fb':71628, '1f1e7-1f1fc':71629, '1f1e7-1f1fe':71630, '1f1e7-1f1ff':71631, '1f1e8-1f1e6':71632, '1f1e8-1f1e8':71633, '1f1e8-1f1e9':71634, '1f1e8-1f1eb':71635, '1f1e8-1f1ec':71636, '1f1e8-1f1ed':71637, '1f1e8-1f1ee':71638, '1f1e8-1f1f0':71639, '1f1e8-1f1f1':71640, '1f1e8-1f1f2':71641, '1f1e8-1f1f3':71642, '1f1e8-1f1f4':71643, '1f1e8-1f1f5':71644, '1f1e8-1f1f7':71645, '1f1e8-1f1fa':71646, '1f1e8-1f1fb':71647, '1f1e8-1f1fc':71648, '1f1e8-1f1fd':71649, '1f1e8-1f1fe':71650, '1f1e8-1f1ff':71651, '1f1e9-1f1ea':71652, '1f1e9-1f1ec':71653, '1f1e9-1f1ef':71654, '1f1e9-1f1f0':71655, '1f1e9-1f1f2':71656, '1f1e9-1f1f4':71657, '1f1e9-1f1ff':71658, '1f1ea-1f1e6':71659, '1f1ea-1f1e8':71660, '1f1ea-1f1ea':71661, '1f1ea-1f1ec':71662, '1f1ea-1f1ed':71663, '1f1ea-1f1f7':71664, '1f1ea-1f1f8':71665, '1f1ea-1f1f9':71666, '1f1ea-1f1fa':71667, '1f1eb-1f1ee':71668, '1f1eb-1f1ef':71669, '1f1eb-1f1f0':71670, '1f1eb-1f1f2':71671, '1f1eb-1f1f4':71672, '1f1eb-1f1f7':71673, '1f1ec-1f1e6':71674, '1f1ec-1f1e7':71675, '1f1ec-1f1e9':71676, '1f1ec-1f1ea':71677, '1f1ec-1f1eb':71678, '1f1ec-1f1ec':71679, '1f1ec-1f1ed':71680, '1f1ec-1f1ee':71681, '1f1ec-1f1f1':71682, '1f1ec-1f1f2':71683, '1f1ec-1f1f3':71684, '1f1ec-1f1f5':71685, '1f1ec-1f1f6':71686, '1f1ec-1f1f7':71687, '1f1ec-1f1f8':71688, '1f1ec-1f1f9':71689, '1f1ec-1f1fa':71690, '1f1ec-1f1fc':71691, '1f1ec-1f1fe':71692, '1f1ed-1f1f0':71693, '1f1ed-1f1f2':71694, '1f1ed-1f1f3':71695, '1f1ed-1f1f7':71696, '1f1ed-1f1f9':71697, '1f1ed-1f1fa':71698, '1f1ee-1f1e8':71699, '1f1ee-1f1e9':71700, '1f1ee-1f1ea':71701, '1f1ee-1f1f1':71702, '1f1ee-1f1f2':71703, '1f1ee-1f1f3':71704, '1f1ee-1f1f4':71705, '1f1ee-1f1f6':71706, '1f1ee-1f1f7':71707, '1f1ee-1f1f8':71708, '1f1ee-1f1f9':71709, '1f1ef-1f1ea':71710, '1f1ef-1f1f2':71711, '1f1ef-1f1f4':71712, '1f1ef-1f1f5':71713, '1f1f0-1f1ea':71714, '1f1f0-1f1ec':71715, '1f1f0-1f1ed':71716, '1f1f0-1f1ee':71717, '1f1f0-1f1f2':71718, '1f1f0-1f1f3':71719, '1f1f0-1f1f5':71720, '1f1f0-1f1f7':71721, '1f1f0-1f1fc':71722, '1f1f0-1f1fe':71723, '1f1f0-1f1ff':71724, '1f1f1-1f1e6':71725, '1f1f1-1f1e7':71726, '1f1f1-1f1e8':71727, '1f1f1-1f1ee':71728, '1f1f1-1f1f0':71729, '1f1f1-1f1f7':71730, '1f1f1-1f1f8':71731, '1f1f1-1f1f9':71732, '1f1f1-1f1fa':71733, '1f1f1-1f1fb':71734, '1f1f1-1f1fe':71735, '1f1f2-1f1e6':71736, '1f1f2-1f1e8':71737, '1f1f2-1f1e9':71738, '1f1f2-1f1ea':71739, '1f1f2-1f1eb':71740, '1f1f2-1f1ec':71741, '1f1f2-1f1ed':71742, '1f1f2-1f1f0':71743, '1f1f2-1f1f1':71744, '1f1f2-1f1f2':71745, '1f1f2-1f1f3':71746, '1f1f2-1f1f4':71747, '1f1f2-1f1f5':71748, '1f1f2-1f1f6':71749, '1f1f2-1f1f7':71750, '1f1f2-1f1f8':71751, '1f1f2-1f1f9':71752, '1f1f2-1f1fa':71753, '1f1f2-1f1fb':71754, '1f1f2-1f1fc':71755, '1f1f2-1f1fd':71756, '1f1f2-1f1fe':71757, '1f1f2-1f1ff':71758, '1f1f3-1f1e6':71759, '1f1f3-1f1e8':71760, '1f1f3-1f1ea':71761, '1f1f3-1f1eb':71762, '1f1f3-1f1ec':71763, '1f1f3-1f1ee':71764, '1f1f3-1f1f1':71765, '1f1f3-1f1f4':71766, '1f1f3-1f1f5':71767, '1f1f3-1f1f7':71768, '1f1f3-1f1fa':71769, '1f1f3-1f1ff':71770, '1f1f4-1f1f2':71771, '1f1f5-1f1e6':71772, '1f1f5-1f1ea':71773, '1f1f5-1f1eb':71774, '1f1f5-1f1ec':71775, '1f1f5-1f1ed':71776, '1f1f5-1f1f0':71777, '1f1f5-1f1f1':71778, '1f1f5-1f1f2':71779, '1f1f5-1f1f3':71780, '1f1f5-1f1f7':71781, '1f1f5-1f1f8':71782, '1f1f5-1f1f9':71783, '1f1f5-1f1fc':71784, '1f1f5-1f1fe':71785, '1f1f6-1f1e6':71786, '1f1f7-1f1ea':71787, '1f1f7-1f1f4':71788, '1f1f7-1f1f8':71789, '1f1f7-1f1fa':71790, '1f1f7-1f1fc':71791, '1f1f8-1f1e6':71792, '1f1f8-1f1e7':71793, '1f1f8-1f1e8':71794, '1f1f8-1f1e9':71795, '1f1f8-1f1ea':71796, '1f1f8-1f1ec':71797, '1f1f8-1f1ed':71798, '1f1f8-1f1ee':71799, '1f1f8-1f1ef':71800, '1f1f8-1f1f0':71801, '1f1f8-1f1f1':71802, '1f1f8-1f1f2':71803, '1f1f8-1f1f3':71804, '1f1f8-1f1f4':71805, '1f1f8-1f1f7':71806, '1f1f8-1f1f8':71807, '1f1f8-1f1f9':71808, '1f1f8-1f1fb':71809, '1f1f8-1f1fd':71810, '1f1f8-1f1fe':71811, '1f1f8-1f1ff':71812, '1f1f9-1f1e6':71813, '1f1f9-1f1e8':71814, '1f1f9-1f1e9':71815, '1f1f9-1f1eb':71816, '1f1f9-1f1ec':71817, '1f1f9-1f1ed':71818, '1f1f9-1f1ef':71819, '1f1f9-1f1f0':71820, '1f1f9-1f1f1':71821, '1f1f9-1f1f2':71822, '1f1f9-1f1f3':71823, '1f1f9-1f1f4':71824, '1f1f9-1f1f7':71825, '1f1f9-1f1f9':71826, '1f1f9-1f1fb':71827, '1f1f9-1f1fc':71828, '1f1f9-1f1ff':71829, '1f1fa-1f1e6':71830, '1f1fa-1f1ec':71831, '1f1fa-1f1f2':71832, '1f1fa-1f1f3':71833, '1f1fa-1f1f8':71834, '1f1fa-1f1fe':71835, '1f1fa-1f1ff':71836, '1f1fb-1f1e6':71837, '1f1fb-1f1e8':71838, '1f1fb-1f1ea':71839, '1f1fb-1f1ec':71840, '1f1fb-1f1ee':71841, '1f1fb-1f1f3':71842, '1f1fb-1f1fa':71843, '1f1fc-1f1eb':71844, '1f1fc-1f1f8':71845, '1f1fd-1f1f0':71846, '1f1fe-1f1ea':71847, '1f1fe-1f1f9':71848, '1f1ff-1f1e6':71849, '1f1ff-1f1f2':71850, '1f1ff-1f1fc':71851, '1f201':62899, '1f202':62900, '1f21a':62906, '1f22f':62903, '1f232':62907, '1f233':62911, '1f234':62910, '1f235':62915, '1f236':62902, '1f237':62901, '1f238':62909, '1f239':62905, '1f23a':62914, '1f250':62904, '1f251':62908, '1f300':41010, '1f301':4857, '1f302':41012, '1f303':4858, '1f304':4860, '1f305':4861, '1f306':4862, '1f307':4863, '1f308':41011, '1f309':4864, '1f30a':41023, '1f30b':4815, '1f30c':4997, '1f30d':4806, '1f30e':4807, '1f30f':4808, '1f310':4809, '1f311':4977, '1f312':4978, '1f313':4979, '1f314':4980, '1f315':4981, '1f316':4982, '1f317':4983, '1f318':4984, '1f319':4985, '1f31a':4986, '1f31b':4987, '1f31c':4988, '1f31d':4991, '1f31e':4992, '1f31f':4995, '1f320':4996, '1f321':4989, '1f324':41001, '1f325':41002, '1f326':41003, '1f327':41004, '1f328':41005, '1f329':41006, '1f32a':41007, '1f32b':41008, '1f32c':41009, '1f32d':3725, '1f32e':3727, '1f32f':3728, '1f330':3708, '1f331':2659, '1f332':2661, '1f333':2662, '1f334':2663, '1f335':2664, '1f336':3698, '1f337':2658, '1f338':2649, '1f339':2653, '1f33a':2655, '1f33b':2656, '1f33c':2657, '1f33d':3697, '1f33e':2665, '1f33f':2666, '1f340':2668, '1f341':2669, '1f342':2670, '1f343':2671, '1f344':3705, '1f345':3690, '1f346':3694, '1f347':3674, '1f348':3675, '1f349':3676, '1f34a':3677, '1f34b':3678, '1f34c':3679, '1f34d':3680, '1f34e':3682, '1f34f':3683, '1f350':3684, '1f351':3685, '1f352':3686, '1f353':3687, '1f354':3722, '1f355':3724, '1f356':3718, '1f357':3719, '1f358':3744, '1f359':3745, '1f35a':3746, '1f35b':3747, '1f35c':3748, '1f35d':3749, '1f35e':3709, '1f35f':3723, '1f360':3750, '1f361':3756, '1f362':3751, '1f363':3752, '1f364':3753, '1f365':3754, '1f366':3765, '1f367':3766, '1f368':3767, '1f369':3768, '1f36a':3769, '1f36b':3774, '1f36c':3775, '1f36d':3776, '1f36e':3777, '1f36f':3778, '1f370':3771, '1f371':3743, '1f372':3735, '1f373':3733, '1f374':3801, '1f375':3783, '1f376':3784, '1f377':3786, '1f378':3787, '1f379':3788, '1f37a':3789, '1f37b':3790, '1f37c':3779, '1f37d':3800, '1f37e':3785, '1f37f':3739, '1f380':51040, '1f381':51041, '1f382':3770, '1f383':51024, '1f384':51025, '1f385':1527, '1f386':51026, '1f387':51027, '1f388':51030, '1f389':51031, '1f38a':51032, '1f38b':51033, '1f38c':71588, '1f38d':51034, '1f38e':51035, '1f38f':51036, '1f390':51037, '1f391':51038, '1f392':61134, '1f393':61147, '1f396':51045, '1f397':51042, '1f399':61167, '1f39a':61168, '1f39b':61169, '1f39e':61203, '1f39f':51043, '1f3a0':4866, '1f3a1':4868, '1f3a2':4869, '1f3a3':51072, '1f3a4':61170, '1f3a5':61202, '1f3a6':62819, '1f3a7':61171, '1f3a8':51105, '1f3a9':61146, '1f3aa':4871, '1f3ab':51044, '1f3ac':61205, '1f3ad':51103, '1f3ae':51086, '1f3af':51078, '1f3b0':51088, '1f3b1':51081, '1f3b2':51089, '1f3b3':51060, '1f3b4':51102, '1f3b5':61165, '1f3b6':61166, '1f3b7':61173, '1f3b8':61175, '1f3b9':61176, '1f3ba':61177, '1f3bb':61178, '1f3bc':61164, '1f3bd':51074, '1f3be':51058, '1f3bf':51075, '1f3c0':51054, '1f3c1':71586, '1f3c2':1600, '1f3c3-200d-2640':1584, '1f3c3-200d-2642':1583, '1f3c3':1582, '1f3c4-200d-2640':1606, '1f3c4-200d-2642':1605, '1f3c4':1604, '1f3c5':51047, '1f3c6':51046, '1f3c7':1598, '1f3c8':51056, '1f3c9':51057, '1f3ca-200d-2640':1612, '1f3ca-200d-2642':1611, '1f3ca':1610, '1f3cb-200d-2640':1618, '1f3cb-200d-2642':1617, '1f3cb':1616, '1f3cc-200d-2640':1603, '1f3cc-200d-2642':1602, '1f3cc':1601, '1f3cd':4902, '1f3ce':4901, '1f3cf':51061, '1f3d0':51055, '1f3d1':51062, '1f3d2':51063, '1f3d3':51065, '1f3d4':4813, '1f3d5':4817, '1f3d6':4818, '1f3d7':4824, '1f3d8':4829, '1f3d9':4859, '1f3da':4830, '1f3db':4823, '1f3dc':4819, '1f3dd':4820, '1f3de':4821, '1f3df':4822, '1f3e0':4831, '1f3e1':4832, '1f3e2':4833, '1f3e3':4834, '1f3e4':4835, '1f3e5':4836, '1f3e6':4837, '1f3e7':62729, '1f3e8':4838, '1f3e9':4839, '1f3ea':4840, '1f3eb':4841, '1f3ec':4842, '1f3ed':4843, '1f3ee':61216, '1f3ef':4844, '1f3f0':4845, '1f3f3-200d-1f308':71591, '1f3f3-200d-26a7':71592, '1f3f3':71590, '1f3f4-200d-2620':71593, '1f3f4-e0067-e0062-e0065-e006e-e0067-e007f':71852, '1f3f4-e0067-e0062-e0073-e0063-e0074-e007f':71853, '1f3f4-e0067-e0062-e0077-e006c-e0073-e007f':71854, '1f3f4':71589, '1f3f5':2652, '1f3f7':61234, '1f3f8':51066, '1f3f9':61303, '1f3fa':3805, '1f3fb':9525, '1f3fc':9526, '1f3fd':9527, '1f3fe':9528, '1f3ff':9529, '1f400':2576, '1f401':2575, '1f402':2556, '1f403':2557, '1f404':2558, '1f405':2547, '1f406':2548, '1f407':2579, '1f408-200d-2b1b':2544, '1f408':2543, '1f409':2618, '1f40a':2613, '1f40b':2622, '1f40c':2632, '1f40d':2616, '1f40e':2550, '1f40f':2563, '1f410':2565, '1f411':2564, '1f412':2531, '1f413':2596, '1f414':2595, '1f415-200d-1f9ba':2537, '1f415':2535, '1f416':2560, '1f417':2561, '1f418':2570, '1f419':2629, '1f41a':2630, '1f41b':2634, '1f41c':2635, '1f41d':2636, '1f41e':2638, '1f41f':2625, '1f420':2626, '1f421':2627, '1f422':2614, '1f423':2597, '1f424':2598, '1f425':2599, '1f426':2600, '1f427':2601, '1f428':2586, '1f429':2538, '1f42a':2566, '1f42b':2567, '1f42c':2623, '1f42d':2574, '1f42e':2555, '1f42f':2546, '1f430':2578, '1f431':2542, '1f432':2617, '1f433':2621, '1f434':2549, '1f435':2530, '1f436':2534, '1f437':2559, '1f438':2612, '1f439':2577, '1f43a':2539, '1f43b-200d-2744':2585, '1f43b':2584, '1f43c':2587, '1f43d':2562, '1f43e':2593, '1f43f':2580, '1f440':1381, '1f441-200d-1f5e8':1159, '1f441':1382, '1f442':1373, '1f443':1375, '1f444':1384, '1f445':1383, '1f446':1347, '1f447':1349, '1f448':1345, '1f449':1346, '1f44a':1355, '1f44b':1327, '1f44c':1336, '1f44d':1352, '1f44e':1353, '1f44f':1358, '1f450':1361, '1f451':61144, '1f452':61145, '1f453':61110, '1f454':61115, '1f455':61116, '1f456':61117, '1f457':61122, '1f458':61123, '1f459':61128, '1f45a':61129, '1f45b':61130, '1f45c':61131, '1f45d':61132, '1f45e':61136, '1f45f':61137, '1f460':61140, '1f461':61141, '1f462':61143, '1f463':1687, '1f464':1684, '1f465':1685, '1f466':1388, '1f467':1389, '1f468-200d-1f33e':1457, '1f468-200d-1f373':1460, '1f468-200d-1f37c':1524, '1f468-200d-1f393':1448, '1f468-200d-1f3a4':1478, '1f468-200d-1f3a8':1481, '1f468-200d-1f3eb':1451, '1f468-200d-1f3ed':1466, '1f468-200d-1f466-200d-1f466':1674, '1f468-200d-1f466':1673, '1f468-200d-1f467-200d-1f466':1676, '1f468-200d-1f467-200d-1f467':1677, '1f468-200d-1f467':1675, '1f468-200d-1f468-200d-1f466':1663, '1f468-200d-1f468-200d-1f466-200d-1f466':1666, '1f468-200d-1f468-200d-1f467':1664, '1f468-200d-1f468-200d-1f467-200d-1f466':1665, '1f468-200d-1f468-200d-1f467-200d-1f467':1667, '1f468-200d-1f469-200d-1f466':1658, '1f468-200d-1f469-200d-1f466-200d-1f466':1661, '1f468-200d-1f469-200d-1f467':1659, '1f468-200d-1f469-200d-1f467-200d-1f466':1660, '1f468-200d-1f469-200d-1f467-200d-1f467':1662, '1f468-200d-1f4bb':1475, '1f468-200d-1f4bc':1469, '1f468-200d-1f527':1463, '1f468-200d-1f52c':1472, '1f468-200d-1f680':1487, '1f468-200d-1f692':1490, '1f468-200d-1f9af':1574, '1f468-200d-1f9b0':1396, '1f468-200d-1f9b1':1397, '1f468-200d-1f9b2':1399, '1f468-200d-1f9b3':1398, '1f468-200d-1f9bc':1577, '1f468-200d-1f9bd':1580, '1f468-200d-2695':1445, '1f468-200d-2696':1454, '1f468-200d-2708':1484, '1f468-200d-2764-200d-1f468':1655, '1f468-200d-2764-200d-1f48b-200d-1f468':1651, '1f468':1392, '1f469-200d-1f33e':1458, '1f469-200d-1f373':1461, '1f469-200d-1f37c':1523, '1f469-200d-1f393':1449, '1f469-200d-1f3a4':1479, '1f469-200d-1f3a8':1482, '1f469-200d-1f3eb':1452, '1f469-200d-1f3ed':1467, '1f469-200d-1f466-200d-1f466':1679, '1f469-200d-1f466':1678, '1f469-200d-1f467-200d-1f466':1681, '1f469-200d-1f467-200d-1f467':1682, '1f469-200d-1f467':1680, '1f469-200d-1f469-200d-1f466':1668, '1f469-200d-1f469-200d-1f466-200d-1f466':1671, '1f469-200d-1f469-200d-1f467':1669, '1f469-200d-1f469-200d-1f467-200d-1f466':1670, '1f469-200d-1f469-200d-1f467-200d-1f467':1672, '1f469-200d-1f4bb':1476, '1f469-200d-1f4bc':1470, '1f469-200d-1f527':1464, '1f469-200d-1f52c':1473, '1f469-200d-1f680':1488, '1f469-200d-1f692':1491, '1f469-200d-1f9af':1575, '1f469-200d-1f9b0':1401, '1f469-200d-1f9b1':1403, '1f469-200d-1f9b2':1407, '1f469-200d-1f9b3':1405, '1f469-200d-1f9bc':1578, '1f469-200d-1f9bd':1581, '1f469-200d-2695':1446, '1f469-200d-2696':1455, '1f469-200d-2708':1485, '1f469-200d-2764-200d-1f468':1654, '1f469-200d-2764-200d-1f469':1656, '1f469-200d-2764-200d-1f48b-200d-1f468':1650, '1f469-200d-2764-200d-1f48b-200d-1f469':1652, '1f469':1400, '1f46a':1657, '1f46b':1647, '1f46c':1648, '1f46d':1646, '1f46e-200d-2640':1494, '1f46e-200d-2642':1493, '1f46e':1492, '1f46f-200d-2640':1590, '1f46f-200d-2642':1589, '1f46f':1588, '1f470-200d-2640':1518, '1f470-200d-2642':1517, '1f470':1516, '1f471-200d-2640':1409, '1f471-200d-2642':1410, '1f471':1391, '1f472':1511, '1f473-200d-2640':1510, '1f473-200d-2642':1509, '1f473':1508, '1f474':1412, '1f475':1413, '1f476':1386, '1f477-200d-2640':1504, '1f477-200d-2642':1503, '1f477':1502, '1f478':1507, '1f479':1109, '1f47a':1110, '1f47b':1111, '1f47c':1526, '1f47d':1112, '1f47e':1113, '1f47f':1104, '1f480':1105, '1f481-200d-2640':1428, '1f481-200d-2642':1427, '1f481':1426, '1f482-200d-2640':1500, '1f482-200d-2642':1499, '1f482':1498, '1f483':1585, '1f484':61152, '1f485':1366, '1f486-200d-2640':1560, '1f486-200d-2642':1559, '1f486':1558, '1f487-200d-2640':1563, '1f487-200d-2642':1562, '1f487':1561, '1f488':4870, '1f489':61326, '1f48a':61328, '1f48b':1127, '1f48c':1128, '1f48d':61153, '1f48e':61154, '1f48f':1649, '1f490':2648, '1f491':1653, '1f492':4846, '1f493':1133, '1f494':1138, '1f495':1135, '1f496':1131, '1f497':1132, '1f498':1129, '1f499':1145, '1f49a':1144, '1f49b':1143, '1f49c':1146, '1f49d':1130, '1f49e':1134, '1f49f':1136, '1f4a0':62946, '1f4a1':61214, '1f4a2':1151, '1f4a3':1157, '1f4a4':1163, '1f4a5':1152, '1f4a6':1154, '1f4a7':41022, '1f4a8':1155, '1f4a9':1107, '1f4aa':1368, '1f4ab':1153, '1f4ac':1158, '1f4ad':1162, '1f4ae':2650, '1f4af':1150, '1f4b0':61235, '1f4b1':62841, '1f4b2':62842, '1f4b3':61242, '1f4b4':61237, '1f4b5':61238, '1f4b6':61239, '1f4b7':61240, '1f4b8':61241, '1f4b9':61244, '1f4ba':4936, '1f4bb':61191, '1f4bc':61265, '1f4bd':61197, '1f4be':61198, '1f4bf':61199, '1f4c0':61200, '1f4c1':61266, '1f4c2':61267, '1f4c3':61227, '1f4c4':61229, '1f4c5':61269, '1f4c6':61270, '1f4c7':61273, '1f4c8':61274, '1f4c9':61275, '1f4ca':61276, '1f4cb':61277, '1f4cc':61278, '1f4cd':61279, '1f4ce':61280, '1f4cf':61282, '1f4d0':61283, '1f4d1':61232, '1f4d2':61226, '1f4d3':61225, '1f4d4':61218, '1f4d5':61219, '1f4d6':61220, '1f4d7':61221, '1f4d8':61222, '1f4d9':61223, '1f4da':61224, '1f4db':62847, '1f4dc':61228, '1f4dd':61264, '1f4de':61185, '1f4df':61186, '1f4e0':61187, '1f4e1':61325, '1f4e2':61159, '1f4e3':61160, '1f4e4':61249, '1f4e5':61250, '1f4e6':61251, '1f4e7':61246, '1f4e8':61247, '1f4e9':61248, '1f4ea':61253, '1f4eb':61252, '1f4ec':61254, '1f4ed':61255, '1f4ee':61256, '1f4ef':61161, '1f4f0':61230, '1f4f1':61182, '1f4f2':61183, '1f4f3':62823, '1f4f4':62824, '1f4f5':62751, '1f4f6':62822, '1f4f7':61207, '1f4f8':61208, '1f4f9':61209, '1f4fa':61206, '1f4fb':61172, '1f4fc':61210, '1f4fd':61204, '1f4ff':61151, '1f500':62801, '1f501':62802, '1f502':62803, '1f503':62769, '1f504':62770, '1f505':62820, '1f506':62821, '1f507':61155, '1f508':61156, '1f509':61157, '1f50a':61158, '1f50b':61188, '1f50c':61190, '1f50d':61211, '1f50e':61212, '1f50f':61290, '1f510':61291, '1f511':61292, '1f512':61288, '1f513':61289, '1f514':61162, '1f515':61163, '1f516':61233, '1f517':61313, '1f518':62947, '1f519':62771, '1f51a':62772, '1f51b':62773, '1f51c':62774, '1f51d':62775, '1f51e':62752, '1f51f':62876, '1f520':62877, '1f521':62878, '1f522':62879, '1f523':62880, '1f524':62881, '1f525':41021, '1f526':61215, '1f527':61306, '1f528':61294, '1f529':61308, '1f52a':3803, '1f52b':61301, '1f52c':61323, '1f52d':61324, '1f52e':51082, '1f52f':62787, '1f530':62848, '1f531':62846, '1f532':62949, '1f533':62948, '1f534':62916, '1f535':62920, '1f536':62940, '1f537':62941, '1f538':62942, '1f539':62943, '1f53a':62944, '1f53b':62945, '1f53c':62811, '1f53d':62813, '1f549':62778, '1f54a':2602, '1f54b':4854, '1f54c':4850, '1f54d':4852, '1f54e':62786, '1f550':4955, '1f551':4957, '1f552':4959, '1f553':4961, '1f554':4963, '1f555':4965, '1f556':4967, '1f557':4969, '1f558':4971, '1f559':4973, '1f55a':4975, '1f55b':4953, '1f55c':4956, '1f55d':4958, '1f55e':4960, '1f55f':4962, '1f560':4964, '1f561':4966, '1f562':4968, '1f563':4970, '1f564':4972, '1f565':4974, '1f566':4976, '1f567':4954, '1f56f':61213, '1f570':4952, '1f573':1156, '1f574':1587, '1f575-200d-2640':1497, '1f575-200d-2642':1496, '1f575':1495, '1f576':61111, '1f577':2641, '1f578':2642, '1f579':51087, '1f57a':1586, '1f587':61281, '1f58a':61261, '1f58b':61260, '1f58c':61262, '1f58d':61263, '1f590':1329, '1f595':1348, '1f596':1331, '1f5a4':1148, '1f5a5':61192, '1f5a8':61193, '1f5b1':61195, '1f5b2':61196, '1f5bc':51104, '1f5c2':61268, '1f5c3':61285, '1f5c4':61286, '1f5d1':61287, '1f5d2':61271, '1f5d3':61272, '1f5dc':61310, '1f5dd':61293, '1f5de':61231, '1f5e1':61299, '1f5e3':1683, '1f5e8':1160, '1f5ef':1161, '1f5f3':61257, '1f5fa':4810, '1f5fb':4816, '1f5fc':4847, '1f5fd':4848, '1f5fe':4811, '1f5ff':61362, '1f600':11, '1f601':14, '1f602':18, '1f603':12, '1f604':13, '1f605':16, '1f606':15, '1f607':114, '1f608':1103, '1f609':112, '1f60a':113, '1f60b':124, '1f60c':150, '1f60d':116, '1f60e':170, '1f60f':144, '1f610':139, '1f611':140, '1f612':145, '1f613':195, '1f614':151, '1f615':173, '1f616':192, '1f617':119, '1f618':118, '1f619':122, '1f61a':121, '1f61b':125, '1f61c':126, '1f61d':128, '1f61e':194, '1f61f':175, '1f620':1101, '1f621':1100, '1f622':189, '1f623':193, '1f624':199, '1f625':188, '1f626':184, '1f627':185, '1f628':186, '1f629':196, '1f62a':152, '1f62b':197, '1f62c':147, '1f62d':190, '1f62e-200d-1f4a8':148, '1f62e':178, '1f62f':179, '1f630':187, '1f631':191, '1f632':180, '1f633':181, '1f634':154, '1f635-200d-1f4ab':165, '1f635':164, '1f636-200d-1f32b':143, '1f636':141, '1f637':155, '1f638':1116, '1f639':1117, '1f63a':1115, '1f63b':1118, '1f63c':1119, '1f63d':1120, '1f63e':1123, '1f63f':1122, '1f640':1121, '1f641':176, '1f642':19, '1f643':110, '1f644':146, '1f645-200d-2640':1422, '1f645-200d-2642':1421, '1f645':1420, '1f646-200d-2640':1425, '1f646-200d-2642':1424, '1f646':1423, '1f647-200d-2640':1437, '1f647-200d-2642':1436, '1f647':1435, '1f648':1124, '1f649':1125, '1f64a':1126, '1f64b-200d-2640':1431, '1f64b-200d-2642':1430, '1f64b':1429, '1f64c':1359, '1f64d-200d-2640':1416, '1f64d-200d-2642':1415, '1f64d':1414, '1f64e-200d-2640':1419, '1f64e-200d-2642':1418, '1f64e':1417, '1f64f':1364, '1f680':4942, '1f681':4937, '1f682':4872, '1f683':4873, '1f684':4874, '1f685':4875, '1f686':4876, '1f687':4877, '1f688':4878, '1f689':4879, '1f68a':4880, '1f68b':4883, '1f68c':4884, '1f68d':4885, '1f68e':4886, '1f68f':4911, '1f690':4887, '1f691':4888, '1f692':4889, '1f693':4890, '1f694':4891, '1f695':4892, '1f696':4893, '1f697':4894, '1f698':4895, '1f699':4896, '1f69a':4898, '1f69b':4899, '1f69c':4900, '1f69d':4881, '1f69e':4882, '1f69f':4938, '1f6a0':4939, '1f6a1':4940, '1f6a2':4930, '1f6a3-200d-2640':1609, '1f6a3-200d-2642':1608, '1f6a3':1607, '1f6a4':4926, '1f6a5':4918, '1f6a6':4919, '1f6a7':4921, '1f6a8':4917, '1f6a9':71587, '1f6aa':61333, '1f6ab':62745, '1f6ac':61358, '1f6ad':62747, '1f6ae':62730, '1f6af':62748, '1f6b0':62731, '1f6b1':62749, '1f6b2':4907, '1f6b3':62746, '1f6b4-200d-2640':1621, '1f6b4-200d-2642':1620, '1f6b4':1619, '1f6b5-200d-2640':1624, '1f6b5-200d-2642':1623, '1f6b5':1622, '1f6b6-200d-2640':1566, '1f6b6-200d-2642':1565, '1f6b6':1564, '1f6b7':62750, '1f6b8':62743, '1f6b9':62733, '1f6ba':62734, '1f6bb':62735, '1f6bc':62736, '1f6bd':61340, '1f6be':62737, '1f6bf':61342, '1f6c0':1643, '1f6c1':61343, '1f6c2':62738, '1f6c3':62739, '1f6c4':62740, '1f6c5':62741, '1f6cb':61338, '1f6cc':1644, '1f6cd':61133, '1f6ce':4944, '1f6cf':61337, '1f6d0':62776, '1f6d1':4920, '1f6d2':61357, '1f6d5':4851, '1f6d6':4828, '1f6d7':61334, '1f6e0':61298, '1f6e1':61304, '1f6e2':4914, '1f6e3':4912, '1f6e4':4913, '1f6e5':4929, '1f6e9':4932, '1f6eb':4933, '1f6ec':4934, '1f6f0':4941, '1f6f3':4927, '1f6f4':4908, '1f6f5':4903, '1f6f6':4925, '1f6f7':51076, '1f6f8':4943, '1f6f9':4909, '1f6fa':4906, '1f6fb':4897, '1f6fc':4910, '1f7e0':62917, '1f7e1':62918, '1f7e2':62919, '1f7e3':62921, '1f7e4':62922, '1f7e5':62925, '1f7e6':62929, '1f7e7':62926, '1f7e8':62927, '1f7e9':62928, '1f7ea':62930, '1f7eb':62931, '1f90c':1337, '1f90d':1149, '1f90e':1147, '1f90f':1338, '1f910':137, '1f911':129, '1f912':156, '1f913':171, '1f914':135, '1f915':157, '1f916':1114, '1f917':130, '1f918':1343, '1f919':1344, '1f91a':1328, '1f91b':1356, '1f91c':1357, '1f91d':1363, '1f91e':1340, '1f91f':1342, '1f920':167, '1f921':1108, '1f922':158, '1f923':17, '1f924':153, '1f925':149, '1f926-200d-2640':1440, '1f926-200d-2642':1439, '1f926':1438, '1f927':160, '1f928':138, '1f929':117, '1f92a':127, '1f92b':134, '1f92c':1102, '1f92d':131, '1f92e':159, '1f92f':166, '1f930':1519, '1f931':1522, '1f932':1362, '1f933':1367, '1f934':1506, '1f935-200d-2640':1515, '1f935-200d-2642':1514, '1f935':1513, '1f936':1528, '1f937-200d-2640':1443, '1f937-200d-2642':1442, '1f937':1441, '1f938-200d-2640':1627, '1f938-200d-2642':1626, '1f938':1625, '1f939-200d-2640':1639, '1f939-200d-2642':1638, '1f939':1637, '1f93a':1597, '1f93c-200d-2640':1630, '1f93c-200d-2642':1629, '1f93c':1628, '1f93d-200d-2640':1633, '1f93d-200d-2642':1632, '1f93d':1631, '1f93e-200d-2640':1636, '1f93e-200d-2642':1635, '1f93e':1634, '1f93f':51073, '1f940':2654, '1f941':61180, '1f942':3791, '1f943':3792, '1f944':3802, '1f945':51069, '1f947':51048, '1f948':51049, '1f949':51050, '1f94a':51067, '1f94b':51068, '1f94c':51077, '1f94d':51064, '1f94e':51053, '1f94f':51059, '1f950':3710, '1f951':3693, '1f952':3700, '1f953':3721, '1f954':3695, '1f955':3696, '1f956':3711, '1f957':3738, '1f958':3734, '1f959':3730, '1f95a':3732, '1f95b':3780, '1f95c':3706, '1f95d':3689, '1f95e':3715, '1f95f':3757, '1f960':3758, '1f961':3759, '1f962':3799, '1f963':3737, '1f964':3794, '1f965':3692, '1f966':3702, '1f967':3773, '1f968':3713, '1f969':3720, '1f96a':3726, '1f96b':3742, '1f96c':3701, '1f96d':3681, '1f96e':3755, '1f96f':3714, '1f970':115, '1f971':198, '1f972':123, '1f973':168, '1f974':163, '1f975':161, '1f976':162, '1f977':1501, '1f978':169, '1f97a':182, '1f97b':61124, '1f97c':61113, '1f97d':61112, '1f97e':61138, '1f97f':61139, '1f980':3760, '1f981':2545, '1f982':2643, '1f983':2594, '1f984':2551, '1f985':2603, '1f986':2604, '1f987':2583, '1f988':2628, '1f989':2606, '1f98a':2540, '1f98b':2633, '1f98c':2553, '1f98d':2532, '1f98e':2615, '1f98f':2572, '1f990':3762, '1f991':3763, '1f992':2569, '1f993':2552, '1f994':2582, '1f995':2619, '1f996':2620, '1f997':2639, '1f998':2591, '1f999':2568, '1f99a':2610, '1f99b':2573, '1f99c':2611, '1f99d':2541, '1f99e':3761, '1f99f':2644, '1f9a0':2647, '1f9a1':2592, '1f9a2':2605, '1f9a3':2571, '1f9a4':2607, '1f9a5':2588, '1f9a6':2589, '1f9a7':2533, '1f9a8':2590, '1f9a9':2609, '1f9aa':3764, '1f9ab':2581, '1f9ac':2554, '1f9ad':2624, '1f9ae':2536, '1f9af':61312, '1f9b4':1380, '1f9b5':1371, '1f9b6':1372, '1f9b7':1379, '1f9b8-200d-2640':1532, '1f9b8-200d-2642':1531, '1f9b8':1530, '1f9b9-200d-2640':1535, '1f9b9-200d-2642':1534, '1f9b9':1533, '1f9ba':61114, '1f9bb':1374, '1f9bc':4905, '1f9bd':4904, '1f9be':1369, '1f9bf':1370, '1f9c0':3717, '1f9c1':3772, '1f9c2':3741, '1f9c3':3796, '1f9c4':3703, '1f9c5':3704, '1f9c6':3731, '1f9c7':3716, '1f9c8':3740, '1f9c9':3797, '1f9ca':3798, '1f9cb':3795, '1f9cd-200d-2640':1569, '1f9cd-200d-2642':1568, '1f9cd':1567, '1f9ce-200d-2640':1572, '1f9ce-200d-2642':1571, '1f9ce':1570, '1f9cf-200d-2640':1434, '1f9cf-200d-2642':1433, '1f9cf':1432, '1f9d0':172, '1f9d1-200d-1f33e':1456, '1f9d1-200d-1f373':1459, '1f9d1-200d-1f37c':1525, '1f9d1-200d-1f384':1529, '1f9d1-200d-1f393':1447, '1f9d1-200d-1f3a4':1477, '1f9d1-200d-1f3a8':1480, '1f9d1-200d-1f3eb':1450, '1f9d1-200d-1f3ed':1465, '1f9d1-200d-1f4bb':1474, '1f9d1-200d-1f4bc':1468, '1f9d1-200d-1f527':1462, '1f9d1-200d-1f52c':1471, '1f9d1-200d-1f680':1486, '1f9d1-200d-1f692':1489, '1f9d1-200d-1f91d-200d-1f9d1':1645, '1f9d1-200d-1f9af':1573, '1f9d1-200d-1f9b0':1402, '1f9d1-200d-1f9b1':1404, '1f9d1-200d-1f9b2':1408, '1f9d1-200d-1f9b3':1406, '1f9d1-200d-1f9bc':1576, '1f9d1-200d-1f9bd':1579, '1f9d1-200d-2695':1444, '1f9d1-200d-2696':1453, '1f9d1-200d-2708':1483, '1f9d1':1390, '1f9d2':1387, '1f9d3':1411, '1f9d4-200d-2640':1395, '1f9d4-200d-2642':1394, '1f9d4':1393, '1f9d5':1512, '1f9d6-200d-2640':1593, '1f9d6-200d-2642':1592, '1f9d6':1591, '1f9d7-200d-2640':1596, '1f9d7-200d-2642':1595, '1f9d7':1594, '1f9d8-200d-2640':1642, '1f9d8-200d-2642':1641, '1f9d8':1640, '1f9d9-200d-2640':1538, '1f9d9-200d-2642':1537, '1f9d9':1536, '1f9da-200d-2640':1541, '1f9da-200d-2642':1540, '1f9da':1539, '1f9db-200d-2640':1544, '1f9db-200d-2642':1543, '1f9db':1542, '1f9dc-200d-2640':1547, '1f9dc-200d-2642':1546, '1f9dc':1545, '1f9dd-200d-2640':1550, '1f9dd-200d-2642':1549, '1f9dd':1548, '1f9de-200d-2640':1553, '1f9de-200d-2642':1552, '1f9de':1551, '1f9df-200d-2640':1556, '1f9df-200d-2642':1555, '1f9df':1554, '1f9e0':1376, '1f9e1':1142, '1f9e2':61148, '1f9e3':61118, '1f9e4':61119, '1f9e5':61120, '1f9e6':61121, '1f9e7':51039, '1f9e8':51028, '1f9e9':51090, '1f9ea':61320, '1f9eb':61321, '1f9ec':61322, '1f9ed':4812, '1f9ee':61201, '1f9ef':61356, '1f9f0':61316, '1f9f1':4825, '1f9f2':61317, '1f9f3':4945, '1f9f4':61346, '1f9f5':51106, '1f9f6':51108, '1f9f7':61347, '1f9f8':51091, '1f9f9':61348, '1f9fa':61349, '1f9fb':61350, '1f9fc':61352, '1f9fd':61355, '1f9fe':61243, '1f9ff':51084, '1fa70':61142, '1fa71':61125, '1fa72':61126, '1fa73':61127, '1fa74':61135, '1fa78':61327, '1fa79':61329, '1fa7a':61331, '1fa80':51079, '1fa81':51080, '1fa82':4935, '1fa83':61302, '1fa84':51083, '1fa85':51092, '1fa86':51094, '1fa90':4993, '1fa91':61339, '1fa92':61345, '1fa93':61295, '1fa94':61217, '1fa95':61179, '1fa96':61149, '1fa97':61174, '1fa98':61181, '1fa99':61236, '1fa9a':61305, '1fa9b':61307, '1fa9c':61318, '1fa9d':61315, '1fa9e':61335, '1fa9f':61336, '1faa0':61341, '1faa1':51107, '1faa2':51109, '1faa3':61351, '1faa4':61344, '1faa5':61354, '1faa6':61360, '1faa7':61363, '1faa8':4826, '1fab0':2645, '1fab1':2646, '1fab2':2637, '1fab3':2640, '1fab4':2660, '1fab5':4827, '1fab6':2608, '1fac0':1377, '1fac1':1378, '1fac2':1686, '1fad0':3688, '1fad1':3699, '1fad2':3691, '1fad3':3712, '1fad4':3729, '1fad5':3736, '1fad6':3782, '203c':62834, '21a9':62765, '21aa':62766, '231a':4948, '231b':4946, '23cf':62818, '23e9':62805, '23ea':62809, '23eb':62812, '23ec':62814, '23ed':62806, '23ee':62810, '23ef':62807, '23f0':4949, '23f1':4950, '23f2':4951, '23f3':4947, '23f8':62815, '23f9':62816, '23fa':62817, '24c2':62890, '25aa':62938, '25ab':62939, '25b6':62804, '25c0':62808, '25fb':62935, '25fc':62934, '25fd':62937, '25fe':62936, '260e':61184, '261d':1350, '262a':62784, '262e':62785, '262f':62781, '263a':120, '264a':62790, '264b':62791, '264c':62792, '264d':62793, '264e':62794, '264f':62795, '265f':51099, '267b':62844, '267e':62833, '267f':62732, '269b':62777, '269c':62845, '26a0':62742, '26a1':41016, '26a7':62827, '26aa':62924, '26ab':62923, '26b0':61359, '26b1':61361, '26bd':51051, '26be':51052, '26c4':41019, '26c5':4999, '26c8':41000, '26ce':62800, '26cf':61296, '26d1':61150, '26d3':61314, '26d4':62744, '26e9':4853, '26ea':4849, '26f0':4814, '26f1':41015, '26f2':4855, '26f3':51070, '26f4':4928, '26f5':4924, '26f7':1599, '26f8':51071, '26f9-200d-2640':1615, '26f9-200d-2642':1614, '26f9':1613, '26fa':4856, '26fd':4915, '270a':1354, '270b':1330, '270c':1339, '270d':1365, '270f':61258, '271d':62782, '274c':62853, '274e':62854, '2764-200d-1f525':1139, '2764-200d-1fa79':1140, '27a1':62757, '27b0':62855, '27bf':62856, '2b05':62761, '2b06':62755, '2b07':62759, '2b1b':62932, '2b1c':62933, '2b50':4994, '2b55':62849, '303d':62857, '1f385-1f3fb':0, '1f385-1f3fc':0, '1f385-1f3fd':0, '1f385-1f3fe':0, '1f385-1f3ff':0, '1f3c2-1f3fb':0, '1f3c2-1f3fc':0, '1f3c2-1f3fd':0, '1f3c2-1f3fe':0, '1f3c2-1f3ff':0, '1f3c3-1f3fb-200d-2640':0, '1f3c3-1f3fc-200d-2640':0, '1f3c3-1f3fd-200d-2640':0, '1f3c3-1f3fe-200d-2640':0, '1f3c3-1f3ff-200d-2640':0, '1f3c3-1f3fb-200d-2642':0, '1f3c3-1f3fc-200d-2642':0, '1f3c3-1f3fd-200d-2642':0, '1f3c3-1f3fe-200d-2642':0, '1f3c3-1f3ff-200d-2642':0, '1f3c3-1f3fb':0, '1f3c3-1f3fc':0, '1f3c3-1f3fd':0, '1f3c3-1f3fe':0, '1f3c3-1f3ff':0, '1f3c4-1f3fb-200d-2640':0, '1f3c4-1f3fc-200d-2640':0, '1f3c4-1f3fd-200d-2640':0, '1f3c4-1f3fe-200d-2640':0, '1f3c4-1f3ff-200d-2640':0, '1f3c4-1f3fb-200d-2642':0, '1f3c4-1f3fc-200d-2642':0, '1f3c4-1f3fd-200d-2642':0, '1f3c4-1f3fe-200d-2642':0, '1f3c4-1f3ff-200d-2642':0, '1f3c4-1f3fb':0, '1f3c4-1f3fc':0, '1f3c4-1f3fd':0, '1f3c4-1f3fe':0, '1f3c4-1f3ff':0, '1f3c7-1f3fb':0, '1f3c7-1f3fc':0, '1f3c7-1f3fd':0, '1f3c7-1f3fe':0, '1f3c7-1f3ff':0, '1f3ca-1f3fb-200d-2640':0, '1f3ca-1f3fc-200d-2640':0, '1f3ca-1f3fd-200d-2640':0, '1f3ca-1f3fe-200d-2640':0, '1f3ca-1f3ff-200d-2640':0, '1f3ca-1f3fb-200d-2642':0, '1f3ca-1f3fc-200d-2642':0, '1f3ca-1f3fd-200d-2642':0, '1f3ca-1f3fe-200d-2642':0, '1f3ca-1f3ff-200d-2642':0, '1f3ca-1f3fb':0, '1f3ca-1f3fc':0, '1f3ca-1f3fd':0, '1f3ca-1f3fe':0, '1f3ca-1f3ff':0, '1f3cb-1f3fb-200d-2640':0, '1f3cb-1f3fc-200d-2640':0, '1f3cb-1f3fd-200d-2640':0, '1f3cb-1f3fe-200d-2640':0, '1f3cb-1f3ff-200d-2640':0, '1f3cb-1f3fb-200d-2642':0, '1f3cb-1f3fc-200d-2642':0, '1f3cb-1f3fd-200d-2642':0, '1f3cb-1f3fe-200d-2642':0, '1f3cb-1f3ff-200d-2642':0, '1f3cb-1f3fb':0, '1f3cb-1f3fc':0, '1f3cb-1f3fd':0, '1f3cb-1f3fe':0, '1f3cb-1f3ff':0, '1f3cc-1f3fb-200d-2640':0, '1f3cc-1f3fc-200d-2640':0, '1f3cc-1f3fd-200d-2640':0, '1f3cc-1f3fe-200d-2640':0, '1f3cc-1f3ff-200d-2640':0, '1f3cc-1f3fb-200d-2642':0, '1f3cc-1f3fc-200d-2642':0, '1f3cc-1f3fd-200d-2642':0, '1f3cc-1f3fe-200d-2642':0, '1f3cc-1f3ff-200d-2642':0, '1f3cc-1f3fb':0, '1f3cc-1f3fc':0, '1f3cc-1f3fd':0, '1f3cc-1f3fe':0, '1f3cc-1f3ff':0, '1f442-1f3fb':0, '1f442-1f3fc':0, '1f442-1f3fd':0, '1f442-1f3fe':0, '1f442-1f3ff':0, '1f443-1f3fb':0, '1f443-1f3fc':0, '1f443-1f3fd':0, '1f443-1f3fe':0, '1f443-1f3ff':0, '1f446-1f3fb':0, '1f446-1f3fc':0, '1f446-1f3fd':0, '1f446-1f3fe':0, '1f446-1f3ff':0, '1f447-1f3fb':0, '1f447-1f3fc':0, '1f447-1f3fd':0, '1f447-1f3fe':0, '1f447-1f3ff':0, '1f448-1f3fb':0, '1f448-1f3fc':0, '1f448-1f3fd':0, '1f448-1f3fe':0, '1f448-1f3ff':0, '1f449-1f3fb':0, '1f449-1f3fc':0, '1f449-1f3fd':0, '1f449-1f3fe':0, '1f449-1f3ff':0, '1f44a-1f3fb':0, '1f44a-1f3fc':0, '1f44a-1f3fd':0, '1f44a-1f3fe':0, '1f44a-1f3ff':0, '1f44b-1f3fb':0, '1f44b-1f3fc':0, '1f44b-1f3fd':0, '1f44b-1f3fe':0, '1f44b-1f3ff':0, '1f44c-1f3fb':0, '1f44c-1f3fc':0, '1f44c-1f3fd':0, '1f44c-1f3fe':0, '1f44c-1f3ff':0, '1f44d-1f3fb':0, '1f44d-1f3fc':0, '1f44d-1f3fd':0, '1f44d-1f3fe':0, '1f44d-1f3ff':0, '1f44e-1f3fb':0, '1f44e-1f3fc':0, '1f44e-1f3fd':0, '1f44e-1f3fe':0, '1f44e-1f3ff':0, '1f44f-1f3fb':0, '1f44f-1f3fc':0, '1f44f-1f3fd':0, '1f44f-1f3fe':0, '1f44f-1f3ff':0, '1f450-1f3fb':0, '1f450-1f3fc':0, '1f450-1f3fd':0, '1f450-1f3fe':0, '1f450-1f3ff':0, '1f466-1f3fb':0, '1f466-1f3fc':0, '1f466-1f3fd':0, '1f466-1f3fe':0, '1f466-1f3ff':0, '1f467-1f3fb':0, '1f467-1f3fc':0, '1f467-1f3fd':0, '1f467-1f3fe':0, '1f467-1f3ff':0, '1f468-1f3fb-200d-1f33e':0, '1f468-1f3fc-200d-1f33e':0, '1f468-1f3fd-200d-1f33e':0, '1f468-1f3fe-200d-1f33e':0, '1f468-1f3ff-200d-1f33e':0, '1f468-1f3fb-200d-1f373':0, '1f468-1f3fc-200d-1f373':0, '1f468-1f3fd-200d-1f373':0, '1f468-1f3fe-200d-1f373':0, '1f468-1f3ff-200d-1f373':0, '1f468-1f3fb-200d-1f37c':0, '1f468-1f3fc-200d-1f37c':0, '1f468-1f3fd-200d-1f37c':0, '1f468-1f3fe-200d-1f37c':0, '1f468-1f3ff-200d-1f37c':0, '1f468-1f3fb-200d-1f393':0, '1f468-1f3fc-200d-1f393':0, '1f468-1f3fd-200d-1f393':0, '1f468-1f3fe-200d-1f393':0, '1f468-1f3ff-200d-1f393':0, '1f468-1f3fb-200d-1f3a4':0, '1f468-1f3fc-200d-1f3a4':0, '1f468-1f3fd-200d-1f3a4':0, '1f468-1f3fe-200d-1f3a4':0, '1f468-1f3ff-200d-1f3a4':0, '1f468-1f3fb-200d-1f3a8':0, '1f468-1f3fc-200d-1f3a8':0, '1f468-1f3fd-200d-1f3a8':0, '1f468-1f3fe-200d-1f3a8':0, '1f468-1f3ff-200d-1f3a8':0, '1f468-1f3fb-200d-1f3eb':0, '1f468-1f3fc-200d-1f3eb':0, '1f468-1f3fd-200d-1f3eb':0, '1f468-1f3fe-200d-1f3eb':0, '1f468-1f3ff-200d-1f3eb':0, '1f468-1f3fb-200d-1f3ed':0, '1f468-1f3fc-200d-1f3ed':0, '1f468-1f3fd-200d-1f3ed':0, '1f468-1f3fe-200d-1f3ed':0, '1f468-1f3ff-200d-1f3ed':0, '1f468-1f3fb-200d-1f4bb':0, '1f468-1f3fc-200d-1f4bb':0, '1f468-1f3fd-200d-1f4bb':0, '1f468-1f3fe-200d-1f4bb':0, '1f468-1f3ff-200d-1f4bb':0, '1f468-1f3fb-200d-1f4bc':0, '1f468-1f3fc-200d-1f4bc':0, '1f468-1f3fd-200d-1f4bc':0, '1f468-1f3fe-200d-1f4bc':0, '1f468-1f3ff-200d-1f4bc':0, '1f468-1f3fb-200d-1f527':0, '1f468-1f3fc-200d-1f527':0, '1f468-1f3fd-200d-1f527':0, '1f468-1f3fe-200d-1f527':0, '1f468-1f3ff-200d-1f527':0, '1f468-1f3fb-200d-1f52c':0, '1f468-1f3fc-200d-1f52c':0, '1f468-1f3fd-200d-1f52c':0, '1f468-1f3fe-200d-1f52c':0, '1f468-1f3ff-200d-1f52c':0, '1f468-1f3fb-200d-1f680':0, '1f468-1f3fc-200d-1f680':0, '1f468-1f3fd-200d-1f680':0, '1f468-1f3fe-200d-1f680':0, '1f468-1f3ff-200d-1f680':0, '1f468-1f3fb-200d-1f692':0, '1f468-1f3fc-200d-1f692':0, '1f468-1f3fd-200d-1f692':0, '1f468-1f3fe-200d-1f692':0, '1f468-1f3ff-200d-1f692':0, '1f468-1f3fb-200d-1f9af':0, '1f468-1f3fc-200d-1f9af':0, '1f468-1f3fd-200d-1f9af':0, '1f468-1f3fe-200d-1f9af':0, '1f468-1f3ff-200d-1f9af':0, '1f468-1f3fb-200d-1f9b0':0, '1f468-1f3fc-200d-1f9b0':0, '1f468-1f3fd-200d-1f9b0':0, '1f468-1f3fe-200d-1f9b0':0, '1f468-1f3ff-200d-1f9b0':0, '1f468-1f3fb-200d-1f9b1':0, '1f468-1f3fc-200d-1f9b1':0, '1f468-1f3fd-200d-1f9b1':0, '1f468-1f3fe-200d-1f9b1':0, '1f468-1f3ff-200d-1f9b1':0, '1f468-1f3fb-200d-1f9b2':0, '1f468-1f3fc-200d-1f9b2':0, '1f468-1f3fd-200d-1f9b2':0, '1f468-1f3fe-200d-1f9b2':0, '1f468-1f3ff-200d-1f9b2':0, '1f468-1f3fb-200d-1f9b3':0, '1f468-1f3fc-200d-1f9b3':0, '1f468-1f3fd-200d-1f9b3':0, '1f468-1f3fe-200d-1f9b3':0, '1f468-1f3ff-200d-1f9b3':0, '1f468-1f3fb-200d-1f9bc':0, '1f468-1f3fc-200d-1f9bc':0, '1f468-1f3fd-200d-1f9bc':0, '1f468-1f3fe-200d-1f9bc':0, '1f468-1f3ff-200d-1f9bc':0, '1f468-1f3fb-200d-1f9bd':0, '1f468-1f3fc-200d-1f9bd':0, '1f468-1f3fd-200d-1f9bd':0, '1f468-1f3fe-200d-1f9bd':0, '1f468-1f3ff-200d-1f9bd':0, '1f468-1f3fb-200d-2695':0, '1f468-1f3fc-200d-2695':0, '1f468-1f3fd-200d-2695':0, '1f468-1f3fe-200d-2695':0, '1f468-1f3ff-200d-2695':0, '1f468-1f3fb-200d-2696':0, '1f468-1f3fc-200d-2696':0, '1f468-1f3fd-200d-2696':0, '1f468-1f3fe-200d-2696':0, '1f468-1f3ff-200d-2696':0, '1f468-1f3fb-200d-2708':0, '1f468-1f3fc-200d-2708':0, '1f468-1f3fd-200d-2708':0, '1f468-1f3fe-200d-2708':0, '1f468-1f3ff-200d-2708':0, '1f468-1f3fb-200d-2764-200d-1f468-1f3fb':0, '1f468-1f3fb-200d-2764-200d-1f468-1f3fc':0, '1f468-1f3fb-200d-2764-200d-1f468-1f3fd':0, '1f468-1f3fb-200d-2764-200d-1f468-1f3fe':0, '1f468-1f3fb-200d-2764-200d-1f468-1f3ff':0, '1f468-1f3fc-200d-2764-200d-1f468-1f3fb':0, '1f468-1f3fc-200d-2764-200d-1f468-1f3fc':0, '1f468-1f3fc-200d-2764-200d-1f468-1f3fd':0, '1f468-1f3fc-200d-2764-200d-1f468-1f3fe':0, '1f468-1f3fc-200d-2764-200d-1f468-1f3ff':0, '1f468-1f3fd-200d-2764-200d-1f468-1f3fb':0, '1f468-1f3fd-200d-2764-200d-1f468-1f3fc':0, '1f468-1f3fd-200d-2764-200d-1f468-1f3fd':0, '1f468-1f3fd-200d-2764-200d-1f468-1f3fe':0, '1f468-1f3fd-200d-2764-200d-1f468-1f3ff':0, '1f468-1f3fe-200d-2764-200d-1f468-1f3fb':0, '1f468-1f3fe-200d-2764-200d-1f468-1f3fc':0, '1f468-1f3fe-200d-2764-200d-1f468-1f3fd':0, '1f468-1f3fe-200d-2764-200d-1f468-1f3fe':0, '1f468-1f3fe-200d-2764-200d-1f468-1f3ff':0, '1f468-1f3ff-200d-2764-200d-1f468-1f3fb':0, '1f468-1f3ff-200d-2764-200d-1f468-1f3fc':0, '1f468-1f3ff-200d-2764-200d-1f468-1f3fd':0, '1f468-1f3ff-200d-2764-200d-1f468-1f3fe':0, '1f468-1f3ff-200d-2764-200d-1f468-1f3ff':0, '1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f468-1f3fb':0, '1f468-1f3fc':0, '1f468-1f3fd':0, '1f468-1f3fe':0, '1f468-1f3ff':0, '1f469-1f3fb-200d-1f33e':0, '1f469-1f3fc-200d-1f33e':0, '1f469-1f3fd-200d-1f33e':0, '1f469-1f3fe-200d-1f33e':0, '1f469-1f3ff-200d-1f33e':0, '1f469-1f3fb-200d-1f373':0, '1f469-1f3fc-200d-1f373':0, '1f469-1f3fd-200d-1f373':0, '1f469-1f3fe-200d-1f373':0, '1f469-1f3ff-200d-1f373':0, '1f469-1f3fb-200d-1f37c':0, '1f469-1f3fc-200d-1f37c':0, '1f469-1f3fd-200d-1f37c':0, '1f469-1f3fe-200d-1f37c':0, '1f469-1f3ff-200d-1f37c':0, '1f469-1f3fb-200d-1f393':0, '1f469-1f3fc-200d-1f393':0, '1f469-1f3fd-200d-1f393':0, '1f469-1f3fe-200d-1f393':0, '1f469-1f3ff-200d-1f393':0, '1f469-1f3fb-200d-1f3a4':0, '1f469-1f3fc-200d-1f3a4':0, '1f469-1f3fd-200d-1f3a4':0, '1f469-1f3fe-200d-1f3a4':0, '1f469-1f3ff-200d-1f3a4':0, '1f469-1f3fb-200d-1f3a8':0, '1f469-1f3fc-200d-1f3a8':0, '1f469-1f3fd-200d-1f3a8':0, '1f469-1f3fe-200d-1f3a8':0, '1f469-1f3ff-200d-1f3a8':0, '1f469-1f3fb-200d-1f3eb':0, '1f469-1f3fc-200d-1f3eb':0, '1f469-1f3fd-200d-1f3eb':0, '1f469-1f3fe-200d-1f3eb':0, '1f469-1f3ff-200d-1f3eb':0, '1f469-1f3fb-200d-1f3ed':0, '1f469-1f3fc-200d-1f3ed':0, '1f469-1f3fd-200d-1f3ed':0, '1f469-1f3fe-200d-1f3ed':0, '1f469-1f3ff-200d-1f3ed':0, '1f469-1f3fb-200d-1f4bb':0, '1f469-1f3fc-200d-1f4bb':0, '1f469-1f3fd-200d-1f4bb':0, '1f469-1f3fe-200d-1f4bb':0, '1f469-1f3ff-200d-1f4bb':0, '1f469-1f3fb-200d-1f4bc':0, '1f469-1f3fc-200d-1f4bc':0, '1f469-1f3fd-200d-1f4bc':0, '1f469-1f3fe-200d-1f4bc':0, '1f469-1f3ff-200d-1f4bc':0, '1f469-1f3fb-200d-1f527':0, '1f469-1f3fc-200d-1f527':0, '1f469-1f3fd-200d-1f527':0, '1f469-1f3fe-200d-1f527':0, '1f469-1f3ff-200d-1f527':0, '1f469-1f3fb-200d-1f52c':0, '1f469-1f3fc-200d-1f52c':0, '1f469-1f3fd-200d-1f52c':0, '1f469-1f3fe-200d-1f52c':0, '1f469-1f3ff-200d-1f52c':0, '1f469-1f3fb-200d-1f680':0, '1f469-1f3fc-200d-1f680':0, '1f469-1f3fd-200d-1f680':0, '1f469-1f3fe-200d-1f680':0, '1f469-1f3ff-200d-1f680':0, '1f469-1f3fb-200d-1f692':0, '1f469-1f3fc-200d-1f692':0, '1f469-1f3fd-200d-1f692':0, '1f469-1f3fe-200d-1f692':0, '1f469-1f3ff-200d-1f692':0, '1f469-1f3fb-200d-1f9af':0, '1f469-1f3fc-200d-1f9af':0, '1f469-1f3fd-200d-1f9af':0, '1f469-1f3fe-200d-1f9af':0, '1f469-1f3ff-200d-1f9af':0, '1f469-1f3fb-200d-1f9b0':0, '1f469-1f3fc-200d-1f9b0':0, '1f469-1f3fd-200d-1f9b0':0, '1f469-1f3fe-200d-1f9b0':0, '1f469-1f3ff-200d-1f9b0':0, '1f469-1f3fb-200d-1f9b1':0, '1f469-1f3fc-200d-1f9b1':0, '1f469-1f3fd-200d-1f9b1':0, '1f469-1f3fe-200d-1f9b1':0, '1f469-1f3ff-200d-1f9b1':0, '1f469-1f3fb-200d-1f9b2':0, '1f469-1f3fc-200d-1f9b2':0, '1f469-1f3fd-200d-1f9b2':0, '1f469-1f3fe-200d-1f9b2':0, '1f469-1f3ff-200d-1f9b2':0, '1f469-1f3fb-200d-1f9b3':0, '1f469-1f3fc-200d-1f9b3':0, '1f469-1f3fd-200d-1f9b3':0, '1f469-1f3fe-200d-1f9b3':0, '1f469-1f3ff-200d-1f9b3':0, '1f469-1f3fb-200d-1f9bc':0, '1f469-1f3fc-200d-1f9bc':0, '1f469-1f3fd-200d-1f9bc':0, '1f469-1f3fe-200d-1f9bc':0, '1f469-1f3ff-200d-1f9bc':0, '1f469-1f3fb-200d-1f9bd':0, '1f469-1f3fc-200d-1f9bd':0, '1f469-1f3fd-200d-1f9bd':0, '1f469-1f3fe-200d-1f9bd':0, '1f469-1f3ff-200d-1f9bd':0, '1f469-1f3fb-200d-2695':0, '1f469-1f3fc-200d-2695':0, '1f469-1f3fd-200d-2695':0, '1f469-1f3fe-200d-2695':0, '1f469-1f3ff-200d-2695':0, '1f469-1f3fb-200d-2696':0, '1f469-1f3fc-200d-2696':0, '1f469-1f3fd-200d-2696':0, '1f469-1f3fe-200d-2696':0, '1f469-1f3ff-200d-2696':0, '1f469-1f3fb-200d-2708':0, '1f469-1f3fc-200d-2708':0, '1f469-1f3fd-200d-2708':0, '1f469-1f3fe-200d-2708':0, '1f469-1f3ff-200d-2708':0, '1f469-1f3fb-200d-2764-200d-1f468-1f3fb':0, '1f469-1f3fb-200d-2764-200d-1f468-1f3fc':0, '1f469-1f3fb-200d-2764-200d-1f468-1f3fd':0, '1f469-1f3fb-200d-2764-200d-1f468-1f3fe':0, '1f469-1f3fb-200d-2764-200d-1f468-1f3ff':0, '1f469-1f3fc-200d-2764-200d-1f468-1f3fb':0, '1f469-1f3fc-200d-2764-200d-1f468-1f3fc':0, '1f469-1f3fc-200d-2764-200d-1f468-1f3fd':0, '1f469-1f3fc-200d-2764-200d-1f468-1f3fe':0, '1f469-1f3fc-200d-2764-200d-1f468-1f3ff':0, '1f469-1f3fd-200d-2764-200d-1f468-1f3fb':0, '1f469-1f3fd-200d-2764-200d-1f468-1f3fc':0, '1f469-1f3fd-200d-2764-200d-1f468-1f3fd':0, '1f469-1f3fd-200d-2764-200d-1f468-1f3fe':0, '1f469-1f3fd-200d-2764-200d-1f468-1f3ff':0, '1f469-1f3fe-200d-2764-200d-1f468-1f3fb':0, '1f469-1f3fe-200d-2764-200d-1f468-1f3fc':0, '1f469-1f3fe-200d-2764-200d-1f468-1f3fd':0, '1f469-1f3fe-200d-2764-200d-1f468-1f3fe':0, '1f469-1f3fe-200d-2764-200d-1f468-1f3ff':0, '1f469-1f3ff-200d-2764-200d-1f468-1f3fb':0, '1f469-1f3ff-200d-2764-200d-1f468-1f3fc':0, '1f469-1f3ff-200d-2764-200d-1f468-1f3fd':0, '1f469-1f3ff-200d-2764-200d-1f468-1f3fe':0, '1f469-1f3ff-200d-2764-200d-1f468-1f3ff':0, '1f469-1f3fb-200d-2764-200d-1f469-1f3fb':0, '1f469-1f3fb-200d-2764-200d-1f469-1f3fc':0, '1f469-1f3fb-200d-2764-200d-1f469-1f3fd':0, '1f469-1f3fb-200d-2764-200d-1f469-1f3fe':0, '1f469-1f3fb-200d-2764-200d-1f469-1f3ff':0, '1f469-1f3fc-200d-2764-200d-1f469-1f3fb':0, '1f469-1f3fc-200d-2764-200d-1f469-1f3fc':0, '1f469-1f3fc-200d-2764-200d-1f469-1f3fd':0, '1f469-1f3fc-200d-2764-200d-1f469-1f3fe':0, '1f469-1f3fc-200d-2764-200d-1f469-1f3ff':0, '1f469-1f3fd-200d-2764-200d-1f469-1f3fb':0, '1f469-1f3fd-200d-2764-200d-1f469-1f3fc':0, '1f469-1f3fd-200d-2764-200d-1f469-1f3fd':0, '1f469-1f3fd-200d-2764-200d-1f469-1f3fe':0, '1f469-1f3fd-200d-2764-200d-1f469-1f3ff':0, '1f469-1f3fe-200d-2764-200d-1f469-1f3fb':0, '1f469-1f3fe-200d-2764-200d-1f469-1f3fc':0, '1f469-1f3fe-200d-2764-200d-1f469-1f3fd':0, '1f469-1f3fe-200d-2764-200d-1f469-1f3fe':0, '1f469-1f3fe-200d-2764-200d-1f469-1f3ff':0, '1f469-1f3ff-200d-2764-200d-1f469-1f3fb':0, '1f469-1f3ff-200d-2764-200d-1f469-1f3fc':0, '1f469-1f3ff-200d-2764-200d-1f469-1f3fd':0, '1f469-1f3ff-200d-2764-200d-1f469-1f3fe':0, '1f469-1f3ff-200d-2764-200d-1f469-1f3ff':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3fb':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3fc':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3fd':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3fe':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3ff':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3fb':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3fc':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3fd':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3fe':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3ff':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3fb':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3fc':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3fd':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3fe':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3ff':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3fb':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3fc':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3fd':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3fe':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3ff':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3fb':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3fc':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3fd':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3fe':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3ff':0, '1f469-1f3fb':0, '1f469-1f3fc':0, '1f469-1f3fd':0, '1f469-1f3fe':0, '1f469-1f3ff':0, '1f46b-1f3fb':0, '1f46b-1f3fc':0, '1f46b-1f3fd':0, '1f46b-1f3fe':0, '1f46b-1f3ff':0, '1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc':0, '1f469-1f3fb-200d-1f91d-200d-1f468-1f3fd':0, '1f469-1f3fb-200d-1f91d-200d-1f468-1f3fe':0, '1f469-1f3fb-200d-1f91d-200d-1f468-1f3ff':0, '1f469-1f3fc-200d-1f91d-200d-1f468-1f3fb':0, '1f469-1f3fc-200d-1f91d-200d-1f468-1f3fd':0, '1f469-1f3fc-200d-1f91d-200d-1f468-1f3fe':0, '1f469-1f3fc-200d-1f91d-200d-1f468-1f3ff':0, '1f469-1f3fd-200d-1f91d-200d-1f468-1f3fb':0, '1f469-1f3fd-200d-1f91d-200d-1f468-1f3fc':0, '1f469-1f3fd-200d-1f91d-200d-1f468-1f3fe':0, '1f469-1f3fd-200d-1f91d-200d-1f468-1f3ff':0, '1f469-1f3fe-200d-1f91d-200d-1f468-1f3fb':0, '1f469-1f3fe-200d-1f91d-200d-1f468-1f3fc':0, '1f469-1f3fe-200d-1f91d-200d-1f468-1f3fd':0, '1f469-1f3fe-200d-1f91d-200d-1f468-1f3ff':0, '1f469-1f3ff-200d-1f91d-200d-1f468-1f3fb':0, '1f469-1f3ff-200d-1f91d-200d-1f468-1f3fc':0, '1f469-1f3ff-200d-1f91d-200d-1f468-1f3fd':0, '1f469-1f3ff-200d-1f91d-200d-1f468-1f3fe':0, '1f46c-1f3fb':0, '1f46c-1f3fc':0, '1f46c-1f3fd':0, '1f46c-1f3fe':0, '1f46c-1f3ff':0, '1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc':0, '1f468-1f3fb-200d-1f91d-200d-1f468-1f3fd':0, '1f468-1f3fb-200d-1f91d-200d-1f468-1f3fe':0, '1f468-1f3fb-200d-1f91d-200d-1f468-1f3ff':0, '1f468-1f3fc-200d-1f91d-200d-1f468-1f3fb':0, '1f468-1f3fc-200d-1f91d-200d-1f468-1f3fd':0, '1f468-1f3fc-200d-1f91d-200d-1f468-1f3fe':0, '1f468-1f3fc-200d-1f91d-200d-1f468-1f3ff':0, '1f468-1f3fd-200d-1f91d-200d-1f468-1f3fb':0, '1f468-1f3fd-200d-1f91d-200d-1f468-1f3fc':0, '1f468-1f3fd-200d-1f91d-200d-1f468-1f3fe':0, '1f468-1f3fd-200d-1f91d-200d-1f468-1f3ff':0, '1f468-1f3fe-200d-1f91d-200d-1f468-1f3fb':0, '1f468-1f3fe-200d-1f91d-200d-1f468-1f3fc':0, '1f468-1f3fe-200d-1f91d-200d-1f468-1f3fd':0, '1f468-1f3fe-200d-1f91d-200d-1f468-1f3ff':0, '1f468-1f3ff-200d-1f91d-200d-1f468-1f3fb':0, '1f468-1f3ff-200d-1f91d-200d-1f468-1f3fc':0, '1f468-1f3ff-200d-1f91d-200d-1f468-1f3fd':0, '1f468-1f3ff-200d-1f91d-200d-1f468-1f3fe':0, '1f46d-1f3fb':0, '1f46d-1f3fc':0, '1f46d-1f3fd':0, '1f46d-1f3fe':0, '1f46d-1f3ff':0, '1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc':0, '1f469-1f3fb-200d-1f91d-200d-1f469-1f3fd':0, '1f469-1f3fb-200d-1f91d-200d-1f469-1f3fe':0, '1f469-1f3fb-200d-1f91d-200d-1f469-1f3ff':0, '1f469-1f3fc-200d-1f91d-200d-1f469-1f3fb':0, '1f469-1f3fc-200d-1f91d-200d-1f469-1f3fd':0, '1f469-1f3fc-200d-1f91d-200d-1f469-1f3fe':0, '1f469-1f3fc-200d-1f91d-200d-1f469-1f3ff':0, '1f469-1f3fd-200d-1f91d-200d-1f469-1f3fb':0, '1f469-1f3fd-200d-1f91d-200d-1f469-1f3fc':0, '1f469-1f3fd-200d-1f91d-200d-1f469-1f3fe':0, '1f469-1f3fd-200d-1f91d-200d-1f469-1f3ff':0, '1f469-1f3fe-200d-1f91d-200d-1f469-1f3fb':0, '1f469-1f3fe-200d-1f91d-200d-1f469-1f3fc':0, '1f469-1f3fe-200d-1f91d-200d-1f469-1f3fd':0, '1f469-1f3fe-200d-1f91d-200d-1f469-1f3ff':0, '1f469-1f3ff-200d-1f91d-200d-1f469-1f3fb':0, '1f469-1f3ff-200d-1f91d-200d-1f469-1f3fc':0, '1f469-1f3ff-200d-1f91d-200d-1f469-1f3fd':0, '1f469-1f3ff-200d-1f91d-200d-1f469-1f3fe':0, '1f46e-1f3fb-200d-2640':0, '1f46e-1f3fc-200d-2640':0, '1f46e-1f3fd-200d-2640':0, '1f46e-1f3fe-200d-2640':0, '1f46e-1f3ff-200d-2640':0, '1f46e-1f3fb-200d-2642':0, '1f46e-1f3fc-200d-2642':0, '1f46e-1f3fd-200d-2642':0, '1f46e-1f3fe-200d-2642':0, '1f46e-1f3ff-200d-2642':0, '1f46e-1f3fb':0, '1f46e-1f3fc':0, '1f46e-1f3fd':0, '1f46e-1f3fe':0, '1f46e-1f3ff':0, '1f470-1f3fb-200d-2640':0, '1f470-1f3fc-200d-2640':0, '1f470-1f3fd-200d-2640':0, '1f470-1f3fe-200d-2640':0, '1f470-1f3ff-200d-2640':0, '1f470-1f3fb-200d-2642':0, '1f470-1f3fc-200d-2642':0, '1f470-1f3fd-200d-2642':0, '1f470-1f3fe-200d-2642':0, '1f470-1f3ff-200d-2642':0, '1f470-1f3fb':0, '1f470-1f3fc':0, '1f470-1f3fd':0, '1f470-1f3fe':0, '1f470-1f3ff':0, '1f471-1f3fb-200d-2640':0, '1f471-1f3fc-200d-2640':0, '1f471-1f3fd-200d-2640':0, '1f471-1f3fe-200d-2640':0, '1f471-1f3ff-200d-2640':0, '1f471-1f3fb-200d-2642':0, '1f471-1f3fc-200d-2642':0, '1f471-1f3fd-200d-2642':0, '1f471-1f3fe-200d-2642':0, '1f471-1f3ff-200d-2642':0, '1f471-1f3fb':0, '1f471-1f3fc':0, '1f471-1f3fd':0, '1f471-1f3fe':0, '1f471-1f3ff':0, '1f472-1f3fb':0, '1f472-1f3fc':0, '1f472-1f3fd':0, '1f472-1f3fe':0, '1f472-1f3ff':0, '1f473-1f3fb-200d-2640':0, '1f473-1f3fc-200d-2640':0, '1f473-1f3fd-200d-2640':0, '1f473-1f3fe-200d-2640':0, '1f473-1f3ff-200d-2640':0, '1f473-1f3fb-200d-2642':0, '1f473-1f3fc-200d-2642':0, '1f473-1f3fd-200d-2642':0, '1f473-1f3fe-200d-2642':0, '1f473-1f3ff-200d-2642':0, '1f473-1f3fb':0, '1f473-1f3fc':0, '1f473-1f3fd':0, '1f473-1f3fe':0, '1f473-1f3ff':0, '1f474-1f3fb':0, '1f474-1f3fc':0, '1f474-1f3fd':0, '1f474-1f3fe':0, '1f474-1f3ff':0, '1f475-1f3fb':0, '1f475-1f3fc':0, '1f475-1f3fd':0, '1f475-1f3fe':0, '1f475-1f3ff':0, '1f476-1f3fb':0, '1f476-1f3fc':0, '1f476-1f3fd':0, '1f476-1f3fe':0, '1f476-1f3ff':0, '1f477-1f3fb-200d-2640':0, '1f477-1f3fc-200d-2640':0, '1f477-1f3fd-200d-2640':0, '1f477-1f3fe-200d-2640':0, '1f477-1f3ff-200d-2640':0, '1f477-1f3fb-200d-2642':0, '1f477-1f3fc-200d-2642':0, '1f477-1f3fd-200d-2642':0, '1f477-1f3fe-200d-2642':0, '1f477-1f3ff-200d-2642':0, '1f477-1f3fb':0, '1f477-1f3fc':0, '1f477-1f3fd':0, '1f477-1f3fe':0, '1f477-1f3ff':0, '1f478-1f3fb':0, '1f478-1f3fc':0, '1f478-1f3fd':0, '1f478-1f3fe':0, '1f478-1f3ff':0, '1f47c-1f3fb':0, '1f47c-1f3fc':0, '1f47c-1f3fd':0, '1f47c-1f3fe':0, '1f47c-1f3ff':0, '1f481-1f3fb-200d-2640':0, '1f481-1f3fc-200d-2640':0, '1f481-1f3fd-200d-2640':0, '1f481-1f3fe-200d-2640':0, '1f481-1f3ff-200d-2640':0, '1f481-1f3fb-200d-2642':0, '1f481-1f3fc-200d-2642':0, '1f481-1f3fd-200d-2642':0, '1f481-1f3fe-200d-2642':0, '1f481-1f3ff-200d-2642':0, '1f481-1f3fb':0, '1f481-1f3fc':0, '1f481-1f3fd':0, '1f481-1f3fe':0, '1f481-1f3ff':0, '1f482-1f3fb-200d-2640':0, '1f482-1f3fc-200d-2640':0, '1f482-1f3fd-200d-2640':0, '1f482-1f3fe-200d-2640':0, '1f482-1f3ff-200d-2640':0, '1f482-1f3fb-200d-2642':0, '1f482-1f3fc-200d-2642':0, '1f482-1f3fd-200d-2642':0, '1f482-1f3fe-200d-2642':0, '1f482-1f3ff-200d-2642':0, '1f482-1f3fb':0, '1f482-1f3fc':0, '1f482-1f3fd':0, '1f482-1f3fe':0, '1f482-1f3ff':0, '1f483-1f3fb':0, '1f483-1f3fc':0, '1f483-1f3fd':0, '1f483-1f3fe':0, '1f483-1f3ff':0, '1f485-1f3fb':0, '1f485-1f3fc':0, '1f485-1f3fd':0, '1f485-1f3fe':0, '1f485-1f3ff':0, '1f486-1f3fb-200d-2640':0, '1f486-1f3fc-200d-2640':0, '1f486-1f3fd-200d-2640':0, '1f486-1f3fe-200d-2640':0, '1f486-1f3ff-200d-2640':0, '1f486-1f3fb-200d-2642':0, '1f486-1f3fc-200d-2642':0, '1f486-1f3fd-200d-2642':0, '1f486-1f3fe-200d-2642':0, '1f486-1f3ff-200d-2642':0, '1f486-1f3fb':0, '1f486-1f3fc':0, '1f486-1f3fd':0, '1f486-1f3fe':0, '1f486-1f3ff':0, '1f487-1f3fb-200d-2640':0, '1f487-1f3fc-200d-2640':0, '1f487-1f3fd-200d-2640':0, '1f487-1f3fe-200d-2640':0, '1f487-1f3ff-200d-2640':0, '1f487-1f3fb-200d-2642':0, '1f487-1f3fc-200d-2642':0, '1f487-1f3fd-200d-2642':0, '1f487-1f3fe-200d-2642':0, '1f487-1f3ff-200d-2642':0, '1f487-1f3fb':0, '1f487-1f3fc':0, '1f487-1f3fd':0, '1f487-1f3fe':0, '1f487-1f3ff':0, '1f48f-1f3fb':0, '1f48f-1f3fc':0, '1f48f-1f3fd':0, '1f48f-1f3fe':0, '1f48f-1f3ff':0, '1f9d1-1f3fb-200d-2764-200d-1f48b-200d-1f9d1-1f3fc':0, '1f9d1-1f3fb-200d-2764-200d-1f48b-200d-1f9d1-1f3fd':0, '1f9d1-1f3fb-200d-2764-200d-1f48b-200d-1f9d1-1f3fe':0, '1f9d1-1f3fb-200d-2764-200d-1f48b-200d-1f9d1-1f3ff':0, '1f9d1-1f3fc-200d-2764-200d-1f48b-200d-1f9d1-1f3fb':0, '1f9d1-1f3fc-200d-2764-200d-1f48b-200d-1f9d1-1f3fd':0, '1f9d1-1f3fc-200d-2764-200d-1f48b-200d-1f9d1-1f3fe':0, '1f9d1-1f3fc-200d-2764-200d-1f48b-200d-1f9d1-1f3ff':0, '1f9d1-1f3fd-200d-2764-200d-1f48b-200d-1f9d1-1f3fb':0, '1f9d1-1f3fd-200d-2764-200d-1f48b-200d-1f9d1-1f3fc':0, '1f9d1-1f3fd-200d-2764-200d-1f48b-200d-1f9d1-1f3fe':0, '1f9d1-1f3fd-200d-2764-200d-1f48b-200d-1f9d1-1f3ff':0, '1f9d1-1f3fe-200d-2764-200d-1f48b-200d-1f9d1-1f3fb':0, '1f9d1-1f3fe-200d-2764-200d-1f48b-200d-1f9d1-1f3fc':0, '1f9d1-1f3fe-200d-2764-200d-1f48b-200d-1f9d1-1f3fd':0, '1f9d1-1f3fe-200d-2764-200d-1f48b-200d-1f9d1-1f3ff':0, '1f9d1-1f3ff-200d-2764-200d-1f48b-200d-1f9d1-1f3fb':0, '1f9d1-1f3ff-200d-2764-200d-1f48b-200d-1f9d1-1f3fc':0, '1f9d1-1f3ff-200d-2764-200d-1f48b-200d-1f9d1-1f3fd':0, '1f9d1-1f3ff-200d-2764-200d-1f48b-200d-1f9d1-1f3fe':0, '1f491-1f3fb':0, '1f491-1f3fc':0, '1f491-1f3fd':0, '1f491-1f3fe':0, '1f491-1f3ff':0, '1f9d1-1f3fb-200d-2764-200d-1f9d1-1f3fc':0, '1f9d1-1f3fb-200d-2764-200d-1f9d1-1f3fd':0, '1f9d1-1f3fb-200d-2764-200d-1f9d1-1f3fe':0, '1f9d1-1f3fb-200d-2764-200d-1f9d1-1f3ff':0, '1f9d1-1f3fc-200d-2764-200d-1f9d1-1f3fb':0, '1f9d1-1f3fc-200d-2764-200d-1f9d1-1f3fd':0, '1f9d1-1f3fc-200d-2764-200d-1f9d1-1f3fe':0, '1f9d1-1f3fc-200d-2764-200d-1f9d1-1f3ff':0, '1f9d1-1f3fd-200d-2764-200d-1f9d1-1f3fb':0, '1f9d1-1f3fd-200d-2764-200d-1f9d1-1f3fc':0, '1f9d1-1f3fd-200d-2764-200d-1f9d1-1f3fe':0, '1f9d1-1f3fd-200d-2764-200d-1f9d1-1f3ff':0, '1f9d1-1f3fe-200d-2764-200d-1f9d1-1f3fb':0, '1f9d1-1f3fe-200d-2764-200d-1f9d1-1f3fc':0, '1f9d1-1f3fe-200d-2764-200d-1f9d1-1f3fd':0, '1f9d1-1f3fe-200d-2764-200d-1f9d1-1f3ff':0, '1f9d1-1f3ff-200d-2764-200d-1f9d1-1f3fb':0, '1f9d1-1f3ff-200d-2764-200d-1f9d1-1f3fc':0, '1f9d1-1f3ff-200d-2764-200d-1f9d1-1f3fd':0, '1f9d1-1f3ff-200d-2764-200d-1f9d1-1f3fe':0, '1f4aa-1f3fb':0, '1f4aa-1f3fc':0, '1f4aa-1f3fd':0, '1f4aa-1f3fe':0, '1f4aa-1f3ff':0, '1f574-1f3fb':0, '1f574-1f3fc':0, '1f574-1f3fd':0, '1f574-1f3fe':0, '1f574-1f3ff':0, '1f575-1f3fb-200d-2640':0, '1f575-1f3fc-200d-2640':0, '1f575-1f3fd-200d-2640':0, '1f575-1f3fe-200d-2640':0, '1f575-1f3ff-200d-2640':0, '1f575-1f3fb-200d-2642':0, '1f575-1f3fc-200d-2642':0, '1f575-1f3fd-200d-2642':0, '1f575-1f3fe-200d-2642':0, '1f575-1f3ff-200d-2642':0, '1f575-1f3fb':0, '1f575-1f3fc':0, '1f575-1f3fd':0, '1f575-1f3fe':0, '1f575-1f3ff':0, '1f57a-1f3fb':0, '1f57a-1f3fc':0, '1f57a-1f3fd':0, '1f57a-1f3fe':0, '1f57a-1f3ff':0, '1f590-1f3fb':0, '1f590-1f3fc':0, '1f590-1f3fd':0, '1f590-1f3fe':0, '1f590-1f3ff':0, '1f595-1f3fb':0, '1f595-1f3fc':0, '1f595-1f3fd':0, '1f595-1f3fe':0, '1f595-1f3ff':0, '1f596-1f3fb':0, '1f596-1f3fc':0, '1f596-1f3fd':0, '1f596-1f3fe':0, '1f596-1f3ff':0, '1f645-1f3fb-200d-2640':0, '1f645-1f3fc-200d-2640':0, '1f645-1f3fd-200d-2640':0, '1f645-1f3fe-200d-2640':0, '1f645-1f3ff-200d-2640':0, '1f645-1f3fb-200d-2642':0, '1f645-1f3fc-200d-2642':0, '1f645-1f3fd-200d-2642':0, '1f645-1f3fe-200d-2642':0, '1f645-1f3ff-200d-2642':0, '1f645-1f3fb':0, '1f645-1f3fc':0, '1f645-1f3fd':0, '1f645-1f3fe':0, '1f645-1f3ff':0, '1f646-1f3fb-200d-2640':0, '1f646-1f3fc-200d-2640':0, '1f646-1f3fd-200d-2640':0, '1f646-1f3fe-200d-2640':0, '1f646-1f3ff-200d-2640':0, '1f646-1f3fb-200d-2642':0, '1f646-1f3fc-200d-2642':0, '1f646-1f3fd-200d-2642':0, '1f646-1f3fe-200d-2642':0, '1f646-1f3ff-200d-2642':0, '1f646-1f3fb':0, '1f646-1f3fc':0, '1f646-1f3fd':0, '1f646-1f3fe':0, '1f646-1f3ff':0, '1f647-1f3fb-200d-2640':0, '1f647-1f3fc-200d-2640':0, '1f647-1f3fd-200d-2640':0, '1f647-1f3fe-200d-2640':0, '1f647-1f3ff-200d-2640':0, '1f647-1f3fb-200d-2642':0, '1f647-1f3fc-200d-2642':0, '1f647-1f3fd-200d-2642':0, '1f647-1f3fe-200d-2642':0, '1f647-1f3ff-200d-2642':0, '1f647-1f3fb':0, '1f647-1f3fc':0, '1f647-1f3fd':0, '1f647-1f3fe':0, '1f647-1f3ff':0, '1f64b-1f3fb-200d-2640':0, '1f64b-1f3fc-200d-2640':0, '1f64b-1f3fd-200d-2640':0, '1f64b-1f3fe-200d-2640':0, '1f64b-1f3ff-200d-2640':0, '1f64b-1f3fb-200d-2642':0, '1f64b-1f3fc-200d-2642':0, '1f64b-1f3fd-200d-2642':0, '1f64b-1f3fe-200d-2642':0, '1f64b-1f3ff-200d-2642':0, '1f64b-1f3fb':0, '1f64b-1f3fc':0, '1f64b-1f3fd':0, '1f64b-1f3fe':0, '1f64b-1f3ff':0, '1f64c-1f3fb':0, '1f64c-1f3fc':0, '1f64c-1f3fd':0, '1f64c-1f3fe':0, '1f64c-1f3ff':0, '1f64d-1f3fb-200d-2640':0, '1f64d-1f3fc-200d-2640':0, '1f64d-1f3fd-200d-2640':0, '1f64d-1f3fe-200d-2640':0, '1f64d-1f3ff-200d-2640':0, '1f64d-1f3fb-200d-2642':0, '1f64d-1f3fc-200d-2642':0, '1f64d-1f3fd-200d-2642':0, '1f64d-1f3fe-200d-2642':0, '1f64d-1f3ff-200d-2642':0, '1f64d-1f3fb':0, '1f64d-1f3fc':0, '1f64d-1f3fd':0, '1f64d-1f3fe':0, '1f64d-1f3ff':0, '1f64e-1f3fb-200d-2640':0, '1f64e-1f3fc-200d-2640':0, '1f64e-1f3fd-200d-2640':0, '1f64e-1f3fe-200d-2640':0, '1f64e-1f3ff-200d-2640':0, '1f64e-1f3fb-200d-2642':0, '1f64e-1f3fc-200d-2642':0, '1f64e-1f3fd-200d-2642':0, '1f64e-1f3fe-200d-2642':0, '1f64e-1f3ff-200d-2642':0, '1f64e-1f3fb':0, '1f64e-1f3fc':0, '1f64e-1f3fd':0, '1f64e-1f3fe':0, '1f64e-1f3ff':0, '1f64f-1f3fb':0, '1f64f-1f3fc':0, '1f64f-1f3fd':0, '1f64f-1f3fe':0, '1f64f-1f3ff':0, '1f6a3-1f3fb-200d-2640':0, '1f6a3-1f3fc-200d-2640':0, '1f6a3-1f3fd-200d-2640':0, '1f6a3-1f3fe-200d-2640':0, '1f6a3-1f3ff-200d-2640':0, '1f6a3-1f3fb-200d-2642':0, '1f6a3-1f3fc-200d-2642':0, '1f6a3-1f3fd-200d-2642':0, '1f6a3-1f3fe-200d-2642':0, '1f6a3-1f3ff-200d-2642':0, '1f6a3-1f3fb':0, '1f6a3-1f3fc':0, '1f6a3-1f3fd':0, '1f6a3-1f3fe':0, '1f6a3-1f3ff':0, '1f6b4-1f3fb-200d-2640':0, '1f6b4-1f3fc-200d-2640':0, '1f6b4-1f3fd-200d-2640':0, '1f6b4-1f3fe-200d-2640':0, '1f6b4-1f3ff-200d-2640':0, '1f6b4-1f3fb-200d-2642':0, '1f6b4-1f3fc-200d-2642':0, '1f6b4-1f3fd-200d-2642':0, '1f6b4-1f3fe-200d-2642':0, '1f6b4-1f3ff-200d-2642':0, '1f6b4-1f3fb':0, '1f6b4-1f3fc':0, '1f6b4-1f3fd':0, '1f6b4-1f3fe':0, '1f6b4-1f3ff':0, '1f6b5-1f3fb-200d-2640':0, '1f6b5-1f3fc-200d-2640':0, '1f6b5-1f3fd-200d-2640':0, '1f6b5-1f3fe-200d-2640':0, '1f6b5-1f3ff-200d-2640':0, '1f6b5-1f3fb-200d-2642':0, '1f6b5-1f3fc-200d-2642':0, '1f6b5-1f3fd-200d-2642':0, '1f6b5-1f3fe-200d-2642':0, '1f6b5-1f3ff-200d-2642':0, '1f6b5-1f3fb':0, '1f6b5-1f3fc':0, '1f6b5-1f3fd':0, '1f6b5-1f3fe':0, '1f6b5-1f3ff':0, '1f6b6-1f3fb-200d-2640':0, '1f6b6-1f3fc-200d-2640':0, '1f6b6-1f3fd-200d-2640':0, '1f6b6-1f3fe-200d-2640':0, '1f6b6-1f3ff-200d-2640':0, '1f6b6-1f3fb-200d-2642':0, '1f6b6-1f3fc-200d-2642':0, '1f6b6-1f3fd-200d-2642':0, '1f6b6-1f3fe-200d-2642':0, '1f6b6-1f3ff-200d-2642':0, '1f6b6-1f3fb':0, '1f6b6-1f3fc':0, '1f6b6-1f3fd':0, '1f6b6-1f3fe':0, '1f6b6-1f3ff':0, '1f6c0-1f3fb':0, '1f6c0-1f3fc':0, '1f6c0-1f3fd':0, '1f6c0-1f3fe':0, '1f6c0-1f3ff':0, '1f6cc-1f3fb':0, '1f6cc-1f3fc':0, '1f6cc-1f3fd':0, '1f6cc-1f3fe':0, '1f6cc-1f3ff':0, '1f90c-1f3fb':0, '1f90c-1f3fc':0, '1f90c-1f3fd':0, '1f90c-1f3fe':0, '1f90c-1f3ff':0, '1f90f-1f3fb':0, '1f90f-1f3fc':0, '1f90f-1f3fd':0, '1f90f-1f3fe':0, '1f90f-1f3ff':0, '1f918-1f3fb':0, '1f918-1f3fc':0, '1f918-1f3fd':0, '1f918-1f3fe':0, '1f918-1f3ff':0, '1f919-1f3fb':0, '1f919-1f3fc':0, '1f919-1f3fd':0, '1f919-1f3fe':0, '1f919-1f3ff':0, '1f91a-1f3fb':0, '1f91a-1f3fc':0, '1f91a-1f3fd':0, '1f91a-1f3fe':0, '1f91a-1f3ff':0, '1f91b-1f3fb':0, '1f91b-1f3fc':0, '1f91b-1f3fd':0, '1f91b-1f3fe':0, '1f91b-1f3ff':0, '1f91c-1f3fb':0, '1f91c-1f3fc':0, '1f91c-1f3fd':0, '1f91c-1f3fe':0, '1f91c-1f3ff':0, '1f91d-1f3fb':0, '1f91d-1f3fc':0, '1f91d-1f3fd':0, '1f91d-1f3fe':0, '1f91d-1f3ff':0, '1f91e-1f3fb':0, '1f91e-1f3fc':0, '1f91e-1f3fd':0, '1f91e-1f3fe':0, '1f91e-1f3ff':0, '1f91f-1f3fb':0, '1f91f-1f3fc':0, '1f91f-1f3fd':0, '1f91f-1f3fe':0, '1f91f-1f3ff':0, '1f926-1f3fb-200d-2640':0, '1f926-1f3fc-200d-2640':0, '1f926-1f3fd-200d-2640':0, '1f926-1f3fe-200d-2640':0, '1f926-1f3ff-200d-2640':0, '1f926-1f3fb-200d-2642':0, '1f926-1f3fc-200d-2642':0, '1f926-1f3fd-200d-2642':0, '1f926-1f3fe-200d-2642':0, '1f926-1f3ff-200d-2642':0, '1f926-1f3fb':0, '1f926-1f3fc':0, '1f926-1f3fd':0, '1f926-1f3fe':0, '1f926-1f3ff':0, '1f930-1f3fb':0, '1f930-1f3fc':0, '1f930-1f3fd':0, '1f930-1f3fe':0, '1f930-1f3ff':0, '1f931-1f3fb':0, '1f931-1f3fc':0, '1f931-1f3fd':0, '1f931-1f3fe':0, '1f931-1f3ff':0, '1f932-1f3fb':0, '1f932-1f3fc':0, '1f932-1f3fd':0, '1f932-1f3fe':0, '1f932-1f3ff':0, '1f933-1f3fb':0, '1f933-1f3fc':0, '1f933-1f3fd':0, '1f933-1f3fe':0, '1f933-1f3ff':0, '1f934-1f3fb':0, '1f934-1f3fc':0, '1f934-1f3fd':0, '1f934-1f3fe':0, '1f934-1f3ff':0, '1f935-1f3fb-200d-2640':0, '1f935-1f3fc-200d-2640':0, '1f935-1f3fd-200d-2640':0, '1f935-1f3fe-200d-2640':0, '1f935-1f3ff-200d-2640':0, '1f935-1f3fb-200d-2642':0, '1f935-1f3fc-200d-2642':0, '1f935-1f3fd-200d-2642':0, '1f935-1f3fe-200d-2642':0, '1f935-1f3ff-200d-2642':0, '1f935-1f3fb':0, '1f935-1f3fc':0, '1f935-1f3fd':0, '1f935-1f3fe':0, '1f935-1f3ff':0, '1f936-1f3fb':0, '1f936-1f3fc':0, '1f936-1f3fd':0, '1f936-1f3fe':0, '1f936-1f3ff':0, '1f937-1f3fb-200d-2640':0, '1f937-1f3fc-200d-2640':0, '1f937-1f3fd-200d-2640':0, '1f937-1f3fe-200d-2640':0, '1f937-1f3ff-200d-2640':0, '1f937-1f3fb-200d-2642':0, '1f937-1f3fc-200d-2642':0, '1f937-1f3fd-200d-2642':0, '1f937-1f3fe-200d-2642':0, '1f937-1f3ff-200d-2642':0, '1f937-1f3fb':0, '1f937-1f3fc':0, '1f937-1f3fd':0, '1f937-1f3fe':0, '1f937-1f3ff':0, '1f938-1f3fb-200d-2640':0, '1f938-1f3fc-200d-2640':0, '1f938-1f3fd-200d-2640':0, '1f938-1f3fe-200d-2640':0, '1f938-1f3ff-200d-2640':0, '1f938-1f3fb-200d-2642':0, '1f938-1f3fc-200d-2642':0, '1f938-1f3fd-200d-2642':0, '1f938-1f3fe-200d-2642':0, '1f938-1f3ff-200d-2642':0, '1f938-1f3fb':0, '1f938-1f3fc':0, '1f938-1f3fd':0, '1f938-1f3fe':0, '1f938-1f3ff':0, '1f939-1f3fb-200d-2640':0, '1f939-1f3fc-200d-2640':0, '1f939-1f3fd-200d-2640':0, '1f939-1f3fe-200d-2640':0, '1f939-1f3ff-200d-2640':0, '1f939-1f3fb-200d-2642':0, '1f939-1f3fc-200d-2642':0, '1f939-1f3fd-200d-2642':0, '1f939-1f3fe-200d-2642':0, '1f939-1f3ff-200d-2642':0, '1f939-1f3fb':0, '1f939-1f3fc':0, '1f939-1f3fd':0, '1f939-1f3fe':0, '1f939-1f3ff':0, '1f93d-1f3fb-200d-2640':0, '1f93d-1f3fc-200d-2640':0, '1f93d-1f3fd-200d-2640':0, '1f93d-1f3fe-200d-2640':0, '1f93d-1f3ff-200d-2640':0, '1f93d-1f3fb-200d-2642':0, '1f93d-1f3fc-200d-2642':0, '1f93d-1f3fd-200d-2642':0, '1f93d-1f3fe-200d-2642':0, '1f93d-1f3ff-200d-2642':0, '1f93d-1f3fb':0, '1f93d-1f3fc':0, '1f93d-1f3fd':0, '1f93d-1f3fe':0, '1f93d-1f3ff':0, '1f93e-1f3fb-200d-2640':0, '1f93e-1f3fc-200d-2640':0, '1f93e-1f3fd-200d-2640':0, '1f93e-1f3fe-200d-2640':0, '1f93e-1f3ff-200d-2640':0, '1f93e-1f3fb-200d-2642':0, '1f93e-1f3fc-200d-2642':0, '1f93e-1f3fd-200d-2642':0, '1f93e-1f3fe-200d-2642':0, '1f93e-1f3ff-200d-2642':0, '1f93e-1f3fb':0, '1f93e-1f3fc':0, '1f93e-1f3fd':0, '1f93e-1f3fe':0, '1f93e-1f3ff':0, '1f977-1f3fb':0, '1f977-1f3fc':0, '1f977-1f3fd':0, '1f977-1f3fe':0, '1f977-1f3ff':0, '1f9b5-1f3fb':0, '1f9b5-1f3fc':0, '1f9b5-1f3fd':0, '1f9b5-1f3fe':0, '1f9b5-1f3ff':0, '1f9b6-1f3fb':0, '1f9b6-1f3fc':0, '1f9b6-1f3fd':0, '1f9b6-1f3fe':0, '1f9b6-1f3ff':0, '1f9b8-1f3fb-200d-2640':0, '1f9b8-1f3fc-200d-2640':0, '1f9b8-1f3fd-200d-2640':0, '1f9b8-1f3fe-200d-2640':0, '1f9b8-1f3ff-200d-2640':0, '1f9b8-1f3fb-200d-2642':0, '1f9b8-1f3fc-200d-2642':0, '1f9b8-1f3fd-200d-2642':0, '1f9b8-1f3fe-200d-2642':0, '1f9b8-1f3ff-200d-2642':0, '1f9b8-1f3fb':0, '1f9b8-1f3fc':0, '1f9b8-1f3fd':0, '1f9b8-1f3fe':0, '1f9b8-1f3ff':0, '1f9b9-1f3fb-200d-2640':0, '1f9b9-1f3fc-200d-2640':0, '1f9b9-1f3fd-200d-2640':0, '1f9b9-1f3fe-200d-2640':0, '1f9b9-1f3ff-200d-2640':0, '1f9b9-1f3fb-200d-2642':0, '1f9b9-1f3fc-200d-2642':0, '1f9b9-1f3fd-200d-2642':0, '1f9b9-1f3fe-200d-2642':0, '1f9b9-1f3ff-200d-2642':0, '1f9b9-1f3fb':0, '1f9b9-1f3fc':0, '1f9b9-1f3fd':0, '1f9b9-1f3fe':0, '1f9b9-1f3ff':0, '1f9bb-1f3fb':0, '1f9bb-1f3fc':0, '1f9bb-1f3fd':0, '1f9bb-1f3fe':0, '1f9bb-1f3ff':0, '1f9cd-1f3fb-200d-2640':0, '1f9cd-1f3fc-200d-2640':0, '1f9cd-1f3fd-200d-2640':0, '1f9cd-1f3fe-200d-2640':0, '1f9cd-1f3ff-200d-2640':0, '1f9cd-1f3fb-200d-2642':0, '1f9cd-1f3fc-200d-2642':0, '1f9cd-1f3fd-200d-2642':0, '1f9cd-1f3fe-200d-2642':0, '1f9cd-1f3ff-200d-2642':0, '1f9cd-1f3fb':0, '1f9cd-1f3fc':0, '1f9cd-1f3fd':0, '1f9cd-1f3fe':0, '1f9cd-1f3ff':0, '1f9ce-1f3fb-200d-2640':0, '1f9ce-1f3fc-200d-2640':0, '1f9ce-1f3fd-200d-2640':0, '1f9ce-1f3fe-200d-2640':0, '1f9ce-1f3ff-200d-2640':0, '1f9ce-1f3fb-200d-2642':0, '1f9ce-1f3fc-200d-2642':0, '1f9ce-1f3fd-200d-2642':0, '1f9ce-1f3fe-200d-2642':0, '1f9ce-1f3ff-200d-2642':0, '1f9ce-1f3fb':0, '1f9ce-1f3fc':0, '1f9ce-1f3fd':0, '1f9ce-1f3fe':0, '1f9ce-1f3ff':0, '1f9cf-1f3fb-200d-2640':0, '1f9cf-1f3fc-200d-2640':0, '1f9cf-1f3fd-200d-2640':0, '1f9cf-1f3fe-200d-2640':0, '1f9cf-1f3ff-200d-2640':0, '1f9cf-1f3fb-200d-2642':0, '1f9cf-1f3fc-200d-2642':0, '1f9cf-1f3fd-200d-2642':0, '1f9cf-1f3fe-200d-2642':0, '1f9cf-1f3ff-200d-2642':0, '1f9cf-1f3fb':0, '1f9cf-1f3fc':0, '1f9cf-1f3fd':0, '1f9cf-1f3fe':0, '1f9cf-1f3ff':0, '1f9d1-1f3fb-200d-1f33e':0, '1f9d1-1f3fc-200d-1f33e':0, '1f9d1-1f3fd-200d-1f33e':0, '1f9d1-1f3fe-200d-1f33e':0, '1f9d1-1f3ff-200d-1f33e':0, '1f9d1-1f3fb-200d-1f373':0, '1f9d1-1f3fc-200d-1f373':0, '1f9d1-1f3fd-200d-1f373':0, '1f9d1-1f3fe-200d-1f373':0, '1f9d1-1f3ff-200d-1f373':0, '1f9d1-1f3fb-200d-1f37c':0, '1f9d1-1f3fc-200d-1f37c':0, '1f9d1-1f3fd-200d-1f37c':0, '1f9d1-1f3fe-200d-1f37c':0, '1f9d1-1f3ff-200d-1f37c':0, '1f9d1-1f3fb-200d-1f384':0, '1f9d1-1f3fc-200d-1f384':0, '1f9d1-1f3fd-200d-1f384':0, '1f9d1-1f3fe-200d-1f384':0, '1f9d1-1f3ff-200d-1f384':0, '1f9d1-1f3fb-200d-1f393':0, '1f9d1-1f3fc-200d-1f393':0, '1f9d1-1f3fd-200d-1f393':0, '1f9d1-1f3fe-200d-1f393':0, '1f9d1-1f3ff-200d-1f393':0, '1f9d1-1f3fb-200d-1f3a4':0, '1f9d1-1f3fc-200d-1f3a4':0, '1f9d1-1f3fd-200d-1f3a4':0, '1f9d1-1f3fe-200d-1f3a4':0, '1f9d1-1f3ff-200d-1f3a4':0, '1f9d1-1f3fb-200d-1f3a8':0, '1f9d1-1f3fc-200d-1f3a8':0, '1f9d1-1f3fd-200d-1f3a8':0, '1f9d1-1f3fe-200d-1f3a8':0, '1f9d1-1f3ff-200d-1f3a8':0, '1f9d1-1f3fb-200d-1f3eb':0, '1f9d1-1f3fc-200d-1f3eb':0, '1f9d1-1f3fd-200d-1f3eb':0, '1f9d1-1f3fe-200d-1f3eb':0, '1f9d1-1f3ff-200d-1f3eb':0, '1f9d1-1f3fb-200d-1f3ed':0, '1f9d1-1f3fc-200d-1f3ed':0, '1f9d1-1f3fd-200d-1f3ed':0, '1f9d1-1f3fe-200d-1f3ed':0, '1f9d1-1f3ff-200d-1f3ed':0, '1f9d1-1f3fb-200d-1f4bb':0, '1f9d1-1f3fc-200d-1f4bb':0, '1f9d1-1f3fd-200d-1f4bb':0, '1f9d1-1f3fe-200d-1f4bb':0, '1f9d1-1f3ff-200d-1f4bb':0, '1f9d1-1f3fb-200d-1f4bc':0, '1f9d1-1f3fc-200d-1f4bc':0, '1f9d1-1f3fd-200d-1f4bc':0, '1f9d1-1f3fe-200d-1f4bc':0, '1f9d1-1f3ff-200d-1f4bc':0, '1f9d1-1f3fb-200d-1f527':0, '1f9d1-1f3fc-200d-1f527':0, '1f9d1-1f3fd-200d-1f527':0, '1f9d1-1f3fe-200d-1f527':0, '1f9d1-1f3ff-200d-1f527':0, '1f9d1-1f3fb-200d-1f52c':0, '1f9d1-1f3fc-200d-1f52c':0, '1f9d1-1f3fd-200d-1f52c':0, '1f9d1-1f3fe-200d-1f52c':0, '1f9d1-1f3ff-200d-1f52c':0, '1f9d1-1f3fb-200d-1f680':0, '1f9d1-1f3fc-200d-1f680':0, '1f9d1-1f3fd-200d-1f680':0, '1f9d1-1f3fe-200d-1f680':0, '1f9d1-1f3ff-200d-1f680':0, '1f9d1-1f3fb-200d-1f692':0, '1f9d1-1f3fc-200d-1f692':0, '1f9d1-1f3fd-200d-1f692':0, '1f9d1-1f3fe-200d-1f692':0, '1f9d1-1f3ff-200d-1f692':0, '1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb':0, '1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fc':0, '1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fd':0, '1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fe':0, '1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3ff':0, '1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb':0, '1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc':0, '1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fd':0, '1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fe':0, '1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3ff':0, '1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fb':0, '1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fc':0, '1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fd':0, '1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fe':0, '1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3ff':0, '1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fb':0, '1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fc':0, '1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fd':0, '1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fe':0, '1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3ff':0, '1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fb':0, '1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fc':0, '1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fd':0, '1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fe':0, '1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3ff':0, '1f9d1-1f3fb-200d-1f9af':0, '1f9d1-1f3fc-200d-1f9af':0, '1f9d1-1f3fd-200d-1f9af':0, '1f9d1-1f3fe-200d-1f9af':0, '1f9d1-1f3ff-200d-1f9af':0, '1f9d1-1f3fb-200d-1f9b0':0, '1f9d1-1f3fc-200d-1f9b0':0, '1f9d1-1f3fd-200d-1f9b0':0, '1f9d1-1f3fe-200d-1f9b0':0, '1f9d1-1f3ff-200d-1f9b0':0, '1f9d1-1f3fb-200d-1f9b1':0, '1f9d1-1f3fc-200d-1f9b1':0, '1f9d1-1f3fd-200d-1f9b1':0, '1f9d1-1f3fe-200d-1f9b1':0, '1f9d1-1f3ff-200d-1f9b1':0, '1f9d1-1f3fb-200d-1f9b2':0, '1f9d1-1f3fc-200d-1f9b2':0, '1f9d1-1f3fd-200d-1f9b2':0, '1f9d1-1f3fe-200d-1f9b2':0, '1f9d1-1f3ff-200d-1f9b2':0, '1f9d1-1f3fb-200d-1f9b3':0, '1f9d1-1f3fc-200d-1f9b3':0, '1f9d1-1f3fd-200d-1f9b3':0, '1f9d1-1f3fe-200d-1f9b3':0, '1f9d1-1f3ff-200d-1f9b3':0, '1f9d1-1f3fb-200d-1f9bc':0, '1f9d1-1f3fc-200d-1f9bc':0, '1f9d1-1f3fd-200d-1f9bc':0, '1f9d1-1f3fe-200d-1f9bc':0, '1f9d1-1f3ff-200d-1f9bc':0, '1f9d1-1f3fb-200d-1f9bd':0, '1f9d1-1f3fc-200d-1f9bd':0, '1f9d1-1f3fd-200d-1f9bd':0, '1f9d1-1f3fe-200d-1f9bd':0, '1f9d1-1f3ff-200d-1f9bd':0, '1f9d1-1f3fb-200d-2695':0, '1f9d1-1f3fc-200d-2695':0, '1f9d1-1f3fd-200d-2695':0, '1f9d1-1f3fe-200d-2695':0, '1f9d1-1f3ff-200d-2695':0, '1f9d1-1f3fb-200d-2696':0, '1f9d1-1f3fc-200d-2696':0, '1f9d1-1f3fd-200d-2696':0, '1f9d1-1f3fe-200d-2696':0, '1f9d1-1f3ff-200d-2696':0, '1f9d1-1f3fb-200d-2708':0, '1f9d1-1f3fc-200d-2708':0, '1f9d1-1f3fd-200d-2708':0, '1f9d1-1f3fe-200d-2708':0, '1f9d1-1f3ff-200d-2708':0, '1f9d1-1f3fb':0, '1f9d1-1f3fc':0, '1f9d1-1f3fd':0, '1f9d1-1f3fe':0, '1f9d1-1f3ff':0, '1f9d2-1f3fb':0, '1f9d2-1f3fc':0, '1f9d2-1f3fd':0, '1f9d2-1f3fe':0, '1f9d2-1f3ff':0, '1f9d3-1f3fb':0, '1f9d3-1f3fc':0, '1f9d3-1f3fd':0, '1f9d3-1f3fe':0, '1f9d3-1f3ff':0, '1f9d4-1f3fb-200d-2640':0, '1f9d4-1f3fc-200d-2640':0, '1f9d4-1f3fd-200d-2640':0, '1f9d4-1f3fe-200d-2640':0, '1f9d4-1f3ff-200d-2640':0, '1f9d4-1f3fb-200d-2642':0, '1f9d4-1f3fc-200d-2642':0, '1f9d4-1f3fd-200d-2642':0, '1f9d4-1f3fe-200d-2642':0, '1f9d4-1f3ff-200d-2642':0, '1f9d4-1f3fb':0, '1f9d4-1f3fc':0, '1f9d4-1f3fd':0, '1f9d4-1f3fe':0, '1f9d4-1f3ff':0, '1f9d5-1f3fb':0, '1f9d5-1f3fc':0, '1f9d5-1f3fd':0, '1f9d5-1f3fe':0, '1f9d5-1f3ff':0, '1f9d6-1f3fb-200d-2640':0, '1f9d6-1f3fc-200d-2640':0, '1f9d6-1f3fd-200d-2640':0, '1f9d6-1f3fe-200d-2640':0, '1f9d6-1f3ff-200d-2640':0, '1f9d6-1f3fb-200d-2642':0, '1f9d6-1f3fc-200d-2642':0, '1f9d6-1f3fd-200d-2642':0, '1f9d6-1f3fe-200d-2642':0, '1f9d6-1f3ff-200d-2642':0, '1f9d6-1f3fb':0, '1f9d6-1f3fc':0, '1f9d6-1f3fd':0, '1f9d6-1f3fe':0, '1f9d6-1f3ff':0, '1f9d7-1f3fb-200d-2640':0, '1f9d7-1f3fc-200d-2640':0, '1f9d7-1f3fd-200d-2640':0, '1f9d7-1f3fe-200d-2640':0, '1f9d7-1f3ff-200d-2640':0, '1f9d7-1f3fb-200d-2642':0, '1f9d7-1f3fc-200d-2642':0, '1f9d7-1f3fd-200d-2642':0, '1f9d7-1f3fe-200d-2642':0, '1f9d7-1f3ff-200d-2642':0, '1f9d7-1f3fb':0, '1f9d7-1f3fc':0, '1f9d7-1f3fd':0, '1f9d7-1f3fe':0, '1f9d7-1f3ff':0, '1f9d8-1f3fb-200d-2640':0, '1f9d8-1f3fc-200d-2640':0, '1f9d8-1f3fd-200d-2640':0, '1f9d8-1f3fe-200d-2640':0, '1f9d8-1f3ff-200d-2640':0, '1f9d8-1f3fb-200d-2642':0, '1f9d8-1f3fc-200d-2642':0, '1f9d8-1f3fd-200d-2642':0, '1f9d8-1f3fe-200d-2642':0, '1f9d8-1f3ff-200d-2642':0, '1f9d8-1f3fb':0, '1f9d8-1f3fc':0, '1f9d8-1f3fd':0, '1f9d8-1f3fe':0, '1f9d8-1f3ff':0, '1f9d9-1f3fb-200d-2640':0, '1f9d9-1f3fc-200d-2640':0, '1f9d9-1f3fd-200d-2640':0, '1f9d9-1f3fe-200d-2640':0, '1f9d9-1f3ff-200d-2640':0, '1f9d9-1f3fb-200d-2642':0, '1f9d9-1f3fc-200d-2642':0, '1f9d9-1f3fd-200d-2642':0, '1f9d9-1f3fe-200d-2642':0, '1f9d9-1f3ff-200d-2642':0, '1f9d9-1f3fb':0, '1f9d9-1f3fc':0, '1f9d9-1f3fd':0, '1f9d9-1f3fe':0, '1f9d9-1f3ff':0, '1f9da-1f3fb-200d-2640':0, '1f9da-1f3fc-200d-2640':0, '1f9da-1f3fd-200d-2640':0, '1f9da-1f3fe-200d-2640':0, '1f9da-1f3ff-200d-2640':0, '1f9da-1f3fb-200d-2642':0, '1f9da-1f3fc-200d-2642':0, '1f9da-1f3fd-200d-2642':0, '1f9da-1f3fe-200d-2642':0, '1f9da-1f3ff-200d-2642':0, '1f9da-1f3fb':0, '1f9da-1f3fc':0, '1f9da-1f3fd':0, '1f9da-1f3fe':0, '1f9da-1f3ff':0, '1f9db-1f3fb-200d-2640':0, '1f9db-1f3fc-200d-2640':0, '1f9db-1f3fd-200d-2640':0, '1f9db-1f3fe-200d-2640':0, '1f9db-1f3ff-200d-2640':0, '1f9db-1f3fb-200d-2642':0, '1f9db-1f3fc-200d-2642':0, '1f9db-1f3fd-200d-2642':0, '1f9db-1f3fe-200d-2642':0, '1f9db-1f3ff-200d-2642':0, '1f9db-1f3fb':0, '1f9db-1f3fc':0, '1f9db-1f3fd':0, '1f9db-1f3fe':0, '1f9db-1f3ff':0, '1f9dc-1f3fb-200d-2640':0, '1f9dc-1f3fc-200d-2640':0, '1f9dc-1f3fd-200d-2640':0, '1f9dc-1f3fe-200d-2640':0, '1f9dc-1f3ff-200d-2640':0, '1f9dc-1f3fb-200d-2642':0, '1f9dc-1f3fc-200d-2642':0, '1f9dc-1f3fd-200d-2642':0, '1f9dc-1f3fe-200d-2642':0, '1f9dc-1f3ff-200d-2642':0, '1f9dc-1f3fb':0, '1f9dc-1f3fc':0, '1f9dc-1f3fd':0, '1f9dc-1f3fe':0, '1f9dc-1f3ff':0, '1f9dd-1f3fb-200d-2640':0, '1f9dd-1f3fc-200d-2640':0, '1f9dd-1f3fd-200d-2640':0, '1f9dd-1f3fe-200d-2640':0, '1f9dd-1f3ff-200d-2640':0, '1f9dd-1f3fb-200d-2642':0, '1f9dd-1f3fc-200d-2642':0, '1f9dd-1f3fd-200d-2642':0, '1f9dd-1f3fe-200d-2642':0, '1f9dd-1f3ff-200d-2642':0, '1f9dd-1f3fb':0, '1f9dd-1f3fc':0, '1f9dd-1f3fd':0, '1f9dd-1f3fe':0, '1f9dd-1f3ff':0, '261d-1f3fb':0, '261d-1f3fc':0, '261d-1f3fd':0, '261d-1f3fe':0, '261d-1f3ff':0, '26f9-1f3fb-200d-2640':0, '26f9-1f3fc-200d-2640':0, '26f9-1f3fd-200d-2640':0, '26f9-1f3fe-200d-2640':0, '26f9-1f3ff-200d-2640':0, '26f9-1f3fb-200d-2642':0, '26f9-1f3fc-200d-2642':0, '26f9-1f3fd-200d-2642':0, '26f9-1f3fe-200d-2642':0, '26f9-1f3ff-200d-2642':0, '26f9-1f3fb':0, '26f9-1f3fc':0, '26f9-1f3fd':0, '26f9-1f3fe':0, '26f9-1f3ff':0, '270a-1f3fb':0, '270a-1f3fc':0, '270a-1f3fd':0, '270a-1f3fe':0, '270a-1f3ff':0, '270b-1f3fb':0, '270b-1f3fc':0, '270b-1f3fd':0, '270b-1f3fe':0, '270b-1f3ff':0, '270c-1f3fb':0, '270c-1f3fc':0, '270c-1f3fd':0, '270c-1f3fe':0, '270c-1f3ff':0, '270d-1f3fb':0, '270d-1f3fc':0, '270d-1f3fd':0, '270d-1f3fe':0, '270d-1f3ff':0}};\n\nconst Emoji: {[emoji: string]: number} = EmojiVersions[''];\nfor(const version in EmojiVersions) {\n if(version) {\n Object.assign(Emoji, EmojiVersions[version as EMOJI_VERSION]);\n }\n}\n\nexport default Emoji;\n\n/* Emoji[\"00a9-fe0f\"] = 6362;\nEmoji[\"00ae-fe0f\"] = 6363;\nEmoji[\"2122-fe0f\"] = 6364; */\n","// https://github.com/twitter/twemoji-parser/blob/master/src/lib/regex.js\n\nexport function encodeEmoji(emojiText: string) {\n const codepoints = toCodePoints(removeVS16s(emojiText)).join('-');\n return codepoints;\n}\n\nconst vs16RegExp = /\\uFE0F/g;\n// avoid using a string literal like '\\u200D' here because minifiers expand it inline\nconst zeroWidthJoiner = String.fromCharCode(0x200d);\n\nconst removeVS16s = (rawEmoji: string) => (rawEmoji.indexOf(zeroWidthJoiner) < 0 ? rawEmoji.replace(vs16RegExp, '') : rawEmoji);\n\nexport function toCodePoints(unicodeSurrogates: string): Array {\n const points = [];\n let char = 0;\n let previous = 0;\n let i = 0;\n while(i < unicodeSurrogates.length) {\n char = unicodeSurrogates.charCodeAt(i++);\n if(previous) {\n points.push((0x10000 + ((previous - 0xd800) << 10) + (char - 0xdc00)).toString(16));\n previous = 0;\n } else if(char > 0xd800 && char <= 0xdbff) {\n previous = char;\n } else {\n points.push(char.toString(16));\n }\n }\n\n if(points.length && points[0].length === 2) {\n points[0] = '00' + points[0];\n }\n\n return points;\n}\n\nexport function getEmojiToneIndex(input: string) {\n const match = input.match(/[\\uDFFB-\\uDFFF]/);\n return match ? 5 - (57343 - match[0].charCodeAt(0)) : 0;\n}\n\nconst VIRTUAL_COUNTRIES_EMOJIS: Map = new Map([\n ['FT', '🏴‍☠']\n]);\n\nexport function getCountryEmoji(iso2: string) {\n return VIRTUAL_COUNTRIES_EMOJIS.get(iso2) ??\n String.fromCharCode(55356, 56741 + iso2.charCodeAt(0), 55356, 56741 + iso2.charCodeAt(1));\n}\n\nexport function emojiFromCodePoints(codePoints: string) {\n return codePoints.split('-').reduce((prev, curr) => prev + String.fromCodePoint(parseInt(curr, 16)), '');\n}\n","import Emoji from '../../config/emoji';\nimport {encodeEmoji} from '../../vendor/emoji';\n\nexport default function getEmojiUnified(emojiCode: string) {\n const unified = encodeEmoji(emojiCode).replace(/-?fe0f/g, '');\n\n /* if(unified === '1f441-200d-1f5e8') {\n //unified = '1f441-fe0f-200d-1f5e8-fe0f';\n unified = '1f441-fe0f-200d-1f5e8';\n } */\n\n if(!Emoji.hasOwnProperty(unified)\n // && !emojiData.hasOwnProperty(unified.replace(/-?fe0f$/, ''))\n ) {\n // console.error('lol', unified);\n return;\n }\n\n return unified;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {EMAIL_REG_EXP, FULL_REG_EXP} from '.';\nimport TLD from '../../config/tld';\nimport {MessageEntity} from '../../layer';\nimport checkBrackets from './checkBrackets';\nimport getEmojiUnified from './getEmojiUnified';\n\nexport default function parseEntities(text: string) {\n let match: RegExpMatchArray;\n let raw = text;\n const entities: MessageEntity[] = [];\n let matchIndex;\n let rawOffset = 0;\n // var start = tsNow()\n FULL_REG_EXP.lastIndex = 0;\n while(match = raw.match(FULL_REG_EXP)) {\n matchIndex = rawOffset + match.index;\n\n // console.log('parseEntities match:', match);\n\n if(match[3]) { // mentions\n entities.push({\n _: 'messageEntityMention',\n offset: matchIndex + match[1].length,\n length: match[2].length + match[3].length\n });\n } else if(match[4]) {\n if(EMAIL_REG_EXP.test(match[4])) { // email\n entities.push({\n _: 'messageEntityEmail',\n offset: matchIndex,\n length: match[4].length\n });\n } else {\n let url: string;\n let protocol = match[5];\n const tld = match[6];\n // let excluded = '';\n if(tld) { // URL\n if(!protocol && (tld.substr(0, 4) === 'xn--' || TLD.indexOf(tld.toLowerCase()) !== -1)) {\n protocol = 'http://';\n }\n\n if(protocol) {\n const balanced = checkBrackets(match[4]);\n if(balanced.length !== match[4].length) {\n // excluded = match[4].substring(balanced.length);\n match[4] = balanced;\n }\n\n url = (match[5] ? '' : protocol) + match[4];\n }\n } else { // IP address\n url = (match[5] ? '' : 'http://') + match[4];\n }\n\n if(url) {\n entities.push({\n _: 'messageEntityUrl',\n offset: matchIndex,\n length: match[4].length\n });\n }\n }\n } else if(match[7]) { // New line\n entities.push({\n _: 'messageEntityLinebreak',\n offset: matchIndex,\n length: 1\n });\n } else if(match[8]) { // Emoji\n const unified = getEmojiUnified(match[8]);\n if(unified) {\n entities.push({\n _: 'messageEntityEmoji',\n offset: matchIndex,\n length: match[8].length,\n unicode: unified\n });\n }\n } else if(match[11]) { // Hashtag\n entities.push({\n _: 'messageEntityHashtag',\n offset: matchIndex + (match[10] ? match[10].length : 0),\n length: match[11].length\n });\n } else if(match[13]) { // Bot command\n entities.push({\n _: 'messageEntityBotCommand',\n offset: matchIndex + (match[11] ? match[11].length : 0) + (match[12] ? match[12].length : 0),\n length: 1 + match[13].length + (match[14] ? 1 + match[14].length : 0),\n unsafe: true\n });\n } else if(match[16]) { // Media timestamp\n const timestamp = match[16];\n const splitted: string[] = timestamp.split(':');\n const splittedLength = splitted.length;\n const hours = splittedLength === 3 ? +splitted[0] : 0;\n const minutes = +splitted[splittedLength === 3 ? 1 : 0];\n const seconds = +splitted[splittedLength - 1];\n entities.push({\n _: 'messageEntityTimestamp',\n offset: matchIndex + (/\\D/.test(match[0][0]) ? 1 : 0),\n length: timestamp.length,\n raw: timestamp,\n time: hours * 3600 + minutes * 60 + seconds\n });\n }\n\n raw = raw.substr(match.index + match[0].length);\n rawOffset += match.index + match[0].length;\n }\n\n // if (entities.length) {\n // console.log('parse entities', text, entities.slice())\n // }\n return entities;\n}\n","import {MessageEntity} from '../../layer';\nimport fixEmoji from './fixEmoji';\nimport mergeEntities from './mergeEntities';\nimport parseEntities from './parseEntities';\n\nexport default function wrapMessageEntities(message: string, entities: MessageEntity[] = []) {\n message = fixEmoji(message, entities);\n\n const myEntities = parseEntities(message);\n const totalEntities = mergeEntities(entities, myEntities); // ! only in this order, otherwise bold and emoji formatting won't work\n return {\n message,\n entities,\n myEntities,\n totalEntities\n };\n}\n","import type {RequestHistoryOptions} from '../../appMessagesManager';\n\nexport default function getSearchType(options: RequestHistoryOptions): RequestHistoryOptions['searchType'] {\n // return 'uncached';\n\n const isSearch = !!(options.inputFilter || options.savedReaction || options.query || options.isPublicHashtag);\n if(!isSearch) {\n return;\n }\n\n if(options.isCacheableSearch) {\n return 'cached';\n }\n\n return options.query || !options.peerId || options.fromPeerId ? 'uncached' : 'cached';\n}\n","import type {Reaction} from '../../../../layer';\nimport type {HistoryStorage, RequestHistoryOptions, SearchStorageFilterKey} from '../../appMessagesManager';\nimport getSearchType from './getSearchType';\n\nexport default function getHistoryStorageKey(options: RequestHistoryOptions & {type: HistoryStorage['type']}) {\n const {type, peerId, threadId} = options;\n const filter = getSearchStorageFilterKey(options);\n return [type, peerId, filter, threadId].filter(Boolean).join('_') as HistoryStorage['key'];\n}\n\nexport function getSearchStorageFilterKey({\n inputFilter,\n savedReaction,\n query,\n hashtagType\n}: Parameters[0]): SearchStorageFilterKey {\n let reactionsPart: string;\n if(savedReaction) {\n const part = savedReaction.map((reaction) => {\n return (reaction as Reaction.reactionCustomEmoji).document_id || (reaction as Reaction.reactionEmoji).emoticon;\n }).join(',');\n reactionsPart = `tag-${part}`;\n inputFilter ??= {_: 'inputMessagesFilterEmpty'};\n }\n\n const filter: SearchStorageFilterKey = inputFilter?._;\n return [filter, hashtagType !== 'this' && hashtagType, query, reactionsPart].filter(Boolean).join('_');\n}\n\nexport function getHistoryStorageType(options: RequestHistoryOptions): HistoryStorage['type'] {\n return getSearchType(options) ? 'search' : (options.threadId ? 'replies' : 'history');\n}\n","import {MessageFwdHeader} from '../../../../layer';\n\nexport default function getFwdFromName(fwdFrom: MessageFwdHeader) {\n return fwdFrom && (fwdFrom.saved_from_name || fwdFrom.from_name);\n}\n","import {Message} from '../../../../layer';\n\nexport default function getMainGroupedMessage(messages: Message.message[]) {\n return messages[0];\n}\n","import {Message} from '../../../../layer';\n\nexport default function getUnreadReactions(message: Message) {\n const reactions = (message as Message.message)?.reactions;\n const recentReactions = reactions?.recent_reactions;\n if(!recentReactions) {\n return;\n }\n\n const arr = recentReactions.filter((reaction) => reaction.pFlags.unread);\n if(!arr.length) {\n return;\n }\n\n return arr;\n}\n","import type {MyDocument} from '../../appDocsManager';\nimport type {MyMessage} from '../../appMessagesManager';\nimport {Message, MessageMedia} from '../../../../layer';\n\nexport default function isMentionUnread(message: MyMessage) {\n if(!message) {\n return false;\n }\n\n const doc = ((message as Message.message).media as MessageMedia.messageMediaDocument)?.document as MyDocument;\n return !!(\n message.pFlags.media_unread &&\n message.pFlags.mentioned &&\n (\n !doc ||\n !(['voice', 'round'] as MyDocument['type'][]).includes(doc.type)\n )\n );\n}\n","import {Document, Message, MessageMedia} from '../../../../layer';\n\nexport default function canMessageHaveFactCheck(message: Message): boolean {\n if(message?._ !== 'message') {\n return false;\n }\n\n if(((message.media as MessageMedia.messageMediaDocument)?.document as Document.document)?.sticker) {\n return false;\n }\n\n return true;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {ApiFileManager} from '../mtproto/apiFileManager';\nimport type {MediaSize} from '../../helpers/mediaSize';\nimport type {Progress} from './appDownloadManager';\nimport type {VIDEO_MIME_TYPE} from '../../environment/videoMimeTypesSupport';\nimport type {Mirrors} from '../mtproto/mtprotoworker';\nimport LazyLoadQueueBase from '../../components/lazyLoadQueueBase';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport tsNow from '../../helpers/tsNow';\nimport {randomLong} from '../../helpers/random';\nimport {Chat, ChatFull, Dialog as MTDialog, DialogPeer, DocumentAttribute, InputMedia, InputMessage, InputPeerNotifySettings, InputSingleMedia, Message, MessageAction, MessageEntity, MessageFwdHeader, MessageMedia, MessageReplies, MessageReplyHeader, MessagesDialogs, MessagesFilter, MessagesMessages, MethodDeclMap, NotifyPeer, PeerNotifySettings, PhotoSize, SendMessageAction, Update, Photo, Updates, ReplyMarkup, InputPeer, InputPhoto, InputDocument, InputGeoPoint, WebPage, GeoPoint, ReportReason, MessagesGetDialogs, InputChannel, InputDialogPeer, ReactionCount, MessagePeerReaction, MessagesSearchCounter, Peer, MessageReactions, Document, InputFile, Reaction, ForumTopic as MTForumTopic, MessagesForumTopics, MessagesGetReplies, MessagesGetHistory, MessagesAffectedHistory, UrlAuthResult, MessagesTranscribedAudio, ReadParticipantDate, WebDocument, MessagesSearch, MessagesSearchGlobal, InputReplyTo, InputUser, MessagesSendMessage, MessagesSendMedia, MessagesGetSavedHistory, MessagesSavedDialogs, SavedDialog as MTSavedDialog, User, MissingInvitee, TextWithEntities, ChannelsSearchPosts, FactCheck, MessageExtendedMedia} from '../../layer';\nimport {ArgumentTypes, InvokeApiOptions, Modify} from '../../types';\nimport {logger, LogTypes} from '../logger';\nimport {ReferenceContext} from '../mtproto/referenceDatabase';\nimport {AnyDialog, FilterType, GLOBAL_FOLDER_ID} from '../storages/dialogs';\nimport {ChatRights} from './appChatsManager';\nimport {MyDocument} from './appDocsManager';\nimport {MyPhoto} from './appPhotosManager';\nimport DEBUG from '../../config/debug';\nimport SlicedArray, {Slice, SliceEnd} from '../../helpers/slicedArray';\nimport {FOLDER_ID_ALL, FOLDER_ID_ARCHIVE, GENERAL_TOPIC_ID, HIDDEN_PEER_ID, MUTE_UNTIL, NULL_PEER_ID, REAL_FOLDERS, REAL_FOLDER_ID, REPLIES_HIDDEN_CHANNEL_ID, REPLIES_PEER_ID, SERVICE_PEER_ID, TEST_NO_SAVED, THUMB_TYPE_FULL} from '../mtproto/mtproto_config';\nimport {getMiddleware} from '../../helpers/middleware';\nimport assumeType from '../../helpers/assumeType';\nimport copy from '../../helpers/object/copy';\nimport getObjectKeysAndSort from '../../helpers/object/getObjectKeysAndSort';\nimport forEachReverse from '../../helpers/array/forEachReverse';\nimport deepEqual from '../../helpers/object/deepEqual';\nimport splitStringByLength from '../../helpers/string/splitStringByLength';\nimport debounce from '../../helpers/schedulers/debounce';\nimport {AppManager} from './manager';\nimport getPhotoMediaInput from './utils/photos/getPhotoMediaInput';\nimport parseMarkdown from '../richTextProcessor/parseMarkdown';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\nimport filterMessagesByInputFilter from './utils/messages/filterMessagesByInputFilter';\nimport ctx from '../../environment/ctx';\nimport {getEnvironment} from '../../environment/utils';\nimport getDialogIndex from './utils/dialogs/getDialogIndex';\nimport defineNotNumerableProperties from '../../helpers/object/defineNotNumerableProperties';\nimport getDocumentMediaInput from './utils/docs/getDocumentMediaInput';\nimport getFileNameForUpload from '../../helpers/getFileNameForUpload';\nimport noop from '../../helpers/noop';\nimport appTabsManager from './appTabsManager';\nimport MTProtoMessagePort from '../mtproto/mtprotoMessagePort';\nimport getGroupedText from './utils/messages/getGroupedText';\nimport pause from '../../helpers/schedulers/pause';\nimport makeError from '../../helpers/makeError';\nimport getStickerEffectThumb from './utils/stickers/getStickerEffectThumb';\nimport getDocumentInput from './utils/docs/getDocumentInput';\nimport reactionsEqual from './utils/reactions/reactionsEqual';\nimport getPeerActiveUsernames from './utils/peers/getPeerActiveUsernames';\nimport {BroadcastEvents} from '../rootScope';\nimport setBooleanFlag from '../../helpers/object/setBooleanFlag';\nimport getMessageThreadId from './utils/messages/getMessageThreadId';\nimport callbackify from '../../helpers/callbackify';\nimport wrapMessageEntities from '../richTextProcessor/wrapMessageEntities';\nimport isLegacyMessageId from './utils/messageId/isLegacyMessageId';\nimport {joinDeepPath} from '../../helpers/object/setDeepProperty';\nimport insertInDescendSortedArray from '../../helpers/array/insertInDescendSortedArray';\nimport {LOCAL_ENTITIES} from '../richTextProcessor';\nimport {isDialog, isSavedDialog, isForumTopic} from './utils/dialogs/isDialog';\nimport getDialogKey from './utils/dialogs/getDialogKey';\nimport getHistoryStorageKey, {getSearchStorageFilterKey} from './utils/messages/getHistoryStorageKey';\nimport {ApiLimitType} from '../mtproto/api_methods';\nimport getFwdFromName from './utils/messages/getFwdFromName';\nimport filterUnique from '../../helpers/array/filterUnique';\nimport getSearchType from './utils/messages/getSearchType';\nimport getMainGroupedMessage from './utils/messages/getMainGroupedMessage';\nimport getUnreadReactions from './utils/messages/getUnreadReactions';\nimport isMentionUnread from './utils/messages/isMentionUnread';\nimport canMessageHaveFactCheck from './utils/messages/canMessageHaveFactCheck';\n\n// console.trace('include');\n// TODO: если удалить диалог находясь в папке, то он не удалится из папки и будет виден в настройках\n\nconst APITIMEOUT = 0;\nconst DO_NOT_READ_HISTORY = false;\nconst DO_NOT_SEND_MESSAGES = false;\nconst DO_NOT_DELETE_MESSAGES = false;\nconst GLOBAL_HISTORY_PEER_ID = NULL_PEER_ID;\n\nexport enum HistoryType {\n Chat,\n Thread,\n Topic,\n Saved\n};\n\nexport type SendFileDetails = {\n file: File | Blob | MyDocument,\n} & Partial<{\n duration: number,\n width: number,\n height: number,\n objectURL: string,\n thumb: {\n blob: Blob,\n url: string,\n size: MediaSize\n },\n strippedBytes: PhotoSize.photoStrippedSize['bytes'],\n spoiler: boolean\n}>;\n\nexport type HistoryStorageKey = `${HistoryStorage['type']}_${PeerId}` | `replies_${PeerId}_${number}` | `search_${PeerId}_${SearchStorageFilterKey}_${number}`;\nexport type HistoryStorage = {\n _maxId: number,\n _count: number | null,\n count: number | null,\n history: SlicedArray,\n searchHistory?: SlicedArray<`${PeerId}_${number}`>,\n\n maxId?: number,\n readPromise?: Promise,\n readMaxId?: number,\n readOutboxMaxId?: number,\n triedToReadMaxId?: number,\n\n maxOutId?: number,\n replyMarkup?: Exclude,\n\n type: 'history' | 'replies' | 'search',\n key: HistoryStorageKey,\n\n channelJoinedMid?: number,\n originalInsertSlice?: SlicedArray['insertSlice'],\n\n // * for search\n filterMessages?: (messages: MyMessage[]) => MyMessage[],\n filterMessage?: (message: MyMessage) => boolean,\n onMidInsertion?: (mid: number) => void,\n nextRate?: number,\n};\n\nexport type HistoryResult = {\n count: number,\n history: number[],\n isEnd: ReturnType['getEnds']>,\n offsetIdOffset?: number,\n nextRate?: number,\n messages?: MyMessage[]\n};\n\nexport type Dialog = MTDialog.dialog;\nexport type ForumTopic = MTForumTopic.forumTopic;\nexport type SavedDialog = MTSavedDialog.savedDialog;\n\nexport type MyMessage = Message.message | Message.messageService;\nexport type MyInputMessagesFilter = 'inputMessagesFilterEmpty'\n | 'inputMessagesFilterPhotos'\n | 'inputMessagesFilterPhotoVideo'\n | 'inputMessagesFilterVideo'\n | 'inputMessagesFilterDocument'\n | 'inputMessagesFilterVoice'\n | 'inputMessagesFilterRoundVoice'\n | 'inputMessagesFilterRoundVideo'\n | 'inputMessagesFilterMusic'\n | 'inputMessagesFilterUrl'\n | 'inputMessagesFilterMyMentions'\n | 'inputMessagesFilterChatPhotos'\n | 'inputMessagesFilterPinned';\n\nexport type PinnedStorage = Partial<{\n promise: Promise,\n count: number,\n maxId: number\n}>;\nexport type MessagesStorage = Map & {peerId: PeerId, type: MessagesStorageType, key: MessagesStorageKey};\nexport type MessagesStorageType = 'scheduled' | 'history' | 'grouped';\nexport type MessagesStorageKey = `${PeerId}_${MessagesStorageType}`;\n\nexport type MyMessageActionType = Message.messageService['action']['_'];\n\ntype PendingAfterMsg = Partial;\n\ntype MapValueType = A extends Map ? V : never;\n\nexport type BatchUpdates = {\n 'messages_reactions': AppMessagesManager['batchUpdateReactions'],\n 'messages_views': AppMessagesManager['batchUpdateViews']\n};\n\ntype PendingMessageDetails = {\n peerId: PeerId,\n tempId: number,\n threadId: number,\n storage: MessagesStorage,\n sequential?: boolean\n};\n\nconst processAfter = (cb: () => void) => {\n // setTimeout(cb, 0);\n cb();\n};\n\nexport type MessageSendingParams = Partial<{\n peerId: PeerId,\n threadId: number,\n replyToMsgId: number,\n replyToStoryId: number,\n replyToQuote: {text: string, entities?: MessageEntity[], offset?: number},\n replyToPeerId: PeerId,\n replyTo: InputReplyTo,\n scheduleDate: number,\n silent: boolean,\n sendAsPeerId: number,\n updateStickersetOrder: boolean,\n savedReaction: Reaction[],\n invertMedia: boolean,\n effect: DocId\n}>;\n\nexport type MessageForwardParams = MessageSendingParams & {\n fromPeerId: PeerId,\n mids: number[]\n} & Partial<{\n withMyScore: true,\n dropAuthor: boolean,\n dropCaptions: boolean\n}>;\n\nexport type RequestHistoryOptions = {\n peerId?: PeerId,\n offsetId?: number,\n offsetPeerId?: PeerId, // to get the offset message\n limit?: number,\n addOffset?: number,\n offsetDate?: number,\n threadId?: number,\n // search\n nextRate?: number,\n folderId?: number,\n query?: string,\n inputFilter?: {\n _: MyInputMessagesFilter,\n },\n minDate?: number,\n maxDate?: number,\n savedReaction?: (Reaction.reactionCustomEmoji | Reaction.reactionEmoji)[],\n needRealOffsetIdOffset?: boolean,\n fromPeerId?: PeerId,\n isPublicHashtag?: boolean,\n isCacheableSearch?: boolean,\n hashtagType?: 'this' | 'my' | 'public',\n recursion?: boolean, // ! FOR INNER USE ONLY\n historyType?: HistoryType, // ! FOR INNER USE ONLY\n searchType?: 'cached' | 'uncached' // ! FOR INNER USE ONLY\n};\n\nexport type SearchStorageFilterKey = string;\n\ntype GetUnreadMentionsOptions = {\n peerId: PeerId,\n threadId?: number,\n isReaction?: boolean\n};\n\ntype MessageContext = {searchStorages?: Set};\n\nexport class AppMessagesManager extends AppManager {\n private messagesStorageByPeerId: {[peerId: string]: MessagesStorage};\n private groupedMessagesStorage: {[groupId: string]: MessagesStorage}; // will be used for albums\n private scheduledMessagesStorage: {[peerId: PeerId]: MessagesStorage};\n private historiesStorage: {\n [peerId: PeerId]: HistoryStorage\n };\n private threadsStorage: {\n [peerId: PeerId]: {\n [threadId: string]: HistoryStorage\n }\n };\n private searchesStorage: {\n [peerId: PeerId]: {\n [threadId: string]: {\n [inputFilter in SearchStorageFilterKey]?: HistoryStorage\n }\n }\n } & {[key: HistoryStorageKey]: HistoryStorage};\n private pinnedMessages: {[key: string]: PinnedStorage};\n private references: {[key: string]: MessageContext};\n\n private threadsServiceMessagesIdsStorage: {[peerId_threadId: string]: number};\n private threadsToReplies: {\n [peerId_threadId: string]: string;\n };\n\n private pendingByRandomId: {\n [randomId: string]: PendingMessageDetails\n } = {};\n private pendingByMessageId: {[mid: string]: Long} = {};\n private pendingAfterMsgs: {[peerId: PeerId]: PendingAfterMsg} = {};\n public pendingTopMsgs: {[peerId in PeerId | `${PeerId}_${number}`]: number} = {};\n private tempFinalizeCallbacks: {\n [tempId: string]: {\n [callbackName: string]: Partial<{\n deferred: CancellablePromise,\n callback: (message: MyMessage) => Promise\n }>\n }\n } = {};\n\n private sendSmthLazyLoadQueue = new LazyLoadQueueBase(10);\n\n private needSingleMessages: Map>> = new Map();\n private fetchSingleMessagesPromise: Promise;\n private extendedMedia: Map>> = new Map();\n\n private maxSeenId = 0;\n\n public migratedFromTo: {[peerId: PeerId]: PeerId} = {};\n public migratedToFrom: {[peerId: PeerId]: PeerId} = {};\n\n private newDialogsHandlePromise: Promise;\n public newDialogsToHandle: Map, saved?: Map}> = new Map();\n public newUpdatesAfterReloadToHandle: {[key: string]: Set} = {};\n\n private notificationsHandlePromise: number;\n private notificationsToHandle: {[key: string]: {\n fwdCount: number,\n fromId: PeerId,\n topMessage?: MyMessage\n }} = {};\n\n private reloadConversationsPromise: Promise;\n private reloadConversationsPeers: Map, sentRequest?: boolean}> = new Map();\n\n public log = logger('MESSAGES', LogTypes.Error | LogTypes.Debug | LogTypes.Log | LogTypes.Warn);\n\n private groupedTempId = 0;\n private mediaTempId = 0;\n private mediaTempMap: {[tempId: number]: number} = {};\n\n private typings: {[key: string]: {action: SendMessageAction, timeout?: number}} = {};\n\n private middleware: ReturnType;\n\n private unreadMentions: {[key: string]: SlicedArray} = {};\n private goToNextMentionPromises: {[key: string]: Promise} = {};\n\n private batchUpdates: {\n [k in keyof BatchUpdates]?: {\n callback: BatchUpdates[k],\n batch: ArgumentTypes[0]\n }\n } = {};\n private batchUpdatesDebounced: () => Promise;\n\n private uploadFilePromises: {[fileName: string]: CancellablePromise};\n\n private tempMids: {[peerId: PeerId]: number} = {};\n\n private historyMaxIdSubscribed: Map = new Map();\n\n private factCheckBatcher: Batcher;\n\n protected after() {\n this.clear(true);\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateMessageID: this.onUpdateMessageId,\n\n updateNewDiscussionMessage: this.onUpdateNewMessage,\n updateNewMessage: this.onUpdateNewMessage,\n updateNewChannelMessage: this.onUpdateNewMessage,\n\n updateDialogUnreadMark: this.onUpdateDialogUnreadMark,\n\n updateEditMessage: this.onUpdateEditMessage,\n updateEditChannelMessage: this.onUpdateEditMessage,\n\n updateMessageReactions: this.onUpdateMessageReactions,\n\n updateReadChannelDiscussionInbox: this.onUpdateReadHistory,\n updateReadChannelDiscussionOutbox: this.onUpdateReadHistory,\n updateReadHistoryInbox: this.onUpdateReadHistory,\n updateReadHistoryOutbox: this.onUpdateReadHistory,\n updateReadChannelInbox: this.onUpdateReadHistory,\n updateReadChannelOutbox: this.onUpdateReadHistory,\n\n updateChannelReadMessagesContents: this.onUpdateReadMessagesContents,\n updateReadMessagesContents: this.onUpdateReadMessagesContents,\n\n updateChannelAvailableMessages: this.onUpdateChannelAvailableMessages,\n\n updateDeleteMessages: this.onUpdateDeleteMessages,\n updateDeleteChannelMessages: this.onUpdateDeleteMessages,\n\n updateChannel: this.onUpdateChannel,\n\n updateChannelReload: this.onUpdateChannelReload,\n\n updateChannelMessageViews: this.onUpdateChannelMessageViews,\n\n updateServiceNotification: this.onUpdateServiceNotification,\n\n updatePinnedMessages: this.onUpdatePinnedMessages,\n updatePinnedChannelMessages: this.onUpdatePinnedMessages,\n\n updateNotifySettings: this.onUpdateNotifySettings,\n\n updateNewScheduledMessage: this.onUpdateNewScheduledMessage,\n\n updateDeleteScheduledMessages: this.onUpdateDeleteScheduledMessages,\n\n updateMessageExtendedMedia: this.onUpdateMessageExtendedMedia,\n\n updateTranscribedAudio: this.onUpdateTranscribedAudio\n });\n\n // ! Invalidate notify settings, can optimize though\n this.rootScope.addEventListener('notify_peer_type_settings', ({key, settings}) => {\n const dialogs = this.dialogsStorage.getFolderDialogs(0).concat(this.dialogsStorage.getFolderDialogs(1)) as Dialog[];\n let filterFunc: (dialog: typeof dialogs[0]) => boolean;\n if(key === 'notifyUsers') filterFunc = (dialog) => dialog.peerId.isUser();\n else if(key === 'notifyBroadcasts') filterFunc = (dialog) => this.appPeersManager.isBroadcast(dialog.peerId);\n else filterFunc = (dialog) => this.appPeersManager.isAnyGroup(dialog.peerId);\n\n dialogs\n .filter(filterFunc)\n .forEach((dialog) => {\n this.rootScope.dispatchEvent('dialog_notify_settings', dialog);\n });\n });\n\n this.rootScope.addEventListener('webpage_updated', ({id, msgs}) => {\n msgs.forEach(({peerId, mid, isScheduled}) => {\n const storage = isScheduled ? this.getScheduledMessagesStorage(peerId) : this.getHistoryMessagesStorage(peerId);\n const message = this.getMessageFromStorage(storage, mid) as Message.message;\n if(!message) {\n return;\n }\n\n this.modifyMessage(message, (message) => {\n message.media = {\n _: 'messageMediaWebPage',\n pFlags: {},\n ...(message.media as MessageMedia.messageMediaWebPage || {}),\n webpage: this.appWebPagesManager.getCachedWebPage(id)\n };\n }, storage);\n\n this.rootScope.dispatchEvent('message_edit', {\n storageKey: storage.key,\n peerId,\n mid,\n message\n });\n });\n });\n\n this.rootScope.addEventListener('draft_updated', ({peerId, threadId, draft}) => {\n const dialog = this.dialogsStorage.getAnyDialog(peerId, threadId) as Dialog | ForumTopic;\n if(dialog) {\n dialog.draft = draft;\n\n let drop = false;\n if(!draft && !getServerMessageId(dialog.top_message)) {\n this.dialogsStorage.dropDialog(peerId);\n drop = true;\n } else {\n this.dialogsStorage.generateIndexForDialog(dialog);\n this.dialogsStorage.pushDialog({dialog});\n }\n\n this.rootScope.dispatchEvent('dialog_draft', {\n peerId,\n dialog,\n drop,\n draft\n });\n } else if(threadId) {\n const chat = this.appChatsManager.getChat(peerId.toChatId());\n if(!chat) {\n this.reloadConversation(peerId);\n } else if((chat as Chat.channel).pFlags.forum) {\n this.dialogsStorage.getForumTopicById(peerId, threadId);\n }\n } else {\n this.reloadConversation(peerId);\n }\n });\n\n this.rootScope.addEventListener('poll_update', ({poll}) => {\n const set = this.appPollsManager.pollToMessages[poll.id];\n if(!set) {\n return;\n }\n\n for(const key of set) {\n const [peerId, mid] = key.split('_');\n\n const message = this.getMessageByPeer(peerId.toPeerId(), +mid);\n if(message) {\n this.onMessageModification(message);\n this.setDialogToStateIfMessageIsTop(message);\n }\n }\n });\n\n // * clear forum cache\n this.rootScope.addEventListener('chat_toggle_forum', ({chatId, enabled}) => {\n const peerId = chatId.toPeerId(true);\n if(!enabled) {\n delete this.threadsStorage[peerId];\n\n for(const key in this.pinnedMessages) {\n if(+key === peerId && key.startsWith(peerId + '_')) {\n delete this.pinnedMessages[key];\n }\n }\n }\n });\n\n this.batchUpdatesDebounced = debounce(() => {\n for(const event in this.batchUpdates) {\n const details = this.batchUpdates[event as keyof BatchUpdates];\n delete this.batchUpdates[event as keyof BatchUpdates];\n\n // @ts-ignore\n const result = details.callback(details.batch);\n if(result && (!(result instanceof Array) || result.length)) {\n // @ts-ignore\n rootScope.dispatchEvent(event as keyof BatchUpdates, result);\n }\n }\n }, 33, false, true);\n\n this.factCheckBatcher = new Batcher({\n processBatch: this.processFactCheckBatch\n });\n\n return this.appStateManager.getState().then((state) => {\n if(state.maxSeenMsgId) {\n this.maxSeenId = state.maxSeenMsgId;\n }\n });\n }\n\n public clear = (init?: boolean) => {\n if(this.middleware) {\n this.middleware.clean();\n } else {\n this.middleware = getMiddleware();\n this.uploadFilePromises = {};\n }\n\n this.messagesStorageByPeerId = {};\n this.groupedMessagesStorage = {};\n this.scheduledMessagesStorage = {};\n this.historiesStorage = {};\n this.threadsStorage = {};\n this.searchesStorage = {};\n this.pinnedMessages = {};\n this.threadsServiceMessagesIdsStorage = {};\n this.threadsToReplies = {};\n this.references = {};\n\n this.dialogsStorage && this.dialogsStorage.clear(init);\n this.filtersStorage && this.filtersStorage.clear(init);\n };\n\n public getInputEntities(entities: MessageEntity[]) {\n const sendEntites = copy(entities);\n forEachReverse(sendEntites, (entity, idx, arr) => {\n if(LOCAL_ENTITIES.has(entity._)) {\n arr.splice(idx, 1);\n } else if(entity._ === 'messageEntityMentionName') {\n (entity as any as MessageEntity.inputMessageEntityMentionName)._ = 'inputMessageEntityMentionName';\n (entity as any as MessageEntity.inputMessageEntityMentionName).user_id = this.appUsersManager.getUserInput(entity.user_id);\n }\n });\n return sendEntites;\n }\n\n public invokeAfterMessageIsSent(tempId: number, callbackName: string, callback: (message: MyMessage) => Promise) {\n const finalize = this.tempFinalizeCallbacks[tempId] ??= {};\n const obj = finalize[callbackName] ??= {deferred: deferredPromise()};\n\n obj.callback = callback;\n\n return obj.deferred;\n }\n\n public editMessage(\n message: MyMessage,\n text: string,\n options: Partial<{\n newMedia: InputMedia,\n scheduleDate: number,\n entities: MessageEntity[]\n }> & Partial[0], 'webPage' | 'webPageOptions' | 'noWebPage' | 'invertMedia'>> = {}\n ): Promise {\n /* if(!this.canEditMessage(messageId)) {\n return Promise.reject({type: 'MESSAGE_EDIT_FORBIDDEN'});\n } */\n\n const {mid, peerId} = message;\n\n if(message.pFlags.is_outgoing) {\n return this.invokeAfterMessageIsSent(mid, 'edit', (message) => {\n // this.log('invoke editMessage callback', message);\n return this.editMessage(message, text, options);\n });\n }\n\n let entities = options.entities || [];\n if(text) {\n [text, entities] = parseMarkdown(text, entities);\n }\n\n let sendEntites = this.getInputEntities(entities);\n if(!sendEntites.length) {\n sendEntites = undefined;\n }\n\n const inputMediaWebPage = this.getInputMediaWebPage(options);\n\n const schedule_date = options.scheduleDate || ((message as Message.message).pFlags.is_scheduled ? message.date : undefined);\n return this.apiManager.invokeApi('messages.editMessage', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: message.id,\n message: text,\n media: options.newMedia,\n entities: sendEntites,\n no_webpage: options.noWebPage,\n schedule_date,\n invert_media: options.invertMedia,\n ...(inputMediaWebPage ? {media: inputMediaWebPage} : {})\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n }, (error: ApiError) => {\n this.log.error('editMessage error:', error);\n\n if(error?.type === 'MESSAGE_NOT_MODIFIED') {\n error.handled = true;\n return;\n }\n\n if(error?.type === 'MESSAGE_EMPTY') {\n error.handled = true;\n }\n\n throw error;\n });\n }\n\n public async transcribeAudio(message: Message.message): Promise {\n const {id, peerId} = message;\n\n const process = (result: MessagesTranscribedAudio) => {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateTranscribedAudio',\n msg_id: message.id,\n peer: this.appPeersManager.getOutputPeer(peerId),\n pFlags: result.pFlags,\n text: result.text,\n transcription_id: result.transcription_id\n });\n };\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.transcribeAudio',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: id\n },\n processResult: (result) => {\n process(result);\n return result;\n },\n processError: (error) => {\n if(error.type === 'TRANSCRIPTION_FAILED' || error.type === 'MSG_VOICE_MISSING') {\n process({\n _: 'messages.transcribedAudio',\n transcription_id: 0,\n text: '',\n pFlags: {}\n });\n }\n\n throw error;\n }\n });\n }\n\n public async sendText(\n options: MessageSendingParams & Partial<{\n text: string,\n entities: MessageEntity[],\n viaBotId: BotId,\n queryId: string,\n resultId: string,\n noWebPage: true,\n replyMarkup: ReplyMarkup,\n clearDraft: true,\n invertMedia: boolean,\n webPage: WebPage,\n webPageOptions: Partial<{\n largeMedia: boolean,\n smallMedia: boolean,\n optional: boolean\n }>\n }>\n ): Promise {\n let {peerId, text} = options;\n if(!text.trim()) {\n return;\n }\n\n options.entities ??= [];\n options.webPageOptions ??= {};\n\n this.checkSendOptions(options);\n\n const config = await this.apiManager.getConfig();\n const MAX_LENGTH = config.message_length_max;\n const splitted = splitStringByLength(text, MAX_LENGTH);\n text = splitted[0];\n if(splitted.length > 1) {\n if(options.webPage?._ === 'webPage' && !text.includes(options.webPage.url)) {\n delete options.webPage;\n }\n }\n\n peerId = this.appPeersManager.getPeerMigratedTo(peerId) || peerId;\n\n let entities = options.entities;\n if(!options.viaBotId) {\n [text, entities] = parseMarkdown(text, entities);\n }\n\n let sendEntites = this.getInputEntities(entities);\n if(!sendEntites.length) {\n sendEntites = undefined;\n }\n\n const message = this.generateOutgoingMessage(peerId, options);\n message.entities = entities;\n message.message = text;\n\n const isChannel = this.appPeersManager.isChannel(peerId);\n\n const webPageSend = this.generateOutgoingWebPage(message, options);\n\n const toggleError = (error?: ApiError) => {\n this.onMessagesSendError([message], error);\n this.rootScope.dispatchEvent('messages_pending');\n };\n\n message.send = () => {\n toggleError();\n const sentRequestOptions: PendingAfterMsg = {};\n if(this.pendingAfterMsgs[peerId]) {\n sentRequestOptions.afterMessageId = this.pendingAfterMsgs[peerId].messageId;\n }\n\n const sendAs = options.sendAsPeerId ? this.appPeersManager.getInputPeerById(options.sendAsPeerId) : undefined\n const inputPeer = this.appPeersManager.getInputPeerById(peerId);\n const replyTo = options.replyTo;\n let apiPromise: any;\n if(options.viaBotId) {\n apiPromise = this.apiManager.invokeApiAfter('messages.sendInlineBotResult', {\n peer: inputPeer,\n random_id: message.random_id,\n reply_to: replyTo,\n query_id: options.queryId,\n id: options.resultId,\n clear_draft: options.clearDraft,\n send_as: sendAs\n }, sentRequestOptions);\n } else {\n const commonOptions: Partial = {\n peer: inputPeer,\n message: text,\n random_id: message.random_id,\n reply_to: replyTo,\n entities: sendEntites,\n clear_draft: options.clearDraft,\n schedule_date: options.scheduleDate || undefined,\n silent: options.silent,\n send_as: sendAs,\n update_stickersets_order: options.updateStickersetOrder,\n invert_media: options.invertMedia,\n effect: options.effect\n };\n\n const mergedOptions: MessagesSendMessage | MessagesSendMedia = {\n ...commonOptions as any,\n ...webPageSend\n };\n\n apiPromise = this.apiManager.invokeApiAfter(\n options.webPage ? 'messages.sendMedia' : 'messages.sendMessage',\n mergedOptions,\n sentRequestOptions\n );\n }\n\n this.pendingAfterMsgs[peerId] = sentRequestOptions;\n\n return apiPromise.then((updates: Updates) => {\n if(updates._ === 'updateShortSentMessage') {\n // * fix copying object with promise\n const promise = message.promise;\n delete message.promise;\n const newMessage = copy(message);\n defineNotNumerableProperties(message, ['promise']);\n message.promise = promise;\n\n newMessage.date = updates.date;\n newMessage.id = updates.id;\n newMessage.media = updates.media;\n newMessage.entities = updates.entities;\n newMessage.ttl_period = updates.ttl_period;\n this.wrapMessageEntities(newMessage);\n if(updates.pFlags.out) {\n newMessage.pFlags.out = true;\n }\n\n // * override with new updates\n const {pts, pts_count} = updates;\n\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateMessageID',\n random_id: message.random_id,\n id: newMessage.id\n });\n\n this.apiUpdatesManager.processLocalUpdate({\n _: options.scheduleDate ? 'updateNewScheduledMessage' : (isChannel ? 'updateNewChannelMessage' : 'updateNewMessage'),\n message: newMessage,\n pts,\n pts_count\n });\n\n updates = undefined;\n } else if((updates as Updates.updates).updates) {\n (updates as Updates.updates).updates.forEach((update) => {\n if(update._ === 'updateDraftMessage') {\n update.local = true;\n }\n });\n }\n\n if(updates) {\n this.apiUpdatesManager.processUpdateMessage(updates);\n }\n\n message.promise.resolve();\n }, (error: ApiError) => {\n toggleError(error);\n message.promise.reject(error);\n throw error;\n }).finally(() => {\n if(this.pendingAfterMsgs[peerId] === sentRequestOptions) {\n delete this.pendingAfterMsgs[peerId];\n }\n });\n };\n\n this.beforeMessageSending(message, {\n isScheduled: !!options.scheduleDate || undefined,\n threadId: options.threadId,\n clearDraft: options.clearDraft,\n sequential: true\n });\n\n const promises: ReturnType[] = [message.promise];\n for(let i = 1; i < splitted.length; ++i) {\n promises.push(this.sendText({\n ...options,\n peerId,\n text: splitted[i]\n }));\n }\n\n return Promise.all(promises).then(noop);\n }\n\n public sendFile(options: MessageSendingParams & SendFileDetails & Partial<{\n isRoundMessage: boolean,\n isVoiceMessage: boolean,\n isGroupedItem: boolean,\n isMedia: boolean,\n\n groupId: string,\n caption: string,\n entities: MessageEntity[],\n background: boolean,\n clearDraft: boolean,\n noSound: boolean,\n\n waveform: Uint8Array,\n\n stars: number,\n groupedMessage: Message.message,\n useTempMediaId: boolean,\n\n // ! only for internal use\n processAfter?: typeof processAfter\n }>) {\n const file = options.file;\n let {peerId} = options;\n peerId = this.appPeersManager.getPeerMigratedTo(peerId) || peerId;\n\n this.checkSendOptions(options);\n\n const hadMessageBefore = !!options.groupedMessage;\n const message = options.groupedMessage || this.generateOutgoingMessage(peerId, options);\n\n let attachType: 'document' | 'audio' | 'video' | 'voice' | 'photo', apiFileName: string;\n\n const fileType = (file as Document.document).mime_type || file.type;\n const fileName = file instanceof File ? file.name : '';\n const isDocument = !(file instanceof File) && !(file instanceof Blob);\n let caption = options.caption || '';\n\n this.log('sendFile', file, fileType);\n\n let entities = options.entities || [];\n if(caption) {\n [caption, entities] = parseMarkdown(caption, entities);\n }\n\n const attributes: DocumentAttribute[] = [];\n\n const isPhoto = getEnvironment().IMAGE_MIME_TYPES_SUPPORTED.has(fileType);\n\n const strippedPhotoSize: PhotoSize.photoStrippedSize = options.strippedBytes && {\n _: 'photoStrippedSize',\n bytes: options.strippedBytes,\n type: 'i'\n };\n\n const mediaTempId = options.useTempMediaId ? this.mediaTempId++ : message.id;\n let photo: MyPhoto, document: MyDocument;\n\n let actionName: Extract;\n if(isDocument) { // maybe it's a sticker or gif\n attachType = 'document';\n apiFileName = '';\n } else if(fileType.indexOf('audio/') === 0 || ['video/ogg'].indexOf(fileType) >= 0) {\n attachType = 'audio';\n apiFileName = 'audio.' + (fileType.split('/')[1] === 'ogg' ? 'ogg' : 'mp3');\n actionName = 'sendMessageUploadAudioAction';\n\n if(options.isVoiceMessage) {\n attachType = 'voice';\n if(message) message.pFlags.media_unread = true;\n }\n\n const attribute: DocumentAttribute.documentAttributeAudio = {\n _: 'documentAttributeAudio',\n pFlags: {\n voice: options.isVoiceMessage || undefined\n },\n waveform: options.waveform,\n duration: options.duration || undefined\n };\n\n attributes.push(attribute);\n } else if(!options.isMedia) {\n attachType = 'document';\n apiFileName = 'document.' + fileType.split('/')[1];\n actionName = 'sendMessageUploadDocumentAction';\n } else if(isPhoto) {\n attachType = 'photo';\n apiFileName = 'photo.' + fileType.split('/')[1];\n actionName = 'sendMessageUploadPhotoAction';\n\n const photoSize = {\n _: 'photoSize',\n w: options.width,\n h: options.height,\n type: THUMB_TYPE_FULL,\n location: null,\n size: file.size\n } as PhotoSize.photoSize;\n\n photo = {\n _: 'photo',\n id: mediaTempId,\n sizes: [photoSize],\n w: options.width,\n h: options.height\n } as any;\n\n if(strippedPhotoSize) {\n photo.sizes.unshift(strippedPhotoSize);\n }\n\n this.thumbsStorage.setCacheContextURL(\n photo,\n photoSize.type,\n options.objectURL || '',\n file.size\n );\n\n photo = this.appPhotosManager.savePhoto(photo);\n } else if(getEnvironment().VIDEO_MIME_TYPES_SUPPORTED.has(fileType as VIDEO_MIME_TYPE)) {\n attachType = 'video';\n apiFileName = 'video.mp4';\n actionName = 'sendMessageUploadVideoAction';\n\n const videoAttribute: DocumentAttribute.documentAttributeVideo = {\n _: 'documentAttributeVideo',\n pFlags: {\n round_message: options.isRoundMessage || undefined,\n supports_streaming: true\n },\n duration: options.duration,\n w: options.width,\n h: options.height\n };\n\n attributes.push(videoAttribute);\n\n // * must follow after video attribute\n if(options.noSound &&\n file.size > (10 * 1024) &&\n file.size < (10 * 1024 * 1024)) {\n attributes.push({\n _: 'documentAttributeAnimated'\n });\n }\n } else {\n attachType = 'document';\n apiFileName = 'document.' + fileType.split('/')[1];\n actionName = 'sendMessageUploadDocumentAction';\n }\n\n attributes.push({_: 'documentAttributeFilename', file_name: fileName || apiFileName});\n\n if(\n (['document', 'video', 'audio', 'voice'] as (typeof attachType)[]).includes(attachType) &&\n !isDocument\n ) {\n const thumbs: PhotoSize[] = [];\n document = {\n _: 'document',\n id: mediaTempId,\n duration: options.duration,\n attributes,\n w: options.width,\n h: options.height,\n thumbs,\n mime_type: fileType,\n size: file.size\n } as any;\n\n if(options.objectURL) {\n this.thumbsStorage.setCacheContextURL(\n document,\n undefined,\n options.objectURL,\n file.size\n );\n }\n\n let thumb: PhotoSize.photoSize;\n if(isPhoto) {\n attributes.push({\n _: 'documentAttributeImageSize',\n w: options.width,\n h: options.height\n });\n\n thumb = {\n _: 'photoSize',\n w: options.width,\n h: options.height,\n type: THUMB_TYPE_FULL,\n size: file.size\n };\n } else if(attachType === 'video') {\n if(options.thumb) {\n thumb = {\n _: 'photoSize',\n w: options.thumb.size.width,\n h: options.thumb.size.height,\n type: 'local-thumb',\n size: options.thumb.blob.size\n };\n\n this.thumbsStorage.setCacheContextURL(\n document,\n thumb.type,\n options.thumb.url,\n thumb.size\n );\n }\n }\n\n if(thumb) {\n thumbs.push(thumb);\n }\n\n if(strippedPhotoSize) {\n thumbs.unshift(strippedPhotoSize);\n }\n\n /* if(thumbs.length) {\n const thumb = thumbs[0] as PhotoSize.photoSize;\n const docThumb = appPhotosManager.getDocumentCachedThumb(document.id);\n docThumb.downloaded = thumb.size;\n docThumb.url = thumb.url;\n } */\n\n document = this.appDocsManager.saveDoc(document);\n }\n\n this.log('sendFile', attachType, apiFileName, file.type, options);\n\n const sentDeferred = deferredPromise();\n // sentDeferred.cancel = () => {\n // const error = new Error('Download canceled');\n // error.name = 'AbortError';\n // sentDeferred.reject(error);\n\n // if(uploadPromise?.cancel) {\n // uploadPromise.cancel();\n // }\n // };\n\n const media: MessageMedia = isDocument ? undefined : {\n _: photo ? 'messageMediaPhoto' : 'messageMediaDocument',\n pFlags: {},\n // preloader,\n photo,\n document\n };\n\n if(media) {\n defineNotNumerableProperties(media as any, ['promise']);\n (media as any).promise = sentDeferred;\n\n if(options.spoiler) {\n (media as MessageMedia.messageMediaPhoto).pFlags.spoiler = true;\n }\n }\n\n let sendEntites = this.getInputEntities(entities);\n if(!sendEntites.length) {\n sendEntites = undefined;\n }\n\n const uploadingFileName = !isDocument ? getFileNameForUpload(file) : undefined;\n if(uploadingFileName) {\n this.uploadFilePromises[uploadingFileName] = sentDeferred;\n }\n\n if(!hadMessageBefore) {\n if(options.invertMedia) {\n message.pFlags.invert_media = true;\n }\n\n message.entities = entities;\n message.message = caption;\n message.media = isDocument ? {\n _: 'messageMediaDocument',\n pFlags: {},\n document: file\n } as MessageMedia.messageMediaDocument : media;\n message.uploadingFileName = [uploadingFileName];\n\n if(options.stars) {\n message.media = this.generateOutgoingPaidMedia([message], options.stars);\n }\n }\n\n const toggleError = (error?: ApiError) => {\n this.onMessagesSendError([message], error);\n this.rootScope.dispatchEvent('messages_pending');\n };\n\n let uploaded = false,\n uploadPromise: ReturnType = null;\n\n const send = () => {\n if(isDocument) {\n const inputMedia: InputMedia = {\n _: 'inputMediaDocument',\n id: getDocumentInput(file),\n pFlags: {}\n };\n\n sentDeferred.resolve(inputMedia);\n } else if(file instanceof File || file instanceof Blob) {\n const load = () => {\n if(!uploaded || message?.error) {\n uploaded = false;\n\n uploadPromise = this.apiFileManager.upload({file, fileName: uploadingFileName});\n uploadPromise.catch((err) => {\n if(uploaded) {\n return;\n }\n\n this.log('cancelling upload', media);\n\n message && this.cancelPendingMessage(message.random_id);\n this.setTyping(peerId, {_: 'sendMessageCancelAction'}, undefined, options.threadId);\n sentDeferred.reject(err);\n });\n\n uploadPromise.addNotifyListener((progress: Progress) => {\n /* if(DEBUG) {\n this.log('upload progress', progress);\n } */\n\n const percents = Math.max(1, Math.floor(100 * progress.done / progress.total));\n if(actionName) {\n this.setTyping(peerId, {_: actionName, progress: percents | 0}, undefined, options.threadId);\n }\n sentDeferred.notifyAll(progress);\n });\n\n sentDeferred.notifyAll({done: 0, total: file.size});\n }\n\n let thumbUploadPromise: typeof uploadPromise;\n if(attachType === 'video' && options.objectURL && options.thumb?.blob) {\n thumbUploadPromise = this.apiFileManager.upload({file: options.thumb.blob});\n }\n\n uploadPromise && uploadPromise.then(async(inputFile) => {\n /* if(DEBUG) {\n this.log('appMessagesManager: sendFile uploaded:', inputFile);\n } */\n\n inputFile.name = apiFileName;\n uploaded = true;\n let inputMedia: InputMedia;\n switch(attachType) {\n case 'photo':\n inputMedia = {\n _: 'inputMediaUploadedPhoto',\n file: inputFile,\n pFlags: {\n spoiler: options.spoiler || undefined\n }\n };\n break;\n\n default:\n inputMedia = {\n _: 'inputMediaUploadedDocument',\n file: inputFile,\n mime_type: fileType,\n pFlags: {\n force_file: actionName === 'sendMessageUploadDocumentAction' || undefined,\n spoiler: options.spoiler || undefined\n // nosound_video: options.noSound ? true : undefined\n },\n attributes\n };\n }\n\n if(options.stars && !options.isGroupedItem) {\n inputMedia = {\n _: 'inputMediaPaidMedia',\n extended_media: [inputMedia],\n stars_amount: '' + options.stars\n };\n }\n\n if(thumbUploadPromise) {\n try {\n const inputFile = await thumbUploadPromise;\n (inputMedia as InputMedia.inputMediaUploadedDocument).thumb = inputFile;\n } catch(err) {\n this.log.error('sendFile thumb upload error:', err);\n }\n }\n\n sentDeferred.resolve(inputMedia);\n }, (error: ApiError) => {\n toggleError(error);\n });\n\n return sentDeferred;\n };\n\n if(options.isGroupedItem) {\n load();\n } else {\n this.sendSmthLazyLoadQueue.push({\n load\n });\n }\n }\n\n return sentDeferred;\n };\n\n !hadMessageBefore && (message.send = send);\n !hadMessageBefore && this.beforeMessageSending(message, {\n isGroupedItem: options.isGroupedItem,\n isScheduled: !!options.scheduleDate || undefined,\n threadId: options.threadId,\n clearDraft: options.clearDraft,\n processAfter: options.processAfter\n });\n\n if(!options.isGroupedItem) {\n sentDeferred.then((inputMedia) => {\n this.setTyping(peerId, {_: 'sendMessageCancelAction'}, undefined, options.threadId);\n\n return this.apiManager.invokeApi('messages.sendMedia', {\n background: options.background,\n peer: this.appPeersManager.getInputPeerById(peerId),\n media: inputMedia,\n message: caption,\n random_id: message.random_id,\n reply_to: options.replyTo,\n schedule_date: options.scheduleDate,\n silent: options.silent,\n entities: sendEntites,\n clear_draft: options.clearDraft,\n send_as: options.sendAsPeerId ? this.appPeersManager.getInputPeerById(options.sendAsPeerId) : undefined,\n update_stickersets_order: options.updateStickersetOrder,\n invert_media: options.invertMedia,\n effect: options.effect\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n }, (error: ApiError) => {\n if(attachType === 'photo' &&\n error.code === 400 &&\n (error.type === 'PHOTO_INVALID_DIMENSIONS' ||\n error.type === 'PHOTO_SAVE_FILE_INVALID')) {\n error.handled = true;\n attachType = 'document';\n message.send();\n return;\n }\n\n toggleError(error);\n throw error;\n });\n });\n\n const messagePromise = message.promise as CancellablePromise;\n sentDeferred.then(\n () => messagePromise.resolve(),\n (err) => messagePromise.reject(err)\n );\n }\n\n const ret: {\n message: typeof message,\n promise: typeof sentDeferred,\n send: typeof send,\n media: typeof media,\n uploadingFileName: typeof uploadingFileName\n } = {\n message,\n media,\n send,\n uploadingFileName\n } as any;\n\n defineNotNumerableProperties(ret, ['promise', 'send']);\n ret.promise = sentDeferred;\n\n return ret;\n }\n\n public async sendGrouped(options: MessageSendingParams & {\n isMedia?: boolean,\n entities?: MessageEntity[],\n caption?: string,\n sendFileDetails: SendFileDetails[],\n clearDraft?: boolean,\n stars?: number\n }) {\n this.checkSendOptions(options);\n\n if(options.sendFileDetails.length === 1) {\n return this.sendFile({...options, ...options.sendFileDetails[0]});\n }\n\n let {peerId} = options;\n peerId = this.appPeersManager.getPeerMigratedTo(peerId) || peerId;\n\n let caption = options.caption || '';\n let entities = options.entities || [];\n if(caption) {\n [caption, entities] = parseMarkdown(caption, entities);\n }\n\n let sendEntities = this.getInputEntities(entities);\n if(!sendEntities.length) {\n sendEntities = undefined;\n }\n\n const log = this.log.bindPrefix('sendGrouped');\n log(options);\n\n const groupId = options.stars ? undefined : '' + ++this.groupedTempId;\n\n const callbacks: Array<() => void> = [];\n const processAfter = (cb: () => void) => {\n callbacks.push(cb);\n };\n\n let firstMessage: Message.message;\n const isSingleMessageForAlbum = !!options.stars;\n const preserveMediaTempId = this.mediaTempId;\n const results = options.sendFileDetails.map((details, idx) => {\n const o: Parameters[0] = {\n peerId,\n isGroupedItem: true,\n isMedia: options.isMedia,\n scheduleDate: options.scheduleDate,\n silent: options.silent,\n replyToMsgId: options.replyToMsgId,\n replyToStoryId: options.replyToStoryId,\n replyToQuote: options.replyToQuote,\n threadId: options.threadId,\n sendAsPeerId: options.sendAsPeerId,\n useTempMediaId: isSingleMessageForAlbum,\n groupedMessage: isSingleMessageForAlbum && firstMessage,\n groupId,\n processAfter,\n ...details\n };\n\n if(idx === 0) {\n o.caption = caption;\n o.entities = entities;\n o.effect = options.effect;\n }\n\n const result = this.sendFile(o);\n\n if(idx === 0) {\n firstMessage = result.message;\n }\n\n return result;\n });\n\n if(options.stars) {\n const message = results[0].message;\n message.media = this.generateOutgoingPaidMedia(results, options.stars);\n this.mediaTempMap[message.id] = preserveMediaTempId;\n message.uploadingFileName = results.map(({uploadingFileName}) => uploadingFileName);\n }\n\n if(options.clearDraft) {\n callbacks.push(() => {\n this.appDraftsManager.clearDraft(peerId, options.threadId);\n });\n }\n\n callbacks.forEach((callback) => {\n callback();\n });\n\n // * test pending\n if(DO_NOT_SEND_MESSAGES) {\n return;\n }\n\n const toggleError = (message: Message.message, error?: ApiError) => {\n if(message.error === error) {\n return;\n }\n\n this.onMessagesSendError([message], error);\n this.rootScope.dispatchEvent('messages_pending');\n };\n\n const inputPeer = this.appPeersManager.getInputPeerById(peerId);\n const invoke = (multiMedia: InputSingleMedia[]) => {\n this.setTyping(peerId, {_: 'sendMessageCancelAction'}, undefined, options.threadId);\n\n const deferred = deferredPromise();\n this.sendSmthLazyLoadQueue.push({\n load: () => {\n return this.apiManager.invokeApi(options.stars ? 'messages.sendMedia' : 'messages.sendMultiMedia', {\n peer: inputPeer,\n reply_to: options.replyTo,\n schedule_date: options.scheduleDate,\n silent: options.silent,\n clear_draft: options.clearDraft,\n send_as: options.sendAsPeerId ? this.appPeersManager.getInputPeerById(options.sendAsPeerId) : undefined,\n update_stickersets_order: options.updateStickersetOrder,\n invert_media: options.invertMedia,\n effect: options.effect,\n ...(options.stars ? {\n media: multiMedia[0].media,\n message: multiMedia[0].message,\n entities: multiMedia[0].entities,\n random_id: multiMedia[0].random_id\n } : {\n multi_media: multiMedia\n })\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n deferred.resolve();\n }, (error: ApiError) => {\n results.forEach(({message}) => toggleError(message, error));\n deferred.reject(error);\n });\n }\n });\n\n return deferred;\n };\n\n const promises: Promise[] = results.map(async({message, send}) => {\n let inputMedia: InputMedia;\n try {\n inputMedia = await send() as InputMedia;\n } catch(err) {\n const isUploadCanceled = (err as ApiError).type === 'UPLOAD_CANCELED';\n if(isUploadCanceled && !isSingleMessageForAlbum) {\n return undefined;\n }\n\n if(!isUploadCanceled) {\n log.error('upload item error:', err, message);\n }\n toggleError(message, err);\n throw err;\n }\n\n let messageMedia: MessageMedia;\n try {\n messageMedia = await this.apiManager.invokeApi('messages.uploadMedia', {\n peer: inputPeer,\n media: inputMedia\n });\n } catch(err) {\n log.error('uploadMedia error:', err, message);\n toggleError(message, err);\n throw err;\n }\n\n const originalInputMedia = inputMedia;\n if(messageMedia._ === 'messageMediaPhoto') {\n const photo = this.appPhotosManager.savePhoto(messageMedia.photo);\n inputMedia = getPhotoMediaInput(photo);\n } else if(messageMedia._ === 'messageMediaDocument') {\n const doc = this.appDocsManager.saveDoc(messageMedia.document);\n inputMedia = getDocumentMediaInput(doc);\n }\n\n // copy original flags\n const copyProperties: (keyof InputMedia.inputMediaPhoto)[] = [\n 'pFlags',\n 'ttl_seconds'\n ];\n\n copyProperties.forEach((property) => {\n // @ts-ignore\n inputMedia[property] = originalInputMedia[property] ?? inputMedia[property];\n });\n\n const inputSingleMedia: InputSingleMedia = {\n _: 'inputSingleMedia',\n media: inputMedia,\n random_id: message?.random_id,\n message: caption,\n entities: sendEntities\n };\n\n // * only 1 caption for all inputs\n if(caption) {\n caption = '';\n sendEntities = undefined;\n }\n\n return inputSingleMedia;\n });\n\n return Promise.all(promises).then((inputs) => {\n inputs = inputs.filter(Boolean);\n\n if(options.stars) {\n const spliced = inputs.splice(1, Infinity);\n inputs[0].media = {\n _: 'inputMediaPaidMedia',\n extended_media: [\n inputs[0].media,\n ...spliced.map(({media}) => media)\n ],\n stars_amount: '' + options.stars\n };\n }\n\n return invoke(inputs);\n });\n }\n\n public sendContact(peerId: PeerId, contactPeerId: PeerId) {\n return this.sendOther({peerId, inputMedia: this.appUsersManager.getContactMediaInput(contactPeerId)});\n }\n\n public sendOther(\n options: MessageSendingParams & Partial<{\n inputMedia: InputMedia | {_: 'messageMediaPending', messageMedia: MessageMedia},\n viaBotId: BotId,\n replyMarkup: ReplyMarkup,\n clearDraft: true,\n queryId: string\n resultId: string,\n geoPoint: GeoPoint,\n webDocument?: WebDocument\n }>\n ) {\n let {peerId, inputMedia} = options;\n peerId = this.appPeersManager.getPeerMigratedTo(peerId) || peerId;\n\n const noOutgoingMessage = /* inputMedia?._ === 'inputMediaPhotoExternal' || */inputMedia?._ === 'inputMediaDocumentExternal';\n this.checkSendOptions(options);\n const message = this.generateOutgoingMessage(peerId, options);\n\n let media: MessageMedia;\n switch(inputMedia._) {\n case 'inputMediaPoll': {\n // const pollId = '' + message.id;\n const pollId = randomLong();\n inputMedia.poll.id = pollId;\n this.appPollsManager.savePoll(inputMedia.poll, {\n _: 'pollResults',\n total_voters: 0,\n pFlags: {},\n recent_voters: []\n });\n\n const {poll, results} = this.appPollsManager.getPoll(pollId);\n media = {\n _: 'messageMediaPoll',\n poll,\n results\n };\n\n break;\n }\n\n case 'inputMediaPhoto': {\n media = {\n _: 'messageMediaPhoto',\n photo: this.appPhotosManager.getPhoto((inputMedia.id as InputPhoto.inputPhoto).id),\n pFlags: {}\n };\n break;\n }\n\n case 'inputMediaDocument': {\n const doc = this.appDocsManager.getDoc((inputMedia.id as InputDocument.inputDocument).id);\n /* if(doc.sticker && doc.stickerSetInput) {\n appStickersManager.pushPopularSticker(doc.id);\n } */\n media = {\n _: 'messageMediaDocument',\n document: doc,\n pFlags: {}\n };\n break;\n }\n\n case 'inputMediaContact': {\n media = {\n _: 'messageMediaContact',\n phone_number: inputMedia.phone_number,\n first_name: inputMedia.first_name,\n last_name: inputMedia.last_name,\n user_id: inputMedia.user_id ?? '0',\n vcard: inputMedia.vcard\n };\n break;\n }\n\n case 'inputMediaGeoPoint': {\n media = {\n _: 'messageMediaGeo',\n geo: options.geoPoint\n };\n break;\n }\n\n case 'inputMediaVenue': {\n media = {\n _: 'messageMediaVenue',\n geo: options.geoPoint,\n title: inputMedia.title,\n address: inputMedia.address,\n provider: inputMedia.provider,\n venue_id: inputMedia.venue_id,\n venue_type: inputMedia.venue_type\n };\n break;\n }\n\n case 'inputMediaPhotoExternal': {\n if(noOutgoingMessage) {\n break;\n }\n\n media = {\n _: 'messageMediaPhotoExternal',\n photo: options.webDocument\n };\n break;\n }\n\n case 'inputMediaDocumentExternal': {\n if(noOutgoingMessage) {\n break;\n }\n\n media = {\n _: 'messageMediaDocumentExternal',\n document: options.webDocument\n };\n break;\n }\n\n case 'inputMediaStory': {\n media = {\n _: 'messageMediaStory',\n id: inputMedia.id,\n pFlags: {},\n peer: this.appPeersManager.getOutputPeer(this.appPeersManager.getPeerId(inputMedia.peer))\n };\n break;\n }\n\n case 'messageMediaPending': {\n media = (inputMedia as any).messageMedia;\n break;\n }\n }\n\n message.media = media;\n\n const toggleError = (error?: ApiError) => {\n this.onMessagesSendError([message], error);\n this.rootScope.dispatchEvent('messages_pending');\n };\n\n message.send = () => {\n const sentRequestOptions: PendingAfterMsg = {};\n if(this.pendingAfterMsgs[peerId]) {\n sentRequestOptions.afterMessageId = this.pendingAfterMsgs[peerId].messageId;\n }\n\n const sendAs = options.sendAsPeerId ? this.appPeersManager.getInputPeerById(options.sendAsPeerId) : undefined;\n let apiPromise: Promise;\n if(options.viaBotId) {\n apiPromise = this.apiManager.invokeApiAfter('messages.sendInlineBotResult', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n random_id: message.random_id,\n reply_to: options.replyTo,\n query_id: options.queryId,\n id: options.resultId,\n clear_draft: options.clearDraft,\n schedule_date: options.scheduleDate,\n silent: options.silent,\n send_as: sendAs\n }, sentRequestOptions);\n } else {\n apiPromise = this.apiManager.invokeApiAfter('messages.sendMedia', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n media: inputMedia as InputMedia,\n random_id: message.random_id,\n reply_to: options.replyTo,\n message: '',\n clear_draft: options.clearDraft,\n schedule_date: options.scheduleDate,\n silent: options.silent,\n send_as: sendAs,\n update_stickersets_order: options.updateStickersetOrder\n }, sentRequestOptions);\n }\n\n this.pendingAfterMsgs[peerId] = sentRequestOptions;\n\n return apiPromise.then((updates) => {\n if(updates.updates) {\n updates.updates.forEach((update: Update) => {\n if(update._ === 'updateDraftMessage') {\n update.local = true;\n }\n });\n }\n\n this.apiUpdatesManager.processUpdateMessage(updates);\n promise.resolve();\n }, (error: ApiError) => {\n toggleError(error);\n promise.reject(error);\n throw error;\n }).finally(() => {\n if(this.pendingAfterMsgs[peerId] === sentRequestOptions) {\n delete this.pendingAfterMsgs[peerId];\n }\n });\n };\n\n this.beforeMessageSending(message, {\n isScheduled: !!options.scheduleDate || undefined,\n threadId: options.threadId,\n clearDraft: options.clearDraft,\n sequential: true,\n noOutgoingMessage\n });\n\n const promise = message.promise;\n return promise;\n }\n\n public getInputReplyTo(options: MessageSendingParams): InputReplyTo {\n if(options.replyToStoryId) {\n return {\n _: 'inputReplyToStory',\n story_id: options.replyToStoryId,\n peer: this.appPeersManager.getInputPeerById(options.peerId)\n };\n } else if(options.replyToMsgId) {\n return {\n _: 'inputReplyToMessage',\n reply_to_msg_id: getServerMessageId(options.replyToMsgId),\n reply_to_peer_id: options.replyToPeerId && this.appPeersManager.getInputPeerById(options.replyToPeerId),\n top_msg_id: options.threadId ? getServerMessageId(options.threadId) : undefined,\n ...(options.replyToQuote && {\n quote_text: options.replyToQuote.text,\n quote_entities: options.replyToQuote.entities,\n quote_offset: options.replyToQuote.offset\n })\n };\n }\n }\n\n private checkSendOptions(options: MessageSendingParams) {\n if(options.threadId && !options.replyToMsgId) {\n options.replyToMsgId = options.threadId;\n }\n\n options.replyTo ??= this.getInputReplyTo(options);\n // if(options.scheduleDate) {\n // const minTimestamp = (Date.now() / 1000 | 0) + 10;\n // if(options.scheduleDate <= minTimestamp) {\n // delete options.scheduleDate;\n // }\n // }\n }\n\n private beforeMessageSending(message: Message.message, options: Pick & Partial<{\n isGroupedItem: boolean,\n isScheduled: boolean,\n clearDraft: boolean,\n sequential: boolean,\n processAfter?: (cb: () => void) => void,\n noOutgoingMessage?: boolean\n }> = {}) {\n const messageId = message.id;\n const peerId = this.getMessagePeer(message);\n const storage = options.isScheduled ? this.getScheduledMessagesStorage(peerId) : this.getHistoryMessagesStorage(peerId);\n message.storageKey = storage.key;\n const callbacks: Array<() => void> = [];\n if(options.isScheduled && !options.noOutgoingMessage) {\n // if(!options.isGroupedItem) {\n this.saveMessages([message], {storage, isScheduled: true, isOutgoing: true});\n callbacks.push(() => {\n this.rootScope.dispatchEvent('scheduled_new', message);\n });\n } else if(!options.noOutgoingMessage) {\n /* if(options.threadId && this.threadsStorage[peerId]) {\n delete this.threadsStorage[peerId][options.threadId];\n } */\n const storages: HistoryStorage[] = [\n this.getHistoryStorage(peerId),\n options.threadId ? this.getHistoryStorage(peerId, options.threadId) : undefined\n ].filter(Boolean);\n\n for(const storage of storages) {\n storage.history.unshift(messageId);\n }\n\n this.saveMessages([message], {storage, isOutgoing: true});\n this.setDialogTopMessage(message);\n this.updateMessageContextForInserting(message);\n\n if(options.threadId) {\n const dialog = this.dialogsStorage.getAnyDialog(peerId, options.threadId);\n if(dialog) {\n this.setDialogTopMessage(message, dialog);\n }\n }\n\n callbacks.push(() => {\n this.rootScope.dispatchEvent('history_append', {storageKey: storage.key, message});\n // storages.forEach((historyStorage) => {\n // this.rootScope.dispatchEvent('history_append', {storageKey: historyStorage.key, message});\n // });\n });\n }\n\n let pending: PendingMessageDetails;\n if(!options.noOutgoingMessage) {\n pending = this.pendingByRandomId[message.random_id] = {\n peerId,\n tempId: messageId,\n threadId: options.threadId,\n storage,\n sequential: options.sequential\n };\n\n if(!options.isScheduled) {\n this.pendingTopMsgs[peerId] = messageId;\n\n if(options.threadId) {\n this.pendingTopMsgs[`${peerId}_${options.threadId}`] = messageId;\n }\n }\n }\n\n if(message.reactions) {\n const reaction = message.reactions.results[0].reaction;\n this.invokeAfterMessageIsSent(\n messageId,\n 'reactions',\n (message) => {\n return this.appReactionsManager.sendReaction({message, reaction});\n }\n );\n }\n\n if(!options.isGroupedItem && message.send) {\n callbacks.push(() => {\n if(options.clearDraft) {\n this.appDraftsManager.clearDraft(peerId, options.threadId);\n }\n\n if(!DO_NOT_SEND_MESSAGES) {\n message.send();\n }\n });\n }\n\n if(callbacks.length) {\n (options.processAfter || processAfter)(() => {\n for(const callback of callbacks) {\n callback();\n }\n });\n }\n\n return pending;\n }\n\n public generateStandaloneOutgoingMessage(peerId: PeerId) {\n const message = this.generateOutgoingMessage(peerId, {});\n this.saveMessage(message, {storage: new Map() as any});\n return message;\n }\n\n public generateOutgoingMessage(\n peerId: PeerId,\n options: MessageSendingParams & Partial<{\n viaBotId: BotId,\n groupId: string,\n replyMarkup: ReplyMarkup,\n }>\n ) {\n let postAuthor: string;\n const isBroadcast = this.appPeersManager.isBroadcast(peerId);\n if(isBroadcast) {\n const chat = this.appPeersManager.getPeer(peerId) as Chat.channel;\n if(chat.pFlags.signatures) {\n const user = this.appUsersManager.getSelf();\n const fullName = user.first_name + (user.last_name ? ' ' + user.last_name : '');\n postAuthor = fullName;\n }\n }\n\n let topMessage: number;\n if(options.threadId && !this.appPeersManager.isForum(peerId)) {\n const historyStorage = this.getHistoryStorage(peerId, options.threadId);\n topMessage = historyStorage.history.first[0];\n }\n\n const message: Message.message = {\n _: 'message',\n id: this.generateTempMessageId(peerId, topMessage),\n from_id: options.sendAsPeerId ? this.appPeersManager.getOutputPeer(options.sendAsPeerId) : this.generateFromId(peerId),\n peer_id: this.appPeersManager.getOutputPeer(peerId),\n post_author: postAuthor,\n pFlags: this.generateFlags(peerId),\n date: options.scheduleDate || (tsNow(true) + this.timeManager.getServerTimeOffset()),\n message: '',\n grouped_id: options.groupId,\n random_id: randomLong(),\n reply_to: this.generateReplyHeader(peerId, options.replyTo),\n via_bot_id: options.viaBotId,\n reply_markup: options.replyMarkup,\n replies: this.generateReplies(peerId, options.replyTo),\n views: isBroadcast && 1,\n pending: true,\n effect: options.effect\n };\n\n defineNotNumerableProperties(message, ['send', 'promise']);\n if(options.groupId === undefined) {\n message.promise = deferredPromise();\n }\n\n if(options.savedReaction) {\n message.reactions = {\n _: 'messageReactions',\n pFlags: {\n reactions_as_tags: true\n },\n results: options.savedReaction.map((reaction) => {\n return {\n _: 'reactionCount',\n count: 1,\n reaction,\n chosen_order: 0\n };\n })\n };\n }\n\n return message;\n }\n\n private generateReplyHeader(peerId: PeerId, replyTo: InputReplyTo): MessageReplyHeader {\n if(!replyTo) {\n return;\n }\n\n if(replyTo._ === 'inputReplyToStory') {\n return {\n _: 'messageReplyStoryHeader',\n story_id: replyTo.story_id,\n peer: this.appPeersManager.getOutputPeer(this.appPeersManager.getPeerId(replyTo.peer))\n };\n }\n\n const replyWillBeInPeerId = peerId;\n const replyToPeerId = this.appPeersManager.getPeerId(replyTo.reply_to_peer_id);\n if(replyToPeerId) {\n peerId = replyToPeerId;\n }\n\n const channelId = this.appPeersManager.isChannel(peerId) ? peerId.toChatId() : undefined;\n const isForum = this.appPeersManager.isForum(peerId);\n const replyToMsgId = this.appMessagesIdsManager.generateMessageId(replyTo.reply_to_msg_id, channelId);\n let replyToTopId = replyTo.top_msg_id ? this.appMessagesIdsManager.generateMessageId(replyTo.top_msg_id, channelId) : undefined;\n const originalMessage = this.getMessageByPeer(peerId, replyToMsgId);\n\n if(isForum && !replyToTopId && originalMessage) {\n replyToTopId = getMessageThreadId(originalMessage, true);\n }\n\n const header: MessageReplyHeader = {\n _: 'messageReplyHeader',\n pFlags: {},\n reply_to_msg_id: replyToMsgId || replyToTopId\n };\n\n if(replyToTopId && isForum && GENERAL_TOPIC_ID !== replyToTopId) {\n header.pFlags.forum_topic = true;\n }\n\n if(replyToTopId && header.reply_to_msg_id !== replyToTopId) {\n header.reply_to_top_id = replyToTopId;\n }\n\n if(replyTo.quote_text) {\n header.quote_text = replyTo.quote_text;\n header.quote_entities = replyTo.quote_entities;\n header.quote_offset = replyTo.quote_offset;\n header.pFlags.quote = true;\n }\n\n if(replyToPeerId) {\n if(replyToPeerId.isUser() || !this.appPeersManager.isPeerPublic(replyToPeerId)) {\n delete header.reply_to_msg_id;\n header.quote_text ??= (originalMessage as Message.message).message;\n } else {\n header.reply_to_peer_id = this.appPeersManager.getOutputPeer(replyToPeerId);\n }\n }\n\n header.reply_media = (originalMessage as Message.message)?.media;\n\n if(originalMessage && replyWillBeInPeerId !== originalMessage.peerId) {\n header.reply_from = this.generateForwardHeader(peerId, originalMessage as Message.message, true);\n }\n\n return header;\n }\n\n private generateReplies(peerId: PeerId, replyTo?: InputReplyTo) {\n let replies: MessageReplies.messageReplies;\n if(this.appPeersManager.isBroadcast(peerId)) {\n const channelFull = this.appProfileManager.getCachedFullChat(peerId.toChatId()) as ChatFull.channelFull;\n if(channelFull?.linked_chat_id) {\n replies = {\n _: 'messageReplies',\n pFlags: {\n comments: true\n },\n channel_id: channelFull.linked_chat_id,\n replies: 0,\n replies_pts: 0\n };\n }\n } else if(this.appPeersManager.isMegagroup(peerId) && !replyTo) {\n replies = {\n _: 'messageReplies',\n pFlags: {},\n replies: 0,\n replies_pts: 0\n };\n }\n\n return replies;\n }\n\n /**\n * Generate correct from_id according to anonymous or broadcast\n * Won't return peer if message is sent by the peer\n */\n public generateFromId(peerId: PeerId) {\n if(this.appPeersManager.isAnyChat(peerId) && (this.appPeersManager.isBroadcast(peerId) || this.isAnonymousSending(peerId))) {\n return undefined;\n } else {\n return this.appPeersManager.getOutputPeer(this.appUsersManager.getSelf().id.toPeerId());\n }\n }\n\n private generateFlags(peerId: PeerId) {\n const pFlags: Message.message['pFlags'] = {};\n const fromId = this.appUsersManager.getSelf().id;\n if(peerId !== fromId) {\n pFlags.out = true;\n\n if(!this.appPeersManager.isChannel(peerId) && !this.appUsersManager.isBot(peerId)) {\n pFlags.unread = true;\n }\n }\n\n if(this.appPeersManager.isBroadcast(peerId)) {\n pFlags.post = true;\n }\n\n return pFlags;\n }\n\n private generateForwardHeader(toPeerId: PeerId, originalMessage: Message.message, isReply?: boolean) {\n if(!originalMessage) {\n return;\n }\n\n const myId = this.appPeersManager.peerId;\n const fromId = originalMessage.fromId;\n const fromPeerId = originalMessage.peerId;\n const originalFwdFrom = originalMessage.fwd_from;\n if(\n fromId === myId &&\n fromPeerId === myId &&\n !originalFwdFrom &&\n !isReply\n ) {\n return;\n }\n\n const fwdHeader: MessageFwdHeader.messageFwdHeader = {\n _: 'messageFwdHeader',\n date: originalMessage.date,\n pFlags: {}\n };\n\n let privateForwardName: string;\n if(fromId.isUser()) {\n const userFull = this.appProfileManager.getCachedFullUser(fromId.toUserId());\n privateForwardName = userFull?.private_forward_name;\n }\n\n if(originalFwdFrom) {\n const copyKeys: (keyof MessageFwdHeader.messageFwdHeader)[] = [\n 'from_id',\n 'from_name',\n 'channel_post',\n 'post_author'\n ];\n\n copyKeys.forEach((key) => {\n // @ts-ignore\n fwdHeader[key] = originalFwdFrom[key];\n });\n } else {\n fwdHeader.post_author = originalMessage.post_author;\n\n if(!privateForwardName) {\n fwdHeader.from_id = this.appPeersManager.getOutputPeer(fromId);\n }\n\n if(this.appPeersManager.isBroadcast(fromPeerId)) {\n fwdHeader.channel_post = originalMessage.id;\n }\n }\n\n fwdHeader.from_name ||= privateForwardName;\n\n if(toPeerId === myId && !isReply) {\n if(privateForwardName) {\n if(fwdHeader.from_name) {\n fwdHeader.saved_from_name = privateForwardName;\n }\n } else {\n fwdHeader.saved_from_msg_id = originalMessage.id;\n fwdHeader.saved_from_peer = this.appPeersManager.getOutputPeer(fromPeerId);\n if(originalFwdFrom) {\n fwdHeader.saved_from_id = this.appPeersManager.getOutputPeer(fromId);\n }\n }\n\n if(originalMessage.pFlags.out && !this.appPeersManager.isBroadcast(fromPeerId)) {\n fwdHeader.pFlags.saved_out = true;\n }\n\n if(originalFwdFrom) {\n fwdHeader.saved_date = originalMessage.date;\n }\n }\n\n return fwdHeader;\n }\n\n private getInputMediaWebPage(options: Parameters[0]): InputMedia.inputMediaWebPage {\n if(!options.webPage) {\n return;\n }\n\n return {\n _: 'inputMediaWebPage',\n url: (options.webPage as WebPage.webPage).url,\n pFlags: {\n force_large_media: options.webPageOptions.largeMedia || undefined,\n force_small_media: options.webPageOptions.smallMedia || undefined,\n optional: options.webPageOptions.optional || undefined\n }\n };\n }\n\n private generateOutgoingWebPage(\n message: Message.message,\n options: Parameters[0]\n ): {media: InputMedia.inputMediaWebPage} | {no_webpage: boolean} | {} {\n if(message._ !== 'message') {\n return {};\n }\n\n if(!options.webPage) {\n return {no_webpage: options.noWebPage};\n }\n\n message.media = {\n _: 'messageMediaWebPage',\n pFlags: {\n force_large_media: options.webPageOptions.largeMedia || undefined,\n force_small_media: options.webPageOptions.smallMedia || undefined\n },\n webpage: options.webPage\n };\n\n if(options.invertMedia) {\n message.pFlags.invert_media = true;\n }\n\n return {\n media: this.getInputMediaWebPage(options)\n };\n }\n\n public generateFakeAvatarMessage(peerId: PeerId, photo: Photo) {\n const maxId = Number.MAX_SAFE_INTEGER;\n const message: Message.messageService = {\n _: 'messageService',\n pFlags: {},\n action: {\n _: 'messageActionChannelEditPhoto',\n photo\n },\n id: maxId,\n peer_id: this.appPeersManager.getOutputPeer(peerId),\n mid: maxId,\n peerId,\n date: (photo as Photo.photo).date,\n fromId: peerId\n };\n\n this.getHistoryMessagesStorage(peerId).set(maxId, message);\n return message;\n }\n\n private generateOutgoingPaidMedia(messages: {media?: MessageMedia}[], stars: number): MessageMedia.messageMediaPaidMedia {\n return {\n _: 'messageMediaPaidMedia',\n extended_media: messages.map(({media}) => ({_: 'messageExtendedMedia', media})),\n stars_amount: '' + stars\n };\n }\n\n public getUploadPromise(uploadFileName: string) {\n return this.uploadFilePromises[uploadFileName];\n }\n\n public isAnonymousSending(peerId: PeerId): boolean {\n if(!peerId.isAnyChat()) {\n return false;\n }\n\n const chat = this.appPeersManager.getPeer(peerId);\n return (chat as Chat.channel).admin_rights?.pFlags?.anonymous;\n }\n\n public setDialogTopMessage(\n message: MyMessage,\n dialog: AnyDialog = this.getDialogOnly(message.peerId)\n ) {\n if(!dialog) {\n return;\n }\n\n dialog.top_message = message.mid;\n\n const historyStorage = this.getHistoryStorage(\n message.peerId,\n isDialog(dialog) ? undefined : getDialogKey(dialog)\n );\n historyStorage.maxId = message.mid;\n\n this.dialogsStorage.generateIndexForDialog(dialog, false, message);\n\n this.scheduleHandleNewDialogs(message.peerId, dialog);\n }\n\n public cancelPendingMessage(randomId: string) {\n const pendingData = this.pendingByRandomId[randomId];\n\n /* if(DEBUG) {\n this.log('cancelPendingMessage', randomId, pendingData);\n } */\n\n if(pendingData) {\n const {peerId, tempId, storage} = pendingData;\n const historyStorage = this.getHistoryStorage(peerId);\n\n if(this.appPeersManager.isChannel(peerId)) {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateDeleteChannelMessages',\n channel_id: peerId.toChatId(),\n messages: [tempId],\n pts: undefined,\n pts_count: undefined\n });\n } else {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateDeleteMessages',\n messages: [tempId],\n pts: undefined,\n pts_count: undefined\n });\n }\n\n historyStorage.history.delete(tempId);\n\n delete this.pendingByRandomId[randomId];\n this.deleteMessageFromStorage(storage, tempId);\n\n return true;\n }\n\n return false;\n }\n\n /* public async refreshConversations() {\n const limit = 200, outDialogs: Dialog[] = [];\n for(let folderId = 0; folderId < 2; ++folderId) {\n let offsetDate = 0;\n for(;;) {\n const {dialogs, isEnd} = await this.getTopMessages(limit, folderId, offsetDate);\n\n if(dialogs.length) {\n outDialogs.push(...dialogs as Dialog[]);\n const dialog = dialogs[dialogs.length - 1];\n\n // * get peerId and mid manually, because dialog can be migrated peer and it won't be saved\n const peerId = getPeerId(dialog.peer);\n const mid = this.appMessagesIdsManager.generateMessageId(dialog.top_message);\n offsetDate = this.getMessageByPeer(peerId, mid).date;\n\n if(!offsetDate) {\n console.error('refreshConversations: got no offsetDate', dialog);\n break;\n }\n }\n\n if(isEnd) {\n break;\n }\n }\n }\n\n let obj: {[peerId: string]: Dialog} = {};\n outDialogs.forEach((dialog) => {\n obj[dialog.peerId] = dialog;\n });\n rootScope.dispatchEvent('dialogs_multiupdate', obj);\n\n return outDialogs;\n } */\n\n public async fillConversations(folderId = GLOBAL_FOLDER_ID): Promise {\n const middleware = this.middleware.get();\n while(!this.dialogsStorage.isDialogsLoaded(folderId)) {\n const result = await this.getTopMessages({limit: 100, folderId});\n if(!middleware() || !result || result.isEnd) {\n break;\n }\n }\n }\n\n /* public async getConversationsAll(query = '', folderId = 0) {\n const limit = 200, outDialogs: Dialog[] = [];\n for(; folderId < 2; ++folderId) {\n let offsetIndex = 0;\n for(;;) {\n const {dialogs} = await appMessagesManager.getConversations(query, offsetIndex, limit, folderId).promise;\n\n if(dialogs.length) {\n outDialogs.push(...dialogs);\n offsetIndex = dialogs[dialogs.length - 1].index || 0;\n } else {\n break;\n }\n }\n }\n\n return outDialogs;\n } */\n\n public getReadMaxIdIfUnread(peerId: PeerId, threadId?: number) {\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n if(threadId && !this.appChatsManager.isForum(peerId.toChatId())) {\n const chatHistoryStorage = this.getHistoryStorage(peerId);\n const readMaxId = Math.max(chatHistoryStorage.readMaxId ?? 0, historyStorage.readMaxId);\n const message = this.getMessageByPeer(peerId, historyStorage.maxId); // usually message is missing, so pFlags.out won't be there anyway\n return !message?.pFlags?.out && readMaxId < historyStorage.maxId ? readMaxId : 0;\n } else {\n const message = this.getMessageByPeer(peerId, historyStorage.maxId);\n // const readMaxId = peerId.isUser() ? Math.max(historyStorage.readMaxId, historyStorage.readOutboxMaxId) : historyStorage.readMaxId;\n const readMaxId = historyStorage.readMaxId;\n // readMaxId can be 4294967295 (0)\n return !message?.pFlags?.out && readMaxId < historyStorage.maxId && getServerMessageId(readMaxId) ? readMaxId : 0;\n }\n }\n\n // public lolSet = new Set();\n public getTopMessages({\n limit,\n folderId,\n query,\n offsetTopicId,\n filterType = this.dialogsStorage.getFilterType(folderId)\n }: {\n limit: number,\n folderId: number,\n query?: string,\n offsetTopicId?: ForumTopic['id'],\n filterType?: FilterType\n }) {\n const log = this.log.bindPrefix('getTopMessages');\n // const dialogs = this.dialogsStorage.getFolder(folderId);\n const offsetId = 0;\n let offsetPeerId: PeerId;\n let offsetIndex = 0;\n query ||= undefined;\n\n let offsetDate = this.dialogsStorage.getOffsetDate(folderId);\n if(offsetDate) {\n offsetIndex = offsetDate * 0x10000;\n offsetDate += this.timeManager.getServerTimeOffset();\n }\n\n const useLimit = 100;\n const middleware = this.middleware.get();\n const isSearch = !!query;\n const peerId = this.dialogsStorage.isVirtualFilter(folderId) ? folderId : undefined;\n\n const processResult = (result: MessagesDialogs | MessagesForumTopics | MessagesSavedDialogs) => {\n if(!middleware() || result._ === 'messages.dialogsNotModified' || result._ === 'messages.savedDialogsNotModified') return null;\n\n log('result', result);\n\n // can reset pinned order here\n if(\n !peerId &&\n !offsetId &&\n !offsetDate &&\n !offsetPeerId &&\n folderId !== GLOBAL_FOLDER_ID\n ) {\n log('resetting pinned order', folderId);\n this.dialogsStorage.resetPinnedOrder(folderId);\n }\n\n if(!peerId && !offsetDate) {\n log('adding missed dialogs');\n // telegramMeWebManager.setAuthorized(true);\n this.appDraftsManager.addMissedDialogs();\n }\n\n this.saveApiResult(result);\n\n let maxSeenIdIncremented = !!offsetDate;\n let hasPrepend = false;\n const noIdsDialogs: BroadcastEvents['dialogs_multiupdate'] = new Map();\n const setFolderId: REAL_FOLDER_ID = folderId === GLOBAL_FOLDER_ID ? FOLDER_ID_ALL : folderId as REAL_FOLDER_ID;\n const saveGlobalOffset = (!!peerId && !isSearch) || folderId === GLOBAL_FOLDER_ID;\n const items: Array =\n (result as MessagesDialogs.messagesDialogsSlice).dialogs as Dialog[] ||\n (result as MessagesForumTopics).topics as ForumTopic[];\n log('saving', {setFolderId, saveGlobalOffset, noIdsDialogs, isSearch});\n forEachReverse(items, (dialog, idx, arr) => {\n if(!dialog) {\n arr.splice(idx, 1);\n return;\n }\n\n // const d = Object.assign({}, dialog);\n // ! нужно передавать folderId, так как по папке !== 0 нет свойства folder_id\n if(!peerId) {\n (dialog as Dialog).folder_id ??= setFolderId;\n }\n\n this.dialogsStorage.saveDialog({\n dialog,\n ignoreOffsetDate: !isSearch,\n saveGlobalOffset\n });\n\n if(dialog.peerId === undefined) {\n arr.splice(idx, 1);\n // this.log.error('bugged dialog?', dialog);\n // debugger;\n return;\n }\n\n if(\n !maxSeenIdIncremented &&\n !this.appPeersManager.isChannel(dialog.peerId || this.dialogsStorage.getDialogPeerId(dialog))\n ) {\n this.incrementMaxSeenId(dialog.top_message);\n maxSeenIdIncremented = true;\n }\n\n // if(!folderId && !dialog.folder_id) {\n // this.lolSet.add(dialog.peerId);\n // }\n\n if(offsetIndex && getDialogIndex(dialog) > offsetIndex) {\n this.scheduleHandleNewDialogs(dialog.peerId, dialog);\n hasPrepend = true;\n }\n\n // ! это может случиться, если запрос идёт не по папке 0, а по 1. почему-то read'ов нет\n // ! в итоге, чтобы получить 1 диалог, делается первый запрос по папке 0, потом запрос для архивных по папке 1, и потом ещё перезагрузка архивного диалога\n if(\n !peerId &&\n !isSavedDialog(dialog) &&\n !getServerMessageId(dialog.read_inbox_max_id) &&\n !getServerMessageId(dialog.read_outbox_max_id) &&\n !dialog.unread_count &&\n getServerMessageId(dialog.top_message)\n ) {\n noIdsDialogs.set(dialog.peerId, {dialog: dialog as Dialog});\n\n this.log.error('noIdsDialogs', dialog, params);\n } else if(dialog.top_message) { // * fix sending status\n const topMessage = this.getMessageByPeer(dialog.peerId, dialog.top_message);\n if(topMessage) {\n this.setMessageUnreadByDialog(topMessage, dialog);\n this.dialogsStorage.setDialogToState(dialog);\n }\n }\n });\n\n if(noIdsDialogs.size) {\n // setTimeout(() => { // test bad situation\n const peerIds = [...noIdsDialogs.keys()];\n const promises = peerIds.map((peerId) => this.reloadConversation(peerId));\n Promise.all(promises).then(() => {\n this.rootScope.dispatchEvent('dialogs_multiupdate', noIdsDialogs);\n\n for(let i = 0; i < peerIds.length; ++i) {\n const peerId = peerIds[i];\n this.rootScope.dispatchEvent('dialog_unread', {\n peerId,\n dialog: this.getDialogOnly(peerId)\n });\n }\n });\n // }, 10e3);\n }\n\n const count = (result as MessagesDialogs.messagesDialogsSlice).count;\n\n // exclude empty draft dialogs\n const folderDialogs = this.dialogsStorage.getFolderDialogs(folderId, false);\n let dialogsLength = 0;\n if(!isSearch) for(let i = 0, length = folderDialogs.length; i < length; ++i) {\n const dialog = folderDialogs[i];\n if(getServerMessageId(dialog.top_message) || (dialog as Dialog).draft) {\n ++dialogsLength;\n } else {\n this.log.error('something strange with dialog', dialog);\n }\n }\n\n let isEnd: boolean;\n if(isSearch) {\n isEnd = !count || items.length === count;\n } else {\n isEnd = /* limit > dialogsResult.dialogs.length || */\n !count ||\n dialogsLength >= count ||\n !items.length;\n }\n\n if(isEnd && !isSearch) {\n this.dialogsStorage.setDialogsLoaded(folderId, true);\n }\n\n if(hasPrepend) {\n this.scheduleHandleNewDialogs();\n } else {\n this.rootScope.dispatchEvent('dialogs_multiupdate', new Map());\n }\n\n log('end', {isEnd, hasPrepend, offsetDate: this.dialogsStorage.getOffsetDate(folderId)});\n\n const dialogs = items;\n const slicedDialogs = limit === useLimit ? dialogs : dialogs.slice(0, limit);\n return {\n isEnd: isEnd && slicedDialogs[slicedDialogs.length - 1] === dialogs[dialogs.length - 1],\n count: count ?? items.length,\n dialogs: slicedDialogs\n };\n };\n\n const requestOptions: InvokeApiOptions = {\n // timeout: APITIMEOUT,\n noErrorBox: true\n };\n\n let promise: Promise>, method: string, params: any;\n if(filterType === FilterType.Forum) {\n promise = this.apiManager.invokeApiSingleProcess({\n method: method = 'channels.getForumTopics',\n params: params = {\n channel: this.appChatsManager.getChannelInput(peerId.toChatId()),\n limit: useLimit,\n offset_date: offsetTopicId ? undefined : offsetDate,\n offset_id: offsetId,\n offset_topic: offsetTopicId,\n q: query\n },\n options: requestOptions,\n processResult: (result) => {\n result = this.dialogsStorage.processTopics(peerId, result);\n return processResult(result);\n }\n });\n } else if(filterType === FilterType.Saved) {\n promise = this.apiManager.invokeApiSingleProcess({\n method: method = 'messages.getSavedDialogs',\n params: params = {\n offset_date: offsetDate,\n offset_id: offsetId,\n offset_peer: this.appPeersManager.getInputPeerById(offsetPeerId),\n limit: useLimit,\n hash: '0'\n },\n options: requestOptions,\n processResult\n });\n } else {\n // ! ВНИМАНИЕ: ОЧЕНЬ СЛОЖНАЯ ЛОГИКА:\n // ! если делать запрос сначала по папке 0, потом по папке 1, по индексу 0 в массиве будет один и тот же диалог, с dialog.pFlags.pinned, ЛОЛ???\n // ! т.е., с запросом folder_id: 1, и exclude_pinned: 0, в результате будут ещё и закреплённые с папки 0\n promise = this.apiManager.invokeApiSingleProcess({\n method: method = 'messages.getDialogs',\n params: params = {\n folder_id: folderId,\n offset_date: offsetDate,\n offset_id: offsetId,\n offset_peer: this.appPeersManager.getInputPeerById(offsetPeerId),\n limit: useLimit,\n hash: '0'\n },\n options: requestOptions,\n processResult\n });\n }\n\n log('invoke', method, params);\n\n return promise;\n }\n\n public async forwardMessagesInner(options: MessageForwardParams) {\n let {peerId, fromPeerId, mids} = options;\n // delete options.replyToMsgId;\n // delete options.threadId;\n\n peerId = this.appPeersManager.getPeerMigratedTo(peerId) || peerId;\n mids = mids.slice().sort((a, b) => a - b);\n\n for(let i = 0, length = mids.length; i < length; ++i) {\n const mid = mids[i];\n const originalMessage = this.getMessageByPeer(fromPeerId, mid) as Message.message;\n if(originalMessage.pFlags.is_outgoing) { // this can happen when forwarding a changelog\n this.sendText({\n peerId,\n threadId: options.threadId,\n sendAsPeerId: options.sendAsPeerId,\n text: originalMessage.message,\n entities: originalMessage.entities,\n scheduleDate: options.scheduleDate,\n silent: options.silent\n });\n\n mids.splice(i--, 1);\n --length;\n }\n }\n\n if(!mids.length) {\n return Promise.resolve();\n }\n\n const config = await this.apiManager.getConfig();\n const overflowMids = mids.splice(config.forwarded_count_max, mids.length - config.forwarded_count_max);\n\n if(options.dropCaptions) {\n options.dropAuthor = true;\n }\n\n const groups: {\n [groupId: string]: {\n tempId: string,\n messages: Message.message[]\n }\n } = {};\n\n const newMids: number[] = [];\n const newMessages = mids.map((mid) => {\n const originalMessage = this.getMessageByPeer(fromPeerId, mid) as Message.message;\n const message: Message.message = this.generateOutgoingMessage(peerId, options);\n newMids.push(message.id);\n\n const keys: Array = [\n 'entities',\n 'media'\n // 'reply_markup'\n ];\n\n const flags: Array = [\n 'invert_media'\n ];\n\n if(!options.dropAuthor) {\n message.fwd_from = this.generateForwardHeader(peerId, originalMessage);\n keys.push('views', 'forwards');\n\n if(message.fwd_from?.from_name && peerId === this.appPeersManager.peerId) {\n delete message.from_id;\n }\n }\n\n if(!options.dropCaptions || !originalMessage.media) {\n keys.push('message');\n }\n\n const replyToMid = (originalMessage.reply_to as MessageReplyHeader.messageReplyHeader)?.reply_to_msg_id;\n const replyToMessageIdx = mids.indexOf(replyToMid);\n if(replyToMid && replyToMessageIdx !== -1) {\n const newReplyToMid = newMids[replyToMessageIdx];\n message.reply_to = {\n _: 'messageReplyHeader',\n reply_to_msg_id: newReplyToMid,\n pFlags: {}\n };\n\n /* this.invokeAfterMessageIsSent(newReplyToMid, 'reply', async(originalMessage) => {\n message.reply_to.reply_to_msg_id = originalMessage.mid;\n }); */\n }\n\n keys.forEach((key) => {\n // @ts-ignore\n message[key] = copy(originalMessage[key]);\n });\n\n flags.forEach((key) => {\n // @ts-ignore\n message.pFlags[key] = originalMessage.pFlags[key];\n });\n\n const document = (message.media as MessageMedia.messageMediaDocument)?.document as MyDocument;\n if(document) {\n const types: MyDocument['type'][] = ['round', 'voice'];\n if(types.includes(document.type)) {\n (message as MyMessage).pFlags.media_unread = true;\n }\n\n if(document.sticker && !this.rootScope.premium) {\n const effectThumb = getStickerEffectThumb(document);\n if(effectThumb) {\n (message.media as MessageMedia.messageMediaDocument).pFlags.nopremium = true;\n }\n }\n }\n\n if(originalMessage.grouped_id) {\n const group = groups[originalMessage.grouped_id] ??= {tempId: '' + ++this.groupedTempId, messages: []};\n group.messages.push(message);\n }\n\n if(peerId === this.appPeersManager.peerId) {\n message.saved_peer_id = this.appPeersManager.getOutputPeer(fromPeerId);\n }\n\n return message;\n });\n\n for(const groupId in groups) {\n const group = groups[groupId];\n if(group.messages.length > 1) {\n group.messages.forEach((message) => {\n message.grouped_id = group.tempId;\n });\n\n // * save factcheck to new message\n const originalMainMessage = getMainGroupedMessage(this.getMessagesByGroupedId(groupId));\n const message = getMainGroupedMessage(group.messages);\n if(originalMainMessage.factcheck) {\n message.factcheck = originalMainMessage.factcheck;\n }\n }\n }\n\n newMessages.forEach((message) => {\n this.beforeMessageSending(message, {\n isScheduled: !!options.scheduleDate || undefined,\n sequential: true,\n threadId: message.peerId === this.appPeersManager.peerId ? fromPeerId : undefined\n });\n });\n\n const sentRequestOptions: PendingAfterMsg = {};\n if(this.pendingAfterMsgs[peerId]) {\n sentRequestOptions.afterMessageId = this.pendingAfterMsgs[peerId].messageId;\n }\n\n const promise = /* true ? Promise.resolve() : */this.apiManager.invokeApiAfter('messages.forwardMessages', {\n from_peer: this.appPeersManager.getInputPeerById(fromPeerId),\n id: mids.map((mid) => getServerMessageId(mid)),\n random_id: newMessages.map((message) => message.random_id),\n to_peer: this.appPeersManager.getInputPeerById(peerId),\n with_my_score: options.withMyScore,\n silent: options.silent,\n schedule_date: options.scheduleDate,\n drop_author: options.dropAuthor,\n drop_media_captions: options.dropCaptions,\n send_as: options.sendAsPeerId ? this.appPeersManager.getInputPeerById(options.sendAsPeerId) : undefined,\n top_msg_id: options.threadId ? this.appMessagesIdsManager.generateMessageId(options.threadId) : undefined\n }, sentRequestOptions).then((updates) => {\n this.log('forwardMessages updates:', updates);\n this.apiUpdatesManager.processUpdateMessage(updates);\n }, (error: ApiError) => {\n this.onMessagesSendError(newMessages, error);\n throw error;\n }).finally(() => {\n if(this.pendingAfterMsgs[peerId] === sentRequestOptions) {\n delete this.pendingAfterMsgs[peerId];\n }\n });\n\n this.pendingAfterMsgs[peerId] = sentRequestOptions;\n\n const promises: (typeof promise)[] = [promise];\n if(overflowMids.length) {\n promises.push(this.forwardMessages({\n ...options,\n peerId,\n fromPeerId,\n mids: overflowMids\n }));\n }\n\n return Promise.all(promises).then(noop);\n }\n\n public forwardMessages(options: MessageForwardParams) {\n this.checkSendOptions(options);\n\n const {peerId, fromPeerId, mids} = options;\n const channelId = this.appPeersManager.isChannel(fromPeerId) ? fromPeerId.toChatId() : undefined;\n const splitted = this.appMessagesIdsManager.splitMessageIdsByChannels(mids, channelId);\n const promises = splitted.map(([_channelId, {mids}]) => {\n return this.forwardMessagesInner({\n ...options,\n peerId,\n fromPeerId: _channelId ? channelId.toPeerId(true) : this.getMessageByPeer(fromPeerId, mids[0]).peerId,\n mids\n });\n });\n\n return Promise.all(promises).then(noop);\n }\n\n public generateEmptyMessage(mid: number): Message.message | Message.messageService {\n return undefined;\n // return {\n // _: 'messageEmpty',\n // id: getServerMessageId(mid),\n // mid,\n // deleted: true,\n // pFlags: {}\n // };\n }\n\n private onMessagesSendError(messages: Message.message[], error?: ApiError) {\n messages.forEach((message) => {\n if(message.error === error) {\n return;\n }\n\n // * cancel uploading rest of files if it's a single-message album\n const {uploadingFileName} = message;\n if(uploadingFileName?.length > 1) {\n uploadingFileName.forEach((name) => {\n this.apiFileManager.cancelDownload(name);\n });\n }\n\n this.modifyMessage(message, (message) => {\n if(error) {\n message.error = error;\n } else {\n delete message.error;\n }\n }, undefined, true);\n\n if(error) {\n this.rootScope.dispatchEvent('message_error', {storageKey: message.storageKey, peerId: message.peerId, tempId: message.mid, error});\n\n const dialog = this.getDialogOnly(message.peerId);\n if(dialog) {\n this.rootScope.dispatchEvent('dialog_unread', {peerId: message.peerId, dialog});\n }\n }\n });\n }\n\n private onMessageModification(message: MyMessage, storage?: MessagesStorage | MessagesStorageKey) {\n this.setMessageToStorage(storage ?? this.getHistoryMessagesStorage(message.peerId), message);\n }\n\n public updateMessageContextForDeletion(message: MyMessage, deletion?: boolean, newMid?: number) {\n const context = this.getReferenceContextByMessage(message, true);\n if(!context) {\n return;\n }\n\n let deleted = false;\n const {searchStorages} = context;\n searchStorages?.forEach((searchStorage) => {\n if(!deletion && searchStorage.filterMessage(message)) {\n return;\n }\n\n deleted = true;\n\n searchStorage.history.delete(message.mid);\n if(searchStorage.count) {\n searchStorage.count = Math.max(0, searchStorage.count - 1);\n }\n\n searchStorages.delete(searchStorage);\n\n if(this.historyMaxIdSubscribed.has(searchStorage.key) && !newMid) {\n this.rootScope.dispatchEvent('history_delete_key', {historyKey: searchStorage.key, mid: message.mid});\n }\n });\n\n if(!deleted) {\n return;\n }\n\n if(searchStorages && !searchStorages.size) {\n delete context.searchStorages;\n }\n\n if(!Object.keys(context).length) {\n delete this.references[message.peerId + '_' + message.mid];\n }\n }\n\n public updateMessageContextForInserting(message: MyMessage) {\n const threadId = getMessageThreadId(message);\n const searchStorages = this.searchesStorage[message.peerId];\n if(!searchStorages) {\n return;\n }\n\n const context = this.getReferenceContextByMessage(message, true);\n const contextSearchStorages = context?.searchStorages;\n\n const searchStorages2 = filterUnique([searchStorages[undefined as number], searchStorages[threadId]].filter(Boolean));\n searchStorages2.forEach((searchStorages) => {\n for(const key in searchStorages) {\n const searchStorage = searchStorages[key];\n if(contextSearchStorages?.has(searchStorage)) {\n continue;\n }\n\n if(!searchStorage.filterMessage(message)) {\n continue;\n }\n\n const {first, last} = searchStorage.history;\n const {mid} = message;\n\n let inserted = true;\n if(first.isEnd(SliceEnd.Bottom) && first[0] < mid) {\n searchStorage.history.unshift(mid);\n } else if(last.isEnd(SliceEnd.Top) && last[last.length - 1] > mid) {\n searchStorage.history.push(mid);\n } else {\n const found = searchStorage.history.findSliceOffset(mid);\n const slice = found?.slice || [] as number[];\n const lowerIndex = slice.findIndex((_mid) => mid > _mid);\n const lowerValue = slice[lowerIndex];\n const higherValue = slice[lowerIndex - 1];\n if(lowerValue && higherValue) {\n slice.splice(lowerIndex, 0, mid);\n } else {\n inserted = false;\n this.log.error('cannot insert message for search filter', message, found, searchStorage);\n }\n }\n\n if(inserted) {\n searchStorage.onMidInsertion(mid);\n ++searchStorage.count;\n }\n\n this.log('inserting message for search filter', message.mid, key);\n }\n });\n }\n\n public updateMessageContext(message: MyMessage) {\n this.updateMessageContextForDeletion(message);\n this.updateMessageContextForInserting(message);\n }\n\n public modifyMessage(\n message: T,\n callback: (message: T) => T | void,\n storage?: false | MessagesStorage | MessagesStorageKey,\n local?: boolean\n ) {\n message = callback(message) || message;\n if(storage !== false) this.onMessageModification(message, storage);\n if(!local) this.setDialogToStateIfMessageIsTop(message);\n this.updateMessageContext(message);\n\n return message;\n }\n\n public mirrorAllMessages(port?: MessageEventSource) {\n const mirror: Mirrors['messages'] = {};\n [\n this.messagesStorageByPeerId,\n this.scheduledMessagesStorage\n ].forEach((storages) => {\n for(const key in storages) {\n const storage = storages[key];\n mirror[storage.key] = Object.fromEntries(storage.entries());\n }\n });\n\n MTProtoMessagePort.getInstance().invokeVoid('mirror', {\n name: 'messages',\n value: mirror\n }, port);\n }\n\n public getMessagesStorageByKey(key: MessagesStorageKey) {\n const s = key.split('_');\n const peerId: PeerId = +s[0];\n const type: MessagesStorageType = s[1] as any;\n return type === 'scheduled' ? this.getScheduledMessagesStorage(peerId) : this.getHistoryMessagesStorage(peerId);\n }\n\n public getMessageFromStorage(storage: MessagesStorage | MessagesStorageKey, mid: number) {\n storage = this.getMessagesStorage(storage);\n\n // * use global storage instead\n if(storage?.type === 'history' && isLegacyMessageId(mid)) {\n storage = this.getGlobalHistoryMessagesStorage();\n }\n\n return storage?.get(mid)/* || this.generateEmptyMessage(mid) */;\n }\n\n public setMessageToStorage(storage: MessagesStorage | MessagesStorageKey, message: MyMessage) {\n storage = this.getMessagesStorage(storage);\n\n const {mid} = message;\n // * global storage mirror\n if(\n storage?.type === 'history' &&\n isLegacyMessageId(mid) &&\n storage.peerId !== GLOBAL_HISTORY_PEER_ID\n ) {\n const globalStorage = this.getGlobalHistoryMessagesStorage();\n this.setMessageToStorage(globalStorage, message);\n }\n\n if(storage.type !== 'grouped') {\n MTProtoMessagePort.getInstance().invokeVoid('mirror', {\n name: 'messages',\n key: joinDeepPath(storage.key, mid),\n value: message\n });\n }\n\n return storage?.set(mid, message);\n }\n\n public deleteMessageFromStorage(storage: MessagesStorage, mid: number) {\n if(\n storage?.type === 'history' &&\n isLegacyMessageId(mid) &&\n storage.peerId !== GLOBAL_HISTORY_PEER_ID\n ) {\n const globalStorage = this.getGlobalHistoryMessagesStorage();\n this.deleteMessageFromStorage(globalStorage, mid);\n }\n\n if(storage.type !== 'grouped') {\n MTProtoMessagePort.getInstance().invokeVoid('mirror', {\n name: 'messages',\n key: joinDeepPath(storage.key, mid)\n });\n }\n\n return storage?.delete(mid);\n }\n\n private createMessageStorage(peerId: PeerId, type: MessagesStorageType) {\n const storage: MessagesStorage = new Map() as any;\n storage.peerId = peerId;\n storage.type = type;\n storage.key = `${peerId}_${type}`;\n\n /* let num = 0;\n Object.defineProperty(storage, 'num', {\n get: () => ++num,\n set: (_num: number) => num = _num,\n enumerable: false\n });\n\n Object.defineProperty(storage, 'generateIndex', {\n value: (message: any) => {\n if(message.index === undefined) {\n message.index = (message.date * 0x10000) + (storage.num & 0xFFFF);\n }\n },\n enumerable: false\n }); */\n\n return storage;\n }\n\n public getHistoryMessagesStorage(peerId: PeerId) {\n return this.messagesStorageByPeerId[peerId] ??= this.createMessageStorage(peerId, 'history');\n }\n\n public getGlobalHistoryMessagesStorage() {\n return this.getHistoryMessagesStorage(GLOBAL_HISTORY_PEER_ID);\n }\n\n public getMessagesStorage(key: MessagesStorageKey | MessagesStorage): MessagesStorage {\n if(typeof(key) === 'object') {\n return key;\n } else {\n return this.getMessagesStorageByKey(key);\n }\n }\n\n public getMessageById(messageId: number) {\n if(isLegacyMessageId(messageId)) {\n return this.getMessageFromStorage(this.getGlobalHistoryMessagesStorage(), messageId);\n }\n\n return this.generateEmptyMessage(messageId);\n\n // for(const peerId in this.messagesStorageByPeerId) {\n // if(this.appPeersManager.isChannel(peerId.toPeerId())) {\n // continue;\n // }\n\n // const message = this.messagesStorageByPeerId[peerId].get(messageId);\n // if(message) {\n // return message;\n // }\n // }\n\n // return this.getMessageFromStorage(null, messageId);\n }\n\n public getMessageByPeer(peerId: PeerId, messageId: number) {\n if(!peerId) {\n return this.getMessageById(messageId);\n }\n\n return this.getMessageFromStorage(this.getHistoryMessagesStorage(peerId), messageId);\n }\n\n public getMessagePeer(message: any): PeerId {\n const toId = message?.peer_id && this.appPeersManager.getPeerId(message.peer_id) || NULL_PEER_ID;\n\n return toId;\n }\n\n public getDialogOnly(peerId: PeerId) {\n return this.dialogsStorage.getDialogOnly(peerId);\n }\n\n public cantForwardDeleteMids(storageKey: MessagesStorageKey, mids: number[]) {\n const storage = this.getMessagesStorage(storageKey);\n let cantForward = !mids.length, cantDelete = !mids.length;\n for(const mid of mids) {\n const message = this.getMessageFromStorage(storage, mid);\n if(!cantForward) {\n cantForward = !this.canForward(message);\n }\n\n if(!cantDelete) {\n cantDelete = !this.canDeleteMessage(message);\n }\n\n if(cantForward && cantDelete) break;\n }\n\n return {cantForward, cantDelete};\n }\n\n public reloadConversationOrTopic(peerId: PeerId, threadId?: number) {\n if(threadId) {\n this.dialogsStorage.getForumTopicById(peerId, threadId);\n } else {\n this.reloadConversation(peerId);\n }\n }\n\n public reloadConversation(inputPeer?: PeerId | InputPeer): CancellablePromise;\n public reloadConversation(inputPeer: PeerId | InputPeer, useThrottled?: boolean) {\n const log = this.log.bindPrefix('reloadConversation');\n let promise: CancellablePromise;\n if(inputPeer !== undefined) {\n const peerId = this.appPeersManager.getPeerId(inputPeer);\n\n let obj = this.reloadConversationsPeers.get(peerId);\n if(obj && (useThrottled || !obj.sentRequest)) {\n promise = obj.promise;\n }\n\n log.warn({peerId, throttled: !!promise, sentRequest: obj?.sentRequest});\n\n if(promise) {\n return promise;\n }\n\n promise = deferredPromise();\n this.reloadConversationsPeers.set(peerId, obj = {\n inputDialogPeer: this.appPeersManager.getInputDialogPeerById(inputPeer),\n promise\n });\n }\n\n if(this.reloadConversationsPromise) {\n return promise || this.reloadConversationsPromise;\n }\n\n log('creating throttled promise');\n this.reloadConversationsPromise = pause(0).then(() => {\n const reloadConversationsPeers = new Map(this.reloadConversationsPeers);\n const inputDialogPeers = [...reloadConversationsPeers.values()].map((obj) => {\n obj.sentRequest = true;\n return obj.inputDialogPeer;\n });\n\n const fullfillLeft = () => {\n log('fullfilling left', reloadConversationsPeers);\n for(const [peerId, obj] of reloadConversationsPeers) {\n if(this.reloadConversationsPeers.get(peerId) === obj) {\n this.reloadConversationsPeers.delete(peerId);\n }\n\n obj.promise.resolve(undefined);\n }\n };\n\n const invoke = async() => {\n for(;;) {\n const result = await this.apiManager.invokeApi(\n 'messages.getPeerDialogs',\n {peers: inputDialogPeers},\n {floodMaxTimeout: Infinity}\n );\n const currentState = this.apiUpdatesManager.updatesState;\n const {state} = result;\n if(currentState.pts && currentState.pts !== state.pts) {\n this.log.warn('current pts is different, will try again', currentState.pts, state.pts);\n await pause(500);\n continue;\n }\n\n return result;\n }\n };\n\n return invoke().then((result) => {\n log('result', result);\n\n for(const [peerId, obj] of reloadConversationsPeers) {\n if(this.reloadConversationsPeers.get(peerId) === obj) {\n this.reloadConversationsPeers.delete(peerId);\n }\n }\n\n this.dialogsStorage.applyDialogs(result);\n\n result.dialogs.forEach((dialog) => {\n const peerId = dialog.peerId;\n if(!peerId) {\n return;\n }\n\n const obj = reloadConversationsPeers.get(peerId);\n obj.promise.resolve(dialog as Dialog);\n reloadConversationsPeers.delete(peerId);\n });\n }, (err) => {\n log.error(err);\n }).then(() => {\n fullfillLeft();\n\n this.reloadConversationsPromise = null;\n if(this.reloadConversationsPeers.size) {\n this.reloadConversation();\n }\n });\n });\n\n return promise || this.reloadConversationsPromise;\n }\n\n public doFlushHistory(\n peerId: PeerId,\n just_clear?: boolean,\n revoke?: boolean,\n threadOrSavedId?: number,\n participantPeerId?: PeerId\n ): Promise {\n const isSavedDialog = this.appPeersManager.isSavedDialog(peerId, threadOrSavedId);\n let promise: Promise;\n const processResult = (affectedHistory: MessagesAffectedHistory) => {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updatePts',\n pts: affectedHistory.pts,\n pts_count: affectedHistory.pts_count\n });\n\n if(!affectedHistory.offset) {\n let filterMessage: (message: MyMessage) => boolean;\n if(participantPeerId) {\n filterMessage = (message) => message.fromId === participantPeerId;\n } else if(isSavedDialog) {\n filterMessage = (message) => {\n const savedPeerId = (message as Message.message).saved_peer_id;\n if(savedPeerId) {\n return this.appPeersManager.getPeerId(savedPeerId) === threadOrSavedId;\n } else {\n return message.fromId === this.appPeersManager.peerId;\n }\n };\n }\n\n if(filterMessage) {\n const messagesStorage = this.getHistoryMessagesStorage(peerId);\n const deletedMids: number[] = [];\n for(const [mid, message] of messagesStorage) {\n if(filterMessage(message)) {\n deletedMids.push(mid);\n }\n }\n\n this.apiUpdatesManager.processLocalUpdate(peerId.isUser() ? {\n _: 'updateDeleteMessages',\n messages: deletedMids,\n pts: undefined,\n pts_count: undefined\n } : {\n _: 'updateDeleteChannelMessages',\n channel_id: peerId.toChatId(),\n messages: deletedMids,\n pts: undefined,\n pts_count: undefined\n });\n }\n\n return true;\n }\n\n return this.doFlushHistory(peerId, just_clear, revoke, threadOrSavedId);\n };\n\n if(participantPeerId) {\n promise = this.apiManager.invokeApiSingleProcess({\n method: 'channels.deleteParticipantHistory',\n params: {\n channel: this.appChatsManager.getChannelInput(peerId.toChatId()),\n participant: this.appPeersManager.getInputPeerById(participantPeerId)\n },\n processResult\n });\n } else if(!threadOrSavedId) {\n promise = this.apiManager.invokeApiSingleProcess({\n method: 'messages.deleteHistory',\n params: {\n just_clear,\n revoke,\n peer: this.appPeersManager.getInputPeerById(peerId),\n max_id: 0\n },\n processResult\n });\n } else if(isSavedDialog) {\n promise = this.apiManager.invokeApiSingleProcess({\n method: 'messages.deleteSavedHistory',\n params: {\n peer: this.appPeersManager.getInputPeerById(threadOrSavedId),\n max_id: 0\n },\n processResult\n });\n } else {\n promise = this.apiManager.invokeApiSingleProcess({\n method: 'channels.deleteTopicHistory',\n params: {\n channel: this.appChatsManager.getChannelInput(peerId.toChatId()),\n top_msg_id: getServerMessageId(threadOrSavedId)\n },\n processResult\n });\n }\n\n return promise;\n }\n\n public async flushHistory(\n peerId: PeerId,\n justClear?: boolean,\n revoke?: boolean,\n threadOrSavedId?: number\n ) {\n if(this.appPeersManager.isChannel(peerId) && !threadOrSavedId) {\n const promise = this.getHistory({\n peerId,\n offsetId: 0,\n limit: 1\n });\n\n const historyResult = await promise;\n\n const channelId = peerId.toChatId();\n const maxId = historyResult.history[0] || 0;\n return this.apiManager.invokeApiSingle('channels.deleteHistory', {\n channel: this.appChatsManager.getChannelInput(channelId),\n max_id: getServerMessageId(maxId)\n }).then((bool) => {\n if(bool) {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateChannelAvailableMessages',\n channel_id: channelId,\n available_min_id: maxId\n });\n }\n\n return bool;\n });\n }\n\n return this.doFlushHistory(peerId, justClear, revoke, threadOrSavedId).then(() => {\n if(!threadOrSavedId) {\n this.flushStoragesByPeerId(peerId);\n }\n\n if(justClear) {\n this.rootScope.dispatchEvent('dialog_flush', {peerId, dialog: this.getDialogOnly(peerId)});\n } else {\n const key = this.getTypingKey(peerId, threadOrSavedId);\n delete this.notificationsToHandle[key];\n delete this.typings[key];\n\n if(!threadOrSavedId) {\n const c = this.reloadConversationsPeers.get(peerId);\n if(c) {\n this.reloadConversationsPeers.delete(peerId);\n c.promise.resolve(undefined);\n }\n }\n\n this.dialogsStorage.dropDialogOnDeletion(peerId, threadOrSavedId);\n }\n });\n }\n\n private flushStoragesByPeerId(peerId: PeerId) {\n [\n this.historiesStorage,\n this.threadsStorage,\n this.searchesStorage,\n this.pendingAfterMsgs,\n this.pendingTopMsgs\n ].forEach((s) => {\n delete s[peerId];\n });\n\n for(const key in this.pinnedMessages) {\n if(+key === peerId || key.startsWith(peerId + '_')) {\n delete this.pinnedMessages[key];\n }\n }\n\n const needSingleMessages = this.needSingleMessages.get(peerId);\n if(needSingleMessages) {\n for(const [mid, promise] of needSingleMessages) {\n promise.resolve(this.generateEmptyMessage(mid));\n }\n\n needSingleMessages.clear();\n }\n\n [\n this.messagesStorageByPeerId,\n this.scheduledMessagesStorage\n ].forEach((s) => {\n const ss = s[peerId];\n if(!ss) {\n return;\n }\n\n if(ss.type === 'history') {\n ss.forEach((message, mid) => {\n delete this.references[peerId + '_' + mid];\n });\n\n if(!this.appPeersManager.isChannel(peerId)) {\n const globalStorage = this.getGlobalHistoryMessagesStorage();\n ss.forEach((message, mid) => {\n this.deleteMessageFromStorage(globalStorage, mid);\n });\n }\n }\n\n ss.clear();\n delete s[peerId];\n });\n\n this.dialogsStorage.flushForumTopicsCache(peerId);\n }\n\n public hidePinnedMessages(peerId: PeerId) {\n return Promise.all([\n this.appStateManager.getState(),\n this.getPinnedMessage(peerId)\n ])\n .then(([state, pinned]) => {\n state.hiddenPinnedMessages[peerId] = pinned.maxId;\n this.rootScope.dispatchEvent('peer_pinned_hidden', {peerId, maxId: pinned.maxId});\n });\n }\n\n public getPinnedMessagesKey(peerId: PeerId, threadId?: number) {\n return peerId + (threadId ? '_' + threadId : '');\n }\n\n public getPinnedMessage(peerId: PeerId, threadId?: number) {\n const p = this.pinnedMessages[this.getPinnedMessagesKey(peerId, threadId)] ??= {};\n if(p.promise) return p.promise;\n else if(p.maxId) return Promise.resolve(p);\n\n return p.promise = Promise.resolve(this.getHistory({\n peerId,\n inputFilter: {_: 'inputMessagesFilterPinned'},\n offsetId: 0,\n limit: 1,\n threadId\n })).then((result) => {\n p.count = result.count;\n p.maxId = result.history[0];\n return p;\n }).finally(() => {\n delete p.promise;\n });\n }\n\n public getPinnedMessagesCount(peerId: PeerId, threadId?: number) {\n return this.pinnedMessages[this.getPinnedMessagesKey(peerId, threadId)]?.count;\n }\n\n public getPinnedMessagesMaxId(peerId: PeerId, threadId?: number) {\n return this.pinnedMessages[this.getPinnedMessagesKey(peerId, threadId)]?.maxId;\n }\n\n public updatePinnedMessage(peerId: PeerId, mid: number, unpin?: boolean, silent?: boolean, pm_oneside?: boolean) {\n return this.apiManager.invokeApi('messages.updatePinnedMessage', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n unpin,\n silent,\n pm_oneside,\n id: getServerMessageId(mid)\n }).then((updates) => {\n // this.log('pinned updates:', updates);\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n\n public unpinAllMessages(peerId: PeerId): Promise {\n return this.apiManager.invokeApiSingle('messages.unpinAllMessages', {\n peer: this.appPeersManager.getInputPeerById(peerId)\n }).then((affectedHistory) => {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updatePts',\n pts: affectedHistory.pts,\n pts_count: affectedHistory.pts_count\n });\n\n if(!affectedHistory.offset) {\n const storage = this.getHistoryMessagesStorage(peerId);\n storage.forEach((message) => {\n if((message as Message.message).pFlags.pinned) {\n delete (message as Message.message).pFlags.pinned;\n }\n });\n\n this.rootScope.dispatchEvent('peer_pinned_messages', {peerId, unpinAll: true});\n delete this.pinnedMessages[this.getPinnedMessagesKey(peerId)];\n\n return true;\n }\n\n return this.unpinAllMessages(peerId);\n });\n }\n\n public getGroupedText(grouped_id: string) {\n const group = this.groupedMessagesStorage[grouped_id];\n return getGroupedText(Array.from(group.values()) as Message.message[]);\n }\n\n public getGroupsFirstMessage(message: Message.message) {\n if(!message?.grouped_id) return message;\n\n const storage = this.groupedMessagesStorage[message.grouped_id];\n let minMid = Number.MAX_SAFE_INTEGER;\n for(const [mid, message] of storage) {\n if(message.mid < minMid) {\n minMid = message.mid;\n }\n }\n\n return this.getMessageFromStorage(storage, minMid) as Message.message;\n }\n\n public getMidsByGroupedId(groupedId: string, sort: 'asc' | 'desc' = 'asc') {\n return getObjectKeysAndSort(this.groupedMessagesStorage[groupedId], sort);\n }\n\n public getMessagesByGroupedId(groupedId: string) {\n const mids = this.getMidsByGroupedId(groupedId, 'asc');\n const storage = this.groupedMessagesStorage[groupedId];\n return mids.map((mid) => this.getMessageFromStorage(storage, mid) as Message.message);\n }\n\n public getMidsByMessage(message: Message) {\n if(!message) return [];\n else if((message as Message.message).grouped_id) return this.getMidsByGroupedId((message as Message.message).grouped_id);\n else return [message.mid];\n }\n\n public filterMessages(message: MyMessage, verify: (message: MyMessage) => boolean) {\n const out: MyMessage[] = [];\n if((message as Message.message).grouped_id) {\n const storage = this.groupedMessagesStorage[(message as Message.message).grouped_id];\n for(const [mid, message] of storage) {\n if(verify(message)) {\n out.push(message);\n }\n }\n } else {\n if(verify(message)) {\n out.push(message);\n }\n }\n\n return out;\n }\n\n public generateTempMessageId(peerId: PeerId, topMessage?: number, canBeOld?: boolean) {\n if(!topMessage) {\n const dialog = this.getDialogOnly(peerId);\n const historyStorage = this.historiesStorage[peerId];\n topMessage = (dialog?.top_message ?? historyStorage?.maxId) || 0;\n }\n\n const tempMid = this.tempMids[peerId];\n if(tempMid && tempMid > topMessage && !canBeOld) {\n topMessage = tempMid;\n }\n\n const channelId = this.appPeersManager.isChannel(peerId) ? peerId.toChatId() : undefined;\n const newMid = this.appMessagesIdsManager.generateTempMessageId(topMessage, channelId);\n if(!tempMid || newMid > tempMid) {\n this.tempMids[peerId] = newMid;\n }\n\n return newMid;\n }\n\n public setMessageUnreadByDialog(\n message: MyMessage,\n dialog: AnyDialog = this.getDialogOnly(message.peerId)\n ) {\n if(isSavedDialog(dialog)) {\n return;\n }\n\n if(dialog && message.mid) {\n if(message.mid > dialog[message.pFlags.out ?\n 'read_outbox_max_id' :\n 'read_inbox_max_id']) {\n message.pFlags.unread = true;\n }\n }\n }\n\n public saveMessage(message: Message, options: Partial<{\n storage: MessagesStorage,\n isScheduled: true,\n isOutgoing: true,\n // isNew: boolean, // * new - from update\n }> = {}) {\n if(!message || message._ === 'messageEmpty') {\n return;\n }\n\n message.pFlags ??= {};\n\n // * exclude from state\n // defineNotNumerableProperties(message, ['rReply', 'mid', 'savedFrom', 'fwdFromId', 'fromId', 'peerId', 'reply_to_mid', 'viaBotId']);\n\n const overwriting = !!message.peerId;\n const peerId = this.getMessagePeer(message);\n const storage = options.storage || this.getHistoryMessagesStorage(peerId);\n const isChannel = message.peer_id._ === 'peerChannel';\n const isBroadcast = isChannel && this.appChatsManager.isBroadcast(peerId.toChatId());\n const isMessage = message._ === 'message';\n const channelId = isChannel ? peerId.toChatId() : undefined;\n\n if(options.isOutgoing) {\n message.pFlags.is_outgoing = true;\n }\n\n const mid = this.appMessagesIdsManager.generateMessageId(message.id, channelId);\n message.mid = mid;\n\n if(isMessage) {\n if(options.isScheduled) {\n message.pFlags.is_scheduled = true;\n }\n\n if(message.grouped_id) {\n const storage = this.groupedMessagesStorage[message.grouped_id] ??= this.createMessageStorage(peerId, 'grouped');\n this.setMessageToStorage(storage, message);\n }\n\n if(message.via_bot_id) {\n // ! WARNING\n message.viaBotId = message.via_bot_id as any;\n }\n }\n\n const mediaContext: ReferenceContext = {\n type: 'message',\n peerId,\n messageId: mid\n };\n\n // this.log(dT(), 'msg unread', mid, apiMessage.pFlags.out, dialog && dialog[apiMessage.pFlags.out ? 'read_outbox_max_id' : 'read_inbox_max_id'])\n\n const replyTo = message.reply_to;\n if(replyTo) {\n if(replyTo._ === 'messageReplyHeader') {\n const replyToChannelId = (replyTo.reply_to_peer_id as Peer.peerChannel)?.channel_id || channelId;\n\n if(replyTo.reply_to_msg_id) {\n replyTo.reply_to_msg_id = message.reply_to_mid = this.appMessagesIdsManager.generateMessageId(replyTo.reply_to_msg_id, replyToChannelId);\n }\n\n if(replyTo.reply_to_top_id) {\n replyTo.reply_to_top_id = this.appMessagesIdsManager.generateMessageId(replyTo.reply_to_top_id, replyToChannelId);\n }\n\n this.saveMessageMedia(replyTo, mediaContext, options.isScheduled);\n }\n }\n\n const replies = isMessage && message.replies;\n if(replies) {\n if(replies.max_id) replies.max_id = this.appMessagesIdsManager.generateMessageId(replies.max_id, replies.channel_id);\n if(replies.read_max_id) replies.read_max_id = this.appMessagesIdsManager.generateMessageId(replies.read_max_id, replies.channel_id);\n }\n\n if(!overwriting) {\n message.date -= this.timeManager.getServerTimeOffset();\n }\n\n // storage.generateIndex(message);\n const myId = this.appPeersManager.peerId;\n\n const fwdHeader = isMessage && (message as Message.message).fwd_from;\n\n message.peerId = peerId;\n if(peerId === myId/* && !message.from_id && !message.fwd_from */) {\n if(isMessage && !message.saved_peer_id) {\n let peerId: PeerId;\n if(!fwdHeader) {\n peerId = myId;\n } else if(fwdHeader.saved_from_peer) {\n message.saved_peer_id = fwdHeader.saved_from_peer;\n } else if(fwdHeader.from_id) {\n peerId = myId;\n } else if(fwdHeader.from_name) {\n peerId = HIDDEN_PEER_ID;\n } else {\n peerId = myId;\n }\n\n message.saved_peer_id ||= this.appPeersManager.getOutputPeer(peerId);\n }\n\n const fromId = (fwdHeader?.saved_from_id/* && (this.appPeersManager.getPeerId(fwdHeader.saved_from_id) !== myId && fwdHeader.saved_from_id) */) || fwdHeader?.from_id;\n message.fromId = fwdHeader ? (fromId && !getFwdFromName(fwdHeader) ? this.appPeersManager.getPeerId(fromId) : NULL_PEER_ID) : myId;\n } else {\n // message.fromId = message.pFlags.post || (!message.pFlags.out && !message.from_id) ? peerId : appPeersManager.getPeerId(message.from_id);\n message.fromId = message.pFlags.post || !message.from_id ? peerId : this.appPeersManager.getPeerId(message.from_id);\n }\n\n this.setMessageUnreadByDialog(message);\n\n if(fwdHeader) {\n // if(peerId === myID) {\n if(fwdHeader.saved_from_msg_id) fwdHeader.saved_from_msg_id = this.appMessagesIdsManager.generateMessageId(fwdHeader.saved_from_msg_id, (fwdHeader.saved_from_peer as Peer.peerChannel).channel_id);\n if(fwdHeader.channel_post) fwdHeader.channel_post = this.appMessagesIdsManager.generateMessageId(fwdHeader.channel_post, (fwdHeader.from_id as Peer.peerChannel).channel_id);\n\n const peer = fwdHeader.saved_from_peer || fwdHeader.from_id;\n const msgId = fwdHeader.saved_from_msg_id || fwdHeader.channel_post;\n if(peer && msgId) {\n const savedFromPeerId = this.appPeersManager.getPeerId(peer);\n const savedFromMid = this.appMessagesIdsManager.generateMessageId(msgId, (peer as Peer.peerChannel).channel_id);\n message.savedFrom = savedFromPeerId + '_' + savedFromMid;\n }\n\n /* if(peerId.isAnyChat() || peerId === myID) {\n message.fromId = appPeersManager.getPeerID(!message.from_id || deepEqual(message.from_id, fwdHeader.from_id) ? fwdHeader.from_id : message.from_id);\n } */\n /* } else {\n apiMessage.fwdPostID = fwdHeader.channel_post;\n } */\n\n message.fwdFromId = this.appPeersManager.getPeerId(fwdHeader.from_id);\n\n if(!overwriting) {\n fwdHeader.date -= this.timeManager.getServerTimeOffset();\n }\n }\n\n /* if(isMessage) {\n const entities = message.entities;\n if(entities && entities.find((entity) => entity._ === 'messageEntitySpoiler')) {\n message.media = {_: 'messageMediaUnsupported'};\n }\n } */\n\n const unsupported = this.saveMessageMedia(message, mediaContext, options.isScheduled);\n\n // if(isMessage && !unsupported && message.entities) {\n // unsupported = message.entities.some((entity) => entity._ === 'messageEntityCustomEmoji');\n // }\n\n if(isMessage && unsupported) {\n message.media = {_: 'messageMediaUnsupported'};\n message.message = '';\n delete message.entities;\n delete message.totalEntities;\n }\n\n if(!isMessage && message.action) {\n const action = message.action as MessageAction;\n const suffix = message.fromId === this.appUsersManager.getSelf().id ? 'You' : '';\n let migrateFrom: PeerId, migrateTo: PeerId;\n\n if((action as MessageAction.messageActionChatEditPhoto).photo) {\n (action as MessageAction.messageActionChatEditPhoto).photo = this.appPhotosManager.savePhoto((action as MessageAction.messageActionChatEditPhoto).photo, mediaContext);\n }\n\n if((action as any).document) {\n (action as any).document = this.appDocsManager.saveDoc((action as any).photo, mediaContext);\n }\n\n switch(action._) {\n // case 'messageActionChannelEditPhoto':\n case 'messageActionChatEditPhoto':\n // action.photo = appPhotosManager.savePhoto(action.photo, mediaContext);\n if((action.photo as Photo.photo)?.video_sizes) {\n // @ts-ignore\n action._ = isBroadcast ? 'messageActionChannelEditVideo' : 'messageActionChatEditVideo';\n } else {\n if(isBroadcast) { // ! messageActionChannelEditPhoto не существует в принципе, это используется для перевода.\n // @ts-ignore\n action._ = 'messageActionChannelEditPhoto';\n }\n }\n break;\n\n case 'messageActionGroupCall': {\n // assumeType(action);\n\n this.appGroupCallsManager.saveGroupCall(action.call);\n\n let type: string;\n if(action.duration === undefined) {\n type = 'started';\n } else {\n type = 'ended'\n }\n\n if(!isBroadcast) {\n type += '_by' + suffix;\n }\n\n // @ts-ignore\n action.type = type;\n\n break;\n }\n\n case 'messageActionChatEditTitle':\n /* if(options.isNew) {\n const chat = appChatsManager.getChat(peerId.toChatId());\n chat.title = action.title;\n appChatsManager.saveApiChat(chat, true);\n } */\n\n if(isBroadcast) {\n // @ts-ignore\n action._ = 'messageActionChannelEditTitle';\n }\n break;\n\n case 'messageActionChatDeletePhoto':\n if(isBroadcast) {\n // @ts-ignore\n action._ = 'messageActionChannelDeletePhoto';\n }\n break;\n\n case 'messageActionChatAddUser':\n if(action.users.length === 1) {\n // @ts-ignore\n action.user_id = action.users[0];\n // @ts-ignore\n if(message.fromId === action.user_id) {\n if(isChannel) {\n // @ts-ignore\n action._ = 'messageActionChatJoined' + suffix;\n } else {\n // @ts-ignore\n action._ = 'messageActionChatReturn' + suffix;\n }\n }\n } else if(action.users.length > 1) {\n // @ts-ignore\n action._ = 'messageActionChatAddUsers';\n }\n break;\n\n case 'messageActionChatDeleteUser':\n if(message.fromId === action.user_id) {\n // @ts-ignore\n action._ = 'messageActionChatLeave' + suffix;\n }\n break;\n\n case 'messageActionChannelMigrateFrom':\n migrateFrom = action.chat_id.toPeerId(true);\n migrateTo = peerId;\n break\n\n case 'messageActionChatMigrateTo':\n migrateFrom = peerId;\n migrateTo = action.channel_id.toPeerId(true);\n break;\n\n case 'messageActionHistoryClear':\n // apiMessage.deleted = true;\n message.clear_history = true;\n delete message.pFlags.out;\n delete message.pFlags.unread;\n break;\n\n case 'messageActionPhoneCall':\n // @ts-ignore\n action.type =\n (action.pFlags.video ? 'video_' : '') +\n (action.duration !== undefined ? (message.pFlags.out ? 'out_' : 'in_') : '') +\n (\n action.duration !== undefined ? 'ok' : (\n action.reason._ === 'phoneCallDiscardReasonMissed' ?\n 'missed' :\n 'cancelled'\n )\n );\n break;\n }\n\n if(migrateFrom &&\n migrateTo &&\n !this.getMigration(migrateFrom)) {\n this.migrateChecks(migrateFrom, migrateTo);\n }\n }\n\n if(isMessage && message.message.length && !message.totalEntities) {\n this.wrapMessageEntities(message);\n }\n\n this.setMessageToStorage(storage, message);\n\n return message;\n }\n\n public saveMessages(messages: any[], options: Partial<{\n storage: MessagesStorage,\n isScheduled: true,\n isOutgoing: true,\n // isNew: boolean, // * new - from update\n }> = {}): (Message.message | Message.messageService)[] {\n if(!messages || (messages as any).saved) return messages;\n (messages as any).saved = true;\n messages.forEach((message, idx, arr) => {\n arr[idx] = this.saveMessage(message, options);\n });\n\n return messages;\n }\n\n public saveMessageMedia(message: {\n media?: MessageMedia,\n reply_media?: MessageMedia,\n peerId?: PeerId,\n mid?: number\n }, mediaContext: ReferenceContext, isScheduled?: boolean) {\n const key = 'media' in message ? 'media' : 'reply_media';\n const media = message[key];\n if(!media) {\n return;\n }\n\n let unsupported = false;\n\n switch(media._) {\n case 'messageMediaEmpty': {\n delete message[key];\n break;\n }\n\n case 'messageMediaPhoto': {\n if(media.ttl_seconds) {\n unsupported = true;\n } else {\n media.photo = this.appPhotosManager.savePhoto(media.photo, mediaContext);\n }\n\n if(!(media as MessageMedia.messageMediaPhoto).photo) { // * found this bug on test DC\n delete message[key];\n }\n\n break;\n }\n\n case 'messageMediaPoll': {\n const result = this.appPollsManager.savePoll(media.poll, media.results, message.peerId && message as Message.message);\n media.poll = result.poll;\n media.results = result.results;\n break;\n }\n\n case 'messageMediaDocument': {\n if(media.ttl_seconds) {\n unsupported = true;\n } else {\n const originalDoc = media.document;\n media.document = this.appDocsManager.saveDoc(originalDoc, mediaContext); // 11.04.2020 warning\n media.alt_document &&= this.appDocsManager.saveDoc(media.alt_document, mediaContext); // 11.04.2020 warning\n\n if(!media.document && originalDoc._ !== 'documentEmpty') {\n unsupported = true;\n }\n }\n\n break;\n }\n\n case 'messageMediaWebPage': {\n const messageKey = message.peerId ? this.appWebPagesManager.getMessageKeyForPendingWebPage(message.peerId, message.mid, isScheduled) : undefined;\n media.webpage = this.appWebPagesManager.saveWebPage(media.webpage, messageKey, mediaContext);\n\n if(!media.webpage) {\n delete message[key];\n }\n\n break;\n }\n\n /* case 'messageMediaGame':\n AppGamesManager.saveGame(apiMessage.media.game, apiMessage.mid, mediaContext);\n apiMessage.media.handleMessage = true;\n break; */\n\n case 'messageMediaInvoice': {\n media.photo = this.appWebDocsManager.saveWebDocument(media.photo);\n const extendedMedia = media.extended_media;\n if(extendedMedia?._ === 'messageExtendedMedia') {\n const extendedMediaMedia = extendedMedia.media;\n (extendedMediaMedia as MessageMedia.messageMediaPhoto).photo = this.appPhotosManager.savePhoto((extendedMediaMedia as MessageMedia.messageMediaPhoto).photo, mediaContext);\n (extendedMediaMedia as MessageMedia.messageMediaDocument).document = this.appDocsManager.saveDoc((extendedMediaMedia as MessageMedia.messageMediaDocument).document, mediaContext);\n }\n break;\n }\n\n case 'messageMediaStory': {\n const cache = this.appStoriesManager.getPeerStoriesCache(this.appPeersManager.getPeerId(media.peer));\n media.story = this.appStoriesManager.saveStoryItems([media.story], cache)[0];\n break;\n }\n\n case 'messageMediaGiveawayResults': {\n media.launch_msg_id = this.appMessagesIdsManager.generateMessageId(media.launch_msg_id, media.channel_id);\n break;\n }\n\n case 'messageMediaPaidMedia': {\n media.extended_media.forEach((extendedMedia) => {\n if(extendedMedia._ === 'messageExtendedMedia') {\n this.saveMessageMedia(extendedMedia, mediaContext, isScheduled);\n }\n });\n break;\n }\n\n case 'messageMediaUnsupported': {\n unsupported = true;\n break;\n }\n }\n\n return unsupported;\n }\n\n public saveApiResult(result: Partial<{chats: Chat[], users: User[], messages: Message[]}>) {\n this.appPeersManager.saveApiPeers(result);\n this.saveMessages(result.messages);\n }\n\n public async getFirstMessageToEdit(peerId: PeerId, threadId?: number) {\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n const slice = historyStorage.history.slice;\n if(slice.isEnd(SliceEnd.Bottom) && slice.length) {\n let goodMessage: Message.message | Message.messageService;\n const myPeerId = this.appPeersManager.peerId;\n for(const mid of slice) {\n const message = this.getMessageByPeer(peerId, mid);\n const good = myPeerId === peerId ? message.fromId === myPeerId : message.pFlags.out;\n\n if(good) {\n if(await this.canEditMessage(message, 'text')) {\n goodMessage = message;\n break;\n }\n\n // * this check will allow editing only last message\n // break;\n }\n }\n\n return goodMessage;\n }\n }\n\n public wrapMessageEntities(_message: {message: string, entities?: MessageEntity[], totalEntities?: MessageEntity[]} | TextWithEntities) {\n if('message' in _message) {\n const {message, totalEntities} = wrapMessageEntities(_message.message, _message.entities);\n _message.message = message;\n _message.totalEntities = totalEntities;\n } else {\n const {message, totalEntities} = wrapMessageEntities(_message.text, _message.entities);\n _message.text = message;\n _message.entities = totalEntities;\n }\n }\n\n public reportMessages(peerId: PeerId, mids: number[], reason: ReportReason['_'], message?: string) {\n return this.apiManager.invokeApiSingle('messages.report', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: mids.map((mid) => getServerMessageId(mid)),\n reason: {\n _: reason\n },\n message\n });\n }\n\n public async unblockBot(botId: BotId) {\n if(await this.appProfileManager.isUserBlocked(botId)) {\n await this.appUsersManager.toggleBlock(botId.toPeerId(false), false);\n }\n }\n\n public async startBot(botId: BotId, chatId?: ChatId, startParam?: string) {\n const peerId = chatId ? chatId.toPeerId(true) : botId.toPeerId();\n if(!chatId) {\n await this.unblockBot(botId);\n }\n\n if(startParam) {\n const randomId = randomLong();\n\n return this.apiManager.invokeApi('messages.startBot', {\n bot: this.appUsersManager.getUserInput(botId),\n peer: this.appPeersManager.getInputPeerById(peerId),\n random_id: randomId,\n start_param: startParam\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n\n const str = '/start';\n if(chatId) {\n let promise: Promise;\n if(this.appChatsManager.isChannel(chatId)) {\n promise = this.appChatsManager.inviteToChannel(chatId, [botId]);\n } else {\n promise = this.appChatsManager.addChatUser(chatId, botId, 0);\n }\n\n return promise.catch((error: ApiError) => {\n if(error?.type == 'USER_ALREADY_PARTICIPANT') {\n error.handled = true;\n return;\n }\n\n throw error;\n }).then(() => {\n return this.sendText({\n peerId,\n text: str + '@' + this.appPeersManager.getPeerUsername(botId.toPeerId())\n });\n });\n }\n\n return this.sendText({\n peerId,\n text: str\n });\n }\n\n public editPeerFolders(peerIds: PeerId[], folderId: number) {\n this.apiManager.invokeApi('folders.editPeerFolders', {\n folder_peers: peerIds.map((peerId) => {\n return {\n _: 'inputFolderPeer',\n peer: this.appPeersManager.getInputPeerById(peerId),\n folder_id: folderId\n };\n })\n }).then((updates) => {\n const peerId = peerIds[0];\n if(peerIds.length === 1 && folderId === FOLDER_ID_ALL) {\n this.appProfileManager.refreshPeerSettingsIfNeeded(peerId);\n }\n\n // this.log('editPeerFolders updates:', updates);\n this.apiUpdatesManager.processUpdateMessage(updates); // WARNING! возможно тут нужно добавлять channelId, и вызывать апдейт для каждого канала отдельно\n });\n }\n\n public getFilter(filterId: number) {\n return this.filtersStorage.getFilter(filterId);\n }\n\n public async toggleDialogPin(options: {\n peerId: PeerId,\n filterId?: number,\n topicOrSavedId?: number\n }) {\n let {peerId, topicOrSavedId, filterId} = options;\n\n if(filterId !== undefined && !REAL_FOLDERS.has(filterId)) {\n return this.filtersStorage.toggleDialogPin(peerId, filterId);\n }\n\n const dialog = this.dialogsStorage.getAnyDialog(peerId, topicOrSavedId);\n if(!dialog) throw undefined;\n\n const isSaved = isSavedDialog(dialog);\n const isTopic = isForumTopic(dialog);\n const _isDialog = isDialog(dialog);\n\n filterId ??= this.dialogsStorage.getDialogFilterId(dialog);\n const pinned = dialog.pFlags?.pinned ? undefined : true;\n\n if(pinned) {\n let limitType: ApiLimitType;\n if(isSaved) {\n limitType = 'savedPin';\n } else if(isTopic) {\n limitType = 'topicPin';\n } else {\n limitType = filterId === FOLDER_ID_ARCHIVE ? 'folderPin' : 'pin';\n }\n\n const max = await this.apiManager.getLimit(limitType);\n if(this.dialogsStorage.getPinnedOrders(filterId).length >= max) {\n throw makeError(!_isDialog ? 'PINNED_TOO_MUCH' : 'PINNED_DIALOGS_TOO_MUCH');\n }\n }\n\n if(isTopic) {\n return this.appChatsManager.updatePinnedForumTopic(peerId.toChatId(), topicOrSavedId, pinned);\n }\n\n let promise: Promise;\n if(isSaved) {\n promise = this.apiManager.invokeApi('messages.toggleSavedDialogPin', {\n peer: this.appPeersManager.getInputDialogPeerById(topicOrSavedId),\n pinned\n });\n } else {\n promise = this.apiManager.invokeApi('messages.toggleDialogPin', {\n peer: this.appPeersManager.getInputDialogPeerById(peerId),\n pinned\n });\n }\n\n return promise.then(() => {\n const pFlags: (Update.updateDialogPinned | Update.updateSavedDialogPinned)['pFlags'] = pinned ? {pinned} : {};\n const dialogPeer = this.appPeersManager.getDialogPeer(isSaved ? topicOrSavedId : peerId);\n this.apiUpdatesManager.saveUpdate(isSaved ? {\n _: 'updateSavedDialogPinned',\n peer: dialogPeer,\n pFlags\n } : {\n _: 'updateDialogPinned',\n peer: dialogPeer,\n folder_id: filterId,\n pFlags\n });\n });\n }\n\n public async markDialogUnread(peerId: PeerId, read?: boolean) {\n const dialog = this.getDialogOnly(peerId);\n if(!dialog) return Promise.reject();\n\n if(\n this.appPeersManager.isForum(peerId) &&\n !dialog.pFlags.view_forum_as_messages &&\n (read || await this.dialogsStorage.getForumUnreadCount(peerId))\n ) {\n const folder = this.dialogsStorage.getFolder(peerId);\n for(const topicId of folder.unreadPeerIds) {\n const forumTopic = this.dialogsStorage.getForumTopic(peerId, topicId);\n this.readHistory(peerId, forumTopic.top_message, topicId, true);\n }\n return;\n }\n\n const unread = read || dialog.pFlags?.unread_mark ? undefined : true;\n\n if(!unread && dialog.unread_count) {\n const promise = this.readHistory(peerId, dialog.top_message, undefined, true);\n if(!dialog.pFlags.unread_mark) {\n return promise;\n }\n }\n\n return this.apiManager.invokeApi('messages.markDialogUnread', {\n peer: this.appPeersManager.getInputDialogPeerById(peerId),\n unread\n }).then(() => {\n const pFlags: Update.updateDialogUnreadMark['pFlags'] = unread ? {unread} : {};\n this.onUpdateDialogUnreadMark({\n _: 'updateDialogUnreadMark',\n peer: this.appPeersManager.getDialogPeer(peerId),\n pFlags\n });\n });\n }\n\n public migrateChecks(migrateFrom: PeerId, migrateTo: PeerId) {\n if(!this.getMigration(migrateFrom) && this.appChatsManager.hasChat(migrateTo.toChatId())) {\n const fromChat = this.appChatsManager.getChat(migrateFrom.toChatId()) as Chat.chat;\n if(fromChat?.migrated_to && (fromChat.migrated_to as InputChannel.inputChannel).channel_id === migrateTo.toChatId()) {\n this.migratedFromTo[migrateFrom] = migrateTo;\n this.migratedToFrom[migrateTo] = migrateFrom;\n\n this.rootScope.dispatchEvent('dialog_migrate', {migrateFrom, migrateTo});\n\n this.dialogsStorage.dropDialogWithEvent(migrateFrom);\n }\n }\n }\n\n private canMessageBeEdited(message: Message, kind: 'text' | 'poll') {\n if((message as Message.message)?.pFlags?.is_outgoing) {\n return false;\n }\n\n const goodMedias = [\n 'messageMediaPhoto',\n 'messageMediaDocument',\n 'messageMediaWebPage'\n ];\n\n if(kind === 'poll') {\n goodMedias.push('messageMediaPoll');\n }\n\n if(!message ||\n message._ !== 'message' ||\n message.fwd_from ||\n message.via_bot_id ||\n message.media && goodMedias.indexOf(message.media._) === -1 ||\n message.fromId && this.appUsersManager.isBot(message.fromId)) {\n return false;\n }\n\n if(message.media?._ === 'messageMediaDocument' &&\n ((message.media.document as Document.document).sticker || (message.media.document as Document.document).type === 'round')) {\n return false;\n }\n\n return true;\n }\n\n public async canEditMessage(message: Message.message | Message.messageService, kind: 'text' | 'poll' = 'text') {\n if(!message || !this.canMessageBeEdited(message, kind)) {\n return false;\n }\n\n // * second rule for saved messages, because there is no 'out' flag\n if(/* message.pFlags.out || */this.getMessagePeer(message) === this.appUsersManager.getSelf().id) {\n return true;\n }\n\n const {peerId} = message;\n\n const canEditMessageInPeer = this.appPeersManager.isBroadcast(peerId) ?\n this.appChatsManager.hasRights(peerId.toChatId(), 'edit_messages') :\n (\n peerId.isAnyChat() && kind === 'text' ?\n !this.getMigration(message.peerId)?.next && (this.appChatsManager.hasRights(peerId.toChatId(), 'send_plain') || this.appChatsManager.hasRights(peerId.toChatId(), 'send_media')) :\n true\n ) && message.pFlags.out;\n\n if(\n !canEditMessageInPeer || (\n message.peer_id._ !== 'peerChannel' &&\n message.date < (tsNow(true) - (await this.apiManager.getConfig()).edit_time_limit) &&\n (message as Message.message).media?._ !== 'messageMediaPoll'\n )\n ) {\n return false;\n }\n\n return true;\n }\n\n public canDeleteMessage(message: MyMessage) {\n return message && (\n message.peerId.isUser() ||\n message.pFlags.out ||\n this.appChatsManager.getChat(message.peerId.toChatId())._ === 'chat' ||\n this.appChatsManager.hasRights(message.peerId.toChatId(), 'delete_messages')\n ) && (!message.pFlags.is_outgoing || !!message.error);\n }\n\n public getReplyKeyboard(peerId: PeerId) {\n return this.getHistoryStorage(peerId).replyMarkup;\n }\n\n public mergeReplyKeyboard(historyStorage: HistoryStorage, message: Message.messageService | Message.message) {\n // this.log('merge', message.mid, message.reply_markup, historyStorage.reply_markup)\n if(!message) {\n return false;\n }\n\n const messageReplyMarkup = (message as Message.message).reply_markup;\n if(!messageReplyMarkup &&\n !message.pFlags?.out &&\n !(message as Message.messageService).action) {\n return false;\n }\n\n if(messageReplyMarkup?._ === 'replyInlineMarkup') {\n return false;\n }\n\n const lastReplyMarkup = historyStorage.replyMarkup;\n if(messageReplyMarkup) {\n if(lastReplyMarkup && lastReplyMarkup.mid >= message.mid) {\n return false;\n }\n\n if(messageReplyMarkup.pFlags.selective) {\n return false;\n }\n\n if(historyStorage.maxOutId &&\n message.mid < historyStorage.maxOutId &&\n (messageReplyMarkup as ReplyMarkup.replyKeyboardMarkup | ReplyMarkup.replyKeyboardForceReply).pFlags.single_use) {\n (messageReplyMarkup as ReplyMarkup.replyKeyboardMarkup | ReplyMarkup.replyKeyboardForceReply).pFlags.hidden = true;\n }\n\n messageReplyMarkup.mid = message.mid;\n /* messageReplyMarkup = Object.assign({\n mid: message.mid\n }, messageReplyMarkup); */\n\n if(messageReplyMarkup._ !== 'replyKeyboardHide') {\n messageReplyMarkup.fromId = this.appPeersManager.getPeerId(message.from_id || message.peer_id);\n }\n\n historyStorage.replyMarkup = messageReplyMarkup;\n // this.log('set', historyStorage.reply_markup)\n return true;\n }\n\n if(message.pFlags.out) {\n if(lastReplyMarkup) {\n assumeType(lastReplyMarkup);\n if(lastReplyMarkup.pFlags.single_use &&\n !lastReplyMarkup.pFlags.hidden &&\n (message.mid > lastReplyMarkup.mid || message.pFlags.is_outgoing) &&\n (message as Message.message).message) {\n lastReplyMarkup.pFlags.hidden = true;\n // this.log('set', historyStorage.reply_markup)\n return true;\n }\n } else if(!historyStorage.maxOutId ||\n message.mid > historyStorage.maxOutId) {\n historyStorage.maxOutId = message.mid;\n }\n }\n\n assumeType(message);\n if(message.action?._ === 'messageActionChatDeleteUser' &&\n (lastReplyMarkup ?\n message.action.user_id === (lastReplyMarkup as ReplyMarkup.replyKeyboardMarkup).fromId :\n this.appUsersManager.isBot(message.action.user_id)\n )\n ) {\n historyStorage.replyMarkup = {\n _: 'replyKeyboardHide',\n mid: message.mid,\n pFlags: {}\n };\n // this.log('set', historyStorage.reply_markup)\n return true;\n }\n\n return false;\n }\n\n public getReferenceContext(peerId: PeerId, mid: number, onlyCached?: boolean) {\n const key = peerId + '_' + mid;\n let context = this.references[key];\n if(!context && !onlyCached) {\n context = this.references[key] = {};\n }\n\n return context;\n }\n\n public getReferenceContextByMessage(message: Message.message | Message.messageService, onlyCached?: boolean) {\n return this.getReferenceContext(message.peerId, message.mid, onlyCached);\n }\n\n public getSearchStorage(options: RequestHistoryOptions) {\n const o: Parameters[0] = {...options, type: 'search'};\n if(getSearchType(options) === 'uncached') {\n const historyStorage = this.createHistoryStorage(o);\n return historyStorage;\n }\n\n const filter = getSearchStorageFilterKey(o);\n const key = getHistoryStorageKey(o);\n let searchStorage: HistoryStorage;\n if(options.isCacheableSearch) {\n searchStorage = this.searchesStorage[key] ??= this.createHistoryStorage(o);\n } else {\n searchStorage = ((this.searchesStorage[options.peerId] ??= {})[options.threadId] ??= {})[filter] ??= this.createHistoryStorage(o);\n }\n if(options.isCacheableSearch) { // * don't update messages list if it's a global search\n if(!searchStorage.searchHistory) {\n const slicedArray = searchStorage.searchHistory = new SlicedArray();\n slicedArray.insertSlice = (slice) => {\n slicedArray.first.push(...slice);\n return slicedArray.first;\n };\n\n slicedArray.findOffsetInSlice = (offsetId, slice) => {\n const index = slice.indexOf(offsetId);\n if(index !== -1) {\n return {\n slice,\n offset: index + 1\n };\n }\n };\n }\n } else if(!searchStorage.originalInsertSlice) {\n searchStorage.originalInsertSlice = searchStorage.history.insertSlice.bind(searchStorage.history);\n searchStorage.history.insertSlice = (...args) => {\n const slice = searchStorage.originalInsertSlice(...args);\n if(slice) {\n args[0].forEach((mid) => {\n searchStorage.onMidInsertion(mid);\n });\n }\n\n return slice;\n };\n\n searchStorage.filterMessages = (messages) => {\n return filterMessagesByInputFilter({\n inputFilter: options.inputFilter._,\n limit: messages.length,\n messages,\n savedReaction: options.savedReaction\n });\n };\n\n searchStorage.filterMessage = (message) => {\n return !!searchStorage.filterMessages([message]).length;\n };\n\n searchStorage.onMidInsertion = (mid) => {\n const context = this.getReferenceContext(options.peerId, mid);\n (context.searchStorages ??= new Set()).add(searchStorage);\n };\n }\n\n return searchStorage;\n }\n\n public getSearchCounters(\n peerId: PeerId,\n filters: MessagesFilter[],\n canCache = true,\n threadId?: number\n ): Promise {\n peerId = this.appPeersManager.getPeerMigratedTo(peerId) || peerId;\n if(this.appPeersManager.isPeerRestricted(peerId)) {\n return Promise.resolve(filters.map((filter) => {\n return {\n _: 'messages.searchCounter',\n pFlags: {},\n filter: filter,\n count: 0\n };\n }));\n }\n\n const historyType = this.getHistoryType(peerId, threadId);\n const migration = this.getMigration(peerId);\n\n const method = 'messages.getSearchCounters';\n const func = (canCache ? this.apiManager.invokeApiCacheable : this.apiManager.invokeApi).bind(this.apiManager);\n const result = func(method, {\n peer: this.appPeersManager.getInputPeerById(peerId),\n filters,\n top_msg_id: threadId && historyType !== HistoryType.Saved ? getServerMessageId(threadId) : undefined,\n saved_peer_id: historyType === HistoryType.Saved ? this.appPeersManager.getInputPeerById(threadId) : undefined\n }, {cacheSeconds: 60e3});\n\n if(migration) {\n const legacyResult = func(method, {\n peer: this.appPeersManager.getInputPeerById(migration.prev),\n filters\n });\n\n return Promise.all([result, legacyResult]).then(([searchCounters, legacySearchCounters]) => {\n const out: MessagesSearchCounter[] = searchCounters.map((searchCounter, idx) => {\n return {\n ...searchCounter,\n count: searchCounter.count + legacySearchCounters[idx].count\n };\n });\n\n return out;\n });\n }\n\n return result;\n }\n\n public filterMessagesByInputFilterFromStorage(inputFilter: MyInputMessagesFilter, history: number[], storage: MessagesStorage | MessagesStorageKey, limit: number) {\n const _storage = this.getMessagesStorage(storage);\n return filterMessagesByInputFilter({inputFilter, messages: history.map((mid) => _storage.get(mid)), limit});\n }\n\n public subscribeRepliesThread(peerId: PeerId, mid: number) {\n const repliesKey = peerId + '_' + mid;\n for(const threadKey in this.threadsToReplies) {\n if(this.threadsToReplies[threadKey] === repliesKey) return;\n }\n\n this.getDiscussionMessage(peerId, mid);\n }\n\n public generateThreadServiceStartMessage(message: Message.message | Message.messageService) {\n const {peerId, mid} = message;\n const threadKey = peerId + '_' + mid;\n const serviceStartMid = this.threadsServiceMessagesIdsStorage[threadKey];\n if(serviceStartMid) return serviceStartMid;\n\n const maxMid = Math.max(...this.getMidsByMessage(message));\n const serviceStartMessage: Message.messageService = {\n _: 'messageService',\n pFlags: {\n is_single: true\n },\n id: this.generateTempMessageId(peerId, maxMid, true),\n date: message.date,\n from_id: {_: 'peerUser', user_id: NULL_PEER_ID}/* message.from_id */,\n peer_id: message.peer_id,\n action: {\n _: 'messageActionDiscussionStarted'\n },\n reply_to: this.generateReplyHeader(\n peerId,\n this.getInputReplyTo({replyToMsgId: mid, threadId: mid})\n )\n };\n\n this.saveMessages([serviceStartMessage], {isOutgoing: true});\n return this.threadsServiceMessagesIdsStorage[threadKey] = serviceStartMessage.mid;\n }\n\n public getThreadServiceMessageId(peerId: PeerId, threadId: number) {\n return this.threadsServiceMessagesIdsStorage[peerId + '_' + threadId];\n }\n\n public getDiscussionMessage(peerId: PeerId, mid: number) {\n return this.apiManager.invokeApiSingle('messages.getDiscussionMessage', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(mid)\n }).then((result) => {\n this.saveApiResult(result);\n\n const message = this.getMessageWithReplies(result.messages[0] as Message.message);\n const threadKey = message.peerId + '_' + message.mid;\n const channelId = message.peerId.toChatId();\n\n // this.generateThreadServiceStartMessage(message);\n\n this.log('got discussion message', peerId, mid, result, message.peerId, message.mid);\n\n const historyStorage = this.getHistoryStorage(message.peerId, message.mid);\n const newMaxId = result.max_id = this.appMessagesIdsManager.generateMessageId(result.max_id, channelId) || 0;\n result.read_inbox_max_id = historyStorage.readMaxId = this.appMessagesIdsManager.generateMessageId(result.read_inbox_max_id ?? message.mid, channelId);\n result.read_outbox_max_id = historyStorage.readOutboxMaxId = this.appMessagesIdsManager.generateMessageId(result.read_outbox_max_id, channelId) || 0;\n\n const first = historyStorage.history.first;\n if(historyStorage.maxId && historyStorage.maxId < newMaxId && first.isEnd(SliceEnd.Bottom)) {\n first.unsetEnd(SliceEnd.Bottom);\n }\n historyStorage.maxId = newMaxId;\n\n this.threadsToReplies[threadKey] = peerId + '_' + mid;\n\n return message;\n });\n }\n\n private handleNewMessage(message: MyMessage) {\n this.rootScope.dispatchEvent('history_multiappend', message);\n }\n\n private handleNewDialogs = () => {\n let newMaxSeenId = 0;\n const updateMap: BroadcastEvents['dialogs_multiupdate']= new Map();\n\n const processDialog = (dialog: AnyDialog) => {\n const {peerId} = dialog;\n this.dialogsStorage.pushDialog({dialog});\n if(!this.appPeersManager.isChannel(peerId)) {\n newMaxSeenId = Math.max(newMaxSeenId, dialog.top_message || 0);\n }\n\n let cache = updateMap.get(peerId);\n if(!cache) {\n updateMap.set(peerId, cache = {});\n }\n\n if(isForumTopic(dialog)) {\n (cache.topics ??= new Map()).set(dialog.id, dialog);\n } else if(isSavedDialog(dialog)) {\n (cache.saved ??= new Map()).set(dialog.savedPeerId, dialog);\n } else {\n cache.dialog = dialog;\n }\n };\n\n for(const [peerId, obj] of this.newDialogsToHandle) {\n const isDialogDefined = 'dialog' in obj;\n const {dialog, topics, saved} = obj;\n\n if(isDialogDefined) {\n if(!dialog) {\n this.reloadConversation(peerId.toPeerId());\n } else if(this.dialogsStorage.getDialogOnly(peerId)) { // * can be already dropped\n processDialog(dialog);\n }\n }\n\n topics?.forEach((topic, id) => {\n if(!topic) {\n this.dialogsStorage.getForumTopicById(peerId, id);\n } else if(this.dialogsStorage.getForumTopic(peerId, id)) { // * can be already dropped\n processDialog(topic);\n }\n });\n\n saved?.forEach((savedDialog, savedPeerId) => {\n if(!savedDialog) {\n this.dialogsStorage.getSavedDialogById(savedPeerId);\n } else if(this.dialogsStorage.getAnyDialog(peerId, savedPeerId)) { // * can be already dropped\n processDialog(savedDialog);\n }\n });\n }\n\n // this.log('after order:', this.dialogsStorage[0].map((d) => d.peerId));\n\n if(newMaxSeenId !== 0) {\n this.incrementMaxSeenId(newMaxSeenId);\n }\n\n this.rootScope.dispatchEvent('dialogs_multiupdate', updateMap);\n this.newDialogsToHandle.clear();\n };\n\n public scheduleHandleNewDialogs(peerId?: PeerId, dialog?: AnyDialog | ForumTopic['id'] | SavedDialog['savedPeerId']) {\n if(peerId !== undefined) {\n let obj = this.newDialogsToHandle.get(peerId);\n if(!obj) {\n this.newDialogsToHandle.set(peerId, obj = {});\n }\n\n const isObject = typeof(dialog) === 'object';\n if(!dialog || (isObject && isDialog(dialog))) {\n obj.dialog = dialog as Dialog;\n } else {\n const threadOrSavedId = isObject ? getDialogKey(dialog) : dialog;\n const map: Map = this.getHistoryType(\n peerId,\n threadOrSavedId\n ) === HistoryType.Saved ?\n obj.saved ??= new Map() :\n obj.topics ??= new Map();\n\n if(isObject) {\n map.set(threadOrSavedId, dialog as ForumTopic | SavedDialog);\n } else {\n map.set(threadOrSavedId, undefined);\n }\n }\n }\n\n return this.newDialogsHandlePromise ??= pause(0).then(() => {\n this.newDialogsHandlePromise = undefined;\n this.handleNewDialogs();\n });\n }\n\n private async deleteMessagesInner(channelId: ChatId, mids: number[], revoke?: boolean, isRecursion?: boolean) {\n let promise: Promise;\n\n if(channelId && !isRecursion) {\n const channel = this.appChatsManager.getChat(channelId) as Chat.channel;\n if(!channel.pFlags.creator && !channel.admin_rights?.pFlags?.delete_messages) {\n mids = mids.filter((mid) => {\n const message = this.getMessageByPeer(channelId.toPeerId(true), mid);\n return !!message.pFlags.out;\n });\n\n if(!mids.length) {\n return;\n }\n }\n }\n\n const config = await this.apiManager.getConfig();\n const overflowMids = mids.splice(config.forwarded_count_max, mids.length - config.forwarded_count_max);\n\n const serverMessageIds = mids.map((mid) => {\n const messageId = getServerMessageId(mid);\n // filter outgoing messages\n return this.appMessagesIdsManager.generateMessageId(messageId, channelId) === mid && messageId;\n }).filter(Boolean);\n\n if(DO_NOT_DELETE_MESSAGES) {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateDeleteMessages',\n messages: mids,\n pts: 0,\n pts_count: 0\n });\n\n return;\n }\n\n if(channelId) {\n promise = this.apiManager.invokeApi('channels.deleteMessages', {\n channel: this.appChatsManager.getChannelInput(channelId),\n id: serverMessageIds\n }).then((affectedMessages) => {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateDeleteChannelMessages',\n channel_id: channelId,\n messages: mids,\n pts: affectedMessages.pts,\n pts_count: affectedMessages.pts_count\n });\n });\n } else {\n promise = this.apiManager.invokeApi('messages.deleteMessages', {\n revoke,\n id: serverMessageIds\n }).then((affectedMessages) => {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateDeleteMessages',\n messages: mids,\n pts: affectedMessages.pts,\n pts_count: affectedMessages.pts_count\n });\n });\n }\n\n const promises: (typeof promise)[] = [promise];\n if(overflowMids.length) {\n promises.push(this.deleteMessagesInner(channelId, overflowMids, revoke, true));\n }\n\n return Promise.all(promises).then(noop);\n }\n\n public deleteMessages(peerId: PeerId, mids: number[], revoke?: boolean) {\n const channelId = this.appPeersManager.isChannel(peerId) ? peerId.toChatId() : undefined;\n const splitted = this.appMessagesIdsManager.splitMessageIdsByChannels(mids, channelId);\n const promises = splitted.map(([channelId, {mids}]) => {\n return this.deleteMessagesInner(channelId, mids, revoke);\n });\n\n return Promise.all(promises).then(noop);\n }\n\n public readHistory(peerId: PeerId, maxId = 0, threadId?: number, force = false) {\n if(DO_NOT_READ_HISTORY) {\n return Promise.resolve();\n }\n\n // console.trace('start read')\n this.log('readHistory:', peerId, maxId, threadId);\n const readMaxId = this.getReadMaxIdIfUnread(peerId, threadId);\n if(!readMaxId) {\n if(threadId && !force) {\n const forumTopic = this.dialogsStorage.getForumTopic(peerId, threadId);\n if(forumTopic && !getServerMessageId(forumTopic.read_inbox_max_id)) {\n force = true;\n }\n }\n\n if(!force) {\n const dialog = this.appChatsManager.isForum(peerId.toChatId()) && threadId ?\n this.dialogsStorage.getForumTopic(peerId, threadId) :\n this.getDialogOnly(peerId);\n if(dialog && this.isDialogUnread(dialog)) {\n force = true;\n }\n }\n\n if(!force) {\n this.log('readHistory: isn\\'t unread');\n return Promise.resolve();\n }\n }\n\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n\n if(historyStorage.triedToReadMaxId >= maxId) {\n return Promise.resolve();\n }\n\n let apiPromise: Promise;\n if(threadId) {\n if(!historyStorage.readPromise) {\n apiPromise = this.apiManager.invokeApi('messages.readDiscussion', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(threadId),\n read_max_id: getServerMessageId(maxId)\n });\n // apiPromise = new Promise((resolve) => resolve());\n }\n\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateReadChannelDiscussionInbox',\n channel_id: peerId.toChatId(),\n top_msg_id: threadId,\n read_max_id: maxId\n });\n } else if(this.appPeersManager.isChannel(peerId)) {\n if(!historyStorage.readPromise) {\n apiPromise = this.apiManager.invokeApi('channels.readHistory', {\n channel: this.appChatsManager.getChannelInput(peerId.toChatId()),\n max_id: getServerMessageId(maxId)\n });\n }\n\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateReadChannelInbox',\n max_id: maxId,\n channel_id: peerId.toChatId(),\n still_unread_count: undefined,\n pts: undefined\n });\n } else {\n if(!historyStorage.readPromise) {\n apiPromise = this.apiManager.invokeApi('messages.readHistory', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n max_id: getServerMessageId(maxId)\n }).then((affectedMessages) => {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updatePts',\n pts: affectedMessages.pts,\n pts_count: affectedMessages.pts_count\n });\n });\n }\n\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateReadHistoryInbox',\n max_id: maxId,\n peer: this.appPeersManager.getOutputPeer(peerId),\n still_unread_count: undefined,\n pts: undefined,\n pts_count: undefined\n });\n }\n\n this.rootScope.dispatchEvent('notification_reset', this.appPeersManager.getPeerString(peerId));\n\n if(historyStorage.readPromise) {\n return historyStorage.readPromise;\n }\n\n historyStorage.triedToReadMaxId = maxId;\n\n apiPromise.finally(() => {\n delete historyStorage.readPromise;\n\n const {readMaxId} = historyStorage;\n this.log('readHistory: promise finally', maxId, readMaxId);\n\n if(readMaxId > maxId) {\n this.readHistory(peerId, readMaxId, threadId, true);\n }\n });\n\n return historyStorage.readPromise = apiPromise;\n }\n\n public readAllHistory(peerId: PeerId, threadId?: number, force = false) {\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n if(historyStorage.maxId) {\n this.readHistory(peerId, historyStorage.maxId, threadId, force); // lol\n }\n }\n\n private getUnreadMentionsKey({peerId, threadId, isReaction}: GetUnreadMentionsOptions) {\n return peerId + (threadId ? `_${threadId}` : '') + (isReaction ? '_reaction' : '');\n }\n\n private getDialogUnreadMentions(dialog: Dialog | ForumTopic, isReaction?: boolean) {\n return dialog && (isReaction ? dialog.unread_reactions_count : dialog.unread_mentions_count);\n }\n\n private fixDialogUnreadMentionsIfNoMessage({peerId, threadId, isReaction, force}: GetUnreadMentionsOptions & {force?: boolean}) {\n const dialog = this.dialogsStorage.getAnyDialog(peerId, threadId) as Dialog | ForumTopic;\n if(force || this.getDialogUnreadMentions(dialog, isReaction)) {\n this.reloadConversationOrTopic(peerId);\n }\n }\n\n private modifyCachedMentions(options: GetUnreadMentionsOptions & {mid?: number, add: boolean}) {\n const {mid, add} = options;\n const slicedArray = this.unreadMentions[this.getUnreadMentionsKey(options)];\n if(!slicedArray) return;\n\n if(add) {\n if(slicedArray.first.isEnd(SliceEnd.Top)) {\n slicedArray.insertSlice([mid]);\n }\n } else if(mid) {\n slicedArray.delete(mid);\n } else { // clear it\n slicedArray.slices.splice(1, Infinity);\n slicedArray.first.length = 0;\n slicedArray.first.setEnd(SliceEnd.Both);\n }\n }\n\n private modifyCachedMentionsAndSave(options: GetUnreadMentionsOptions & {mid: number, addMention?: boolean | number, addReaction?: boolean | number}) {\n const dialog = this.dialogsStorage.getAnyDialog(options.peerId, options.threadId) as Dialog | ForumTopic;\n if(!dialog) {\n return;\n }\n\n const releaseUnreadCount = this.dialogsStorage.prepareDialogUnreadCountModifying(dialog);\n\n const a: [boolean | number, 'unread_reactions_count' | 'unread_mentions_count'][] = [\n [options.addMention, 'unread_mentions_count'],\n [options.addReaction, 'unread_reactions_count']\n ];\n\n a.forEach(([add, key]) => {\n if(add === undefined) {\n return;\n }\n\n if(add) dialog[key] += +add;\n else dialog[key] = Math.max(0, dialog[key] - Math.max(1, +add));\n this.modifyCachedMentions({\n ...options,\n threadId: isForumTopic(dialog) ? options.threadId : undefined,\n isReaction: key === 'unread_reactions_count',\n add: !!add\n });\n });\n\n releaseUnreadCount();\n\n this.rootScope.dispatchEvent('dialog_unread', {peerId: options.peerId, dialog});\n this.dialogsStorage.setDialogToState(dialog);\n }\n\n private fixUnreadMentionsCountIfNeeded({peerId, threadId, slicedArray, isReaction}: GetUnreadMentionsOptions & {slicedArray: SlicedArray}) {\n const dialog = this.dialogsStorage.getAnyDialog(peerId, threadId) as Dialog | ForumTopic;\n if(!slicedArray.length && this.getDialogUnreadMentions(dialog, isReaction)) {\n this.reloadConversationOrTopic(peerId);\n }\n }\n\n public goToNextMention(options: GetUnreadMentionsOptions) {\n /* this.getUnreadMentions(peerId, 1, 2, 0).then((messages) => {\n console.log(messages);\n }); */\n\n const key = this.getUnreadMentionsKey(options);\n const promise = this.goToNextMentionPromises[key];\n if(promise) {\n return promise;\n }\n\n const slicedArray = this.unreadMentions[key] ??= new SlicedArray();\n const length = slicedArray.length;\n const isTopEnd = slicedArray.first.isEnd(SliceEnd.Top);\n if(!length && isTopEnd) {\n this.fixUnreadMentionsCountIfNeeded({...options, slicedArray});\n return Promise.resolve();\n }\n\n let loadNextPromise = Promise.resolve();\n if(!isTopEnd && length < 25) {\n loadNextPromise = this.loadNextMentions(options);\n }\n\n return this.goToNextMentionPromises[key] = loadNextPromise.then(() => {\n const last = slicedArray.last;\n const mid = last && last[last.length - 1];\n if(mid) {\n slicedArray.delete(mid);\n return mid;\n } else {\n this.fixUnreadMentionsCountIfNeeded({...options, slicedArray});\n }\n }).finally(() => {\n delete this.goToNextMentionPromises[key];\n });\n }\n\n private loadNextMentions(options: GetUnreadMentionsOptions) {\n const {peerId} = options;\n const slicedArray = this.unreadMentions[this.getUnreadMentionsKey(options)];\n const maxId = slicedArray.first[0] || 1;\n\n const backLimit = 50;\n const addOffset = -backLimit;\n const limit = backLimit;\n return this.getUnreadMentions({...options, offsetId: maxId, addOffset, limit})\n .then((messages) => {\n this.mergeHistoryResult({\n slicedArray,\n historyResult: messages,\n offsetId: maxId === 1 ? 0 : maxId,\n limit,\n addOffset,\n peerId\n });\n });\n }\n\n private getUnreadMentions({\n peerId,\n offsetId,\n addOffset,\n limit,\n maxId = 0,\n minId = 0,\n threadId,\n isReaction\n }: GetUnreadMentionsOptions & {\n offsetId: number,\n addOffset: number,\n limit: number,\n maxId?: number,\n minId?: number\n }) {\n return this.apiManager.invokeApiSingleProcess({\n method: isReaction ? 'messages.getUnreadReactions' : 'messages.getUnreadMentions',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n offset_id: getServerMessageId(offsetId),\n add_offset: addOffset,\n limit,\n max_id: getServerMessageId(maxId),\n min_id: getServerMessageId(minId),\n top_msg_id: threadId ? getServerMessageId(threadId) : undefined\n },\n processResult: (messagesMessages) => {\n assumeType>(messagesMessages);\n this.saveApiResult(messagesMessages);\n\n return messagesMessages;\n }\n });\n }\n\n public readMessages(peerId: PeerId, msgIds: number[]) {\n if(DO_NOT_READ_HISTORY) {\n return Promise.resolve();\n }\n\n if(!msgIds.length) {\n return Promise.resolve();\n }\n\n msgIds = msgIds.map((mid) => getServerMessageId(mid));\n let promise: Promise, update: Update.updateChannelReadMessagesContents | Update.updateReadMessagesContents;\n if(peerId.isAnyChat() && this.appPeersManager.isChannel(peerId)) {\n const channelId = peerId.toChatId();\n\n update = {\n _: 'updateChannelReadMessagesContents',\n channel_id: channelId,\n messages: msgIds\n };\n\n promise = this.apiManager.invokeApi('channels.readMessageContents', {\n channel: this.appChatsManager.getChannelInput(channelId),\n id: msgIds\n });\n } else {\n update = {\n _: 'updateReadMessagesContents',\n messages: msgIds,\n pts: undefined,\n pts_count: undefined\n };\n\n promise = this.apiManager.invokeApi('messages.readMessageContents', {\n id: msgIds\n }).then((affectedMessages) => {\n (update as Update.updateReadMessagesContents).pts = affectedMessages.pts;\n (update as Update.updateReadMessagesContents).pts_count = affectedMessages.pts_count;\n this.apiUpdatesManager.processLocalUpdate(update);\n });\n }\n\n this.apiUpdatesManager.processLocalUpdate(update);\n\n return promise;\n }\n\n public async readMentions(peerId: PeerId, threadId?: number, isReaction?: boolean): Promise {\n if(DO_NOT_READ_HISTORY) {\n return;\n }\n\n return this.apiManager.invokeApi(isReaction ? 'messages.readReactions' : 'messages.readMentions', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n top_msg_id: threadId ? getServerMessageId(threadId) : undefined\n }).then((affectedHistory) => {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updatePts',\n pts: affectedHistory.pts,\n pts_count: affectedHistory.pts_count\n });\n\n if(!affectedHistory.offset) {\n const dialog = this.dialogsStorage.getAnyDialog(peerId, threadId) as Dialog | ForumTopic;\n this.modifyCachedMentionsAndSave({\n peerId,\n threadId,\n mid: undefined,\n ...(isReaction ? {addReaction: -dialog.unread_reactions_count} : {addMention: -dialog.unread_mentions_count})\n });\n return true;\n }\n\n return this.readMentions(peerId, threadId, isReaction);\n });\n }\n\n public toggleHistoryKeySubscription(historyKey: HistoryStorageKey, subscribe: boolean) {\n if(!historyKey) {\n return;\n }\n\n const previous = this.historyMaxIdSubscribed.get(historyKey) || 0;\n if(subscribe) {\n this.historyMaxIdSubscribed.set(historyKey, previous + 1);\n } else {\n if(previous) {\n if(previous === 1) this.historyMaxIdSubscribed.delete(historyKey);\n this.historyMaxIdSubscribed.set(historyKey, previous - 1);\n }\n\n if(!this.historyMaxIdSubscribed.get(historyKey)) {\n delete this.searchesStorage[historyKey];\n }\n }\n }\n\n public getDetailsForChannelJoinedService(peerId: PeerId, historyStorage: HistoryStorage, slice?: SlicedArray['slice']) {\n if(peerId.isUser() || historyStorage.channelJoinedMid) {\n return;\n }\n\n const chatId = peerId.toChatId();\n const chat = this.appChatsManager.getChat(chatId);\n const date = (chat as Chat.channel)?.date;\n if(!date || !this.appChatsManager.isInChat(chatId) || !(chat as Chat.channel).pFlags.broadcast) {\n return;\n }\n\n const slices = slice ? [slice] : historyStorage.history.slices;\n for(const slice of slices) {\n let newerMessage: Message, olderMessage: Message;\n\n for(const mid of slice) {\n const message = this.getMessageByPeer(peerId, mid);\n if(!message) {\n this.log.error('no message from historyStorage?', peerId, historyStorage, slice, mid);\n debugger;\n continue;\n }\n\n if(message.date >= date) {\n newerMessage = message;\n } else {\n olderMessage = message;\n break;\n }\n }\n\n const isNewerGood = newerMessage || slice.isEnd(SliceEnd.Bottom);\n const isOlderGood = olderMessage || slice.isEnd(SliceEnd.Top);\n if(isNewerGood && isOlderGood) {\n return {\n date,\n slice,\n newerMessage,\n olderMessage\n };\n }\n }\n }\n\n public insertChannelJoinedService(peerId: PeerId, historyStorage: HistoryStorage, _slice?: SlicedArray['slice']) {\n const details = this.getDetailsForChannelJoinedService(peerId, historyStorage, _slice);\n if(!details) {\n return false;\n }\n\n const {date, slice, newerMessage, olderMessage} = details;\n\n const mid = this.generateTempMessageId(peerId, olderMessage?.mid || newerMessage.mid - 1);\n this.log('will insert channel joined', peerId, mid, newerMessage?.mid, olderMessage?.mid, slice);\n\n const message: Message.messageService = {\n _: 'messageService',\n pFlags: {\n is_single: true,\n out: true\n },\n id: mid,\n date,\n from_id: {_: 'peerUser', user_id: NULL_PEER_ID},\n peer_id: this.appPeersManager.getOutputPeer(peerId),\n action: {\n _: 'messageActionChannelJoined'\n }\n };\n this.saveMessages([message], {isOutgoing: true});\n\n // const insertSlice = historyStorage.originalInsertSlice || historyStorage.history.insertSlice.bind(historyStorage.history);\n // insertSlice([newerMessage?.mid, message.mid, olderMessage?.mid].filter(Boolean));\n insertInDescendSortedArray(slice, mid);\n\n historyStorage.maxId = Math.max(historyStorage.maxId, message.mid);\n historyStorage.channelJoinedMid = message.mid;\n if(historyStorage.originalInsertSlice) {\n historyStorage.history.insertSlice = historyStorage.originalInsertSlice;\n delete historyStorage.originalInsertSlice;\n }\n\n const dialog = this.getDialogOnly(peerId);\n if(dialog && dialog.top_message < message.mid) {\n this.setDialogTopMessage(message, dialog);\n }\n\n this.handleNewMessage(message);\n\n return true;\n }\n\n private processNewHistoryStorage(peerId: PeerId, historyStorage: HistoryStorage) {\n if(this.appPeersManager.isBroadcast(peerId) && !historyStorage.originalInsertSlice) {\n historyStorage.originalInsertSlice = historyStorage.history.insertSlice.bind(historyStorage.history);\n historyStorage.history.insertSlice = (...args) => {\n const slice = historyStorage.originalInsertSlice(...args);\n if(slice) {\n this.insertChannelJoinedService(peerId, historyStorage, slice);\n }\n\n return slice;\n };\n }\n\n return historyStorage;\n }\n\n public createHistoryStorage(options: Parameters[0]): HistoryStorage {\n const self = this;\n return {\n history: new SlicedArray(),\n type: options.type,\n key: getHistoryStorageKey(options),\n _maxId: undefined,\n _count: null,\n get count() {\n return this._count;\n },\n set count(count) {\n this._count = count;\n if(self.historyMaxIdSubscribed.has(this.key)) {\n self.rootScope.dispatchEvent('history_count', {historyKey: this.key, count});\n }\n },\n get maxId() {\n const maxId = this._maxId;\n if(maxId) {\n return maxId;\n }\n\n const first = this.history.first;\n if(first.isEnd(SliceEnd.Bottom)) {\n return first[0];\n }\n },\n set maxId(maxId) {\n this._maxId = maxId;\n }\n };\n }\n\n public getHistoryStorage(peerId: PeerId, threadId?: number) {\n if(threadId) {\n // threadId = this.getLocalMessageId(threadId);\n return (this.threadsStorage[peerId] ??= {})[threadId] ??= this.createHistoryStorage({type: 'replies', peerId, threadId});\n }\n\n return this.historiesStorage[peerId] ??= this.processNewHistoryStorage(peerId, this.createHistoryStorage({type: 'history', peerId}));\n }\n\n public getHistoryStorageTransferable(options: RequestHistoryOptions & {\n backLimit?: number,\n historyStorage?: HistoryStorage\n }) {\n this.processRequestHistoryOptions(options);\n const historyStorage = options.historyStorage;\n const {\n count,\n history,\n searchHistory,\n maxId,\n readMaxId,\n readOutboxMaxId,\n maxOutId,\n replyMarkup\n } = historyStorage;\n\n return {\n count,\n history: undefined as HistoryStorage,\n historySerialized: history.toJSON(),\n searchHistory: undefined as HistoryStorage,\n searchHistorySerialized: searchHistory?.toJSON(),\n maxId,\n readMaxId,\n readOutboxMaxId,\n maxOutId,\n replyMarkup\n };\n }\n\n private getNotifyPeerSettings(peerId: PeerId, threadId?: number) {\n const inputNotifyPeer = this.appPeersManager.getInputNotifyPeerById({peerId, ignorePeerId: true, threadId});\n return Promise.all([\n this.appNotificationsManager.getNotifyPeerTypeSettings(),\n this.appNotificationsManager.getNotifySettings(inputNotifyPeer)\n ]).then(([_, peerTypeNotifySettings]) => {\n return {\n muted: this.appNotificationsManager.isPeerLocalMuted({peerId, respectType: true, threadId}),\n peerTypeNotifySettings\n };\n });\n }\n\n private handleNotifications = () => {\n ctx.clearTimeout(this.notificationsHandlePromise);\n this.notificationsHandlePromise = undefined;\n\n // var timeout = $rootScope.idle.isIDLE && StatusManager.isOtherDeviceActive() ? 30000 : 1000;\n // const timeout = 1000;\n\n for(const key in this.notificationsToHandle) {\n const [peerId, threadId] = key.split('_');\n // if(rootScope.peerId === peerId && !rootScope.idle.isIDLE) {\n // continue;\n // }\n\n const notifyPeerToHandle = this.notificationsToHandle[key];\n this.getNotifyPeerSettings(peerId.toPeerId(), threadId ? +threadId : undefined)\n .then(({muted, peerTypeNotifySettings}) => {\n const topMessage = notifyPeerToHandle.topMessage;\n if((muted && !topMessage.pFlags.mentioned) || !topMessage.pFlags.unread) {\n return;\n }\n\n // setTimeout(() => {\n if(topMessage.pFlags.unread) {\n this.notifyAboutMessage(topMessage, {\n fwdCount: notifyPeerToHandle.fwdCount,\n peerTypeNotifySettings\n });\n }\n // }, timeout);\n });\n }\n\n this.notificationsToHandle = {};\n };\n\n public getUpdateAfterReloadKey(peerId: PeerId, threadOrSavedId?: number) {\n return peerId + (threadOrSavedId ? '_' + threadOrSavedId : '');\n }\n\n private handleNewUpdateAfterReload(peerId: PeerId, update: Update, threadOrSavedId?: number) {\n const set = this.newUpdatesAfterReloadToHandle[this.getUpdateAfterReloadKey(peerId, threadOrSavedId)] ??= new Set();\n if(set.has(update)) {\n this.log.error('here we go again', peerId);\n return;\n }\n\n (update as any).ignoreExisting = true;\n set.add(update);\n this.scheduleHandleNewDialogs(peerId, threadOrSavedId);\n }\n\n private updateSlowModeOnNewMessage(message: MyMessage) {\n const {peerId} = message;\n if(message.pFlags.out && !peerId.isUser()) {\n const chatId = peerId.toChatId();\n this.appProfileManager.modifyCachedFullChat(chatId, (chatFull) => {\n const chat = this.appChatsManager.getChat(chatId) as Chat.channel;\n if(!(chatFull.slowmode_seconds && !chat.admin_rights)) {\n return false;\n }\n chatFull.slowmode_next_send_date = message.date + chatFull.slowmode_seconds;\n });\n }\n }\n\n public hasOutgoingMessage(peerId: PeerId) {\n for(const randomId in this.pendingByRandomId) {\n if(this.pendingByRandomId[randomId].peerId === peerId) {\n return true;\n }\n }\n\n return false;\n }\n\n private onUpdateMessageId = (update: Update.updateMessageID) => {\n const randomId = update.random_id;\n const pendingData = this.pendingByRandomId[randomId];\n if(!pendingData) {\n return;\n }\n\n const {peerId} = pendingData;\n const channelId = this.appPeersManager.isChannel(peerId) ? peerId.toChatId() : undefined;\n const mid = this.appMessagesIdsManager.generateMessageId(update.id, channelId);\n this.pendingByMessageId[mid] = randomId;\n // const {storage} = pendingData;\n // const message = this.getMessageFromStorage(storage, mid);\n // if(message) { // if message somehow already exists\n // this.checkPendingMessage(message);\n // }\n };\n\n private onUpdateNewMessage = (update: Update.updateNewDiscussionMessage | Update.updateNewMessage | Update.updateNewChannelMessage) => {\n const message = update.message as MyMessage;\n const peerId = this.getMessagePeer(message);\n const storage = this.getHistoryMessagesStorage(peerId);\n\n // * local update\n const isLocalThreadUpdate = update._ === 'updateNewDiscussionMessage';\n\n // * temporary save the message for info (peerId, reply mids...)\n this.saveMessages([message], {storage: this.createMessageStorage(peerId, 'history')});\n\n // * check if sent message is already in storage\n // const oldMessage = this.getMessageFromStorage(storage, message.mid);\n // if(\n // (message as Message.message).pFlags.is_outgoing &&\n // oldMessage &&\n // !(oldMessage as Message.message).pFlags.is_outgoing\n // ) {\n // this.checkPendingMessage(message);\n // return;\n // }\n\n const isForum = this.appPeersManager.isForum(peerId);\n const threadKey = this.getThreadKey(message);\n const threadId = threadKey ? +threadKey.split('_')[1] : undefined;\n const dialog = this.dialogsStorage.getAnyDialog(peerId, isLocalThreadUpdate ? threadId : undefined);\n\n if((!dialog || this.reloadConversationsPeers.has(peerId)) && !isLocalThreadUpdate) {\n let good = true;\n if(peerId.isAnyChat()) {\n good = this.appChatsManager.isInChat(peerId.toChatId());\n }\n\n if(good) {\n this.handleNewUpdateAfterReload(peerId, update);\n return;\n }\n\n // return;\n }\n\n if(threadId && !isLocalThreadUpdate) {\n const threadStorage = this.threadsStorage[peerId]?.[threadId];\n const update = {\n _: 'updateNewDiscussionMessage',\n message\n } as Update.updateNewDiscussionMessage;\n\n if(this.appChatsManager.isForum(peerId.toChatId()) && !this.dialogsStorage.getForumTopic(peerId, threadId)) {\n // this.dialogsStorage.getForumTopicById(peerId, threadId);\n this.handleNewUpdateAfterReload(peerId, update, threadId);\n } else if(peerId === this.appPeersManager.peerId && !this.dialogsStorage.getAnyDialog(peerId, threadId)) {\n this.handleNewUpdateAfterReload(peerId, update, threadId);\n } else if(threadStorage) {\n this.onUpdateNewMessage(update);\n }\n }\n\n if(message._ === 'messageService') {\n const {action} = message;\n if(action._ === 'messageActionPaymentSent' && message.reply_to) {\n const replyTo = message.reply_to as MessageReplyHeader.messageReplyHeader;\n this.rootScope.dispatchEvent('payment_sent', {\n peerId: replyTo.reply_to_peer_id ?\n this.appPeersManager.getPeerId(replyTo.reply_to_peer_id) :\n message.peerId,\n mid: message.reply_to_mid,\n receiptMessage: message\n });\n }\n\n if(action._ === 'messageActionTopicEdit' && !isLocalThreadUpdate) {\n const topic = this.dialogsStorage.getForumTopic(peerId, threadId);\n if(!topic) {\n this.dialogsStorage.getForumTopicById(peerId, threadId);\n } else {\n const oldTopic = copy(topic);\n\n if(action.title !== undefined) {\n topic.title = action.title;\n }\n\n if(action.closed !== undefined) {\n setBooleanFlag(topic.pFlags, 'closed', action.closed);\n }\n\n if(action.hidden !== undefined) {\n setBooleanFlag(topic.pFlags, 'hidden', action.hidden);\n }\n\n if(action.icon_emoji_id !== undefined) {\n topic.icon_emoji_id = action.icon_emoji_id;\n }\n\n this.scheduleHandleNewDialogs(peerId, topic);\n\n this.dialogsStorage.processTopicUpdate(topic, oldTopic);\n }\n }\n }\n\n /* if(update._ === 'updateNewChannelMessage') {\n const chat = appChatsManager.getChat(peerId.toChatId());\n if(chat.pFlags && (chat.pFlags.left || chat.pFlags.kicked)) {\n return;\n }\n } */\n\n this.saveMessages([message], {storage});\n // this.log.warn(dT(), 'message unread', message.mid, message.pFlags.unread)\n\n /* if((message as Message.message).grouped_id) {\n this.log('updateNewMessage', message);\n } */\n\n this.checkPendingMessage(message);\n const historyStorage = this.getHistoryStorage(peerId, isLocalThreadUpdate ? threadId : undefined);\n\n if(!isLocalThreadUpdate) {\n this.updateMessageRepliesIfNeeded(message, true);\n }\n\n // * so message can exist if reloadConversation came back earlier with mid\n const ignoreExisting: boolean = (update as any).ignoreExisting;\n const isExisting = !!historyStorage.history.findSlice(message.mid);\n this.updateMessageContextForInserting(message);\n if(isExisting) {\n if(!ignoreExisting) {\n return false;\n }\n } else {\n // * catch situation with disconnect. if message's id is lower than we already have (in bottom end slice), will sort it\n const firstSlice = historyStorage.history.first;\n if(firstSlice.isEnd(SliceEnd.Bottom)) {\n let i = 0;\n for(const length = firstSlice.length; i < length; ++i) {\n if(message.mid > firstSlice[i]) {\n break;\n }\n }\n\n firstSlice.splice(i, 0, message.mid);\n } else {\n historyStorage.history.unshift(message.mid);\n }\n\n if(historyStorage.count !== null) {\n ++historyStorage.count;\n }\n }\n\n if(!historyStorage.maxId || message.mid > historyStorage.maxId) {\n historyStorage.maxId = message.mid;\n }\n\n if(this.mergeReplyKeyboard(historyStorage, message)) {\n this.rootScope.dispatchEvent('history_reply_markup', {peerId});\n }\n\n const fromId = message.fromId;\n if(fromId.isUser() && !message.pFlags.out && message.from_id) {\n if(!(message as Message.message).pFlags.offline) {\n this.appUsersManager.forceUserOnline(fromId, message.date);\n }\n\n const action: SendMessageAction = {\n _: 'sendMessageCancelAction'\n };\n\n let update: Update.updateUserTyping | Update.updateChatUserTyping | Update.updateChannelUserTyping;\n if(peerId.isUser()) {\n update = {\n _: 'updateUserTyping',\n action,\n user_id: fromId\n };\n } else if(this.appPeersManager.isChannel(peerId)) {\n update = {\n _: 'updateChannelUserTyping',\n action,\n channel_id: peerId.toChatId(),\n from_id: this.appPeersManager.getOutputPeer(fromId),\n top_msg_id: threadId ? getServerMessageId(threadId) : undefined\n };\n } else {\n update = {\n _: 'updateChatUserTyping',\n action,\n chat_id: peerId.toChatId(),\n from_id: this.appPeersManager.getOutputPeer(fromId)\n };\n }\n\n this.apiUpdatesManager.processLocalUpdate(update);\n }\n\n if(!isLocalThreadUpdate) {\n this.updateSlowModeOnNewMessage(message);\n }\n\n // commented to render the message if it's been sent faster than history_append came to main thread\n // if(!pendingMessage) {\n if(!isLocalThreadUpdate) {\n this.handleNewMessage(message);\n }\n // }\n\n const isTopic = isForumTopic(dialog);\n const isSaved = isSavedDialog(dialog);\n if((isLocalThreadUpdate && !isTopic && !isSaved) || !dialog) {\n return;\n }\n\n const inboxUnread = !message.pFlags.out && message.pFlags.unread;\n\n {\n if(inboxUnread && message.mid > dialog.top_message && !isSaved) {\n const releaseUnreadCount = this.dialogsStorage.prepareDialogUnreadCountModifying(dialog);\n\n ++dialog.unread_count;\n if(isMentionUnread(message)) {\n ++dialog.unread_mentions_count;\n this.modifyCachedMentions({peerId, mid: message.mid, add: true, threadId: isTopic ? threadId : undefined});\n }\n\n releaseUnreadCount();\n }\n\n if(message.mid >= dialog.top_message) {\n this.setDialogTopMessage(message, dialog);\n }\n }\n\n if(((!isLocalThreadUpdate && !isForum) || isTopic) && inboxUnread) {\n const notifyPeer = threadKey || peerId;\n const notifyPeerToHandle = this.notificationsToHandle[notifyPeer] ??= {\n fwdCount: 0,\n fromId: NULL_PEER_ID\n };\n\n if(notifyPeerToHandle.fromId !== fromId) {\n notifyPeerToHandle.fromId = fromId;\n notifyPeerToHandle.fwdCount = 0;\n }\n\n if((message as Message.message).fwd_from) {\n ++notifyPeerToHandle.fwdCount;\n }\n\n notifyPeerToHandle.topMessage = message;\n\n this.notificationsHandlePromise ??= ctx.setTimeout(this.handleNotifications, 0);\n }\n };\n\n private onUpdateMessageReactions = (update: Update.updateMessageReactions) => {\n const {peer, msg_id, top_msg_id, reactions} = update;\n const channelId = (peer as Peer.peerChannel).channel_id;\n const mid = this.appMessagesIdsManager.generateMessageId(msg_id, channelId);\n const threadId = this.appMessagesIdsManager.generateMessageId(top_msg_id, channelId);\n const peerId = this.appPeersManager.getPeerId(peer);\n const message: MyMessage = this.getMessageByPeer(peerId, mid);\n\n if(message?._ !== 'message') {\n this.fixDialogUnreadMentionsIfNoMessage({peerId, threadId, force: true});\n return;\n }\n\n const modifyUnreadReactions = (add: boolean) => {\n this.modifyCachedMentionsAndSave({\n peerId,\n mid: message.mid,\n threadId,\n addReaction: add\n });\n };\n\n const recentReactions = reactions?.recent_reactions;\n const previousReactions = message.reactions;\n const previousRecentReactions = previousReactions?.recent_reactions;\n const isUnread = recentReactions?.some((reaction) => reaction.pFlags.unread);\n const wasUnread = !!previousRecentReactions?.some((reaction) => reaction.pFlags.unread);\n if(recentReactions?.length && message.pFlags.out) { // * if user added a reaction to our message\n const recentReaction = recentReactions[recentReactions.length - 1];\n if(\n this.appPeersManager.getPeerId(recentReaction.peer_id) !== this.appPeersManager.peerId && (\n !previousRecentReactions ||\n previousRecentReactions.length <= recentReactions.length\n ) && (\n !previousRecentReactions ||\n !deepEqual(recentReaction, previousRecentReactions[previousRecentReactions.length - 1])\n ) && isUnread !== wasUnread\n ) {\n this.getNotifyPeerSettings(peerId).then(({muted, peerTypeNotifySettings}) => {\n if(/* muted || */!peerTypeNotifySettings.show_previews) return;\n this.notifyAboutMessage(message, {\n peerReaction: recentReaction,\n peerTypeNotifySettings\n });\n });\n }\n }\n\n if(message.pFlags.out && isUnread !== wasUnread) {\n modifyUnreadReactions(isUnread);\n }\n\n const key = message.peerId + '_' + message.mid;\n this.pushBatchUpdate('messages_reactions', this.batchUpdateReactions, key, () => copy(message.reactions));\n\n this.modifyMessage(message, (message) => {\n message.reactions = reactions;\n }, undefined, update.local);\n };\n\n private onUpdateDialogUnreadMark = (update: Update.updateDialogUnreadMark) => {\n // this.log('updateDialogUnreadMark', update);\n const peerId = this.appPeersManager.getPeerId((update.peer as DialogPeer.dialogPeer).peer);\n const dialog = this.getDialogOnly(peerId);\n\n if(!dialog) {\n this.scheduleHandleNewDialogs(peerId);\n } else {\n const releaseUnreadCount = this.dialogsStorage.prepareDialogUnreadCountModifying(dialog);\n\n if(!update.pFlags.unread) {\n delete dialog.pFlags.unread_mark;\n } else {\n dialog.pFlags.unread_mark = true;\n }\n\n releaseUnreadCount();\n this.dialogsStorage.setDialogToState(dialog);\n this.rootScope.dispatchEvent('dialogs_multiupdate', new Map([[peerId, {dialog}]]));\n }\n };\n\n private onUpdateEditMessage = (update: Update.updateEditMessage | Update.updateEditChannelMessage) => {\n const message = update.message as MyMessage;\n const peerId = this.getMessagePeer(message);\n const channelId = this.appPeersManager.isChannel(peerId) ? peerId.toChatId() : undefined;\n const mid = this.appMessagesIdsManager.generateMessageId(message.id, channelId);\n const storage = this.getHistoryMessagesStorage(peerId);\n if(!storage.has(mid)) {\n this.fixDialogUnreadMentionsIfNoMessage({peerId, threadId: getMessageThreadId(message, this.appPeersManager.isForum(peerId)), force: true});\n // this.fixDialogUnreadMentionsIfNoMessage(peerId);\n return;\n }\n\n // console.trace(dT(), 'edit message', message)\n\n const oldMessage: Message = this.getMessageFromStorage(storage, mid);\n const newMessage = this.modifyMessage(oldMessage, () => {\n this.saveMessages([message], {storage});\n const newMessage: Message = this.getMessageFromStorage(storage, mid);\n return newMessage;\n }, false, true);\n\n this.handleEditedMessage(oldMessage, newMessage, storage);\n\n const dialog = this.getDialogOnly(peerId);\n\n // if sender erased mention\n /* if(dialog.unread_mentions_count && (oldMessage as Message.message)?.pFlags?.mentioned && !message.pFlags.mentioned) {\n --dialog.unread_mentions_count;\n this.modifyCachedMentions(peerId, mid, false);\n } */\n\n const isTopMessage = dialog?.top_message === mid;\n if((message as Message.messageService).clear_history) {\n if(isTopMessage) {\n this.rootScope.dispatchEvent('dialog_flush', {peerId, dialog});\n }\n\n return;\n }\n\n let dispatchEditEvent = true;\n // no sense in dispatching message_edit since only reactions have changed\n if(oldMessage?._ === 'message' && !deepEqual(oldMessage.reactions, (newMessage as Message.message).reactions)) {\n const newReactions = (newMessage as Message.message).reactions;\n (newMessage as Message.message).reactions = oldMessage.reactions;\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateMessageReactions',\n peer: this.appPeersManager.getOutputPeer(peerId),\n msg_id: message.id,\n reactions: newReactions\n });\n\n dispatchEditEvent = false;\n }\n\n dispatchEditEvent && this.rootScope.dispatchEvent('message_edit', {\n storageKey: storage.key,\n peerId,\n mid,\n message\n });\n\n if(isTopMessage) {\n this.dialogsStorage.setDialogToState(dialog);\n }\n\n const map: BroadcastEvents['dialogs_multiupdate'] = new Map();\n const getUpdateCache = () => {\n let cache = map.get(peerId);\n if(!cache) {\n map.set(peerId, cache = {});\n }\n\n return cache;\n };\n\n if((isTopMessage || (message as Message.message).grouped_id) && dialog) {\n getUpdateCache().dialog = dialog;\n }\n\n const threadKey = this.getThreadKey(message);\n if(threadKey) {\n const threadOrSavedId = +threadKey.split('_')[1];\n const dialog = this.dialogsStorage.getAnyDialog(peerId, threadOrSavedId);\n if(dialog) {\n (getUpdateCache()[isSavedDialog(dialog) ? 'saved' : 'topics'] ??= new Map()).set(threadOrSavedId, dialog);\n }\n }\n\n if(map.size) {\n this.rootScope.dispatchEvent('dialogs_multiupdate', map);\n }\n };\n\n private onUpdateReadHistory = (update: Update.updateReadChannelDiscussionInbox | Update.updateReadChannelDiscussionOutbox\n | Update.updateReadHistoryInbox | Update.updateReadHistoryOutbox\n | Update.updateReadChannelInbox | Update.updateReadChannelOutbox) => {\n const channelId = (update as Update.updateReadChannelInbox).channel_id;\n const maxId = this.appMessagesIdsManager.generateMessageId((update as Update.updateReadChannelInbox).max_id || (update as Update.updateReadChannelDiscussionInbox).read_max_id, channelId);\n const threadId = this.appMessagesIdsManager.generateMessageId((update as Update.updateReadChannelDiscussionInbox).top_msg_id, channelId);\n const peerId = channelId ? channelId.toPeerId(true) : this.appPeersManager.getPeerId((update as Update.updateReadHistoryInbox).peer);\n\n const isOut = update._ === 'updateReadHistoryOutbox' ||\n update._ === 'updateReadChannelOutbox' ||\n update._ === 'updateReadChannelDiscussionOutbox' ? true : undefined;\n\n const isForum = channelId ? this.appChatsManager.isForum(channelId) : false;\n const storage = this.getHistoryMessagesStorage(peerId);\n const history = getObjectKeysAndSort(storage, 'desc');\n const foundDialog = threadId && isForum ?\n this.dialogsStorage.getForumTopic(peerId, threadId) :\n this.getDialogOnly(peerId);\n const stillUnreadCount = (update as Update.updateReadChannelInbox).still_unread_count;\n let newUnreadCount = 0;\n let newUnreadMentionsCount = 0;\n let foundAffected = false;\n\n // this.log.warn(dT(), 'read', peerId, isOut ? 'out' : 'in', maxId)\n\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n\n if(peerId.isUser() && isOut) {\n this.appUsersManager.forceUserOnline(peerId.toUserId());\n }\n\n if(threadId) {\n const repliesKey = this.threadsToReplies[peerId + '_' + threadId];\n if(repliesKey) {\n const [peerId, mid] = repliesKey.split('_');\n this.updateMessage(peerId.toPeerId(), +mid, 'replies_updated');\n }\n }\n\n const releaseUnreadCount = foundDialog && this.dialogsStorage.prepareDialogUnreadCountModifying(foundDialog);\n const readMaxId = this.getReadMaxIdIfUnread(peerId, threadId);\n\n for(let i = 0, length = history.length; i < length; i++) {\n const mid = history[i];\n if(mid > maxId) {\n continue;\n }\n\n const message: MyMessage = storage.get(mid);\n\n if(message.pFlags.out !== isOut) {\n continue;\n }\n\n const messageThreadId = getMessageThreadId(message, isForum);\n if(threadId && messageThreadId !== threadId) {\n continue;\n }\n\n const isUnread = message.pFlags.unread || (readMaxId && readMaxId < mid);\n\n if(!isUnread) {\n break;\n }\n\n // this.log.warn('read', messageId, isUnread, message)\n this.modifyMessage(message, (message) => {\n delete message.pFlags.unread;\n }, storage, true);\n foundAffected ||= true;\n\n if(!message.pFlags.out && foundDialog) {\n if(stillUnreadCount === undefined) {\n newUnreadCount = --foundDialog.unread_count;\n }\n\n if(isMentionUnread(message)) {\n newUnreadMentionsCount = --foundDialog.unread_mentions_count;\n this.modifyCachedMentions({peerId, mid: message.mid, add: false});\n }\n }\n\n this.rootScope.dispatchEvent('notification_cancel', 'msg' + mid);\n }\n\n if(isOut) historyStorage.readOutboxMaxId = maxId;\n else historyStorage.readMaxId = maxId;\n\n if(foundDialog) {\n if(isOut) foundDialog.read_outbox_max_id = maxId;\n else foundDialog.read_inbox_max_id = maxId;\n\n if(!isOut) {\n let setCount: number;\n if(stillUnreadCount !== undefined) {\n setCount = stillUnreadCount;\n } else if(\n newUnreadCount < 0 ||\n maxId >= foundDialog.top_message ||\n !readMaxId\n ) {\n setCount = 0;\n } else if(newUnreadCount && foundDialog.top_message > maxId) {\n setCount = newUnreadCount;\n }\n\n if(setCount !== undefined) {\n foundDialog.unread_count = setCount;\n }\n\n if(newUnreadMentionsCount < 0 || !foundDialog.unread_count) {\n foundDialog.unread_mentions_count = 0;\n }\n }\n\n releaseUnreadCount?.();\n\n this.dialogsStorage.processDialogForFilters(foundDialog);\n\n this.rootScope.dispatchEvent('dialog_unread', {peerId, dialog: foundDialog});\n this.dialogsStorage.setDialogToState(foundDialog);\n\n if(!foundAffected && stillUnreadCount === undefined && !isOut && foundDialog.unread_count) {\n if(isForumTopic(foundDialog)) {\n this.dialogsStorage.getForumTopicById(peerId, threadId);\n } else {\n this.reloadConversation(peerId);\n }\n }\n }\n\n if(foundAffected) {\n this.rootScope.dispatchEvent('messages_read');\n }\n\n if(!threadId && channelId) {\n const threadKeyPart = peerId + '_';\n for(const threadKey in this.threadsToReplies) {\n if(threadKey.indexOf(threadKeyPart) === 0) {\n const [peerId, mid] = this.threadsToReplies[threadKey].split('_');\n this.rootScope.dispatchEvent('replies_updated', this.getMessageByPeer(peerId.toPeerId(), +mid) as Message.message);\n }\n }\n }\n };\n\n private onUpdateReadMessagesContents = (update: Update.updateChannelReadMessagesContents | Update.updateReadMessagesContents) => {\n const channelId = (update as Update.updateChannelReadMessagesContents).channel_id;\n const topMsgId = (update as Update.updateChannelReadMessagesContents).top_msg_id;\n const threadId = topMsgId ? this.appMessagesIdsManager.generateMessageId(topMsgId, channelId) : undefined;\n const mids = (update as Update.updateReadMessagesContents).messages.map((id) => this.appMessagesIdsManager.generateMessageId(id, channelId));\n const peerId = channelId ? channelId.toPeerId(true) : this.findPeerIdByMids(mids);\n for(let i = 0, length = mids.length; i < length; ++i) {\n const mid = mids[i];\n const message: MyMessage = this.getMessageByPeer(peerId, mid);\n if(message) {\n if(message.pFlags.media_unread) {\n this.modifyMessage(message, (message) => {\n delete message.pFlags.media_unread;\n });\n\n if(!message.pFlags.out && isMentionUnread(message)) {\n this.modifyCachedMentionsAndSave({peerId, mid, addMention: false});\n }\n }\n\n if(getUnreadReactions(message)) {\n const newReactions = copy((message as Message.message).reactions);\n newReactions.recent_reactions.forEach((reaction) => {\n delete reaction.pFlags.unread;\n });\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateMessageReactions',\n peer: this.appPeersManager.getOutputPeer(peerId),\n msg_id: message.id,\n reactions: newReactions\n });\n }\n } else {\n this.fixDialogUnreadMentionsIfNoMessage({peerId, threadId});\n this.fixDialogUnreadMentionsIfNoMessage({peerId, threadId, isReaction: true});\n }\n }\n\n this.rootScope.dispatchEvent('messages_media_read', {peerId, mids});\n };\n\n private onUpdateChannelAvailableMessages = (update: Update.updateChannelAvailableMessages) => {\n const channelId = update.channel_id;\n const peerId = channelId.toPeerId(true);\n const history = this.getHistoryStorage(peerId).history.slice;\n const availableMinId = this.appMessagesIdsManager.generateMessageId(update.available_min_id, channelId);\n const messages = history.filter((mid) => mid <= availableMinId);\n\n (update as any as Update.updateDeleteChannelMessages).messages = messages;\n this.onUpdateDeleteMessages(update as any as Update.updateDeleteChannelMessages);\n };\n\n private onUpdateDeleteMessages = (update: Update.updateDeleteMessages | Update.updateDeleteChannelMessages) => {\n const channelId = (update as Update.updateDeleteChannelMessages).channel_id;\n const mids = (update as any as Update.updateDeleteChannelMessages).messages.map((id) => this.appMessagesIdsManager.generateMessageId(id, channelId));\n const peerId: PeerId = channelId ? channelId.toPeerId(true) : this.findPeerIdByMids(mids);\n\n if(!peerId) {\n return;\n }\n\n this.apiManager.clearCache('messages.getSearchCounters', (params) => {\n return this.appPeersManager.getPeerId(params.peer) === peerId;\n });\n\n const threadKeys = new Set(), virtual = new Map();\n for(const mid of mids) {\n const message = this.getMessageByPeer(peerId, mid);\n const threadKey = this.getThreadKey(message);\n if(!threadKey) {\n continue;\n }\n\n const threadId = +threadKey.split('_')[1];\n if(this.threadsStorage[peerId]?.[threadId]) {\n threadKeys.add(threadKey);\n\n const dialog = this.dialogsStorage.getAnyDialog(peerId, threadId) as ForumTopic | SavedDialog;\n dialog && virtual.set(threadId, dialog);\n }\n }\n\n const historyUpdated = this.handleDeletedMessages(\n peerId,\n this.getHistoryMessagesStorage(peerId),\n mids\n );\n\n const threadsStorages = Array.from(threadKeys).map((threadKey) => {\n const [peerId, mid] = threadKey.split('_');\n return this.getHistoryStorage(peerId.toPeerId(), +mid);\n });\n\n const historyStorages = [\n this.getHistoryStorage(peerId),\n ...threadsStorages\n ];\n historyStorages.forEach((historyStorage) => {\n for(const mid of historyUpdated.msgs) {\n historyStorage.history.delete(mid);\n }\n\n if(historyUpdated.count && historyStorage.count) {\n historyStorage.count = Math.max(0, historyStorage.count - historyUpdated.count);\n }\n });\n\n this.rootScope.dispatchEvent('history_delete', {peerId, msgs: historyUpdated.msgs});\n\n const dialogs: AnyDialog[] = [\n ...virtual.values()\n ];\n\n const dialog = this.getDialogOnly(peerId);\n if(dialog) {\n dialogs.unshift(dialog);\n }\n\n dialogs.forEach((dialog) => {\n const isTopic = isForumTopic(dialog);\n const isSaved = isSavedDialog(dialog);\n const _isDialog = isDialog(dialog);\n const affected = !!(historyUpdated.unreadMentions || historyUpdated.unread || historyUpdated.unreadReactions);\n const releaseUnreadCount = affected && this.dialogsStorage.prepareDialogUnreadCountModifying(dialog);\n\n if(!isSaved && historyUpdated.unread) {\n dialog.unread_count = Math.max(0, dialog.unread_count - historyUpdated.unread);\n }\n\n if(!isSaved && historyUpdated.unreadMentions) {\n dialog.unread_mentions_count = !dialog.unread_count ? 0 : Math.max(0, dialog.unread_mentions_count - historyUpdated.unreadMentions);\n }\n\n if(!isSaved && historyUpdated.unreadReactions) {\n dialog.unread_reactions_count = Math.max(0, dialog.unread_reactions_count - historyUpdated.unreadReactions);\n }\n\n if(affected) {\n releaseUnreadCount();\n\n if(!isSaved) { // ! WARNING, was `!isTopic` here\n this.rootScope.dispatchEvent('dialog_unread', {peerId, dialog});\n }\n }\n\n if(historyUpdated.msgs.has(dialog.top_message)) {\n const historyStorage = this.getHistoryStorage(dialog.peerId, _isDialog ? undefined : getDialogKey(dialog));\n const slice = historyStorage.history.first;\n if(slice.isEnd(SliceEnd.Bottom) && slice.length) {\n const mid = slice[0];\n const message = this.getMessageByPeer(peerId, mid);\n this.setDialogTopMessage(message, dialog);\n } else if(isTopic) {\n this.dialogsStorage.getForumTopicById(peerId, dialog.id);\n } else if(isSaved) {\n this.dialogsStorage.getSavedDialogById(dialog.savedPeerId);\n } else {\n this.reloadConversation(peerId);\n }\n }\n\n this.dialogsStorage.setDialogToState(dialog);\n });\n };\n\n private onUpdateChannel = (update: Update.updateChannel) => {\n const channelId = update.channel_id;\n const peerId = channelId.toPeerId(true);\n const channel = this.appChatsManager.getChat(channelId) as Chat.channel;\n\n const needDialog = this.appChatsManager.isInChat(channelId);\n\n const canViewHistory = !!getPeerActiveUsernames(channel)[0] || !channel.pFlags.left;\n const hasHistory = this.historiesStorage[peerId] !== undefined;\n\n if(canViewHistory !== hasHistory) {\n delete this.historiesStorage[peerId];\n this.rootScope.dispatchEvent('history_forbidden', peerId);\n }\n\n const dialog = this.getDialogOnly(peerId);\n if(!!dialog !== needDialog) {\n if(needDialog) {\n this.reloadConversation(peerId);\n } else {\n this.dialogsStorage.dropDialogOnDeletion(peerId);\n }\n }\n\n this.rootScope.dispatchEvent('channel_update', channelId);\n };\n\n private onUpdateChannelReload = (update: Update.updateChannelReload) => {\n const peerId = update.channel_id.toPeerId(true);\n\n // if(this.appPeersManager.isForum(peerId)) {\n // const cache = this.dialogsStorage.getForumTopicsCache(peerId);\n // if(cache.topics.size) {\n\n // }\n // }\n\n this.flushStoragesByPeerId(peerId);\n Promise.all([\n this.reloadConversation(peerId)\n ]).then(() => {\n this.rootScope.dispatchEvent('history_reload', peerId);\n });\n };\n\n private onUpdateChannelMessageViews = (update: Update.updateChannelMessageViews) => {\n const views = update.views;\n const peerId = update.channel_id.toPeerId(true);\n const mid = this.appMessagesIdsManager.generateMessageId(update.id, update.channel_id);\n const message = this.getMessageByPeer(peerId, mid) as Message.message;\n if(message?.views !== undefined && message.views < views) {\n this.modifyMessage(message, (message) => {\n message.views = views;\n });\n this.pushBatchUpdate('messages_views', this.batchUpdateViews, message.peerId + '_' + message.mid);\n }\n };\n\n private onUpdateServiceNotification = (update: Update.updateServiceNotification) => {\n // this.log('updateServiceNotification', update);\n if(update.pFlags?.popup) {\n this.rootScope.dispatchEvent('service_notification', update);\n return;\n }\n\n const fromId = SERVICE_PEER_ID;\n const peerId = fromId;\n const mid = this.generateTempMessageId(peerId);\n const message: Message.message = {\n _: 'message',\n id: mid,\n from_id: this.appPeersManager.getOutputPeer(fromId),\n peer_id: this.appPeersManager.getOutputPeer(peerId),\n pFlags: {unread: true},\n date: (update.inbox_date || tsNow(true)) + this.timeManager.getServerTimeOffset(),\n message: update.message,\n media: update.media,\n entities: update.entities\n };\n if(!this.appUsersManager.hasUser(fromId)) {\n this.appUsersManager.saveApiUsers([{\n _: 'user',\n id: fromId,\n pFlags: {verified: true},\n access_hash: '0',\n first_name: 'Telegram',\n phone: '42777'\n }]);\n }\n this.saveMessages([message], {isOutgoing: true});\n\n if(update.inbox_date) {\n this.pendingTopMsgs[peerId] = mid;\n this.onUpdateNewMessage({\n _: 'updateNewMessage',\n message,\n pts: undefined,\n pts_count: undefined\n });\n }\n };\n\n private onUpdatePinnedMessages = (update: Update.updatePinnedMessages | Update.updatePinnedChannelMessages) => {\n const channelId = update._ === 'updatePinnedChannelMessages' ? update.channel_id : undefined;\n const peerId = channelId ? channelId.toPeerId(true) : this.appPeersManager.getPeerId((update as Update.updatePinnedMessages).peer);\n\n const mids = update.messages.map((id) => this.appMessagesIdsManager.generateMessageId(id, channelId));\n const pinned = update.pFlags?.pinned;\n const storage = this.getHistoryMessagesStorage(peerId);\n const missingMessages = mids.filter((mid) => !storage.has(mid));\n const getMissingPromise = missingMessages.length && Promise.all(missingMessages.map((mid) => this.reloadMessages(peerId, mid))).catch(noop);\n callbackify(getMissingPromise, () => {\n let processMessage: (message: Message.message) => void;\n if(pinned) {\n processMessage = (message) => {\n message.pFlags.pinned = true;\n };\n } else {\n processMessage = (message) => {\n delete message.pFlags.pinned;\n };\n }\n\n for(const mid of mids) {\n const message = storage.get(mid) as Message.message;\n this.modifyMessage(message, (message) => {\n processMessage(message);\n }, storage);\n }\n\n delete this.pinnedMessages[this.getPinnedMessagesKey(peerId)];\n this.appStateManager.getState().then((state) => {\n delete state.hiddenPinnedMessages[peerId];\n this.rootScope.dispatchEvent('peer_pinned_messages', {peerId, mids, pinned});\n });\n });\n };\n\n private onUpdateNotifySettings = (update: Update.updateNotifySettings) => {\n const {peer, notify_settings} = update;\n const isTopic = peer._ === 'notifyForumTopic';\n const isPeerType = peer._ === 'notifyPeer' || isTopic;\n if(!isPeerType) {\n return;\n }\n\n const peerId = this.appPeersManager.getPeerId(peer.peer);\n const dialog = this.dialogsStorage.getAnyDialog(\n peerId,\n isTopic ? this.appMessagesIdsManager.generateMessageId(peer.top_msg_id, (peer.peer as Peer.peerChannel).channel_id) : undefined\n ) as Dialog | ForumTopic;\n if(!dialog) {\n return;\n }\n\n dialog.notify_settings = notify_settings;\n this.rootScope.dispatchEvent('dialog_notify_settings', dialog);\n this.dialogsStorage.setDialogToState(dialog);\n };\n\n private onUpdateNewScheduledMessage = (update: Update.updateNewScheduledMessage) => {\n const message = update.message as MyMessage;\n const peerId = this.getMessagePeer(message);\n\n const storage = this.scheduledMessagesStorage[peerId];\n if(!storage) {\n return;\n }\n\n const channelId = this.appPeersManager.isChannel(peerId) ? peerId.toChatId() : undefined;\n const mid = this.appMessagesIdsManager.generateMessageId(message.id, channelId);\n\n const oldMessage = this.getMessageFromStorage(storage, mid);\n this.saveMessages([message], {storage, isScheduled: true});\n const newMessage = this.getMessageFromStorage(storage, mid);\n\n if(oldMessage) {\n this.handleEditedMessage(oldMessage, newMessage, storage);\n this.rootScope.dispatchEvent('message_edit', {storageKey: storage.key, peerId, mid: message.mid, message});\n } else {\n const pendingMessage = this.checkPendingMessage(message);\n if(!pendingMessage) {\n this.rootScope.dispatchEvent('scheduled_new', message as Message.message);\n }\n }\n };\n\n private onUpdateDeleteScheduledMessages = (update: Update.updateDeleteScheduledMessages) => {\n const channelId = (update.peer as Peer.peerChannel).channel_id;\n const peerId = this.appPeersManager.getPeerId(update.peer);\n\n const storage = this.scheduledMessagesStorage[peerId];\n if(storage) {\n const mids = update.messages.map((id) => this.appMessagesIdsManager.generateMessageId(id, channelId));\n this.handleDeletedMessages(peerId, storage, mids);\n\n this.rootScope.dispatchEvent('scheduled_delete', {peerId, mids});\n }\n };\n\n private onUpdateMessageExtendedMedia = (update: Update.updateMessageExtendedMedia) => {\n const channelId = (update.peer as Peer.peerChannel).channel_id;\n const peerId = this.appPeersManager.getPeerId(update.peer);\n const mid = this.appMessagesIdsManager.generateMessageId(update.msg_id, channelId);\n const storage = this.getHistoryMessagesStorage(peerId);\n if(!storage.has(mid)) {\n // this.fixDialogUnreadMentionsIfNoMessage(peerId);\n return;\n }\n\n const message = this.getMessageFromStorage(storage, mid) as Message.message;\n const messageMedia = message.media as MessageMedia.messageMediaInvoice | MessageMedia.messageMediaPaidMedia;\n const b = messageMedia.extended_media;\n const isArray = Array.isArray(b);\n const before = isArray ? b : [b];\n if(before.some((extendedMedia) => extendedMedia?._ === 'messageExtendedMedia')) {\n return;\n }\n\n messageMedia.extended_media = isArray ? update.extended_media : update.extended_media[0];\n this.onUpdateEditMessage({\n _: 'updateEditMessage',\n message,\n pts: 0,\n pts_count: 0\n });\n };\n\n private onUpdateTranscribedAudio = (update: Update.updateTranscribedAudio) => {\n const channelId = (update.peer as Peer.peerChannel).channel_id;\n const peerId = this.appPeersManager.getPeerId(update.peer);\n const text = update.text;\n const mid = this.appMessagesIdsManager.generateMessageId(update.msg_id, channelId);\n\n this.rootScope.dispatchEvent('message_transcribed', {peerId, mid, text, pending: update.pFlags.pending});\n };\n\n public setDialogToStateIfMessageIsTop(message: MyMessage) {\n if(this.isMessageIsTopMessage(message)) {\n this.dialogsStorage.setDialogToState(this.getDialogOnly(message.peerId));\n }\n }\n\n public isMessageIsTopMessage(message: MyMessage) {\n const dialog = this.getDialogOnly(message.peerId);\n return dialog && dialog.top_message === message.mid;\n }\n\n private updateMessageRepliesIfNeeded(threadMessage: MyMessage, add: boolean) {\n try { // * на всякий случай, скорее всего это не понадобится\n const threadKey = this.getThreadKey(threadMessage);\n if(threadKey) {\n const repliesKey = this.threadsToReplies[threadKey];\n if(repliesKey) {\n const [peerId, mid] = repliesKey.split('_');\n\n this.updateMessage(peerId.toPeerId(), +mid, 'replies_updated');\n } else if(threadMessage.reply_to) { // * regular group replies\n const threadId = +threadKey.split('_').pop();\n const originalMessage = this.getMessageByPeer(threadMessage.peerId, threadId) as Message.message;\n const replies = originalMessage?.replies;\n if(replies) {\n this.modifyMessage(originalMessage, (message) => {\n const replies = message.replies;\n replies.replies = Math.max(0, replies.replies + (add ? 1 : -1));\n this.rootScope.dispatchEvent('replies_short_update', message);\n });\n }\n }\n }\n } catch(err) {\n this.log.error('incrementMessageReplies err', err, threadMessage);\n }\n }\n\n private getThreadKey(threadMessage: MyMessage) {\n let threadKey = '';\n const peerId = threadMessage?.peerId;\n if(!peerId) {\n return threadKey;\n }\n\n if(peerId.isAnyChat() || (threadMessage as Message.message).saved_peer_id) {\n const threadId = getMessageThreadId(threadMessage, this.appChatsManager.isForum(peerId.toChatId()));\n if(threadId) {\n threadKey = peerId + '_' + threadId;\n }\n }\n\n return threadKey;\n }\n\n public updateMessage(peerId: PeerId, mid: number, broadcastEventName?: 'replies_updated'): Promise {\n const promise: Promise = this.reloadMessages(peerId, mid, true).then(() => {\n const message = this.getMessageByPeer(peerId, mid) as Message.message;\n if(!message) {\n return;\n }\n\n if(broadcastEventName) {\n this.rootScope.dispatchEvent(broadcastEventName, message);\n }\n\n return message;\n });\n\n return promise;\n }\n\n private checkPendingMessage(message: MyMessage) {\n const randomId = this.pendingByMessageId[message.mid];\n let pendingMessage: ReturnType;\n if(randomId) {\n const pendingData = this.pendingByRandomId[randomId];\n if(pendingMessage = this.finalizePendingMessage(randomId, message)) {\n this.rootScope.dispatchEvent('history_update', {\n storageKey: pendingData.storage.key,\n message,\n sequential: pendingData.sequential\n });\n }\n\n delete this.pendingByMessageId[message.mid];\n }\n\n return pendingMessage;\n }\n\n public mutePeer(options: {peerId: PeerId, muteUntil: number, threadId?: number}) {\n if(!(options = this.appNotificationsManager.validatePeerSettings(options))) {\n return;\n }\n\n const {peerId, muteUntil, threadId} = options;\n const settings: InputPeerNotifySettings = {\n _: 'inputPeerNotifySettings'\n };\n\n settings.mute_until = muteUntil;\n\n const peer = this.appPeersManager.getInputPeerById(peerId);\n return this.appNotificationsManager.updateNotifySettings(threadId ? {\n _: 'inputNotifyForumTopic',\n peer,\n top_msg_id: getServerMessageId(threadId)\n } : {\n _: 'inputNotifyPeer',\n peer\n }, settings);\n }\n\n public togglePeerMute({peerId, mute, threadId}: {peerId: PeerId, mute?: boolean, threadId?: number}) {\n if(mute === undefined) {\n mute = !this.appNotificationsManager.isPeerLocalMuted({peerId, respectType: false, threadId});\n }\n\n return this.mutePeer({peerId, muteUntil: mute ? MUTE_UNTIL : 0, threadId});\n }\n\n private findPeerIdByMids(mids: number[]) {\n for(let length = mids.length, i = length - 1; i >= 0; --i) {\n const mid = mids[i];\n const message = this.getMessageById(mid);\n if(message) {\n return message.peerId;\n }\n }\n }\n\n public canSendToPeer(peerId: PeerId, threadId?: number, action: ChatRights = 'send_messages') {\n if(this.appPeersManager.isPeerRestricted(peerId)) {\n return false;\n }\n\n if(peerId.isAnyChat()) {\n const chatId = peerId.toChatId();\n if(threadId) {\n const topic = this.dialogsStorage.getForumTopic(peerId, threadId);\n if(topic?.pFlags?.closed && !this.dialogsStorage.canManageTopic(topic)) {\n return false;\n }\n }\n\n return this.appChatsManager.hasRights(chatId, action, undefined, !!threadId);\n } else {\n return this.appUsersManager.canSendToUser(peerId);\n }\n }\n\n public finalizePendingMessage(randomId: Long, finalMessage: MyMessage) {\n const pendingData = this.pendingByRandomId[randomId];\n if(!pendingData) {\n return;\n }\n\n const {peerId, tempId, threadId, storage} = pendingData;\n\n [\n this.getHistoryStorage(peerId),\n threadId ? this.getHistoryStorage(peerId, threadId) : undefined\n ]\n .filter(Boolean)\n .forEach((storage) => {\n storage.history.delete(tempId);\n });\n\n // this.log('pending', randomID, historyStorage.pending)\n\n const tempMessage: MyMessage = this.getMessageFromStorage(storage, tempId);\n if(tempMessage) {\n this.updateMessageContextForDeletion(tempMessage, true, finalMessage.mid);\n delete finalMessage.pFlags.is_outgoing;\n delete finalMessage.pending;\n delete finalMessage.error;\n delete finalMessage.random_id;\n delete finalMessage.send;\n }\n\n this.rootScope.dispatchEvent('messages_pending');\n\n delete this.pendingByRandomId[randomId];\n\n this.finalizePendingMessageCallbacks(storage, tempId, finalMessage);\n\n return tempMessage;\n }\n\n public finalizePendingMessageCallbacks(storage: MessagesStorage, tempId: number, message: MyMessage) {\n const callbacks = this.tempFinalizeCallbacks[tempId];\n // this.log.warn(callbacks, tempId);\n if(callbacks !== undefined) {\n for(const name in callbacks) {\n const {deferred, callback} = callbacks[name];\n // this.log(`finalizePendingMessageCallbacks: will invoke ${name} callback`);\n callback(message).then(deferred.resolve.bind(deferred), deferred.reject.bind(deferred));\n }\n\n delete this.tempFinalizeCallbacks[tempId];\n }\n\n // set cached url to media\n if((message as Message.message).media) {\n assumeType(message);\n const {photo: newPhoto, document: newDoc} = message.media as any;\n const newExtendedMedia = (message.media as MessageMedia.messageMediaPaidMedia).extended_media as MessageExtendedMedia.messageExtendedMedia[];\n\n const updatePhoto = (newPhoto: Photo.photo, photoId: string) => {\n const photo = this.appPhotosManager.getPhoto(photoId);\n if(!photo) {\n return;\n }\n\n const newPhotoSize = newPhoto.sizes[newPhoto.sizes.length - 1];\n const oldCacheContext = this.thumbsStorage.getCacheContext(photo, THUMB_TYPE_FULL);\n this.thumbsStorage.setCacheContextURL(newPhoto, newPhotoSize.type, oldCacheContext.url, oldCacheContext.downloaded);\n\n // const photoSize = newPhoto.sizes[newPhoto.sizes.length - 1] as PhotoSize.photoSize;\n // const downloadOptions = getPhotoDownloadOptions(newPhoto, photoSize);\n // const fileName = getFileNameByLocation(downloadOptions.location);\n // this.appDownloadManager.fakeDownload(fileName, oldCacheContext.url);\n };\n\n const updateDocument = (newDoc: Document.document, docId: DocId) => {\n const oldDoc = this.appDocsManager.getDoc(docId);\n if(!oldDoc) {\n return;\n }\n\n const oldCacheContext = this.thumbsStorage.getCacheContext(oldDoc);\n if(\n /* doc._ !== 'documentEmpty' && */\n oldDoc.type &&\n oldDoc.type !== 'sticker' &&\n oldDoc.mime_type !== 'image/gif' &&\n oldCacheContext.url\n ) {\n this.thumbsStorage.setCacheContextURL(newDoc, undefined, oldCacheContext.url, oldCacheContext.downloaded);\n\n // const fileName = getDocumentInputFileName(newDoc);\n // this.appDownloadManager.fakeDownload(fileName, oldCacheContext.url);\n }\n };\n\n if(newPhoto) {\n updatePhoto(newPhoto, '' + tempId);\n } else if(newDoc) {\n updateDocument(newDoc, '' + tempId);\n } else if((message.media as MessageMedia.messageMediaPoll).poll) {\n delete this.appPollsManager.polls[tempId];\n delete this.appPollsManager.results[tempId];\n } else if(newExtendedMedia) {\n const mediaTempId = this.mediaTempMap[tempId];\n newExtendedMedia.forEach((extendedMedia, idx) => {\n const {photo} = extendedMedia.media as MessageMedia.messageMediaPhoto;\n const {document} = extendedMedia.media as MessageMedia.messageMediaDocument;\n const id = '' + (mediaTempId + idx);\n if(photo) updatePhoto(photo as Photo.photo, id);\n else if(document) updateDocument(document as Document.document, id);\n });\n }\n }\n\n const tempMessage = this.getMessageFromStorage(storage, tempId);\n this.deleteMessageFromStorage(storage, tempId);\n\n if(!(tempMessage as Message.message).reply_markup && (message as Message.message).reply_markup) {\n setTimeout(() => { // TODO: refactor it to normal buttons adding\n if(!this.getMessageFromStorage(storage, message.mid)) {\n return;\n }\n\n this.rootScope.dispatchEvent('message_edit', {storageKey: storage.key, peerId: message.peerId, mid: message.mid, message});\n }, 0);\n }\n\n this.handleReleasingMessage(tempMessage, storage);\n this.onMessageModification(message, storage); // * mirror it\n\n this.rootScope.dispatchEvent('message_sent', {storageKey: storage.key, tempId, tempMessage, mid: message.mid, message});\n }\n\n public incrementMaxSeenId(maxId: number) {\n if(!maxId || !(!this.maxSeenId || maxId > this.maxSeenId)) {\n return false;\n }\n\n this.maxSeenId = maxId;\n this.appStateManager.pushToState('maxSeenMsgId', maxId);\n\n this.apiManager.invokeApi('messages.receivedMessages', {\n max_id: getServerMessageId(maxId)\n });\n }\n\n public async getMessageReactionsListAndReadParticipants(\n message: Message.message,\n limit?: number,\n reaction?: Reaction,\n offset?: string,\n skipReadParticipants?: boolean,\n skipReactionsList?: boolean\n ) {\n const emptyMessageReactionsList = {\n reactions: [] as MessagePeerReaction[],\n count: 0,\n next_offset: undefined as string\n };\n\n const canViewMessageReadParticipants = await this.canViewMessageReadParticipants(message);\n limit ??= canViewMessageReadParticipants ? 100 : 50;\n\n return Promise.all([\n canViewMessageReadParticipants && !reaction && !skipReadParticipants ? this.getMessageReadParticipants(message.peerId, message.mid).catch(() => [] as ReadParticipantDate[]) : [] as ReadParticipantDate[],\n\n message.reactions?.recent_reactions?.length && !skipReactionsList ? this.appReactionsManager.getMessageReactionsList(message.peerId, message.mid, limit, reaction, offset).catch((err) => emptyMessageReactionsList) : emptyMessageReactionsList\n ]).then(([readParticipantDates, messageReactionsList]) => {\n const filteredReadParticipants = readParticipantDates.slice();\n forEachReverse(filteredReadParticipants, ({user_id}, idx, arr) => {\n if(messageReactionsList.reactions.some((reaction) => this.appPeersManager.getPeerId(reaction.peer_id) === user_id.toPeerId())) {\n arr.splice(idx, 1);\n }\n });\n\n let combined: {\n peerId: PeerId,\n date?: number,\n reaction?: Reaction\n }[] = messageReactionsList.reactions.map((reaction) => {\n return {\n peerId: this.appPeersManager.getPeerId(reaction.peer_id),\n reaction: reaction.reaction,\n date: reaction.date\n };\n });\n\n combined = combined.concat(filteredReadParticipants.map(({user_id, date}) => ({date, peerId: user_id.toPeerId()})));\n\n return {\n reactions: messageReactionsList.reactions,\n reactionsCount: messageReactionsList.count,\n readParticipantDates: readParticipantDates,\n combined: combined,\n nextOffset: messageReactionsList.next_offset\n };\n });\n }\n\n public getMessageReadParticipants(peerId: PeerId, mid: number) {\n return this.apiManager.invokeApiSingle('messages.getMessageReadParticipants', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(mid)\n }).then((readParticipantDates) => { // ! convert long to number\n readParticipantDates.forEach((readParticipantDate) => readParticipantDate.user_id = readParticipantDate.user_id.toUserId());\n return readParticipantDates;\n });\n }\n\n public getOutboxReadDate(peerId: PeerId, mid: number) {\n return this.apiManager.invokeApiSingle('messages.getOutboxReadDate', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(mid)\n });\n }\n\n public async canViewMessageReadParticipants(message: Message) {\n if(\n message?._ !== 'message' ||\n message.pFlags.is_outgoing ||\n !message.pFlags.out ||\n message.pFlags.unread ||\n message.peerId === this.appPeersManager.peerId ||\n this.appPeersManager.isBroadcast(message.peerId)\n ) {\n return false;\n }\n\n const appConfig = await this.apiManager.getAppConfig();\n const diff = tsNow(true) - message.date;\n if(message.peerId.isUser()) {\n const userFull = await this.appProfileManager.getProfile(message.peerId.toUserId());\n return diff < appConfig.pm_read_date_expire_period && !userFull.pFlags.read_dates_private;\n }\n\n const chat = this.appChatsManager.getChat(message.peerId.toChatId()) as Chat.chat | Chat.channel;\n return chat.participants_count <= appConfig.chat_read_mark_size_threshold &&\n diff < appConfig.chat_read_mark_expire_period;\n }\n\n public incrementMessageViews(peerId: PeerId, mids: number[]) {\n if(!mids.length) {\n return;\n }\n\n return this.apiManager.invokeApiSingle('messages.getMessagesViews', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: mids.map((mid) => getServerMessageId(mid)),\n increment: true\n }).then((views) => {\n this.appPeersManager.saveApiPeers(views);\n\n for(let i = 0, length = mids.length; i < length; ++i) {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateChannelMessageViews',\n channel_id: peerId.toChatId(),\n id: mids[i],\n views: views.views[i].views\n });\n }\n });\n }\n\n private notifyAboutMessage(message: MyMessage, options: Partial<{\n fwdCount: number,\n peerReaction: MessagePeerReaction,\n peerTypeNotifySettings: PeerNotifySettings\n }> = {}) {\n const peerId = this.getMessagePeer(message);\n\n if(this.appPeersManager.isPeerRestricted(peerId)) {\n return;\n }\n\n const tabs = appTabsManager.getTabs();\n let tab = tabs.find((tab) => {\n const {chatPeerIds} = tab.state;\n return chatPeerIds[chatPeerIds.length - 1] === peerId;\n });\n\n if(!tab && tabs.length) {\n tabs.sort((a, b) => a.state.idleStartTime - b.state.idleStartTime);\n tab = !tabs[0].state.idleStartTime ? tabs[0] : tabs[tabs.length - 1];\n }\n\n const port = MTProtoMessagePort.getInstance();\n port.invokeVoid('notificationBuild', {\n message,\n ...options\n }, tab?.source);\n }\n\n public getScheduledMessagesStorage(peerId: PeerId) {\n return this.scheduledMessagesStorage[peerId] ??= this.createMessageStorage(peerId, 'scheduled');\n }\n\n public getScheduledMessageByPeer(peerId: PeerId, mid: number) {\n return this.getMessageFromStorage(this.getScheduledMessagesStorage(peerId), mid);\n }\n\n public getScheduledMessages(peerId: PeerId) {\n if(!this.canSendToPeer(peerId)) return;\n\n const storage = this.getScheduledMessagesStorage(peerId);\n if(storage.size) {\n return [...storage.keys()];\n }\n\n return this.apiManager.invokeApiSingle('messages.getScheduledHistory', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n hash: ''\n }).then((historyResult) => {\n if(historyResult._ !== 'messages.messagesNotModified') {\n this.appUsersManager.saveApiUsers(historyResult.users);\n this.appChatsManager.saveApiChats(historyResult.chats);\n\n const storage = this.getScheduledMessagesStorage(peerId);\n this.saveMessages(historyResult.messages, {storage, isScheduled: true});\n return [...storage.keys()];\n }\n\n return [];\n });\n }\n\n public sendScheduledMessages(peerId: PeerId, mids: number[]) {\n return this.apiManager.invokeApi('messages.sendScheduledMessages', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: mids.map((mid) => getServerMessageId(mid))\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n\n public deleteScheduledMessages(peerId: PeerId, mids: number[]) {\n return this.apiManager.invokeApi('messages.deleteScheduledMessages', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: mids.map((mid) => getServerMessageId(mid))\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n\n public getMessageWithReplies(message: Message.message) {\n return getMainGroupedMessage(this.filterMessages(message, (message) => !!(message as Message.message).replies) as Message.message[]);\n }\n\n public getMessageWithCommentReplies(message: Message.message) {\n if(message.peerId !== REPLIES_PEER_ID) {\n message = this.getMessageWithReplies(message);\n const replies = message?.replies;\n if(!(replies && replies.pFlags.comments && replies.channel_id.toChatId() !== REPLIES_HIDDEN_CHANNEL_ID)) {\n return;\n }\n }\n\n return message;\n }\n\n public isFetchIntervalNeeded(peerId: PeerId) {\n return peerId.isAnyChat() && (\n !this.appChatsManager.isInChat(peerId.toChatId()) ||\n this.appChatsManager.isForum(peerId.toChatId())\n );\n }\n\n // public async getNewHistory(peerId: PeerId, threadId?: number) {\n // if(!this.isFetchIntervalNeeded(peerId)) {\n // return;\n // }\n\n // const historyStorage = this.getHistoryStorage(peerId, threadId);\n // const slice = historyStorage.history.slice;\n // if(!slice.isEnd(SliceEnd.Bottom)) {\n // return;\n // }\n\n // delete historyStorage.maxId;\n // slice.unsetEnd(SliceEnd.Bottom);\n\n // // if there is no id - then request by first id because cannot request by id 0 with backLimit\n // const historyResult = await this.getHistory({peerId, offsetId: slice[0] ?? 1, limit: 0, backLimit: 50, threadId});\n // for(let i = 0, length = historyResult.history.length; i < length; ++i) {\n // this.handleNewMessage(this.getMessageByPeer(peerId, historyResult.history[i]));\n // }\n\n // return {isBottomEnd: historyStorage.history.slice.isEnd(SliceEnd.Bottom)};\n // }\n\n public getMigration(peerId: PeerId) {\n const next = this.migratedFromTo[peerId];\n const prev = this.migratedToFrom[peerId];\n return next || prev ? {next, prev} : undefined;\n }\n\n public getHistoryType(peerId: PeerId, threadId?: number) {\n if(threadId) {\n if(peerId.isUser()) {\n return HistoryType.Saved;\n } else if(this.appPeersManager.isForum(peerId)) {\n return HistoryType.Topic;\n } else {\n return HistoryType.Thread;\n }\n } else {\n return HistoryType.Chat;\n }\n }\n\n public processRequestHistoryOptions(options: RequestHistoryOptions & {backLimit?: number, historyStorage?: HistoryStorage}) {\n options.offsetId ??= 0;\n options.historyType ??= this.getHistoryType(options.peerId, options.threadId);\n options.searchType ??= getSearchType(options);\n if(options.savedReaction) {\n options.savedReaction = options.savedReaction.filter(Boolean);\n if(!options.savedReaction.length) {\n delete options.savedReaction;\n } else {\n options.inputFilter ??= {_: 'inputMessagesFilterEmpty'};\n }\n }\n\n if(options.addOffset === undefined) {\n options.addOffset = 0;\n\n if(options.backLimit) {\n options.addOffset = -options.backLimit;\n options.limit += options.backLimit;\n }\n }\n\n if(TEST_NO_SAVED && options.historyType === HistoryType.Saved) {\n throw makeError('SAVED_DIALOGS_UNSUPPORTED');\n }\n\n options.historyStorage ??= options.searchType ?\n this.getSearchStorage(options) :\n this.getHistoryStorage(options.peerId, options.threadId);\n\n return options;\n }\n\n /**\n * * https://core.telegram.org/api/offsets, offset_id is inclusive\n */\n public getHistory(options: RequestHistoryOptions & {\n backLimit?: number,\n historyStorage?: HistoryStorage\n }): Promise | HistoryResult {\n this.processRequestHistoryOptions(options);\n\n const {historyStorage, limit, addOffset, offsetId, offsetPeerId, needRealOffsetIdOffset} = options;\n\n if(this.appPeersManager.isPeerRestricted(options.peerId)) {\n const first = historyStorage.history.first;\n first.setEnd(SliceEnd.Both);\n\n const slice = first.slice(0, 0);\n slice.setEnd(SliceEnd.Both);\n\n return {\n count: 0,\n history: Array.from(slice),\n isEnd: slice.getEnds(),\n offsetIdOffset: 0\n };\n }\n\n const getPossibleSlice = () => {\n let haveSlice: ReturnType['sliceMe']>\n if(historyStorage.searchHistory) {\n haveSlice = historyStorage.searchHistory.sliceMe(offsetId ? `${offsetPeerId}_${offsetId}` : undefined, addOffset, limit);\n } else {\n haveSlice = historyStorage.history.sliceMe(offsetId, addOffset, limit);\n }\n\n return haveSlice;\n };\n\n const haveSlice = getPossibleSlice();\n if(\n haveSlice &&\n (haveSlice.slice.length === limit || (haveSlice.fulfilled & SliceEnd.Both) === SliceEnd.Both) &&\n (!needRealOffsetIdOffset || haveSlice.slice.isEnd(SliceEnd.Bottom))\n ) {\n return {\n count: historyStorage.count,\n history: Array.from(haveSlice.slice),\n isEnd: haveSlice.slice.getEnds(),\n offsetIdOffset: haveSlice.offsetIdOffset,\n messages: options.isCacheableSearch ? haveSlice.slice.map((str) => this.getMessageByPeer(+str.split('_')[0], +str.split('_')[1])) : undefined\n };\n }\n\n return this.fillHistoryStorage(\n options as Modify\n ).then((historyResult) => {\n if(options.searchType === 'uncached') {\n // const migration = this.getMigration(options.peerId);\n // if(migration) {\n // const excludeMid = this.appMessagesIdsManager.generateMessageId(1, migration.next || options.peerId);\n // const idx = f.indexOf(excludeMid);\n // if(idx !== -1) {\n // f.splice(idx, 1);\n // }\n // }\n\n const mids = historyResult.messages.map((message) => message.mid);\n\n return {\n count: (historyResult as MessagesMessages.messagesMessagesSlice).count ?? historyStorage.count,\n history: mids,\n isEnd: historyStorage.history.slice.getEnds(),\n offsetIdOffset: (historyResult as MessagesMessages.messagesMessagesSlice)?.offset_id_offset || 0,\n nextRate: (historyResult as MessagesMessages.messagesMessagesSlice)?.next_rate,\n messages: historyResult.messages as MyMessage[]\n };\n }\n\n const slice = getPossibleSlice();\n const f = slice?.slice || historyStorage.history.constructSlice();\n const isEnd = f.getEnds();\n let offsetIdOffset: number;\n if(needRealOffsetIdOffset) {\n offsetIdOffset = (historyResult as MessagesMessages.messagesMessagesSlice).offset_id_offset || 0;\n } else {\n offsetIdOffset = slice?.offsetIdOffset || historyStorage.count;\n }\n\n return {\n count: historyStorage.count,\n history: Array.from(f),\n isEnd,\n offsetIdOffset,\n messages: options.isCacheableSearch ? f.map((v) => this.getMessageByPeer(v.split('_')[0].toPeerId(), +v.split('_')[1])) : undefined\n };\n });\n }\n\n public isHistoryResultEnd({\n historyResult,\n limit,\n addOffset,\n offsetId,\n offsetPeerId,\n inputFilter,\n peerId\n }: {\n historyResult: Exclude,\n } & Pick) {\n const {offset_id_offset, messages} = historyResult as MessagesMessages.messagesMessagesSlice;\n\n const mids = messages.map(({mid}) => mid);\n\n const count = (historyResult as MessagesMessages.messagesMessagesSlice).count || messages.length;\n\n const topWasMeantToLoad = addOffset < 0 ? limit + addOffset : limit;\n const bottomWasMeantToLoad = Math.abs(addOffset);\n\n // * means global search\n // * have to reset offsetId, because messages aren't sorted and can be loaded only from the top\n if(!peerId && inputFilter) {\n offsetId = 0;\n }\n\n let offsetIdOffset = offset_id_offset;\n let isTopEnd = false, isBottomEnd = !offsetId;\n let topLoaded = messages.length, bottomLoaded = 0;\n let isOffsetIncluded = false;\n\n const serverOffsetId = offsetId && getServerMessageId(offsetId);\n if(serverOffsetId) {\n let i = 0;\n for(const length = mids.length; i < length; ++i) {\n if(offsetId > mids[i]) {\n break;\n }\n }\n\n isOffsetIncluded = mids.includes(offsetId);\n topLoaded = messages.length - i;\n bottomLoaded = i;\n }\n\n // offsetIdOffset = undefined;\n\n // if(offsetIdOffset === undefined && !bottomWasMeantToLoad) {\n // offsetIdOffset = 0;\n // }\n\n if(offsetIdOffset !== undefined) {\n isTopEnd = offsetIdOffset >= (count - topWasMeantToLoad) || count < topWasMeantToLoad;\n isBottomEnd = !offsetIdOffset || (addOffset < 0 && (offsetIdOffset + addOffset) <= 0);\n } else if(serverOffsetId) {\n if(topWasMeantToLoad) isTopEnd = topLoaded < topWasMeantToLoad;\n if(bottomWasMeantToLoad) isBottomEnd = bottomLoaded < bottomWasMeantToLoad;\n\n if(isTopEnd || isBottomEnd) {\n offsetIdOffset = isTopEnd ? count - topLoaded : bottomLoaded - +isOffsetIncluded;\n }\n } else if(messages.length >= count) {\n isTopEnd = true;\n isBottomEnd = true;\n }\n\n offsetIdOffset ??= 0;\n\n return {\n count,\n offsetIdOffset,\n isTopEnd,\n isBottomEnd,\n mids,\n topWasMeantToLoad,\n bottomWasMeantToLoad,\n topLoaded,\n bottomLoaded\n };\n }\n\n public mergeHistoryResult(options: RequestHistoryOptions & {\n slicedArray: SlicedArray,\n historyResult: Parameters[0]['historyResult'],\n historyStorage?: HistoryStorage\n }) {\n const {\n slicedArray,\n historyResult,\n offsetId,\n addOffset,\n peerId,\n historyStorage\n } = options;\n\n const searchSlicedArray = historyStorage?.searchHistory;\n const {messages} = historyResult as MessagesMessages.messagesMessagesSlice;\n const isEnd = this.isHistoryResultEnd(options);\n const {count, offsetIdOffset, mids} = isEnd;\n const migration = this.getMigration(peerId);\n\n if(migration && historyStorage && historyStorage.type !== 'replies') {\n if(migration.prev) {\n isEnd.isTopEnd = false;\n } else if(migration.next) {\n if(isEnd.isBottomEnd) {\n mids.unshift(this.appMessagesIdsManager.generateMessageId(1, migration.next.toChatId()));\n isEnd.isBottomEnd = false;\n }\n }\n }\n\n // * add bound manually.\n // * offset_id will be inclusive only if there is 'add_offset' <= -1 (-1 - will only include the 'offset_id')\n // * check that offset_id is not 0\n if(\n offsetId &&\n getServerMessageId(offsetId) &&\n !mids.includes(offsetId) &&\n offsetIdOffset < count &&\n (addOffset || 0) >= 0 && // ! warning\n !searchSlicedArray\n ) {\n let i = 0;\n for(const length = mids.length; i < length; ++i) {\n if(offsetId > mids[i]) {\n break;\n }\n }\n\n mids.splice(i, 0, offsetId);\n }\n\n let slice: Slice;\n if(searchSlicedArray) {\n let full = messages.map((message) => `${(message as Message.message).peerId}_${message.mid}`) as `${PeerId}_${number}`[];\n full = full.filter((str) => !searchSlicedArray.first.includes(str));\n slice = searchSlicedArray.insertSlice(full);\n } else {\n slice = slicedArray.insertSlice(mids) || slicedArray.slice;\n }\n\n if(isEnd.isTopEnd) {\n slice.setEnd(SliceEnd.Top);\n }\n\n if(isEnd.isBottomEnd) {\n slice.setEnd(SliceEnd.Bottom);\n }\n\n return {slice, mids, messages, ...isEnd};\n }\n\n private async fillHistoryStorage(options: RequestHistoryOptions & {\n historyStorage: HistoryStorage,\n recursion?: boolean\n }) {\n const {\n offsetId,\n historyStorage,\n inputFilter,\n recursion // save before setting\n } = options;\n\n options.recursion = true;\n\n let {peerId} = options;\n\n const wasMaxId = historyStorage.maxId;\n const middleware = this.middleware.get();\n let migration = this.getMigration(peerId);\n\n let requestPeerId = peerId;\n if(offsetId && migration?.prev && getServerMessageId(offsetId) === offsetId) {\n requestPeerId = migration.prev;\n }\n\n peerId = options.peerId = this.appPeersManager.getPeerMigratedTo(peerId) || peerId;\n\n const isRequestingLegacy = requestPeerId !== peerId;\n const isRequestingGlobalCacheable = options.searchType === 'cached' && options.isCacheableSearch;\n if(isRequestingGlobalCacheable && historyStorage.nextRate) {\n const last = historyStorage.searchHistory.last;\n const [peerId, mid] = last[last.length - 1].split('_');\n const lastMessage = this.getMessageByPeer(peerId.toPeerId(), +mid) as MyMessage;\n options.offsetId = lastMessage.mid;\n options.offsetPeerId = peerId.toPeerId();\n options.nextRate = historyStorage.nextRate;\n }\n\n const historyResult = await this.requestHistory({\n ...options,\n peerId: requestPeerId\n });\n\n if(!middleware()) {\n return;\n }\n\n if(isRequestingGlobalCacheable) {\n historyStorage.nextRate = (historyResult as MessagesMessages.messagesMessagesSlice).next_rate;\n }\n\n const mergedResult = this.mergeHistoryResult({\n ...options,\n slicedArray: historyStorage.history,\n historyResult,\n peerId: requestPeerId\n });\n\n const {\n count,\n isBottomEnd,\n isTopEnd,\n slice,\n messages,\n topWasMeantToLoad,\n bottomWasMeantToLoad,\n topLoaded,\n bottomLoaded\n } = mergedResult;\n\n if(!isRequestingLegacy) {\n historyStorage.count = count;\n }\n\n if(!inputFilter) for(let i = 0, length = messages.length; i < length; ++i) {\n const message = messages[i] as MyMessage;\n if(this.mergeReplyKeyboard(historyStorage, message)) {\n this.rootScope.dispatchEvent('history_reply_markup', {peerId});\n }\n }\n\n if(!inputFilter && isBottomEnd) {\n const newMaxId = slice[0];\n\n if(historyStorage.maxId === wasMaxId) {\n const first = historyStorage.history.first;\n if(first !== slice) {\n historyStorage.history.deleteSlice(first);\n }\n\n if(historyStorage.maxId !== newMaxId) {\n historyStorage.maxId = slice[0]; // ! WARNING\n\n this.reloadConversation(peerId); // when top_message is deleted but cached\n }\n }\n }\n\n // * load grouped missing messages\n const firstMessage = messages[0] as Message.message;\n const lastMessage = messages[messages.length - 1] as Message.message;\n\n if(!inputFilter && !isBottomEnd && firstMessage?.grouped_id) {\n await this.getHistory({\n ...options,\n offsetId: firstMessage.mid,\n limit: 20,\n addOffset: -10\n });\n\n if(!middleware()) {\n return;\n }\n }\n\n if(!inputFilter && !isTopEnd && lastMessage?.grouped_id && lastMessage.grouped_id !== firstMessage?.grouped_id) {\n await this.getHistory({\n ...options,\n offsetId: lastMessage.mid,\n limit: 20,\n addOffset: -10\n });\n\n if(!middleware()) {\n return;\n }\n }\n // * grouped end\n\n if(options.threadId) {\n if(isTopEnd && options.historyType === HistoryType.Thread) {\n const last = historyStorage.history.last;\n const firstMessage = this.getMessageByPeer(peerId, options.threadId/* last[last.length - 1] */) as Message.message;\n const message = this.getMessageWithReplies(firstMessage);\n const threadServiceMid = this.generateThreadServiceStartMessage(message);\n const mids = this.getMidsByMessage(message);\n const addSlice = [\n threadServiceMid,\n ...mids.sort((a, b) => b - a)\n ];\n\n // * shouldn't happen, but just in case\n forEachReverse(addSlice, (mid, idx, arr) => {\n if(last.includes(mid)) {\n arr.splice(idx, 1);\n }\n });\n\n const lastLength = last.length;\n if(last.isEnd(SliceEnd.Top) && lastLength) {\n addSlice.unshift(last[lastLength - 1]);\n }\n\n historyStorage.history.insertSlice(addSlice);\n\n this.log('inserted thread service start message', peerId, options.threadId, threadServiceMid);\n }\n\n return historyResult;\n }\n\n // * support migrated chats\n // * if found migrated chat during the load\n migration ??= this.getMigration(peerId);\n\n if(migration?.prev && topWasMeantToLoad !== topLoaded && !isTopEnd) {\n const toLoad = topWasMeantToLoad - topLoaded;\n const migratedResult = await this.fillHistoryStorage({\n ...options,\n peerId: migration.prev,\n offsetId: 0,\n limit: toLoad,\n addOffset: 0\n });\n\n historyResult.messages.push(...migratedResult.messages);\n\n const migratedResultCount = (migratedResult as MessagesMessages.messagesMessagesSlice).count ?? migratedResult.messages.length;\n (historyResult as MessagesMessages.messagesMessagesSlice).count = ((historyResult as MessagesMessages.messagesMessagesSlice).count || 0) + migratedResultCount;\n }/* else if(migration?.prev && inputFilter) {\n const migratedResult = await this.requestHistory({\n ...options,\n peerId: migration.prev,\n offsetId: 0,\n limit: 1\n });\n\n const migratedResultCount = (migratedResult as MessagesMessages.messagesMessagesSlice).count ?? migratedResult.messages.length;\n (historyResult as MessagesMessages.messagesMessagesSlice).count = ((historyResult as MessagesMessages.messagesMessagesSlice).count || 0) + migratedResultCount;\n\n const offsetIdOffset = (historyResult as MessagesMessages.messagesMessagesSlice).offset_id_offset || 0;\n (historyResult as MessagesMessages.messagesMessagesSlice).offset_id_offset = offsetIdOffset + migratedResultCount;\n } */ else if((migration?.next || isRequestingLegacy) && bottomWasMeantToLoad !== bottomLoaded && !isBottomEnd) {\n const toLoad = bottomWasMeantToLoad - bottomLoaded;\n const migratedResult = await this.fillHistoryStorage({\n ...options,\n offsetId: this.appMessagesIdsManager.generateMessageId(1, peerId.toChatId()),\n limit: toLoad,\n addOffset: -toLoad\n });\n\n historyResult.messages.unshift(...migratedResult.messages);\n\n const migratedResultCount = (migratedResult as MessagesMessages.messagesMessagesSlice).count ?? migratedResult.messages.length;\n (historyResult as MessagesMessages.messagesMessagesSlice).count = ((historyResult as MessagesMessages.messagesMessagesSlice).count || 0) + migratedResultCount;\n\n const offsetIdOffset = (historyResult as MessagesMessages.messagesMessagesSlice).offset_id_offset || 0;\n (historyResult as MessagesMessages.messagesMessagesSlice).offset_id_offset = offsetIdOffset + migratedResultCount;\n } else if(migration && inputFilter && !recursion) {\n const migratedResult = await this.requestHistory({\n ...options,\n peerId: isRequestingLegacy ? peerId : migration.prev,\n offsetId: 0,\n limit: 1\n });\n\n const migratedResultCount = (migratedResult as MessagesMessages.messagesMessagesSlice).count ?? migratedResult.messages.length;\n (historyResult as MessagesMessages.messagesMessagesSlice).count = ((historyResult as MessagesMessages.messagesMessagesSlice).count || 0) + migratedResultCount;\n\n const offsetIdOffset = (historyResult as MessagesMessages.messagesMessagesSlice).offset_id_offset || 0;\n (historyResult as MessagesMessages.messagesMessagesSlice).offset_id_offset = offsetIdOffset + migratedResultCount;\n }\n\n if(!middleware()) {\n return;\n }\n // * migration end\n\n // * fill grouped messages when loading tags history\n if(inputFilter && options.savedReaction) {\n const differentGroupedMessages = historyResult.messages.filter((message) => (message as Message.message).grouped_id) as Message.message[];\n await Promise.all(differentGroupedMessages.map((message) => {\n return this.getHistory({\n peerId: message.peerId,\n offsetId: message.mid,\n limit: 20,\n addOffset: -10\n });\n }));\n if(!middleware()) {\n return;\n }\n }\n\n return historyResult;\n }\n\n public requestHistory({\n peerId,\n offsetId = 0,\n limit = 50,\n addOffset = 0,\n offsetDate = 0,\n threadId = 0,\n\n offsetPeerId,\n nextRate,\n folderId,\n query,\n inputFilter,\n minDate,\n maxDate,\n historyType = this.getHistoryType(peerId, threadId),\n fromPeerId,\n savedReaction,\n isPublicHashtag\n }: RequestHistoryOptions) {\n const offsetMessage = offsetId && this.getMessageByPeer(offsetPeerId || peerId, offsetId);\n offsetPeerId ??= offsetMessage?.peerId;\n\n offsetId = getServerMessageId(offsetId) || 0;\n threadId = historyType === HistoryType.Saved ? threadId : (getServerMessageId(threadId) || 0);\n\n minDate = minDate ? minDate / 1000 | 0 : 0;\n maxDate = maxDate ? maxDate / 1000 | 0 : 0;\n\n let options: MessagesGetReplies | MessagesGetHistory | MessagesSearch | MessagesSearchGlobal | MessagesGetSavedHistory | ChannelsSearchPosts;\n let method: 'messages.getReplies' | 'messages.getHistory' | 'messages.search' | 'messages.searchGlobal' | 'messages.getSavedHistory' | 'channels.searchPosts';\n const commonOptions = {\n peer: this.appPeersManager.getInputPeerById(peerId),\n offset_id: offsetId,\n offset_date: offsetDate,\n add_offset: addOffset,\n limit,\n max_id: 0,\n min_id: 0,\n hash: 0\n };\n\n if(savedReaction) {\n inputFilter ??= {_: 'inputMessagesFilterEmpty'};\n }\n\n if(isPublicHashtag) {\n const searchOptions: ChannelsSearchPosts = {\n ...commonOptions,\n hashtag: query.slice(1),\n offset_rate: nextRate,\n offset_peer: this.appPeersManager.getInputPeerById(offsetPeerId)\n };\n\n method = 'channels.searchPosts';\n options = searchOptions;\n } else if(inputFilter && peerId && !nextRate && folderId === undefined/* || !query */) {\n const searchOptions: MessagesSearch = {\n ...commonOptions,\n q: query || '',\n filter: inputFilter as any as MessagesFilter,\n min_date: minDate,\n max_date: maxDate,\n top_msg_id: historyType === HistoryType.Saved ? undefined : threadId,\n saved_peer_id: historyType === HistoryType.Saved ? this.appPeersManager.getInputPeerById(threadId) : undefined,\n from_id: fromPeerId ? this.appPeersManager.getInputPeerById(fromPeerId) : undefined,\n saved_reaction: savedReaction\n };\n\n method = 'messages.search';\n options = searchOptions;\n } else if(inputFilter) {\n const searchGlobalOptions: MessagesSearchGlobal = {\n ...commonOptions,\n q: query || '',\n filter: inputFilter as any as MessagesFilter,\n min_date: minDate,\n max_date: maxDate,\n offset_rate: nextRate,\n offset_peer: this.appPeersManager.getInputPeerById(offsetPeerId),\n folder_id: folderId\n };\n\n method = 'messages.searchGlobal';\n options = searchGlobalOptions;\n } else if(historyType === HistoryType.Thread || historyType === HistoryType.Topic) {\n const getRepliesOptions: MessagesGetReplies = {\n ...commonOptions,\n msg_id: threadId\n };\n\n method = 'messages.getReplies';\n options = getRepliesOptions;\n } else if(historyType === HistoryType.Saved) {\n const getSavedHistoryOptions: MessagesGetSavedHistory = {\n ...commonOptions,\n peer: this.appPeersManager.getInputPeerById(threadId)\n };\n\n method = 'messages.getSavedHistory';\n options = getSavedHistoryOptions;\n } else {\n const getHistoryOptions: MessagesGetHistory = {\n ...commonOptions\n };\n\n method = 'messages.getHistory';\n options = getHistoryOptions;\n }\n\n const promise = this.apiManager.invokeApiSingle(\n method,\n options,\n {\n // timeout: APITIMEOUT,\n noErrorBox: true\n }\n ) as Promise>;\n\n return promise.then((historyResult) => {\n if(DEBUG) {\n this.log('requestHistory result:', peerId, historyResult, offsetId, limit, addOffset);\n }\n\n const {messages} = historyResult;\n\n this.saveApiResult(historyResult);\n\n if('pts' in historyResult) {\n this.apiUpdatesManager.addChannelState(peerId.toChatId(), historyResult.pts);\n }\n\n let length = messages.length,\n count = (historyResult as MessagesMessages.messagesMessagesSlice).count;\n if(length && !messages[length - 1]) {\n messages.splice(length - 1, 1);\n length--;\n count--;\n }\n\n return historyResult;\n }, (error: ApiError) => {\n switch(error.type) {\n case 'CHANNEL_PRIVATE':\n let channel = this.appChatsManager.getChat(peerId.toChatId());\n if(channel._ === 'channel') {\n channel = {\n _: 'channelForbidden',\n id: channel.id,\n access_hash: channel.access_hash,\n title: channel.title,\n pFlags: channel.pFlags\n };\n }\n\n this.appChatsManager.saveApiChats([channel]);\n\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateChannel',\n channel_id: channel.id\n });\n break;\n }\n\n throw error;\n });\n }\n\n public fetchSingleMessages() {\n return this.fetchSingleMessagesPromise ??= pause(0).then(() => {\n const requestPromises: Promise[] = [];\n\n for(const [peerId, map] of this.needSingleMessages) {\n const mids = [...map.keys()];\n const msgIds: InputMessage[] = mids.map((mid) => {\n return {\n _: 'inputMessageID',\n id: getServerMessageId(mid)\n };\n });\n\n let promise: Promise;\n const channelId = this.appPeersManager.isChannel(peerId) ? peerId.toChatId() : undefined;\n if(channelId) {\n promise = this.apiManager.invokeApiSingle('channels.getMessages', {\n channel: this.appChatsManager.getChannelInput(channelId),\n id: msgIds\n });\n } else {\n promise = this.apiManager.invokeApiSingle('messages.getMessages', {\n id: msgIds\n });\n }\n\n const after = promise.then((getMessagesResult) => {\n assumeType>(getMessagesResult);\n\n this.saveApiResult(getMessagesResult);\n const {messages} = getMessagesResult;\n\n for(let i = 0; i < messages.length; ++i) {\n const message = messages[i];\n if(!message) {\n continue;\n }\n\n const mid = this.appMessagesIdsManager.generateMessageId(message.id, channelId);\n const promise = map.get(mid);\n promise.resolve(message as MyMessage);\n map.delete(mid);\n }\n\n if(map.size) {\n for(const [mid, promise] of map) {\n promise.resolve(this.generateEmptyMessage(mid));\n }\n }\n }).finally(() => {\n this.rootScope.dispatchEvent('messages_downloaded', {peerId, mids});\n });\n\n requestPromises.push(after);\n }\n\n this.needSingleMessages.clear();\n\n return Promise.all(requestPromises).then(noop, noop).then(() => {\n this.fetchSingleMessagesPromise = undefined;\n if(this.needSingleMessages.size) this.fetchSingleMessages();\n });\n });\n }\n\n public reloadMessages(peerId: PeerId, mid: number, overwrite?: boolean): Promise;\n public reloadMessages(peerId: PeerId, mid: number[], overwrite?: boolean): Promise;\n public reloadMessages(peerId: PeerId, mid: number | number[], overwrite?: boolean): Promise {\n if(Array.isArray(mid)) {\n return Promise.all(mid.map((mid) => {\n return this.reloadMessages(peerId, mid, overwrite);\n }));\n }\n\n if(peerId.isAnyChat() && isLegacyMessageId(mid)) {\n peerId = GLOBAL_HISTORY_PEER_ID;\n }\n\n const message = this.getMessageByPeer(peerId, mid);\n if(message && !overwrite) {\n this.rootScope.dispatchEvent('messages_downloaded', {peerId, mids: [mid]});\n return Promise.resolve(message);\n } else {\n let map = this.needSingleMessages.get(peerId);\n if(!map) {\n this.needSingleMessages.set(peerId, map = new Map());\n }\n\n let promise = map.get(mid);\n if(promise) {\n return promise;\n }\n\n promise = deferredPromise();\n map.set(mid, promise);\n this.fetchSingleMessages();\n return promise;\n }\n }\n\n public getExtendedMedia(peerId: PeerId, mids: number[]) {\n let map = this.extendedMedia.get(peerId);\n if(!map) {\n this.extendedMedia.set(peerId, map = new Map());\n }\n\n const deferred = deferredPromise();\n const toRequest: number[] = [];\n const promises = mids.map((mid) => {\n let promise = map.get(mid);\n if(!promise) {\n map.set(mid, promise = deferred);\n toRequest.push(mid);\n\n promise.then(() => {\n map.delete(mid);\n if(!map.size && this.extendedMedia.get(peerId) === map) {\n this.extendedMedia.delete(peerId);\n }\n });\n }\n\n return promise;\n });\n\n if(!toRequest.length) {\n deferred.resolve();\n } else {\n this.apiManager.invokeApi('messages.getExtendedMedia', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: toRequest.map((mid) => getServerMessageId(mid))\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n deferred.resolve();\n });\n }\n\n return Promise.all(promises);\n }\n\n private clearMessageReplyTo(message: MyMessage) {\n message = this.getMessageByPeer(message.peerId, message.mid); // message can come from other thread\n this.modifyMessage(message, (message) => {\n delete message.reply_to_mid; // ! WARNING!\n delete message.reply_to; // ! WARNING!\n }, this.getHistoryMessagesStorage(message.peerId), true); // * mirror it\n }\n\n public fetchMessageReplyTo(message: MyMessage) {\n if(!message.reply_to) return Promise.resolve(this.generateEmptyMessage(0));\n const replyTo = message.reply_to;\n if(replyTo._ === 'messageReplyStoryHeader') {\n const result = this.appStoriesManager.getStoryById(this.appPeersManager.getPeerId(replyTo.peer), replyTo.story_id);\n return callbackify(result, (story) => {\n // if(!story) {\n // this.clearMessageReplyTo(message);\n // }\n\n return story;\n });\n }\n\n const replyToPeerId = replyTo.reply_to_peer_id ? this.appPeersManager.getPeerId(replyTo.reply_to_peer_id) : message.peerId;\n return this.reloadMessages(replyToPeerId, message.reply_to_mid).then((originalMessage) => {\n if(!originalMessage) { // ! break the infinite loop\n this.clearMessageReplyTo(message);\n }\n\n if(message._ === 'messageService') {\n const peerId = message.peerId;\n this.rootScope.dispatchEvent('message_edit', {\n storageKey: `${peerId}_history`,\n peerId: peerId,\n mid: message.mid,\n message\n });\n\n if(this.isMessageIsTopMessage(message)) {\n this.rootScope.dispatchEvent('dialogs_multiupdate', new Map([[peerId, {dialog: this.getDialogOnly(peerId)}]]));\n }\n }\n\n return originalMessage;\n });\n }\n\n private getTypingKey(peerId: PeerId, threadId?: number) {\n return threadId ? `${peerId}_${threadId}` : peerId;\n }\n\n public setTyping(\n peerId: PeerId,\n action: SendMessageAction,\n force?: boolean,\n threadId?: number\n ): Promise {\n if(threadId && !this.appPeersManager.isForum(peerId)) {\n threadId = undefined;\n }\n\n const key = this.getTypingKey(peerId, threadId);\n let typing = this.typings[key];\n if(\n !peerId ||\n !this.canSendToPeer(peerId) ||\n peerId === this.appPeersManager.peerId ||\n // (!force && deepEqual(typing?.action, action))\n (!force && typing?.action?._ === action._)\n ) {\n return Promise.resolve(false);\n }\n\n if(typing?.timeout) {\n clearTimeout(typing.timeout);\n }\n\n typing = this.typings[key] = {\n action\n };\n\n return this.apiManager.invokeApi('messages.setTyping', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n action,\n top_msg_id: threadId ? getServerMessageId(threadId) : undefined\n }).finally(() => {\n if(typing === this.typings[key]) {\n typing.timeout = ctx.setTimeout(() => {\n delete this.typings[key];\n }, 6000);\n }\n });\n }\n\n private handleReleasingMessage(message: MyMessage, storage: MessagesStorage) {\n const media = (message as Message.message).media;\n if(media) {\n const c = (media as MessageMedia.messageMediaWebPage).webpage as WebPage.webPage || media as MessageMedia.messageMediaPhoto | MessageMedia.messageMediaDocument;\n const smth: Photo.photo | MyDocument = (c as MessageMedia.messageMediaPhoto).photo as any || (c as MessageMedia.messageMediaDocument).document as any;\n\n if(smth?.file_reference) {\n this.referenceDatabase.deleteContext(smth.file_reference, {type: 'message', peerId: message.peerId, messageId: message.mid});\n }\n\n if('webpage' in media && media.webpage) {\n const isScheduled = this.getScheduledMessagesStorage(message.peerId) === storage;\n const messageKey = this.appWebPagesManager.getMessageKeyForPendingWebPage(message.peerId, message.mid, isScheduled);\n this.appWebPagesManager.deleteWebPageFromPending(media.webpage, messageKey);\n }\n\n if((media as MessageMedia.messageMediaPoll).poll) {\n this.appPollsManager.updatePollToMessage(message as Message.message, false);\n }\n }\n }\n\n private handleDeletedMessages(peerId: PeerId, storage: MessagesStorage, messages: number[]) {\n // type T = {savedPeerId?: number};\n const history: {\n count: number,\n unread: number,\n unreadMentions: number,\n unreadReactions: number,\n // msgs: Map,\n msgs: Set,\n grouped?: {[groupId: string]: Set},\n } = {\n count: 0,\n unread: 0,\n unreadMentions: 0,\n unreadReactions: 0,\n msgs: new Set()\n };\n\n const shouldClearContexts = storage.type === 'history';\n\n for(const mid of messages) {\n const message: MyMessage = this.getMessageFromStorage(storage, mid);\n if(!message) {\n this.fixDialogUnreadMentionsIfNoMessage({peerId});\n this.fixDialogUnreadMentionsIfNoMessage({peerId, isReaction: true});\n continue;\n }\n\n this.handleReleasingMessage(message, storage);\n\n this.updateMessageRepliesIfNeeded(message, false);\n\n if(!message.pFlags.out && !message.pFlags.is_outgoing && message.pFlags.unread) {\n ++history.unread;\n this.rootScope.dispatchEvent('notification_cancel', 'msg' + mid);\n\n if(isMentionUnread(message)) {\n ++history.unreadMentions;\n this.modifyCachedMentions({peerId, mid, add: false});\n }\n }\n\n // const details: T = {};\n // const savedPeerId = (message as Message.message).saved_peer_id;\n // if(savedPeerId) {\n // details.savedPeerId = this.appPeersManager.getPeerId(savedPeerId);\n // }\n\n ++history.count;\n history.msgs.add(mid/* , details */);\n\n const groupedId = (message as Message.message).grouped_id;\n if(groupedId) {\n const groupedStorage = this.groupedMessagesStorage[groupedId];\n if(groupedStorage) {\n this.deleteMessageFromStorage(groupedStorage, mid);\n\n if(!history.grouped) history.grouped = {};\n (history.grouped[groupedId] || (history.grouped[groupedId] = new Set())).add(mid);\n\n if(!groupedStorage.size) {\n delete history.grouped;\n delete this.groupedMessagesStorage[groupedId];\n }\n }\n }\n\n if(shouldClearContexts) {\n this.updateMessageContextForDeletion(message, true);\n\n // * it should have a better place :(\n const reactions = (message as Message.message).reactions;\n if(reactions && reactions.pFlags.reactions_as_tags) {\n this.appReactionsManager.processMessageReactionsChanges({\n message: message as Message.message,\n changedResults: [],\n removedResults: reactions.results\n });\n }\n\n const recentReactions = reactions?.recent_reactions;\n if(message.pFlags.out && recentReactions?.some((reaction) => reaction.pFlags.unread)) {\n ++history.unreadReactions;\n this.modifyCachedMentions({\n peerId,\n mid,\n add: false,\n isReaction: true\n });\n }\n\n this.appTranslationsManager.resetMessageTranslations(message.peerId, message.mid);\n }\n\n this.deleteMessageFromStorage(storage, mid);\n }\n\n if(history.grouped) {\n for(const groupedId in history.grouped) {\n this.dispatchGroupedEdit(groupedId, storage, [...history.grouped[groupedId]]);\n /* const mids = this.getMidsByAlbum(groupId);\n if(mids.length) {\n const mid = Math.max(...mids);\n rootScope.$broadcast('message_edit', {peerId, mid, justMedia: false});\n } */\n }\n }\n\n return history;\n }\n\n private handleEditedMessage(oldMessage: Message, newMessage: Message, storage: MessagesStorage) {\n if(oldMessage._ === 'message') {\n if((oldMessage.media as MessageMedia.messageMediaWebPage)?.webpage) {\n const messageKey = this.appWebPagesManager.getMessageKeyForPendingWebPage(oldMessage.peerId, oldMessage.mid, !!oldMessage.pFlags.is_scheduled);\n this.appWebPagesManager.deleteWebPageFromPending((oldMessage.media as MessageMedia.messageMediaWebPage).webpage, messageKey);\n }\n\n const groupedId = oldMessage.grouped_id;\n if(groupedId) {\n this.dispatchGroupedEdit(groupedId, storage, []);\n }\n\n const isTranslated = this.appTranslationsManager.hasTriedToTranslateMessage(oldMessage.peerId, oldMessage.mid);\n if(isTranslated && (\n oldMessage.message !== (newMessage as Message.message).message ||\n !deepEqual(oldMessage.entities, (newMessage as Message.message).entities)\n )) {\n this.appTranslationsManager.resetMessageTranslations(oldMessage.peerId, oldMessage.mid);\n }\n }\n }\n\n private dispatchGroupedEdit(groupedId: string, storage: MessagesStorage, deletedMids?: number[]) {\n const mids = this.getMidsByGroupedId(groupedId);\n const messages = mids.map((mid) => this.getMessageFromStorage(storage, mid)) as Message.message[];\n this.rootScope.dispatchEvent('grouped_edit', {peerId: messages[0].peerId, groupedId, deletedMids: deletedMids || [], messages});\n }\n\n public getDialogUnreadCount(dialog: Dialog | ForumTopic) {\n let unreadCount = dialog.unread_count;\n if(!isForumTopic(dialog) && this.appPeersManager.isForum(dialog.peerId) && !dialog.pFlags.view_forum_as_messages) {\n const forumUnreadCount = this.dialogsStorage.getForumUnreadCount(dialog.peerId);\n if(forumUnreadCount instanceof Promise) {\n unreadCount = 0;\n } else {\n unreadCount = forumUnreadCount.count;\n }\n }\n\n return unreadCount || +!!(dialog as Dialog).pFlags?.unread_mark;\n }\n\n public isDialogUnread(dialog: AnyDialog) {\n return !isSavedDialog(dialog) && !!this.getDialogUnreadCount(dialog);\n }\n\n public canForward(message: Message.message | Message.messageService) {\n return message?._ === 'message' && !(message as Message.message).pFlags.noforwards && !this.appPeersManager.noForwards(message.peerId);\n }\n\n private pushBatchUpdate(\n event: E,\n callback: C,\n key: string,\n getElementCallback?: () => MapValueType[0]>\n ) {\n let details = this.batchUpdates[event];\n if(!details) {\n // @ts-ignore\n details = this.batchUpdates[event] = {\n callback,\n batch: new Map()\n };\n }\n\n if(!details.batch.has(key)) {\n // @ts-ignore\n details.batch.set(key, getElementCallback ? getElementCallback() : undefined);\n this.batchUpdatesDebounced();\n }\n }\n\n private getMessagesFromMap>(map: T) {\n const newMap: Map> = new Map();\n for(const [key, value] of map) {\n const [peerIdStr, mid] = key.split('_');\n const message = this.getMessageByPeer(peerIdStr.toPeerId(), +mid) as Message.message;\n if(!message) {\n continue;\n }\n\n newMap.set(message, value);\n }\n\n return newMap;\n }\n\n private batchUpdateViews = (batch: Map) => {\n const toDispatch: {peerId: PeerId, mid: number, views: number}[] = [];\n\n const map = this.getMessagesFromMap(batch);\n for(const [message] of map) {\n toDispatch.push({\n peerId: message.peerId,\n mid: message.mid,\n views: message.views\n })\n }\n\n return toDispatch;\n };\n\n private batchUpdateReactions = (batch: Map) => {\n const toDispatch: BroadcastEvents['messages_reactions'] = [];\n\n const map = this.getMessagesFromMap(batch);\n for(const [message, previousReactions] of map) {\n const results = message.reactions?.results ?? [];\n const previousResults = previousReactions?.results ?? [];\n const changedResults = results.filter((reactionCount) => {\n const previousReactionCount = previousResults.find((_reactionCount) => reactionsEqual(_reactionCount.reaction, reactionCount.reaction));\n return (\n message.pFlags.out && (\n !previousReactionCount ||\n reactionCount.count > previousReactionCount.count\n )\n ) || (\n reactionCount.chosen_order !== undefined && (\n !previousReactionCount ||\n previousReactionCount.chosen_order === undefined\n )\n );\n });\n\n const removedResults = previousResults.filter((reactionCount) => {\n return !results.some((_reactionCount) => reactionsEqual(_reactionCount.reaction, reactionCount.reaction));\n });\n\n toDispatch.push({message, changedResults, removedResults});\n }\n\n return toDispatch;\n };\n\n public saveDefaultSendAs(peerId: PeerId, sendAsPeerId: PeerId) {\n this.appProfileManager.modifyCachedFullChat(peerId.toChatId(), (channelFull) => {\n channelFull.default_send_as = this.appPeersManager.getOutputPeer(sendAsPeerId);\n });\n\n return this.apiManager.invokeApi('messages.saveDefaultSendAs', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n send_as: this.appPeersManager.getInputPeerById(sendAsPeerId)\n });\n }\n\n public sendBotRequestedPeer(peerId: PeerId, mid: number, buttonId: number, requestedPeerIds: PeerId[]) {\n return this.apiManager.invokeApi('messages.sendBotRequestedPeer', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(mid),\n button_id: buttonId,\n requested_peers: requestedPeerIds.map((peerId) => this.appPeersManager.getInputPeerById(peerId))\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n\n public reportSpam(peerId: PeerId) {\n return this.apiManager.invokeApi('messages.reportSpam', {\n peer: this.appPeersManager.getInputPeerById(peerId)\n });\n }\n\n private processFactCheckBatch = async(batch: AppMessagesManager['factCheckBatcher']['batchMap']) => {\n for(const [peerId, midsMap] of batch) {\n const mids = [...midsMap.keys()].slice(0, 100);\n\n try {\n const result = await this.apiManager.invokeApi('messages.getFactCheck', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: mids.map((mid) => getServerMessageId(mid))\n });\n\n result.forEach((factCheck, idx) => {\n const mid = mids[idx];\n\n const message = this.getMessageByPeer(peerId, mid) as Message.message;\n if(message) {\n this.modifyMessage(message, (message) => {\n message.factcheck = factCheck;\n });\n }\n\n const promise = midsMap.get(mid);\n promise.resolve(factCheck);\n midsMap.delete(mid);\n });\n } catch(err) {\n mids.forEach((mid) => {\n const promise = midsMap.get(mid);\n promise.reject(err);\n midsMap.delete(mid);\n });\n }\n\n if(!midsMap.size) {\n batch.delete(peerId);\n }\n }\n };\n\n public canUpdateFactCheck(peerId: PeerId, mid: number) {\n if(!this.appPeersManager.isBroadcast(peerId)) {\n return false;\n }\n\n const message = this.getMessageByPeer(peerId, mid);\n if(!canMessageHaveFactCheck(message)) {\n return false;\n }\n\n return callbackify(this.apiManager.getAppConfig(), (appConfig) => {\n return !!appConfig.can_edit_factcheck;\n });\n }\n\n public updateFactCheck(peerId: PeerId, mid: number, text?: TextWithEntities) {\n let promise: Promise;\n if(!text) {\n promise = this.apiManager.invokeApi('messages.deleteFactCheck', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(mid)\n });\n } else {\n promise = this.apiManager.invokeApi('messages.editFactCheck', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(mid),\n text\n });\n }\n\n return promise.then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n\n public getFactCheck(peerId: PeerId, mid: number) {\n const message = this.getMessageByPeer(peerId, mid) as Message.message;\n if(message && message.factcheck && !message.factcheck.pFlags.need_check) {\n return message.factcheck;\n }\n\n return this.factCheckBatcher.addToBatch(peerId, mid);\n }\n}\n\nclass Batcher {\n private batchMap: Map>>;\n private delay: number;\n private timeoutId: number;\n private _processBatch: (batch: Batcher['batchMap']) => Promise;\n\n constructor(options: {\n delay?: number\n processBatch: (batch: Batcher['batchMap']) => Promise\n }) {\n this.batchMap = new Map();\n this.delay = options.delay ?? 0;\n this._processBatch = options.processBatch;\n }\n\n private async processBatch() {\n await this._processBatch(this.batchMap);\n\n this.timeoutId = undefined;\n if(this.batchMap.size) {\n this.scheduleBatch();\n }\n }\n\n private scheduleBatch() {\n if(!this.timeoutId) {\n this.timeoutId = ctx.setTimeout(() => {\n this.processBatch();\n }, this.delay);\n }\n }\n\n public addToBatch(key: Key, id: Id): Promise {\n if(!this.batchMap.has(key)) {\n this.batchMap.set(key, new Map());\n }\n\n const idMap = this.batchMap.get(key)!;\n const existingPromise = idMap.get(id);\n\n if(existingPromise) {\n return existingPromise;\n } else {\n const promise = deferredPromise();\n idMap.set(id, promise);\n this.scheduleBatch();\n return promise;\n }\n }\n}\n","export default function convertInputKeyToKey(inputKey: string) {\n const str = inputKey.replace('input', '');\n return (str[0].toLowerCase() + str.slice(1)) as T;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport tsNow from '../../helpers/tsNow';\nimport {InputNotifyPeer, InputPeer, InputPeerNotifySettings, NotifyPeer, Peer, PeerNotifySettings, Update} from '../../layer';\nimport {MUTE_UNTIL} from '../mtproto/mtproto_config';\nimport throttle from '../../helpers/schedulers/throttle';\nimport convertInputKeyToKey from '../../helpers/string/convertInputKeyToKey';\nimport {AppManager} from './manager';\nimport ctx from '../../environment/ctx';\nimport assumeType from '../../helpers/assumeType';\n\ntype ImSadAboutIt = Promise | PeerNotifySettings;\ntype MyNotifyPeer = Exclude;\ntype MyInputNotifyPeer = Exclude;\nexport class AppNotificationsManager extends AppManager {\n private peerSettings = {\n notifyPeer: {} as {[peerId: string]: ImSadAboutIt},\n notifyUsers: null as ImSadAboutIt,\n notifyChats: null as ImSadAboutIt,\n notifyBroadcasts: null as ImSadAboutIt,\n notifyForumTopic: {} as {[peerId_threadId: string]: ImSadAboutIt}\n };\n // private exceptions: {[peerId: string]: PeerNotifySettings} = {};\n\n private getNotifyPeerTypePromise: Promise;\n\n private checkMuteUntilTimeout: number;\n private checkMuteUntilThrottled: () => void;\n\n private notifyContactsSignUp: Promise;\n\n protected after() {\n this.checkMuteUntilThrottled = throttle(this.checkMuteUntil, 1000, false);\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateNotifySettings: this.onUpdateNotifySettings\n });\n\n return this.appStateManager.getState().then((state) => {\n if(state.notifySettings) {\n for(const key in state.notifySettings) {\n assumeType(key);\n this.savePeerSettings({\n key,\n settings: state.notifySettings[key]\n });\n }\n }\n });\n }\n\n public getNotifySettings(peer: InputNotifyPeer): ImSadAboutIt {\n let key: any = convertInputKeyToKey(peer._);\n let obj: any = this.peerSettings[key as MyNotifyPeer];\n\n let peerId: PeerId;\n if(peer._ === 'inputNotifyPeer') {\n peerId = key = this.appPeersManager.getPeerId(peer.peer);\n obj = obj[key];\n }\n\n if(obj) {\n return obj;\n }\n\n return (obj || this.peerSettings)[key] = this.apiManager.invokeApi('account.getNotifySettings', {peer})\n .then((settings) => {\n this.savePeerSettings({\n key,\n peerId,\n settings\n });\n\n return settings;\n });\n }\n\n public getNotifyPeerTypeSettings() {\n if(this.getNotifyPeerTypePromise) return this.getNotifyPeerTypePromise;\n\n const promises = ([\n 'inputNotifyBroadcasts',\n 'inputNotifyUsers',\n 'inputNotifyChats'\n ] as MyInputNotifyPeer[])\n .map((inputKey) => {\n return this.getNotifySettings({_: inputKey});\n });\n\n return this.getNotifyPeerTypePromise = Promise.all(promises);\n }\n\n public generateLocalNotifySettingsUpdate(peer: InputNotifyPeer, settings: InputPeerNotifySettings) {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateNotifySettings',\n peer: {\n ...peer as any,\n _: convertInputKeyToKey(peer._)\n },\n notify_settings: {\n ...settings,\n _: 'peerNotifySettings'\n }\n });\n }\n\n public updateNotifySettings(peer: InputNotifyPeer, settings: InputPeerNotifySettings) {\n // this.savePeerSettings(peerId, settings);\n\n /* const inputSettings: InputPeerNotifySettings = copy(settings) as any;\n inputSettings._ = 'inputPeerNotifySettings'; */\n\n return this.apiManager.invokeApi('account.updateNotifySettings', {\n peer,\n settings\n }).then(() => {\n this.generateLocalNotifySettingsUpdate(peer, settings);\n });\n }\n\n // public getNotifyExceptions() {\n // apiManager.invokeApi('account.getNotifyExceptions', {compare_sound: true})\n // .then((updates) => {\n // apiUpdatesManager.processUpdateMessage(updates);\n // });\n // }\n\n public getContactSignUpNotification() {\n if(this.notifyContactsSignUp) return this.notifyContactsSignUp;\n return this.notifyContactsSignUp = this.apiManager.invokeApi('account.getContactSignUpNotification');\n }\n\n public setContactSignUpNotification(silent: boolean) {\n this.apiManager.invokeApi('account.setContactSignUpNotification', {silent})\n .then((value) => {\n this.notifyContactsSignUp = Promise.resolve(!silent);\n });\n }\n\n private checkMuteUntil = () => {\n if(this.checkMuteUntilTimeout !== undefined) {\n clearTimeout(this.checkMuteUntilTimeout);\n this.checkMuteUntilTimeout = undefined;\n }\n\n const timestamp = tsNow(true);\n let closestMuteUntil = MUTE_UNTIL;\n\n const p = (peerNotifySettings: ImSadAboutIt): peerNotifySettings is PeerNotifySettings => {\n if(peerNotifySettings instanceof Promise) {\n return false;\n }\n\n const muteUntil = peerNotifySettings.mute_until;\n if(!muteUntil) {\n return false;\n }\n\n if(muteUntil <= timestamp) {\n // ! do not delete it because peer's unique settings will be overwritten in getPeerLocalSettings with type's settings\n peerNotifySettings.mute_until = 0;\n return true;\n } else if(muteUntil < closestMuteUntil) {\n closestMuteUntil = muteUntil;\n }\n\n return false;\n };\n\n [\n 'notifyPeer' as const,\n 'notifyForumTopic' as const\n ].forEach((typeKey) => {\n for(const key in this.peerSettings[typeKey]) {\n const peerNotifySettings = this.peerSettings[typeKey][key];\n if(p(peerNotifySettings)) {\n const [peerId, topicId] = key.split('_');\n const peer = this.appPeersManager.getOutputPeer(peerId.toPeerId());\n this.apiUpdatesManager.saveUpdate({\n _: 'updateNotifySettings',\n peer: topicId ? {\n _: 'notifyForumTopic',\n peer,\n top_msg_id: +topicId\n } : {\n _: 'notifyPeer',\n peer\n },\n notify_settings: peerNotifySettings\n });\n }\n }\n });\n\n const timeout = Math.min(1800e3, (closestMuteUntil - timestamp) * 1000);\n this.checkMuteUntilTimeout = ctx.setTimeout(this.checkMuteUntil, timeout);\n };\n\n public getPeerKey(peerId: PeerId, threadId?: number) {\n return peerId + (threadId ? '_' + threadId : '');\n }\n\n public savePeerSettings({key, peerId, threadId, settings}: {\n key?: Exclude,\n peerId?: PeerId,\n threadId?: number,\n settings: PeerNotifySettings\n }) {\n let obj: any;\n if(peerId) {\n key = this.getPeerKey(peerId, threadId) as any;\n obj = this.peerSettings[threadId ? 'notifyForumTopic' : 'notifyPeer'];\n }\n\n (obj || this.peerSettings)[key] = settings;\n\n if(!peerId) {\n this.rootScope.dispatchEvent('notify_peer_type_settings', {key, settings});\n this.appStateManager.getState().then((state) => {\n const notifySettings = state.notifySettings;\n notifySettings[key] = settings;\n this.appStateManager.pushToState('notifySettings', notifySettings);\n });\n } else {\n this.checkMuteUntilThrottled();\n }\n\n // rootScope.broadcast('notify_settings', {peerId: peerId});\n }\n\n public isMuted(peerNotifySettings: PeerNotifySettings) {\n return peerNotifySettings._ === 'peerNotifySettings' &&\n (peerNotifySettings.silent || (peerNotifySettings.mute_until !== undefined && (peerNotifySettings.mute_until * 1000) > tsNow()));\n }\n\n private getPeerMuted(peerId: PeerId) {\n const ret = this.getNotifySettings({_: 'inputNotifyPeer', peer: this.appPeersManager.getInputPeerById(peerId)});\n return (ret instanceof Promise ? ret : Promise.resolve(ret))\n .then((peerNotifySettings) => this.isMuted(peerNotifySettings));\n }\n\n private getPeerLocalSettings({\n peerId,\n respectType = true,\n threadId\n }: {\n peerId: PeerId,\n respectType?: boolean,\n threadId?: number\n }): PeerNotifySettings {\n const n: PeerNotifySettings = {\n _: 'peerNotifySettings'\n };\n\n const peerKey = this.getPeerKey(peerId, threadId);\n const notifySettings = this.peerSettings[threadId ? 'notifyForumTopic' : 'notifyPeer'][peerKey];\n // if(!notifySettings || (notifySettings instanceof Promise)) return false;\n if(notifySettings && !(notifySettings instanceof Promise)) {\n Object.assign(n, notifySettings);\n }\n\n if(respectType) {\n const inputNotify = this.appPeersManager.getInputNotifyPeerById({peerId, ignorePeerId: true, threadId});\n const key = convertInputKeyToKey(inputNotify._);\n const typeNotifySettings = this.peerSettings[key as MyNotifyPeer];\n if(typeNotifySettings && !(typeNotifySettings instanceof Promise)) {\n for(const i in typeNotifySettings) {\n // @ts-ignore\n if(n[i] === undefined) {\n // @ts-ignore\n n[i] = typeNotifySettings[i];\n }\n }\n }\n }\n\n return n;\n }\n\n public validatePeerSettings[0]>(options: T): T {\n if(options.peerId === this.appPeersManager.peerId) return;\n if(options.threadId && !this.appPeersManager.isForum(options.peerId)) options.threadId = undefined;\n return options;\n }\n\n public isPeerLocalMuted(options: Parameters[0]): boolean {\n if(!(options = this.validatePeerSettings(options))) return false;\n\n if(options.threadId) {\n const notifySettings = this.getPeerLocalSettings({...options, respectType: false});\n if(notifySettings.silent !== undefined || notifySettings.mute_until !== undefined) {\n return this.isMuted(notifySettings);\n } else {\n return this.isPeerLocalMuted({...options, threadId: undefined});\n }\n }\n\n const notifySettings = this.getPeerLocalSettings(options);\n const isMuted = this.isMuted(notifySettings);\n return isMuted;\n }\n\n public isPeerStoriesMuted(peerId: PeerId) {\n const notifySettings = this.getPeerLocalSettings({peerId});\n return !!notifySettings?.stories_muted;\n }\n\n public toggleStoriesMute(peerId: PeerId, mute: boolean, local?: boolean) {\n const notifySettings = this.getPeerLocalSettings({peerId});\n const inputNotifyPeer: InputNotifyPeer = {\n _: 'inputNotifyPeer',\n peer: this.appPeersManager.getInputPeerById(peerId)\n };\n\n const inputPeerNotifySettings: InputPeerNotifySettings = {\n ...notifySettings,\n _: 'inputPeerNotifySettings'\n };\n\n if(mute) inputPeerNotifySettings.stories_muted = true;\n else delete inputPeerNotifySettings.stories_muted;\n\n if(!local) this.updateNotifySettings(inputNotifyPeer, inputPeerNotifySettings);\n else this.generateLocalNotifySettingsUpdate(inputNotifyPeer, inputPeerNotifySettings);\n }\n\n private onUpdateNotifySettings = (update: Update.updateNotifySettings) => {\n const {peer} = update;\n const isTopic = peer._ === 'notifyForumTopic';\n const isPeerType = peer._ === 'notifyPeer' || isTopic;\n const peerId = isPeerType && this.appPeersManager.getPeerId(peer.peer);\n const key = !isPeerType ? peer._ : undefined;\n const threadId = isTopic ? this.appMessagesIdsManager.generateMessageId(peer.top_msg_id, (peer.peer as Peer.peerChannel).channel_id) : undefined;\n this.savePeerSettings({\n key,\n peerId,\n threadId,\n settings: update.notify_settings\n });\n this.rootScope.dispatchEvent('notify_settings', update);\n };\n}\n","import {RestrictionReason} from '../layer';\n\nconst platforms = new Set([\n 'all',\n 'web',\n 'webk'\n]);\n\nconst ignore = new Set();\n\nexport function getRestrictionReason(reasons: RestrictionReason[]) {\n // return reasons[0];\n return reasons.find((reason) => platforms.has(reason.platform) && !ignore.has(reason.reason));\n}\n\nexport function isRestricted(reasons: RestrictionReason[]) {\n return !!getRestrictionReason(reasons);\n}\n\nexport function ignoreRestrictionReasons(reasons: string[]) {\n ignore.clear();\n reasons.forEach((reason) => {\n ignore.add(reason);\n });\n}\n","import {isRestricted} from '../../../../helpers/restrictions';\nimport {Chat, User} from '../../../../layer';\n\nexport default function isPeerRestricted(peer: Chat | User) {\n const restrictionReasons = (peer as Chat.channel)?.restriction_reason;\n return !!(restrictionReasons && (peer as Chat.channel).pFlags.restricted && isRestricted(restrictionReasons));\n}\n","import {Chat, ChatPhoto, User, UserProfilePhoto} from '../../../../layer';\nimport isPeerRestricted from './isPeerRestricted';\n\nexport default function getPeerPhoto(peer: User | Chat) {\n if(!peer || isPeerRestricted(peer)) {\n return;\n }\n\n return (peer as User.user | Chat.channel)?.photo as UserProfilePhoto.userProfilePhoto | ChatPhoto.chatPhoto;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {Chat, ChatPhoto, DialogPeer, InputChannel, InputDialogPeer, InputNotifyPeer, InputPeer, Peer, Update, User, UserProfilePhoto} from '../../layer';\nimport type {LangPackKey} from '../langPack';\nimport {getRestrictionReason} from '../../helpers/restrictions';\nimport isObject from '../../helpers/object/isObject';\nimport {AppManager} from './manager';\nimport getPeerId from './utils/peers/getPeerId';\nimport isUser from './utils/peers/isUser';\nimport isAnyChat from './utils/peers/isAnyChat';\nimport {NULL_PEER_ID} from '../mtproto/mtproto_config';\nimport getPeerActiveUsernames from './utils/peers/getPeerActiveUsernames';\nimport isPeerRestricted from './utils/peers/isPeerRestricted';\nimport getPeerPhoto from './utils/peers/getPeerPhoto';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\nimport MTProtoMessagePort from '../mtproto/mtprotoMessagePort';\n\nexport type PeerType = 'channel' | 'chat' | 'megagroup' | 'group' | 'saved' | 'savedDialog';\nexport class AppPeersManager extends AppManager {\n public get peerId() {\n return this.appUsersManager.userId.toPeerId();\n }\n /* public savePeerInstance(peerId: PeerId, instance: any) {\n if(peerId < 0) appChatsManager.saveApiChat(instance);\n else appUsersManager.saveApiUser(instance);\n } */\n\n public saveApiPeers(object: {chats?: Chat[], users?: User[]}) {\n this.appChatsManager.saveApiChats(object.chats);\n this.appUsersManager.saveApiUsers(object.users);\n }\n\n public canPinMessage(peerId: PeerId) {\n return peerId.isUser() || this.appChatsManager.hasRights(peerId.toChatId(), 'pin_messages');\n }\n\n public getPeerPhoto(peerId: PeerId) {\n const peer = this.getPeer(peerId) as User.user | Chat.channel;\n return getPeerPhoto(peer);\n }\n\n public getPeerMigratedTo(peerId: PeerId) {\n if(peerId.isUser()) {\n return;\n }\n\n const chat = this.appChatsManager.getChat(peerId.toChatId()) as Chat.chat;\n const migratedTo = chat?.migrated_to;\n if(migratedTo && chat.pFlags.deactivated) {\n return getPeerId(migratedTo);\n }\n }\n\n public getOutputPeer(peerId: PeerId): Peer {\n if(peerId.isUser()) {\n return {_: 'peerUser', user_id: peerId.toUserId()};\n }\n\n const chatId = peerId.toChatId();\n if(this.appChatsManager.isChannel(chatId)) {\n return {_: 'peerChannel', channel_id: chatId};\n }\n\n return {_: 'peerChat', chat_id: chatId};\n }\n\n public getPeerString(peerId: PeerId) {\n if(peerId.isUser()) {\n return this.appUsersManager.getUserString(peerId.toUserId());\n }\n return this.appChatsManager.getChatString(peerId.toChatId());\n }\n\n public getPeerUsername(peerId: PeerId) {\n return this.getPeerActiveUsernames(peerId)[0] || '';\n }\n\n public getPeerActiveUsernames(peerId: PeerId) {\n const peer = this.getPeer(peerId);\n return getPeerActiveUsernames(peer);\n }\n\n public getPeer(peerId: PeerId) {\n return peerId.isUser() ?\n this.appUsersManager.getUser(peerId.toUserId()) :\n this.appChatsManager.getChat(peerId.toChatId());\n }\n\n public getPeerId(peerId: Parameters[0]) {\n return getPeerId(peerId) || (isObject(peerId) && peerId._ === 'inputPeerSelf' && this.peerId) || NULL_PEER_ID;\n }\n\n public getDialogPeer(peerId: PeerId): DialogPeer {\n return {\n _: 'dialogPeer',\n peer: this.getOutputPeer(peerId)\n };\n }\n\n public isChannel(peerId: PeerId): boolean {\n return !peerId.isUser() && this.appChatsManager.isChannel(peerId.toChatId());\n }\n\n public isMegagroup(peerId: PeerId) {\n return !peerId.isUser() && this.appChatsManager.isMegagroup(peerId.toChatId());\n }\n\n public isForum(peerId: PeerId) {\n return !peerId.isUser() && this.appChatsManager.isForum(peerId.toChatId());\n }\n\n public isAnyGroup(peerId: PeerId): boolean {\n return !peerId.isUser() && !this.appChatsManager.isBroadcast(peerId.toChatId());\n }\n\n public isBroadcast(peerId: PeerId): boolean {\n return this.isChannel(peerId) && !this.isMegagroup(peerId);\n }\n\n public isBot(peerId: PeerId): boolean {\n return peerId.isUser() && this.appUsersManager.isBot(peerId.toUserId());\n }\n\n public isContact(peerId: PeerId): boolean {\n return peerId.isUser() && this.appUsersManager.isContact(peerId.toUserId());\n }\n\n public isUser(peerId: PeerId)/* : peerId is UserId */ {\n return isUser(peerId);\n }\n\n public isRegularUser(peerId: PeerId) {\n return this.isUser(peerId) && this.appUsersManager.isRegularUser(peerId);\n }\n\n public isAnyChat(peerId: PeerId) {\n return isAnyChat(peerId);\n }\n\n public isPeerRestricted(peerId: PeerId) {\n return isPeerRestricted(this.getPeer(peerId));\n }\n\n public isPeerPublic(peerId: PeerId) {\n return !!getPeerActiveUsernames(this.getPeer(peerId))[0];\n }\n\n public isSavedDialog(peerId: PeerId, threadId?: number) {\n return !!(peerId === this.peerId && threadId);\n }\n\n public getRestrictionReasonText(peerId: PeerId) {\n const peer = this.getPeer(peerId) as Chat.channel | User.user;\n const reason = peer.restriction_reason ? getRestrictionReason(peer.restriction_reason) : undefined;\n if(reason) {\n return reason.text;\n } else {\n return peerId.isUser() ? 'This user is restricted' : 'This chat is restricted';\n }\n }\n\n /* public getInputPeer(peerString: string): InputPeer {\n var firstChar = peerString.charAt(0);\n var peerParams = peerString.substr(1).split('_');\n let id = +peerParams[0];\n\n if(firstChar === 'u') {\n //appUsersManager.saveUserAccess(id, peerParams[1]);\n\n return {\n _: 'inputPeerUser',\n user_id: id,\n access_hash: peerParams[1]\n };\n } else if(firstChar === 'c' || firstChar === 's') {\n //appChatsManager.saveChannelAccess(id, peerParams[1]);\n if(firstChar === 's') {\n appChatsManager.saveIsMegagroup(id);\n }\n\n return {\n _: 'inputPeerChannel',\n channel_id: id,\n access_hash: peerParams[1] || '0'\n };\n } else {\n return {\n _: 'inputPeerChat',\n chat_id: id\n };\n }\n } */\n\n // public getInputNotifyPeerById(peerId: PeerId, ignorePeerId: true): Exclude;\n // public getInputNotifyPeerById(peerId: PeerId, ignorePeerId?: false): InputNotifyPeer.inputNotifyPeer;\n // public getInputNotifyPeerById(peerId: PeerId, ignorePeerId?: boolean): InputNotifyPeer {\n public getInputNotifyPeerById({\n peerId,\n ignorePeerId,\n threadId\n }: T): T['ignorePeerId'] extends true ? Exclude : (T['threadId'] extends number ? InputNotifyPeer.inputNotifyForumTopic : InputNotifyPeer.inputNotifyPeer) {\n if(ignorePeerId) {\n if(peerId.isUser()) {\n return {_: 'inputNotifyUsers'} as any;\n } else {\n if(this.isBroadcast(peerId)) {\n return {_: 'inputNotifyBroadcasts'} as any;\n } else {\n return {_: 'inputNotifyChats'} as any;\n }\n }\n } else if(threadId) {\n return {\n _: 'inputNotifyForumTopic',\n peer: this.getInputPeerById(peerId),\n top_msg_id: getServerMessageId(threadId)\n } as any;\n } else {\n return {\n _: 'inputNotifyPeer',\n peer: this.getInputPeerById(peerId)\n } as any;\n }\n }\n\n public getInputPeerById(peerId: PeerId): InputPeer {\n if(!peerId) {\n return {_: 'inputPeerEmpty'};\n }\n\n if(!peerId.isUser()) {\n const chatId = peerId.toChatId();\n return this.appChatsManager.getInputPeer(chatId);\n }\n\n const userId = peerId.toUserId();\n return this.appUsersManager.getUserInputPeer(userId);\n }\n\n /**\n * ! use it only in safe places like requests\n */\n public getInputPeerSelf(): InputPeer.inputPeerSelf {\n return {_: 'inputPeerSelf'};\n }\n\n public getInputDialogPeerById(peerId: PeerId | InputPeer): InputDialogPeer {\n return {\n _: 'inputDialogPeer',\n peer: isObject(peerId) ? peerId : this.getInputPeerById(peerId)\n };\n }\n\n public getPeerSearchText(peerId: PeerId) {\n let text: string;\n if(this.isUser(peerId)) {\n text = '%pu ' + this.appUsersManager.getUserSearchText(peerId.toUserId());\n } else {\n text = '%pg ' + this.appChatsManager.getChatSearchText(peerId.toChatId());\n }\n\n return text;\n }\n\n public getDialogType(peerId: PeerId, threadId?: number): PeerType {\n if(this.peerId === peerId && threadId) {\n return 'savedDialog';\n } else if(this.isMegagroup(peerId)) {\n return 'megagroup';\n } else if(this.isChannel(peerId)) {\n return 'channel';\n } else if(!this.isUser(peerId)) {\n return 'group';\n } else {\n return peerId === this.peerId ? 'saved' : 'chat';\n }\n }\n\n public getDeleteButtonText(peerId: PeerId): Extract {\n switch(this.getDialogType(peerId)) {\n case 'channel':\n return this.appChatsManager.hasRights(peerId.toChatId(), 'delete_chat') ? 'ChannelDelete' : 'ChatList.Context.LeaveChannel';\n\n case 'megagroup':\n case 'group':\n return this.appChatsManager.hasRights(peerId.toChatId(), 'delete_chat') ? 'DeleteMega' : 'ChatList.Context.LeaveGroup';\n\n default:\n return 'ChatList.Context.DeleteChat';\n }\n }\n\n public noForwards(peerId: PeerId) {\n if(peerId.isUser()) return false;\n else {\n const chat = this.appChatsManager.getChat(peerId.toChatId());\n return !!(chat as Chat.chat).pFlags?.noforwards;\n }\n }\n\n public mirrorAllPeers(port?: MessageEventSource) {\n const peers: any = {\n ...this.appUsersManager.getUsers()\n };\n\n const chats = this.appChatsManager.getChats();\n for(const chatId in chats) {\n peers[chatId.toPeerId(true)] = chats[chatId];\n }\n\n MTProtoMessagePort.getInstance().invokeVoid('mirror', {\n name: 'peers',\n value: peers\n }, port);\n }\n}\n\nexport type IsPeerType = 'isChannel' | 'isMegagroup' | 'isAnyGroup' | 'isBroadcast' | 'isBot' | 'isContact' | 'isUser' | 'isAnyChat' | 'isRegularUser';\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {Photo, PhotoSize, PhotosPhotos} from '../../layer';\nimport {ReferenceContext} from '../mtproto/referenceDatabase';\nimport isObject from '../../helpers/object/isObject';\nimport safeReplaceArrayInObject from '../../helpers/object/safeReplaceArrayInObject';\nimport {AppManager} from './manager';\n\nexport type MyPhoto = Photo.photo;\n\n// TIMES = 2 DUE TO SIDEBAR AND CHAT\n// let TEST_FILE_REFERENCE = \"5440692274120994569\", TEST_FILE_REFERENCE_TIMES = 2;\n\nexport class AppPhotosManager extends AppManager {\n private photos: {\n [id: string]: MyPhoto\n } = {};\n\n public savePhoto(photo: Photo, context?: ReferenceContext) {\n if(!photo || photo._ === 'photoEmpty') return;\n\n /* if(photo.id === TEST_FILE_REFERENCE) {\n console.warn('Testing FILE_REFERENCE_EXPIRED');\n const bytes = [2, 67, 175, 43, 190, 0, 0, 20, 62, 95, 111, 33, 45, 99, 220, 116, 218, 11, 167, 127, 213, 18, 127, 32, 243, 202, 117, 80, 30];\n //photo.file_reference = new Uint8Array(bytes);\n photo.file_reference = bytes;\n if(!--TEST_FILE_REFERENCE_TIMES) {\n TEST_FILE_REFERENCE = '';\n }\n } */\n\n const oldPhoto = this.photos[photo.id];\n if(photo.file_reference) { // * because we can have a new object w/o the file_reference while sending\n safeReplaceArrayInObject('file_reference', oldPhoto, photo);\n this.referenceDatabase.saveContext(photo.file_reference, context);\n }\n\n if(photo.sizes?.length) {\n // * sometimes photoStrippedSize can be the last item\n photo.sizes.sort((a, b) => {\n return ((a as PhotoSize.photoSize).size || ((a as PhotoSize.photoSizeProgressive).sizes ? Infinity : 0)) - ((b as PhotoSize.photoSize).size || ((b as PhotoSize.photoSizeProgressive).sizes ? Infinity : 0));\n });\n\n const size = photo.sizes[photo.sizes.length - 1];\n if(size._ === 'photoSizeProgressive') {\n size.size = size.sizes[size.sizes.length - 1];\n }\n }\n\n if(oldPhoto) {\n return Object.assign(oldPhoto, photo);\n }\n\n return this.photos[photo.id] = photo;\n }\n\n public getUserPhotos(userId: UserId, maxId: Photo.photo['id'] = '0', limit: number = 20) {\n const inputUser = this.appUsersManager.getUserInput(userId);\n return this.apiManager.invokeApiCacheable('photos.getUserPhotos', {\n user_id: inputUser,\n offset: 0,\n limit,\n max_id: maxId\n }, {cacheSeconds: 60}).then((photosResult) => {\n this.appUsersManager.saveApiUsers(photosResult.users);\n const photoIds = photosResult.photos.map((photo, idx) => {\n photosResult.photos[idx] = this.savePhoto(photo, {type: 'profilePhoto', peerId: userId.toPeerId()});\n return photo.id;\n });\n\n // ! WARNING !\n if(maxId !== '0' && maxId) {\n const idx = photoIds.indexOf(maxId);\n if(idx !== -1) {\n photoIds.splice(idx, 1);\n }\n }\n\n return {\n count: (photosResult as PhotosPhotos.photosPhotosSlice).count || photoIds.length,\n photos: photoIds\n };\n });\n }\n\n /* public getPhotoURL(photo: MTPhoto | MTMyDocument, photoSize: MTPhotoSize) {\n const downloadOptions = this.getPhotoDownloadOptions(photo, photoSize);\n\n return {url: getFileURL('photo', downloadOptions), location: downloadOptions.location};\n } */\n\n /* public isDownloaded(media: any) {\n const isPhoto = media._ === 'photo';\n const photo = isPhoto ? this.getPhoto(media.id) : null;\n let isDownloaded: boolean;\n if(photo) {\n isDownloaded = photo.downloaded > 0;\n } else {\n const cachedThumb = this.getDocumentCachedThumb(media.id);\n isDownloaded = cachedThumb?.downloaded > 0;\n }\n\n return isDownloaded;\n } */\n\n public getPhoto(photoId: any/* MyPhoto | string */): MyPhoto {\n return isObject(photoId) ? photoId as MyPhoto : this.photos[photoId as any as string];\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport copy from '../../helpers/object/copy';\nimport {InputMedia, Message, MessageEntity, MessageMedia, Poll, PollResults} from '../../layer';\nimport {logger, LogTypes} from '../logger';\nimport parseMarkdown from '../richTextProcessor/parseMarkdown';\nimport {AppManager} from './manager';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\n\ntype PollId = Poll['id'];\n\nexport class AppPollsManager extends AppManager {\n public polls: {[id: PollId]: Poll} = {};\n public results: {[id: PollId]: PollResults} = {};\n public pollToMessages: {[id: PollId]: Set} = {};\n\n private log = logger('POLLS', LogTypes.Error);\n\n protected after() {\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateMessagePoll: (update) => {\n this.log('updateMessagePoll:', update);\n\n let poll: Poll = update.poll || this.polls[update.poll_id];\n if(!poll) {\n return;\n }\n\n let results = update.results;\n const ret = this.savePoll(poll, results as any);\n poll = ret.poll;\n results = ret.results;\n\n this.rootScope.dispatchEvent('poll_update', {poll, results: results as any});\n }\n });\n }\n\n public savePoll(poll: Poll, results: PollResults, message?: Message.message) {\n if(message) {\n this.updatePollToMessage(message, true);\n }\n\n const id = poll.id;\n if(this.polls[id]) {\n poll = Object.assign(this.polls[id], poll);\n results = this.saveResults(poll, results);\n } else {\n this.polls[id] = poll;\n\n poll.chosenIndexes = [];\n results = this.saveResults(poll, results);\n }\n\n return {poll, results};\n }\n\n public saveResults(poll: Poll, results: PollResults) {\n if(this.results[poll.id]) {\n results = Object.assign(this.results[poll.id], results);\n } else {\n this.results[poll.id] = results;\n }\n\n if(!results.pFlags.min) { // ! https://core.telegram.org/constructor/pollResults - min\n poll.chosenIndexes.length = 0;\n if(results?.results?.length) {\n results.results.forEach((answer, idx) => {\n if(answer.pFlags?.chosen) {\n poll.chosenIndexes.push(idx);\n }\n });\n }\n }\n\n return results;\n }\n\n public getPoll(pollId: PollId): {poll: Poll, results: PollResults} {\n return {\n poll: this.polls[pollId],\n results: this.results[pollId]\n };\n }\n\n public getInputMediaPoll(poll: Poll, correctAnswers?: Uint8Array[], solution?: string, solutionEntities?: MessageEntity[]): InputMedia.inputMediaPoll {\n if(solution) {\n [solution, solutionEntities] = parseMarkdown(solution, solutionEntities);\n } else {\n solution = undefined; // can be string here\n }\n\n return {\n _: 'inputMediaPoll',\n poll,\n correct_answers: correctAnswers,\n solution,\n solution_entities: solution ? solutionEntities : undefined\n };\n }\n\n public updatePollToMessage(message: Message.message, add: boolean) {\n const {id} = (message.media as MessageMedia.messageMediaPoll).poll;\n let set = this.pollToMessages[id];\n\n if(!add && !set) {\n return;\n }\n\n if(!set) {\n set = this.pollToMessages[id] = new Set();\n }\n\n const key = message.peerId + '_' + message.mid;\n if(add) set.add(key);\n else set.delete(key);\n\n if(!add && !set.size) {\n delete this.polls[id];\n delete this.results[id];\n delete this.pollToMessages[id];\n }\n }\n\n public sendVote(message: Message.message, optionIds: number[]): Promise {\n const poll: Poll = (message.media as MessageMedia.messageMediaPoll).poll;\n\n const options: Uint8Array[] = optionIds.map((index) => {\n return poll.answers[index].option;\n });\n\n const messageId = message.mid;\n const peerId = message.peerId;\n const inputPeer = this.appPeersManager.getInputPeerById(peerId);\n\n if(message.pFlags.is_outgoing) {\n return this.appMessagesManager.invokeAfterMessageIsSent(messageId, 'sendVote', (message) => {\n this.log('invoke sendVote callback');\n return this.sendVote(message as Message.message, optionIds);\n });\n }\n\n return this.apiManager.invokeApi('messages.sendVote', {\n peer: inputPeer,\n msg_id: getServerMessageId(message.mid),\n options\n }).then((updates) => {\n this.log('sendVote updates:', updates);\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n\n public getResults(message: Message.message) {\n const inputPeer = this.appPeersManager.getInputPeerById(message.peerId);\n\n return this.apiManager.invokeApi('messages.getPollResults', {\n peer: inputPeer,\n msg_id: getServerMessageId(message.mid)\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n this.log('getResults updates:', updates);\n });\n }\n\n public getVotes(message: Message.message, option?: Uint8Array, offset?: string, limit = 20) {\n return this.apiManager.invokeApi('messages.getPollVotes', {\n peer: this.appPeersManager.getInputPeerById(message.peerId),\n id: getServerMessageId(message.mid),\n option,\n offset,\n limit\n }).then((votesList) => {\n this.log('getPollVotes messages:', votesList);\n\n this.appUsersManager.saveApiUsers(votesList.users);\n this.appChatsManager.saveApiChats(votesList.chats);\n\n return votesList;\n });\n }\n\n public stopPoll(message: Message.message) {\n const poll: Poll = (message.media as MessageMedia.messageMediaPoll).poll;\n\n if(poll.pFlags.closed) return Promise.resolve();\n\n const newPoll = copy(poll);\n newPoll.pFlags.closed = true;\n return this.appMessagesManager.editMessage(message, undefined, {\n newMedia: this.getInputMediaPoll(newPoll)\n }).then(() => {\n // console.log('stopped poll');\n }, err => {\n this.log.error('stopPoll error:', err);\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {InputPrivacyKey, InputPrivacyRule, PrivacyRule, PrivacyKey, GlobalPrivacySettings} from '../../layer';\nimport convertInputKeyToKey from '../../helpers/string/convertInputKeyToKey';\nimport {AppManager} from './manager';\n\nexport class AppPrivacyManager extends AppManager {\n private privacy: Partial<{\n [key in PrivacyKey['_']]: PrivacyRule[] | Promise\n }> = {};\n\n protected after() {\n this.apiUpdatesManager.addMultipleEventsListeners({\n updatePrivacy: (update) => {\n const key = update.key._;\n this.privacy[key] = update.rules;\n this.rootScope.dispatchEvent('privacy_update', update);\n }\n });\n }\n\n public setPrivacy(inputKey: InputPrivacyKey['_'], rules: InputPrivacyRule[]) {\n return this.apiManager.invokeApi('account.setPrivacy', {\n key: {\n _: inputKey\n },\n rules\n }).then((privacyRules) => {\n this.appUsersManager.saveApiUsers(privacyRules.users);\n this.appChatsManager.saveApiChats(privacyRules.chats);\n\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updatePrivacy',\n key: {\n _: convertInputKeyToKey(inputKey)\n },\n rules: rules.map((inputRule) => {\n const rule: PrivacyRule = {} as any;\n Object.assign(rule, inputRule);\n rule._ = convertInputKeyToKey(rule._) as any;\n return rule;\n })\n });\n\n // console.log('privacy rules', inputKey, privacyRules, privacyRules.rules);\n\n return privacyRules.rules;\n });\n }\n\n public getPrivacy(inputKey: InputPrivacyKey['_']) {\n const privacyKey: PrivacyKey['_'] = convertInputKeyToKey(inputKey) as any;\n const rules = this.privacy[privacyKey];\n if(rules) {\n return Promise.resolve(rules);\n }\n\n return this.privacy[privacyKey] = this.apiManager.invokeApi('account.getPrivacy', {\n key: {\n _: inputKey\n }\n }).then((privacyRules) => {\n this.appUsersManager.saveApiUsers(privacyRules.users);\n this.appChatsManager.saveApiChats(privacyRules.chats);\n\n // console.log('privacy rules', inputKey, privacyRules, privacyRules.rules);\n\n return this.privacy[privacyKey] = privacyRules.rules;\n });\n }\n\n public getGlobalPrivacySettings() {\n return this.apiManager.invokeApi('account.getGlobalPrivacySettings');\n }\n\n public setGlobalPrivacySettings(settings: GlobalPrivacySettings) {\n return this.apiManager.invokeApi('account.setGlobalPrivacySettings', {settings});\n }\n}\n","import {ChatFull, ChatParticipants} from '../../../../layer';\n\nexport default function getParticipantsCount(chatFull: ChatFull) {\n return (chatFull as ChatFull.channelFull).participants_count ||\n ((chatFull as ChatFull.chatFull).participants as ChatParticipants.chatParticipants)?.participants?.length ||\n 1;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Awaited} from '../types';\n\nexport default function callbackifyAll(\n values: T,\n callback: (result: { -readonly [P in keyof T]: Awaited }) => R\n): Promise> | R {\n if(values.some((value) => value instanceof Promise)) {\n return Promise.all(values).then(callback as any);\n } else {\n return callback(values as any);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {MyTopPeer} from './appUsersManager';\nimport tsNow from '../../helpers/tsNow';\nimport {ChannelParticipantsFilter, ChannelsChannelParticipants, ChannelParticipant, Chat, ChatFull, ChatParticipants, ChatPhoto, ExportedChatInvite, InputChannel, InputFile, SendMessageAction, Update, UserFull, Photo, PhotoSize, Updates, ChatParticipant, PeerSettings, SendAsPeer} from '../../layer';\nimport SearchIndex from '../searchIndex';\nimport {AppManager} from './manager';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\nimport getPhotoInput from './utils/photos/getPhotoInput';\nimport getParticipantPeerId from './utils/chats/getParticipantPeerId';\nimport ctx from '../../environment/ctx';\nimport {ReferenceContext} from '../mtproto/referenceDatabase';\nimport assumeType from '../../helpers/assumeType';\nimport makeError from '../../helpers/makeError';\nimport callbackify from '../../helpers/callbackify';\nimport getPeerActiveUsernames from './utils/peers/getPeerActiveUsernames';\nimport getParticipantsCount from './utils/chats/getParticipantsCount';\nimport callbackifyAll from '../../helpers/callbackifyAll';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\n\nexport type UserTyping = Partial<{userId: UserId, action: SendMessageAction, timeout: number}>;\n\nconst PEER_FULL_TTL = 3 * 60e3;\n\ntype GetChannelParticipantsOptions = {\n id: ChatId,\n filter?: ChannelParticipantsFilter,\n limit?: number,\n offset?: number,\n forMessagesSearch?: boolean\n};\n\nconst defaultGetChannelParticipantsOptions: Partial = {\n filter: {_: 'channelParticipantsRecent'},\n limit: 200,\n offset: 0\n};\n\nexport class AppProfileManager extends AppManager {\n // private botInfos: any = {};\n private usersFull: {[id: UserId]: UserFull.userFull} = {};\n private chatsFull: {[id: ChatId]: ChatFull} = {};\n private fullExpiration: {[peerId: PeerId]: number} = {};\n private typingsInPeer: {[key: string]: UserTyping[]};\n private peerSettings: {[peerId: PeerId]: PeerSettings};\n\n protected after() {\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateChatParticipants: this.onUpdateChatParticipants,\n\n updateChatParticipantAdd: this.onUpdateChatParticipantAdd,\n\n updateChatParticipantDelete: this.onUpdateChatParticipantDelete,\n\n updateUserTyping: this.onUpdateUserTyping,\n updateChatUserTyping: this.onUpdateUserTyping,\n updateChannelUserTyping: this.onUpdateUserTyping,\n\n updatePeerBlocked: this.onUpdatePeerBlocked,\n\n updatePeerSettings: this.onUpdatePeerSettings\n });\n\n this.rootScope.addEventListener('chat_update', (chatId) => {\n const fullChat = this.chatsFull[chatId];\n const chat: Chat.chat | Chat.channel | Chat.chatForbidden | Chat.channelForbidden = this.appChatsManager.getChat(chatId);\n if(!fullChat || !chat) {\n return;\n }\n\n let updated = false;\n if(!!fullChat.call !== !!(chat as Chat.chat).pFlags?.call_active) {\n updated = true;\n }\n\n const {photo} = chat as Chat.chat;\n if(photo) {\n const hasChatPhoto = photo._ !== 'chatPhotoEmpty';\n const hasFullChatPhoto = !!(fullChat.chat_photo && fullChat.chat_photo._ !== 'photoEmpty'); // chat_photo can be missing\n if(\n hasChatPhoto !== hasFullChatPhoto || (\n hasChatPhoto &&\n photo.photo_id !== fullChat.chat_photo?.id\n )\n ) {\n updated = true;\n }\n }\n\n if(updated) {\n this.refreshFullPeer(chatId.toPeerId(true));\n }\n });\n\n this.rootScope.addEventListener('channel_update', (chatId) => {\n this.refreshFullPeer(chatId.toPeerId(true));\n });\n\n // * genius\n this.rootScope.addEventListener('chat_full_update', (chatId) => {\n this.rootScope.dispatchEvent('peer_full_update', chatId.toPeerId(true));\n });\n\n // * genius\n this.rootScope.addEventListener('user_full_update', (userId) => {\n this.rootScope.dispatchEvent('peer_full_update', userId.toPeerId(false));\n });\n\n this.rootScope.addEventListener('invalidate_participants', (chatId) => {\n this.invalidateChannelParticipants(chatId);\n });\n\n this.rootScope.addEventListener('peer_bio_edit', (peerId) => {\n this.rootScope.dispatchEvent('user_full_update', peerId.toUserId());\n });\n\n this.typingsInPeer = {};\n this.peerSettings = {};\n }\n\n /* public saveBotInfo(botInfo: any) {\n const botId = botInfo && botInfo.user_id;\n if(!botId) {\n return null;\n }\n\n const commands: any = {};\n botInfo.commands.forEach((botCommand: any) => {\n commands[botCommand.command] = botCommand.description;\n });\n\n return this.botInfos[botId] = {\n id: botId,\n version: botInfo.version,\n shareText: botInfo.share_text,\n description: botInfo.description,\n commands: commands\n };\n } */\n\n public getProfile(id: UserId, override?: true) {\n if(this.usersFull[id] && !override && Date.now() < this.fullExpiration[id.toPeerId()]) {\n return this.usersFull[id];\n }\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'users.getFullUser',\n params: {\n id: this.appUsersManager.getUserInput(id)\n },\n processResult: (usersUserFull) => {\n this.appChatsManager.saveApiChats(usersUserFull.chats, true);\n this.appUsersManager.saveApiUsers(usersUserFull.users);\n\n const userFull = usersUserFull.full_user;\n const peerId = id.toPeerId(false);\n if(userFull.profile_photo) {\n userFull.profile_photo = this.appPhotosManager.savePhoto(userFull.profile_photo, {type: 'profilePhoto', peerId});\n }\n\n userFull.wallpaper = this.appThemesManager.saveWallPaper(userFull.wallpaper);\n\n const botInfo = userFull.bot_info;\n if(botInfo) {\n const referenceContext: ReferenceContext = {type: 'userFull', userId: id};\n botInfo.description_document = this.appDocsManager.saveDoc(botInfo.description_document, referenceContext);\n botInfo.description_photo = this.appPhotosManager.savePhoto(botInfo.description_photo, referenceContext);\n }\n\n userFull.business_intro = this.appBusinessManager.saveBusinessIntro(id, userFull.business_intro);\n\n if(userFull.personal_channel_message) {\n userFull.personal_channel_message = this.appMessagesIdsManager.generateMessageId(\n userFull.personal_channel_message,\n userFull.personal_channel_id\n );\n }\n\n this.appNotificationsManager.savePeerSettings({\n peerId,\n settings: userFull.notify_settings\n });\n\n this.usersFull[id] = userFull;\n this.fullExpiration[peerId] = Date.now() + PEER_FULL_TTL;\n\n /* if(userFull.bot_info) {\n userFull.bot_info = this.saveBotInfo(userFull.bot_info) as any;\n } */\n\n // appMessagesManager.savePinnedMessage(id, userFull.pinned_msg_id);\n\n this.rootScope.dispatchEvent('user_full_update', id);\n return userFull;\n }\n });\n }\n\n public getProfileByPeerId(peerId: PeerId, override?: true) {\n if(this.appPeersManager.isAnyChat(peerId)) return this.getChatFull(peerId.toChatId(), override);\n else return this.getProfile(peerId.toUserId(), override);\n }\n\n public getCachedFullChat(chatId: ChatId) {\n return this.chatsFull[chatId];\n }\n\n public getCachedFullUser(userId: UserId) {\n return this.usersFull[userId];\n }\n\n public getCachedProfileByPeerId(peerId: PeerId) {\n return peerId.isUser() ? this.getCachedFullUser(peerId.toUserId()) : this.getCachedFullChat(peerId.toChatId());\n }\n\n public modifyCachedFullChat(chatId: ChatId, modify: (fullChat: T) => boolean | void) {\n this.modifyCachedFullPeer(chatId.toPeerId(true), modify as any);\n }\n\n public modifyCachedFullUser(userId: UserId, modify: (fullUser: UserFull) => boolean | void) {\n this.modifyCachedFullPeer(userId.toPeerId(true), modify as any);\n }\n\n public modifyCachedFullPeer(peerId: PeerId, modify: (fullPeer: UserFull | ChatFull) => boolean | void) {\n const fullPeer = this.getCachedProfileByPeerId(peerId);\n if(fullPeer) {\n if(modify(fullPeer) === false) {\n return;\n }\n\n if(peerId.isUser()) {\n this.rootScope.dispatchEvent('user_full_update', peerId.toUserId());\n } else {\n this.rootScope.dispatchEvent('chat_full_update', peerId.toChatId());\n }\n }\n }\n\n public isUserBlocked(userId: UserId) {\n return callbackify(this.getProfile(userId), (userFull) => {\n return !!userFull.pFlags.blocked;\n });\n }\n\n public isCachedUserBlocked(userId: UserId) {\n const result = this.isUserBlocked(userId);\n return result instanceof Promise ? undefined : result;\n }\n\n public async getFullPhoto(peerId: PeerId) {\n const profile = await this.getProfileByPeerId(peerId);\n switch(profile._) {\n case 'userFull':\n return profile.profile_photo;\n case 'channelFull':\n case 'chatFull':\n return profile.chat_photo;\n }\n }\n\n /* public getPeerBots(peerId: PeerId) {\n var peerBots: any[] = [];\n if(peerId >= 0 && !appUsersManager.isBot(peerId) ||\n (appPeersManager.isChannel(peerId) && !appPeersManager.isMegagroup(peerId))) {\n return Promise.resolve(peerBots);\n }\n if(peerId >= 0) {\n return this.getProfile(peerId).then((userFull: any) => {\n var botInfo = userFull.bot_info;\n if(botInfo && botInfo._ !== 'botInfoEmpty') {\n peerBots.push(botInfo);\n }\n return peerBots;\n });\n }\n\n return this.getChatFull(peerId.toChatId()).then((chatFull: any) => {\n chatFull.bot_info.forEach((botInfo: any) => {\n peerBots.push(this.saveBotInfo(botInfo))\n });\n return peerBots;\n });\n } */\n\n public getChatFull(id: ChatId, override?: true) {\n if(this.appChatsManager.isChannel(id)) {\n return this.getChannelFull(id, override);\n }\n\n const peerId = id.toPeerId(true);\n const fullChat = this.chatsFull[id] as ChatFull.chatFull;\n if(fullChat && !override && Date.now() < this.fullExpiration[peerId]) {\n const chat = this.appChatsManager.getChat(id) as Chat.chat;\n if(\n chat.pFlags.left ||\n chat.pFlags.deactivated ||\n chat.version === (fullChat.participants as ChatParticipants.chatParticipants).version\n ) {\n return fullChat as ChatFull;\n }\n }\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.getFullChat',\n params: {\n chat_id: id\n },\n processResult: (result) => {\n this.appChatsManager.saveApiChats(result.chats, true);\n this.appUsersManager.saveApiUsers(result.users);\n const chatFull = result.full_chat as ChatFull.chatFull;\n if(chatFull && chatFull.chat_photo && chatFull.chat_photo.id) {\n chatFull.chat_photo = this.appPhotosManager.savePhoto(chatFull.chat_photo, {type: 'profilePhoto', peerId});\n }\n\n if(chatFull.call) {\n this.appGroupCallsManager.saveGroupCall(chatFull.call, id);\n }\n\n // appMessagesManager.savePinnedMessage(peerId, fullChat.pinned_msg_id);\n this.appNotificationsManager.savePeerSettings({\n peerId,\n settings: chatFull.notify_settings\n });\n\n this.chatsFull[id] = chatFull;\n this.fullExpiration[peerId] = Date.now() + PEER_FULL_TTL;\n this.rootScope.dispatchEvent('chat_full_update', id);\n\n return chatFull;\n }\n });\n }\n\n public async getChatInviteLink(id: ChatId, force?: boolean) {\n const chatFull = await this.getChatFull(id);\n if(!force &&\n chatFull.exported_invite &&\n chatFull.exported_invite._ == 'chatInviteExported') {\n return chatFull.exported_invite.link;\n }\n\n return this.apiManager.invokeApi('messages.exportChatInvite', {\n peer: this.appPeersManager.getInputPeerById(id.toPeerId(true))\n }).then((exportedInvite) => {\n if(this.chatsFull[id] !== undefined) {\n this.chatsFull[id].exported_invite = exportedInvite;\n }\n\n return (exportedInvite as ExportedChatInvite.chatInviteExported).link;\n });\n }\n\n private filterParticipantsByQuery>(participants: T, q: string): T {\n const index = this.appUsersManager.createSearchIndex();\n participants.forEach((chatParticipant) => {\n const peerId = getParticipantPeerId(chatParticipant);\n index.indexObject(peerId, this.appPeersManager.getPeerSearchText(peerId));\n });\n\n const found = index.search(q);\n const filteredParticipants = participants.filter((chatParticipant) => {\n const peerId = getParticipantPeerId(chatParticipant);\n return found.has(peerId);\n });\n\n return filteredParticipants as T;\n }\n\n public getParticipants(options: GetChannelParticipantsOptions) {\n options = {...defaultGetChannelParticipantsOptions, ...options};\n const {id, filter} = options;\n if(this.appChatsManager.isChannel(id)) {\n return this.getChannelParticipants(options);\n }\n\n return callbackify(this.getChatFull(id), (chatFull) => {\n const chatParticipants = (chatFull as ChatFull.chatFull).participants;\n if(chatParticipants._ !== 'chatParticipants') {\n throw makeError('CHAT_PRIVATE');\n }\n\n if(filter._ === 'channelParticipantsSearch' && filter.q.trim()) {\n return {\n ...chatParticipants,\n participants: this.filterParticipantsByQuery(chatParticipants.participants, filter.q)\n };\n }\n\n return chatParticipants;\n });\n }\n\n public getParticipant(id: ChatId, peerId: PeerId) {\n if(this.appChatsManager.isChannel(id)) {\n return this.getChannelParticipant(id, peerId);\n }\n\n return Promise.resolve(this.getParticipants({id})).then((chatParticipants) => {\n assumeType(chatParticipants);\n const found = chatParticipants.participants.find((chatParticipant) => {\n if(getParticipantPeerId(chatParticipant) === peerId) {\n return chatParticipant;\n }\n });\n\n if(!found) {\n throw makeError('USER_NOT_PARTICIPANT');\n }\n\n return found;\n });\n }\n\n public getChannelParticipants(options: GetChannelParticipantsOptions) {\n options = {...defaultGetChannelParticipantsOptions, ...options};\n const {id, filter, offset, limit} = options;\n if(!this.appChatsManager.hasRights(id, 'view_participants')) {\n throw makeError('CHAT_ADMIN_REQUIRED');\n }\n\n const MANUALLY_FILTER: Set = new Set([\n 'channelParticipantsAdmins'\n ]);\n\n const result = this.apiManager.invokeApiCacheable('channels.getParticipants', {\n channel: this.appChatsManager.getChannelInput(id),\n filter,\n offset,\n limit,\n hash: '0'\n }, {cacheSeconds: 60, syncIfHasResult: true});\n\n let sendAsPeersResult: MaybePromise;\n if(options.forMessagesSearch) {\n try {\n sendAsPeersResult = this.appChatsManager.getSendAs(id);\n if(sendAsPeersResult instanceof Promise) {\n sendAsPeersResult = sendAsPeersResult.catch(() => undefined);\n }\n } catch(err) {\n\n }\n }\n\n return callbackifyAll([result, sendAsPeersResult], ([result, sendAsPeers]) => {\n this.appPeersManager.saveApiPeers(result as ChannelsChannelParticipants.channelsChannelParticipants);\n\n const q = (filter as ChannelParticipantsFilter.channelParticipantsAdmins).q;\n if(sendAsPeers) { // * insert group and self if have send as peers\n const sendAsParticipants: ChannelParticipant.channelParticipant[] = sendAsPeers.map((sendAsPeer) => {\n return {\n _: 'channelParticipant',\n date: 0,\n user_id: 0,\n peer: sendAsPeer.peer\n };\n });\n\n const peerId = id.toPeerId(true);\n const channelParticipant: ChannelParticipant.channelParticipant = {\n _: 'channelParticipant',\n date: 0,\n user_id: 0,\n peer: this.appPeersManager.getOutputPeer(peerId)\n };\n\n const myPeerId = this.appPeersManager.peerId;\n const myParticipant: ChannelParticipant.channelParticipant = {\n _: 'channelParticipant',\n date: 0,\n user_id: myPeerId.toUserId()\n };\n\n sendAsParticipants.unshift(channelParticipant, myParticipant);\n\n const participants = (result as ChannelsChannelParticipants.channelsChannelParticipants).participants.slice();\n const sendAsFiltered = this.filterParticipantsByQuery(sendAsParticipants, q);\n if(\n (sendAsFiltered.includes(channelParticipant) || !q?.trim()) &&\n !participants.some((p) => getParticipantPeerId(p) === peerId)\n ) {\n indexOfAndSplice(sendAsFiltered, channelParticipant);\n participants.unshift(channelParticipant);\n }\n\n for(const participant of sendAsFiltered) {\n const peerId = getParticipantPeerId(participant);\n if(!participants.some((p) => getParticipantPeerId(p) === peerId) ||\n !participants.some((p) => getParticipantPeerId(p) === myPeerId)) {\n participants.unshift(myParticipant);\n break;\n }\n }\n\n return {\n ...result,\n participants\n } as ChannelsChannelParticipants.channelsChannelParticipants;\n }\n\n if(MANUALLY_FILTER.has(filter._) && q?.trim()) {\n return {\n ...result,\n participants: this.filterParticipantsByQuery(\n (result as ChannelsChannelParticipants.channelsChannelParticipants).participants,\n q\n )\n } as ChannelsChannelParticipants.channelsChannelParticipants;\n }\n\n return result as ChannelsChannelParticipants.channelsChannelParticipants;\n });\n }\n\n public getChannelParticipant(id: ChatId, peerId: PeerId) {\n return this.apiManager.invokeApiSingle('channels.getParticipant', {\n channel: this.appChatsManager.getChannelInput(id),\n participant: this.appPeersManager.getInputPeerById(peerId)\n }).then((channelParticipant) => {\n this.appUsersManager.saveApiUsers(channelParticipant.users);\n return channelParticipant.participant;\n });\n }\n\n public getChannelFull(id: ChatId, override?: true) {\n const peerId = id.toPeerId(true);\n if(this.chatsFull[id] !== undefined && !override && Date.now() < this.fullExpiration[peerId]) {\n return this.chatsFull[id] as ChatFull.channelFull;\n }\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'channels.getFullChannel',\n params: {\n channel: this.appChatsManager.getChannelInput(id)\n },\n processResult: (result) => {\n this.appChatsManager.saveApiChats(result.chats, true);\n this.appUsersManager.saveApiUsers(result.users);\n const fullChannel = result.full_chat as ChatFull.channelFull;\n if(fullChannel && fullChannel.chat_photo.id) {\n fullChannel.chat_photo = this.appPhotosManager.savePhoto(fullChannel.chat_photo, {type: 'profilePhoto', peerId});\n // appPhotosManager.savePhoto(fullChannel.chat_photo);\n }\n\n fullChannel.wallpaper = this.appThemesManager.saveWallPaper(fullChannel.wallpaper);\n\n if(fullChannel.call) {\n this.appGroupCallsManager.saveGroupCall(fullChannel.call, id);\n }\n\n this.appNotificationsManager.savePeerSettings({\n peerId,\n settings: fullChannel.notify_settings\n });\n\n this.chatsFull[id] = fullChannel;\n this.fullExpiration[peerId] = Date.now() + PEER_FULL_TTL;\n this.rootScope.dispatchEvent('chat_full_update', id);\n\n return fullChannel;\n },\n processError: (error) => {\n switch(error.type) {\n case 'CHANNEL_PRIVATE':\n const chat = this.appChatsManager.getChat(id) as Chat.channel | Chat.channelForbidden;\n if(chat._ !== 'channelForbidden') {\n this.appChatsManager.saveApiChats([{\n _: 'channelForbidden',\n id,\n access_hash: chat.access_hash,\n title: chat.title,\n pFlags: chat.pFlags\n }]);\n }\n\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateChannel',\n channel_id: id\n });\n break;\n }\n\n throw error;\n }\n });\n }\n\n public getMentions(\n chatId: ChatId,\n query: string,\n threadId?: number,\n global?: boolean\n ): Promise {\n const processUserIds = (topPeers: MyTopPeer[]) => {\n const startsWithAt = query.charAt(0) === '@';\n if(startsWithAt) query = query.slice(1);\n\n const hasQuery = !!query.trim();\n if(!hasQuery) {\n return topPeers.map((peer) => peer.id);\n }\n\n const index = new SearchIndex({\n ignoreCase: true\n });\n\n const ratingMap: Map = new Map();\n topPeers.forEach((peer) => {\n index.indexObject(peer.id, this.appUsersManager.getUserSearchText(peer.id));\n ratingMap.set(peer.id, peer.rating);\n });\n\n const peerIds = Array.from(index.search(query));\n peerIds.sort((a, b) => ratingMap.get(b) - ratingMap.get(a));\n return peerIds;\n };\n\n let promise: Promise;\n if(this.appChatsManager.isChannel(chatId)) {\n promise = Promise.resolve(this.getChannelParticipants({\n id: chatId,\n filter: {\n _: 'channelParticipantsMentions',\n q: query,\n top_msg_id: getServerMessageId(threadId)\n },\n limit: 50,\n offset: 0\n })).then((cP) => {\n return cP.participants.map((p) => getParticipantPeerId(p));\n });\n } else if(chatId) {\n promise = Promise.resolve(this.getChatFull(chatId)).then((chatFull) => {\n return ((chatFull as ChatFull.chatFull).participants as ChatParticipants.chatParticipants).participants.map((p) => p.user_id.toPeerId());\n });\n }\n\n return Promise.all([\n // [],\n global ? [] as MyTopPeer[] : this.appUsersManager.getTopPeers('bots_inline').catch(() => [] as MyTopPeer[]),\n promise,\n global && this.appUsersManager.getContactsPeerIds(query, false, 'rating', 30)\n ]).then(([botsInlineTopPeers, chatMembers, searchResults]) => {\n if(searchResults) {\n searchResults = searchResults.filter((peerId) => {\n const peer = this.appPeersManager.getPeer(peerId);\n return !!getPeerActiveUsernames(peer)[0];\n });\n }\n\n const convertPeerIds = (peerIds: PeerId[]) => peerIds ? peerIds.map((peerId) => ({id: peerId, rating: 0})) : [];\n const peers = botsInlineTopPeers.concat(\n convertPeerIds(chatMembers),\n convertPeerIds(searchResults)\n );\n\n return processUserIds(peers);\n });\n }\n\n public invalidateChannelParticipants(id: ChatId) {\n this.apiManager.clearCache('channels.getParticipants', (params) => (params.channel as InputChannel.inputChannel).channel_id === id);\n\n if(!this.getCachedFullChat(id)) {\n return;\n }\n\n this.refreshFullPeer(id.toPeerId(true));\n }\n\n private refreshFullPeer(peerId: PeerId) {\n if(peerId.isUser()) {\n const userId = peerId.toUserId();\n delete this.usersFull[userId];\n this.rootScope.dispatchEvent('user_full_update', userId);\n } else {\n const chatId = peerId.toChatId();\n delete this.chatsFull[chatId];\n this.rootScope.dispatchEvent('chat_full_update', chatId);\n }\n\n // ! эта строчка будет создавать race condition:\n // ! запрос вернёт chat с установленным флагом call_not_empty, хотя сам апдейт уже будет применён\n // this.getProfileByPeerId(peerId, true);\n }\n\n public refreshFullPeerIfNeeded(peerId: PeerId) {\n const full = peerId.isUser() ? this.usersFull[peerId.toUserId()] : this.chatsFull[peerId.toChatId()];\n if(full) {\n this.refreshFullPeer(peerId);\n }\n }\n\n public updateProfile(first_name?: string, last_name?: string, about?: string) {\n return this.apiManager.invokeApi('account.updateProfile', {\n first_name,\n last_name,\n about\n }).then((user) => {\n this.appUsersManager.saveApiUser(user);\n\n if(about !== undefined) {\n const peerId = user.id.toPeerId();\n const userFull = this.usersFull[user.id];\n if(userFull) {\n userFull.about = about;\n }\n\n this.rootScope.dispatchEvent('peer_bio_edit', peerId);\n }\n\n return this.getProfile(user.id, true);\n });\n }\n\n public setBotInfo(botId: BotId, name?: string, about?: string) {\n return this.apiManager.invokeApi('bots.setBotInfo', {\n lang_code: '',\n bot: this.appUsersManager.getUserInput(botId),\n name,\n about\n }).then(() => {\n const user = this.appUsersManager.getUser(botId);\n if(name !== undefined) {\n this.appUsersManager.saveApiUser({\n ...user,\n first_name: name\n });\n }\n\n const userFull = this.getCachedFullUser(botId);\n if(about !== undefined) {\n if(userFull) {\n userFull.about = about;\n }\n\n this.rootScope.dispatchEvent('peer_bio_edit', botId.toPeerId());\n }\n\n return this.getProfile(botId, true);\n });\n }\n\n public getBotInfo(botId: BotId) {\n return this.apiManager.invokeApiSingle('bots.getBotInfo', {\n bot: this.appUsersManager.getUserInput(botId),\n lang_code: ''\n });\n }\n\n public uploadProfilePhoto(inputFile: InputFile, botId?: BotId) {\n return this.apiManager.invokeApi('photos.uploadProfilePhoto', {\n file: inputFile,\n bot: botId ? this.appUsersManager.getUserInput(botId) : undefined\n }).then((updateResult) => {\n // ! sometimes can have no user in users\n const photo = updateResult.photo as Photo.photo;\n if(!updateResult.users.length) {\n const strippedThumb = photo.sizes.find((size) => size._ === 'photoStrippedSize') as PhotoSize.photoStrippedSize;\n updateResult.users.push({\n ...(botId ? this.appUsersManager.getUser(botId) : this.appUsersManager.getSelf()),\n photo: {\n _: 'userProfilePhoto',\n dc_id: photo.dc_id,\n photo_id: photo.id,\n stripped_thumb: strippedThumb?.bytes,\n pFlags: {\n\n }\n }\n });\n }\n this.appUsersManager.saveApiUsers(updateResult.users);\n\n const peerId = botId ? botId.toPeerId() : this.appPeersManager.peerId;\n this.appPhotosManager.savePhoto(updateResult.photo, {\n type: 'profilePhoto',\n peerId\n });\n\n const userId = peerId.toUserId();\n // this.apiUpdatesManager.processLocalUpdate({\n // _: 'updateUserPhoto',\n // user_id: userId,\n // date: tsNow(true),\n // photo: this.appUsersManager.getUser(userId).photo,\n // previous: true\n // });\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateUser',\n user_id: userId\n });\n });\n }\n\n public deletePhotos(photoIds: string[]) {\n return this.apiManager.invokeApiSingle('photos.deletePhotos', {\n id: photoIds.map((photoId) => {\n const photo = this.appPhotosManager.getPhoto(photoId);\n return getPhotoInput(photo);\n })\n }).then((deletedList) => {\n\n });\n }\n\n private verifyParticipantForOnlineCount(participant: {user_id: UserId}) {\n const user = this.appUsersManager.getUser(participant.user_id);\n return !!(user && user.status && user.status._ === 'userStatusOnline');\n }\n\n private reduceParticipantsForOnlineCount(participants: {user_id: UserId}[]) {\n return participants.reduce((acc, participant) => {\n return acc + +this.verifyParticipantForOnlineCount(participant);\n }, 0);\n }\n\n public getOnlines(id: ChatId): MaybePromise {\n const minOnline = 1;\n if(this.appChatsManager.isBroadcast(id)) {\n return minOnline;\n }\n\n return callbackify(this.getChatFull(id), (chatFull) => {\n if(getParticipantsCount(chatFull) < 2) {\n return minOnline;\n }\n\n if(this.appChatsManager.isMegagroup(id)) {\n if((chatFull as ChatFull.channelFull).participants_count <= 100) {\n const channelParticipantsResult = this.getChannelParticipants({\n id,\n filter: {_: 'channelParticipantsRecent'},\n limit: 100\n });\n return callbackify(channelParticipantsResult, (channelParticipants) => {\n return this.reduceParticipantsForOnlineCount(channelParticipants.participants as ChannelParticipant.channelParticipant[]);\n });\n }\n\n const chatOnlinesResult = this.apiManager.invokeApiCacheable('messages.getOnlines', {\n peer: this.appChatsManager.getChannelInputPeer(id)\n }, {cacheSeconds: 60, syncIfHasResult: true});\n\n return callbackify(chatOnlinesResult, (chatOnlines) => {\n const onlines = chatOnlines.onlines ?? minOnline;\n return onlines;\n });\n }\n\n const _participants = (chatFull as ChatFull.chatFull).participants as ChatParticipants.chatParticipants;\n if(_participants?.participants) {\n return this.reduceParticipantsForOnlineCount(_participants.participants);\n } else {\n return minOnline;\n }\n });\n }\n\n private getTypingsKey(peerId: PeerId, threadId?: number) {\n return peerId + (threadId ? `_${threadId}` : '');\n }\n\n public getPeerTypings(peerId: PeerId, threadId?: number) {\n return this.typingsInPeer[this.getTypingsKey(peerId, threadId)];\n }\n\n public canGiftPremium(userId: UserId) {\n const user = this.appUsersManager.getUser(userId);\n if(user?.pFlags?.premium) {\n return false;\n }\n\n return callbackify(this.getProfile(userId), (userFull) => {\n const user = this.appUsersManager.getUser(userId);\n return !!userFull.premium_gifts && !user?.pFlags?.premium;\n });\n }\n\n public canViewStatistics(peerId: PeerId) {\n if(peerId.isUser()) return false;\n\n const chatId = peerId.toChatId();\n const chatFull = this.getCachedFullChat(chatId);\n if(!chatFull) return false;\n\n return !!(\n (chatFull as ChatFull.channelFull).stats_dc &&\n (chatFull as ChatFull.channelFull).pFlags.can_view_stats\n /* && this.appChatsManager.hasRights(chatId, 'view_statistics') */\n );\n }\n\n public refreshPeerSettingsIfNeeded(peerId: PeerId) {\n if(this.peerSettings[peerId]) {\n delete this.peerSettings[peerId];\n callbackify(this.getPeerSettings(peerId), (peerSettings) => {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updatePeerSettings',\n peer: this.appPeersManager.getOutputPeer(peerId),\n settings: peerSettings\n });\n });\n }\n }\n\n public getPeerSettings(peerId: PeerId) {\n if(this.peerSettings[peerId]) return this.peerSettings[peerId];\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.getPeerSettings',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId)\n },\n processResult: (messagesPeerSettings) => {\n this.appChatsManager.saveApiChats(messagesPeerSettings.chats, true);\n this.appUsersManager.saveApiUsers(messagesPeerSettings.users);\n\n return this.peerSettings[peerId] = messagesPeerSettings.settings;\n }\n });\n }\n\n public hidePeerSettingsBar(peerId: PeerId) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.hidePeerSettingsBar',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId)\n },\n processResult: () => {\n this.refreshPeerSettingsIfNeeded(peerId);\n }\n });\n }\n\n private onUpdateChatParticipants = (update: Update.updateChatParticipants) => {\n const participants = update.participants;\n if(participants._ !== 'chatParticipants') {\n return;\n }\n\n const chatId = participants.chat_id;\n const chatFull = this.chatsFull[chatId] as ChatFull.chatFull;\n if(chatFull !== undefined) {\n chatFull.participants = participants;\n this.rootScope.dispatchEvent('chat_full_update', chatId);\n }\n };\n\n private onUpdateChatParticipantAdd = (update: Update.updateChatParticipantAdd) => {\n const chatFull = this.chatsFull[update.chat_id] as ChatFull.chatFull;\n if(chatFull === undefined) {\n return;\n }\n\n const _participants = chatFull.participants as ChatParticipants.chatParticipants;\n const participants = _participants.participants || [];\n for(let i = 0, length = participants.length; i < length; i++) {\n if(participants[i].user_id === update.user_id) {\n return;\n }\n }\n\n participants.push({\n _: 'chatParticipant',\n user_id: update.user_id,\n inviter_id: update.inviter_id,\n date: tsNow(true)\n });\n\n _participants.version = update.version;\n this.rootScope.dispatchEvent('chat_full_update', update.chat_id);\n };\n\n private onUpdateChatParticipantDelete = (update: Update.updateChatParticipantDelete) => {\n const chatFull = this.chatsFull[update.chat_id] as ChatFull.chatFull;\n if(chatFull === undefined) {\n return;\n }\n\n const _participants = chatFull.participants as ChatParticipants.chatParticipants;\n const participants = _participants.participants || [];\n for(let i = 0, length = participants.length; i < length; i++) {\n if(participants[i].user_id === update.user_id) {\n participants.splice(i, 1);\n _participants.version = update.version;\n this.rootScope.dispatchEvent('chat_full_update', update.chat_id);\n return;\n }\n }\n };\n\n private onUpdateUserTyping = (update: Update.updateUserTyping | Update.updateChatUserTyping | Update.updateChannelUserTyping) => {\n const fromId = (update as Update.updateUserTyping).user_id ?\n (update as Update.updateUserTyping).user_id.toPeerId() :\n this.appPeersManager.getPeerId((update as Update.updateChatUserTyping).from_id);\n if(this.appPeersManager.peerId === fromId || update.action._ === 'speakingInGroupCallAction') {\n return;\n }\n\n const topMsgId = (update as Update.updateChannelUserTyping).top_msg_id;\n const threadId = topMsgId ? this.appMessagesIdsManager.generateMessageId(topMsgId, (update as Update.updateChannelUserTyping).channel_id) : undefined;\n const peerId = this.appPeersManager.getPeerId(update);\n const key = this.getTypingsKey(peerId, threadId);\n const typings = this.typingsInPeer[key] ??= [];\n const action = update.action;\n let typing = typings.find((t) => t.userId === fromId);\n\n if((action as SendMessageAction.sendMessageEmojiInteraction).msg_id) {\n (action as SendMessageAction.sendMessageEmojiInteraction).msg_id = this.appMessagesIdsManager.generateMessageId((action as SendMessageAction.sendMessageEmojiInteraction).msg_id, (update as Update.updateChannelUserTyping).channel_id);\n }\n\n const cancelAction = () => {\n delete typing.timeout;\n // typings.findAndSplice((t) => t === typing);\n const idx = typings.indexOf(typing);\n if(idx !== -1) {\n typings.splice(idx, 1);\n }\n\n this.rootScope.dispatchEvent('peer_typings', {peerId, threadId, typings});\n\n if(!typings.length) {\n delete this.typingsInPeer[key];\n }\n };\n\n if(typing?.timeout !== undefined) {\n clearTimeout(typing.timeout);\n }\n\n if(action._ === 'sendMessageCancelAction') {\n if(!typing) {\n return;\n }\n\n cancelAction();\n return;\n }\n\n if(!typing) {\n typing = {\n userId: fromId\n };\n\n typings.push(typing);\n }\n\n // console.log('updateChatUserTyping', update, typings);\n\n typing.action = action;\n\n const hasUser = this.appUsersManager.hasUser(fromId);\n if(!hasUser) {\n // let's load user here\n if(update._ === 'updateChatUserTyping') {\n if(update.chat_id && this.appChatsManager.hasChat(update.chat_id) && !this.appChatsManager.isChannel(update.chat_id)) {\n Promise.resolve(this.getChatFull(update.chat_id)).then(() => {\n if(typing.timeout !== undefined && this.appUsersManager.hasUser(fromId)) {\n this.rootScope.dispatchEvent('peer_typings', {peerId, threadId, typings});\n }\n });\n }\n }\n\n // return;\n } else {\n this.appUsersManager.forceUserOnline(fromId);\n }\n\n typing.timeout = ctx.setTimeout(cancelAction, 6000);\n if(hasUser) {\n this.rootScope.dispatchEvent('peer_typings', {peerId, threadId, typings});\n }\n };\n\n private onUpdatePeerBlocked = (update: Update.updatePeerBlocked) => {\n const peerId = this.appPeersManager.getPeerId(update.peer_id);\n if(this.appPeersManager.isUser(peerId)) {\n const userId = peerId.toUserId();\n const userFull = this.usersFull[userId];\n if(userFull) {\n if(update.pFlags.blocked) {\n userFull.pFlags.blocked = true;\n } else {\n delete userFull.pFlags.blocked;\n }\n\n if(update.pFlags.blocked_my_stories_from) {\n userFull.pFlags.blocked_my_stories_from = true;\n } else {\n delete userFull.pFlags.blocked_my_stories_from;\n }\n }\n\n this.rootScope.dispatchEvent('user_full_update', userId);\n }\n\n this.rootScope.dispatchEvent('peer_block', {\n peerId,\n blocked: update.pFlags.blocked,\n blockedMyStoriesFrom: update.pFlags.blocked_my_stories_from\n });\n };\n\n private onUpdatePeerSettings = (update: Update.updatePeerSettings) => {\n const peerId = this.appPeersManager.getPeerId(update.peer);\n this.rootScope.dispatchEvent('peer_settings', {peerId, settings: update.settings});\n };\n}\n","export default {}","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.8.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2023\n * @license MIT\n */\n(function () {\n 'use strict';\n\n var INPUT_ERROR = 'input is invalid type';\n var FINALIZE_ERROR = 'finalize already called';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_MD5_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [128, 32768, 8388608, -2147483648];\n var SHIFT = [0, 8, 16, 24];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n var blocks = [], buffer8;\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n }\n\n var isArray = Array.isArray;\n if (root.JS_MD5_NO_NODE_JS || !isArray) {\n isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n var isView = ArrayBuffer.isView;\n if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !isView)) {\n isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n // [message: string, isString: bool]\n var formatMessage = function (message) {\n var type = typeof message;\n if (type === 'string') {\n return [message, true];\n }\n if (type !== 'object' || message === null) {\n throw new Error(INPUT_ERROR);\n }\n if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n return [new Uint8Array(message), false];\n }\n if (!isArray(message) && !isView(message)) {\n throw new Error(INPUT_ERROR);\n }\n return [message, false];\n }\n\n /**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n };\n\n /**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n /**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = require('crypto')\n var Buffer = require('buffer').Buffer;\n var bufferFrom;\n if (Buffer.from && !root.JS_MD5_NO_BUFFER_FROM) {\n bufferFrom = Buffer.from;\n } else {\n bufferFrom = function (message) {\n return new Buffer(message);\n };\n }\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw new Error(INPUT_ERROR);\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (isArray(message) || isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(bufferFrom(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n /**\n * @namespace md5.hmac\n */\n /**\n * @method hex\n * @memberof md5.hmac\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hmac.hex('key', 'The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5.hmac('key', 'The quick brown fox jumps over the lazy dog');\n */\n\n /**\n * @method digest\n * @memberof md5.hmac\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.hmac.digest('key', 'The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method array\n * @memberof md5.hmac\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.hmac.array('key', 'The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method arrayBuffer\n * @memberof md5.hmac\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.hmac.arrayBuffer('key', 'The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5.hmac\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.hmac.buffer('key', 'The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method base64\n * @memberof md5.hmac\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.hmac.base64('key', 'The quick brown fox jumps over the lazy dog');\n */\n var createHmacOutputMethod = function (outputType) {\n return function (key, message) {\n return new HmacMd5(key, true).update(message)[outputType]();\n };\n };\n\n /**\n * @method create\n * @memberof md5.hmac\n * @description Create HmacMd5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @returns {HmacMd5} HmacMd5 object.\n * @example\n * var hash = md5.hmac.create('key');\n */\n /**\n * @method update\n * @memberof md5.hmac\n * @description Create and update HmacMd5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {HmacMd5} HmacMd5 object.\n * @example\n * var hash = md5.hmac.update('key', 'The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.hmac.create('key');\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\n var createHmacMethod = function () {\n var method = createHmacOutputMethod('hex');\n method.create = function (key) {\n return new HmacMd5(key);\n };\n method.update = function (key, message) {\n return method.create(key).update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createHmacOutputMethod(type);\n }\n return method;\n };\n\n /**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\n function Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n /**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\n Md5.prototype.update = function (message) {\n if (this.finalized) {\n throw new Error(FINALIZE_ERROR);\n }\n\n var result = formatMessage(message);\n message = result[0];\n var isString = result[1];\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (isString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >>> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >>> 12);\n buffer8[i++] = 0x80 | ((code >>> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >>> 18);\n buffer8[i++] = 0x80 | ((code >>> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >>> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >>> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >>> 2] |= (0xc0 | (code >>> 6)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >>> 2] |= (0xe0 | (code >>> 12)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >>> 2] |= (0xf0 | (code >>> 18)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | ((code >>> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >>> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Md5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >>> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n };\n\n Md5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n };\n\n /**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\n Md5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >>> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >>> 12) & 0x0F] + HEX_CHARS[(h0 >>> 8) & 0x0F] +\n HEX_CHARS[(h0 >>> 20) & 0x0F] + HEX_CHARS[(h0 >>> 16) & 0x0F] +\n HEX_CHARS[(h0 >>> 28) & 0x0F] + HEX_CHARS[(h0 >>> 24) & 0x0F] +\n HEX_CHARS[(h1 >>> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >>> 12) & 0x0F] + HEX_CHARS[(h1 >>> 8) & 0x0F] +\n HEX_CHARS[(h1 >>> 20) & 0x0F] + HEX_CHARS[(h1 >>> 16) & 0x0F] +\n HEX_CHARS[(h1 >>> 28) & 0x0F] + HEX_CHARS[(h1 >>> 24) & 0x0F] +\n HEX_CHARS[(h2 >>> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >>> 12) & 0x0F] + HEX_CHARS[(h2 >>> 8) & 0x0F] +\n HEX_CHARS[(h2 >>> 20) & 0x0F] + HEX_CHARS[(h2 >>> 16) & 0x0F] +\n HEX_CHARS[(h2 >>> 28) & 0x0F] + HEX_CHARS[(h2 >>> 24) & 0x0F] +\n HEX_CHARS[(h3 >>> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >>> 12) & 0x0F] + HEX_CHARS[(h3 >>> 8) & 0x0F] +\n HEX_CHARS[(h3 >>> 20) & 0x0F] + HEX_CHARS[(h3 >>> 16) & 0x0F] +\n HEX_CHARS[(h3 >>> 28) & 0x0F] + HEX_CHARS[(h3 >>> 24) & 0x0F];\n };\n\n /**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\n Md5.prototype.toString = Md5.prototype.hex;\n\n /**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\n Md5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >>> 8) & 0xFF, (h0 >>> 16) & 0xFF, (h0 >>> 24) & 0xFF,\n h1 & 0xFF, (h1 >>> 8) & 0xFF, (h1 >>> 16) & 0xFF, (h1 >>> 24) & 0xFF,\n h2 & 0xFF, (h2 >>> 8) & 0xFF, (h2 >>> 16) & 0xFF, (h2 >>> 24) & 0xFF,\n h3 & 0xFF, (h3 >>> 8) & 0xFF, (h3 >>> 16) & 0xFF, (h3 >>> 24) & 0xFF\n ];\n };\n\n /**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\n Md5.prototype.array = Md5.prototype.digest;\n\n /**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\n Md5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n };\n\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\n Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n /**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\n Md5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n };\n\n /**\n * HmacMd5 class\n * @class HmacMd5\n * @extends Md5\n * @description This is internal class.\n * @see {@link md5.hmac.create}\n */\n function HmacMd5(key, sharedMemory) {\n var i, result = formatMessage(key);\n key = result[0];\n if (result[1]) {\n var bytes = [], length = key.length, index = 0, code;\n for (i = 0; i < length; ++i) {\n code = key.charCodeAt(i);\n if (code < 0x80) {\n bytes[index++] = code;\n } else if (code < 0x800) {\n bytes[index++] = (0xc0 | (code >>> 6));\n bytes[index++] = (0x80 | (code & 0x3f));\n } else if (code < 0xd800 || code >= 0xe000) {\n bytes[index++] = (0xe0 | (code >>> 12));\n bytes[index++] = (0x80 | ((code >>> 6) & 0x3f));\n bytes[index++] = (0x80 | (code & 0x3f));\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));\n bytes[index++] = (0xf0 | (code >>> 18));\n bytes[index++] = (0x80 | ((code >>> 12) & 0x3f));\n bytes[index++] = (0x80 | ((code >>> 6) & 0x3f));\n bytes[index++] = (0x80 | (code & 0x3f));\n }\n }\n key = bytes;\n }\n\n if (key.length > 64) {\n key = (new Md5(true)).update(key).array();\n }\n\n var oKeyPad = [], iKeyPad = [];\n for (i = 0; i < 64; ++i) {\n var b = key[i] || 0;\n oKeyPad[i] = 0x5c ^ b;\n iKeyPad[i] = 0x36 ^ b;\n }\n\n Md5.call(this, sharedMemory);\n\n this.update(iKeyPad);\n this.oKeyPad = oKeyPad;\n this.inner = true;\n this.sharedMemory = sharedMemory;\n }\n HmacMd5.prototype = new Md5();\n\n HmacMd5.prototype.finalize = function () {\n Md5.prototype.finalize.call(this);\n if (this.inner) {\n this.inner = false;\n var innerHash = this.array();\n Md5.call(this, this.sharedMemory);\n this.update(this.oKeyPad);\n this.update(innerHash);\n Md5.prototype.finalize.call(this);\n }\n };\n\n var exports = createMethod();\n exports.md5 = exports;\n exports.md5.hmac = createHmacMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n /**\n * @method md5\b\n * @description Md5 hash function, export to global in browsers.\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} md5 hashes\n * @example\n * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n *\n * // It also supports UTF-8 encoding\n * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n *\n * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n */\n root.md5 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","var bigInt = (function (undefined) {\r\n \"use strict\";\r\n\r\n var BASE = 1e7,\r\n LOG_BASE = 7,\r\n MAX_INT = 9007199254740992,\r\n MAX_INT_ARR = smallToArray(MAX_INT),\r\n DEFAULT_ALPHABET = \"0123456789abcdefghijklmnopqrstuvwxyz\";\r\n\r\n var supportsNativeBigInt = typeof BigInt === \"function\";\r\n\r\n function Integer(v, radix, alphabet, caseSensitive) {\r\n if (typeof v === \"undefined\") return Integer[0];\r\n if (typeof radix !== \"undefined\") return +radix === 10 && !alphabet ? parseValue(v) : parseBase(v, radix, alphabet, caseSensitive);\r\n return parseValue(v);\r\n }\r\n\r\n function BigInteger(value, sign) {\r\n this.value = value;\r\n this.sign = sign;\r\n this.isSmall = false;\r\n }\r\n BigInteger.prototype = Object.create(Integer.prototype);\r\n\r\n function SmallInteger(value) {\r\n this.value = value;\r\n this.sign = value < 0;\r\n this.isSmall = true;\r\n }\r\n SmallInteger.prototype = Object.create(Integer.prototype);\r\n\r\n function NativeBigInt(value) {\r\n this.value = value;\r\n }\r\n NativeBigInt.prototype = Object.create(Integer.prototype);\r\n\r\n function isPrecise(n) {\r\n return -MAX_INT < n && n < MAX_INT;\r\n }\r\n\r\n function smallToArray(n) { // For performance reasons doesn't reference BASE, need to change this function if BASE changes\r\n if (n < 1e7)\r\n return [n];\r\n if (n < 1e14)\r\n return [n % 1e7, Math.floor(n / 1e7)];\r\n return [n % 1e7, Math.floor(n / 1e7) % 1e7, Math.floor(n / 1e14)];\r\n }\r\n\r\n function arrayToSmall(arr) { // If BASE changes this function may need to change\r\n trim(arr);\r\n var length = arr.length;\r\n if (length < 4 && compareAbs(arr, MAX_INT_ARR) < 0) {\r\n switch (length) {\r\n case 0: return 0;\r\n case 1: return arr[0];\r\n case 2: return arr[0] + arr[1] * BASE;\r\n default: return arr[0] + (arr[1] + arr[2] * BASE) * BASE;\r\n }\r\n }\r\n return arr;\r\n }\r\n\r\n function trim(v) {\r\n var i = v.length;\r\n while (v[--i] === 0);\r\n v.length = i + 1;\r\n }\r\n\r\n function createArray(length) { // function shamelessly stolen from Yaffle's library https://github.com/Yaffle/BigInteger\r\n var x = new Array(length);\r\n var i = -1;\r\n while (++i < length) {\r\n x[i] = 0;\r\n }\r\n return x;\r\n }\r\n\r\n function truncate(n) {\r\n if (n > 0) return Math.floor(n);\r\n return Math.ceil(n);\r\n }\r\n\r\n function add(a, b) { // assumes a and b are arrays with a.length >= b.length\r\n var l_a = a.length,\r\n l_b = b.length,\r\n r = new Array(l_a),\r\n carry = 0,\r\n base = BASE,\r\n sum, i;\r\n for (i = 0; i < l_b; i++) {\r\n sum = a[i] + b[i] + carry;\r\n carry = sum >= base ? 1 : 0;\r\n r[i] = sum - carry * base;\r\n }\r\n while (i < l_a) {\r\n sum = a[i] + carry;\r\n carry = sum === base ? 1 : 0;\r\n r[i++] = sum - carry * base;\r\n }\r\n if (carry > 0) r.push(carry);\r\n return r;\r\n }\r\n\r\n function addAny(a, b) {\r\n if (a.length >= b.length) return add(a, b);\r\n return add(b, a);\r\n }\r\n\r\n function addSmall(a, carry) { // assumes a is array, carry is number with 0 <= carry < MAX_INT\r\n var l = a.length,\r\n r = new Array(l),\r\n base = BASE,\r\n sum, i;\r\n for (i = 0; i < l; i++) {\r\n sum = a[i] - base + carry;\r\n carry = Math.floor(sum / base);\r\n r[i] = sum - carry * base;\r\n carry += 1;\r\n }\r\n while (carry > 0) {\r\n r[i++] = carry % base;\r\n carry = Math.floor(carry / base);\r\n }\r\n return r;\r\n }\r\n\r\n BigInteger.prototype.add = function (v) {\r\n var n = parseValue(v);\r\n if (this.sign !== n.sign) {\r\n return this.subtract(n.negate());\r\n }\r\n var a = this.value, b = n.value;\r\n if (n.isSmall) {\r\n return new BigInteger(addSmall(a, Math.abs(b)), this.sign);\r\n }\r\n return new BigInteger(addAny(a, b), this.sign);\r\n };\r\n BigInteger.prototype.plus = BigInteger.prototype.add;\r\n\r\n SmallInteger.prototype.add = function (v) {\r\n var n = parseValue(v);\r\n var a = this.value;\r\n if (a < 0 !== n.sign) {\r\n return this.subtract(n.negate());\r\n }\r\n var b = n.value;\r\n if (n.isSmall) {\r\n if (isPrecise(a + b)) return new SmallInteger(a + b);\r\n b = smallToArray(Math.abs(b));\r\n }\r\n return new BigInteger(addSmall(b, Math.abs(a)), a < 0);\r\n };\r\n SmallInteger.prototype.plus = SmallInteger.prototype.add;\r\n\r\n NativeBigInt.prototype.add = function (v) {\r\n return new NativeBigInt(this.value + parseValue(v).value);\r\n }\r\n NativeBigInt.prototype.plus = NativeBigInt.prototype.add;\r\n\r\n function subtract(a, b) { // assumes a and b are arrays with a >= b\r\n var a_l = a.length,\r\n b_l = b.length,\r\n r = new Array(a_l),\r\n borrow = 0,\r\n base = BASE,\r\n i, difference;\r\n for (i = 0; i < b_l; i++) {\r\n difference = a[i] - borrow - b[i];\r\n if (difference < 0) {\r\n difference += base;\r\n borrow = 1;\r\n } else borrow = 0;\r\n r[i] = difference;\r\n }\r\n for (i = b_l; i < a_l; i++) {\r\n difference = a[i] - borrow;\r\n if (difference < 0) difference += base;\r\n else {\r\n r[i++] = difference;\r\n break;\r\n }\r\n r[i] = difference;\r\n }\r\n for (; i < a_l; i++) {\r\n r[i] = a[i];\r\n }\r\n trim(r);\r\n return r;\r\n }\r\n\r\n function subtractAny(a, b, sign) {\r\n var value;\r\n if (compareAbs(a, b) >= 0) {\r\n value = subtract(a, b);\r\n } else {\r\n value = subtract(b, a);\r\n sign = !sign;\r\n }\r\n value = arrayToSmall(value);\r\n if (typeof value === \"number\") {\r\n if (sign) value = -value;\r\n return new SmallInteger(value);\r\n }\r\n return new BigInteger(value, sign);\r\n }\r\n\r\n function subtractSmall(a, b, sign) { // assumes a is array, b is number with 0 <= b < MAX_INT\r\n var l = a.length,\r\n r = new Array(l),\r\n carry = -b,\r\n base = BASE,\r\n i, difference;\r\n for (i = 0; i < l; i++) {\r\n difference = a[i] + carry;\r\n carry = Math.floor(difference / base);\r\n difference %= base;\r\n r[i] = difference < 0 ? difference + base : difference;\r\n }\r\n r = arrayToSmall(r);\r\n if (typeof r === \"number\") {\r\n if (sign) r = -r;\r\n return new SmallInteger(r);\r\n } return new BigInteger(r, sign);\r\n }\r\n\r\n BigInteger.prototype.subtract = function (v) {\r\n var n = parseValue(v);\r\n if (this.sign !== n.sign) {\r\n return this.add(n.negate());\r\n }\r\n var a = this.value, b = n.value;\r\n if (n.isSmall)\r\n return subtractSmall(a, Math.abs(b), this.sign);\r\n return subtractAny(a, b, this.sign);\r\n };\r\n BigInteger.prototype.minus = BigInteger.prototype.subtract;\r\n\r\n SmallInteger.prototype.subtract = function (v) {\r\n var n = parseValue(v);\r\n var a = this.value;\r\n if (a < 0 !== n.sign) {\r\n return this.add(n.negate());\r\n }\r\n var b = n.value;\r\n if (n.isSmall) {\r\n return new SmallInteger(a - b);\r\n }\r\n return subtractSmall(b, Math.abs(a), a >= 0);\r\n };\r\n SmallInteger.prototype.minus = SmallInteger.prototype.subtract;\r\n\r\n NativeBigInt.prototype.subtract = function (v) {\r\n return new NativeBigInt(this.value - parseValue(v).value);\r\n }\r\n NativeBigInt.prototype.minus = NativeBigInt.prototype.subtract;\r\n\r\n BigInteger.prototype.negate = function () {\r\n return new BigInteger(this.value, !this.sign);\r\n };\r\n SmallInteger.prototype.negate = function () {\r\n var sign = this.sign;\r\n var small = new SmallInteger(-this.value);\r\n small.sign = !sign;\r\n return small;\r\n };\r\n NativeBigInt.prototype.negate = function () {\r\n return new NativeBigInt(-this.value);\r\n }\r\n\r\n BigInteger.prototype.abs = function () {\r\n return new BigInteger(this.value, false);\r\n };\r\n SmallInteger.prototype.abs = function () {\r\n return new SmallInteger(Math.abs(this.value));\r\n };\r\n NativeBigInt.prototype.abs = function () {\r\n return new NativeBigInt(this.value >= 0 ? this.value : -this.value);\r\n }\r\n\r\n\r\n function multiplyLong(a, b) {\r\n var a_l = a.length,\r\n b_l = b.length,\r\n l = a_l + b_l,\r\n r = createArray(l),\r\n base = BASE,\r\n product, carry, i, a_i, b_j;\r\n for (i = 0; i < a_l; ++i) {\r\n a_i = a[i];\r\n for (var j = 0; j < b_l; ++j) {\r\n b_j = b[j];\r\n product = a_i * b_j + r[i + j];\r\n carry = Math.floor(product / base);\r\n r[i + j] = product - carry * base;\r\n r[i + j + 1] += carry;\r\n }\r\n }\r\n trim(r);\r\n return r;\r\n }\r\n\r\n function multiplySmall(a, b) { // assumes a is array, b is number with |b| < BASE\r\n var l = a.length,\r\n r = new Array(l),\r\n base = BASE,\r\n carry = 0,\r\n product, i;\r\n for (i = 0; i < l; i++) {\r\n product = a[i] * b + carry;\r\n carry = Math.floor(product / base);\r\n r[i] = product - carry * base;\r\n }\r\n while (carry > 0) {\r\n r[i++] = carry % base;\r\n carry = Math.floor(carry / base);\r\n }\r\n return r;\r\n }\r\n\r\n function shiftLeft(x, n) {\r\n var r = [];\r\n while (n-- > 0) r.push(0);\r\n return r.concat(x);\r\n }\r\n\r\n function multiplyKaratsuba(x, y) {\r\n var n = Math.max(x.length, y.length);\r\n\r\n if (n <= 30) return multiplyLong(x, y);\r\n n = Math.ceil(n / 2);\r\n\r\n var b = x.slice(n),\r\n a = x.slice(0, n),\r\n d = y.slice(n),\r\n c = y.slice(0, n);\r\n\r\n var ac = multiplyKaratsuba(a, c),\r\n bd = multiplyKaratsuba(b, d),\r\n abcd = multiplyKaratsuba(addAny(a, b), addAny(c, d));\r\n\r\n var product = addAny(addAny(ac, shiftLeft(subtract(subtract(abcd, ac), bd), n)), shiftLeft(bd, 2 * n));\r\n trim(product);\r\n return product;\r\n }\r\n\r\n // The following function is derived from a surface fit of a graph plotting the performance difference\r\n // between long multiplication and karatsuba multiplication versus the lengths of the two arrays.\r\n function useKaratsuba(l1, l2) {\r\n return -0.012 * l1 - 0.012 * l2 + 0.000015 * l1 * l2 > 0;\r\n }\r\n\r\n BigInteger.prototype.multiply = function (v) {\r\n var n = parseValue(v),\r\n a = this.value, b = n.value,\r\n sign = this.sign !== n.sign,\r\n abs;\r\n if (n.isSmall) {\r\n if (b === 0) return Integer[0];\r\n if (b === 1) return this;\r\n if (b === -1) return this.negate();\r\n abs = Math.abs(b);\r\n if (abs < BASE) {\r\n return new BigInteger(multiplySmall(a, abs), sign);\r\n }\r\n b = smallToArray(abs);\r\n }\r\n if (useKaratsuba(a.length, b.length)) // Karatsuba is only faster for certain array sizes\r\n return new BigInteger(multiplyKaratsuba(a, b), sign);\r\n return new BigInteger(multiplyLong(a, b), sign);\r\n };\r\n\r\n BigInteger.prototype.times = BigInteger.prototype.multiply;\r\n\r\n function multiplySmallAndArray(a, b, sign) { // a >= 0\r\n if (a < BASE) {\r\n return new BigInteger(multiplySmall(b, a), sign);\r\n }\r\n return new BigInteger(multiplyLong(b, smallToArray(a)), sign);\r\n }\r\n SmallInteger.prototype._multiplyBySmall = function (a) {\r\n if (isPrecise(a.value * this.value)) {\r\n return new SmallInteger(a.value * this.value);\r\n }\r\n return multiplySmallAndArray(Math.abs(a.value), smallToArray(Math.abs(this.value)), this.sign !== a.sign);\r\n };\r\n BigInteger.prototype._multiplyBySmall = function (a) {\r\n if (a.value === 0) return Integer[0];\r\n if (a.value === 1) return this;\r\n if (a.value === -1) return this.negate();\r\n return multiplySmallAndArray(Math.abs(a.value), this.value, this.sign !== a.sign);\r\n };\r\n SmallInteger.prototype.multiply = function (v) {\r\n return parseValue(v)._multiplyBySmall(this);\r\n };\r\n SmallInteger.prototype.times = SmallInteger.prototype.multiply;\r\n\r\n NativeBigInt.prototype.multiply = function (v) {\r\n return new NativeBigInt(this.value * parseValue(v).value);\r\n }\r\n NativeBigInt.prototype.times = NativeBigInt.prototype.multiply;\r\n\r\n function square(a) {\r\n //console.assert(2 * BASE * BASE < MAX_INT);\r\n var l = a.length,\r\n r = createArray(l + l),\r\n base = BASE,\r\n product, carry, i, a_i, a_j;\r\n for (i = 0; i < l; i++) {\r\n a_i = a[i];\r\n carry = 0 - a_i * a_i;\r\n for (var j = i; j < l; j++) {\r\n a_j = a[j];\r\n product = 2 * (a_i * a_j) + r[i + j] + carry;\r\n carry = Math.floor(product / base);\r\n r[i + j] = product - carry * base;\r\n }\r\n r[i + l] = carry;\r\n }\r\n trim(r);\r\n return r;\r\n }\r\n\r\n BigInteger.prototype.square = function () {\r\n return new BigInteger(square(this.value), false);\r\n };\r\n\r\n SmallInteger.prototype.square = function () {\r\n var value = this.value * this.value;\r\n if (isPrecise(value)) return new SmallInteger(value);\r\n return new BigInteger(square(smallToArray(Math.abs(this.value))), false);\r\n };\r\n\r\n NativeBigInt.prototype.square = function (v) {\r\n return new NativeBigInt(this.value * this.value);\r\n }\r\n\r\n function divMod1(a, b) { // Left over from previous version. Performs faster than divMod2 on smaller input sizes.\r\n var a_l = a.length,\r\n b_l = b.length,\r\n base = BASE,\r\n result = createArray(b.length),\r\n divisorMostSignificantDigit = b[b_l - 1],\r\n // normalization\r\n lambda = Math.ceil(base / (2 * divisorMostSignificantDigit)),\r\n remainder = multiplySmall(a, lambda),\r\n divisor = multiplySmall(b, lambda),\r\n quotientDigit, shift, carry, borrow, i, l, q;\r\n if (remainder.length <= a_l) remainder.push(0);\r\n divisor.push(0);\r\n divisorMostSignificantDigit = divisor[b_l - 1];\r\n for (shift = a_l - b_l; shift >= 0; shift--) {\r\n quotientDigit = base - 1;\r\n if (remainder[shift + b_l] !== divisorMostSignificantDigit) {\r\n quotientDigit = Math.floor((remainder[shift + b_l] * base + remainder[shift + b_l - 1]) / divisorMostSignificantDigit);\r\n }\r\n // quotientDigit <= base - 1\r\n carry = 0;\r\n borrow = 0;\r\n l = divisor.length;\r\n for (i = 0; i < l; i++) {\r\n carry += quotientDigit * divisor[i];\r\n q = Math.floor(carry / base);\r\n borrow += remainder[shift + i] - (carry - q * base);\r\n carry = q;\r\n if (borrow < 0) {\r\n remainder[shift + i] = borrow + base;\r\n borrow = -1;\r\n } else {\r\n remainder[shift + i] = borrow;\r\n borrow = 0;\r\n }\r\n }\r\n while (borrow !== 0) {\r\n quotientDigit -= 1;\r\n carry = 0;\r\n for (i = 0; i < l; i++) {\r\n carry += remainder[shift + i] - base + divisor[i];\r\n if (carry < 0) {\r\n remainder[shift + i] = carry + base;\r\n carry = 0;\r\n } else {\r\n remainder[shift + i] = carry;\r\n carry = 1;\r\n }\r\n }\r\n borrow += carry;\r\n }\r\n result[shift] = quotientDigit;\r\n }\r\n // denormalization\r\n remainder = divModSmall(remainder, lambda)[0];\r\n return [arrayToSmall(result), arrayToSmall(remainder)];\r\n }\r\n\r\n function divMod2(a, b) { // Implementation idea shamelessly stolen from Silent Matt's library http://silentmatt.com/biginteger/\r\n // Performs faster than divMod1 on larger input sizes.\r\n var a_l = a.length,\r\n b_l = b.length,\r\n result = [],\r\n part = [],\r\n base = BASE,\r\n guess, xlen, highx, highy, check;\r\n while (a_l) {\r\n part.unshift(a[--a_l]);\r\n trim(part);\r\n if (compareAbs(part, b) < 0) {\r\n result.push(0);\r\n continue;\r\n }\r\n xlen = part.length;\r\n highx = part[xlen - 1] * base + part[xlen - 2];\r\n highy = b[b_l - 1] * base + b[b_l - 2];\r\n if (xlen > b_l) {\r\n highx = (highx + 1) * base;\r\n }\r\n guess = Math.ceil(highx / highy);\r\n do {\r\n check = multiplySmall(b, guess);\r\n if (compareAbs(check, part) <= 0) break;\r\n guess--;\r\n } while (guess);\r\n result.push(guess);\r\n part = subtract(part, check);\r\n }\r\n result.reverse();\r\n return [arrayToSmall(result), arrayToSmall(part)];\r\n }\r\n\r\n function divModSmall(value, lambda) {\r\n var length = value.length,\r\n quotient = createArray(length),\r\n base = BASE,\r\n i, q, remainder, divisor;\r\n remainder = 0;\r\n for (i = length - 1; i >= 0; --i) {\r\n divisor = remainder * base + value[i];\r\n q = truncate(divisor / lambda);\r\n remainder = divisor - q * lambda;\r\n quotient[i] = q | 0;\r\n }\r\n return [quotient, remainder | 0];\r\n }\r\n\r\n function divModAny(self, v) {\r\n var value, n = parseValue(v);\r\n if (supportsNativeBigInt) {\r\n return [new NativeBigInt(self.value / n.value), new NativeBigInt(self.value % n.value)];\r\n }\r\n var a = self.value, b = n.value;\r\n var quotient;\r\n if (b === 0) throw new Error(\"Cannot divide by zero\");\r\n if (self.isSmall) {\r\n if (n.isSmall) {\r\n return [new SmallInteger(truncate(a / b)), new SmallInteger(a % b)];\r\n }\r\n return [Integer[0], self];\r\n }\r\n if (n.isSmall) {\r\n if (b === 1) return [self, Integer[0]];\r\n if (b == -1) return [self.negate(), Integer[0]];\r\n var abs = Math.abs(b);\r\n if (abs < BASE) {\r\n value = divModSmall(a, abs);\r\n quotient = arrayToSmall(value[0]);\r\n var remainder = value[1];\r\n if (self.sign) remainder = -remainder;\r\n if (typeof quotient === \"number\") {\r\n if (self.sign !== n.sign) quotient = -quotient;\r\n return [new SmallInteger(quotient), new SmallInteger(remainder)];\r\n }\r\n return [new BigInteger(quotient, self.sign !== n.sign), new SmallInteger(remainder)];\r\n }\r\n b = smallToArray(abs);\r\n }\r\n var comparison = compareAbs(a, b);\r\n if (comparison === -1) return [Integer[0], self];\r\n if (comparison === 0) return [Integer[self.sign === n.sign ? 1 : -1], Integer[0]];\r\n\r\n // divMod1 is faster on smaller input sizes\r\n if (a.length + b.length <= 200)\r\n value = divMod1(a, b);\r\n else value = divMod2(a, b);\r\n\r\n quotient = value[0];\r\n var qSign = self.sign !== n.sign,\r\n mod = value[1],\r\n mSign = self.sign;\r\n if (typeof quotient === \"number\") {\r\n if (qSign) quotient = -quotient;\r\n quotient = new SmallInteger(quotient);\r\n } else quotient = new BigInteger(quotient, qSign);\r\n if (typeof mod === \"number\") {\r\n if (mSign) mod = -mod;\r\n mod = new SmallInteger(mod);\r\n } else mod = new BigInteger(mod, mSign);\r\n return [quotient, mod];\r\n }\r\n\r\n BigInteger.prototype.divmod = function (v) {\r\n var result = divModAny(this, v);\r\n return {\r\n quotient: result[0],\r\n remainder: result[1]\r\n };\r\n };\r\n NativeBigInt.prototype.divmod = SmallInteger.prototype.divmod = BigInteger.prototype.divmod;\r\n\r\n\r\n BigInteger.prototype.divide = function (v) {\r\n return divModAny(this, v)[0];\r\n };\r\n NativeBigInt.prototype.over = NativeBigInt.prototype.divide = function (v) {\r\n return new NativeBigInt(this.value / parseValue(v).value);\r\n };\r\n SmallInteger.prototype.over = SmallInteger.prototype.divide = BigInteger.prototype.over = BigInteger.prototype.divide;\r\n\r\n BigInteger.prototype.mod = function (v) {\r\n return divModAny(this, v)[1];\r\n };\r\n NativeBigInt.prototype.mod = NativeBigInt.prototype.remainder = function (v) {\r\n return new NativeBigInt(this.value % parseValue(v).value);\r\n };\r\n SmallInteger.prototype.remainder = SmallInteger.prototype.mod = BigInteger.prototype.remainder = BigInteger.prototype.mod;\r\n\r\n BigInteger.prototype.pow = function (v) {\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value,\r\n value, x, y;\r\n if (b === 0) return Integer[1];\r\n if (a === 0) return Integer[0];\r\n if (a === 1) return Integer[1];\r\n if (a === -1) return n.isEven() ? Integer[1] : Integer[-1];\r\n if (n.sign) {\r\n return Integer[0];\r\n }\r\n if (!n.isSmall) throw new Error(\"The exponent \" + n.toString() + \" is too large.\");\r\n if (this.isSmall) {\r\n if (isPrecise(value = Math.pow(a, b)))\r\n return new SmallInteger(truncate(value));\r\n }\r\n x = this;\r\n y = Integer[1];\r\n while (true) {\r\n if (b & 1 === 1) {\r\n y = y.times(x);\r\n --b;\r\n }\r\n if (b === 0) break;\r\n b /= 2;\r\n x = x.square();\r\n }\r\n return y;\r\n };\r\n SmallInteger.prototype.pow = BigInteger.prototype.pow;\r\n\r\n NativeBigInt.prototype.pow = function (v) {\r\n var n = parseValue(v);\r\n var a = this.value, b = n.value;\r\n var _0 = BigInt(0), _1 = BigInt(1), _2 = BigInt(2);\r\n if (b === _0) return Integer[1];\r\n if (a === _0) return Integer[0];\r\n if (a === _1) return Integer[1];\r\n if (a === BigInt(-1)) return n.isEven() ? Integer[1] : Integer[-1];\r\n if (n.isNegative()) return new NativeBigInt(_0);\r\n var x = this;\r\n var y = Integer[1];\r\n while (true) {\r\n if ((b & _1) === _1) {\r\n y = y.times(x);\r\n --b;\r\n }\r\n if (b === _0) break;\r\n b /= _2;\r\n x = x.square();\r\n }\r\n return y;\r\n }\r\n\r\n BigInteger.prototype.modPow = function (exp, mod) {\r\n exp = parseValue(exp);\r\n mod = parseValue(mod);\r\n if (mod.isZero()) throw new Error(\"Cannot take modPow with modulus 0\");\r\n var r = Integer[1],\r\n base = this.mod(mod);\r\n if (exp.isNegative()) {\r\n exp = exp.multiply(Integer[-1]);\r\n base = base.modInv(mod);\r\n }\r\n while (exp.isPositive()) {\r\n if (base.isZero()) return Integer[0];\r\n if (exp.isOdd()) r = r.multiply(base).mod(mod);\r\n exp = exp.divide(2);\r\n base = base.square().mod(mod);\r\n }\r\n return r;\r\n };\r\n NativeBigInt.prototype.modPow = SmallInteger.prototype.modPow = BigInteger.prototype.modPow;\r\n\r\n function compareAbs(a, b) {\r\n if (a.length !== b.length) {\r\n return a.length > b.length ? 1 : -1;\r\n }\r\n for (var i = a.length - 1; i >= 0; i--) {\r\n if (a[i] !== b[i]) return a[i] > b[i] ? 1 : -1;\r\n }\r\n return 0;\r\n }\r\n\r\n BigInteger.prototype.compareAbs = function (v) {\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value;\r\n if (n.isSmall) return 1;\r\n return compareAbs(a, b);\r\n };\r\n SmallInteger.prototype.compareAbs = function (v) {\r\n var n = parseValue(v),\r\n a = Math.abs(this.value),\r\n b = n.value;\r\n if (n.isSmall) {\r\n b = Math.abs(b);\r\n return a === b ? 0 : a > b ? 1 : -1;\r\n }\r\n return -1;\r\n };\r\n NativeBigInt.prototype.compareAbs = function (v) {\r\n var a = this.value;\r\n var b = parseValue(v).value;\r\n a = a >= 0 ? a : -a;\r\n b = b >= 0 ? b : -b;\r\n return a === b ? 0 : a > b ? 1 : -1;\r\n }\r\n\r\n BigInteger.prototype.compare = function (v) {\r\n // See discussion about comparison with Infinity:\r\n // https://github.com/peterolson/BigInteger.js/issues/61\r\n if (v === Infinity) {\r\n return -1;\r\n }\r\n if (v === -Infinity) {\r\n return 1;\r\n }\r\n\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value;\r\n if (this.sign !== n.sign) {\r\n return n.sign ? 1 : -1;\r\n }\r\n if (n.isSmall) {\r\n return this.sign ? -1 : 1;\r\n }\r\n return compareAbs(a, b) * (this.sign ? -1 : 1);\r\n };\r\n BigInteger.prototype.compareTo = BigInteger.prototype.compare;\r\n\r\n SmallInteger.prototype.compare = function (v) {\r\n if (v === Infinity) {\r\n return -1;\r\n }\r\n if (v === -Infinity) {\r\n return 1;\r\n }\r\n\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value;\r\n if (n.isSmall) {\r\n return a == b ? 0 : a > b ? 1 : -1;\r\n }\r\n if (a < 0 !== n.sign) {\r\n return a < 0 ? -1 : 1;\r\n }\r\n return a < 0 ? 1 : -1;\r\n };\r\n SmallInteger.prototype.compareTo = SmallInteger.prototype.compare;\r\n\r\n NativeBigInt.prototype.compare = function (v) {\r\n if (v === Infinity) {\r\n return -1;\r\n }\r\n if (v === -Infinity) {\r\n return 1;\r\n }\r\n var a = this.value;\r\n var b = parseValue(v).value;\r\n return a === b ? 0 : a > b ? 1 : -1;\r\n }\r\n NativeBigInt.prototype.compareTo = NativeBigInt.prototype.compare;\r\n\r\n BigInteger.prototype.equals = function (v) {\r\n return this.compare(v) === 0;\r\n };\r\n NativeBigInt.prototype.eq = NativeBigInt.prototype.equals = SmallInteger.prototype.eq = SmallInteger.prototype.equals = BigInteger.prototype.eq = BigInteger.prototype.equals;\r\n\r\n BigInteger.prototype.notEquals = function (v) {\r\n return this.compare(v) !== 0;\r\n };\r\n NativeBigInt.prototype.neq = NativeBigInt.prototype.notEquals = SmallInteger.prototype.neq = SmallInteger.prototype.notEquals = BigInteger.prototype.neq = BigInteger.prototype.notEquals;\r\n\r\n BigInteger.prototype.greater = function (v) {\r\n return this.compare(v) > 0;\r\n };\r\n NativeBigInt.prototype.gt = NativeBigInt.prototype.greater = SmallInteger.prototype.gt = SmallInteger.prototype.greater = BigInteger.prototype.gt = BigInteger.prototype.greater;\r\n\r\n BigInteger.prototype.lesser = function (v) {\r\n return this.compare(v) < 0;\r\n };\r\n NativeBigInt.prototype.lt = NativeBigInt.prototype.lesser = SmallInteger.prototype.lt = SmallInteger.prototype.lesser = BigInteger.prototype.lt = BigInteger.prototype.lesser;\r\n\r\n BigInteger.prototype.greaterOrEquals = function (v) {\r\n return this.compare(v) >= 0;\r\n };\r\n NativeBigInt.prototype.geq = NativeBigInt.prototype.greaterOrEquals = SmallInteger.prototype.geq = SmallInteger.prototype.greaterOrEquals = BigInteger.prototype.geq = BigInteger.prototype.greaterOrEquals;\r\n\r\n BigInteger.prototype.lesserOrEquals = function (v) {\r\n return this.compare(v) <= 0;\r\n };\r\n NativeBigInt.prototype.leq = NativeBigInt.prototype.lesserOrEquals = SmallInteger.prototype.leq = SmallInteger.prototype.lesserOrEquals = BigInteger.prototype.leq = BigInteger.prototype.lesserOrEquals;\r\n\r\n BigInteger.prototype.isEven = function () {\r\n return (this.value[0] & 1) === 0;\r\n };\r\n SmallInteger.prototype.isEven = function () {\r\n return (this.value & 1) === 0;\r\n };\r\n NativeBigInt.prototype.isEven = function () {\r\n return (this.value & BigInt(1)) === BigInt(0);\r\n }\r\n\r\n BigInteger.prototype.isOdd = function () {\r\n return (this.value[0] & 1) === 1;\r\n };\r\n SmallInteger.prototype.isOdd = function () {\r\n return (this.value & 1) === 1;\r\n };\r\n NativeBigInt.prototype.isOdd = function () {\r\n return (this.value & BigInt(1)) === BigInt(1);\r\n }\r\n\r\n BigInteger.prototype.isPositive = function () {\r\n return !this.sign;\r\n };\r\n SmallInteger.prototype.isPositive = function () {\r\n return this.value > 0;\r\n };\r\n NativeBigInt.prototype.isPositive = SmallInteger.prototype.isPositive;\r\n\r\n BigInteger.prototype.isNegative = function () {\r\n return this.sign;\r\n };\r\n SmallInteger.prototype.isNegative = function () {\r\n return this.value < 0;\r\n };\r\n NativeBigInt.prototype.isNegative = SmallInteger.prototype.isNegative;\r\n\r\n BigInteger.prototype.isUnit = function () {\r\n return false;\r\n };\r\n SmallInteger.prototype.isUnit = function () {\r\n return Math.abs(this.value) === 1;\r\n };\r\n NativeBigInt.prototype.isUnit = function () {\r\n return this.abs().value === BigInt(1);\r\n }\r\n\r\n BigInteger.prototype.isZero = function () {\r\n return false;\r\n };\r\n SmallInteger.prototype.isZero = function () {\r\n return this.value === 0;\r\n };\r\n NativeBigInt.prototype.isZero = function () {\r\n return this.value === BigInt(0);\r\n }\r\n\r\n BigInteger.prototype.isDivisibleBy = function (v) {\r\n var n = parseValue(v);\r\n if (n.isZero()) return false;\r\n if (n.isUnit()) return true;\r\n if (n.compareAbs(2) === 0) return this.isEven();\r\n return this.mod(n).isZero();\r\n };\r\n NativeBigInt.prototype.isDivisibleBy = SmallInteger.prototype.isDivisibleBy = BigInteger.prototype.isDivisibleBy;\r\n\r\n function isBasicPrime(v) {\r\n var n = v.abs();\r\n if (n.isUnit()) return false;\r\n if (n.equals(2) || n.equals(3) || n.equals(5)) return true;\r\n if (n.isEven() || n.isDivisibleBy(3) || n.isDivisibleBy(5)) return false;\r\n if (n.lesser(49)) return true;\r\n // we don't know if it's prime: let the other functions figure it out\r\n }\r\n\r\n function millerRabinTest(n, a) {\r\n var nPrev = n.prev(),\r\n b = nPrev,\r\n r = 0,\r\n d, t, i, x;\r\n while (b.isEven()) b = b.divide(2), r++;\r\n next: for (i = 0; i < a.length; i++) {\r\n if (n.lesser(a[i])) continue;\r\n x = bigInt(a[i]).modPow(b, n);\r\n if (x.isUnit() || x.equals(nPrev)) continue;\r\n for (d = r - 1; d != 0; d--) {\r\n x = x.square().mod(n);\r\n if (x.isUnit()) return false;\r\n if (x.equals(nPrev)) continue next;\r\n }\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n // Set \"strict\" to true to force GRH-supported lower bound of 2*log(N)^2\r\n BigInteger.prototype.isPrime = function (strict) {\r\n var isPrime = isBasicPrime(this);\r\n if (isPrime !== undefined) return isPrime;\r\n var n = this.abs();\r\n var bits = n.bitLength();\r\n if (bits <= 64)\r\n return millerRabinTest(n, [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]);\r\n var logN = Math.log(2) * bits.toJSNumber();\r\n var t = Math.ceil((strict === true) ? (2 * Math.pow(logN, 2)) : logN);\r\n for (var a = [], i = 0; i < t; i++) {\r\n a.push(bigInt(i + 2));\r\n }\r\n return millerRabinTest(n, a);\r\n };\r\n NativeBigInt.prototype.isPrime = SmallInteger.prototype.isPrime = BigInteger.prototype.isPrime;\r\n\r\n BigInteger.prototype.isProbablePrime = function (iterations, rng) {\r\n var isPrime = isBasicPrime(this);\r\n if (isPrime !== undefined) return isPrime;\r\n var n = this.abs();\r\n var t = iterations === undefined ? 5 : iterations;\r\n for (var a = [], i = 0; i < t; i++) {\r\n a.push(bigInt.randBetween(2, n.minus(2), rng));\r\n }\r\n return millerRabinTest(n, a);\r\n };\r\n NativeBigInt.prototype.isProbablePrime = SmallInteger.prototype.isProbablePrime = BigInteger.prototype.isProbablePrime;\r\n\r\n BigInteger.prototype.modInv = function (n) {\r\n var t = bigInt.zero, newT = bigInt.one, r = parseValue(n), newR = this.abs(), q, lastT, lastR;\r\n while (!newR.isZero()) {\r\n q = r.divide(newR);\r\n lastT = t;\r\n lastR = r;\r\n t = newT;\r\n r = newR;\r\n newT = lastT.subtract(q.multiply(newT));\r\n newR = lastR.subtract(q.multiply(newR));\r\n }\r\n if (!r.isUnit()) throw new Error(this.toString() + \" and \" + n.toString() + \" are not co-prime\");\r\n if (t.compare(0) === -1) {\r\n t = t.add(n);\r\n }\r\n if (this.isNegative()) {\r\n return t.negate();\r\n }\r\n return t;\r\n };\r\n\r\n NativeBigInt.prototype.modInv = SmallInteger.prototype.modInv = BigInteger.prototype.modInv;\r\n\r\n BigInteger.prototype.next = function () {\r\n var value = this.value;\r\n if (this.sign) {\r\n return subtractSmall(value, 1, this.sign);\r\n }\r\n return new BigInteger(addSmall(value, 1), this.sign);\r\n };\r\n SmallInteger.prototype.next = function () {\r\n var value = this.value;\r\n if (value + 1 < MAX_INT) return new SmallInteger(value + 1);\r\n return new BigInteger(MAX_INT_ARR, false);\r\n };\r\n NativeBigInt.prototype.next = function () {\r\n return new NativeBigInt(this.value + BigInt(1));\r\n }\r\n\r\n BigInteger.prototype.prev = function () {\r\n var value = this.value;\r\n if (this.sign) {\r\n return new BigInteger(addSmall(value, 1), true);\r\n }\r\n return subtractSmall(value, 1, this.sign);\r\n };\r\n SmallInteger.prototype.prev = function () {\r\n var value = this.value;\r\n if (value - 1 > -MAX_INT) return new SmallInteger(value - 1);\r\n return new BigInteger(MAX_INT_ARR, true);\r\n };\r\n NativeBigInt.prototype.prev = function () {\r\n return new NativeBigInt(this.value - BigInt(1));\r\n }\r\n\r\n var powersOfTwo = [1];\r\n while (2 * powersOfTwo[powersOfTwo.length - 1] <= BASE) powersOfTwo.push(2 * powersOfTwo[powersOfTwo.length - 1]);\r\n var powers2Length = powersOfTwo.length, highestPower2 = powersOfTwo[powers2Length - 1];\r\n\r\n function shift_isSmall(n) {\r\n return Math.abs(n) <= BASE;\r\n }\r\n\r\n BigInteger.prototype.shiftLeft = function (v) {\r\n var n = parseValue(v).toJSNumber();\r\n if (!shift_isSmall(n)) {\r\n throw new Error(String(n) + \" is too large for shifting.\");\r\n }\r\n if (n < 0) return this.shiftRight(-n);\r\n var result = this;\r\n if (result.isZero()) return result;\r\n while (n >= powers2Length) {\r\n result = result.multiply(highestPower2);\r\n n -= powers2Length - 1;\r\n }\r\n return result.multiply(powersOfTwo[n]);\r\n };\r\n NativeBigInt.prototype.shiftLeft = SmallInteger.prototype.shiftLeft = BigInteger.prototype.shiftLeft;\r\n\r\n BigInteger.prototype.shiftRight = function (v) {\r\n var remQuo;\r\n var n = parseValue(v).toJSNumber();\r\n if (!shift_isSmall(n)) {\r\n throw new Error(String(n) + \" is too large for shifting.\");\r\n }\r\n if (n < 0) return this.shiftLeft(-n);\r\n var result = this;\r\n while (n >= powers2Length) {\r\n if (result.isZero() || (result.isNegative() && result.isUnit())) return result;\r\n remQuo = divModAny(result, highestPower2);\r\n result = remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];\r\n n -= powers2Length - 1;\r\n }\r\n remQuo = divModAny(result, powersOfTwo[n]);\r\n return remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];\r\n };\r\n NativeBigInt.prototype.shiftRight = SmallInteger.prototype.shiftRight = BigInteger.prototype.shiftRight;\r\n\r\n function bitwise(x, y, fn) {\r\n y = parseValue(y);\r\n var xSign = x.isNegative(), ySign = y.isNegative();\r\n var xRem = xSign ? x.not() : x,\r\n yRem = ySign ? y.not() : y;\r\n var xDigit = 0, yDigit = 0;\r\n var xDivMod = null, yDivMod = null;\r\n var result = [];\r\n while (!xRem.isZero() || !yRem.isZero()) {\r\n xDivMod = divModAny(xRem, highestPower2);\r\n xDigit = xDivMod[1].toJSNumber();\r\n if (xSign) {\r\n xDigit = highestPower2 - 1 - xDigit; // two's complement for negative numbers\r\n }\r\n\r\n yDivMod = divModAny(yRem, highestPower2);\r\n yDigit = yDivMod[1].toJSNumber();\r\n if (ySign) {\r\n yDigit = highestPower2 - 1 - yDigit; // two's complement for negative numbers\r\n }\r\n\r\n xRem = xDivMod[0];\r\n yRem = yDivMod[0];\r\n result.push(fn(xDigit, yDigit));\r\n }\r\n var sum = fn(xSign ? 1 : 0, ySign ? 1 : 0) !== 0 ? bigInt(-1) : bigInt(0);\r\n for (var i = result.length - 1; i >= 0; i -= 1) {\r\n sum = sum.multiply(highestPower2).add(bigInt(result[i]));\r\n }\r\n return sum;\r\n }\r\n\r\n BigInteger.prototype.not = function () {\r\n return this.negate().prev();\r\n };\r\n NativeBigInt.prototype.not = SmallInteger.prototype.not = BigInteger.prototype.not;\r\n\r\n BigInteger.prototype.and = function (n) {\r\n return bitwise(this, n, function (a, b) { return a & b; });\r\n };\r\n NativeBigInt.prototype.and = SmallInteger.prototype.and = BigInteger.prototype.and;\r\n\r\n BigInteger.prototype.or = function (n) {\r\n return bitwise(this, n, function (a, b) { return a | b; });\r\n };\r\n NativeBigInt.prototype.or = SmallInteger.prototype.or = BigInteger.prototype.or;\r\n\r\n BigInteger.prototype.xor = function (n) {\r\n return bitwise(this, n, function (a, b) { return a ^ b; });\r\n };\r\n NativeBigInt.prototype.xor = SmallInteger.prototype.xor = BigInteger.prototype.xor;\r\n\r\n var LOBMASK_I = 1 << 30, LOBMASK_BI = (BASE & -BASE) * (BASE & -BASE) | LOBMASK_I;\r\n function roughLOB(n) { // get lowestOneBit (rough)\r\n // SmallInteger: return Min(lowestOneBit(n), 1 << 30)\r\n // BigInteger: return Min(lowestOneBit(n), 1 << 14) [BASE=1e7]\r\n var v = n.value,\r\n x = typeof v === \"number\" ? v | LOBMASK_I :\r\n typeof v === \"bigint\" ? v | BigInt(LOBMASK_I) :\r\n v[0] + v[1] * BASE | LOBMASK_BI;\r\n return x & -x;\r\n }\r\n\r\n function integerLogarithm(value, base) {\r\n if (base.compareTo(value) <= 0) {\r\n var tmp = integerLogarithm(value, base.square(base));\r\n var p = tmp.p;\r\n var e = tmp.e;\r\n var t = p.multiply(base);\r\n return t.compareTo(value) <= 0 ? { p: t, e: e * 2 + 1 } : { p: p, e: e * 2 };\r\n }\r\n return { p: bigInt(1), e: 0 };\r\n }\r\n\r\n BigInteger.prototype.bitLength = function () {\r\n var n = this;\r\n if (n.compareTo(bigInt(0)) < 0) {\r\n n = n.negate().subtract(bigInt(1));\r\n }\r\n if (n.compareTo(bigInt(0)) === 0) {\r\n return bigInt(0);\r\n }\r\n return bigInt(integerLogarithm(n, bigInt(2)).e).add(bigInt(1));\r\n }\r\n NativeBigInt.prototype.bitLength = SmallInteger.prototype.bitLength = BigInteger.prototype.bitLength;\r\n\r\n function max(a, b) {\r\n a = parseValue(a);\r\n b = parseValue(b);\r\n return a.greater(b) ? a : b;\r\n }\r\n function min(a, b) {\r\n a = parseValue(a);\r\n b = parseValue(b);\r\n return a.lesser(b) ? a : b;\r\n }\r\n function gcd(a, b) {\r\n a = parseValue(a).abs();\r\n b = parseValue(b).abs();\r\n if (a.equals(b)) return a;\r\n if (a.isZero()) return b;\r\n if (b.isZero()) return a;\r\n var c = Integer[1], d, t;\r\n while (a.isEven() && b.isEven()) {\r\n d = min(roughLOB(a), roughLOB(b));\r\n a = a.divide(d);\r\n b = b.divide(d);\r\n c = c.multiply(d);\r\n }\r\n while (a.isEven()) {\r\n a = a.divide(roughLOB(a));\r\n }\r\n do {\r\n while (b.isEven()) {\r\n b = b.divide(roughLOB(b));\r\n }\r\n if (a.greater(b)) {\r\n t = b; b = a; a = t;\r\n }\r\n b = b.subtract(a);\r\n } while (!b.isZero());\r\n return c.isUnit() ? a : a.multiply(c);\r\n }\r\n function lcm(a, b) {\r\n a = parseValue(a).abs();\r\n b = parseValue(b).abs();\r\n return a.divide(gcd(a, b)).multiply(b);\r\n }\r\n function randBetween(a, b, rng) {\r\n a = parseValue(a);\r\n b = parseValue(b);\r\n var usedRNG = rng || Math.random;\r\n var low = min(a, b), high = max(a, b);\r\n var range = high.subtract(low).add(1);\r\n if (range.isSmall) return low.add(Math.floor(usedRNG() * range));\r\n var digits = toBase(range, BASE).value;\r\n var result = [], restricted = true;\r\n for (var i = 0; i < digits.length; i++) {\r\n var top = restricted ? digits[i] + (i + 1 < digits.length ? digits[i + 1] / BASE : 0) : BASE;\r\n var digit = truncate(usedRNG() * top);\r\n result.push(digit);\r\n if (digit < digits[i]) restricted = false;\r\n }\r\n return low.add(Integer.fromArray(result, BASE, false));\r\n }\r\n\r\n var parseBase = function (text, base, alphabet, caseSensitive) {\r\n alphabet = alphabet || DEFAULT_ALPHABET;\r\n text = String(text);\r\n if (!caseSensitive) {\r\n text = text.toLowerCase();\r\n alphabet = alphabet.toLowerCase();\r\n }\r\n var length = text.length;\r\n var i;\r\n var absBase = Math.abs(base);\r\n var alphabetValues = {};\r\n for (i = 0; i < alphabet.length; i++) {\r\n alphabetValues[alphabet[i]] = i;\r\n }\r\n for (i = 0; i < length; i++) {\r\n var c = text[i];\r\n if (c === \"-\") continue;\r\n if (c in alphabetValues) {\r\n if (alphabetValues[c] >= absBase) {\r\n if (c === \"1\" && absBase === 1) continue;\r\n throw new Error(c + \" is not a valid digit in base \" + base + \".\");\r\n }\r\n }\r\n }\r\n base = parseValue(base);\r\n var digits = [];\r\n var isNegative = text[0] === \"-\";\r\n for (i = isNegative ? 1 : 0; i < text.length; i++) {\r\n var c = text[i];\r\n if (c in alphabetValues) digits.push(parseValue(alphabetValues[c]));\r\n else if (c === \"<\") {\r\n var start = i;\r\n do { i++; } while (text[i] !== \">\" && i < text.length);\r\n digits.push(parseValue(text.slice(start + 1, i)));\r\n }\r\n else throw new Error(c + \" is not a valid character\");\r\n }\r\n return parseBaseFromArray(digits, base, isNegative);\r\n };\r\n\r\n function parseBaseFromArray(digits, base, isNegative) {\r\n var val = Integer[0], pow = Integer[1], i;\r\n for (i = digits.length - 1; i >= 0; i--) {\r\n val = val.add(digits[i].times(pow));\r\n pow = pow.times(base);\r\n }\r\n return isNegative ? val.negate() : val;\r\n }\r\n\r\n function stringify(digit, alphabet) {\r\n alphabet = alphabet || DEFAULT_ALPHABET;\r\n if (digit < alphabet.length) {\r\n return alphabet[digit];\r\n }\r\n return \"<\" + digit + \">\";\r\n }\r\n\r\n function toBase(n, base) {\r\n base = bigInt(base);\r\n if (base.isZero()) {\r\n if (n.isZero()) return { value: [0], isNegative: false };\r\n throw new Error(\"Cannot convert nonzero numbers to base 0.\");\r\n }\r\n if (base.equals(-1)) {\r\n if (n.isZero()) return { value: [0], isNegative: false };\r\n if (n.isNegative())\r\n return {\r\n value: [].concat.apply([], Array.apply(null, Array(-n.toJSNumber()))\r\n .map(Array.prototype.valueOf, [1, 0])\r\n ),\r\n isNegative: false\r\n };\r\n\r\n var arr = Array.apply(null, Array(n.toJSNumber() - 1))\r\n .map(Array.prototype.valueOf, [0, 1]);\r\n arr.unshift([1]);\r\n return {\r\n value: [].concat.apply([], arr),\r\n isNegative: false\r\n };\r\n }\r\n\r\n var neg = false;\r\n if (n.isNegative() && base.isPositive()) {\r\n neg = true;\r\n n = n.abs();\r\n }\r\n if (base.isUnit()) {\r\n if (n.isZero()) return { value: [0], isNegative: false };\r\n\r\n return {\r\n value: Array.apply(null, Array(n.toJSNumber()))\r\n .map(Number.prototype.valueOf, 1),\r\n isNegative: neg\r\n };\r\n }\r\n var out = [];\r\n var left = n, divmod;\r\n while (left.isNegative() || left.compareAbs(base) >= 0) {\r\n divmod = left.divmod(base);\r\n left = divmod.quotient;\r\n var digit = divmod.remainder;\r\n if (digit.isNegative()) {\r\n digit = base.minus(digit).abs();\r\n left = left.next();\r\n }\r\n out.push(digit.toJSNumber());\r\n }\r\n out.push(left.toJSNumber());\r\n return { value: out.reverse(), isNegative: neg };\r\n }\r\n\r\n function toBaseString(n, base, alphabet) {\r\n var arr = toBase(n, base);\r\n return (arr.isNegative ? \"-\" : \"\") + arr.value.map(function (x) {\r\n return stringify(x, alphabet);\r\n }).join('');\r\n }\r\n\r\n BigInteger.prototype.toArray = function (radix) {\r\n return toBase(this, radix);\r\n };\r\n\r\n SmallInteger.prototype.toArray = function (radix) {\r\n return toBase(this, radix);\r\n };\r\n\r\n NativeBigInt.prototype.toArray = function (radix) {\r\n return toBase(this, radix);\r\n };\r\n\r\n BigInteger.prototype.toString = function (radix, alphabet) {\r\n if (radix === undefined) radix = 10;\r\n if (radix !== 10 || alphabet) return toBaseString(this, radix, alphabet);\r\n var v = this.value, l = v.length, str = String(v[--l]), zeros = \"0000000\", digit;\r\n while (--l >= 0) {\r\n digit = String(v[l]);\r\n str += zeros.slice(digit.length) + digit;\r\n }\r\n var sign = this.sign ? \"-\" : \"\";\r\n return sign + str;\r\n };\r\n\r\n SmallInteger.prototype.toString = function (radix, alphabet) {\r\n if (radix === undefined) radix = 10;\r\n if (radix != 10 || alphabet) return toBaseString(this, radix, alphabet);\r\n return String(this.value);\r\n };\r\n\r\n NativeBigInt.prototype.toString = SmallInteger.prototype.toString;\r\n\r\n NativeBigInt.prototype.toJSON = BigInteger.prototype.toJSON = SmallInteger.prototype.toJSON = function () { return this.toString(); }\r\n\r\n BigInteger.prototype.valueOf = function () {\r\n return parseInt(this.toString(), 10);\r\n };\r\n BigInteger.prototype.toJSNumber = BigInteger.prototype.valueOf;\r\n\r\n SmallInteger.prototype.valueOf = function () {\r\n return this.value;\r\n };\r\n SmallInteger.prototype.toJSNumber = SmallInteger.prototype.valueOf;\r\n NativeBigInt.prototype.valueOf = NativeBigInt.prototype.toJSNumber = function () {\r\n return parseInt(this.toString(), 10);\r\n }\r\n\r\n function parseStringValue(v) {\r\n if (isPrecise(+v)) {\r\n var x = +v;\r\n if (x === truncate(x))\r\n return supportsNativeBigInt ? new NativeBigInt(BigInt(x)) : new SmallInteger(x);\r\n throw new Error(\"Invalid integer: \" + v);\r\n }\r\n var sign = v[0] === \"-\";\r\n if (sign) v = v.slice(1);\r\n var split = v.split(/e/i);\r\n if (split.length > 2) throw new Error(\"Invalid integer: \" + split.join(\"e\"));\r\n if (split.length === 2) {\r\n var exp = split[1];\r\n if (exp[0] === \"+\") exp = exp.slice(1);\r\n exp = +exp;\r\n if (exp !== truncate(exp) || !isPrecise(exp)) throw new Error(\"Invalid integer: \" + exp + \" is not a valid exponent.\");\r\n var text = split[0];\r\n var decimalPlace = text.indexOf(\".\");\r\n if (decimalPlace >= 0) {\r\n exp -= text.length - decimalPlace - 1;\r\n text = text.slice(0, decimalPlace) + text.slice(decimalPlace + 1);\r\n }\r\n if (exp < 0) throw new Error(\"Cannot include negative exponent part for integers\");\r\n text += (new Array(exp + 1)).join(\"0\");\r\n v = text;\r\n }\r\n var isValid = /^([0-9][0-9]*)$/.test(v);\r\n if (!isValid) throw new Error(\"Invalid integer: \" + v);\r\n if (supportsNativeBigInt) {\r\n return new NativeBigInt(BigInt(sign ? \"-\" + v : v));\r\n }\r\n var r = [], max = v.length, l = LOG_BASE, min = max - l;\r\n while (max > 0) {\r\n r.push(+v.slice(min, max));\r\n min -= l;\r\n if (min < 0) min = 0;\r\n max -= l;\r\n }\r\n trim(r);\r\n return new BigInteger(r, sign);\r\n }\r\n\r\n function parseNumberValue(v) {\r\n if (supportsNativeBigInt) {\r\n return new NativeBigInt(BigInt(v));\r\n }\r\n if (isPrecise(v)) {\r\n if (v !== truncate(v)) throw new Error(v + \" is not an integer.\");\r\n return new SmallInteger(v);\r\n }\r\n return parseStringValue(v.toString());\r\n }\r\n\r\n function parseValue(v) {\r\n if (typeof v === \"number\") {\r\n return parseNumberValue(v);\r\n }\r\n if (typeof v === \"string\") {\r\n return parseStringValue(v);\r\n }\r\n if (typeof v === \"bigint\") {\r\n return new NativeBigInt(v);\r\n }\r\n return v;\r\n }\r\n // Pre-define numbers in range [-999,999]\r\n for (var i = 0; i < 1000; i++) {\r\n Integer[i] = parseValue(i);\r\n if (i > 0) Integer[-i] = parseValue(-i);\r\n }\r\n // Backwards compatibility\r\n Integer.one = Integer[1];\r\n Integer.zero = Integer[0];\r\n Integer.minusOne = Integer[-1];\r\n Integer.max = max;\r\n Integer.min = min;\r\n Integer.gcd = gcd;\r\n Integer.lcm = lcm;\r\n Integer.isInstance = function (x) { return x instanceof BigInteger || x instanceof SmallInteger || x instanceof NativeBigInt; };\r\n Integer.randBetween = randBetween;\r\n\r\n Integer.fromArray = function (digits, base, isNegative) {\r\n return parseBaseFromArray(digits.map(parseValue), parseValue(base || 10), isNegative);\r\n };\r\n\r\n return Integer;\r\n})();\r\n\r\n// Node.js check\r\nif (typeof module !== \"undefined\" && module.hasOwnProperty(\"exports\")) {\r\n module.exports = bigInt;\r\n}\r\n\r\n//amd check\r\nif (typeof define === \"function\" && define.amd) {\r\n define( function () {\r\n return bigInt;\r\n });\r\n}\r\n","import bigInt from 'big-integer';\n\nexport const safeBigInt = bigInt(Number.MAX_SAFE_INTEGER);\nexport const ulongBigInt = bigInt(bigInt[2]).pow(64);\nexport const longBigInt = ulongBigInt.divide(bigInt[2]);\n","import bigInt from 'big-integer';\nimport {longBigInt, ulongBigInt} from './bigIntConstants';\n\nexport function bigIntFromBytes(bytes: Uint8Array | number[], base = 256) {\n return bigInt.fromArray(bytes instanceof Uint8Array ? [...bytes] : bytes, base);\n}\n\nexport function bigIntToBytes(bigInt: bigInt.BigInteger) {\n return new Uint8Array(bigInt.toArray(256).value);\n}\n\nexport function bigIntToSigned(bigInt: bigInt.BigInteger) {\n return bigInt.greater(longBigInt) ? bigInt.minus(ulongBigInt) : bigInt;\n}\n\nexport function bigIntToUnsigned(bigInt: bigInt.BigInteger) {\n return bigInt.isNegative() ? ulongBigInt.add(bigInt) : bigInt;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MessagesReactions, type AvailableReaction, type Message, type MessagePeerReaction, type MessagesAvailableReactions, type Reaction, type ReactionCount, type Update, type Updates, ChatReactions, Peer, Document, MessagesSavedReactionTags, SavedReactionTag, AvailableEffect, MessagesAvailableEffects} from '../../layer';\nimport findAndSplice from '../../helpers/array/findAndSplice';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport assumeType from '../../helpers/assumeType';\nimport callbackify from '../../helpers/callbackify';\nimport callbackifyAll from '../../helpers/callbackifyAll';\nimport copy from '../../helpers/object/copy';\nimport pause from '../../helpers/schedulers/pause';\nimport tsNow from '../../helpers/tsNow';\nimport {ReferenceContext} from '../mtproto/referenceDatabase';\nimport {AppManager} from './manager';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\nimport reactionsEqual from './utils/reactions/reactionsEqual';\nimport MTProtoMessagePort from '../mtproto/mtprotoMessagePort';\nimport availableReactionToReaction from './utils/reactions/availableReactionToReaction';\nimport {NULL_PEER_ID} from '../mtproto/mtproto_config';\nimport insertInDescendSortedArray from '../../helpers/array/insertInDescendSortedArray';\nimport {BroadcastEvents} from '../rootScope';\nimport {md5} from 'js-md5';\nimport bytesFromHex from '../../helpers/bytes/bytesFromHex';\nimport {bigIntFromBytes} from '../../helpers/bigInt/bigIntConversion';\nimport bigInt from 'big-integer';\nimport forEachReverse from '../../helpers/array/forEachReverse';\nimport fixEmoji from '../richTextProcessor/fixEmoji';\n\nconst SAVE_DOC_KEYS = [\n 'static_icon' as const,\n 'appear_animation' as const,\n 'select_animation' as const,\n 'activate_animation' as const,\n 'effect_animation' as const,\n 'around_animation' as const,\n 'center_icon' as const\n];\n\nconst REFERENCE_CONTEXT: ReferenceContext = {\n type: 'reactions'\n};\n\nconst REFRESH_TAGS_INTERVAL = 10 * 60e3;\n// const REFRESH_TAGS_INTERVAL = 15e3;\n\nexport type PeerAvailableReactions = {\n type: ChatReactions['_'],\n reactions: Reaction[]\n};\n\nexport type SendReactionOptions = {\n message: Message.message | ReactionsContext,\n reaction?: Reaction | AvailableReaction,\n onlyLocal?: boolean,\n sendAsPeerId?: PeerId\n};\n\nexport type ReactionsContext = Pick;\n\nexport class AppReactionsManager extends AppManager {\n private availableReactions: AvailableReaction[];\n private availableEffects: MaybePromise;\n private sendReactionPromises: Map>;\n private lastSendingTimes: Map;\n private reactions: {[key in 'recent' | 'top' | 'tags']?: Reaction[]};\n private savedReactionsTags: Map>;\n\n protected after() {\n this.clear(true);\n\n this.rootScope.addEventListener('user_auth', () => {\n setTimeout(() => {\n Promise.resolve(this.getAvailableReactions()).then(async(availableReactions) => {\n const toLoad: (Extract)[] = [\n 'around_animation',\n 'static_icon',\n 'appear_animation',\n 'center_icon'\n ];\n\n for(let i = 0, length = Math.min(7, availableReactions.length); i < length; ++i) {\n const availableReaction = availableReactions[i];\n const promises = toLoad.map((key) => {\n return availableReaction[key] && this.apiFileManager.downloadMedia({media: availableReaction[key]});\n });\n await Promise.all(promises);\n await pause(1000);\n }\n });\n\n this.getTopReactions();\n }, 7.5e3);\n\n this.getSavedReactionTags();\n });\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateSavedReactionTags: ({tags, savedPeerId}) => {\n if(!tags) {\n if(this.savedReactionsTags.get(savedPeerId)) {\n Promise.resolve(this.getSavedReactionTags(savedPeerId, true)).then((tags) => {\n this.apiUpdatesManager.processLocalUpdate({_: 'updateSavedReactionTags', tags, savedPeerId});\n });\n }\n\n return;\n }\n\n this.setSavedReactionTags(savedPeerId, tags);\n }\n });\n\n this.rootScope.addEventListener('messages_reactions', (arr) => {\n for(const item of arr) {\n this.processMessageReactionsChanges(item);\n }\n });\n\n setInterval(() => {\n if(!this.savedReactionsTags.size) {\n return;\n }\n\n this.savedReactionsTags.clear();\n this.rootScope.dispatchEvent('saved_tags_clear');\n }, REFRESH_TAGS_INTERVAL);\n }\n\n public clear = (init = false) => {\n if(init) {\n this.sendReactionPromises = new Map();\n this.lastSendingTimes = new Map();\n this.reactions = {};\n }\n\n this.savedReactionsTags = new Map();\n };\n\n public resetAvailableReactions() {\n this.availableReactions = undefined;\n this.getAvailableReactions();\n }\n\n public getAvailableReactions() {\n if(this.availableReactions) return this.availableReactions;\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.getAvailableReactions',\n processResult: (messagesAvailableReactions) => {\n assumeType(messagesAvailableReactions);\n\n const availableReactions = this.availableReactions = messagesAvailableReactions.reactions;\n for(const reaction of availableReactions) {\n for(const key of SAVE_DOC_KEYS) {\n if(!reaction[key]) {\n continue;\n }\n\n reaction[key] = this.appDocsManager.saveDoc(reaction[key], REFERENCE_CONTEXT);\n }\n }\n\n MTProtoMessagePort.getInstance().invokeVoid('mirror', {\n name: 'availableReactions',\n value: availableReactions\n });\n\n return availableReactions;\n },\n params: {\n hash: 0\n }\n });\n }\n\n public getActiveAvailableReactions() {\n return callbackify(this.getAvailableReactions(), (availableReactions) => {\n return availableReactions.filter((availableReaction) => !availableReaction.pFlags.inactive);\n });\n }\n\n public getAvailableReactionsForPeer(\n peerId: PeerId,\n unshiftQuickReaction?: boolean\n ): PeerAvailableReactions | Promise {\n const activeAvailableReactions = this.getActiveAvailableReactions();\n const topReactions = this.getTopReactions();\n const quickReaction = this.getQuickReaction();\n if(peerId.isUser()) {\n return callbackifyAll([\n topReactions,\n quickReaction\n ], ([topReactions, quickReaction]) => {\n const p: PeerAvailableReactions = {type: 'chatReactionsAll', reactions: topReactions};\n if(unshiftQuickReaction) {\n this.unshiftQuickReactionInner(p, quickReaction);\n }\n return p;\n });\n }\n\n const chatFull = this.appProfileManager.getChatFull(peerId.toChatId());\n return callbackifyAll([\n activeAvailableReactions,\n chatFull,\n quickReaction,\n topReactions\n ], ([\n activeAvailableReactions,\n chatFull,\n quickReaction,\n topReactions\n ]) => {\n let chatAvailableReactions = chatFull.available_reactions ?? {_: 'chatReactionsNone'};\n\n if(chatAvailableReactions._ === 'chatReactionsAll' && !chatAvailableReactions.pFlags.allow_custom) {\n chatAvailableReactions = {\n _: 'chatReactionsSome',\n reactions: activeAvailableReactions.map(availableReactionToReaction)\n };\n }\n\n let filteredChatReactions: Reaction[] = [];\n if(chatAvailableReactions._ === 'chatReactionsAll') {\n filteredChatReactions = topReactions;\n } else if(chatAvailableReactions._ === 'chatReactionsSome') {\n const filteredChatAvailableReactions = chatAvailableReactions.reactions.map((reaction) => {\n return activeAvailableReactions.find((availableReaction) => availableReaction.reaction === (reaction as Reaction.reactionEmoji).emoticon) || reaction;\n }).filter(Boolean);\n const indexes = new Map(activeAvailableReactions.map((availableReaction, idx) => [availableReaction.reaction, idx]));\n filteredChatAvailableReactions.sort((a, b) => (indexes.get((a as AvailableReaction.availableReaction).reaction) || 0) - (indexes.get((b as AvailableReaction.availableReaction).reaction) || 0));\n filteredChatReactions = filteredChatAvailableReactions.map((reaction) => {\n return reaction._ === 'availableReaction' ? availableReactionToReaction(reaction) : reaction;\n });\n }\n\n const p: PeerAvailableReactions = {\n type: chatAvailableReactions._,\n reactions: filteredChatReactions\n };\n\n if(chatAvailableReactions._ === 'chatReactionsAll' && unshiftQuickReaction) {\n this.unshiftQuickReactionInner(p, quickReaction);\n }\n\n return p;\n });\n }\n\n public getReactions(type: 'recent' | 'top' | 'tags') {\n if(this.reactions[type]) {\n return this.reactions[type];\n }\n\n let method: 'messages.getRecentReactions' | 'messages.getTopReactions' | 'messages.getDefaultTagReactions';\n if(type === 'recent') {\n method = 'messages.getRecentReactions';\n } else if(type === 'top') {\n method = 'messages.getTopReactions';\n } else {\n method = 'messages.getDefaultTagReactions';\n }\n\n return this.apiManager.invokeApiHashable({\n method,\n params: {\n limit: 75\n },\n processResult: (messagesReactions) => {\n assumeType(messagesReactions);\n return this.reactions[type] = messagesReactions.reactions;\n }\n });\n }\n\n public getTopReactions() {\n return this.getReactions('top');\n }\n\n public getRecentReactions() {\n return this.getReactions('recent');\n }\n\n public getTagReactions(peerId?: PeerId) {\n return callbackifyAll([\n this.getReactions('tags'),\n this.getSavedReactionTags(peerId)\n ], ([reactions, tags]) => {\n reactions = reactions.slice();\n forEachReverse(tags, (tag) => {\n const reaction = findAndSplice(reactions, (reaction) => reactionsEqual(reaction, tag.reaction));\n if(reaction) {\n reactions.unshift(reaction);\n }\n });\n\n return reactions;\n });\n }\n\n private unshiftQuickReactionInner(peerAvailableReactions: PeerAvailableReactions, quickReaction: Reaction | AvailableReaction) {\n if(quickReaction._ === 'availableReaction') {\n quickReaction = availableReactionToReaction(quickReaction);\n }\n\n peerAvailableReactions.reactions = peerAvailableReactions.reactions.slice();\n findAndSplice(peerAvailableReactions.reactions, (reaction) => reactionsEqual(reaction, quickReaction));\n peerAvailableReactions.reactions.unshift(quickReaction);\n\n return peerAvailableReactions;\n }\n\n // private unshiftQuickReaction(\n // availableReactions: AvailableReaction[] | PromiseLike,\n // quickReaction: ReturnType = this.getQuickReaction()\n // ) {\n // return callbackifyAll([\n // availableReactions,\n // quickReaction\n // ], ([availableReactions, quickReaction]) => {\n // return this.unshiftQuickReactionInner(availableReactions, quickReaction);\n // });\n // }\n\n public getAvailableReactionsByMessage(\n message: Message.message,\n unshiftQuickReaction?: boolean\n ): ReturnType {\n // if(!message) return {type: 'chatReactionsNone', reactions: []};\n let peerId: PeerId;\n if(!message) {\n peerId = NULL_PEER_ID;\n } else {\n peerId = (\n message.fwd_from?.channel_post &&\n this.appPeersManager.isMegagroup(message.peerId) &&\n message.fromId === message.fwdFromId &&\n message.fromId\n ) || message.peerId;\n }\n\n if(peerId === this.appPeersManager.peerId) {\n const {reactions} = message;\n if(!reactions || reactions.pFlags.reactions_as_tags) {\n return callbackify(this.getTagReactions(), (reactions) => {\n const p: PeerAvailableReactions = {type: 'chatReactionsAll', reactions};\n return p;\n });\n }\n }\n\n return this.getAvailableReactionsForPeer(peerId, unshiftQuickReaction);\n }\n\n // public isReactionActive(reaction: string) {\n // if(!this.availableReactions) return false;\n // return this.availableReactions.some((availableReaction) => availableReaction.reaction === reaction);\n // }\n\n public getQuickReaction() {\n return callbackifyAll([\n this.apiManager.getConfig(),\n this.getAvailableReactions()\n ], ([config, availableReactions]) => {\n const reaction = config.reactions_default;\n if(reaction?._ === 'reactionEmoji') {\n return availableReactions.find((availableReaction) => availableReaction.reaction === reaction.emoticon);\n }\n\n return reaction as Reaction.reactionCustomEmoji;\n });\n }\n\n public getReactionCached(reaction: string) {\n return this.availableReactions.find((availableReaction) => availableReaction.reaction === reaction);\n }\n\n public getReaction(reaction: string) {\n return callbackify(this.getAvailableReactions(), () => {\n return this.getReactionCached(reaction);\n });\n }\n\n public getMessagesReactions(peerId: PeerId, mids: number[]) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.getMessagesReactions',\n params: {\n id: mids.map((mid) => getServerMessageId(mid)),\n peer: this.appPeersManager.getInputPeerById(peerId)\n },\n processResult: (updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n\n // const update = (updates as Updates.updates).updates.find((update) => update._ === 'updateMessageReactions') as Update.updateMessageReactions;\n // return update.reactions;\n }\n });\n }\n\n public getMessageReactionsList(peerId: PeerId, mid: number, limit: number, reaction?: Reaction, offset?: string) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.getMessageReactionsList',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: getServerMessageId(mid),\n limit,\n reaction,\n offset\n },\n processResult: (messageReactionsList) => {\n this.appUsersManager.saveApiUsers(messageReactionsList.users);\n return messageReactionsList;\n }\n });\n }\n\n public setDefaultReaction(reaction: Reaction) {\n return this.apiManager.invokeApi('messages.setDefaultReaction', {reaction}).then(async(value) => {\n if(value) {\n const appConfig = await this.apiManager.getConfig();\n if(appConfig) {\n appConfig.reactions_default = reaction;\n }/* else { // if no config or loading it - overwrite\n this.apiManager.getAppConfig(true);\n } */\n\n this.rootScope.dispatchEvent('quick_reaction', reaction);\n }\n\n return value;\n });\n }\n\n public async sendReaction({\n message,\n reaction,\n onlyLocal,\n sendAsPeerId\n }: SendReactionOptions) {\n message = this.appMessagesManager.getMessageByPeer(message.peerId, message.mid) as Message.message;\n\n if(reaction._ === 'availableReaction') {\n reaction = {\n _: 'reactionEmoji',\n emoticon: reaction.reaction\n };\n }\n\n const limit = await this.apiManager.getLimit('reactions');\n\n const lastSendingTimeKey = message.peerId + '_' + message.mid;\n const lastSendingTime = this.lastSendingTimes.get(lastSendingTimeKey);\n if(lastSendingTime) {\n return;\n } else {\n this.lastSendingTimes.set(lastSendingTimeKey, Date.now());\n setTimeout(() => {\n this.lastSendingTimes.delete(lastSendingTimeKey);\n }, 333);\n }\n\n const {peerId, mid} = message;\n let myPeer: Peer;\n if(sendAsPeerId) {\n myPeer = this.appPeersManager.getOutputPeer(sendAsPeerId);\n } else {\n myPeer = this.appMessagesManager.generateFromId(peerId) ?? this.appPeersManager.getOutputPeer(peerId);\n }\n const myPeerId = this.appPeersManager.getPeerId(myPeer);\n\n const unsetReactionCount = (reactionCount: ReactionCount) => {\n --reactionCount.count;\n delete reactionCount.chosen_order;\n\n if(reactionsEqual(reaction as Reaction, reactionCount.reaction)) {\n reaction = undefined as Reaction;\n }\n\n if(!reactionCount.count) {\n indexOfAndSplice(reactions.results, reactionCount);\n }/* else {\n insertInDescendSortedArray(reactions.results, chosenReaction, 'count', chosenReactionIdx);\n } */\n\n if(reactions.recent_reactions) {\n findAndSplice(reactions.recent_reactions, (recentReaction) => reactionsEqual(recentReaction.reaction, reactionCount.reaction) && this.appPeersManager.getPeerId(recentReaction.peer_id) === myPeerId);\n }\n\n if(!reactions.results.length) {\n reactions = undefined;\n }\n };\n\n const canSeeList = message.reactions?.pFlags?.can_see_list || !this.appPeersManager.isBroadcast(message.peerId) || message.peerId.isUser();\n if(!message.reactions) {\n message.reactions = {\n _: 'messageReactions',\n results: [],\n recent_reactions: canSeeList ? [] : undefined,\n pFlags: {\n can_see_list: canSeeList || undefined\n }\n };\n }\n\n let reactions = onlyLocal ? message.reactions : copy(message.reactions);\n const chosenReactions = reactions.results.filter((reactionCount) => reactionCount.chosen_order !== undefined);\n chosenReactions.sort((a, b) => b.chosen_order - a.chosen_order);\n const unsetReactions: ReactionCount[] = [];\n const chosenReactionIdx = chosenReactions.findIndex((reactionCount) => reactionsEqual(reactionCount.reaction, reaction as Reaction));\n if(chosenReactionIdx !== -1) unsetReactions.push(...chosenReactions.splice(chosenReactionIdx, 1));\n unsetReactions.push(...chosenReactions.splice(limit - +(chosenReactionIdx === -1)));\n unsetReactions.forEach((reactionCount) => {\n chosenReactions.forEach((chosenReactionCount) => {\n if(chosenReactionCount.chosen_order > reactionCount.chosen_order) {\n --chosenReactionCount.chosen_order;\n }\n });\n\n unsetReactionCount(reactionCount);\n });\n\n const chosenReactionsLength = chosenReactions.length;\n chosenReactions.forEach((reactionCount, idx) => {\n reactionCount.chosen_order = chosenReactionsLength - 1 - idx;\n });\n\n if(reaction) {\n if(!reactions) {\n reactions/* = message.reactions */ = {\n _: 'messageReactions',\n results: [],\n pFlags: {}\n };\n\n if(canSeeList) {\n reactions.pFlags.can_see_list = true;\n }\n }\n\n if(!reactions.results.length && peerId === this.appPeersManager.peerId) {\n reactions.pFlags.reactions_as_tags = true;\n }\n\n let reactionCountIdx = reactions.results.findIndex((reactionCount) => reactionsEqual(reactionCount.reaction, reaction as Reaction));\n let reactionCount = reactionCountIdx !== -1 && reactions.results[reactionCountIdx];\n if(!reactionCount) {\n reactionCount = {\n _: 'reactionCount',\n count: 0,\n reaction\n };\n\n reactionCountIdx = reactions.results.push(reactionCount) - 1;\n }\n\n ++reactionCount.count;\n reactionCount.chosen_order = chosenReactions.length ? chosenReactions[0].chosen_order + 1 : 0;\n chosenReactions.unshift(reactionCount);\n\n if(!reactions.recent_reactions && canSeeList) {\n reactions.recent_reactions = [];\n }\n\n if(reactions.recent_reactions) {\n const peerReaction: MessagePeerReaction = {\n _: 'messagePeerReaction',\n reaction,\n peer_id: myPeer,\n pFlags: {},\n date: tsNow(true)\n };\n\n if(!this.appPeersManager.isMegagroup(peerId) && false) {\n reactions.recent_reactions.push(peerReaction);\n reactions.recent_reactions = reactions.recent_reactions.slice(-3);\n } else {\n reactions.recent_reactions.unshift(peerReaction);\n reactions.recent_reactions = reactions.recent_reactions.slice(0, 3);\n }\n }\n\n // insertInDescendSortedArray(reactions.results, reactionCount, 'count', reactionCountIdx);\n }\n\n const availableReactions = this.availableReactions;\n if(reactions && availableReactions?.length) {\n const indexes: Map = new Map();\n availableReactions.forEach((availableReaction, idx) => {\n indexes.set(availableReaction.reaction, idx);\n });\n\n reactions.results.sort((a, b) => {\n const id1 = (a.reaction as Reaction.reactionCustomEmoji).document_id || (a.reaction as Reaction.reactionEmoji).emoticon;\n const id2 = (b.reaction as Reaction.reactionCustomEmoji).document_id || (b.reaction as Reaction.reactionEmoji).emoticon;\n return (b.count - a.count) || ((indexes.get(id1) ?? 0) - (indexes.get(id2) ?? 0));\n });\n }\n\n if(onlyLocal) {\n message.reactions = reactions;\n this.rootScope.dispatchEvent('messages_reactions', [{message: message as Message.message, changedResults: [], removedResults: []}]);\n return Promise.resolve();\n }\n\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateMessageReactions',\n peer: (message as Message.message).peer_id,\n msg_id: (message as Message.message).id,\n reactions: reactions,\n local: true\n });\n\n const promiseKey = [peerId, mid].join('-');\n const msgId = getServerMessageId(mid);\n const promise = this.apiManager.invokeApi('messages.sendReaction', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: msgId,\n reaction: chosenReactions.map((reactionCount) => reactionCount.reaction).reverse()\n }).then((updates) => {\n assumeType(updates);\n\n const editMessageUpdateIdx = updates.updates.findIndex((update) => update._ === 'updateEditMessage' || update._ === 'updateEditChannelMessage');\n if(editMessageUpdateIdx !== -1) {\n const editMessageUpdate = updates.updates[editMessageUpdateIdx] as Update.updateEditMessage | Update.updateEditChannelMessage;\n updates.updates[editMessageUpdateIdx] = {\n _: 'updateMessageReactions',\n msg_id: msgId,\n peer: this.appPeersManager.getOutputPeer(peerId),\n reactions: (editMessageUpdate.message as Message.message).reactions,\n pts: editMessageUpdate.pts,\n pts_count: editMessageUpdate.pts_count\n };\n }\n\n this.apiUpdatesManager.processUpdateMessage(updates);\n }).catch((err: ApiError) => {\n if(err.type === 'REACTION_INVALID' && this.sendReactionPromises.get(promiseKey) === promise) {\n this.sendReaction({\n message,\n reaction: chosenReactions[0]?.reaction,\n onlyLocal: true,\n sendAsPeerId\n });\n }\n }).finally(() => {\n if(this.sendReactionPromises.get(promiseKey) === promise) {\n this.sendReactionPromises.delete(promiseKey);\n }\n });\n\n this.sendReactionPromises.set(promiseKey, promise);\n return promise;\n }\n\n public getRandomGenericAnimation() {\n return callbackify(this.appStickersManager.getLocalStickerSet('inputStickerSetEmojiGenericAnimations'), (messagesStickerSet) => {\n const length = messagesStickerSet.documents.length;\n if(!length) {\n return;\n }\n\n const document = messagesStickerSet.documents[Math.floor(Math.random() * length)];\n return document as Document.document;\n });\n }\n\n private setSavedReactionTags(savedPeerId: PeerId, tags: SavedReactionTag[]) {\n this.savedReactionsTags.set(savedPeerId, tags);\n this.rootScope.dispatchEvent('saved_tags', {savedPeerId, tags});\n }\n\n public getSavedReactionTags(savedPeerId?: PeerId, overwrite?: boolean): MaybePromise {\n const {savedReactionsTags} = this;\n const cache = savedReactionsTags.get(savedPeerId);\n if(cache && !overwrite) {\n return cache;\n }\n\n const promise = this.apiManager.invokeApi('messages.getSavedReactionTags', {\n peer: savedPeerId ? this.appPeersManager.getInputPeerById(savedPeerId) : undefined,\n hash: 0\n }).then((messagesSavedReactionTags) => {\n const tags = (messagesSavedReactionTags as MessagesSavedReactionTags.messagesSavedReactionTags).tags || [];\n if(savedReactionsTags.get(savedPeerId) === promise) {\n // for(const tag of tags) {\n // const {historyStorage} = this.appMessagesManager.processRequestHistoryOptions({\n // peerId: peerId || this.appPeersManager.peerId,\n // savedReaction: [tag.reaction as Reaction.reactionCustomEmoji]\n // });\n\n // historyStorage.count = tag.count;\n // }\n\n this.setSavedReactionTags(savedPeerId, tags);\n }\n\n return this.getSavedReactionTags(savedPeerId);\n });\n\n savedReactionsTags.set(savedPeerId, promise);\n return promise;\n }\n\n public async updateSavedReactionTag(reaction: Reaction, title?: string) {\n await this.apiManager.invokeApi('messages.updateSavedReactionTag', {reaction, title});\n const tags = await this.getSavedReactionTags();\n const tag = tags.find((tag) => reactionsEqual(tag.reaction, reaction));\n if(title) tag.title = title;\n else delete tag.title;\n this.apiUpdatesManager.processLocalUpdate({_: 'updateSavedReactionTags', tags});\n }\n\n public getAvailableEffects(overwrite?: boolean) {\n if(this.availableEffects && overwrite) {\n this.availableEffects = undefined;\n }\n\n return this.availableEffects ??= this.apiManager.invokeApiSingleProcess({\n method: 'messages.getAvailableEffects',\n processResult: (availableEffects) => {\n assumeType(availableEffects);\n availableEffects.documents.forEach((doc, idx, arr) => {\n arr[idx] = this.appDocsManager.saveDoc(doc);\n });\n\n availableEffects.effects.forEach((availableEffect) => {\n availableEffect.emoticon = fixEmoji(availableEffect.emoticon);\n });\n\n return this.availableEffects = availableEffects.effects;\n }\n });\n }\n\n public getAvailableEffect(effect: DocId) {\n return callbackify(this.getAvailableEffects(), (effects) => {\n return effects.find((availableEffect) => availableEffect.id === effect);\n });\n }\n\n public async searchAvailableEffects({q, emoticon}: {q?: string, emoticon?: string[]}) {\n const [emojis, availableEffects] = await Promise.all([\n q?.trim() ? (await this.appEmojiManager.prepareAndSearchEmojis({q, limit: Infinity})).map((emoji) => emoji.emoji) : emoticon,\n this.getAvailableEffects()\n ]);\n\n const set = new Set(emojis);\n return availableEffects.filter((availableEffect) => set.has(availableEffect.emoticon));\n }\n\n public processMessageReactionsChanges({message, changedResults, removedResults, savedPeerId}: BroadcastEvents['messages_reactions'][0] & {savedPeerId?: PeerId}) {\n if(message.peerId !== this.appPeersManager.peerId) {\n return;\n }\n\n const {reactions} = message;\n if(reactions && !reactions.pFlags.reactions_as_tags) {\n return;\n }\n\n if(savedPeerId === undefined) {\n this.processMessageReactionsChanges({\n message,\n changedResults,\n removedResults,\n savedPeerId: this.appPeersManager.getPeerId(message.saved_peer_id)\n });\n }\n\n const tags = this.savedReactionsTags.get(savedPeerId);\n if(!tags) {\n return;\n }\n\n if(tags instanceof Promise) {\n this.apiUpdatesManager.processLocalUpdate({_: 'updateSavedReactionTags', savedPeerId});\n return;\n }\n\n assumeType(tags);\n\n const getTagLongId = (tag: SavedReactionTag) => {\n const docId = (tag.reaction as Reaction.reactionCustomEmoji).document_id;\n if(docId) {\n return bigInt('' + docId, 10);\n }\n\n return bigIntFromBytes(bytesFromHex(md5((tag.reaction as Reaction.reactionEmoji).emoticon).slice(0, 16)));\n };\n\n const insert = (tag: SavedReactionTag) => {\n const cmp = (tag1: SavedReactionTag, tag2: SavedReactionTag) => {\n const diff = tag1.count - tag2.count;\n if(diff) {\n return diff;\n }\n\n const tag1LongId = getTagLongId(tag1);\n const tag2LongId = getTagLongId(tag2);\n return tag1LongId.compare(tag2LongId);\n };\n\n insertInDescendSortedArray(\n tags,\n tag,\n ((tag: any) => tag) as any,\n undefined,\n cmp as any\n );\n };\n\n for(const reactionCount of removedResults) {\n const index = tags.findIndex((tag) => reactionsEqual(tag.reaction, reactionCount.reaction));\n const tag = tags[index];\n if(!tag) {\n continue;\n }\n\n if(!--tag.count) {\n tags.splice(index, 1);\n } else {\n insert(tag);\n }\n }\n\n for(const reactionCount of changedResults) {\n let tag = tags.find((tag) => reactionsEqual(tag.reaction, reactionCount.reaction));\n if(!tag) {\n tag = {\n _: 'savedReactionTag',\n count: 0,\n reaction: reactionCount.reaction\n };\n }\n\n ++tag.count;\n insert(tag);\n }\n\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateSavedReactionTags',\n tags,\n savedPeerId\n });\n }\n}\n","export default function fixBase64String(str: string, toUrl: boolean) {\n if(toUrl) {\n return str.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/\\=+$/, '');\n } else {\n return str.replace(/-/g, '+').replace(/_/g, '/');\n }\n}\n","export default function toArray(value: T | T[]): T[] {\n return Array.isArray(value) ? value : [value];\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDocument} from './appDocsManager';\nimport type {DownloadOptions} from '../mtproto/apiFileManager';\nimport {Document, InputFileLocation, InputStickerSet, MessageEntity, MessagesAllStickers, MessagesFavedStickers, MessagesFeaturedStickers, MessagesFoundStickerSets, MessagesRecentStickers, MessagesStickers, MessagesStickerSet, PhotoSize, StickerPack, StickerSet, StickerSetCovered, Update, VideoSize} from '../../layer';\nimport {Modify} from '../../types';\nimport AppStorage from '../storage';\nimport DATABASE_STATE from '../../config/databases/state';\nimport assumeType from '../../helpers/assumeType';\nimport fixBase64String from '../../helpers/fixBase64String';\nimport forEachReverse from '../../helpers/array/forEachReverse';\nimport findAndSplice from '../../helpers/array/findAndSplice';\nimport {AppManager} from './manager';\nimport fixEmoji from '../richTextProcessor/fixEmoji';\nimport ctx from '../../environment/ctx';\nimport {getEnvironment} from '../../environment/utils';\nimport getDocumentInput from './utils/docs/getDocumentInput';\nimport getStickerEffectThumb from './utils/stickers/getStickerEffectThumb';\nimport tsNow from '../../helpers/tsNow';\nimport SearchIndex from '../searchIndex';\nimport parseEntities from '../richTextProcessor/parseEntities';\nimport toArray from '../../helpers/array/toArray';\n\nconst CACHE_TIME = 3600e3;\n\ntype LOCAL_STICKER_SET_ID = Extract<\n InputStickerSet['_'],\n 'inputStickerSetAnimatedEmoji' | 'inputStickerSetAnimatedEmojiAnimations' |\n 'inputStickerSetPremiumGifts' | 'inputStickerSetEmojiGenericAnimations' |\n 'inputStickerSetEmojiDefaultStatuses' | 'inputStickerSetEmojiDefaultTopicIcons'\n>;\n\ntype LOCAL_ID = 'EMOJI' | 'EMOJI_ANIMATIONS' | 'PREMIUM_GIFTS' | 'GENERIC_ANIMATIONS' | 'DEFAULT_STATUSES' | 'DEFAULT_TOPIC_ICONS';\n\nconst LOCAL_IDS: {[key in LOCAL_ID]: LOCAL_STICKER_SET_ID} = {\n EMOJI: 'inputStickerSetAnimatedEmoji',\n EMOJI_ANIMATIONS: 'inputStickerSetAnimatedEmojiAnimations',\n PREMIUM_GIFTS: 'inputStickerSetPremiumGifts',\n GENERIC_ANIMATIONS: 'inputStickerSetEmojiGenericAnimations',\n DEFAULT_STATUSES: 'inputStickerSetEmojiDefaultStatuses',\n DEFAULT_TOPIC_ICONS: 'inputStickerSetEmojiDefaultTopicIcons'\n};\n\nconst LOCAL_IDS_SET: Set = new Set(Object.values(LOCAL_IDS) as any);\n\n// let TEST_FILE_REFERENCE_REFRESH = true;\n\nexport type MyStickerSetInput = {\n id: StickerSet.stickerSet['id'],\n access_hash?: StickerSet.stickerSet['access_hash']\n};\n\nexport type MyMessagesStickerSet = MessagesStickerSet.messagesStickerSet;\n\nexport class AppStickersManager extends AppManager {\n private storage = new AppStorage, typeof DATABASE_STATE>(DATABASE_STATE, 'stickerSets');\n\n private getStickerSetPromises: {[setId: Long]: Promise};\n private getStickersByEmoticonsPromises: {[emoticon: string]: Promise};\n\n private greetingStickers: MyDocument[];\n private getGreetingStickersTimeout: number;\n private getGreetingStickersPromise: Promise;\n\n private sounds: Record;\n private getAnimatedEmojiSoundsPromise: Promise;\n\n private favedStickers: MyDocument[];\n private recentStickers: MyDocument[];\n\n private names: Record;\n\n private indexes: Partial<{\n stickers: SearchIndex,\n emojis: SearchIndex\n }>;\n\n protected after() {\n this.clear(true);\n\n this.rootScope.addEventListener('user_auth', () => {\n setTimeout(() => {\n this.getAnimatedEmojiStickerSet();\n\n Promise.resolve(this.getLocalStickerSet(LOCAL_IDS.GENERIC_ANIMATIONS)).then(async(messagesStickerSet) => {\n for(const doc of messagesStickerSet.documents) {\n await this.apiFileManager.downloadMedia({media: doc as Document.document});\n }\n });\n // this.getFavedStickersStickers();\n }, 1000);\n\n if(!this.getGreetingStickersPromise) {\n this.getGreetingStickersTimeout ??= ctx.setTimeout(() => {\n this.getGreetingStickersTimeout = undefined;\n this.getGreetingSticker(true);\n }, 5000);\n }\n\n this.rootScope.addEventListener('app_config', () => this.onStickersUpdated('faved', true));\n });\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateNewStickerSet: (update) => {\n const stickerSet = update.stickerset as MyMessagesStickerSet;\n this.saveStickerSet(stickerSet, stickerSet.set.id);\n this.rootScope.dispatchEvent('stickers_installed', stickerSet.set);\n },\n\n updateRecentStickers: () => this.onStickersUpdated('recent', true),\n\n updateFavedStickers: () => this.onStickersUpdated('faved', true),\n\n updateMoveStickerSetToTop: (update) => {\n this.rootScope.dispatchEvent('stickers_top', update.stickerset);\n },\n\n updateStickerSetsOrder: (update) => {\n this.rootScope.dispatchEvent('stickers_order', {\n type: update.pFlags.emojis ? 'emojis' : (update.pFlags.masks ? 'masks' : 'stickers'),\n order: update.order\n });\n }\n\n // updateStickerSets: (update) => {\n // if(update.pFlags.masks) {\n // return;\n // }\n\n // this.storage.clear(false);\n\n // if(update.pFlags.emojis) {\n\n // } else {\n // this.favedStickers = undefined;\n // this.recentStickers = undefined;\n // this.onStickersUpdated('recent', true);\n // this.onStickersUpdated('faved', true);\n // }\n // }\n });\n }\n\n public clear = (init?: boolean) => {\n this.getStickerSetPromises = {};\n this.getStickersByEmoticonsPromises = {};\n this.sounds = {};\n this.names = {};\n this.indexes = {};\n };\n\n private async onStickersUpdated(type: 'faved' | 'recent', overwrite: boolean) {\n const stickers = await (type === 'faved' ? this.getFavedStickersStickers(overwrite) : this.getRecentStickersStickers(overwrite));\n this.rootScope.dispatchEvent('stickers_updated', {\n type,\n stickers\n });\n }\n\n public getGreetingSticker(justPreload = false) {\n if(this.getGreetingStickersTimeout) {\n clearTimeout(this.getGreetingStickersTimeout);\n this.getGreetingStickersTimeout = undefined;\n }\n\n if(!this.getGreetingStickersPromise) {\n this.getGreetingStickersPromise = this.getStickersByEmoticon({\n emoticon: '👋⭐️',\n includeServerStickers: true\n }).then((docs) => {\n if(!docs.length) throw 'NO_STICKERS';\n this.greetingStickers = docs.slice() as Document.document[];\n this.greetingStickers.sort((a, b) => Math.random() - Math.random());\n });\n }\n\n return this.getGreetingStickersPromise.then(() => {\n let doc: Document.document;\n if(!justPreload) {\n doc = this.greetingStickers.shift();\n this.greetingStickers.push(doc);\n }\n\n this.apiFileManager.downloadMedia({media: this.greetingStickers[0]}); // preload next sticker\n\n return doc;\n });\n }\n\n private saveStickers(docs: Document[]) {\n if(!docs || (docs as any).saved) return;\n (docs as any).saved = true;\n forEachReverse(docs, (doc, idx) => {\n doc = this.appDocsManager.saveDoc(doc);\n\n if(!doc) docs.splice(idx, 1);\n else docs[idx] = doc;\n });\n }\n\n private canUseStickerSetCache(set: MyMessagesStickerSet, useCache?: boolean) {\n return set && set.documents?.length && ((Date.now() - set.refreshTime) < CACHE_TIME || useCache);\n }\n\n public getStickerSet(set: MyStickerSetInput, params: Partial<{\n overwrite: boolean,\n useCache: boolean,\n saveById: boolean\n }> = {}): Promise | MyMessagesStickerSet {\n let {id} = set;\n if(!set.access_hash) {\n set = this.names[id] || set;\n id = set.id;\n }\n\n if(this.getStickerSetPromises[id]) {\n return this.getStickerSetPromises[id];\n }\n\n if(!params.overwrite) {\n const cachedSet = this.storage.getFromCache(id);\n if(this.canUseStickerSetCache(cachedSet, params.useCache)) {\n return cachedSet;\n }\n }\n\n const promise = this.getStickerSetPromises[id] = new Promise(async(resolve) => {\n if(!params.overwrite) {\n const cachedSet = await this.storage.get(id);\n if(this.canUseStickerSetCache(cachedSet, params.useCache)) {\n delete (cachedSet.documents as any).saved;\n this.saveStickerSetLocal(cachedSet);\n resolve(cachedSet);\n\n if(this.getStickerSetPromises[id] === promise) {\n delete this.getStickerSetPromises[id];\n }\n\n return;\n }\n }\n\n try {\n const stickerSet = await this.apiManager.invokeApi('messages.getStickerSet', {\n stickerset: this.getStickerSetInput(set),\n hash: 0\n }) as MyMessagesStickerSet;\n\n const saveById = params.saveById ? id : stickerSet.set.id;\n this.saveStickerSet(stickerSet, saveById);\n\n resolve(stickerSet);\n } catch(err) {\n resolve(null);\n }\n\n if(this.getStickerSetPromises[id] === promise) {\n delete this.getStickerSetPromises[id];\n }\n });\n\n return promise;\n }\n\n public getLocalStickerSet(id: LOCAL_STICKER_SET_ID) {\n return this.getStickerSet({id}, {saveById: true});\n }\n\n public getAnimatedEmojiStickerSet() {\n return Promise.all([\n this.getLocalStickerSet(LOCAL_IDS.EMOJI),\n this.getLocalStickerSet(LOCAL_IDS.EMOJI_ANIMATIONS),\n this.getAnimatedEmojiSounds(),\n this.getLocalStickerSet(LOCAL_IDS.GENERIC_ANIMATIONS)\n ]).then(([emoji, animations]) => {\n return {emoji, animations};\n });\n }\n\n public getAnimatedEmojiSounds(overwrite?: boolean) {\n if(this.getAnimatedEmojiSoundsPromise && !overwrite) return this.getAnimatedEmojiSoundsPromise;\n const promise = this.getAnimatedEmojiSoundsPromise = Promise.all([\n this.apiManager.getAppConfig(overwrite),\n this.apiManager.getConfig()\n ]).then(([appConfig, config]) => {\n if(this.getAnimatedEmojiSoundsPromise !== promise) {\n return;\n }\n\n for(const emoji in appConfig.emojies_sounds) {\n const sound = appConfig.emojies_sounds[emoji];\n const bytesStr = atob(fixBase64String(sound.file_reference_base64, false));\n const bytes = new Uint8Array(bytesStr.length);\n for(let i = 0, length = bytes.length; i < length; ++i) {\n bytes[i] = bytesStr[i].charCodeAt(0);\n }\n\n // if(TEST_FILE_REFERENCE_REFRESH) {\n // bytes[0] = bytes[1] = bytes[2] = bytes[3] = bytes[4] = 0;\n // sound.access_hash += '999';\n // }\n\n const doc = this.appDocsManager.saveDoc({\n _: 'document',\n pFlags: {},\n id: sound.id,\n access_hash: sound.access_hash,\n attributes: [{\n _: 'documentAttributeAudio',\n duration: 1,\n pFlags: {\n voice: true\n }\n }],\n date: 0,\n dc_id: config.this_dc,\n file_reference: bytes,\n mime_type: 'audio/ogg'\n // size: 101010 // test loading everytime\n }, {\n type: 'emojiesSounds'\n });\n\n this.sounds[emoji] = doc;\n }\n\n // if(TEST_FILE_REFERENCE_REFRESH) {\n // TEST_FILE_REFERENCE_REFRESH = false;\n // }\n });\n\n return promise;\n }\n\n public async getRecentStickers(overwrite?: boolean): Promise> {\n const res = await this.apiManager.invokeApiHashable({\n method: 'messages.getRecentStickers',\n processResult: (res) => {\n assumeType(res);\n\n this.recentStickers = res.stickers as MyDocument[];\n this.saveStickers(res.stickers);\n return res;\n },\n overwrite\n });\n\n return res;\n }\n\n public getRecentStickersStickers(overwrite?: boolean) {\n if(overwrite) this.recentStickers = undefined;\n else if(this.recentStickers) return this.recentStickers;\n return this.getRecentStickers(overwrite).then(() => this.recentStickers);\n }\n\n public async saveRecentSticker(docId: DocId, unsave?: boolean, attached?: boolean) {\n await this.getRecentStickersStickers();\n\n const doc = this.appDocsManager.getDoc(docId);\n\n findAndSplice(this.recentStickers, (_doc) => _doc.id === docId);\n if(!unsave) {\n this.recentStickers.unshift(doc);\n\n const docEmoticon = fixEmoji(doc.stickerEmojiRaw);\n for(const emoticon in this.getStickersByEmoticonsPromises) {\n const promise = this.getStickersByEmoticonsPromises[emoticon];\n promise.then((stickers) => {\n const _doc = findAndSplice(stickers, (_doc) => _doc.id === doc.id);\n if(_doc) {\n stickers.unshift(_doc);\n } else if(emoticon.includes(docEmoticon)) {\n stickers.unshift(doc);\n }\n });\n }\n }\n\n this.rootScope.dispatchEvent('sticker_updated', {type: 'recent', faved: !unsave, document: doc});\n\n if(unsave) {\n this.onStickersUpdated('recent', false);\n }\n\n return this.apiManager.invokeApi('messages.saveRecentSticker', {\n id: getDocumentInput(doc),\n unsave,\n attached\n });\n }\n\n private cleanEmoji(emoji: string) {\n return emoji.replace(/\\ufe0f/g, '').replace(/🏻|🏼|🏽|🏾|🏿/g, '');\n }\n\n public getAnimatedEmojiSticker(emoji: string, isAnimation?: boolean) {\n const id = isAnimation ? LOCAL_IDS.EMOJI_ANIMATIONS : LOCAL_IDS.EMOJI;\n const stickerSet = this.storage.getFromCache(id);\n // const stickerSet = await this.getStickerSet({id});\n if(!stickerSet?.documents) return;\n\n if(isAnimation) {\n if(['🧡', '💛', '💚', '💙', '💜', '🖤', '🤍', '🤎'].includes(emoji)) {\n emoji = '❤️';\n }\n }\n\n emoji = this.cleanEmoji(emoji);\n const pack = stickerSet.packs.find((p) => p.emoticon === emoji);\n return pack ? this.appDocsManager.getDoc(pack.documents[0]) : undefined;\n }\n\n public getAnimatedEmojiSoundDocument(emoji: string) {\n return this.sounds[this.cleanEmoji(emoji)];\n }\n\n public preloadAnimatedEmojiSticker(emoji: string) {\n const preloadEmojiPromise = this.getAnimatedEmojiStickerSet().then(() => {\n return this.getAnimatedEmojiSticker(emoji);\n });\n\n return Promise.all([\n preloadEmojiPromise,\n this.preloadAnimatedEmojiStickerAnimation(emoji)\n ]).then(([doc, a]) => {\n return {\n doc: doc,\n animation: a?.doc,\n sound: a?.sound\n };\n });\n }\n\n public preloadAnimatedEmojiStickerAnimation(emoji: string) {\n return this.getAnimatedEmojiStickerSet().then(() => {\n return this.getAnimatedEmojiSticker(emoji, true);\n }).then((doc) => {\n if(!doc) {\n return;\n }\n\n const sound = this.getAnimatedEmojiSoundDocument(emoji);\n return Promise.all([\n this.preloadSticker(doc.id),\n sound ? this.preloadSticker(sound.id) : undefined\n ]).then(() => {\n return {doc, sound};\n });\n });\n }\n\n public preloadSticker(docId: DocId, isPremiumEffect?: boolean) {\n const doc = this.appDocsManager.getDoc(docId);\n return this.apiFileManager.downloadMedia({media: doc, thumb: isPremiumEffect ? doc.video_thumbs?.[0] as Extract : undefined});\n }\n\n public getEmojisSearchIndex() {\n return this.indexes.emojis;\n }\n\n private indexStickerSet(stickerSet: MessagesStickerSet.messagesStickerSet) {\n const isEmojis = stickerSet.set.pFlags.emojis;\n const index = this.indexes[isEmojis ? 'emojis' : 'stickers'] ??= new SearchIndex({minChars: 2, fullWords: true});\n\n const map: Map = new Map();\n stickerSet.keywords.forEach((keyword) => {\n map.set(keyword.document_id, keyword.keyword.slice());\n });\n\n stickerSet.packs.forEach((pack) => {\n const emoticon = fixEmoji(pack.emoticon);\n pack.documents.forEach((docId) => {\n let array = map.get(docId);\n if(!array) {\n map.set(docId, array = []);\n }\n\n array.push(emoticon);\n });\n });\n\n const shouldRemove = !stickerSet.set.installed_date;\n map.forEach((keywords, docId) => {\n index.indexObjectArray(docId as DocId, shouldRemove ? [] : keywords);\n });\n }\n\n private saveStickerSetLocal(stickerSet: MessagesStickerSet.messagesStickerSet) {\n if(stickerSet.set.short_name) {\n this.names[stickerSet.set.short_name] = this.getStickerSetInput(stickerSet.set) as any;\n }\n\n this.saveStickers(stickerSet.documents);\n this.indexStickerSet(stickerSet);\n }\n\n private saveStickerSet(res: Omit, id: DocId) {\n const newSet: MessagesStickerSet = {\n _: 'messages.stickerSet',\n set: res.set,\n packs: res.packs,\n documents: res.documents as Document[],\n keywords: res.keywords\n };\n\n let stickerSet = this.storage.getFromCache(id);\n if(stickerSet) {\n Object.assign(stickerSet, newSet);\n } else {\n stickerSet = this.storage.setToCache(id, newSet);\n }\n\n this.saveStickerSetLocal(newSet);\n\n // console.log('stickers wrote', this.stickerSets);\n const needSave = stickerSet.set.installed_date || LOCAL_IDS_SET.has(id as any);\n stickerSet.refreshTime = Date.now();\n this.storage.set({[id]: stickerSet}, !needSave);\n }\n\n public getStickerSetThumbDownloadOptions(stickerSet: StickerSet.stickerSet): DownloadOptions {\n const thumb = stickerSet.thumbs.find((thumb) => thumb._ === 'photoSize') as PhotoSize.photoSize;\n const dcId = stickerSet.thumb_dc_id;\n\n const isLottie = thumb.type === 'a';\n const isVideo = thumb.type === 'v';\n\n const input: InputFileLocation.inputStickerSetThumb = {\n _: 'inputStickerSetThumb',\n stickerset: this.getStickerSetInput(stickerSet),\n thumb_version: stickerSet.thumb_version\n };\n\n return {\n dcId,\n location: input,\n size: thumb.size,\n mimeType: isLottie ? 'application/x-tgsticker' : (isVideo && getEnvironment().IS_WEBM_SUPPORTED ? 'video/webm' : 'image/webp')\n };\n }\n\n /* public getStickerSetThumbURL(stickerSet: MTStickerSet) {\n const thumb = stickerSet.thumb;\n const dcId = stickerSet.thumb_dc_id;\n\n const isAnimated = stickerSet.pFlags?.animated;\n\n const input: inputStickerSetThumb = {\n _: 'inputStickerSetThumb',\n stickerset: this.getStickerSetInput(stickerSet),\n volume_id: thumb.location.volume_id,\n local_id: thumb.location.local_id\n };\n\n const url = getFileURL('document', this.getStickerSetThumbDownloadOptions(stickerSet));\n return url;\n\n //return promise;\n } */\n\n public getStickerSetInput(set: MyStickerSetInput): InputStickerSet {\n if(LOCAL_IDS_SET.has(set.id as any)) {\n return {\n _: set.id as any\n };\n } else if(!set.access_hash) {\n return {\n _: 'inputStickerSetShortName',\n short_name: '' + set.id\n };\n } else {\n return {\n _: 'inputStickerSetID',\n id: set.id,\n access_hash: set.access_hash\n };\n }\n }\n\n public async getFeaturedStickers() {\n const res = await this.apiManager.invokeApiHashable({\n method: 'messages.getFeaturedStickers',\n processResult: (res) => {\n assumeType(res);\n\n // forEachReverse(res.sets, (covered, idx, arr) => {\n // if(covered.set.pFlags.videos && !getEnvironment().IS_WEBM_SUPPORTED) {\n // arr.splice(idx, 1);\n // }\n // });\n\n res.sets.forEach((covered) => {\n this.saveStickerSet({\n documents: [],\n packs: [],\n keywords: [],\n ...(covered as StickerSetCovered.stickerSetFullCovered)\n }, covered.set.id);\n });\n\n return res;\n }\n });\n\n return res.sets;\n }\n\n public getPromoPremiumStickers() {\n return this.getStickersByEmoticon({\n emoticon: '⭐️⭐️',\n includeServerStickers: true\n });\n }\n\n public getPremiumStickers() {\n return this.getStickersByEmoticon({\n emoticon: '📂⭐️',\n includeServerStickers: true\n });\n }\n\n public getFavedStickers(overwrite?: boolean) {\n return this.apiManager.invokeApiHashable({\n method: 'messages.getFavedStickers',\n processResult: (favedStickers) => {\n assumeType(favedStickers);\n this.saveStickers(favedStickers.stickers);\n this.favedStickers = favedStickers.stickers as MyDocument[];\n return favedStickers;\n },\n overwrite\n });\n }\n\n public getFavedStickersStickers(overwrite?: boolean) {\n if(overwrite) this.favedStickers = undefined;\n else if(this.favedStickers) return this.favedStickers;\n return this.getFavedStickers(overwrite).then(() => this.favedStickers);\n }\n\n public getFavedStickersLimit() {\n return this.apiManager.getLimit('favedStickers');\n }\n\n public async faveSticker(docId: DocId, unfave?: boolean) {\n if(!this.favedStickers) {\n await this.getFavedStickersStickers();\n }\n\n const limit = await this.getFavedStickersLimit();\n\n const doc = this.appDocsManager.getDoc(docId);\n findAndSplice(this.favedStickers, (_doc) => _doc.id === doc.id);\n\n if(!unfave) {\n this.favedStickers.unshift(doc);\n const spliced = this.favedStickers.splice(limit, this.favedStickers.length - limit);\n }\n\n this.rootScope.dispatchEvent('sticker_updated', {type: 'faved', faved: !unfave, document: doc});\n\n return this.apiManager.invokeApi('messages.faveSticker', {\n id: getDocumentInput(doc),\n unfave\n }).then(() => {\n if(unfave) {\n this.onStickersUpdated('faved', true);\n }\n });\n }\n\n public async toggleStickerSet(set: StickerSet.stickerSet) {\n const stickerSet = this.storage.getFromCache(set.id);\n set = stickerSet.set;\n\n if(set.installed_date) {\n const res = await this.apiManager.invokeApi('messages.uninstallStickerSet', {\n stickerset: this.getStickerSetInput(set)\n });\n\n if(res) {\n delete set.installed_date;\n this.saveStickerSetLocal(stickerSet);\n this.rootScope.dispatchEvent('stickers_deleted', set);\n this.storage.delete(set.id, true);\n return true;\n }\n } else {\n const res = await this.apiManager.invokeApi('messages.installStickerSet', {\n stickerset: this.getStickerSetInput(set),\n archived: false\n });\n\n if(res) {\n set.installed_date = tsNow(true);\n this.saveStickerSetLocal(stickerSet);\n this.rootScope.dispatchEvent('stickers_installed', set);\n return true;\n }\n }\n\n return false;\n }\n\n public toggleStickerSets(sets: StickerSet.stickerSet[]) {\n return Promise.all(sets.map((set) => this.toggleStickerSet(set)));\n }\n\n public async searchStickerSets(query: string, excludeFeatured = true) {\n const flags = excludeFeatured ? 1 : 0;\n const res = await this.apiManager.invokeApiHashable({\n method: 'messages.searchStickerSets',\n params: {\n flags,\n exclude_featured: excludeFeatured || undefined,\n q: query\n },\n processResult: (res) => {\n assumeType(res);\n\n // forEachReverse(res.sets, (covered, idx, arr) => {\n // if(covered.set.pFlags.videos && !getEnvironment().IS_WEBM_SUPPORTED) {\n // arr.splice(idx, 1);\n // }\n // });\n\n res.sets.forEach((covered) => {\n this.saveStickerSet({\n set: covered.set,\n documents: [],\n keywords: [],\n packs: [],\n ...(covered as StickerSetCovered.stickerSetFullCovered)\n }, covered.set.id);\n });\n\n return res;\n }\n });\n\n const foundSaved: StickerSetCovered[] = [];\n const cache = this.storage.getCache();\n for(const id in cache) {\n const {set} = cache[id];\n\n if(set.title.toLowerCase().includes(query.toLowerCase()) && !res.sets.find((c) => c.set.id === set.id)) {\n foundSaved.push({_: 'stickerSetCovered', set, cover: null});\n }\n }\n\n return res.sets.concat(foundSaved);\n }\n\n private processAllStickersResult = (allStickers: MessagesAllStickers) => {\n assumeType(allStickers);\n\n // forEachReverse(allStickers.sets, (stickerSet, idx, arr) => {\n // if(stickerSet.pFlags.videos && !getEnvironment().IS_WEBM_SUPPORTED) {\n // arr.splice(idx, 1);\n // }\n // });\n\n return allStickers;\n };\n\n public getAllStickers() {\n return this.apiManager.invokeApiHashable({\n method: 'messages.getAllStickers',\n processResult: this.processAllStickersResult\n });\n }\n\n public getEmojiStickers() {\n return this.apiManager.invokeApiHashable({\n method: 'messages.getEmojiStickers',\n processResult: this.processAllStickersResult\n });\n }\n\n private onPreloadStickerSetsResult = (allStickers: MessagesAllStickers) => {\n const sets = (allStickers as MessagesAllStickers.messagesAllStickers).sets;\n return Promise.all(sets.map((set) => this.getStickerSet(set, {useCache: true})));\n };\n\n public preloadStickerSets() {\n return this.getAllStickers().then(this.onPreloadStickerSetsResult);\n }\n\n public preloadEmojiSets() {\n return this.getEmojiStickers().then(this.onPreloadStickerSetsResult);\n }\n\n // TODO: detect \"🤷\" by \"🤷‍♂️\"\n public getStickersByEmoticon({\n emoticon,\n includeOurStickers,\n includeServerStickers,\n excludePremiumEffectStickers\n }: {\n emoticon: string | string[],\n includeOurStickers?: boolean,\n includeServerStickers?: boolean,\n excludePremiumEffectStickers?: boolean\n }) {\n const emoticonArray = toArray(emoticon).map((emoji) => fixEmoji(emoji));\n emoticon = emoticonArray.join('');\n const cacheKey = emoticon + (includeOurStickers ? '1' : '0') + (includeServerStickers ? '1' : '0');\n if(this.getStickersByEmoticonsPromises[cacheKey]) return this.getStickersByEmoticonsPromises[cacheKey];\n\n return this.getStickersByEmoticonsPromises[cacheKey] = Promise.all([\n includeServerStickers ? this.apiManager.invokeApiHashable({\n method: 'messages.getStickers',\n params: {\n emoticon\n },\n processResult: (stickers) => stickers\n }) : undefined,\n includeOurStickers ? this.preloadStickerSets() : [],\n includeOurStickers ? this.getRecentStickers() : undefined\n ]).then(([messagesStickers, installedSets, recentStickers]) => {\n const foundStickers = messagesStickers ? (messagesStickers as MessagesStickers.messagesStickers).stickers.map((sticker) => this.appDocsManager.saveDoc(sticker)) : [];\n const cachedStickersAnimated: Document.document[] = [], cachedStickersStatic: Document.document[] = [];\n\n // console.log('getStickersByEmoticon', messagesStickers, installedSets, recentStickers);\n\n const iteratePacks = (packs: StickerPack.stickerPack[]) => {\n for(const emoticon of emoticonArray) {\n for(const pack of packs) {\n const packEmoticon = fixEmoji(pack.emoticon);\n if(packEmoticon.includes(emoticon)) {\n for(const docId of pack.documents) {\n const doc = this.appDocsManager.getDoc(docId);\n (doc.animated ? cachedStickersAnimated : cachedStickersStatic).push(doc);\n }\n }\n }\n }\n };\n\n if(recentStickers) {\n iteratePacks(recentStickers.packs);\n const stickers = recentStickers.stickers;\n [cachedStickersAnimated, cachedStickersStatic].forEach((s) => {\n s.sort((a, b) => stickers.indexOf(a) - stickers.indexOf(b));\n });\n }\n\n for(const set of installedSets) {\n iteratePacks(set.packs);\n }\n\n /* const entities = parseEntities(emoticon);\n if(entities.length === 1) {\n [cachedStickersAnimated, cachedStickersStatic].forEach((s) => {\n forEachReverse(s, (doc, idx) => {\n const docEmoticon = fixEmoji(doc.stickerEmojiRaw);\n if(docEmoticon !== emoticon) {\n s.splice(idx, 1);\n }\n });\n });\n } */\n\n const stickers = [...new Set(cachedStickersAnimated.concat(cachedStickersStatic, foundStickers))]/* .filter((doc) => !doc.animated) */;\n\n forEachReverse(stickers, (sticker, idx, arr) => {\n if((sticker.sticker === 3 && !getEnvironment().IS_WEBM_SUPPORTED) ||\n (excludePremiumEffectStickers && !this.rootScope.premium && getStickerEffectThumb(sticker))) {\n arr.splice(idx, 1);\n }\n });\n\n return stickers;\n });\n }\n\n private async splitSearchQuery(query: string): Promise {\n query = query.trim();\n if(!query) {\n return [];\n }\n\n const entities = parseEntities(query);\n const emojiEntities = entities\n .filter((entity) => entity._ === 'messageEntityEmoji' || entity._ === 'messageEntityCustomEmoji')\n .map((entity) => query.slice(entity.offset, entity.offset + entity.length));\n\n let emojis: string[] = emojiEntities;\n if(!emojis.length) {\n emojis = (await this.appEmojiManager.prepareAndSearchEmojis({q: query, limit: 200, minChars: 1})).map(({emoji}) => emoji);\n }\n\n return emojis;\n }\n\n public async searchStickers(query: string): Promise {\n return this.getStickersByEmoticon({\n emoticon: await this.splitSearchQuery(query),\n includeOurStickers: true\n });\n }\n\n public clearRecentStickers() {\n if(this.recentStickers) {\n this.recentStickers.length = 0;\n this.onStickersUpdated('recent', false);\n }\n\n return this.apiManager.invokeApi('messages.clearRecentStickers');\n }\n\n public reorderStickerSets(order: StickerSet.stickerSet['id'][], emojis?: boolean, masks?: boolean) {\n return this.apiManager.invokeApi('messages.reorderStickerSets', {\n emojis,\n masks,\n order\n }).then(() => {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateStickerSetsOrder',\n order,\n pFlags: {\n emojis: emojis || undefined,\n masks: masks || undefined\n }\n });\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nexport default function cleanUsername(username: string) {\n return username && username.toLowerCase() || '';\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {User} from '../../../../layer';\nimport {REPLIES_PEER_ID} from '../../../mtproto/mtproto_config';\n\nexport default function canSendToUser(user: User.user) {\n return !!(user && !user.pFlags.deleted && user.id.toPeerId() !== REPLIES_PEER_ID);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport filterUnique from '../../helpers/array/filterUnique';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport cleanSearchText, {ProcessSearchTextOptions, processSearchText} from '../../helpers/cleanSearchText';\nimport cleanUsername from '../../helpers/cleanUsername';\nimport tsNow from '../../helpers/tsNow';\nimport isObject from '../../helpers/object/isObject';\nimport safeReplaceObject from '../../helpers/object/safeReplaceObject';\nimport {AccountEmojiStatuses, Chat, ContactsResolvedPeer, EmojiStatus, InputContact, InputGeoPoint, InputMedia, InputPeer, InputUser, User as MTUser, UserProfilePhoto, UserStatus} from '../../layer';\nimport parseEntities from '../richTextProcessor/parseEntities';\nimport wrapUrl from '../richTextProcessor/wrapUrl';\nimport SearchIndex from '../searchIndex';\nimport {AppManager} from './manager';\nimport getPeerId from './utils/peers/getPeerId';\nimport canSendToUser from './utils/users/canSendToUser';\nimport {AppStoragesManager} from './appStoragesManager';\nimport deepEqual from '../../helpers/object/deepEqual';\nimport getPeerActiveUsernames from './utils/peers/getPeerActiveUsernames';\nimport callbackify from '../../helpers/callbackify';\nimport {NULL_PEER_ID, TEST_NO_STORIES} from '../mtproto/mtproto_config';\nimport MTProtoMessagePort from '../mtproto/mtprotoMessagePort';\nimport pause from '../../helpers/schedulers/pause';\n\nexport type User = MTUser.user;\nexport type TopPeerType = 'correspondents' | 'bots_inline';\nexport type MyTopPeer = {id: PeerId, rating: number};\n\nconst SEARCH_OPTIONS: ProcessSearchTextOptions = {\n clearBadChars: true,\n ignoreCase: true,\n latinize: true,\n includeTag: true\n};\n\nexport class AppUsersManager extends AppManager {\n private storage: AppStoragesManager['storages']['users'];\n\n private users: {[userId: UserId]: User};\n private usernames: {[username: string]: PeerId};\n private contactsIndex: SearchIndex;\n private contactsFillPromise: CancellablePromise;\n private contactsList: Set;\n private updatedContactsList: boolean;\n\n private getTopPeersPromises: {[type in TopPeerType]?: Promise};\n\n private defaultEmojiStatuses: MaybePromise;\n private recentEmojiStatuses: MaybePromise;\n\n private isPremiumRequiredToContactUserIds: Map>;\n private isPremiumRequiredToContactUserIdsProcessing: boolean;\n\n protected after() {\n this.clear(true);\n\n setInterval(this.updateUsersStatuses, 60000);\n\n this.rootScope.addEventListener('state_synchronized', this.updateUsersStatuses);\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateUserStatus: (update) => {\n const userId = update.user_id;\n const user = this.users[userId];\n if(!user) {\n return;\n }\n\n user.status = update.status;\n this.saveUserStatus(user.status);\n\n // user.sortStatus = this.getUserStatusForSort(user.status);\n this.rootScope.dispatchEvent('user_update', userId);\n this.setUserToStateIfNeeded(user);\n },\n\n // updateUserPhoto: (update) => {\n // const userId = update.user_id;\n // const user = this.users[userId];\n // if(user) {\n // if((user.photo as UserProfilePhoto.userProfilePhoto)?.photo_id === (update.photo as UserProfilePhoto.userProfilePhoto)?.photo_id) {\n // return;\n // }\n\n // this.forceUserOnline(userId, update.date);\n\n // if(update.photo._ === 'userProfilePhotoEmpty') {\n // delete user.photo;\n // } else {\n // user.photo = safeReplaceObject(user.photo, update.photo);\n // }\n\n // this.setUserToStateIfNeeded(user);\n\n // this.rootScope.dispatchEvent('user_update', userId);\n // this.rootScope.dispatchEvent('avatar_update', userId.toPeerId());\n // } else console.warn('No user by id:', userId);\n // },\n\n updateUserName: (update) => {\n const userId = update.user_id;\n const user = this.users[userId];\n if(!user) {\n return;\n }\n\n this.forceUserOnline(userId);\n this.saveApiUser({\n ...user,\n first_name: update.first_name,\n last_name: update.last_name,\n username: undefined,\n usernames: update.usernames\n }, true);\n },\n\n updateUserEmojiStatus: (update) => {\n const userId = update.user_id;\n const user = this.users[userId];\n if(!user) {\n return;\n }\n\n this.forceUserOnline(userId);\n this.saveApiUser({\n ...user,\n emoji_status: update.emoji_status\n }, true);\n },\n\n updateRecentEmojiStatuses: () => {\n this.recentEmojiStatuses = undefined;\n this.getRecentEmojiStatuses();\n }\n });\n\n /* case 'updateContactLink':\n this.onContactUpdated(update.user_id, update.my_link._ === 'contactLinkContact');\n break; */\n\n return Promise.all([\n this.appStateManager.getState(),\n this.appStoragesManager.loadStorage('users')\n ]).then(([state, {results: users, storage}]) => {\n this.storage = storage;\n\n this.saveApiUsers(users);\n for(let i = 0, length = users.length; i < length; ++i) {\n const user = users[i];\n if(!user) {\n continue;\n }\n\n if(state.contactsListCachedTime && (user.pFlags.contact || user.pFlags.mutual_contact)) {\n this.pushContact(user.id);\n\n if(!this.contactsFillPromise) {\n this.contactsFillPromise = deferredPromise();\n this.contactsFillPromise.resolve(this.contactsList);\n }\n }\n }\n\n // const contactsList = state.contactsList;\n // if(Array.isArray(contactsList)) {\n // contactsList.forEach((userId) => {\n // this.pushContact(userId);\n // });\n\n // if(contactsList.length) {\n // this.contactsFillPromise = deferredPromise();\n // this.contactsFillPromise.resolve(this.contactsList);\n // }\n // }\n\n const recentSearch = state.recentSearch || [];\n for(let i = 0, length = recentSearch.length; i < length; ++i) {\n this.peersStorage.requestPeer(recentSearch[i], 'recentSearch');\n }\n\n this.peersStorage.addEventListener('peerNeeded', (peerId) => {\n if(!this.appPeersManager.isUser(peerId)) {\n return;\n }\n\n const userId = peerId.toUserId();\n if(!this.storage.getFromCache(userId)) {\n this.storage.set({\n [userId]: this.getUser(userId)\n });\n }\n });\n\n this.peersStorage.addEventListener('peerUnneeded', (peerId) => {\n if(!this.appPeersManager.isUser(peerId)) {\n return;\n }\n\n const userId = peerId.toUserId();\n if(this.storage.getFromCache(userId)) {\n this.storage.delete(userId);\n }\n });\n });\n }\n\n public clear = (init = false) => {\n if(!init) {\n for(const userId in this.users) {\n // const userId = +userId;\n if(!userId) continue;\n const peerId = userId.toPeerId();\n if(!this.peersStorage.isPeerNeeded(peerId)) {\n const user = this.users[userId];\n this.modifyUsernamesCache(user, false);\n\n this.storage.delete(userId);\n delete this.users[userId];\n }\n }\n } else {\n this.users = {};\n this.usernames = {};\n this.isPremiumRequiredToContactUserIds = new Map();\n this.isPremiumRequiredToContactUserIdsProcessing = false;\n }\n\n this.getTopPeersPromises = {};\n this.contactsIndex = this.createSearchIndex();\n this.contactsFillPromise = undefined;\n this.contactsList = new Set();\n this.updatedContactsList = false;\n };\n\n public indexMyself() {\n const userId = this.getSelf().id;\n this.contactsIndex.indexObject(userId, this.getUserSearchText(userId));\n }\n\n public get userId() {\n return this.rootScope.myId.toUserId();\n }\n\n private onContactsModified(fromServer?: boolean) {\n // const contactsList = [...this.contactsList];\n // this.appStateManager.pushToState('contactsList', contactsList);\n\n if(fromServer) {\n this.appStateManager.pushToState('contactsListCachedTime', tsNow(true));\n }\n }\n\n public pushRecentSearch(peerId: PeerId) {\n return this.appStateManager.getState().then((state) => {\n const recentSearch = state.recentSearch || [];\n if(recentSearch[0] !== peerId) {\n indexOfAndSplice(recentSearch, peerId);\n recentSearch.unshift(peerId);\n if(recentSearch.length > 20) {\n recentSearch.length = 20;\n }\n\n this.appStateManager.pushToState('recentSearch', recentSearch);\n for(const peerId of recentSearch) {\n this.peersStorage.requestPeer(peerId, 'recentSearch');\n }\n }\n });\n }\n\n public clearRecentSearch() {\n return this.appStateManager.getState().then((state) => {\n const recentSearch = state.recentSearch || [];\n for(const peerId of recentSearch) {\n this.peersStorage.releasePeer(peerId, 'recentSearch');\n }\n\n recentSearch.length = 0;\n this.appStateManager.pushToState('recentSearch', recentSearch);\n });\n }\n\n public fillContacts() {\n if(this.contactsFillPromise && this.updatedContactsList) {\n return {\n cached: this.contactsFillPromise.isFulfilled,\n promise: this.contactsFillPromise\n };\n }\n\n this.updatedContactsList = true;\n\n const promise = deferredPromise>();\n this.apiManager.invokeApi('contacts.getContacts').then((result) => {\n if(result._ === 'contacts.contacts') {\n this.contactsList.clear();\n\n this.saveApiUsers(result.users);\n\n result.contacts.forEach((contact) => {\n this.pushContact(contact.user_id);\n });\n\n this.onContactsModified(true);\n\n this.contactsFillPromise = promise;\n }\n\n promise.resolve(this.contactsList);\n }, () => {\n this.updatedContactsList = false;\n });\n\n return {\n cached: this.contactsFillPromise?.isFulfilled,\n promise: this.contactsFillPromise ||= promise\n };\n }\n\n public resolveUsername(username: string) {\n if(username[0] === '@') {\n username = username.slice(1);\n }\n\n username = username.toLowerCase();\n const peerId = this.usernames[username];\n if(peerId) {\n return this.appPeersManager.getPeer(peerId);\n }\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'contacts.resolveUsername',\n params: {username},\n processResult: (resolvedPeer) => this.processResolvedPeer(resolvedPeer)\n });\n }\n\n public resolveUserByUsername(username: string) {\n return callbackify(this.resolveUsername(username), (peer) => {\n return peer?._ === 'user' ? peer : undefined;\n });\n }\n\n private processResolvedPeer(resolvedPeer: ContactsResolvedPeer.contactsResolvedPeer) {\n this.saveApiUsers(resolvedPeer.users);\n this.appChatsManager.saveApiChats(resolvedPeer.chats);\n\n return this.appPeersManager.getPeer(getPeerId(resolvedPeer.peer));\n }\n\n public resolvePhone(phone: string) {\n return this.apiManager.invokeApi('contacts.resolvePhone', {phone}).then((resolvedPeer) => {\n return this.processResolvedPeer(resolvedPeer) as User;\n });\n }\n\n private pushContact(id: UserId) {\n this.contactsList.add(id);\n this.contactsIndex.indexObject(id, this.getUserSearchText(id));\n this.peersStorage.requestPeer(id.toPeerId(), 'contact');\n }\n\n private popContact(id: UserId) {\n this.contactsList.delete(id);\n this.contactsIndex.indexObject(id, ''); // delete search index\n this.peersStorage.releasePeer(id.toPeerId(), 'contact');\n }\n\n public getUserSearchText(id: UserId) {\n const user = this.users[id];\n if(!user) {\n return '';\n }\n\n const arr: string[] = [\n user.first_name,\n user.last_name,\n user.phone,\n ...getPeerActiveUsernames(user),\n // user.pFlags.self ? I18n.format('SavedMessages', true) : '',\n user.pFlags.self ? 'Saved Messages' : ''\n ];\n\n return arr.filter(Boolean).join(' ');\n }\n\n public getContacts(query?: string, includeSaved = false, sortBy: 'name' | 'online' | 'none' | 'rating' = 'name') {\n const contactListPromise = this.fillContacts().promise;\n return Promise.all([\n contactListPromise,\n sortBy === 'rating' && this.getTopPeers('correspondents')\n ]).then(([_contactsList, topPeers]) => {\n let contactsList = [..._contactsList];\n if(query) {\n const results = this.contactsIndex.search(query);\n const filteredContactsList = [...contactsList].filter((id) => results.has(id));\n\n contactsList = filteredContactsList;\n }\n\n if(sortBy === 'name') {\n contactsList.sort((userId1, userId2) => {\n const sortName1 = (this.users[userId1] || {}).sortName || '';\n const sortName2 = (this.users[userId2] || {}).sortName || '';\n return sortName1.localeCompare(sortName2);\n });\n } else if(sortBy === 'online') {\n contactsList.sort((userId1, userId2) => {\n const status1 = this.getUserStatusForSort(this.getUser(userId1).status);\n const status2 = this.getUserStatusForSort(this.getUser(userId2).status);\n return status2 - status1;\n });\n } else if(sortBy === 'rating') {\n if(!query.trim().replace(/@/g, '')) contactsList = topPeers.map((peer) => peer.id.toUserId());\n else {\n const ratingMap = new Map(topPeers.map((peer) => [peer.id.toUserId(), peer.rating]));\n contactsList.sort((userId1, userId2) => {\n const rating1 = ratingMap.get(userId1) || 0;\n const rating2 = ratingMap.get(userId2) || 0;\n return rating2 - rating1;\n });\n }\n }\n\n const myUserId = this.userId;\n indexOfAndSplice(contactsList, myUserId);\n if(includeSaved) {\n if(this.testSelfSearch(query)) {\n contactsList.unshift(myUserId);\n }\n }\n\n return contactsList;\n });\n }\n\n public getContactsPeerIds(\n query?: Parameters[0],\n includeSaved?: Parameters[1],\n sortBy?: Parameters[2],\n limit?: number\n ) {\n return this.getContacts(query, includeSaved, sortBy).then((userIds) => {\n const peerIds = userIds.map((userId) => userId.toPeerId(false));\n if(limit) {\n return peerIds.slice(0, limit);\n }\n\n return peerIds;\n });\n }\n\n public toggleBlock(peerId: PeerId, block: boolean, blockMyStoriesFrom?: boolean) {\n return this.apiManager.invokeApiSingle(block ? 'contacts.block' : 'contacts.unblock', {\n id: this.appPeersManager.getInputPeerById(peerId),\n my_stories_from: blockMyStoriesFrom === undefined ? undefined : true\n }).then(() => {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updatePeerBlocked',\n peer_id: this.appPeersManager.getOutputPeer(peerId),\n pFlags: {\n blocked: block || undefined,\n blocked_my_stories_from: blockMyStoriesFrom || undefined\n }\n });\n\n this.appProfileManager.refreshPeerSettingsIfNeeded(peerId);\n });\n }\n\n public testSelfSearch(query: string) {\n const user = this.getSelf();\n const index = this.createSearchIndex();\n index.indexObject(user.id, this.getUserSearchText(user.id));\n return index.search(query).has(user.id);\n }\n\n public createSearchIndex() {\n return new SearchIndex(SEARCH_OPTIONS);\n }\n\n public saveApiUsers(apiUsers: MTUser[], override?: boolean) {\n if(!apiUsers || (apiUsers as any).saved) return;\n (apiUsers as any).saved = true;\n apiUsers.forEach((user) => this.saveApiUser(user, override));\n }\n\n public modifyUsernamesCache(peer: Parameters[0], save: boolean) {\n const usernames = getPeerActiveUsernames(peer);\n if(!usernames.length) {\n return;\n }\n\n const cleanedUsernames = usernames.map((username) => cleanUsername(username));\n if(save) {\n cleanedUsernames.forEach((searchUsername) => {\n this.usernames[searchUsername] = peer.id.toPeerId(peer._ !== 'user');\n });\n } else {\n cleanedUsernames.forEach((searchUsername) => {\n delete this.usernames[searchUsername];\n });\n }\n }\n\n public setUsernameToCache(peer: Parameters[0], oldPeer?: typeof peer) {\n if(\n !oldPeer ||\n (oldPeer as MTUser.user).username !== (peer as MTUser.user).username ||\n !deepEqual((oldPeer as MTUser.user).usernames, (peer as MTUser.user).usernames)\n ) {\n this.modifyUsernamesCache(oldPeer, false);\n this.modifyUsernamesCache(peer, true);\n\n return true;\n }\n\n return false;\n }\n\n private saveUserStatus(userStatus: UserStatus) {\n if(!userStatus) {\n return;\n }\n\n const saved = (userStatus as any).saved;\n if((userStatus as UserStatus.userStatusOnline).expires && !saved) {\n (userStatus as UserStatus.userStatusOnline).expires -= this.timeManager.getServerTimeOffset();\n }\n\n if((userStatus as UserStatus.userStatusOffline).was_online && !saved) {\n (userStatus as UserStatus.userStatusOffline).was_online -= this.timeManager.getServerTimeOffset();\n }\n\n (userStatus as any).saved = true;\n }\n\n public saveApiUser(user: MTUser, override?: boolean) {\n if(!user || user._ === 'userEmpty') return;\n\n const userId = user.id;\n const oldUser = this.users[userId];\n\n // ! commented block can affect performance !\n // if(oldUser && !override) {\n // console.log('saveApiUser same');\n // return;\n // }\n\n user.pFlags ??= {};\n\n if(user.pFlags.min && oldUser !== undefined) {\n return;\n }\n\n // * exclude from state\n // defineNotNumerableProperties(user, ['initials', 'num', 'rFirstName', 'rFullName', 'rPhone', 'sortName', 'sortStatus']);\n\n const changedUsername = this.setUsernameToCache(user, oldUser);\n\n if(!oldUser ||\n oldUser.sortName === undefined ||\n oldUser.first_name !== user.first_name ||\n oldUser.last_name !== user.last_name) {\n const fullName = user.first_name + (user.last_name ? ' ' + user.last_name : '');\n\n user.sortName = user.pFlags.deleted ? '' : cleanSearchText(fullName, false);\n } else {\n user.sortName = oldUser.sortName;\n }\n\n this.saveUserStatus(user.status);\n\n if((user as User).photo?._ === 'userProfilePhotoEmpty') {\n delete (user as User).photo;\n }\n\n // user.sortStatus = user.pFlags.bot ? -1 : this.getUserStatusForSort(user.status);\n\n // if(!user.username && user.usernames) {\n // user.username = user.usernames.find((username) => username.pFlags.active).username;\n // }\n\n if(user.emoji_status?._ === 'emojiStatusEmpty') {\n delete user.emoji_status;\n }\n\n const peerId = userId.toPeerId(false);\n if(oldUser === undefined) {\n this.users[userId] = user;\n this.mirrorUser(user);\n } else {\n const changedTitle = user.first_name !== oldUser.first_name ||\n user.last_name !== oldUser.last_name ||\n changedUsername;\n\n const oldPhotoId = (oldUser.photo as UserProfilePhoto.userProfilePhoto)?.photo_id;\n const newPhotoId = (user.photo as UserProfilePhoto.userProfilePhoto)?.photo_id;\n const changedPhoto = oldPhotoId !== newPhotoId;\n const changedEmojiStatus = (oldUser.emoji_status as EmojiStatus.emojiStatus)?.document_id !==\n (user.emoji_status as EmojiStatus.emojiStatus)?.document_id;\n\n const changedPremium = oldUser.pFlags.premium !== user.pFlags.premium;\n const changedAnyBadge = changedPremium ||\n changedEmojiStatus ||\n oldUser.pFlags.verified !== user.pFlags.verified ||\n oldUser.pFlags.scam !== user.pFlags.scam ||\n oldUser.pFlags.fake !== user.pFlags.fake;\n\n /* if(user.pFlags.bot && user.bot_info_version !== oldUser.bot_info_version) {\n\n } */\n\n const wasContact = !!oldUser.pFlags.contact;\n const newContact = !!user.pFlags.contact;\n\n const storiesCallback = this.appStoriesManager.saveApiPeerStories(user, oldUser);\n\n safeReplaceObject(oldUser, user);\n this.mirrorUser(oldUser);\n\n this.rootScope.dispatchEvent('user_update', userId);\n\n if(wasContact !== newContact) {\n this.onContactUpdated(userId, newContact, wasContact);\n }\n\n storiesCallback?.();\n\n if(changedPhoto) {\n this.rootScope.dispatchEvent('avatar_update', {peerId});\n }\n\n if(changedTitle || changedAnyBadge) {\n this.rootScope.dispatchEvent('peer_title_edit', {peerId});\n }\n\n // whitelisted domains\n if(changedPremium) {\n this.rootScope.dispatchEvent('peer_bio_edit', peerId);\n }\n\n if(changedEmojiStatus && user.pFlags.self) {\n this.rootScope.dispatchEvent('emoji_status_change');\n }\n }\n\n this.checkPremium(user, oldUser);\n this.setUserToStateIfNeeded(user);\n }\n\n private mirrorUser(user: User) {\n MTProtoMessagePort.getInstance().invokeVoid('mirror', {\n name: 'peers',\n key: '' + user.id,\n value: user\n });\n }\n\n private checkPremium(user: User, oldUser: User) {\n if(user.pFlags.self) {\n const isPremium = !!user.pFlags.premium;\n if(this.rootScope.premium !== isPremium) {\n this.rootScope.dispatchEvent('premium_toggle_private', {isNew: !oldUser, isPremium});\n }\n }\n }\n\n private setUserToStateIfNeeded(user: User) {\n if(this.peersStorage.isPeerNeeded(user.id.toPeerId())) {\n this.storage.set({\n [user.id]: user\n });\n }\n }\n\n public isUserOnlineVisible(id: UserId) {\n return this.getUserStatusForSort(id) > 3;\n }\n\n public getUserStatusForSort(status: User['status'] | UserId) {\n if(typeof(status) !== 'object') {\n const user = this.getUser(status);\n status = user?.status;\n }\n\n if(status) {\n const expires = status._ === 'userStatusOnline' ? status.expires : (status._ === 'userStatusOffline' ? status.was_online : 0);\n if(expires) {\n return expires;\n }\n\n /* const timeNow = tsNow(true);\n switch(status._) {\n case 'userStatusRecently':\n return timeNow - 86400 * 3;\n case 'userStatusLastWeek':\n return timeNow - 86400 * 7;\n case 'userStatusLastMonth':\n return timeNow - 86400 * 30;\n } */\n switch(status._) {\n case 'userStatusRecently':\n return 3;\n case 'userStatusLastWeek':\n return 2;\n case 'userStatusLastMonth':\n return 1;\n }\n }\n\n return 0;\n }\n\n public getUser(id: User | UserId) {\n if(isObject(id)) {\n return id;\n }\n\n return this.users[id];\n }\n\n public getUsers() {\n return this.users;\n }\n\n public getUserStatus(id: UserId) {\n return this.isRegularUser(id) && !this.users[id].pFlags.self && this.users[id].status;\n }\n\n public getApiUsers(userIds: UserId[]) {\n return this.apiManager.invokeApi('users.getUsers', {\n id: userIds.map((userId) => this.getUserInput(userId))\n }).then((users) => {\n this.saveApiUsers(users);\n return users;\n });\n }\n\n public async getUserPhone(id: UserId) {\n const user = this.getUser(id);\n if(!user?.phone) {\n return;\n }\n\n const appConfig = await this.apiManager.getAppConfig();\n return {\n phone: user.phone,\n isAnonymous: appConfig.fragment_prefixes.some((prefix) => user.phone.startsWith(prefix))\n };\n }\n\n public getSelf() {\n return this.getUser(this.userId);\n }\n\n public isBot(id: UserId) {\n return this.users[id] && !!this.users[id].pFlags.bot;\n }\n\n public isAttachMenuBot(id: UserId) {\n return this.isBot(id) && !!this.users[id].pFlags.bot_attach_menu;\n }\n\n public isContact(id: UserId) {\n return this.contactsList.has(id) || !!(this.users[id] && this.users[id].pFlags.contact);\n }\n\n public isRegularUser(id: UserId) {\n const user = this.users[id];\n return user && !this.isBot(id) && !user.pFlags.deleted && !user.pFlags.support;\n }\n\n public isNonContactUser(id: UserId) {\n return this.isRegularUser(id) && !this.isContact(id) && id !== this.userId;\n }\n\n public isPremium(id: UserId) {\n const user = this.users[id];\n return !!user?.pFlags?.premium;\n }\n\n public isDeleted(id: UserId) {\n const user = this.users[id];\n return !!user?.pFlags?.deleted;\n }\n\n public hasUser(id: UserId, allowMin?: boolean) {\n const user = this.users[id];\n return isObject(user) && (allowMin || !user.pFlags.min);\n }\n\n public canEdit(id: UserId) {\n return this.userId === id || this.isContact(id) || !!this.users[id]?.pFlags?.bot_can_edit;\n }\n\n public getUserString(id: UserId) {\n const user = this.getUser(id);\n return 'u' + id + (user.access_hash ? '_' + user.access_hash : '');\n }\n\n public getUserId(userId: Parameters[0]) {\n const peerId = getPeerId(userId);\n if(peerId) {\n return peerId.toUserId();\n }\n\n return (isObject(userId) && userId._ === 'inputUserSelf' && this.getSelf().id) || NULL_PEER_ID;\n }\n\n public getUserInput(id: UserId): InputUser {\n const user = this.getUser(id);\n if(!id || (user.pFlags && user.pFlags.self)) {\n return {_: 'inputUserSelf'};\n }\n\n return {\n _: 'inputUser',\n user_id: id,\n access_hash: user.access_hash\n };\n }\n\n public getUserInputPeer(id: UserId): InputPeer.inputPeerSelf | InputPeer.inputPeerUser {\n const user = this.getUser(id);\n // ! do not use it, there are places that don't support it. need explicit peer id\n // if(user.pFlags?.self) {\n // return {_: 'inputPeerSelf'};\n // }\n\n return {\n _: 'inputPeerUser',\n user_id: id,\n access_hash: user.access_hash\n };\n }\n\n public getContactMediaInput(id: UserId): InputMedia.inputMediaContact {\n const user = this.getUser(id);\n\n return {\n _: 'inputMediaContact',\n first_name: user.first_name,\n last_name: user.last_name,\n phone_number: user.phone,\n vcard: '',\n user_id: id\n };\n }\n\n private updateUsersStatuses = () => {\n const timestampNow = tsNow(true);\n for(const i in this.users) {\n const user = this.users[i];\n this.updateUserStatus(user, timestampNow);\n }\n };\n\n private updateUserStatus(user: MTUser.user, timestampNow = tsNow(true)) {\n if(user.status &&\n user.status._ === 'userStatusOnline' &&\n user.status.expires < timestampNow) {\n user.status = {_: 'userStatusOffline', was_online: user.status.expires};\n this.rootScope.dispatchEvent('user_update', user.id);\n\n this.setUserToStateIfNeeded(user);\n }\n }\n\n public forceUserOnline(id: UserId, eventTimestamp?: number) {\n if(this.isBot(id)) {\n return;\n }\n\n const timestamp = tsNow(true);\n const onlineTimeFor = 60;\n if(eventTimestamp) {\n if((timestamp - eventTimestamp) >= onlineTimeFor) {\n return;\n }\n } else if(this.apiUpdatesManager.updatesState.syncLoading) {\n return;\n }\n\n const user = this.getUser(id);\n if(user?.status &&\n user.status._ !== 'userStatusOnline' &&\n user.status._ !== 'userStatusEmpty' &&\n !user.pFlags.support &&\n !user.pFlags.deleted) {\n user.status = {\n _: 'userStatusOnline',\n expires: timestamp + onlineTimeFor\n };\n\n // user.sortStatus = this.getUserStatusForSort(user.status);\n this.rootScope.dispatchEvent('user_update', id);\n\n this.setUserToStateIfNeeded(user);\n }\n }\n\n public importContact(first_name: string, last_name: string, phone: string) {\n return this.importContacts([{\n first_name,\n last_name,\n phones: [phone]\n }]).then((userIds) => {\n if(!userIds.length) {\n const error = new Error();\n (error as any).type = 'NO_USER';\n throw error;\n }\n\n return userIds[0];\n });\n }\n\n public importContacts(contacts: {phones: string[], first_name: string, last_name: string}[]) {\n const inputContacts: InputContact[] = [];\n\n for(let i = 0; i < contacts.length; ++i) {\n for(let j = 0; j < contacts[i].phones.length; ++j) {\n inputContacts.push({\n _: 'inputPhoneContact',\n client_id: (i << 16 | j).toString(10),\n phone: contacts[i].phones[j],\n first_name: contacts[i].first_name,\n last_name: contacts[i].last_name\n });\n }\n }\n\n return this.apiManager.invokeApi('contacts.importContacts', {\n contacts: inputContacts\n }).then((importedContactsResult) => {\n this.saveApiUsers(importedContactsResult.users);\n\n const userIds = importedContactsResult.imported.map((importedContact) => {\n this.onContactUpdated(importedContact.user_id, true);\n return importedContact.user_id;\n });\n\n return userIds;\n });\n }\n\n public getTopPeers(type: TopPeerType) {\n if(this.getTopPeersPromises[type]) return this.getTopPeersPromises[type];\n\n return this.getTopPeersPromises[type] = this.appStateManager.getState().then((state) => {\n const cached = state.topPeersCache[type];\n if(cached && (cached.cachedTime + 86400e3) > Date.now() && cached.peers) {\n return cached.peers;\n }\n\n return this.apiManager.invokeApi('contacts.getTopPeers', {\n [type]: true,\n offset: 0,\n limit: 30,\n hash: '0'\n }).then((result) => {\n let topPeers: MyTopPeer[] = [];\n if(result._ === 'contacts.topPeers') {\n // console.log(result);\n this.saveApiUsers(result.users);\n this.appChatsManager.saveApiChats(result.chats);\n\n if(result.categories.length) {\n topPeers = result.categories[0].peers.map((topPeer) => {\n const peerId = getPeerId(topPeer.peer);\n this.peersStorage.requestPeer(peerId, 'topPeer');\n return {id: peerId, rating: topPeer.rating};\n });\n }\n }\n\n state.topPeersCache[type] = {\n peers: topPeers,\n cachedTime: Date.now()\n };\n this.appStateManager.pushToState('topPeersCache', state.topPeersCache);\n\n return topPeers;\n });\n });\n }\n\n public getBlocked(offset = 0, limit = 0) {\n return this.apiManager.invokeApiSingle('contacts.getBlocked', {offset, limit}).then((contactsBlocked) => {\n this.saveApiUsers(contactsBlocked.users);\n this.appChatsManager.saveApiChats(contactsBlocked.chats);\n const count = contactsBlocked._ === 'contacts.blocked' ? contactsBlocked.users.length + contactsBlocked.chats.length : contactsBlocked.count;\n\n const peerIds: PeerId[] = contactsBlocked.users.map((u) => u.id.toPeerId()).concat(contactsBlocked.chats.map((c) => c.id.toPeerId(true)));\n\n return {count, peerIds};\n });\n }\n\n public getLocated(\n lat: number,\n long: number,\n accuracy_radius: number,\n background: boolean = false,\n self_expires: number = 0\n ) {\n const geo_point: InputGeoPoint = {\n _: 'inputGeoPoint',\n lat,\n long,\n accuracy_radius\n };\n\n return this.apiManager.invokeApi('contacts.getLocated', {\n geo_point,\n background\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n return updates;\n });\n }\n\n /* public searchContacts(query: string, limit = 20) {\n return Promise.all([\n this.getContacts(query),\n apiManager.invokeApi('contacts.search', {\n q: query,\n limit\n })\n ]).then((results) => {\n const [myContacts, peers] = results;\n\n this.saveApiUsers(peers.users);\n appChatsManager.saveApiChats(peers.chats);\n\n // * contacts.search returns duplicates in my_results\n const myResults = new Set(myContacts.concat(peers.my_results.map((p) => appPeersManager.getPeerID(p))));\n\n const out = {\n my_results: [...myResults].slice(0, limit),\n results: peers.results.map((p) => appPeersManager.getPeerID(p))\n };\n\n return out;\n });\n } */\n public searchContacts(query: string, limit = 20) {\n // handle 't.me/username' as 'username'\n const entities = parseEntities(query);\n if(entities.length && entities[0].length === query.trim().length && entities[0]._ === 'messageEntityUrl') {\n try {\n const url = new URL(wrapUrl(query).url);\n const path = url.pathname.slice(1);\n if(path) {\n query = path;\n }\n } catch(err) {}\n }\n\n return this.apiManager.invokeApiCacheable('contacts.search', {\n q: query,\n limit\n }, {cacheSeconds: 60}).then((peers) => {\n this.saveApiUsers(peers.users);\n this.appChatsManager.saveApiChats(peers.chats);\n\n const out = {\n my_results: filterUnique(peers.my_results.map((p) => getPeerId(p))), // ! contacts.search returns duplicates in my_results\n results: peers.results.map((p) => getPeerId(p))\n };\n\n return out;\n });\n }\n\n private onContactUpdated(userId: UserId, isContact: boolean, curIsContact = this.isContact(userId)) {\n if(isContact !== curIsContact) {\n if(isContact) {\n this.pushContact(userId);\n } else {\n this.popContact(userId);\n }\n\n this.onContactsModified();\n\n this.rootScope.dispatchEvent('contacts_update', userId);\n }\n }\n\n public updateUsername(username: string) {\n return this.apiManager.invokeApi('account.updateUsername', {\n username\n }).then((user) => {\n this.saveApiUser(user);\n });\n }\n\n public setUserStatus(userId: UserId, offline: boolean) {\n if(this.isBot(userId)) {\n return;\n }\n\n const user = this.users[userId];\n if(user) {\n const status: UserStatus = offline ? {\n _: 'userStatusOffline',\n was_online: tsNow(true)\n } : {\n _: 'userStatusOnline',\n expires: tsNow(true) + 50\n };\n\n user.status = status;\n // user.sortStatus = this.getUserStatusForSort(user.status);\n this.rootScope.dispatchEvent('user_update', userId);\n\n this.setUserToStateIfNeeded(user);\n }\n }\n\n public updateMyOnlineStatus(offline: boolean) {\n this.setUserStatus(this.getSelf().id, offline);\n return this.apiManager.invokeApiSingle('account.updateStatus', {offline});\n }\n\n public addContact(\n userId: UserId,\n first_name: string,\n last_name: string,\n phone: string,\n addPhonePrivacyException?: boolean\n ) {\n /* if(!userId) {\n return this.importContacts([{\n first_name,\n last_name,\n phones: [phone]\n }]);\n } */\n\n return this.apiManager.invokeApi('contacts.addContact', {\n id: this.getUserInput(userId),\n first_name,\n last_name,\n phone,\n add_phone_privacy_exception: addPhonePrivacyException\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates, {override: true});\n\n this.appProfileManager.refreshPeerSettingsIfNeeded(userId.toPeerId(false));\n\n this.onContactUpdated(userId, true);\n });\n }\n\n public deleteContacts(userIds: UserId[]) {\n return this.apiManager.invokeApi('contacts.deleteContacts', {\n id: userIds.map((userId) => this.getUserInput(userId))\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates, {override: true});\n\n userIds.forEach((userId) => {\n this.onContactUpdated(userId, false);\n });\n });\n }\n\n public checkUsername(username: string) {\n return this.apiManager.invokeApi('account.checkUsername', {username});\n }\n\n public canSendToUser(userId: UserId) {\n return canSendToUser(this.getUser(userId))/* && !this.appProfileManager.isCachedUserBlocked(userId) */;\n }\n\n public getCommonChats(userId: UserId, limit = 100, maxId?: ChatId) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.getCommonChats',\n params: {\n user_id: this.getUserInput(userId),\n limit,\n max_id: maxId ?? 0\n },\n processResult: (messagesChats) => {\n this.appChatsManager.saveApiChats(messagesChats.chats);\n return messagesChats;\n }\n });\n }\n\n public updateEmojiStatus(emojiStatus: EmojiStatus) {\n return this.apiManager.invokeApi('account.updateEmojiStatus', {\n emoji_status: emojiStatus\n }).then(() => {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateUserEmojiStatus',\n user_id: this.getSelf().id,\n emoji_status: emojiStatus\n });\n });\n }\n\n public getDefaultEmojiStatuses() {\n return this.defaultEmojiStatuses ??= this.apiManager.invokeApiSingleProcess({\n method: 'account.getDefaultEmojiStatuses',\n processResult: (emojiStatuses) => this.defaultEmojiStatuses = emojiStatuses\n });\n }\n\n public getRecentEmojiStatuses() {\n return this.recentEmojiStatuses ??= this.apiManager.invokeApiSingleProcess({\n method: 'account.getRecentEmojiStatuses',\n processResult: (emojiStatuses) => this.recentEmojiStatuses = emojiStatuses\n });\n }\n\n public isPremiumRequiredToContact(userId: UserId, onlyCached?: boolean) {\n const user = this.getUser(userId);\n if(!user || this.rootScope.premium || !user.pFlags.contact_require_premium) {\n return false;\n }\n\n const userFull = this.appProfileManager.getCachedFullUser(userId);\n if(userFull?.pFlags?.contact_require_premium) {\n return true;\n }\n\n const historyStorage = this.appMessagesManager.getHistoryStorage(userId.toPeerId(false));\n if(historyStorage.count) {\n return false;\n }\n\n if(onlyCached) {\n return;\n }\n\n let promise = this.isPremiumRequiredToContactUserIds.get(userId);\n if(!promise) {\n this.isPremiumRequiredToContactUserIds.set(userId, promise = deferredPromise());\n }\n\n this.getIsPremiumRequiredToContact();\n return promise;\n }\n\n private getIsPremiumRequiredToContact() {\n if(this.isPremiumRequiredToContactUserIdsProcessing) {\n return;\n }\n\n this.isPremiumRequiredToContactUserIdsProcessing = true;\n pause(0).then(() => {\n const userIds = [...this.isPremiumRequiredToContactUserIds.keys()];\n this.apiManager.invokeApi('users.getIsPremiumRequiredToContact', {\n id: userIds.map((userId) => this.getUserInput(userId))\n }).then((result) => {\n result.forEach((isPremiumRequired, index) => {\n const userId = userIds[index];\n const promise = this.isPremiumRequiredToContactUserIds.get(userId);\n promise.resolve(isPremiumRequired);\n this.isPremiumRequiredToContactUserIds.delete(userId);\n });\n }).finally(() => {\n this.isPremiumRequiredToContactUserIdsProcessing = false;\n if(this.isPremiumRequiredToContactUserIds.size) {\n this.getIsPremiumRequiredToContact();\n }\n });\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {ReferenceContext} from '../mtproto/referenceDatabase';\nimport {WebPage} from '../../layer';\nimport safeReplaceObject from '../../helpers/object/safeReplaceObject';\nimport {AppManager} from './manager';\n\nconst photoTypeSet = new Set(['photo', 'video', 'gif', 'document']);\n\ntype WebPageMessageKey = `${PeerId}_${number}`;\n\nexport class AppWebPagesManager extends AppManager {\n private webpages: {\n [webPageId: string]: WebPage\n } = {};\n private pendingWebPages: {\n [webPageId: string]: Set\n } = {};\n\n protected after() {\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateWebPage: (update) => {\n this.saveWebPage(update.webpage);\n },\n\n updateChannelWebPage: (update) => {\n this.saveWebPage(update.webpage);\n }\n });\n }\n\n public saveWebPage(apiWebPage: WebPage, messageKey?: WebPageMessageKey, mediaContext?: ReferenceContext) {\n if(apiWebPage._ === 'webPageNotModified' || apiWebPage._ === 'webPageEmpty') return;\n const {id} = apiWebPage;\n\n mediaContext ??= {\n type: 'webPage',\n url: apiWebPage.url\n };\n\n const oldWebPage = this.webpages[id];\n const isUpdated = oldWebPage &&\n oldWebPage._ === apiWebPage._ &&\n (oldWebPage as WebPage.webPage).hash !== (apiWebPage as WebPage.webPage).hash;\n let isMediaUpdated = false;\n\n if(apiWebPage._ === 'webPage') {\n if(apiWebPage.photo?._ === 'photo') {\n apiWebPage.photo = this.appPhotosManager.savePhoto(apiWebPage.photo, mediaContext);\n } else {\n delete apiWebPage.photo;\n }\n\n if(apiWebPage.document?._ === 'document') {\n apiWebPage.document = this.appDocsManager.saveDoc(apiWebPage.document, mediaContext);\n } else {\n if(apiWebPage.type === 'document') {\n delete apiWebPage.type;\n }\n\n delete apiWebPage.document;\n }\n\n if(oldWebPage?._ === apiWebPage._) {\n isMediaUpdated = oldWebPage.photo?.id !== apiWebPage.photo?.id ||\n oldWebPage.document?.id !== apiWebPage.document?.id;\n }\n\n const siteName = apiWebPage.site_name;\n const shortTitle = apiWebPage.title || apiWebPage.author || '';\n if(siteName && shortTitle === siteName) {\n delete apiWebPage.site_name;\n }\n\n for(const attribute of apiWebPage.attributes || []) {\n switch(attribute._) {\n case 'webPageAttributeStory': {\n const cache = this.appStoriesManager.getPeerStoriesCache(this.appPeersManager.getPeerId(attribute.peer));\n attribute.story = this.appStoriesManager.saveStoryItem(attribute.story, cache);\n break;\n }\n }\n }\n\n if(!photoTypeSet.has(apiWebPage.type) &&\n !apiWebPage.description &&\n apiWebPage.photo) {\n apiWebPage.type = 'photo';\n }\n }\n\n let pendingSet = this.pendingWebPages[id];\n if(messageKey) {\n if(!pendingSet) pendingSet = this.pendingWebPages[id] = new Set();\n pendingSet.add(messageKey);\n }\n\n if(oldWebPage === undefined) {\n this.webpages[id] = apiWebPage;\n } else {\n safeReplaceObject(oldWebPage, apiWebPage);\n }\n\n if(((!messageKey && isUpdated) || isMediaUpdated) && pendingSet !== undefined) {\n const msgs: {peerId: PeerId, mid: number, isScheduled: boolean}[] = [];\n pendingSet.forEach((value) => {\n const [peerId, mid, isScheduled] = value.split('_');\n msgs.push({\n peerId: peerId.toPeerId(),\n mid: +mid,\n isScheduled: !!isScheduled\n });\n });\n\n this.rootScope.dispatchEvent('webpage_updated', {\n id,\n msgs\n });\n }\n\n return apiWebPage;\n }\n\n public getMessageKeyForPendingWebPage(peerId: PeerId, mid: number, isScheduled?: boolean): WebPageMessageKey {\n return peerId + '_' + mid + (isScheduled ? '_s' : '') as any;\n }\n\n public deleteWebPageFromPending(webPage: WebPage, messageKey: WebPageMessageKey) {\n const id = (webPage as WebPage.webPage).id;\n if(!id) return;\n\n const set = this.pendingWebPages[id];\n if(set && set.has(messageKey)) {\n set.delete(messageKey);\n\n if(!set.size) {\n delete this.pendingWebPages[id];\n }\n }\n }\n\n public getCachedWebPage(id: WebPage.webPage['id']) {\n return this.webpages[id];\n }\n\n public getWebPage(url: string) {\n return this.apiManager.invokeApiHashable({\n method: 'messages.getWebPage',\n processResult: (messagesWebPage) => {\n this.appPeersManager.saveApiPeers(messagesWebPage);\n return this.saveWebPage(messagesWebPage.webpage);\n },\n params: {\n url\n }\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\n// https://www.iana.org/assignments/media-types/media-types.xhtml\nexport default function blobSafeMimeType(mimeType: string) {\n if([\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/svg+xml',\n 'image/webp',\n 'image/bmp',\n 'image/avif',\n 'image/jxl',\n 'video/mp4',\n 'video/webm',\n 'video/quicktime',\n 'audio/ogg',\n 'audio/mpeg',\n 'audio/mp4',\n 'audio/wav', // though it is not in list\n 'application/json',\n 'application/pdf'\n ].indexOf(mimeType) === -1) {\n return 'application/octet-stream';\n }\n\n return mimeType;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport toArray from '../array/toArray';\nimport blobSafeMimeType from './blobSafeMimeType';\n\nexport default function blobConstruct(blobParts: Array | T, mimeType: string = ''): Blob {\n blobParts = toArray(blobParts);\n const safeMimeType = blobSafeMimeType(mimeType);\n const blob = new Blob(blobParts, {type: safeMimeType});\n return blob;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport blobConstruct from '../../helpers/blob/blobConstruct';\nimport StreamWriter from './streamWriter';\n\nexport default class MemoryWriter implements StreamWriter {\n private bytes: Uint8Array;\n\n constructor(\n private mimeType: string,\n private size: number,\n private saveFileCallback?: (blob: Blob) => Promise\n ) {\n this.bytes = new Uint8Array(size);\n }\n\n public async write(part: Uint8Array, offset: number) {\n // sometimes file size can be bigger than the prov\n const endOffset = offset + part.byteLength;\n if(endOffset > this.bytes.byteLength) {\n const newBytes = new Uint8Array(endOffset);\n newBytes.set(this.bytes, 0);\n this.bytes = newBytes;\n }\n\n this.bytes.set(part, offset);\n };\n\n public truncate() {\n this.bytes = new Uint8Array();\n }\n\n public trim(size: number) {\n this.bytes = this.bytes.slice(0, size);\n }\n\n public finalize(saveToStorage = true) {\n const blob = blobConstruct(this.bytes, this.mimeType);\n\n if(saveToStorage && this.saveFileCallback) {\n this.saveFileCallback(blob);\n }\n\n return blob;\n }\n\n public getParts() {\n return this.bytes;\n }\n\n public replaceParts(parts: Uint8Array) {\n this.bytes = parts;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Modes from '../../config/modes';\nimport blobConstruct from '../../helpers/blob/blobConstruct';\nimport MemoryWriter from './memoryWriter';\nimport FileManager from './memoryWriter';\nimport FileStorage from './fileStorage';\nimport makeError from '../../helpers/makeError';\nimport deferredPromise from '../../helpers/cancellablePromise';\n\nexport type CacheStorageDbName = 'cachedFiles' | 'cachedStreamChunks' | 'cachedAssets';\n\nexport default class CacheStorageController implements FileStorage {\n private static STORAGES: CacheStorageController[] = [];\n private openDbPromise: Promise;\n\n private useStorage = true;\n\n // private log: ReturnType = logger('CS');\n\n constructor(private dbName: CacheStorageDbName) {\n if(Modes.test) {\n this.dbName += '_test';\n }\n\n if(CacheStorageController.STORAGES.length) {\n this.useStorage = CacheStorageController.STORAGES[0].useStorage;\n }\n\n this.openDatabase();\n CacheStorageController.STORAGES.push(this);\n }\n\n private openDatabase(): Promise {\n return this.openDbPromise ?? (this.openDbPromise = caches.open(this.dbName));\n }\n\n public delete(entryName: string) {\n return this.timeoutOperation((cache) => cache.delete('/' + entryName));\n }\n\n public deleteAll() {\n return caches.delete(this.dbName);\n }\n\n public get(entryName: string) {\n return this.timeoutOperation((cache) => cache.match('/' + entryName));\n }\n\n public save(entryName: string, response: Response) {\n // return new Promise((resolve) => {}); // DEBUG\n return this.timeoutOperation((cache) => cache.put('/' + entryName, response));\n }\n\n public getFile(fileName: string, method: 'blob' | 'json' | 'text' = 'blob'): Promise {\n // if(method === 'blob') {\n // return Promise.reject(makeError('NO_ENTRY_FOUND'));\n // }\n\n // const str = `get fileName: ${fileName}`;\n // console.time(str);\n return this.get(fileName).then((response) => {\n if(!response) {\n // console.warn('getFile:', response, fileName);\n throw makeError('NO_ENTRY_FOUND');\n }\n\n const promise = response[method]();\n // promise.then(() => {\n // console.timeEnd(str);\n // });\n return promise;\n });\n }\n\n public saveFile(fileName: string, blob: Blob | Uint8Array) {\n // return Promise.resolve(blobConstruct([blob]));\n if(!(blob instanceof Blob)) {\n blob = blobConstruct(blob);\n }\n\n const response = new Response(blob, {\n headers: {\n 'Content-Length': '' + blob.size\n }\n });\n\n return this.save(fileName, response).then(() => blob as Blob);\n }\n\n public timeoutOperation(callback: (cache: Cache) => Promise) {\n if(!this.useStorage) {\n return Promise.reject(makeError('STORAGE_OFFLINE'));\n }\n\n return new Promise(async(resolve, reject) => {\n let rejected = false;\n const timeout = setTimeout(() => {\n reject();\n // console.warn('CACHESTORAGE TIMEOUT');\n rejected = true;\n }, 15e3);\n\n try {\n const cache = await this.openDatabase();\n if(!cache) {\n this.useStorage = false;\n this.openDbPromise = undefined;\n throw 'no cache?';\n }\n\n const res = await callback(cache);\n\n if(rejected) return;\n resolve(res);\n } catch(err) {\n reject(err);\n }\n\n clearTimeout(timeout);\n });\n }\n\n public prepareWriting(fileName: string, fileSize: number, mimeType: string) {\n return {\n deferred: deferredPromise(),\n getWriter: () => {\n const writer = new MemoryWriter(mimeType, fileSize, (blob) => {\n return this.saveFile(fileName, blob).catch(() => blob);\n });\n\n return writer;\n }\n };\n }\n\n public static toggleStorage(enabled: boolean, clearWrite: boolean) {\n return Promise.all(this.STORAGES.map((storage) => {\n storage.useStorage = enabled;\n\n if(!clearWrite) {\n return;\n }\n\n if(!enabled) {\n return storage.deleteAll();\n }\n }));\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// import { IS_WEB_WORKER } from \"../context\";\n\n// const id = IS_WEB_WORKER ? Math.random() * 0x1000 | 0 : 0;\nexport default function readBlobAs(blob: Blob, method: 'readAsText'): Promise;\nexport default function readBlobAs(blob: Blob, method: 'readAsDataURL'): Promise;\nexport default function readBlobAs(blob: Blob, method: 'readAsArrayBuffer'): Promise;\nexport default function readBlobAs(blob: Blob, method: 'readAsArrayBuffer' | 'readAsText' | 'readAsDataURL'): Promise {\n // const perf = performance.now();\n return new Promise((resolve) => {\n const reader = new FileReader();\n reader.addEventListener('loadend', (e) => {\n // console.log(`readBlobAs [${id}] ${method} time ${performance.now() - perf}`);\n resolve(e.target.result);\n });\n reader[method](blob);\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport readBlobAs from './readBlobAs';\n\nexport default function readBlobAsArrayBuffer(blob: Blob) {\n return readBlobAs(blob, 'readAsArrayBuffer');\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function fixFirefoxSvg(text: string) {\n const svgIndex = text.indexOf('/, ` width=\"${width}\" height=\"${height}\">`).replace(/[^\\x00-\\x7F]/g, '');\n return text;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {PhotoSize, InputFileLocation} from '../../../../layer';\nimport type {DownloadOptions} from '../../../mtproto/apiFileManager';\nimport type {MyDocument} from '../../appDocsManager';\nimport type {MyPhoto} from '../../appPhotosManager';\n\nexport default function getPhotoDownloadOptions(photo: MyPhoto | MyDocument, photoSize: PhotoSize, queueId?: number, onlyCache?: boolean): DownloadOptions {\n const isDocument = photo._ === 'document';\n\n if(!photoSize || photoSize._ === 'photoSizeEmpty') {\n // console.error('no photoSize by photo:', photo);\n throw new Error('photoSizeEmpty!');\n }\n\n // maybe it's a thumb\n const isPhoto = !!((photoSize._ === 'photoSize' || photoSize._ === 'photoSizeProgressive') && photo.access_hash && photo.file_reference);\n const location: InputFileLocation.inputPhotoFileLocation | InputFileLocation.inputDocumentFileLocation = {\n _: isDocument ? 'inputDocumentFileLocation' : 'inputPhotoFileLocation',\n id: photo.id,\n access_hash: photo.access_hash,\n file_reference: photo.file_reference,\n thumb_size: photoSize.type\n };\n\n return {\n dcId: photo.dc_id,\n location,\n size: isPhoto ? (photoSize as PhotoSize.photoSize).size : undefined,\n mimeType: 'image/jpeg',\n queueId,\n onlyCache\n };\n}\n","import {InputWebFileLocation} from '../../../../layer';\nimport {DownloadOptions} from '../../../mtproto/apiFileManager';\n\nexport default function getWebFileDownloadOptions(location: InputWebFileLocation): DownloadOptions {\n const downloadOptions: DownloadOptions = {\n dcId: 0,\n location,\n size: 0,\n mimeType: 'image/jpeg'\n };\n\n // if(location._ === 'inputWebFileGeoPointLocation') {\n // downloadOptions.size = 512 * 1024;\n // downloadOptions.mimeType = 'image/jpeg';\n // }\n\n return downloadOptions;\n}\n","import {WebDocument} from '../../../../layer';\nimport {DownloadOptions} from '../../../mtproto/apiFileManager';\nimport getWebFileDownloadOptions from '../webFiles/getWebFileDownloadOptions';\n\nexport default function getWebDocumentDownloadOptions(webDocument: WebDocument): DownloadOptions {\n const downloadOptions = getWebFileDownloadOptions({\n _: 'inputWebFileLocation',\n access_hash: (webDocument as WebDocument.webDocument).access_hash,\n url: webDocument.url\n });\n\n downloadOptions.size = webDocument.size;\n downloadOptions.mimeType = webDocument.mime_type;\n\n return downloadOptions;\n}\n","import {WebDocument} from '../../../../layer';\n\nexport default function isWebDocument(webDocument: any): webDocument is WebDocument {\n return !!(webDocument && (webDocument._ === 'webDocument' || webDocument._ === 'webDocumentNoProxy'));\n}\n","import {InputWebFileLocation} from '../../../../layer';\n\nexport default function isWebFileLocation(location: any): location is InputWebFileLocation {\n return location?._.includes('inputWebFile');\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {getFileNameByLocation} from '../../../../helpers/fileName';\nimport {DownloadOptions} from '../../../mtproto/apiFileManager';\n\nexport default function getDownloadFileNameFromOptions(options: DownloadOptions) {\n return getFileNameByLocation(options.location, options);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {DownloadMediaOptions, DownloadOptions} from '../../../mtproto/apiFileManager';\nimport getDocumentDownloadOptions from '../docs/getDocumentDownloadOptions';\nimport getPhotoDownloadOptions from '../photos/getPhotoDownloadOptions';\nimport getWebDocumentDownloadOptions from '../webDocs/getWebDocumentDownloadOptions';\nimport isWebDocument from '../webDocs/isWebDocument';\nimport getWebFileDownloadOptions from '../webFiles/getWebFileDownloadOptions';\nimport isWebFileLocation from '../webFiles/isWebFileLocation';\nimport getDownloadFileNameFromOptions from './getDownloadFileNameFromOptions';\n\nexport default function getDownloadMediaDetails(options: DownloadMediaOptions) {\n const {media, thumb, queueId, onlyCache} = options;\n\n let downloadOptions: DownloadOptions;\n if(media._ === 'document') downloadOptions = getDocumentDownloadOptions(media, thumb as any, queueId, onlyCache);\n else if(media._ === 'photo') downloadOptions = getPhotoDownloadOptions(media, thumb as any, queueId, onlyCache);\n else if(isWebDocument(media)) downloadOptions = getWebDocumentDownloadOptions(media);\n else if(isWebFileLocation(media)) downloadOptions = getWebFileDownloadOptions(media);\n\n downloadOptions.downloadId = options.downloadId;\n\n const fileName = getDownloadFileNameFromOptions(downloadOptions);\n return {fileName, downloadOptions};\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport readBlobAsArrayBuffer from './readBlobAsArrayBuffer';\n\nexport default function readBlobAsUint8Array(blob: Blob) {\n return readBlobAsArrayBuffer(blob).then((buffer) => new Uint8Array(buffer));\n}\n","export default function fileNameRFC(fileName: string) {\n // Make filename RFC5987 compatible\n return encodeURIComponent(fileName).replace(/['()]/g, escape).replace(/\\*/g, '%2A');\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport appManagersManager from '../appManagers/appManagersManager';\nimport ServiceMessagePort from '../serviceWorker/serviceMessagePort';\nimport StreamWriter from './streamWriter';\n\nexport default class DownloadWriter implements StreamWriter {\n constructor(\n private serviceMessagePort: ServiceMessagePort,\n private downloadId: string\n ) {\n this.serviceMessagePort = appManagersManager.getServiceMessagePort();\n }\n\n public async write(part: Uint8Array, offset?: number) {\n return this.serviceMessagePort.invoke('downloadChunk', {\n id: this.downloadId,\n chunk: part\n });\n }\n\n public finalize(saveToStorage?: boolean): Promise {\n return this.serviceMessagePort.invoke('downloadFinalize', this.downloadId).then(() => undefined);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport deferredPromise from '../../helpers/cancellablePromise';\nimport makeError from '../../helpers/makeError';\nimport fileNameRFC from '../../helpers/string/fileNameRFC';\nimport appManagersManager from '../appManagers/appManagersManager';\nimport DownloadWriter from './downloadWriter';\nimport FileStorage from './fileStorage';\n\nexport default class DownloadStorage implements FileStorage {\n public getFile(fileName: string): Promise {\n return Promise.reject(makeError('NO_ENTRY_FOUND'));\n }\n\n public prepareWriting({fileName, downloadId, size}: {\n fileName: string,\n downloadId: string,\n size: number\n }) {\n const headers = {\n // 'Content-Type': 'application/octet-stream; charset=utf-8',\n // 'Content-Type': EXTENSION_MIME_TYPE_MAP[fileName.split('.').pop() as keyof typeof EXTENSION_MIME_TYPE_MAP] || 'application/octet-stream; charset=utf-8',\n 'Content-Disposition': 'attachment; filename*=UTF-8\\'\\'' + fileNameRFC(fileName),\n // 'Content-Disposition': `attachment; filename=\"${fileNameRFC(fileName)}\"`,\n ...(size ? {'Content-Length': size} : {})\n };\n\n const serviceMessagePort = appManagersManager.getServiceMessagePort();\n const promise = serviceMessagePort.invoke('download', {\n headers,\n id: downloadId\n });\n\n const deferred = deferredPromise();\n deferred.cancel = () => {\n deferred.reject(makeError('DOWNLOAD_CANCELED'));\n };\n\n deferred.catch(() => {\n appManagersManager.getServiceMessagePort().invoke('downloadCancel', downloadId);\n });\n\n promise.then(deferred.resolve.bind(deferred), deferred.reject.bind(deferred));\n\n return {\n deferred,\n getWriter: () => {\n return new DownloadWriter(serviceMessagePort, downloadId);\n }\n };\n }\n}\n","export default function clamp(v: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, v));\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {ReferenceBytes} from './referenceDatabase';\nimport Modes from '../../config/modes';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport {randomLong} from '../../helpers/random';\nimport {Document, InputFile, InputFileLocation, InputWebFileLocation, Photo, PhotoSize, UploadFile, UploadWebFile, VideoSize, WebDocument} from '../../layer';\nimport {DcId} from '../../types';\nimport CacheStorageController from '../files/cacheStorage';\nimport {logger, LogTypes} from '../logger';\nimport assumeType from '../../helpers/assumeType';\nimport noop from '../../helpers/noop';\nimport readBlobAsArrayBuffer from '../../helpers/blob/readBlobAsArrayBuffer';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\nimport findAndSplice from '../../helpers/array/findAndSplice';\nimport fixFirefoxSvg from '../../helpers/fixFirefoxSvg';\nimport {AppManager} from '../appManagers/manager';\nimport {getEnvironment} from '../../environment/utils';\nimport MTProtoMessagePort from './mtprotoMessagePort';\nimport getFileNameForUpload from '../../helpers/getFileNameForUpload';\nimport type {Progress} from '../appManagers/appDownloadManager';\nimport getDownloadMediaDetails from '../appManagers/utils/download/getDownloadMediaDetails';\n// import networkStats from './networkStats';\nimport getDownloadFileNameFromOptions from '../appManagers/utils/download/getDownloadFileNameFromOptions';\nimport StreamWriter from '../files/streamWriter';\nimport FileStorage from '../files/fileStorage';\nimport {MAX_FILE_SAVE_SIZE} from './mtproto_config';\nimport throttle from '../../helpers/schedulers/throttle';\nimport makeError from '../../helpers/makeError';\nimport readBlobAsUint8Array from '../../helpers/blob/readBlobAsUint8Array';\nimport DownloadStorage from '../files/downloadStorage';\nimport copy from '../../helpers/object/copy';\nimport {EXTENSION_MIME_TYPE_MAP, MIME_TYPE_EXTENSION_MAP} from '../../environment/mimeTypeMap';\nimport isWebFileLocation from '../appManagers/utils/webFiles/isWebFileLocation';\nimport appManagersManager from '../appManagers/appManagersManager';\nimport clamp from '../../helpers/number/clamp';\nimport insertInDescendSortedArray from '../../helpers/array/insertInDescendSortedArray';\n\nexport type DownloadOptions = {\n dcId: DcId,\n location: InputFileLocation | InputWebFileLocation,\n size?: number,\n fileName?: string,\n mimeType?: MTMimeType,\n limitPart?: number,\n queueId?: number,\n onlyCache?: boolean,\n downloadId?: string\n // getFileMethod: Parameters[1]\n};\n\nexport type DownloadMediaOptions = {\n media: Photo.photo | Document.document | WebDocument | InputWebFileLocation,\n thumb?: PhotoSize | Extract,\n queueId?: number,\n onlyCache?: boolean,\n downloadId?: string\n};\n\ntype DownloadPromise = CancellablePromise;\n\nexport type MyUploadFile = UploadFile.uploadFile | UploadWebFile.uploadWebFile;\n\n// export interface RefreshReferenceTask extends WorkerTaskVoidTemplate {\n// type: 'refreshReference',\n// payload: ReferenceBytes,\n// };\n\n// export interface RefreshReferenceTaskResponse extends WorkerTaskVoidTemplate {\n// type: 'refreshReference',\n// payload: ReferenceBytes,\n// originalPayload: ReferenceBytes\n// };\n\nconst DO_NOT_UPLOAD_FILES = false;\nconst PREPARE_CACHE = false;\n\nconst MAX_DOWNLOAD_FILE_PART_SIZE = 1 * 1024 * 1024;\nconst MAX_UPLOAD_FILE_PART_SIZE = 512 * 1024;\nconst MIN_PART_SIZE = 64 * 1024;\nconst AVG_PART_SIZE = 512 * 1024;\n\nconst REGULAR_DOWNLOAD_DELTA = (9 * 512 * 1024) / MIN_PART_SIZE;\n// const PREMIUM_DOWNLOAD_DELTA = REGULAR_DOWNLOAD_DELTA * 2;\nconst PREMIUM_DOWNLOAD_DELTA = (56 * 512 * 1024) / MIN_PART_SIZE;\n\nconst IGNORE_ERRORS: Set = new Set([\n 'DOWNLOAD_CANCELED',\n 'UPLOAD_CANCELED',\n 'UNKNOWN',\n 'NO_NEW_CONTEXT'\n]);\n\nexport class ApiFileManager extends AppManager {\n private cacheStorage = new CacheStorageController('cachedFiles');\n private downloadStorage = new DownloadStorage();\n\n private downloadPromises: {\n [fileName: string]: DownloadPromise\n } = {};\n\n // private downloadToDiscPromises: {\n // [fileName: string]: DownloadPromise\n // } = {};\n\n private uploadPromises: {\n [fileName: string]: CancellablePromise\n } = {};\n\n private downloadPulls: {\n [dcId: string]: Array<{\n id: number,\n queueId: number,\n cb: () => any,\n deferred: {\n resolve: (...args: any[]) => void,\n reject: (...args: any[]) => void\n },\n activeDelta: number,\n priority: number\n }>\n } = {};\n private downloadActives: {[dcId: string]: number} = {};\n\n public refreshReferencePromises: {\n [referenceHex: string]: {\n deferred: CancellablePromise,\n timeout?: number\n }\n } = {};\n\n private log: ReturnType = logger('AFM', LogTypes.Error | LogTypes.Log);\n private tempId = 0;\n private queueId = 0;\n private debug = Modes.debug;\n\n private maxUploadParts = 4000;\n private maxDownloadParts = 8000;\n private webFileDcId: DcId;\n\n protected after() {\n setInterval(() => { // clear old promises\n for(const hex in this.refreshReferencePromises) {\n const {deferred} = this.refreshReferencePromises[hex];\n if(deferred.isFulfilled || deferred.isRejected) {\n delete this.refreshReferencePromises[hex];\n }\n }\n }, 1800e3);\n\n this.rootScope.addEventListener('config', (config) => {\n this.webFileDcId = config.webfile_dc_id;\n });\n\n this.rootScope.addEventListener('app_config', (appConfig) => {\n this.maxUploadParts = this.rootScope.premium ? appConfig.upload_max_fileparts_premium : appConfig.upload_max_fileparts_default;\n this.maxDownloadParts = appConfig.upload_max_fileparts_premium;\n });\n\n if(PREPARE_CACHE) {\n const perf = performance.now();\n const storage = this.getFileStorage();\n storage.timeoutOperation(async(cache) => {\n const [requests, responses] = await Promise.all([cache.keys(), cache.matchAll()]);\n\n for(let i = 0, length = requests.length; i < length; ++i) {\n const request = requests[i];\n const response = responses[i];\n const url = request.url;\n const size = +response.headers.get('content-length');\n const splitted = url.split('/').pop().split('_');\n if(splitted[0] === 'photo' || splitted[0] === 'document') {\n this.thumbsStorage.setCacheContextURL(\n {_: splitted[0], id: splitted[1]} as Photo.photo,\n splitted[2],\n '',\n size\n );\n }\n }\n\n console.log('finished cache preparing', performance.now() - perf);\n });\n }\n }\n\n private downloadRequest({\n dcId,\n id,\n cb,\n activeDelta,\n queueId = 0,\n priority = 0\n }: {\n dcId: DcId,\n id: number,\n cb: () => R,\n activeDelta: number,\n queueId?: number,\n priority?: number\n }): R {\n if(this.downloadPulls[dcId] === undefined) {\n this.downloadPulls[dcId] = [];\n this.downloadActives[dcId] = 0;\n }\n\n const downloadPull = this.downloadPulls[dcId];\n\n const promise = new Promise((resolve, reject) => {\n const element: typeof downloadPull[0] = {id, queueId, cb, deferred: {resolve, reject}, activeDelta, priority};\n insertInDescendSortedArray(downloadPull, element, 'priority', -1);\n });\n\n // setTimeout(() => {\n this.downloadCheck(dcId);\n // }, 0);\n\n return promise as R;\n }\n\n private downloadCheck(dcId: string | number) {\n const downloadPull = this.downloadPulls[dcId];\n const downloadLimit = /* dcId === 'upload' ? 24 : */(this.rootScope.premium ? PREMIUM_DOWNLOAD_DELTA : REGULAR_DOWNLOAD_DELTA);\n // const downloadLimit = Infinity;\n\n if(this.downloadActives[dcId] >= downloadLimit || !downloadPull?.length) {\n return false;\n }\n\n // const data = downloadPull.shift();\n const data = downloadPull[0].priority ? downloadPull.shift() : findAndSplice(downloadPull, (d) => d.queueId === 0) || findAndSplice(downloadPull, (d) => d.queueId === this.queueId) || downloadPull.shift();\n const activeDelta = data.activeDelta || 1;\n\n this.downloadActives[dcId] += activeDelta;\n\n const promise = data.cb();\n // const networkPromise = networkStats.waitForChunk(dcId as DcId, activeDelta * MIN_PART_SIZE);\n /* Promise.race([\n promise\n // networkPromise\n ]) */promise.then(() => {\n this.downloadActives[dcId] -= activeDelta;\n this.downloadCheck(dcId);\n\n // networkPromise.resolve();\n }, (error: ApiError) => {\n if(!error?.type || !IGNORE_ERRORS.has(error.type)) {\n this.log.error('downloadCheck error:', error);\n }\n\n this.downloadActives[dcId] -= activeDelta;\n this.downloadCheck(dcId);\n\n // networkPromise.reject(error);\n }).finally(() => {\n promise.then(data.deferred.resolve, data.deferred.reject);\n });\n }\n\n public setQueueId(queueId: number) {\n // this.log.error('setQueueId', queueId);\n this.queueId = queueId;\n }\n\n private getFileStorage() {\n return this.cacheStorage;\n }\n\n public cancelDownload(fileName: string) {\n const promises = [this.downloadPromises[fileName], this.uploadPromises[fileName]].filter(Boolean);\n let canceled = false;\n for(let i = 0, length = promises.length; i < length; ++i) {\n const promise = promises[i];\n if(promise && !promise.isRejected && !promise.isFulfilled) {\n promise.cancel();\n canceled = true;\n }\n }\n\n return canceled;\n }\n\n public requestWebFilePart({\n dcId,\n location,\n offset,\n limit,\n id,\n queueId,\n checkCancel\n }: {\n dcId: DcId,\n location: InputWebFileLocation,\n offset: number,\n limit: number,\n id?: number,\n queueId?: number,\n checkCancel?: () => void\n }) {\n return this.downloadRequest({\n dcId: this.webFileDcId,\n id,\n cb: async() => { // do not remove async, because checkCancel will throw an error\n checkCancel?.();\n\n if('url' in location) {\n const url = location.url;\n if(this.isLocalWebFile(url)) {\n return fetch(url)\n .then((response) => response.arrayBuffer())\n .then((arrayBuffer) => {\n const extension = url.split('.').pop() as MTFileExtension;\n const mimeType = EXTENSION_MIME_TYPE_MAP[extension] || 'application/octet-stream';\n const ret: UploadWebFile.uploadWebFile = {\n _: 'upload.webFile',\n size: arrayBuffer.byteLength,\n mime_type: mimeType,\n file_type: {_: 'storage.fileUnknown'},\n mtime: 0,\n bytes: new Uint8Array(arrayBuffer)\n };\n return ret;\n });\n }\n }\n\n return this.apiManager.invokeApi('upload.getWebFile', {\n location,\n offset,\n limit\n }, {\n dcId: this.webFileDcId,\n fileDownload: true\n });\n },\n activeDelta: this.getDelta(limit),\n queueId\n });\n }\n\n public requestFilePart({\n dcId,\n location,\n offset,\n limit,\n id,\n queueId,\n checkCancel,\n floodMaxTimeout,\n priority\n }: {\n dcId: DcId,\n location: InputFileLocation,\n offset: number,\n limit: number,\n id?: number,\n queueId?: number,\n checkCancel?: () => void,\n floodMaxTimeout?: number,\n priority?: number\n }) {\n return this.downloadRequest({\n dcId,\n id,\n cb: async() => { // do not remove async, because checkCancel will throw an error\n checkCancel?.();\n\n const invoke = async(): Promise => {\n checkCancel?.(); // do not remove async, because checkCancel will throw an error\n\n // * IMPORTANT: reference can be changed in previous request\n const reference = (location as InputFileLocation.inputDocumentFileLocation).file_reference?.slice();\n\n const promise = // pause(offset > (100 * 1024 * 1024) ? 10000000 : 0).then(() =>\n this.apiManager.invokeApi('upload.getFile', {\n location,\n offset,\n limit\n }, {\n dcId,\n fileDownload: true,\n floodMaxTimeout\n }) as Promise/* ) */;\n\n return promise.catch((err: ApiError) => {\n checkCancel?.();\n\n if(err.type === 'FILE_REFERENCE_EXPIRED') {\n return this.refreshReference(location as InputFileLocation.inputDocumentFileLocation, reference).then(invoke);\n }\n\n throw err;\n });\n };\n\n assumeType(location);\n const reference = location.file_reference;\n if(reference && !location.checkedReference) { // check stream's location because it's new every call\n location.checkedReference = true;\n const hex = bytesToHex(reference);\n if(this.refreshReferencePromises[hex]) {\n return this.refreshReference(location, reference).then(invoke);\n }\n }\n\n return invoke();\n },\n activeDelta: this.getDelta(limit),\n queueId,\n priority\n });\n }\n\n /* private convertBlobToBytes(blob: Blob) {\n return blob.arrayBuffer().then((buffer) => new Uint8Array(buffer));\n } */\n\n private getDelta(bytes: number) {\n return bytes / MIN_PART_SIZE;\n }\n\n private getLimitPart(size: number, isUpload: boolean): number {\n if(!size) { // * sometimes size can be 0 (e.g. avatars, webDocuments)\n return AVG_PART_SIZE;\n }\n\n // return 1 * 1024 * 1024;\n\n let bytes = MIN_PART_SIZE;\n\n const maxParts = isUpload ? this.maxUploadParts : this.maxDownloadParts;\n const maxPartSize = isUpload ? MAX_UPLOAD_FILE_PART_SIZE : MAX_DOWNLOAD_FILE_PART_SIZE;\n // usually it will stick to 512Kb size if the file is too big\n while((size / bytes) > maxParts && bytes < maxPartSize) {\n bytes *= 2;\n }\n /* if(size < 1e6 || !size) bytes = 512;\n else if(size < 3e6) bytes = 256;\n else bytes = 128; */\n\n return bytes;\n }\n\n private uncompressTGS = (bytes: Uint8Array, fileName: string) => {\n // this.log('uncompressTGS', bytes, bytes.slice().buffer);\n // slice нужен потому что в uint8array - 5053 length, в arraybuffer - 5084\n return this.cryptoWorker.invokeCrypto('gzipUncompress', bytes.slice().buffer, false) as Promise;\n };\n\n private uncompressTGV = (bytes: Uint8Array, fileName: string) => {\n // this.log('uncompressTGS', bytes, bytes.slice().buffer);\n // slice нужен потому что в uint8array - 5053 length, в arraybuffer - 5084\n const buffer = bytes.slice().buffer;\n if(getEnvironment().IS_FIREFOX) {\n return this.cryptoWorker.invokeCrypto('gzipUncompress', buffer, true).then((text) => {\n return fixFirefoxSvg(text as string);\n }).then((text) => {\n const textEncoder = new TextEncoder();\n return textEncoder.encode(text);\n });\n }\n\n return this.cryptoWorker.invokeCrypto('gzipUncompress', buffer, false) as Promise;\n };\n\n private convertWebp = (bytes: Uint8Array, fileName: string) => {\n const instance = MTProtoMessagePort.getInstance();\n return instance.invoke('convertWebp', {fileName, bytes});\n };\n\n private convertOpus = (bytes: Uint8Array, fileName: string) => {\n const instance = MTProtoMessagePort.getInstance();\n return instance.invoke('convertOpus', {fileName, bytes});\n };\n\n private refreshReference(\n inputFileLocation: InputFileLocation.inputDocumentFileLocation,\n reference: typeof inputFileLocation['file_reference'],\n hex = bytesToHex(reference)\n ) {\n let r = this.refreshReferencePromises[hex];\n if(!r) {\n const deferred = deferredPromise();\n\n r = this.refreshReferencePromises[hex] = {\n deferred\n\n // ! I don't remember what it was for...\n // timeout: ctx.setTimeout(() => {\n // this.log.error('Didn\\'t refresh the reference:', inputFileLocation);\n // deferred.reject(makeError('REFERENCE_IS_NOT_REFRESHED'));\n // }, 60000)\n };\n\n // deferred.catch(noop).finally(() => {\n // clearTimeout(r.timeout);\n // });\n\n this.referenceDatabase.refreshReference(reference).then((reference) => {\n if(hex === bytesToHex(reference)) {\n deferred.reject(makeError('REFERENCE_IS_NOT_REFRESHED'));\n }\n\n deferred.resolve(reference);\n }, deferred.reject.bind(deferred));\n }\n\n // have to replace file_reference in any way, because location can be different everytime if it's stream\n return r.deferred.then((reference) => {\n inputFileLocation.file_reference = reference;\n });\n }\n\n public isDownloading(fileName: string) {\n return !!this.downloadPromises[fileName];\n }\n\n public getDownload(fileName: string) {\n return this.downloadPromises[fileName];\n }\n\n public getUpload(fileName: string) {\n return this.uploadPromises[fileName];\n }\n\n private getConvertMethod(mimeType: MTMimeType) {\n let process: ApiFileManager['uncompressTGS'] | ApiFileManager['convertWebp'];\n if(mimeType === 'application/x-tgwallpattern') {\n process = this.uncompressTGV;\n mimeType = 'image/svg+xml';\n } else if(mimeType === 'image/webp' && !getEnvironment().IS_WEBP_SUPPORTED) {\n process = this.convertWebp;\n mimeType = 'image/png';\n } else if(mimeType === 'application/x-tgsticker') {\n process = this.uncompressTGS;\n mimeType = 'application/json';\n } else if(mimeType === 'audio/ogg' && !getEnvironment().IS_OPUS_SUPPORTED) {\n process = this.convertOpus;\n mimeType = 'audio/wav';\n }\n\n return {mimeType, process};\n }\n\n private isLocalWebFile(url: string) {\n return url?.startsWith('assets/');\n }\n\n public download(options: DownloadOptions): DownloadPromise {\n const log = this.log.bindPrefix('download');\n const size = options.size ?? 0;\n const {dcId, location} = options;\n let {downloadId} = options;\n if(downloadId && !appManagersManager.getServiceMessagePort()) {\n log.error('fallback to blob', options);\n downloadId = undefined;\n }\n\n const originalMimeType = options.mimeType;\n const convertMethod = this.getConvertMethod(originalMimeType);\n const {process} = convertMethod;\n options.mimeType = convertMethod.mimeType || 'image/jpeg';\n\n const fileName = getDownloadFileNameFromOptions(options);\n const cacheFileName = downloadId ? getDownloadFileNameFromOptions({...copy(options), downloadId: undefined}) : fileName;\n const cacheStorage: FileStorage = this.getFileStorage();\n const downloadStorage: FileStorage = downloadId ? this.downloadStorage : undefined;\n let deferred: DownloadPromise = downloadId ? undefined : this.downloadPromises[fileName];\n\n log('start', fileName, options, size);\n\n if(deferred) {\n return deferred;\n }\n\n // if(deferred) {\n // if(size) {\n // return deferred.then(async(blob) => {\n // if(blob instanceof Blob && blob.size < size) {\n // log('downloadFile need to deleteFile, wrong size:', blob.size, size);\n\n // try {\n // await this.delete(fileName);\n // } finally {\n // return this.download(options);\n // }\n // } else {\n // return blob;\n // }\n // });\n // } else {\n // return deferred;\n // }\n // }\n\n const errorHandler = (item: typeof cachePrepared, error: ApiError) => {\n if(item?.error) {\n return;\n }\n\n for(const p of prepared) {\n if(item && item !== p) {\n continue;\n }\n\n p.error = error;\n p.deferred.reject(error);\n }\n };\n\n const isWebFile = isWebFileLocation(location);\n const isLocalWebFile = isWebFile && this.isLocalWebFile((location as InputWebFileLocation.inputWebFileLocation).url);\n const id = this.tempId++;\n const limitPart = isLocalWebFile ?\n size :\n options.limitPart || this.getLimitPart(size, false);\n\n let getFile: FileStorage['getFile'] = cacheStorage.getFile.bind(cacheStorage);\n\n let cachePrepared: ReturnType & {writer?: StreamWriter, error?: ApiError},\n downloadPrepared: typeof cachePrepared;\n const prepared: (typeof cachePrepared)[] = [];\n const possibleSize = size || limitPart;\n\n const getErrorsCount = () => prepared.reduce((acc, item) => acc + +!!item.error, 0);\n\n const attach = (item: typeof cachePrepared, fileName: string) => {\n const {deferred} = item;\n const _errorHandler = errorHandler.bind(null, item);\n\n deferred.cancel = () => deferred.reject(makeError('DOWNLOAD_CANCELED'));\n deferred.catch((error) => {\n _errorHandler(error);\n item.writer?.truncate?.();\n }).finally(() => {\n if(this.downloadPromises[fileName] === deferred) {\n delete this.downloadPromises[fileName];\n }\n\n delete item.writer;\n // indexOfAndSplice(prepared, item);\n });\n\n this.downloadPromises[fileName] = deferred;\n\n prepared.push(item);\n };\n\n if(cacheStorage && (!downloadStorage || possibleSize <= MAX_FILE_SAVE_SIZE)) {\n cachePrepared = cacheStorage.prepareWriting(cacheFileName, possibleSize, options.mimeType)\n attach(cachePrepared, cacheFileName);\n }\n\n if(downloadStorage) {\n let downloadFileName = options.fileName; // it's doc file_name\n if(!downloadFileName) {\n downloadFileName = cacheFileName;\n const ext = MIME_TYPE_EXTENSION_MAP[options.mimeType];\n if(ext) {\n downloadFileName += '.' + ext;\n }\n }\n\n downloadPrepared = downloadStorage.prepareWriting({\n fileName: downloadFileName,\n downloadId,\n size: possibleSize\n });\n attach(downloadPrepared, fileName);\n\n if(cachePrepared) { // cancel cache too\n downloadPrepared.deferred.catch((err) => cachePrepared.deferred.reject(err));\n }\n\n // this.downloadToDiscPromises[cacheFileName] = deferred;\n // deferred.catch(noop).finally(() => {\n // if(this.downloadToDiscPromises[cacheFileName] === deferred) {\n // delete this.downloadToDiscPromises[cacheFileName];\n // }\n // });\n }\n\n deferred = downloadPrepared?.deferred ?? cachePrepared.deferred;\n\n if(downloadStorage && process) { // then have to load file again\n getFile = downloadStorage.getFile.bind(downloadStorage);\n }\n\n getFile(cacheFileName).then(async(blob: Blob) => {\n checkCancel();\n\n // if(blob.size < size) {\n // if(!options.onlyCache) {\n // await this.delete(cacheFileName);\n // checkCancel();\n // }\n\n // throw makeError('NO_ENTRY_FOUND');\n // }\n\n if(downloadPrepared) {\n const writer = downloadPrepared.writer = downloadPrepared.getWriter();\n checkCancel();\n\n const arr = await readBlobAsUint8Array(blob);\n checkCancel();\n await writer.write(arr);\n checkCancel();\n\n downloadPrepared.deferred.resolve(await writer.finalize());\n }\n\n if(cachePrepared) {\n cachePrepared.deferred.resolve(blob);\n }\n }).catch(async(err: ApiError) => {\n if(options.onlyCache) {\n errorHandler(null, err);\n return;\n }\n\n prepared.forEach((p) => {\n p.writer = p.getWriter();\n });\n\n const maxRequests = Infinity;\n\n const requestPart = (isWebFile ? this.requestWebFilePart : this.requestFilePart).bind(this);\n\n if(isWebFile && this.webFileDcId === undefined && !isLocalWebFile) {\n await this.apiManager.getConfig();\n checkCancel();\n }\n\n const progress: Progress = {done: 0, offset: 0, total: size, fileName};\n const dispatchProgress = () => {\n try {\n checkCancel();\n progress.done = done;\n this.rootScope.dispatchEvent('download_progress', progress);\n } catch(err) {}\n };\n\n const throttledDispatchProgress = throttle(dispatchProgress, 50, true);\n\n let done = 0;\n let _writePromise: CancellablePromise = Promise.resolve(),\n _offset = 0;\n const superpuper = async() => {\n if(_offset && _offset > size) {\n return;\n }\n\n const writeDeferred = deferredPromise();\n const writePromise = _writePromise;\n const offset = _offset;\n _writePromise = writeDeferred;\n _offset += limitPart;\n try {\n checkCancel();\n\n const requestPerf = performance.now();\n const result = await requestPart({\n dcId,\n location: location as never,\n offset,\n limit: limitPart,\n id,\n queueId: options.queueId,\n checkCancel\n });\n checkCancel();\n const requestTime = performance.now() - requestPerf;\n\n const bytes = result.bytes;\n\n const byteLength = bytes.byteLength;\n log('requestPart result', fileName, result);\n const isFinal = (offset + limitPart) >= size || !byteLength;\n if(byteLength) {\n done += byteLength;\n\n if(isFinal) {\n dispatchProgress();\n } else {\n superpuper();\n throttledDispatchProgress();\n }\n\n const writeQueuePerf = performance.now();\n await writePromise;\n checkCancel();\n const writeQueueTime = performance.now() - writeQueuePerf;\n\n const perf = performance.now();\n await Promise.all(prepared.map(({writer}) => writer?.write(bytes, offset)));\n checkCancel();\n downloadId && log('write time', performance.now() - perf, 'request time', requestTime, 'queue time', writeQueueTime);\n }\n\n if(isFinal) {\n if(!size || done < size) {\n prepared.forEach(({writer}) => writer?.trim?.(done));\n }\n }\n\n if(isFinal && process) {\n const promises = prepared\n .filter(({writer}) => writer?.getParts && writer.replaceParts)\n .map(async({writer}) => {\n const bytes = writer.getParts();\n const processedResult = await process(bytes, cacheFileName);\n writer.replaceParts(processedResult);\n });\n\n await Promise.all(promises);\n checkCancel();\n }\n\n writeDeferred.resolve();\n\n if(isFinal) {\n const saveToStorage = done <= MAX_FILE_SAVE_SIZE;\n prepared.forEach((item) => {\n const {deferred, writer} = item;\n if(deferred.isFulfilled || deferred.isRejected || !writer) {\n return;\n }\n\n const result = writer.finalize(saveToStorage);\n deferred.resolve(result);\n });\n }\n } catch(err) {\n errorHandler(null, err as ApiError);\n writeDeferred.resolve();\n }\n };\n\n for(let i = 0, length = clamp(size / limitPart, 1, maxRequests); i < length; ++i) {\n superpuper();\n }\n }).catch(noop);\n\n const checkCancel = () => {\n if(getErrorsCount() === prepared.length) {\n throw prepared[0].error;\n }\n };\n\n return deferred;\n }\n\n public downloadMedia(options: DownloadMediaOptions): DownloadPromise {\n let {media, thumb} = options;\n const isPhoto = media._ === 'photo';\n if(isPhoto && !thumb) {\n return Promise.reject('preloadPhoto photoEmpty!');\n }\n\n // get original instance with correct file_reference instead of using copies\n const isDocument = media._ === 'document';\n // const isWebDocument = media._ === 'webDocument';\n if(isDocument) media = this.appDocsManager.getDoc((media as Document.document).id);\n else if(isPhoto) media = this.appPhotosManager.getPhoto((media as Photo.photo).id);\n options.media = media || options.media;\n\n const {fileName, downloadOptions} = getDownloadMediaDetails(options);\n\n let promise = this.getDownload(fileName);\n if(!promise) {\n promise = this.download(downloadOptions);\n\n if(isDocument && !thumb) {\n this.rootScope.dispatchEvent('document_downloading', (media as Document.document).id);\n promise.then(() => {\n this.rootScope.dispatchEvent('document_downloaded', (media as Document.document).id);\n }).catch(noop);\n }\n }\n\n return promise;\n }\n\n public downloadMediaURL(options: DownloadMediaOptions): Promise {\n const {media, thumb} = options;\n\n let cacheContext = this.thumbsStorage.getCacheContext(media as any, thumb?.type);\n if((thumb ? (cacheContext.downloaded >= ('size' in thumb ? thumb.size : 0)) : true) && cacheContext.url) {\n return Promise.resolve(cacheContext.url);\n }\n\n return this.downloadMedia(options).then((blob) => {\n if(!cacheContext.downloaded || !cacheContext.url || cacheContext.downloaded < blob.size) {\n const url = URL.createObjectURL(blob);\n cacheContext = this.thumbsStorage.setCacheContextURL(media as any, cacheContext.type, url, blob.size);\n }\n\n return cacheContext.url;\n });\n }\n\n public downloadMediaVoid(options: DownloadMediaOptions) {\n return this.downloadMedia(options).then(noop);\n }\n\n private delete(fileName: string) {\n delete this.downloadPromises[fileName];\n return this.getFileStorage().delete(fileName);\n }\n\n public upload({file, fileName}: {file: Blob | File, fileName?: string}) {\n fileName ||= getFileNameForUpload(file);\n\n const fileSize = file.size;\n const isBigFile = fileSize >= 10485760;\n const partSize = this.getLimitPart(fileSize, true);\n const activeDelta = this.getDelta(partSize);\n const totalParts = DO_NOT_UPLOAD_FILES ? 0 : Math.ceil(fileSize / partSize);\n const fileId = randomLong();\n const resultInputFile: InputFile = {\n _: isBigFile ? 'inputFileBig' : 'inputFile',\n id: fileId as any,\n parts: totalParts,\n name: fileName,\n md5_checksum: ''\n };\n\n const deferred = deferredPromise();\n if(totalParts > this.maxUploadParts) {\n deferred.reject(makeError('FILE_TOO_BIG'));\n return deferred;\n }\n\n let canceled = false, resolved = false;\n let errorHandler = (error: ApiError) => {\n if(error?.type !== 'UPLOAD_CANCELED') {\n this.log.error('up error', error);\n }\n\n deferred.reject(error);\n canceled = true;\n errorHandler = noop;\n };\n\n const method = isBigFile ? 'upload.saveBigFilePart' : 'upload.saveFilePart';\n const id = this.tempId++;\n\n const self = this;\n function* generator() {\n let _part = 0, doneParts = 0;\n for(let offset = 0; offset < fileSize; offset += partSize) {\n const part = _part++; // 0, 1\n yield self.downloadRequest({\n dcId: 'upload',\n id,\n cb: async() => {\n checkCancel();\n\n const blob = file.slice(offset, offset + partSize);\n const buffer = await readBlobAsArrayBuffer(blob);\n checkCancel();\n\n self.debug && self.log('Upload file part, isBig:', isBigFile, part, buffer.byteLength, new Uint8Array(buffer).length, new Uint8Array(buffer).slice().length);\n\n return self.apiManager.invokeApi(method, {\n file_id: fileId,\n file_part: part,\n file_total_parts: totalParts,\n bytes: buffer\n } as any, {\n fileUpload: true\n }).then(() => {\n if(canceled) {\n return;\n }\n\n ++doneParts;\n const progress: Progress = {done: doneParts * partSize, offset, total: fileSize, fileName};\n deferred.notify(progress);\n\n if(doneParts >= totalParts) {\n deferred.resolve(resultInputFile);\n resolved = true;\n }\n }, errorHandler);\n },\n activeDelta\n }).catch(errorHandler);\n }\n }\n\n const checkCancel = () => {\n if(canceled) {\n throw makeError('UPLOAD_CANCELED');\n }\n };\n\n deferred.cancel = () => {\n if(!canceled && !resolved) {\n canceled = true;\n errorHandler(makeError('UPLOAD_CANCELED'));\n }\n };\n\n deferred.notify = (progress: Progress) => {\n this.rootScope.dispatchEvent('download_progress', progress);\n };\n\n deferred.finally(() => {\n if(this.uploadPromises[fileName] === deferred) {\n delete this.uploadPromises[fileName];\n }\n });\n\n this.uploadPromises[fileName] = deferred;\n\n const it = generator();\n const process = () => {\n if(canceled) return;\n const r = it.next();\n if(r.done || canceled) return;\n (r.value as Promise).then(process);\n };\n\n const maxRequests = Infinity;\n for(let i = 0, length = Math.min(maxRequests, totalParts); i < length; ++i) {\n process();\n }\n\n return deferred;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport Modes from '../config/modes';\nimport {IS_WORKER} from '../helpers/context';\nimport makeError from '../helpers/makeError';\nimport {WorkerTaskTemplate} from '../types';\nimport MTProtoMessagePort from './mtproto/mtprotoMessagePort';\n// import { stringify } from '../helpers/json';\n\nclass LocalStorage> {\n private prefix = '';\n private cache: Partial = {};\n private useStorage = true;\n\n constructor(/* private preserveKeys: (keyof Storage)[] */) {\n if(Modes.test) {\n this.prefix = 't_';\n }\n }\n\n public get(key: T, useCache = true): Storage[T] {\n if(this.cache.hasOwnProperty(key) && useCache) {\n return this.cache[key];\n } else if(this.useStorage) {\n let value: Storage[T];\n try {\n value = localStorage.getItem(this.prefix + (key as string)) as any;\n } catch(err) {\n this.useStorage = false;\n throw makeError('STORAGE_OFFLINE');\n }\n\n if(value !== null) {\n try {\n value = JSON.parse(value);\n } catch(err) {\n // console.error(err);\n }\n } else {\n value = undefined;\n }\n\n return value;\n } else {\n throw makeError('STORAGE_OFFLINE');\n }\n }\n\n public set(obj: Partial, onlyLocal = false) {\n let lastError: any;\n for(const key in obj) {\n if(obj.hasOwnProperty(key)) {\n const value = obj[key];\n this.cache[key] = value;\n\n if(!onlyLocal) {\n try {\n if(!this.useStorage) {\n throw makeError('STORAGE_OFFLINE');\n }\n\n const stringified = JSON.stringify(value);\n localStorage.setItem(this.prefix + key, stringified);\n } catch(err) {\n this.useStorage = false;\n lastError = err;\n }\n }\n }\n }\n\n if(lastError) {\n throw lastError;\n }\n }\n\n public delete(key: keyof Storage, saveLocal = false) {\n // ! it is needed here\n key = '' + (key as string);\n\n if(!saveLocal) {\n delete this.cache[key];\n }\n\n // if(this.useStorage) {\n try {\n localStorage.removeItem(this.prefix + (key as string));\n } catch(err) {\n\n }\n // }\n }\n\n /* public clear(preserveKeys: (keyof Storage)[] = this.preserveKeys) {\n // if(this.useStorage) {\n try {\n let obj: Partial = {};\n if(preserveKeys) {\n preserveKeys.forEach((key) => {\n const value = this.get(key);\n if(value !== undefined) {\n obj[key] = value;\n }\n });\n }\n\n localStorage.clear();\n\n if(preserveKeys) {\n this.set(obj);\n }\n } catch(err) {\n\n }\n // }\n } */\n\n public clear() {\n const keys: string[] = ['dc', 'server_time_offset', 'xt_instance', 'user_auth', 'state_id', 'k_build'];\n for(let i = 1; i <= 5; ++i) {\n keys.push(`dc${i}_server_salt`);\n keys.push(`dc${i}_auth_key`);\n keys.push(`dc${i}_hash`); // only for WebA\n }\n\n for(const key of keys) {\n this.delete(key, true);\n }\n }\n\n public toggleStorage(enabled: boolean, clearWrite: boolean) {\n this.useStorage = enabled;\n\n if(!clearWrite) {\n return;\n }\n\n if(!enabled) {\n this.clear();\n } else {\n return this.set(this.cache);\n }\n }\n}\n\nexport interface LocalStorageProxyTask extends WorkerTaskTemplate {\n type: 'localStorageProxy',\n payload: {\n type: 'set' | 'get' | 'delete' | 'clear' | 'toggleStorage',\n args: any[]\n }\n};\n\nexport interface LocalStorageProxyTaskResponse extends WorkerTaskTemplate {\n type: 'localStorageProxy',\n payload: any\n};\n\nexport default class LocalStorageController> {\n private static STORAGES: LocalStorageController[] = [];\n // private log = (...args: any[]) => console.log('[SW LS]', ...args);\n // private log = (...args: any[]) => {};\n\n private storage: LocalStorage;\n\n constructor(/* private preserveKeys: (keyof Storage)[] = [] */) {\n LocalStorageController.STORAGES.push(this);\n\n if(!IS_WORKER) {\n this.storage = new LocalStorage(/* preserveKeys */);\n }\n }\n\n private async proxy(type: LocalStorageProxyTask['payload']['type'], ...args: LocalStorageProxyTask['payload']['args']): Promise {\n if(IS_WORKER) {\n const port = MTProtoMessagePort.getInstance();\n return port.invoke('localStorageProxy', {type, args});\n }\n\n args = Array.prototype.slice.call(args);\n\n // @ts-ignore\n return this.storage[type].apply(this.storage, args as any);\n }\n\n public get(key: T, useCache?: boolean) {\n return this.proxy('get', key, useCache);\n }\n\n public set(obj: Partial, onlyLocal?: boolean) {\n return this.proxy('set', obj, onlyLocal);\n }\n\n public delete(key: keyof Storage, saveLocal?: boolean) {\n return this.proxy('delete', key, saveLocal);\n }\n\n public clear(/* preserveKeys?: (keyof Storage)[] */) {\n return this.proxy('clear'/* , preserveKeys */);\n }\n\n public toggleStorage(enabled: boolean, clearWrite: boolean) {\n return this.proxy('toggleStorage', enabled, clearWrite);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {AppInstance} from './mtproto/singleInstance';\nimport type {UserAuth} from './mtproto/mtproto_config';\nimport type {DcId} from '../types';\nimport {MOUNT_CLASS_TO} from '../config/debug';\nimport LocalStorageController from './localStorage';\n\nconst sessionStorage = new LocalStorageController<{\n dc: DcId,\n user_auth: UserAuth,\n state_id: number,\n dc1_auth_key: string,\n dc2_auth_key: string,\n dc3_auth_key: string,\n dc4_auth_key: string,\n dc5_auth_key: string,\n dc1_server_salt: string,\n dc2_server_salt: string,\n dc3_server_salt: string,\n dc4_server_salt: string,\n dc5_server_salt: string,\n auth_key_fingerprint: string, // = dc${App.baseDcId}_auth_key.slice(0, 8)\n server_time_offset: number,\n xt_instance: AppInstance,\n kz_version: 'K' | 'Z',\n tgme_sync: {\n canRedirect: boolean,\n ts: number\n },\n k_build: number\n}>(/* ['kz_version'] */);\nMOUNT_CLASS_TO.appStorage = sessionStorage;\nexport default sessionStorage;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport ctx from '../../environment/ctx';\nimport assumeType from '../../helpers/assumeType';\nimport callbackify from '../../helpers/callbackify';\nimport {ignoreRestrictionReasons} from '../../helpers/restrictions';\nimport {Config, DataJSON, HelpAppConfig, HelpPeerColors, MethodDeclMap, User} from '../../layer';\nimport {InvokeApiOptions} from '../../types';\nimport {AppManager} from '../appManagers/manager';\nimport {MTAppConfig} from './appConfig';\nimport {UserAuth} from './mtproto_config';\nimport {MTMessage} from './networker';\n\ntype HashResult = {\n hash: number,\n result: any\n};\n\ntype HashOptions = {\n [queryJSON: string]: HashResult\n};\n\nexport type ApiLimitType = 'pin' | 'folderPin' | 'folders' |\n 'favedStickers' | 'reactions' | 'bio' | 'topicPin' | 'caption' |\n 'chatlistsJoined' | 'chatlistInvites' | 'channels' | 'links' |\n 'gifs' | 'folderPeers' | 'uploadFileParts' | 'recommendedChannels' |\n 'savedPin';\n\nexport default abstract class ApiManagerMethods extends AppManager {\n private afterMessageIdTemp: number;\n private hashes: {[method: string]: HashOptions} = {};\n private apiPromisesSingleProcess: {\n [q: string]: Map>\n } = {};\n private apiPromisesSingle: {\n [q: string]: Promise\n } = {};\n private apiPromisesCacheable: {\n [method: string]: {\n [queryJSON: string]: {\n timestamp: number,\n promise: Promise,\n fulfilled: boolean,\n result?: any,\n error?: any,\n timeout?: number,\n params: any\n }\n }\n } = {};\n\n protected config: Config;\n protected appConfig: MTAppConfig;\n protected requestedAppConfig: boolean;\n\n protected themeParams: DataJSON;\n\n constructor() {\n super();\n this.afterMessageIdTemp = 0;\n }\n\n protected after() {\n this.rootScope.addEventListener('managers_ready', async() => {\n const appConfig = await promise;\n this.applyAppConfig(appConfig, false);\n }, {once: true});\n\n const promise = this.appStateManager.getState().then((state) => {\n return state.appConfig;\n });\n\n return promise;\n }\n\n abstract setUserAuth(userAuth: UserAuth | UserId): Promise;\n\n public setUser(user: User) {\n this.appUsersManager.saveApiUser(user);\n return this.setUserAuth(user.id);\n }\n\n abstract invokeApi(method: T, params?: MethodDeclMap[T]['req'], options?: InvokeApiOptions): Promise;\n\n public invokeApiAfter(method: T, params: MethodDeclMap[T]['req'] = {}, options: InvokeApiOptions = {}): Promise {\n let o = options;\n o.prepareTempMessageId = '' + ++this.afterMessageIdTemp;\n\n o = {...options};\n (options as MTMessage).messageId = o.prepareTempMessageId;\n\n // console.log('will invokeApi:', method, params, options);\n return this.invokeApi(method, params, o);\n }\n\n public invokeApiHashable(o: {\n method: T,\n processResult?: (response: MethodDeclMap[T]['res']) => R,\n processError?: (error: ApiError) => any,\n params?: Omit,\n options?: InvokeApiOptions & {cacheKey?: string},\n overwrite?: boolean\n }) {\n // @ts-ignore\n o.params ??= {};\n o.options ??= {};\n // console.log('will invokeApi:', method, params, options);\n\n const {params, options, method, overwrite} = o;\n\n const queryJSON = JSON.stringify(params);\n let cached: HashResult;\n if(this.hashes[method]) {\n cached = this.hashes[method][queryJSON];\n if(cached) {\n if(overwrite) {\n delete this.hashes[method][queryJSON];\n cached = undefined;\n } else {\n (params as any).hash = cached.hash;\n }\n }\n }\n\n return this.invokeApiSingleProcess({\n method,\n processResult: (result) => {\n if(result._.includes('NotModified')) {\n // this.debug && this.log.warn('NotModified saved!', method, queryJSON);\n return cached.result;\n }\n\n if(result.hash/* || result.messages */) {\n const hash = result.hash/* || this.computeHash(result.messages) */;\n\n if(!this.hashes[method]) this.hashes[method] = {};\n cached = this.hashes[method][queryJSON] = {\n hash,\n result\n };\n }\n\n if(o.processResult) {\n const newResult = o.processResult(result);\n return cached ? cached.result = newResult : newResult;\n }\n\n return result;\n },\n params,\n options\n });\n }\n\n public invokeApiSingle(method: T, params: MethodDeclMap[T]['req'] = {} as any, options: InvokeApiOptions = {}): Promise {\n const q = method + '-' + JSON.stringify(params);\n const cache = this.apiPromisesSingle;\n if(cache[q]) {\n return cache[q];\n }\n\n return cache[q] = this.invokeApi(method, params, options).finally(() => {\n delete cache[q];\n });\n }\n\n public invokeApiSingleProcess(o: {\n method: T,\n processResult?: (response: MethodDeclMap[T]['res']) => R,\n processError?: (error: ApiError) => any,\n params?: MethodDeclMap[T]['req'],\n options?: InvokeApiOptions & {cacheKey?: string, overwrite?: boolean}\n }): Promise> {\n o.params ??= {};\n o.options ??= {};\n\n const {method, processResult, processError, params, options} = o;\n const cache = this.apiPromisesSingleProcess;\n const cacheKey = options.cacheKey || JSON.stringify(params);\n const map = cache[method] ??= new Map();\n const oldPromise = map.get(cacheKey);\n if(oldPromise) {\n return oldPromise;\n }\n\n const getNewPromise = () => {\n const promise = map.get(cacheKey);\n return promise === p ? undefined : promise;\n };\n\n const originalPromise = this.invokeApi(method, params, options);\n const newPromise: Promise> = originalPromise.then((result) => {\n return getNewPromise() || (processResult ? processResult(result) : result);\n }, (error) => {\n const promise = getNewPromise();\n if(promise) {\n return promise;\n }\n\n if(!processError) {\n throw error;\n }\n\n return processError(error);\n });\n\n const p = newPromise.finally(() => {\n if(map.get(cacheKey) !== p) {\n return;\n }\n\n map.delete(cacheKey);\n if(!map.size) {\n delete cache[method];\n }\n });\n\n map.set(cacheKey, p);\n return p;\n }\n\n public invokeApiCacheable<\n T extends keyof MethodDeclMap,\n O extends InvokeApiOptions & Partial<{cacheSeconds: number, override: boolean, syncIfHasResult: boolean}>\n >(\n method: T,\n params: MethodDeclMap[T]['req'] = {} as any,\n options: O = {} as any\n ): O['syncIfHasResult'] extends true ? MethodDeclMap[T]['res'] | Promise : Promise {\n const cache = this.apiPromisesCacheable[method] ??= {};\n const queryJSON = JSON.stringify(params);\n let item = cache[queryJSON];\n if(item && (!options.override || !item.fulfilled)) {\n if(options.syncIfHasResult) {\n if(item.hasOwnProperty('result')) {\n return item.result;\n } else if(item.hasOwnProperty('error')) {\n throw item.error;\n }\n }\n\n return item.promise;\n }\n\n if(options.override) {\n if(item?.timeout) {\n clearTimeout(item.timeout);\n delete item.timeout;\n }\n\n delete options.override;\n }\n\n let timeout: number;\n if(options.cacheSeconds) {\n timeout = ctx.setTimeout(() => {\n if(cache[queryJSON] === item) {\n delete cache[queryJSON];\n }\n }, options.cacheSeconds * 1000);\n delete options.cacheSeconds;\n }\n\n const promise = this.invokeApi(method, params, options);\n\n const onResult = (result: any) => {\n item.result = result;\n };\n\n promise.then((result) => {\n item.result = result;\n }, (error) => {\n item.error = error;\n });\n\n item = cache[queryJSON] = {\n timestamp: Date.now(),\n fulfilled: false,\n timeout,\n promise,\n params\n };\n\n return promise;\n }\n\n public clearCache(method: T, verify: (params: MethodDeclMap[T]['req']) => boolean) {\n const cache = this.apiPromisesCacheable[method];\n if(cache) {\n for(const queryJSON in cache) {\n const item = cache[queryJSON];\n try {\n if(verify(item.params)) {\n if(item.timeout) {\n clearTimeout(item.timeout);\n }\n\n delete cache[queryJSON];\n }\n } catch(err) {\n // this.log.error('clearCache error:', err, queryJSON, item);\n }\n }\n }\n }\n\n public getConfig(overwrite?: boolean) {\n if(this.config && !overwrite) {\n return this.config;\n }\n\n return this.invokeApiSingleProcess({\n method: 'help.getConfig',\n params: {},\n processResult: (config) => {\n this.config = config;\n this.rootScope.dispatchEvent('config', config);\n return config;\n },\n options: {overwrite}\n });\n }\n\n private applyAppConfig(appConfig: MTAppConfig, save?: boolean) {\n this.appConfig = appConfig;\n ignoreRestrictionReasons(appConfig.ignore_restriction_reasons ?? []);\n\n if(save) {\n appConfig.cachedTime = Date.now();\n this.appStateManager.pushToState('appConfig', appConfig);\n }\n\n this.rootScope.dispatchEvent('app_config', appConfig);\n return appConfig;\n }\n\n public getAppConfig(overwrite?: boolean) {\n if(\n this.appConfig &&\n !overwrite &&\n (this.requestedAppConfig || (Date.now() - (this.appConfig.cachedTime || 0)) < 86400e3)\n ) {\n return this.appConfig;\n }\n\n return this.invokeApiSingleProcess({\n method: 'help.getAppConfig',\n params: {\n hash: this.appConfig?.hash || 0\n },\n processResult: async(helpAppConfig) => {\n this.requestedAppConfig = true;\n const config = (helpAppConfig as HelpAppConfig.helpAppConfig).config as any as MTAppConfig || this.appConfig;\n config.hash = (helpAppConfig as HelpAppConfig.helpAppConfig).hash || config.hash;\n return this.applyAppConfig(config, true);\n },\n options: {overwrite}\n });\n }\n\n public getTimezonesList() {\n return this.invokeApiCacheable('help.getTimezonesList', {hash: 0}, {cacheSeconds: 86400, syncIfHasResult: true});\n }\n\n public getLimit(type: ApiLimitType, isPremium?: boolean) {\n return callbackify(this.getAppConfig(), (appConfig) => {\n const map: {[type in ApiLimitType]: [keyof MTAppConfig, keyof MTAppConfig] | keyof MTAppConfig} = {\n pin: ['dialogs_pinned_limit_default', 'dialogs_pinned_limit_premium'],\n folderPin: ['dialogs_folder_pinned_limit_default', 'dialogs_folder_pinned_limit_premium'],\n folders: ['dialog_filters_limit_default', 'dialog_filters_limit_premium'],\n favedStickers: ['stickers_faved_limit_default', 'stickers_faved_limit_premium'],\n reactions: ['reactions_user_max_default', 'reactions_user_max_premium'],\n bio: ['about_length_limit_default', 'about_length_limit_premium'],\n topicPin: 'topics_pinned_limit',\n caption: ['caption_length_limit_default', 'caption_length_limit_premium'],\n chatlistInvites: ['chatlist_invites_limit_default', 'chatlist_invites_limit_premium'],\n chatlistsJoined: ['chatlists_joined_limit_default', 'chatlists_joined_limit_premium'],\n channels: ['channels_limit_default', 'channels_limit_premium'],\n links: ['channels_public_limit_default', 'channels_public_limit_premium'],\n gifs: ['saved_gifs_limit_default', 'saved_gifs_limit_premium'],\n folderPeers: ['dialog_filters_chats_limit_default', 'dialog_filters_chats_limit_premium'],\n uploadFileParts: ['upload_max_fileparts_default', 'upload_max_fileparts_premium'],\n recommendedChannels: ['recommended_channels_limit_default', 'recommended_channels_limit_premium'],\n savedPin: ['saved_dialogs_pinned_limit_default', 'saved_dialogs_pinned_limit_premium']\n };\n\n isPremium ??= this.rootScope.premium;\n\n const a = map[type];\n const key = Array.isArray(a) ? a[isPremium ? 1 : 0] : a;\n return appConfig[key] as number;\n });\n }\n\n public getPeerColors() {\n return this.apiManager.invokeApiCacheable('help.getPeerColors', {hash: 0}) as Promise;\n }\n\n public getPeerProfileColors() {\n return this.apiManager.invokeApiCacheable('help.getPeerProfileColors', {hash: 0}) as Promise;\n }\n\n public setThemeParams(themeParams: DataJSON) {\n this.themeParams = themeParams;\n }\n\n public getThemeParams() {\n return this.themeParams;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport CacheStorageController from '../lib/files/cacheStorage';\nimport AppStorage from '../lib/storage';\nimport sessionStorage from '../lib/sessionStorage';\nimport noop from './noop';\n\nexport default function toggleStorages(enabled: boolean, clearWrite: boolean) {\n return Promise.all([\n AppStorage.toggleStorage(enabled, clearWrite),\n CacheStorageController.toggleStorage(enabled, clearWrite),\n sessionStorage.toggleStorage(enabled, clearWrite)\n ]).then(noop, noop);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {UserAuth} from './mtproto_config';\nimport type {DcAuthKey, DcId, DcServerSalt, InvokeApiOptions} from '../../types';\nimport type {MethodDeclMap} from '../../layer';\nimport type TcpObfuscated from './transports/tcpObfuscated';\nimport sessionStorage from '../sessionStorage';\nimport MTPNetworker, {MTMessage} from './networker';\nimport {ConnectionType, constructTelegramWebSocketUrl, DcConfigurator, TransportType} from './dcConfigurator';\nimport {logger} from '../logger';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport App from '../../config/app';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport {IDB} from '../files/idb';\nimport CryptoWorker from '../crypto/cryptoMessagePort';\nimport ctx from '../../environment/ctx';\nimport noop from '../../helpers/noop';\nimport Modes from '../../config/modes';\nimport bytesFromHex from '../../helpers/bytes/bytesFromHex';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\nimport isObject from '../../helpers/object/isObject';\nimport pause from '../../helpers/schedulers/pause';\nimport ApiManagerMethods from './api_methods';\nimport {getEnvironment} from '../../environment/utils';\nimport toggleStorages from '../../helpers/toggleStorages';\nimport tsNow from '../../helpers/tsNow';\nimport transportController from './transports/controller';\nimport MTTransport from './transports/transport';\n\n/* class RotatableArray {\n public array: Array = [];\n private lastIndex = -1;\n\n public get() {\n this.lastIndex = clamp(this.lastIndex + 1, 0, this.array.length - 1);\n return this.array[this.lastIndex];\n }\n} */\n\nconst PREMIUM_FILE_NETWORKERS_COUNT = 6;\nconst REGULAR_FILE_NETWORKERS_COUNT = 3;\nconst DESTROY_NETWORKERS = true;\n\nexport class ApiManager extends ApiManagerMethods {\n private cachedNetworkers: {\n [transportType in TransportType]: {\n [connectionType in ConnectionType]: {\n [dcId: DcId]: MTPNetworker[]\n }\n }\n };\n\n private cachedExportPromise: {[x: number]: Promise};\n private gettingNetworkers: {[dcIdAndType: string]: Promise};\n private baseDcId: DcId;\n\n // public telegramMeNotified = false;\n\n private log: ReturnType;\n\n private afterMessageTempIds: {\n [tempId: string]: {\n messageId: string,\n promise: Promise\n }\n };\n\n private transportType: TransportType;\n\n private updatesProcessor: (obj: any) => void;\n\n private loggingOut: boolean;\n\n constructor() {\n super();\n this.log = logger('API');\n\n this.cachedNetworkers = {} as any;\n this.cachedExportPromise = {};\n this.gettingNetworkers = {};\n this.baseDcId = 0;\n this.afterMessageTempIds = {};\n\n this.transportType = Modes.transport;\n\n if(import.meta.env.VITE_MTPROTO_AUTO && Modes.multipleTransports) {\n transportController.addEventListener('transport', (transportType) => {\n this.changeTransportType(transportType);\n });\n }\n\n // * Make sure that the used autologin_token is no more than 10000 seconds old\n // * https://core.telegram.org/api/url-authorization\n const REFRESH_CONFIG_INTERVAL = (10000 - 30) * 1000;\n setInterval(() => {\n this.getConfig(true);\n }, REFRESH_CONFIG_INTERVAL);\n }\n\n protected after() {\n const result = super.after();\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateConfig: () => {\n this.getConfig(true);\n this.getAppConfig(true);\n }\n });\n\n this.rootScope.addEventListener('user_auth', () => {\n if(this.config) { // refresh configs if had a config during authorization\n this.apiUpdatesManager.processLocalUpdate({_: 'updateConfig'});\n }\n });\n\n this.rootScope.addEventListener('premium_toggle', (isPremium) => {\n this.iterateNetworkers(({networker, connectionType, dcId, transportType}) => {\n if(connectionType === 'client' || transportType !== 'websocket') {\n return;\n }\n\n const transport = networker.transport;\n if(!transport) {\n this.log.error('wow what, no transport?', networker);\n return;\n }\n\n if((transport as TcpObfuscated).connection) {\n const url = constructTelegramWebSocketUrl(dcId, connectionType, isPremium);\n (transport as TcpObfuscated).changeUrl(url);\n }\n });\n });\n\n return result;\n }\n\n // private lol = false;\n\n // constructor() {\n // MtpSingleInstanceService.start();\n\n /* AppStorage.get('dc').then((dcId) => {\n if(dcId) {\n this.baseDcId = dcId;\n }\n }); */\n // }\n\n /* public telegramMeNotify(newValue: boolean) {\n if(this.telegramMeNotified !== newValue) {\n this.telegramMeNotified = newValue;\n //telegramMeWebService.setAuthorized(this.telegramMeNotified);\n }\n } */\n\n private getTransportType(connectionType: ConnectionType) {\n let transportType: TransportType;\n if(import.meta.env.VITE_MTPROTO_HTTP_UPLOAD) {\n transportType = connectionType === 'upload' && getEnvironment().IS_SAFARI ? 'https' : 'websocket';\n // const transportType: TransportType = connectionType !== 'client' ? 'https' : 'websocket';\n } else {\n transportType = this.transportType;\n }\n\n return transportType;\n }\n\n private iterateNetworkers(callback: (o: {networker: MTPNetworker, dcId: DcId, connectionType: ConnectionType, transportType: TransportType, index: number, array: MTPNetworker[]}) => void) {\n for(const transportType in this.cachedNetworkers) {\n const connections = this.cachedNetworkers[transportType as TransportType];\n for(const connectionType in connections) {\n const dcs = connections[connectionType as ConnectionType];\n for(const dcId in dcs) {\n const networkers = dcs[dcId as any as DcId];\n networkers.forEach((networker, idx, arr) => {\n callback({\n networker,\n dcId: +dcId as DcId,\n connectionType: connectionType as ConnectionType,\n transportType: transportType as TransportType,\n index: idx,\n array: arr\n });\n });\n }\n }\n }\n }\n\n private chooseServer(dcId: DcId, connectionType: ConnectionType, transportType: TransportType) {\n return this.dcConfigurator.chooseServer(dcId, connectionType, transportType, connectionType === 'client', this.rootScope.premium);\n }\n\n public changeTransportType(transportType: TransportType) {\n const oldTransportType = this.transportType;\n if(oldTransportType === transportType) {\n return;\n }\n\n this.log('changing transport from', oldTransportType, 'to', transportType);\n\n const oldObject = this.cachedNetworkers[oldTransportType];\n const newObject = this.cachedNetworkers[transportType];\n this.cachedNetworkers[transportType] = oldObject;\n this.cachedNetworkers[oldTransportType] = newObject;\n\n this.transportType = transportType;\n\n for(const oldGetKey in this.gettingNetworkers) {\n const promise = this.gettingNetworkers[oldGetKey];\n delete this.gettingNetworkers[oldGetKey];\n\n const newGetKey = oldGetKey.replace(oldTransportType, transportType);\n this.gettingNetworkers[newGetKey] = promise;\n\n this.log('changed networker getKey from', oldGetKey, 'to', newGetKey)\n }\n\n this.iterateNetworkers((info) => {\n const transportType = this.getTransportType(info.connectionType);\n const transport = this.chooseServer(info.dcId, info.connectionType, transportType);\n this.changeNetworkerTransport(info.networker, transport);\n });\n }\n\n public async getBaseDcId() {\n if(this.baseDcId) {\n return this.baseDcId;\n }\n\n const baseDcId = await sessionStorage.get('dc');\n if(!this.baseDcId) {\n if(!baseDcId) {\n this.setBaseDcId(App.baseDcId);\n } else {\n this.baseDcId = baseDcId;\n }\n }\n\n return this.baseDcId;\n }\n\n public async setUserAuth(userAuth: UserAuth | UserId) {\n if(typeof(userAuth) === 'string' || typeof(userAuth) === 'number') {\n userAuth = {dcID: 0, date: tsNow(true), id: userAuth.toPeerId(false)};\n }\n\n this.rootScope.dispatchEvent('user_auth', userAuth);\n\n if(!userAuth.dcID) {\n const baseDcId = await this.getBaseDcId();\n userAuth.dcID = baseDcId;\n }\n\n sessionStorage.set({\n user_auth: userAuth\n });\n\n // this.telegramMeNotify(true);\n }\n\n public setBaseDcId(dcId: DcId) {\n const wasDcId = this.baseDcId;\n if(wasDcId) { // if migrated set ondrain\n this.getNetworker(wasDcId).then((networker) => {\n this.setOnDrainIfNeeded(networker);\n });\n }\n\n this.baseDcId = dcId;\n\n sessionStorage.set({\n dc: this.baseDcId\n });\n }\n\n public async logOut() {\n if(this.loggingOut) {\n return;\n }\n\n this.loggingOut = true;\n const storageKeys: Array = [];\n\n const prefix = 'dc';\n for(let dcId = 1; dcId <= 5; dcId++) {\n storageKeys.push(prefix + dcId + '_auth_key' as any);\n }\n\n // WebPushApiManager.forceUnsubscribe(); // WARNING // moved to worker's master\n const storageResult = await Promise.all(storageKeys.map((key) => sessionStorage.get(key)));\n\n const logoutPromises: Promise[] = [];\n for(let i = 0; i < storageResult.length; i++) {\n if(storageResult[i]) {\n logoutPromises.push(this.invokeApi('auth.logOut', {}, {dcId: (i + 1) as DcId, ignoreErrors: true}));\n }\n }\n\n const clear = async() => {\n this.baseDcId = undefined;\n // this.telegramMeNotify(false);\n await toggleStorages(false, true);\n IDB.closeDatabases();\n this.rootScope.dispatchEvent('logging_out');\n };\n\n setTimeout(clear, 1e3);\n\n // return;\n\n return Promise.all(logoutPromises).catch((error) => {\n error.handled = true;\n }).finally(clear)/* .then(() => {\n location.pathname = '/';\n }) */;\n }\n\n private generateNetworkerGetKey(dcId: DcId, transportType: TransportType, connectionType: ConnectionType) {\n return [dcId, transportType, connectionType].join('-');\n }\n\n public getNetworker(dcId: DcId, options: InvokeApiOptions = {}): Promise {\n const connectionType: ConnectionType = options.fileDownload ? 'download' : (options.fileUpload ? 'upload' : 'client');\n // const connectionType: ConnectionType = 'client';\n\n const transportType = this.getTransportType(connectionType);\n if(!this.cachedNetworkers[transportType]) {\n this.cachedNetworkers[transportType] = {\n client: {},\n download: {},\n upload: {}\n };\n }\n\n const cache = this.cachedNetworkers[transportType][connectionType];\n if(!(dcId in cache)) {\n cache[dcId] = [];\n }\n\n const networkers = cache[dcId];\n // @ts-ignore\n const maxNetworkers = connectionType === 'client' || transportType === 'https' ? 1 : (this.rootScope.premium ? PREMIUM_FILE_NETWORKERS_COUNT : REGULAR_FILE_NETWORKERS_COUNT);\n if(networkers.length >= maxNetworkers) {\n let networker = networkers[0];\n if(maxNetworkers > 1) {\n let foundRequests = Infinity, foundNetworker: MTPNetworker, foundIndex: number;\n for(let i = maxNetworkers - 1; i >= 0; --i) {\n const networker = networkers[i];\n const {activeRequests, isOnline} = networker;\n if(activeRequests < foundRequests && isOnline) {\n foundRequests = foundRequests;\n foundNetworker = networker;\n foundIndex = i;\n }\n }\n\n if(foundNetworker) {\n networker = foundNetworker;\n } else {\n foundIndex = maxNetworkers - 1;\n }\n\n if(foundIndex) {\n networkers.unshift(networker = networkers.splice(foundIndex, 1)[0]);\n }\n }\n\n return Promise.resolve(networker);\n }\n\n let getKey = this.generateNetworkerGetKey(dcId, transportType, connectionType);\n if(this.gettingNetworkers[getKey]) {\n return this.gettingNetworkers[getKey];\n }\n\n const ak: DcAuthKey = `dc${dcId}_auth_key` as any;\n const ss: DcServerSalt = `dc${dcId}_server_salt` as any;\n\n let transport = this.chooseServer(dcId, connectionType, transportType);\n return this.gettingNetworkers[getKey] = Promise.all([ak, ss].map((key) => sessionStorage.get(key)))\n .then(async([authKeyHex, serverSaltHex]) => {\n let networker: MTPNetworker, error: any;\n if(authKeyHex?.length === 512) {\n if(serverSaltHex?.length !== 16) {\n serverSaltHex = 'AAAAAAAAAAAAAAAA';\n }\n\n const authKey = bytesFromHex(authKeyHex);\n const authKeyId = (await CryptoWorker.invokeCrypto('sha1', authKey)).slice(-8);\n const serverSalt = bytesFromHex(serverSaltHex);\n\n networker = this.networkerFactory.getNetworker(dcId, authKey, authKeyId, serverSalt, options);\n } else {\n try { // if no saved state\n const auth = await this.authorizer.auth(dcId);\n\n authKeyHex = bytesToHex(auth.authKey);\n serverSaltHex = bytesToHex(auth.serverSalt);\n\n if(dcId === App.baseDcId) {\n sessionStorage.set({\n auth_key_fingerprint: authKeyHex.slice(0, 8)\n });\n }\n\n sessionStorage.set({\n [ak]: authKeyHex,\n [ss]: serverSaltHex\n });\n\n networker = this.networkerFactory.getNetworker(dcId, auth.authKey, auth.authKeyId, auth.serverSalt, options);\n } catch(_error) {\n error = _error;\n }\n }\n\n // ! cannot get it before this promise because simultaneous changeTransport will change nothing\n const newTransportType = this.getTransportType(connectionType);\n if(newTransportType !== transportType) {\n getKey = this.generateNetworkerGetKey(dcId, newTransportType, connectionType);\n transport.destroy();\n DcConfigurator.removeTransport(this.dcConfigurator.chosenServers, transport);\n\n if(networker) {\n transport = this.chooseServer(dcId, connectionType, newTransportType);\n }\n\n this.log('transport has been changed during authorization from', transportType, 'to', newTransportType);\n }\n\n /* networker.onConnectionStatusChange = (online) => {\n console.log('status:', online);\n }; */\n\n delete this.gettingNetworkers[getKey];\n\n if(error) {\n this.log('get networker error', error, (error as Error).stack);\n throw error;\n }\n\n this.changeNetworkerTransport(networker, transport);\n networkers.unshift(networker);\n this.setOnDrainIfNeeded(networker);\n return networker;\n });\n }\n\n public getNetworkerVoid(dcId: DcId) {\n return this.getNetworker(dcId).then(noop, noop);\n }\n\n private changeNetworkerTransport(networker: MTPNetworker, transport?: MTTransport) {\n const oldTransport = networker.transport;\n if(oldTransport) {\n DcConfigurator.removeTransport(this.dcConfigurator.chosenServers, oldTransport);\n }\n\n networker.changeTransport(transport);\n }\n\n private onNetworkerDrain(networker: MTPNetworker) {\n this.log('networker drain', networker.dcId);\n networker.onDrain = undefined;\n this.changeNetworkerTransport(networker);\n networker.destroy();\n this.networkerFactory.removeNetworker(networker);\n DcConfigurator.removeTransport(this.cachedNetworkers, networker);\n }\n\n public setOnDrainIfNeeded(networker: MTPNetworker) {\n if(!DESTROY_NETWORKERS || networker.onDrain) {\n return;\n }\n\n const checkPromise: Promise = networker.isFileNetworker ?\n Promise.resolve(true) :\n this.getBaseDcId().then((baseDcId) => networker.dcId !== baseDcId);\n checkPromise.then((canRelease) => {\n if(networker.onDrain) {\n return;\n }\n\n if(canRelease) {\n networker.onDrain = () => this.onNetworkerDrain(networker);\n networker.setDrainTimeout();\n }\n });\n }\n\n public setUpdatesProcessor(callback: (obj: any) => void) {\n this.updatesProcessor = callback;\n this.networkerFactory.setUpdatesProcessor(callback);\n }\n\n public invokeApi(method: T, params: MethodDeclMap[T]['req'] = {}, options: InvokeApiOptions = {}): CancellablePromise {\n // /////this.log('Invoke api', method, params, options);\n\n /* if(!this.lol) {\n networkerFactory.updatesProcessor({_: 'new_session_created'}, true);\n this.lol = true;\n } */\n\n const deferred = deferredPromise();\n\n let {afterMessageId, prepareTempMessageId} = options;\n if(prepareTempMessageId) {\n deferred.then(() => {\n delete this.afterMessageTempIds[prepareTempMessageId];\n });\n }\n\n if(MOUNT_CLASS_TO) {\n const startTime = Date.now();\n const interval = ctx.setInterval(() => {\n if(!cachedNetworker || !cachedNetworker.isStopped()) {\n this.log.error('Request is still processing:', method, params, options, 'time:', (Date.now() - startTime) / 1000);\n }\n // this.cachedUploadNetworkers[2].requestMessageStatus();\n }, 5e3);\n\n deferred.catch(noop).finally(() => {\n clearInterval(interval);\n });\n }\n\n const rejectPromise = async(error: ApiError) => {\n if(!error) {\n error = {type: 'ERROR_EMPTY'};\n } else if(!isObject(error)) {\n error = {message: error};\n }\n\n if((error.code === 401 && error.type === 'SESSION_REVOKED') ||\n (error.code === 406 && error.type === 'AUTH_KEY_DUPLICATED')) {\n this.logOut();\n }\n\n if(options.ignoreErrors) {\n throw error;\n }\n\n if(error.code === 406) {\n error.handled = true;\n }\n\n if(!options.noErrorBox) {\n error.input = method;\n // error.stack = stack || (error.originalError && error.originalError.stack) || error.stack || (new Error()).stack;\n setTimeout(() => {\n if(!error.handled) {\n if(error.code === 401) {\n this.logOut();\n } else {\n // ErrorService.show({error: error}); // WARNING\n }\n\n error.handled = true;\n }\n }, 100);\n }\n\n throw error;\n };\n\n let dcId: DcId;\n\n let cachedNetworker: MTPNetworker;\n // const stack = (new Error()).stack || 'empty stack';\n const performRequest = (): Promise => {\n if(afterMessageId) {\n const after = this.afterMessageTempIds[afterMessageId];\n if(after) {\n options.afterMessageId = after.messageId;\n }\n }\n\n const promise = cachedNetworker.wrapApiCall(method, params, options);\n\n if(prepareTempMessageId) {\n this.afterMessageTempIds[prepareTempMessageId] = {\n messageId: (options as MTMessage).messageId,\n promise: deferred\n };\n }\n\n return promise.catch((error: ApiError) => {\n // if(!options.ignoreErrors) {\n if(error.type !== 'FILE_REFERENCE_EXPIRED'/* && error.type !== 'MSG_WAIT_FAILED' */) {\n this.log.error('Error', error.code, error.type, this.baseDcId, dcId, method, params);\n }\n\n if(error.code === 401 && this.baseDcId === dcId) {\n if(error.type !== 'SESSION_PASSWORD_NEEDED') {\n sessionStorage.delete('dc')\n sessionStorage.delete('user_auth'); // ! возможно тут вообще не нужно это делать, но нужно проверить случай с USER_DEACTIVATED (https://core.telegram.org/api/errors)\n // this.telegramMeNotify(false);\n }\n\n throw error;\n } else if(error.code === 401 && this.baseDcId && dcId !== this.baseDcId) {\n if(this.cachedExportPromise[dcId] === undefined) {\n const promise = new Promise((exportResolve, exportReject) => {\n this.invokeApi('auth.exportAuthorization', {dc_id: dcId}, {noErrorBox: true}).then((exportedAuth) => {\n this.invokeApi('auth.importAuthorization', {\n id: exportedAuth.id,\n bytes: exportedAuth.bytes\n }, {dcId, noErrorBox: true}).then(exportResolve, exportReject);\n }, exportReject);\n });\n\n this.cachedExportPromise[dcId] = promise;\n }\n\n return this.cachedExportPromise[dcId].then(() => performRequest());\n } else if(error.code === 303) {\n const newDcId = +error.type.match(/^(PHONE_MIGRATE_|NETWORK_MIGRATE_|USER_MIGRATE_|STATS_MIGRATE_)(\\d+)/)[2] as DcId;\n if(newDcId !== dcId) {\n if(options.dcId) {\n options.dcId = newDcId;\n } else {\n this.setBaseDcId(newDcId);\n }\n\n return this.invokeApi(method, params, options);\n }\n } else if(error.code === 400 && error.type.indexOf('FILE_MIGRATE') === 0) {\n const newDcId = +error.type.match(/^(FILE_MIGRATE_)(\\d+)/)[2] as DcId;\n if(newDcId !== dcId) {\n options.dcId = newDcId;\n return this.invokeApi(method, params, options);\n } else {\n throw error;\n }\n } else if(error.code === 400 && error.type === 'CONNECTION_NOT_INITED') {\n this.networkerFactory.unsetConnectionInited();\n return performRequest();\n } else if(!options.rawError && error.code === 420 && !error.type.includes('SLOWMODE_WAIT')) {\n const match = error.type.match(/^FLOOD_WAIT_(\\d+)/) || error.type.match(/_(\\d+)_?/);\n let waitTime: number;\n if(match) {\n waitTime = +match[1];\n }\n\n if(error.type.includes('FLOOD_PREMIUM_WAIT')) {\n Promise.all([\n this.getAppConfig(),\n this.appStateManager.getState()\n ]).then(([appConfig, state]) => {\n const timestamp = tsNow(true);\n const shouldShowToast = (timestamp - (state.shownUploadSpeedTimestamp || 0)) >= appConfig.upload_premium_speedup_notify_period;\n if(!shouldShowToast) {\n return;\n }\n\n this.appStateManager.pushToState('shownUploadSpeedTimestamp', timestamp);\n this.rootScope.dispatchEvent('file_speed_limited', {\n increaseTimes: (options.fileUpload ? appConfig.upload_premium_speedup_upload : appConfig.upload_premium_speedup_download) || 10,\n isUpload: !!options.fileUpload\n });\n });\n }\n\n waitTime ||= 1;\n\n if(waitTime > (options.floodMaxTimeout ?? 60) && !options.prepareTempMessageId) {\n throw error;\n }\n\n return pause(waitTime/* (waitTime + 5) */ * 1000).then(() => performRequest());\n } else if(!options.rawError && ['MSG_WAIT_FAILED', 'MSG_WAIT_TIMEOUT'].includes(error.type)) {\n const after = this.afterMessageTempIds[afterMessageId];\n\n afterMessageId = undefined;\n delete options.afterMessageId;\n\n if(after) return after.promise.then(() => performRequest());\n else return performRequest();\n } else if(!options.rawError && error.code === 500) {\n const now = Date.now();\n if(options.stopTime) {\n if(now >= options.stopTime) {\n throw error;\n }\n }\n\n options.waitTime = options.waitTime ? Math.min(60, options.waitTime * 1.5) : 1;\n return pause(options.waitTime * 1000).then(() => performRequest());\n } else if(error.type === 'UNKNOWN' || error.type === 'MTPROTO_CLUSTER_INVALID') { // cluster invalid - request from regular user to premium endpoint\n return pause(1000).then(() => performRequest());\n } else {\n throw error;\n }\n });\n }\n\n let p: Promise;\n if(dcId = (options.dcId || this.baseDcId)) {\n p = this.getNetworker(dcId, options);\n } else {\n p = this.getBaseDcId().then((baseDcId) => this.getNetworker(dcId = baseDcId, options));\n }\n\n p.then((networker) => {\n cachedNetworker = networker;\n const promise = performRequest();\n cachedNetworker.attachPromise(deferred, options as MTMessage);\n return promise;\n })\n .then(deferred.resolve.bind(deferred))\n .catch(rejectPromise)\n .catch(deferred.reject.bind(deferred));\n\n return deferred;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport applyMixins from '../../helpers/applyMixins';\nimport EventListenerBase from '../../helpers/eventListenerBase';\nimport {AppManager} from '../appManagers/manager';\n\nexport type StatePeerType = 'recentSearch' | 'topPeer' | 'dialog' | 'contact' | 'topMessage' | 'self';\n\ntype PeersStorageKey = `${StatePeerType}_${string | PeerId}` | StatePeerType;\n\nclass PeersStorage {\n private neededPeers: Map> = new Map();\n private singlePeerMap: Map> = new Map();\n\n constructor() {\n this._constructor(false);\n }\n\n protected after() {\n this.rootScope.addEventListener('user_auth', () => {\n this.requestPeer(this.appPeersManager.peerId, 'self');\n });\n }\n\n public requestPeer(peerId: PeerId, key: PeersStorageKey) {\n let set = this.neededPeers.get(peerId);\n if(set && set.has(key)) {\n return;\n }\n\n if(!set) {\n set = new Set();\n this.neededPeers.set(peerId, set);\n }\n\n set.add(key);\n\n this.dispatchEvent('peerNeeded', peerId);\n }\n\n public releasePeer(peerId: PeerId, key: PeersStorageKey) {\n const set = this.neededPeers.get(peerId);\n if(!set) {\n return;\n }\n\n set.delete(key);\n\n if(!set.size) {\n this.neededPeers.delete(peerId);\n this.dispatchEvent('peerUnneeded', peerId);\n }\n }\n\n public requestPeersForKey(peerIds: Set | number[], key: PeersStorageKey) {\n if(Array.isArray(peerIds)) {\n peerIds = new Set(peerIds);\n }\n\n let set = this.singlePeerMap.get(key);\n if(set) {\n for(const peerId of set) {\n if(peerIds.has(peerId)) {\n continue;\n }\n\n this.releasePeer(peerId, key);\n set.delete(peerId);\n }\n\n if(!set.size && !peerIds.size) {\n this.singlePeerMap.delete(key);\n return;\n }\n }\n\n if(peerIds.size) {\n if(!set) {\n set = new Set();\n this.singlePeerMap.set(key, set);\n }\n\n for(const peerId of peerIds) {\n if(set.has(peerId)) {\n continue;\n }\n\n this.requestPeer(peerId, key);\n set.add(peerId);\n }\n }\n }\n\n public isPeerNeeded(peerId: PeerId) {\n return this.neededPeers.has(peerId);\n }\n}\n\ninterface PeersStorage extends EventListenerBase<{\n peerNeeded: (peerId: PeerId) => void,\n peerUnneeded: (peerId: PeerId) => void,\n}>, AppManager {}\napplyMixins(PeersStorage, [EventListenerBase, AppManager]);\n\nexport default PeersStorage;\n","import type {ThumbCache} from '../../thumbs';\n\nexport default function generateEmptyThumb(type: string): ThumbCache {\n return {downloaded: 0, url: '', type};\n}\n","export default function getStickerThumbKey(docId: DocId, toneIndex?: number | string) {\n return docId + (toneIndex !== undefined ? '-' + toneIndex : '');\n}\n","import type {MyPhoto} from '../../../appManagers/appPhotosManager';\nimport type {ThumbStorageMedia} from '../../thumbs';\nimport type {WebDocument} from '../../../../layer';\nimport {getFileNameByLocation} from '../../../../helpers/fileName';\nimport isWebFileLocation from '../../../appManagers/utils/webFiles/isWebFileLocation';\n\nexport default function getThumbKey(media: ThumbStorageMedia) {\n if(isWebFileLocation(media)) {\n return getFileNameByLocation(media);\n }\n\n return media._ + ((media as MyPhoto).id ?? (media as WebDocument).url);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {InputWebFileLocation, WebDocument} from '../../layer';\nimport type {MyDocument} from '../appManagers/appDocsManager';\nimport type {MyPhoto} from '../appManagers/appPhotosManager';\nimport {joinDeepPath} from '../../helpers/object/setDeepProperty';\nimport MTProtoMessagePort from '../mtproto/mtprotoMessagePort';\nimport {THUMB_TYPE_FULL} from '../mtproto/mtproto_config';\nimport generateEmptyThumb from './utils/thumbs/generateEmptyThumb';\nimport getStickerThumbKey from './utils/thumbs/getStickerThumbKey';\nimport getThumbKey from './utils/thumbs/getThumbKey';\n\nexport type ThumbCache = {\n downloaded: number,\n url: string,\n type: string\n};\n\nexport type ThumbsCache = {\n [key: string]: {\n [size: string]: ThumbCache\n }\n};\n\nconst thumbFullSize = THUMB_TYPE_FULL;\n\nexport type ThumbStorageMedia = MyPhoto | MyDocument | WebDocument | InputWebFileLocation;\n\nexport type StickerCachedThumbs = {\n [docIdAndToneIndex: DocId]: StickerCachedThumb\n};\nexport type StickerCachedThumb = {\n url: string,\n w: number,\n h: number\n};\n\nexport default class ThumbsStorage {\n private thumbsCache: ThumbsCache = {};\n private stickerCachedThumbs: StickerCachedThumbs = {};\n\n public getCacheContext(\n media: ThumbStorageMedia,\n thumbSize: string = thumbFullSize,\n key = getThumbKey(media)\n ): ThumbCache {\n /* if(media._ === 'photo' && thumbSize !== 'i') {\n thumbSize = thumbFullSize;\n } */\n\n const cache = this.thumbsCache[key] ??= {};\n return cache[thumbSize] ??= generateEmptyThumb(thumbSize);\n }\n\n private mirrorCacheContext(key: string, thumbSize: string, value?: ThumbCache) {\n MTProtoMessagePort.getInstance().invokeVoid('mirror', {\n name: 'thumbs',\n // key: [key, thumbSize].filter(Boolean).join('.'),\n key: joinDeepPath(key, thumbSize),\n value\n });\n }\n\n private mirrorStickerThumb(key: string, value?: StickerCachedThumb) {\n MTProtoMessagePort.getInstance().invokeVoid('mirror', {\n name: 'stickerThumbs',\n key,\n value\n });\n }\n\n public mirrorAll(port?: MessageEventSource) {\n const instance = MTProtoMessagePort.getInstance();\n instance.invokeVoid('mirror', {\n name: 'thumbs',\n value: this.thumbsCache\n }, port);\n\n instance.invokeVoid('mirror', {\n name: 'stickerThumbs',\n value: this.stickerCachedThumbs\n }, port);\n }\n\n public setCacheContextURL(\n media: ThumbStorageMedia,\n thumbSize: string = thumbFullSize,\n url: string,\n downloaded: number = 0,\n key = getThumbKey(media)\n ) {\n const cacheContext = this.getCacheContext(media, thumbSize, key);\n cacheContext.url = url;\n cacheContext.downloaded = downloaded;\n this.mirrorCacheContext(key, thumbSize, cacheContext);\n return cacheContext;\n }\n\n public deleteCacheContext(\n media: ThumbStorageMedia,\n thumbSize: string = thumbFullSize,\n key = getThumbKey(media)\n ) {\n const cache = this.thumbsCache[key];\n if(cache) {\n this.mirrorCacheContext(key, thumbSize);\n delete cache[thumbSize];\n }\n }\n\n public getStickerCachedThumb(docId: DocId, toneIndex: number | string) {\n return this.stickerCachedThumbs[getStickerThumbKey(docId, toneIndex)];\n }\n\n public saveStickerPreview(docId: DocId, blob: Blob, width: number, height: number, toneIndex: number | string) {\n const key = getStickerThumbKey(docId, toneIndex);\n const thumb = this.stickerCachedThumbs[key];\n if(thumb && thumb.w >= width && thumb.h >= height) {\n return;\n }\n\n const cache = this.stickerCachedThumbs[key] = {\n url: URL.createObjectURL(blob),\n w: width,\n h: height\n };\n\n this.mirrorStickerThumb(key, cache);\n }\n\n public clearColoredStickerThumbs() {\n for(const key in this.stickerCachedThumbs) {\n const [, toneIndex] = key.split('-');\n if(toneIndex && isNaN(+toneIndex)) {\n const thumb = this.stickerCachedThumbs[key];\n URL.revokeObjectURL(thumb.url);\n delete this.stickerCachedThumbs[key];\n this.mirrorStickerThumb(key);\n }\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport type MTProtoConstructor = {\n id: number,\n predicate: string,\n params: Array<{\n name: string,\n type: string\n }>,\n type: string\n};\n\nexport type MTProtoMethod = {\n id: number,\n method: string,\n params: Array<{\n name: string,\n type: string\n }>,\n type: string\n};\n\n// eslint-disable-next-line quotes, comma-spacing\nexport default {\"MTProto\":{\"constructors\":[{\"id\":481674261,\"predicate\":\"vector\",\"params\":[],\"type\":\"Vector t\"},{\"id\":85337187,\"predicate\":\"resPQ\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"server_public_key_fingerprints\",\"type\":\"Vector\"}],\"type\":\"ResPQ\"},{\"id\":-1443537003,\"predicate\":\"p_q_inner_data_dc\",\"params\":[{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce\",\"type\":\"int256\"},{\"name\":\"dc\",\"type\":\"int\"}],\"type\":\"P_Q_inner_data\"},{\"id\":1459478408,\"predicate\":\"p_q_inner_data_temp_dc\",\"params\":[{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce\",\"type\":\"int256\"},{\"name\":\"dc\",\"type\":\"int\"},{\"name\":\"expires_in\",\"type\":\"int\"}],\"type\":\"P_Q_inner_data\"},{\"id\":-790100132,\"predicate\":\"server_DH_params_ok\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"encrypted_answer\",\"type\":\"bytes\"}],\"type\":\"Server_DH_Params\"},{\"id\":-1249309254,\"predicate\":\"server_DH_inner_data\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"g\",\"type\":\"int\"},{\"name\":\"dh_prime\",\"type\":\"bytes\"},{\"name\":\"g_a\",\"type\":\"bytes\"},{\"name\":\"server_time\",\"type\":\"int\"}],\"type\":\"Server_DH_inner_data\"},{\"id\":1715713620,\"predicate\":\"client_DH_inner_data\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"retry_id\",\"type\":\"long\"},{\"name\":\"g_b\",\"type\":\"bytes\"}],\"type\":\"Client_DH_Inner_Data\"},{\"id\":1003222836,\"predicate\":\"dh_gen_ok\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash1\",\"type\":\"int128\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":1188831161,\"predicate\":\"dh_gen_retry\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash2\",\"type\":\"int128\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":-1499615742,\"predicate\":\"dh_gen_fail\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash3\",\"type\":\"int128\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":1973679973,\"predicate\":\"bind_auth_key_inner\",\"params\":[{\"name\":\"nonce\",\"type\":\"long\"},{\"name\":\"temp_auth_key_id\",\"type\":\"long\"},{\"name\":\"perm_auth_key_id\",\"type\":\"long\"},{\"name\":\"temp_session_id\",\"type\":\"long\"},{\"name\":\"expires_at\",\"type\":\"int\"}],\"type\":\"BindAuthKeyInner\"},{\"id\":-212046591,\"predicate\":\"rpc_result\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"result\",\"type\":\"Object\"}],\"type\":\"RpcResult\"},{\"id\":558156313,\"predicate\":\"rpc_error\",\"params\":[{\"name\":\"error_code\",\"type\":\"int\"},{\"name\":\"error_message\",\"type\":\"string\"}],\"type\":\"RpcError\"},{\"id\":1579864942,\"predicate\":\"rpc_answer_unknown\",\"params\":[],\"type\":\"RpcDropAnswer\"},{\"id\":-847714938,\"predicate\":\"rpc_answer_dropped_running\",\"params\":[],\"type\":\"RpcDropAnswer\"},{\"id\":-1539647305,\"predicate\":\"rpc_answer_dropped\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"seq_no\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"int\"}],\"type\":\"RpcDropAnswer\"},{\"id\":155834844,\"predicate\":\"future_salt\",\"params\":[{\"name\":\"valid_since\",\"type\":\"int\"},{\"name\":\"valid_until\",\"type\":\"int\"},{\"name\":\"salt\",\"type\":\"long\"}],\"type\":\"FutureSalt\"},{\"id\":-1370486635,\"predicate\":\"future_salts\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"now\",\"type\":\"int\"},{\"name\":\"salts\",\"type\":\"vector\"}],\"type\":\"FutureSalts\"},{\"id\":880243653,\"predicate\":\"pong\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"ping_id\",\"type\":\"long\"}],\"type\":\"Pong\"},{\"id\":-501201412,\"predicate\":\"destroy_session_ok\",\"params\":[{\"name\":\"session_id\",\"type\":\"long\"}],\"type\":\"DestroySessionRes\"},{\"id\":1658015945,\"predicate\":\"destroy_session_none\",\"params\":[{\"name\":\"session_id\",\"type\":\"long\"}],\"type\":\"DestroySessionRes\"},{\"id\":-1631450872,\"predicate\":\"new_session_created\",\"params\":[{\"name\":\"first_msg_id\",\"type\":\"long\"},{\"name\":\"unique_id\",\"type\":\"long\"},{\"name\":\"server_salt\",\"type\":\"long\"}],\"type\":\"NewSession\"},{\"id\":1945237724,\"predicate\":\"msg_container\",\"params\":[{\"name\":\"messages\",\"type\":\"vector<%Message>\"}],\"type\":\"MessageContainer\"},{\"id\":1538843921,\"predicate\":\"message\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"seqno\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"int\"},{\"name\":\"body\",\"type\":\"Object\"}],\"type\":\"Message\"},{\"id\":-530561358,\"predicate\":\"msg_copy\",\"params\":[{\"name\":\"orig_message\",\"type\":\"Message\"}],\"type\":\"MessageCopy\"},{\"id\":812830625,\"predicate\":\"gzip_packed\",\"params\":[{\"name\":\"packed_data\",\"type\":\"bytes\"}],\"type\":\"Object\"},{\"id\":1658238041,\"predicate\":\"msgs_ack\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"}],\"type\":\"MsgsAck\"},{\"id\":-1477445615,\"predicate\":\"bad_msg_notification\",\"params\":[{\"name\":\"bad_msg_id\",\"type\":\"long\"},{\"name\":\"bad_msg_seqno\",\"type\":\"int\"},{\"name\":\"error_code\",\"type\":\"int\"}],\"type\":\"BadMsgNotification\"},{\"id\":-307542917,\"predicate\":\"bad_server_salt\",\"params\":[{\"name\":\"bad_msg_id\",\"type\":\"long\"},{\"name\":\"bad_msg_seqno\",\"type\":\"int\"},{\"name\":\"error_code\",\"type\":\"int\"},{\"name\":\"new_server_salt\",\"type\":\"long\"}],\"type\":\"BadMsgNotification\"},{\"id\":2105940488,\"predicate\":\"msg_resend_req\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"}],\"type\":\"MsgResendReq\"},{\"id\":-630588590,\"predicate\":\"msgs_state_req\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"}],\"type\":\"MsgsStateReq\"},{\"id\":81704317,\"predicate\":\"msgs_state_info\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"info\",\"type\":\"bytes\"}],\"type\":\"MsgsStateInfo\"},{\"id\":-1933520591,\"predicate\":\"msgs_all_info\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"},{\"name\":\"info\",\"type\":\"bytes\"}],\"type\":\"MsgsAllInfo\"},{\"id\":661470918,\"predicate\":\"msg_detailed_info\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"answer_msg_id\",\"type\":\"long\"},{\"name\":\"bytes\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"int\"}],\"type\":\"MsgDetailedInfo\"},{\"id\":-2137147681,\"predicate\":\"msg_new_detailed_info\",\"params\":[{\"name\":\"answer_msg_id\",\"type\":\"long\"},{\"name\":\"bytes\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"int\"}],\"type\":\"MsgDetailedInfo\"},{\"id\":-161422892,\"predicate\":\"destroy_auth_key_ok\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"},{\"id\":178201177,\"predicate\":\"destroy_auth_key_none\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"},{\"id\":-368010477,\"predicate\":\"destroy_auth_key_fail\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"}],\"methods\":[{\"id\":-1099002127,\"method\":\"req_pq_multi\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"}],\"type\":\"ResPQ\"},{\"id\":-686627650,\"method\":\"req_DH_params\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"public_key_fingerprint\",\"type\":\"long\"},{\"name\":\"encrypted_data\",\"type\":\"bytes\"}],\"type\":\"Server_DH_Params\"},{\"id\":-184262881,\"method\":\"set_client_DH_params\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"encrypted_data\",\"type\":\"bytes\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":1491380032,\"method\":\"rpc_drop_answer\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"}],\"type\":\"RpcDropAnswer\"},{\"id\":-1188971260,\"method\":\"get_future_salts\",\"params\":[{\"name\":\"num\",\"type\":\"int\"}],\"type\":\"FutureSalts\"},{\"id\":2059302892,\"method\":\"ping\",\"params\":[{\"name\":\"ping_id\",\"type\":\"long\"}],\"type\":\"Pong\"},{\"id\":-213746804,\"method\":\"ping_delay_disconnect\",\"params\":[{\"name\":\"ping_id\",\"type\":\"long\"},{\"name\":\"disconnect_delay\",\"type\":\"int\"}],\"type\":\"Pong\"},{\"id\":-414113498,\"method\":\"destroy_session\",\"params\":[{\"name\":\"session_id\",\"type\":\"long\"}],\"type\":\"DestroySessionRes\"},{\"id\":-1835453025,\"method\":\"http_wait\",\"params\":[{\"name\":\"max_delay\",\"type\":\"int\"},{\"name\":\"wait_after\",\"type\":\"int\"},{\"name\":\"max_wait\",\"type\":\"int\"}],\"type\":\"HttpWait\"},{\"id\":-784117408,\"method\":\"destroy_auth_key\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"}]},\"API\":{\"constructors\":[{\"id\":-1132882121,\"predicate\":\"boolFalse\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1720552011,\"predicate\":\"boolTrue\",\"params\":[],\"type\":\"Bool\"},{\"id\":1072550713,\"predicate\":\"true\",\"params\":[],\"type\":\"True\"},{\"id\":481674261,\"predicate\":\"vector\",\"params\":[],\"type\":\"Vector t\"},{\"id\":-994444869,\"predicate\":\"error\",\"params\":[{\"name\":\"code\",\"type\":\"int\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"Error\"},{\"id\":1450380236,\"predicate\":\"null\",\"params\":[],\"type\":\"Null\"},{\"id\":2134579434,\"predicate\":\"inputPeerEmpty\",\"params\":[],\"type\":\"InputPeer\"},{\"id\":2107670217,\"predicate\":\"inputPeerSelf\",\"params\":[],\"type\":\"InputPeer\"},{\"id\":900291769,\"predicate\":\"inputPeerChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":-1182234929,\"predicate\":\"inputUserEmpty\",\"params\":[],\"type\":\"InputUser\"},{\"id\":-138301121,\"predicate\":\"inputUserSelf\",\"params\":[],\"type\":\"InputUser\"},{\"id\":-208488460,\"predicate\":\"inputPhoneContact\",\"params\":[{\"name\":\"client_id\",\"type\":\"long\"},{\"name\":\"phone\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"}],\"type\":\"InputContact\"},{\"id\":-181407105,\"predicate\":\"inputFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"md5_checksum\",\"type\":\"string\"}],\"type\":\"InputFile\"},{\"id\":-1771768449,\"predicate\":\"inputMediaEmpty\",\"params\":[],\"type\":\"InputMedia\"},{\"id\":505969924,\"predicate\":\"inputMediaUploadedPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"spoiler\",\"type\":\"flags.2?true\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"stickers\",\"type\":\"flags.0?Vector\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.1?int\"}],\"type\":\"InputMedia\"},{\"id\":-1279654347,\"predicate\":\"inputMediaPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"spoiler\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"InputPhoto\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":-104578748,\"predicate\":\"inputMediaGeoPoint\",\"params\":[{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"}],\"type\":\"InputMedia\"},{\"id\":-122978821,\"predicate\":\"inputMediaContact\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":480546647,\"predicate\":\"inputChatPhotoEmpty\",\"params\":[],\"type\":\"InputChatPhoto\"},{\"id\":-1110593856,\"predicate\":\"inputChatUploadedPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"flags.0?InputFile\"},{\"name\":\"video\",\"type\":\"flags.1?InputFile\"},{\"name\":\"video_start_ts\",\"type\":\"flags.2?double\"},{\"name\":\"video_emoji_markup\",\"type\":\"flags.3?VideoSize\"}],\"type\":\"InputChatPhoto\"},{\"id\":-1991004873,\"predicate\":\"inputChatPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"InputChatPhoto\"},{\"id\":-457104426,\"predicate\":\"inputGeoPointEmpty\",\"params\":[],\"type\":\"InputGeoPoint\"},{\"id\":1210199983,\"predicate\":\"inputGeoPoint\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"lat\",\"type\":\"double\"},{\"name\":\"long\",\"type\":\"double\"},{\"name\":\"accuracy_radius\",\"type\":\"flags.0?int\"}],\"type\":\"InputGeoPoint\"},{\"id\":483901197,\"predicate\":\"inputPhotoEmpty\",\"params\":[],\"type\":\"InputPhoto\"},{\"id\":1001634122,\"predicate\":\"inputPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"}],\"type\":\"InputPhoto\"},{\"id\":-539317279,\"predicate\":\"inputFileLocation\",\"params\":[{\"name\":\"volume_id\",\"type\":\"long\"},{\"name\":\"local_id\",\"type\":\"int\"},{\"name\":\"secret\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"}],\"type\":\"InputFileLocation\"},{\"id\":1498486562,\"predicate\":\"peerUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"Peer\"},{\"id\":918946202,\"predicate\":\"peerChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"Peer\"},{\"id\":-1432995067,\"predicate\":\"storage.fileUnknown\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":1086091090,\"predicate\":\"storage.filePartial\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":8322574,\"predicate\":\"storage.fileJpeg\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":-891180321,\"predicate\":\"storage.fileGif\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":172975040,\"predicate\":\"storage.filePng\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":-1373745011,\"predicate\":\"storage.filePdf\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":1384777335,\"predicate\":\"storage.fileMp3\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":1258941372,\"predicate\":\"storage.fileMov\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":-1278304028,\"predicate\":\"storage.fileMp4\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":276907596,\"predicate\":\"storage.fileWebp\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":-742634630,\"predicate\":\"userEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"User\"},{\"id\":1326562017,\"predicate\":\"userProfilePhotoEmpty\",\"params\":[],\"type\":\"UserProfilePhoto\"},{\"id\":-2100168954,\"predicate\":\"userProfilePhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_video\",\"type\":\"flags.0?true\"},{\"name\":\"personal\",\"type\":\"flags.2?true\"},{\"name\":\"photo_id\",\"type\":\"long\"},{\"name\":\"stripped_thumb\",\"type\":\"flags.1?bytes\"},{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"UserProfilePhoto\"},{\"id\":164646985,\"predicate\":\"userStatusEmpty\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":-306628279,\"predicate\":\"userStatusOnline\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"UserStatus\"},{\"id\":9203775,\"predicate\":\"userStatusOffline\",\"params\":[{\"name\":\"was_online\",\"type\":\"int\"}],\"type\":\"UserStatus\"},{\"id\":693512293,\"predicate\":\"chatEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"Chat\"},{\"id\":1103884886,\"predicate\":\"chat\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"left\",\"type\":\"flags.2?true\"},{\"name\":\"deactivated\",\"type\":\"flags.5?true\"},{\"name\":\"call_active\",\"type\":\"flags.23?true\"},{\"name\":\"call_not_empty\",\"type\":\"flags.24?true\"},{\"name\":\"noforwards\",\"type\":\"flags.25?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"ChatPhoto\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"migrated_to\",\"type\":\"flags.6?InputChannel\"},{\"name\":\"admin_rights\",\"type\":\"flags.14?ChatAdminRights\"},{\"name\":\"default_banned_rights\",\"type\":\"flags.18?ChatBannedRights\"}],\"type\":\"Chat\"},{\"id\":1704108455,\"predicate\":\"chatForbidden\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Chat\"},{\"id\":640893467,\"predicate\":\"chatFull\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_set_username\",\"type\":\"flags.7?true\"},{\"name\":\"has_scheduled\",\"type\":\"flags.8?true\"},{\"name\":\"translations_disabled\",\"type\":\"flags.19?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"participants\",\"type\":\"ChatParticipants\"},{\"name\":\"chat_photo\",\"type\":\"flags.2?Photo\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"exported_invite\",\"type\":\"flags.13?ExportedChatInvite\"},{\"name\":\"bot_info\",\"type\":\"flags.3?Vector\"},{\"name\":\"pinned_msg_id\",\"type\":\"flags.6?int\"},{\"name\":\"folder_id\",\"type\":\"flags.11?int\"},{\"name\":\"call\",\"type\":\"flags.12?InputGroupCall\"},{\"name\":\"ttl_period\",\"type\":\"flags.14?int\"},{\"name\":\"groupcall_default_join_as\",\"type\":\"flags.15?Peer\"},{\"name\":\"theme_emoticon\",\"type\":\"flags.16?string\"},{\"name\":\"requests_pending\",\"type\":\"flags.17?int\"},{\"name\":\"recent_requesters\",\"type\":\"flags.17?Vector\"},{\"name\":\"available_reactions\",\"type\":\"flags.18?ChatReactions\"},{\"name\":\"reactions_limit\",\"type\":\"flags.20?int\"}],\"type\":\"ChatFull\"},{\"id\":-1070776313,\"predicate\":\"chatParticipant\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"inviter_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChatParticipant\"},{\"id\":-2023500831,\"predicate\":\"chatParticipantsForbidden\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"self_participant\",\"type\":\"flags.0?ChatParticipant\"}],\"type\":\"ChatParticipants\"},{\"id\":1018991608,\"predicate\":\"chatParticipants\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"ChatParticipants\"},{\"id\":935395612,\"predicate\":\"chatPhotoEmpty\",\"params\":[],\"type\":\"ChatPhoto\"},{\"id\":476978193,\"predicate\":\"chatPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_video\",\"type\":\"flags.0?true\"},{\"name\":\"photo_id\",\"type\":\"long\"},{\"name\":\"stripped_thumb\",\"type\":\"flags.1?bytes\"},{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"ChatPhoto\"},{\"id\":-1868117372,\"predicate\":\"messageEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"peer_id\",\"type\":\"flags.0?Peer\"}],\"type\":\"Message\"},{\"id\":-1808510398,\"predicate\":\"message\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"post\",\"type\":\"flags.14?true\"},{\"name\":\"from_scheduled\",\"type\":\"flags.18?true\"},{\"name\":\"legacy\",\"type\":\"flags.19?true\"},{\"name\":\"edit_hide\",\"type\":\"flags.21?true\"},{\"name\":\"pinned\",\"type\":\"flags.24?true\"},{\"name\":\"noforwards\",\"type\":\"flags.26?true\"},{\"name\":\"invert_media\",\"type\":\"flags.27?true\"},{\"name\":\"flags2\",\"type\":\"#\"},{\"name\":\"offline\",\"type\":\"flags2.1?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"flags.8?Peer\"},{\"name\":\"from_boosts_applied\",\"type\":\"flags.29?int\"},{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"saved_peer_id\",\"type\":\"flags.28?Peer\"},{\"name\":\"fwd_from\",\"type\":\"flags.2?MessageFwdHeader\"},{\"name\":\"via_bot_id\",\"type\":\"flags.11?long\"},{\"name\":\"via_business_bot_id\",\"type\":\"flags2.0?long\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"media\",\"type\":\"flags.9?MessageMedia\"},{\"name\":\"reply_markup\",\"type\":\"flags.6?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector\"},{\"name\":\"views\",\"type\":\"flags.10?int\"},{\"name\":\"forwards\",\"type\":\"flags.10?int\"},{\"name\":\"replies\",\"type\":\"flags.23?MessageReplies\"},{\"name\":\"edit_date\",\"type\":\"flags.15?int\"},{\"name\":\"post_author\",\"type\":\"flags.16?string\"},{\"name\":\"grouped_id\",\"type\":\"flags.17?long\"},{\"name\":\"reactions\",\"type\":\"flags.20?MessageReactions\"},{\"name\":\"restriction_reason\",\"type\":\"flags.22?Vector\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"},{\"name\":\"quick_reply_shortcut_id\",\"type\":\"flags.30?int\"},{\"name\":\"effect\",\"type\":\"flags2.2?long\"},{\"name\":\"factcheck\",\"type\":\"flags2.3?FactCheck\"}],\"type\":\"Message\"},{\"id\":721967202,\"predicate\":\"messageService\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"post\",\"type\":\"flags.14?true\"},{\"name\":\"legacy\",\"type\":\"flags.19?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"flags.8?Peer\"},{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"action\",\"type\":\"MessageAction\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Message\"},{\"id\":1038967584,\"predicate\":\"messageMediaEmpty\",\"params\":[],\"type\":\"MessageMedia\"},{\"id\":1766936791,\"predicate\":\"messageMediaPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"spoiler\",\"type\":\"flags.3?true\"},{\"name\":\"photo\",\"type\":\"flags.0?Photo\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.2?int\"}],\"type\":\"MessageMedia\"},{\"id\":1457575028,\"predicate\":\"messageMediaGeo\",\"params\":[{\"name\":\"geo\",\"type\":\"GeoPoint\"}],\"type\":\"MessageMedia\"},{\"id\":1882335561,\"predicate\":\"messageMediaContact\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"MessageMedia\"},{\"id\":-1618676578,\"predicate\":\"messageMediaUnsupported\",\"params\":[],\"type\":\"MessageMedia\"},{\"id\":-1230047312,\"predicate\":\"messageActionEmpty\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-1119368275,\"predicate\":\"messageActionChatCreate\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"MessageAction\"},{\"id\":-1247687078,\"predicate\":\"messageActionChatEditTitle\",\"params\":[{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":2144015272,\"predicate\":\"messageActionChatEditPhoto\",\"params\":[{\"name\":\"photo\",\"type\":\"Photo\"}],\"type\":\"MessageAction\"},{\"id\":-1780220945,\"predicate\":\"messageActionChatDeletePhoto\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":365886720,\"predicate\":\"messageActionChatAddUser\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"MessageAction\"},{\"id\":-1539362612,\"predicate\":\"messageActionChatDeleteUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"MessageAction\"},{\"id\":-712374074,\"predicate\":\"dialog\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.2?true\"},{\"name\":\"unread_mark\",\"type\":\"flags.3?true\"},{\"name\":\"view_forum_as_messages\",\"type\":\"flags.6?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"top_message\",\"type\":\"int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"},{\"name\":\"unread_mentions_count\",\"type\":\"int\"},{\"name\":\"unread_reactions_count\",\"type\":\"int\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"pts\",\"type\":\"flags.0?int\"},{\"name\":\"draft\",\"type\":\"flags.1?DraftMessage\"},{\"name\":\"folder_id\",\"type\":\"flags.4?int\"},{\"name\":\"ttl_period\",\"type\":\"flags.5?int\"}],\"type\":\"Dialog\"},{\"id\":590459437,\"predicate\":\"photoEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"Photo\"},{\"id\":-82216347,\"predicate\":\"photo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_stickers\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"sizes\",\"type\":\"Vector\"},{\"name\":\"video_sizes\",\"type\":\"flags.1?Vector\"},{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"Photo\"},{\"id\":236446268,\"predicate\":\"photoSizeEmpty\",\"params\":[{\"name\":\"type\",\"type\":\"string\"}],\"type\":\"PhotoSize\"},{\"id\":1976012384,\"predicate\":\"photoSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"size\",\"type\":\"int\"}],\"type\":\"PhotoSize\"},{\"id\":35527382,\"predicate\":\"photoCachedSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":286776671,\"predicate\":\"geoPointEmpty\",\"params\":[],\"type\":\"GeoPoint\"},{\"id\":-1297942941,\"predicate\":\"geoPoint\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"long\",\"type\":\"double\"},{\"name\":\"lat\",\"type\":\"double\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"accuracy_radius\",\"type\":\"flags.0?int\"}],\"type\":\"GeoPoint\"},{\"id\":1577067778,\"predicate\":\"auth.sentCode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"auth.SentCodeType\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"next_type\",\"type\":\"flags.1?auth.CodeType\"},{\"name\":\"timeout\",\"type\":\"flags.2?int\"}],\"type\":\"auth.SentCode\"},{\"id\":782418132,\"predicate\":\"auth.authorization\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"setup_password_required\",\"type\":\"flags.1?true\"},{\"name\":\"otherwise_relogin_days\",\"type\":\"flags.1?int\"},{\"name\":\"tmp_sessions\",\"type\":\"flags.0?int\"},{\"name\":\"future_auth_token\",\"type\":\"flags.2?bytes\"},{\"name\":\"user\",\"type\":\"User\"}],\"type\":\"auth.Authorization\"},{\"id\":-1271602504,\"predicate\":\"auth.exportedAuthorization\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"auth.ExportedAuthorization\"},{\"id\":-1195615476,\"predicate\":\"inputNotifyPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"InputNotifyPeer\"},{\"id\":423314455,\"predicate\":\"inputNotifyUsers\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":1251338318,\"predicate\":\"inputNotifyChats\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":-892638494,\"predicate\":\"inputPeerNotifySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"show_previews\",\"type\":\"flags.0?Bool\"},{\"name\":\"silent\",\"type\":\"flags.1?Bool\"},{\"name\":\"mute_until\",\"type\":\"flags.2?int\"},{\"name\":\"sound\",\"type\":\"flags.3?NotificationSound\"},{\"name\":\"stories_muted\",\"type\":\"flags.6?Bool\"},{\"name\":\"stories_hide_sender\",\"type\":\"flags.7?Bool\"},{\"name\":\"stories_sound\",\"type\":\"flags.8?NotificationSound\"}],\"type\":\"InputPeerNotifySettings\"},{\"id\":-1721619444,\"predicate\":\"peerNotifySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"show_previews\",\"type\":\"flags.0?Bool\"},{\"name\":\"silent\",\"type\":\"flags.1?Bool\"},{\"name\":\"mute_until\",\"type\":\"flags.2?int\"},{\"name\":\"ios_sound\",\"type\":\"flags.3?NotificationSound\"},{\"name\":\"android_sound\",\"type\":\"flags.4?NotificationSound\"},{\"name\":\"other_sound\",\"type\":\"flags.5?NotificationSound\"},{\"name\":\"stories_muted\",\"type\":\"flags.6?Bool\"},{\"name\":\"stories_hide_sender\",\"type\":\"flags.7?Bool\"},{\"name\":\"stories_ios_sound\",\"type\":\"flags.8?NotificationSound\"},{\"name\":\"stories_android_sound\",\"type\":\"flags.9?NotificationSound\"},{\"name\":\"stories_other_sound\",\"type\":\"flags.10?NotificationSound\"}],\"type\":\"PeerNotifySettings\"},{\"id\":-1395233698,\"predicate\":\"peerSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"report_spam\",\"type\":\"flags.0?true\"},{\"name\":\"add_contact\",\"type\":\"flags.1?true\"},{\"name\":\"block_contact\",\"type\":\"flags.2?true\"},{\"name\":\"share_contact\",\"type\":\"flags.3?true\"},{\"name\":\"need_contacts_exception\",\"type\":\"flags.4?true\"},{\"name\":\"report_geo\",\"type\":\"flags.5?true\"},{\"name\":\"autoarchived\",\"type\":\"flags.7?true\"},{\"name\":\"invite_members\",\"type\":\"flags.8?true\"},{\"name\":\"request_chat_broadcast\",\"type\":\"flags.10?true\"},{\"name\":\"business_bot_paused\",\"type\":\"flags.11?true\"},{\"name\":\"business_bot_can_reply\",\"type\":\"flags.12?true\"},{\"name\":\"geo_distance\",\"type\":\"flags.6?int\"},{\"name\":\"request_chat_title\",\"type\":\"flags.9?string\"},{\"name\":\"request_chat_date\",\"type\":\"flags.9?int\"},{\"name\":\"business_bot_id\",\"type\":\"flags.13?long\"},{\"name\":\"business_bot_manage_url\",\"type\":\"flags.13?string\"}],\"type\":\"PeerSettings\"},{\"id\":-1539849235,\"predicate\":\"wallPaper\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"default\",\"type\":\"flags.1?true\"},{\"name\":\"pattern\",\"type\":\"flags.3?true\"},{\"name\":\"dark\",\"type\":\"flags.4?true\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"document\",\"type\":\"Document\"},{\"name\":\"settings\",\"type\":\"flags.2?WallPaperSettings\"}],\"type\":\"WallPaper\"},{\"id\":1490799288,\"predicate\":\"inputReportReasonSpam\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":505595789,\"predicate\":\"inputReportReasonViolence\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":777640226,\"predicate\":\"inputReportReasonPornography\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-1376497949,\"predicate\":\"inputReportReasonChildAbuse\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-1041980751,\"predicate\":\"inputReportReasonOther\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-862357728,\"predicate\":\"userFull\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"blocked\",\"type\":\"flags.0?true\"},{\"name\":\"phone_calls_available\",\"type\":\"flags.4?true\"},{\"name\":\"phone_calls_private\",\"type\":\"flags.5?true\"},{\"name\":\"can_pin_message\",\"type\":\"flags.7?true\"},{\"name\":\"has_scheduled\",\"type\":\"flags.12?true\"},{\"name\":\"video_calls_available\",\"type\":\"flags.13?true\"},{\"name\":\"voice_messages_forbidden\",\"type\":\"flags.20?true\"},{\"name\":\"translations_disabled\",\"type\":\"flags.23?true\"},{\"name\":\"stories_pinned_available\",\"type\":\"flags.26?true\"},{\"name\":\"blocked_my_stories_from\",\"type\":\"flags.27?true\"},{\"name\":\"wallpaper_overridden\",\"type\":\"flags.28?true\"},{\"name\":\"contact_require_premium\",\"type\":\"flags.29?true\"},{\"name\":\"read_dates_private\",\"type\":\"flags.30?true\"},{\"name\":\"flags2\",\"type\":\"#\"},{\"name\":\"sponsored_enabled\",\"type\":\"flags2.7?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"about\",\"type\":\"flags.1?string\"},{\"name\":\"settings\",\"type\":\"PeerSettings\"},{\"name\":\"personal_photo\",\"type\":\"flags.21?Photo\"},{\"name\":\"profile_photo\",\"type\":\"flags.2?Photo\"},{\"name\":\"fallback_photo\",\"type\":\"flags.22?Photo\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"bot_info\",\"type\":\"flags.3?BotInfo\"},{\"name\":\"pinned_msg_id\",\"type\":\"flags.6?int\"},{\"name\":\"common_chats_count\",\"type\":\"int\"},{\"name\":\"folder_id\",\"type\":\"flags.11?int\"},{\"name\":\"ttl_period\",\"type\":\"flags.14?int\"},{\"name\":\"theme_emoticon\",\"type\":\"flags.15?string\"},{\"name\":\"private_forward_name\",\"type\":\"flags.16?string\"},{\"name\":\"bot_group_admin_rights\",\"type\":\"flags.17?ChatAdminRights\"},{\"name\":\"bot_broadcast_admin_rights\",\"type\":\"flags.18?ChatAdminRights\"},{\"name\":\"premium_gifts\",\"type\":\"flags.19?Vector\"},{\"name\":\"wallpaper\",\"type\":\"flags.24?WallPaper\"},{\"name\":\"stories\",\"type\":\"flags.25?PeerStories\"},{\"name\":\"business_work_hours\",\"type\":\"flags2.0?BusinessWorkHours\"},{\"name\":\"business_location\",\"type\":\"flags2.1?BusinessLocation\"},{\"name\":\"business_greeting_message\",\"type\":\"flags2.2?BusinessGreetingMessage\"},{\"name\":\"business_away_message\",\"type\":\"flags2.3?BusinessAwayMessage\"},{\"name\":\"business_intro\",\"type\":\"flags2.4?BusinessIntro\"},{\"name\":\"birthday\",\"type\":\"flags2.5?Birthday\"},{\"name\":\"personal_channel_id\",\"type\":\"flags2.6?long\"},{\"name\":\"personal_channel_message\",\"type\":\"flags2.6?int\"}],\"type\":\"UserFull\"},{\"id\":341499403,\"predicate\":\"contact\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"mutual\",\"type\":\"Bool\"}],\"type\":\"Contact\"},{\"id\":-1052885936,\"predicate\":\"importedContact\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"client_id\",\"type\":\"long\"}],\"type\":\"ImportedContact\"},{\"id\":383348795,\"predicate\":\"contactStatus\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"status\",\"type\":\"UserStatus\"}],\"type\":\"ContactStatus\"},{\"id\":-1219778094,\"predicate\":\"contacts.contactsNotModified\",\"params\":[],\"type\":\"contacts.Contacts\"},{\"id\":-353862078,\"predicate\":\"contacts.contacts\",\"params\":[{\"name\":\"contacts\",\"type\":\"Vector\"},{\"name\":\"saved_count\",\"type\":\"int\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.Contacts\"},{\"id\":2010127419,\"predicate\":\"contacts.importedContacts\",\"params\":[{\"name\":\"imported\",\"type\":\"Vector\"},{\"name\":\"popular_invites\",\"type\":\"Vector\"},{\"name\":\"retry_contacts\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.ImportedContacts\"},{\"id\":182326673,\"predicate\":\"contacts.blocked\",\"params\":[{\"name\":\"blocked\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.Blocked\"},{\"id\":-513392236,\"predicate\":\"contacts.blockedSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"blocked\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.Blocked\"},{\"id\":364538944,\"predicate\":\"messages.dialogs\",\"params\":[{\"name\":\"dialogs\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Dialogs\"},{\"id\":1910543603,\"predicate\":\"messages.dialogsSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"dialogs\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Dialogs\"},{\"id\":-1938715001,\"predicate\":\"messages.messages\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":978610270,\"predicate\":\"messages.messagesSlice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.1?true\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"next_rate\",\"type\":\"flags.0?int\"},{\"name\":\"offset_id_offset\",\"type\":\"flags.2?int\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":1694474197,\"predicate\":\"messages.chats\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":-438840932,\"predicate\":\"messages.chatFull\",\"params\":[{\"name\":\"full_chat\",\"type\":\"ChatFull\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ChatFull\"},{\"id\":-1269012015,\"predicate\":\"messages.affectedHistory\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":1474492012,\"predicate\":\"inputMessagesFilterEmpty\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1777752804,\"predicate\":\"inputMessagesFilterPhotos\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1614803355,\"predicate\":\"inputMessagesFilterVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":1458172132,\"predicate\":\"inputMessagesFilterPhotoVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1629621880,\"predicate\":\"inputMessagesFilterDocument\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":2129714567,\"predicate\":\"inputMessagesFilterUrl\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-3644025,\"predicate\":\"inputMessagesFilterGif\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":522914557,\"predicate\":\"updateNewMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1318109142,\"predicate\":\"updateMessageID\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"random_id\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":-1576161051,\"predicate\":\"updateDeleteMessages\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1071741569,\"predicate\":\"updateUserTyping\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":-2092401936,\"predicate\":\"updateChatUserTyping\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":125178264,\"predicate\":\"updateChatParticipants\",\"params\":[{\"name\":\"participants\",\"type\":\"ChatParticipants\"}],\"type\":\"Update\"},{\"id\":-440534818,\"predicate\":\"updateUserStatus\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"status\",\"type\":\"UserStatus\"}],\"type\":\"Update\"},{\"id\":-1484486364,\"predicate\":\"updateUserName\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"usernames\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-1991136273,\"predicate\":\"updateNewAuthorization\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"unconfirmed\",\"type\":\"flags.0?true\"},{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"flags.0?int\"},{\"name\":\"device\",\"type\":\"flags.0?string\"},{\"name\":\"location\",\"type\":\"flags.0?string\"}],\"type\":\"Update\"},{\"id\":-1519637954,\"predicate\":\"updates.state\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"qts\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"}],\"type\":\"updates.State\"},{\"id\":1567990072,\"predicate\":\"updates.differenceEmpty\",\"params\":[{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"updates.Difference\"},{\"id\":16030880,\"predicate\":\"updates.difference\",\"params\":[{\"name\":\"new_messages\",\"type\":\"Vector\"},{\"name\":\"new_encrypted_messages\",\"type\":\"Vector\"},{\"name\":\"other_updates\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"state\",\"type\":\"updates.State\"}],\"type\":\"updates.Difference\"},{\"id\":-1459938943,\"predicate\":\"updates.differenceSlice\",\"params\":[{\"name\":\"new_messages\",\"type\":\"Vector\"},{\"name\":\"new_encrypted_messages\",\"type\":\"Vector\"},{\"name\":\"other_updates\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"intermediate_state\",\"type\":\"updates.State\"}],\"type\":\"updates.Difference\"},{\"id\":-484987010,\"predicate\":\"updatesTooLong\",\"params\":[],\"type\":\"Updates\"},{\"id\":826001400,\"predicate\":\"updateShortMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"fwd_from\",\"type\":\"flags.2?MessageFwdHeader\"},{\"name\":\"via_bot_id\",\"type\":\"flags.11?long\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":1299050149,\"predicate\":\"updateShortChatMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"long\"},{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"fwd_from\",\"type\":\"flags.2?MessageFwdHeader\"},{\"name\":\"via_bot_id\",\"type\":\"flags.11?long\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":2027216577,\"predicate\":\"updateShort\",\"params\":[{\"name\":\"update\",\"type\":\"Update\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1918567619,\"predicate\":\"updatesCombined\",\"params\":[{\"name\":\"updates\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq_start\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1957577280,\"predicate\":\"updates\",\"params\":[{\"name\":\"updates\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-1916114267,\"predicate\":\"photos.photos\",\"params\":[{\"name\":\"photos\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"photos.Photos\"},{\"id\":352657236,\"predicate\":\"photos.photosSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"photos\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"photos.Photos\"},{\"id\":539045032,\"predicate\":\"photos.photo\",\"params\":[{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"photos.Photo\"},{\"id\":157948117,\"predicate\":\"upload.file\",\"params\":[{\"name\":\"type\",\"type\":\"storage.FileType\"},{\"name\":\"mtime\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"upload.File\"},{\"id\":414687501,\"predicate\":\"dcOption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"ipv6\",\"type\":\"flags.0?true\"},{\"name\":\"media_only\",\"type\":\"flags.1?true\"},{\"name\":\"tcpo_only\",\"type\":\"flags.2?true\"},{\"name\":\"cdn\",\"type\":\"flags.3?true\"},{\"name\":\"static\",\"type\":\"flags.4?true\"},{\"name\":\"this_port_only\",\"type\":\"flags.5?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"ip_address\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"secret\",\"type\":\"flags.10?bytes\"}],\"type\":\"DcOption\"},{\"id\":-870702050,\"predicate\":\"config\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"default_p2p_contacts\",\"type\":\"flags.3?true\"},{\"name\":\"preload_featured_stickers\",\"type\":\"flags.4?true\"},{\"name\":\"revoke_pm_inbox\",\"type\":\"flags.6?true\"},{\"name\":\"blocked_mode\",\"type\":\"flags.8?true\"},{\"name\":\"force_try_ipv6\",\"type\":\"flags.14?true\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"test_mode\",\"type\":\"Bool\"},{\"name\":\"this_dc\",\"type\":\"int\"},{\"name\":\"dc_options\",\"type\":\"Vector\"},{\"name\":\"dc_txt_domain_name\",\"type\":\"string\"},{\"name\":\"chat_size_max\",\"type\":\"int\"},{\"name\":\"megagroup_size_max\",\"type\":\"int\"},{\"name\":\"forwarded_count_max\",\"type\":\"int\"},{\"name\":\"online_update_period_ms\",\"type\":\"int\"},{\"name\":\"offline_blur_timeout_ms\",\"type\":\"int\"},{\"name\":\"offline_idle_timeout_ms\",\"type\":\"int\"},{\"name\":\"online_cloud_timeout_ms\",\"type\":\"int\"},{\"name\":\"notify_cloud_delay_ms\",\"type\":\"int\"},{\"name\":\"notify_default_delay_ms\",\"type\":\"int\"},{\"name\":\"push_chat_period_ms\",\"type\":\"int\"},{\"name\":\"push_chat_limit\",\"type\":\"int\"},{\"name\":\"edit_time_limit\",\"type\":\"int\"},{\"name\":\"revoke_time_limit\",\"type\":\"int\"},{\"name\":\"revoke_pm_time_limit\",\"type\":\"int\"},{\"name\":\"rating_e_decay\",\"type\":\"int\"},{\"name\":\"stickers_recent_limit\",\"type\":\"int\"},{\"name\":\"channels_read_media_period\",\"type\":\"int\"},{\"name\":\"tmp_sessions\",\"type\":\"flags.0?int\"},{\"name\":\"call_receive_timeout_ms\",\"type\":\"int\"},{\"name\":\"call_ring_timeout_ms\",\"type\":\"int\"},{\"name\":\"call_connect_timeout_ms\",\"type\":\"int\"},{\"name\":\"call_packet_timeout_ms\",\"type\":\"int\"},{\"name\":\"me_url_prefix\",\"type\":\"string\"},{\"name\":\"autoupdate_url_prefix\",\"type\":\"flags.7?string\"},{\"name\":\"gif_search_username\",\"type\":\"flags.9?string\"},{\"name\":\"venue_search_username\",\"type\":\"flags.10?string\"},{\"name\":\"img_search_username\",\"type\":\"flags.11?string\"},{\"name\":\"static_maps_provider\",\"type\":\"flags.12?string\"},{\"name\":\"caption_length_max\",\"type\":\"int\"},{\"name\":\"message_length_max\",\"type\":\"int\"},{\"name\":\"webfile_dc_id\",\"type\":\"int\"},{\"name\":\"suggested_lang_code\",\"type\":\"flags.2?string\"},{\"name\":\"lang_pack_version\",\"type\":\"flags.2?int\"},{\"name\":\"base_lang_pack_version\",\"type\":\"flags.2?int\"},{\"name\":\"reactions_default\",\"type\":\"flags.15?Reaction\"},{\"name\":\"autologin_token\",\"type\":\"flags.16?string\"}],\"type\":\"Config\"},{\"id\":-1910892683,\"predicate\":\"nearestDc\",\"params\":[{\"name\":\"country\",\"type\":\"string\"},{\"name\":\"this_dc\",\"type\":\"int\"},{\"name\":\"nearest_dc\",\"type\":\"int\"}],\"type\":\"NearestDc\"},{\"id\":-860107216,\"predicate\":\"help.appUpdate\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_not_skip\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"},{\"name\":\"document\",\"type\":\"flags.1?Document\"},{\"name\":\"url\",\"type\":\"flags.2?string\"},{\"name\":\"sticker\",\"type\":\"flags.3?Document\"}],\"type\":\"help.AppUpdate\"},{\"id\":-1000708810,\"predicate\":\"help.noAppUpdate\",\"params\":[],\"type\":\"help.AppUpdate\"},{\"id\":415997816,\"predicate\":\"help.inviteText\",\"params\":[{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"help.InviteText\"},{\"id\":314359194,\"predicate\":\"updateNewEncryptedMessage\",\"params\":[{\"name\":\"message\",\"type\":\"EncryptedMessage\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":386986326,\"predicate\":\"updateEncryptedChatTyping\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1264392051,\"predicate\":\"updateEncryption\",\"params\":[{\"name\":\"chat\",\"type\":\"EncryptedChat\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":956179895,\"predicate\":\"updateEncryptedMessagesRead\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1417756512,\"predicate\":\"encryptedChatEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"EncryptedChat\"},{\"id\":1722964307,\"predicate\":\"encryptedChatWaiting\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"participant_id\",\"type\":\"long\"}],\"type\":\"EncryptedChat\"},{\"id\":1223809356,\"predicate\":\"encryptedChatRequested\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"participant_id\",\"type\":\"long\"},{\"name\":\"g_a\",\"type\":\"bytes\"}],\"type\":\"EncryptedChat\"},{\"id\":1643173063,\"predicate\":\"encryptedChat\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"participant_id\",\"type\":\"long\"},{\"name\":\"g_a_or_b\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"}],\"type\":\"EncryptedChat\"},{\"id\":505183301,\"predicate\":\"encryptedChatDiscarded\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"history_deleted\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"EncryptedChat\"},{\"id\":-247351839,\"predicate\":\"inputEncryptedChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputEncryptedChat\"},{\"id\":-1038136962,\"predicate\":\"encryptedFileEmpty\",\"params\":[],\"type\":\"EncryptedFile\"},{\"id\":-1476358952,\"predicate\":\"encryptedFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"long\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"key_fingerprint\",\"type\":\"int\"}],\"type\":\"EncryptedFile\"},{\"id\":406307684,\"predicate\":\"inputEncryptedFileEmpty\",\"params\":[],\"type\":\"InputEncryptedFile\"},{\"id\":1690108678,\"predicate\":\"inputEncryptedFileUploaded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"md5_checksum\",\"type\":\"string\"},{\"name\":\"key_fingerprint\",\"type\":\"int\"}],\"type\":\"InputEncryptedFile\"},{\"id\":1511503333,\"predicate\":\"inputEncryptedFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputEncryptedFile\"},{\"id\":-182231723,\"predicate\":\"inputEncryptedFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":-317144808,\"predicate\":\"encryptedMessage\",\"params\":[{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"},{\"name\":\"file\",\"type\":\"EncryptedFile\"}],\"type\":\"EncryptedMessage\"},{\"id\":594758406,\"predicate\":\"encryptedMessageService\",\"params\":[{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"EncryptedMessage\"},{\"id\":-1058912715,\"predicate\":\"messages.dhConfigNotModified\",\"params\":[{\"name\":\"random\",\"type\":\"bytes\"}],\"type\":\"messages.DhConfig\"},{\"id\":740433629,\"predicate\":\"messages.dhConfig\",\"params\":[{\"name\":\"g\",\"type\":\"int\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"random\",\"type\":\"bytes\"}],\"type\":\"messages.DhConfig\"},{\"id\":1443858741,\"predicate\":\"messages.sentEncryptedMessage\",\"params\":[{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":-1802240206,\"predicate\":\"messages.sentEncryptedFile\",\"params\":[{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"file\",\"type\":\"EncryptedFile\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":-95482955,\"predicate\":\"inputFileBig\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"InputFile\"},{\"id\":767652808,\"predicate\":\"inputEncryptedFileBigUploaded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"key_fingerprint\",\"type\":\"int\"}],\"type\":\"InputEncryptedFile\"},{\"id\":1037718609,\"predicate\":\"updateChatParticipantAdd\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"inviter_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-483443337,\"predicate\":\"updateChatParticipantDelete\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1906403213,\"predicate\":\"updateDcOptions\",\"params\":[{\"name\":\"dc_options\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":1530447553,\"predicate\":\"inputMediaUploadedDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"nosound_video\",\"type\":\"flags.3?true\"},{\"name\":\"force_file\",\"type\":\"flags.4?true\"},{\"name\":\"spoiler\",\"type\":\"flags.5?true\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"thumb\",\"type\":\"flags.2?InputFile\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector\"},{\"name\":\"stickers\",\"type\":\"flags.0?Vector\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.1?int\"}],\"type\":\"InputMedia\"},{\"id\":860303448,\"predicate\":\"inputMediaDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"spoiler\",\"type\":\"flags.2?true\"},{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"},{\"name\":\"query\",\"type\":\"flags.1?string\"}],\"type\":\"InputMedia\"},{\"id\":1291114285,\"predicate\":\"messageMediaDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"nopremium\",\"type\":\"flags.3?true\"},{\"name\":\"spoiler\",\"type\":\"flags.4?true\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"round\",\"type\":\"flags.7?true\"},{\"name\":\"voice\",\"type\":\"flags.8?true\"},{\"name\":\"document\",\"type\":\"flags.0?Document\"},{\"name\":\"alt_document\",\"type\":\"flags.5?Document\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.2?int\"}],\"type\":\"MessageMedia\"},{\"id\":1928391342,\"predicate\":\"inputDocumentEmpty\",\"params\":[],\"type\":\"InputDocument\"},{\"id\":448771445,\"predicate\":\"inputDocument\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"}],\"type\":\"InputDocument\"},{\"id\":-1160743548,\"predicate\":\"inputDocumentFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"thumb_size\",\"type\":\"string\"}],\"type\":\"InputFileLocation\"},{\"id\":922273905,\"predicate\":\"documentEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"Document\"},{\"id\":-1881881384,\"predicate\":\"document\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"long\"},{\"name\":\"thumbs\",\"type\":\"flags.0?Vector\"},{\"name\":\"video_thumbs\",\"type\":\"flags.1?Vector\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"attributes\",\"type\":\"Vector\"}],\"type\":\"Document\"},{\"id\":398898678,\"predicate\":\"help.support\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"user\",\"type\":\"User\"}],\"type\":\"help.Support\"},{\"id\":-1613493288,\"predicate\":\"notifyPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"NotifyPeer\"},{\"id\":-1261946036,\"predicate\":\"notifyUsers\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":-1073230141,\"predicate\":\"notifyChats\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":-1094555409,\"predicate\":\"updateNotifySettings\",\"params\":[{\"name\":\"peer\",\"type\":\"NotifyPeer\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"}],\"type\":\"Update\"},{\"id\":381645902,\"predicate\":\"sendMessageTypingAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-44119819,\"predicate\":\"sendMessageCancelAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-1584933265,\"predicate\":\"sendMessageRecordVideoAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-378127636,\"predicate\":\"sendMessageUploadVideoAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":-718310409,\"predicate\":\"sendMessageRecordAudioAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-212740181,\"predicate\":\"sendMessageUploadAudioAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":-774682074,\"predicate\":\"sendMessageUploadPhotoAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":-1441998364,\"predicate\":\"sendMessageUploadDocumentAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":393186209,\"predicate\":\"sendMessageGeoLocationAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":1653390447,\"predicate\":\"sendMessageChooseContactAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-1290580579,\"predicate\":\"contacts.found\",\"params\":[{\"name\":\"my_results\",\"type\":\"Vector\"},{\"name\":\"results\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.Found\"},{\"id\":-337352679,\"predicate\":\"updateServiceNotification\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"popup\",\"type\":\"flags.0?true\"},{\"name\":\"invert_media\",\"type\":\"flags.2?true\"},{\"name\":\"inbox_date\",\"type\":\"flags.1?int\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"media\",\"type\":\"MessageMedia\"},{\"name\":\"entities\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":2065268168,\"predicate\":\"userStatusRecently\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"by_me\",\"type\":\"flags.0?true\"}],\"type\":\"UserStatus\"},{\"id\":1410997530,\"predicate\":\"userStatusLastWeek\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"by_me\",\"type\":\"flags.0?true\"}],\"type\":\"UserStatus\"},{\"id\":1703516023,\"predicate\":\"userStatusLastMonth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"by_me\",\"type\":\"flags.0?true\"}],\"type\":\"UserStatus\"},{\"id\":-298113238,\"predicate\":\"updatePrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"PrivacyKey\"},{\"name\":\"rules\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":1335282456,\"predicate\":\"inputPrivacyKeyStatusTimestamp\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":-1137792208,\"predicate\":\"privacyKeyStatusTimestamp\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":218751099,\"predicate\":\"inputPrivacyValueAllowContacts\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":407582158,\"predicate\":\"inputPrivacyValueAllowAll\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":320652927,\"predicate\":\"inputPrivacyValueAllowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"InputPrivacyRule\"},{\"id\":195371015,\"predicate\":\"inputPrivacyValueDisallowContacts\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":-697604407,\"predicate\":\"inputPrivacyValueDisallowAll\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":-1877932953,\"predicate\":\"inputPrivacyValueDisallowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"InputPrivacyRule\"},{\"id\":-123988,\"predicate\":\"privacyValueAllowContacts\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":1698855810,\"predicate\":\"privacyValueAllowAll\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":-1198497870,\"predicate\":\"privacyValueAllowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"PrivacyRule\"},{\"id\":-125240806,\"predicate\":\"privacyValueDisallowContacts\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":-1955338397,\"predicate\":\"privacyValueDisallowAll\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":-463335103,\"predicate\":\"privacyValueDisallowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"PrivacyRule\"},{\"id\":1352683077,\"predicate\":\"account.privacyRules\",\"params\":[{\"name\":\"rules\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"account.PrivacyRules\"},{\"id\":-1194283041,\"predicate\":\"accountDaysTTL\",\"params\":[{\"name\":\"days\",\"type\":\"int\"}],\"type\":\"AccountDaysTTL\"},{\"id\":88680979,\"predicate\":\"updateUserPhone\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":1815593308,\"predicate\":\"documentAttributeImageSize\",\"params\":[{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"}],\"type\":\"DocumentAttribute\"},{\"id\":297109817,\"predicate\":\"documentAttributeAnimated\",\"params\":[],\"type\":\"DocumentAttribute\"},{\"id\":1662637586,\"predicate\":\"documentAttributeSticker\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"mask\",\"type\":\"flags.1?true\"},{\"name\":\"alt\",\"type\":\"string\"},{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"mask_coords\",\"type\":\"flags.0?MaskCoords\"}],\"type\":\"DocumentAttribute\"},{\"id\":-745541182,\"predicate\":\"documentAttributeVideo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"round_message\",\"type\":\"flags.0?true\"},{\"name\":\"supports_streaming\",\"type\":\"flags.1?true\"},{\"name\":\"nosound\",\"type\":\"flags.3?true\"},{\"name\":\"duration\",\"type\":\"double\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"preload_prefix_size\",\"type\":\"flags.2?int\"}],\"type\":\"DocumentAttribute\"},{\"id\":-1739392570,\"predicate\":\"documentAttributeAudio\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"voice\",\"type\":\"flags.10?true\"},{\"name\":\"duration\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"performer\",\"type\":\"flags.1?string\"},{\"name\":\"waveform\",\"type\":\"flags.2?bytes\"}],\"type\":\"DocumentAttribute\"},{\"id\":358154344,\"predicate\":\"documentAttributeFilename\",\"params\":[{\"name\":\"file_name\",\"type\":\"string\"}],\"type\":\"DocumentAttribute\"},{\"id\":-244016606,\"predicate\":\"messages.stickersNotModified\",\"params\":[],\"type\":\"messages.Stickers\"},{\"id\":816245886,\"predicate\":\"messages.stickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"stickers\",\"type\":\"Vector\"}],\"type\":\"messages.Stickers\"},{\"id\":313694676,\"predicate\":\"stickerPack\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"documents\",\"type\":\"Vector\"}],\"type\":\"StickerPack\"},{\"id\":-395967805,\"predicate\":\"messages.allStickersNotModified\",\"params\":[],\"type\":\"messages.AllStickers\"},{\"id\":-843329861,\"predicate\":\"messages.allStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"sets\",\"type\":\"Vector\"}],\"type\":\"messages.AllStickers\"},{\"id\":-1667805217,\"predicate\":\"updateReadHistoryInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"still_unread_count\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":791617983,\"predicate\":\"updateReadHistoryOutbox\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-2066640507,\"predicate\":\"messages.affectedMessages\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":2139689491,\"predicate\":\"updateWebPage\",\"params\":[{\"name\":\"webpage\",\"type\":\"WebPage\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":555358088,\"predicate\":\"webPageEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"url\",\"type\":\"flags.0?string\"}],\"type\":\"WebPage\"},{\"id\":-1328464313,\"predicate\":\"webPagePending\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"url\",\"type\":\"flags.0?string\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"WebPage\"},{\"id\":-392411726,\"predicate\":\"webPage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_large_media\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"display_url\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"type\",\"type\":\"flags.0?string\"},{\"name\":\"site_name\",\"type\":\"flags.1?string\"},{\"name\":\"title\",\"type\":\"flags.2?string\"},{\"name\":\"description\",\"type\":\"flags.3?string\"},{\"name\":\"photo\",\"type\":\"flags.4?Photo\"},{\"name\":\"embed_url\",\"type\":\"flags.5?string\"},{\"name\":\"embed_type\",\"type\":\"flags.5?string\"},{\"name\":\"embed_width\",\"type\":\"flags.6?int\"},{\"name\":\"embed_height\",\"type\":\"flags.6?int\"},{\"name\":\"duration\",\"type\":\"flags.7?int\"},{\"name\":\"author\",\"type\":\"flags.8?string\"},{\"name\":\"document\",\"type\":\"flags.9?Document\"},{\"name\":\"cached_page\",\"type\":\"flags.10?Page\"},{\"name\":\"attributes\",\"type\":\"flags.12?Vector\"}],\"type\":\"WebPage\"},{\"id\":-571405253,\"predicate\":\"messageMediaWebPage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"force_large_media\",\"type\":\"flags.0?true\"},{\"name\":\"force_small_media\",\"type\":\"flags.1?true\"},{\"name\":\"manual\",\"type\":\"flags.3?true\"},{\"name\":\"safe\",\"type\":\"flags.4?true\"},{\"name\":\"webpage\",\"type\":\"WebPage\"}],\"type\":\"MessageMedia\"},{\"id\":-1392388579,\"predicate\":\"authorization\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"current\",\"type\":\"flags.0?true\"},{\"name\":\"official_app\",\"type\":\"flags.1?true\"},{\"name\":\"password_pending\",\"type\":\"flags.2?true\"},{\"name\":\"encrypted_requests_disabled\",\"type\":\"flags.3?true\"},{\"name\":\"call_requests_disabled\",\"type\":\"flags.4?true\"},{\"name\":\"unconfirmed\",\"type\":\"flags.5?true\"},{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"device_model\",\"type\":\"string\"},{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"system_version\",\"type\":\"string\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"app_name\",\"type\":\"string\"},{\"name\":\"app_version\",\"type\":\"string\"},{\"name\":\"date_created\",\"type\":\"int\"},{\"name\":\"date_active\",\"type\":\"int\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"country\",\"type\":\"string\"},{\"name\":\"region\",\"type\":\"string\"}],\"type\":\"Authorization\"},{\"id\":1275039392,\"predicate\":\"account.authorizations\",\"params\":[{\"name\":\"authorization_ttl_days\",\"type\":\"int\"},{\"name\":\"authorizations\",\"type\":\"Vector\"}],\"type\":\"account.Authorizations\"},{\"id\":-1787080453,\"predicate\":\"account.password\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_recovery\",\"type\":\"flags.0?true\"},{\"name\":\"has_secure_values\",\"type\":\"flags.1?true\"},{\"name\":\"has_password\",\"type\":\"flags.2?true\"},{\"name\":\"current_algo\",\"type\":\"flags.2?PasswordKdfAlgo\"},{\"name\":\"srp_B\",\"type\":\"flags.2?bytes\"},{\"name\":\"srp_id\",\"type\":\"flags.2?long\"},{\"name\":\"hint\",\"type\":\"flags.3?string\"},{\"name\":\"email_unconfirmed_pattern\",\"type\":\"flags.4?string\"},{\"name\":\"new_algo\",\"type\":\"PasswordKdfAlgo\"},{\"name\":\"new_secure_algo\",\"type\":\"SecurePasswordKdfAlgo\"},{\"name\":\"secure_random\",\"type\":\"bytes\"},{\"name\":\"pending_reset_date\",\"type\":\"flags.5?int\"},{\"name\":\"login_email_pattern\",\"type\":\"flags.6?string\"}],\"type\":\"account.Password\"},{\"id\":-1705233435,\"predicate\":\"account.passwordSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"email\",\"type\":\"flags.0?string\"},{\"name\":\"secure_settings\",\"type\":\"flags.1?SecureSecretSettings\"}],\"type\":\"account.PasswordSettings\"},{\"id\":-1036572727,\"predicate\":\"account.passwordInputSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"new_algo\",\"type\":\"flags.0?PasswordKdfAlgo\"},{\"name\":\"new_password_hash\",\"type\":\"flags.0?bytes\"},{\"name\":\"hint\",\"type\":\"flags.0?string\"},{\"name\":\"email\",\"type\":\"flags.1?string\"},{\"name\":\"new_secure_settings\",\"type\":\"flags.2?SecureSecretSettings\"}],\"type\":\"account.PasswordInputSettings\"},{\"id\":326715557,\"predicate\":\"auth.passwordRecovery\",\"params\":[{\"name\":\"email_pattern\",\"type\":\"string\"}],\"type\":\"auth.PasswordRecovery\"},{\"id\":-1052959727,\"predicate\":\"inputMediaVenue\",\"params\":[{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":784356159,\"predicate\":\"messageMediaVenue\",\"params\":[{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"}],\"type\":\"MessageMedia\"},{\"id\":-1551583367,\"predicate\":\"receivedNotifyMessage\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"flags\",\"type\":\"int\"}],\"type\":\"ReceivedNotifyMessage\"},{\"id\":179611673,\"predicate\":\"chatInviteExported\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoked\",\"type\":\"flags.0?true\"},{\"name\":\"permanent\",\"type\":\"flags.5?true\"},{\"name\":\"request_needed\",\"type\":\"flags.6?true\"},{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"start_date\",\"type\":\"flags.4?int\"},{\"name\":\"expire_date\",\"type\":\"flags.1?int\"},{\"name\":\"usage_limit\",\"type\":\"flags.2?int\"},{\"name\":\"usage\",\"type\":\"flags.3?int\"},{\"name\":\"requested\",\"type\":\"flags.7?int\"},{\"name\":\"title\",\"type\":\"flags.8?string\"}],\"type\":\"ExportedChatInvite\"},{\"id\":1516793212,\"predicate\":\"chatInviteAlready\",\"params\":[{\"name\":\"chat\",\"type\":\"Chat\"}],\"type\":\"ChatInvite\"},{\"id\":-840897472,\"predicate\":\"chatInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"flags.0?true\"},{\"name\":\"broadcast\",\"type\":\"flags.1?true\"},{\"name\":\"public\",\"type\":\"flags.2?true\"},{\"name\":\"megagroup\",\"type\":\"flags.3?true\"},{\"name\":\"request_needed\",\"type\":\"flags.6?true\"},{\"name\":\"verified\",\"type\":\"flags.7?true\"},{\"name\":\"scam\",\"type\":\"flags.8?true\"},{\"name\":\"fake\",\"type\":\"flags.9?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"about\",\"type\":\"flags.5?string\"},{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"flags.4?Vector\"},{\"name\":\"color\",\"type\":\"int\"}],\"type\":\"ChatInvite\"},{\"id\":51520707,\"predicate\":\"messageActionChatJoinedByLink\",\"params\":[{\"name\":\"inviter_id\",\"type\":\"long\"}],\"type\":\"MessageAction\"},{\"id\":-131960447,\"predicate\":\"updateReadMessagesContents\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":-4838507,\"predicate\":\"inputStickerSetEmpty\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":-1645763991,\"predicate\":\"inputStickerSetID\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputStickerSet\"},{\"id\":-2044933984,\"predicate\":\"inputStickerSetShortName\",\"params\":[{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"InputStickerSet\"},{\"id\":768691932,\"predicate\":\"stickerSet\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"archived\",\"type\":\"flags.1?true\"},{\"name\":\"official\",\"type\":\"flags.2?true\"},{\"name\":\"masks\",\"type\":\"flags.3?true\"},{\"name\":\"emojis\",\"type\":\"flags.7?true\"},{\"name\":\"text_color\",\"type\":\"flags.9?true\"},{\"name\":\"channel_emoji_status\",\"type\":\"flags.10?true\"},{\"name\":\"creator\",\"type\":\"flags.11?true\"},{\"name\":\"installed_date\",\"type\":\"flags.0?int\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"thumbs\",\"type\":\"flags.4?Vector\"},{\"name\":\"thumb_dc_id\",\"type\":\"flags.4?int\"},{\"name\":\"thumb_version\",\"type\":\"flags.4?int\"},{\"name\":\"thumb_document_id\",\"type\":\"flags.8?long\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"StickerSet\"},{\"id\":1846886166,\"predicate\":\"messages.stickerSet\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"packs\",\"type\":\"Vector\"},{\"name\":\"keywords\",\"type\":\"Vector\"},{\"name\":\"documents\",\"type\":\"Vector\"}],\"type\":\"messages.StickerSet\"},{\"id\":559694904,\"predicate\":\"user\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"self\",\"type\":\"flags.10?true\"},{\"name\":\"contact\",\"type\":\"flags.11?true\"},{\"name\":\"mutual_contact\",\"type\":\"flags.12?true\"},{\"name\":\"deleted\",\"type\":\"flags.13?true\"},{\"name\":\"bot\",\"type\":\"flags.14?true\"},{\"name\":\"bot_chat_history\",\"type\":\"flags.15?true\"},{\"name\":\"bot_nochats\",\"type\":\"flags.16?true\"},{\"name\":\"verified\",\"type\":\"flags.17?true\"},{\"name\":\"restricted\",\"type\":\"flags.18?true\"},{\"name\":\"min\",\"type\":\"flags.20?true\"},{\"name\":\"bot_inline_geo\",\"type\":\"flags.21?true\"},{\"name\":\"support\",\"type\":\"flags.23?true\"},{\"name\":\"scam\",\"type\":\"flags.24?true\"},{\"name\":\"apply_min_photo\",\"type\":\"flags.25?true\"},{\"name\":\"fake\",\"type\":\"flags.26?true\"},{\"name\":\"bot_attach_menu\",\"type\":\"flags.27?true\"},{\"name\":\"premium\",\"type\":\"flags.28?true\"},{\"name\":\"attach_menu_enabled\",\"type\":\"flags.29?true\"},{\"name\":\"flags2\",\"type\":\"#\"},{\"name\":\"bot_can_edit\",\"type\":\"flags2.1?true\"},{\"name\":\"close_friend\",\"type\":\"flags2.2?true\"},{\"name\":\"stories_hidden\",\"type\":\"flags2.3?true\"},{\"name\":\"stories_unavailable\",\"type\":\"flags2.4?true\"},{\"name\":\"contact_require_premium\",\"type\":\"flags2.10?true\"},{\"name\":\"bot_business\",\"type\":\"flags2.11?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"flags.0?long\"},{\"name\":\"first_name\",\"type\":\"flags.1?string\"},{\"name\":\"last_name\",\"type\":\"flags.2?string\"},{\"name\":\"username\",\"type\":\"flags.3?string\"},{\"name\":\"phone\",\"type\":\"flags.4?string\"},{\"name\":\"photo\",\"type\":\"flags.5?UserProfilePhoto\"},{\"name\":\"status\",\"type\":\"flags.6?UserStatus\"},{\"name\":\"bot_info_version\",\"type\":\"flags.14?int\"},{\"name\":\"restriction_reason\",\"type\":\"flags.18?Vector\"},{\"name\":\"bot_inline_placeholder\",\"type\":\"flags.19?string\"},{\"name\":\"lang_code\",\"type\":\"flags.22?string\"},{\"name\":\"emoji_status\",\"type\":\"flags.30?EmojiStatus\"},{\"name\":\"usernames\",\"type\":\"flags2.0?Vector\"},{\"name\":\"stories_max_id\",\"type\":\"flags2.5?int\"},{\"name\":\"color\",\"type\":\"flags2.8?PeerColor\"},{\"name\":\"profile_color\",\"type\":\"flags2.9?PeerColor\"}],\"type\":\"User\"},{\"id\":-1032140601,\"predicate\":\"botCommand\",\"params\":[{\"name\":\"command\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"}],\"type\":\"BotCommand\"},{\"id\":-1892676777,\"predicate\":\"botInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_id\",\"type\":\"flags.0?long\"},{\"name\":\"description\",\"type\":\"flags.1?string\"},{\"name\":\"description_photo\",\"type\":\"flags.4?Photo\"},{\"name\":\"description_document\",\"type\":\"flags.5?Document\"},{\"name\":\"commands\",\"type\":\"flags.2?Vector\"},{\"name\":\"menu_button\",\"type\":\"flags.3?BotMenuButton\"}],\"type\":\"BotInfo\"},{\"id\":-1560655744,\"predicate\":\"keyboardButton\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":2002815875,\"predicate\":\"keyboardButtonRow\",\"params\":[{\"name\":\"buttons\",\"type\":\"Vector\"}],\"type\":\"KeyboardButtonRow\"},{\"id\":-1606526075,\"predicate\":\"replyKeyboardHide\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"}],\"type\":\"ReplyMarkup\"},{\"id\":-2035021048,\"predicate\":\"replyKeyboardForceReply\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"single_use\",\"type\":\"flags.1?true\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"},{\"name\":\"placeholder\",\"type\":\"flags.3?string\"}],\"type\":\"ReplyMarkup\"},{\"id\":-2049074735,\"predicate\":\"replyKeyboardMarkup\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"resize\",\"type\":\"flags.0?true\"},{\"name\":\"single_use\",\"type\":\"flags.1?true\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"},{\"name\":\"persistent\",\"type\":\"flags.4?true\"},{\"name\":\"rows\",\"type\":\"Vector\"},{\"name\":\"placeholder\",\"type\":\"flags.3?string\"}],\"type\":\"ReplyMarkup\"},{\"id\":-571955892,\"predicate\":\"inputPeerUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":-233744186,\"predicate\":\"inputUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputUser\"},{\"id\":-1148011883,\"predicate\":\"messageEntityUnknown\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-100378723,\"predicate\":\"messageEntityMention\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1868782349,\"predicate\":\"messageEntityHashtag\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1827637959,\"predicate\":\"messageEntityBotCommand\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1859134776,\"predicate\":\"messageEntityUrl\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1692693954,\"predicate\":\"messageEntityEmail\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-1117713463,\"predicate\":\"messageEntityBold\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-2106619040,\"predicate\":\"messageEntityItalic\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":681706865,\"predicate\":\"messageEntityCode\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1938967520,\"predicate\":\"messageEntityPre\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"language\",\"type\":\"string\"}],\"type\":\"MessageEntity\"},{\"id\":1990644519,\"predicate\":\"messageEntityTextUrl\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"MessageEntity\"},{\"id\":-1877614335,\"predicate\":\"updateShortSentMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"media\",\"type\":\"flags.9?MessageMedia\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":-292807034,\"predicate\":\"inputChannelEmpty\",\"params\":[],\"type\":\"InputChannel\"},{\"id\":-212145112,\"predicate\":\"inputChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputChannel\"},{\"id\":-1566230754,\"predicate\":\"peerChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"}],\"type\":\"Peer\"},{\"id\":666680316,\"predicate\":\"inputPeerChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":179174543,\"predicate\":\"channel\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"left\",\"type\":\"flags.2?true\"},{\"name\":\"broadcast\",\"type\":\"flags.5?true\"},{\"name\":\"verified\",\"type\":\"flags.7?true\"},{\"name\":\"megagroup\",\"type\":\"flags.8?true\"},{\"name\":\"restricted\",\"type\":\"flags.9?true\"},{\"name\":\"signatures\",\"type\":\"flags.11?true\"},{\"name\":\"min\",\"type\":\"flags.12?true\"},{\"name\":\"scam\",\"type\":\"flags.19?true\"},{\"name\":\"has_link\",\"type\":\"flags.20?true\"},{\"name\":\"has_geo\",\"type\":\"flags.21?true\"},{\"name\":\"slowmode_enabled\",\"type\":\"flags.22?true\"},{\"name\":\"call_active\",\"type\":\"flags.23?true\"},{\"name\":\"call_not_empty\",\"type\":\"flags.24?true\"},{\"name\":\"fake\",\"type\":\"flags.25?true\"},{\"name\":\"gigagroup\",\"type\":\"flags.26?true\"},{\"name\":\"noforwards\",\"type\":\"flags.27?true\"},{\"name\":\"join_to_send\",\"type\":\"flags.28?true\"},{\"name\":\"join_request\",\"type\":\"flags.29?true\"},{\"name\":\"forum\",\"type\":\"flags.30?true\"},{\"name\":\"flags2\",\"type\":\"#\"},{\"name\":\"stories_hidden\",\"type\":\"flags2.1?true\"},{\"name\":\"stories_hidden_min\",\"type\":\"flags2.2?true\"},{\"name\":\"stories_unavailable\",\"type\":\"flags2.3?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"flags.13?long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"username\",\"type\":\"flags.6?string\"},{\"name\":\"photo\",\"type\":\"ChatPhoto\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"restriction_reason\",\"type\":\"flags.9?Vector\"},{\"name\":\"admin_rights\",\"type\":\"flags.14?ChatAdminRights\"},{\"name\":\"banned_rights\",\"type\":\"flags.15?ChatBannedRights\"},{\"name\":\"default_banned_rights\",\"type\":\"flags.18?ChatBannedRights\"},{\"name\":\"participants_count\",\"type\":\"flags.17?int\"},{\"name\":\"usernames\",\"type\":\"flags2.0?Vector\"},{\"name\":\"stories_max_id\",\"type\":\"flags2.4?int\"},{\"name\":\"color\",\"type\":\"flags2.7?PeerColor\"},{\"name\":\"profile_color\",\"type\":\"flags2.8?PeerColor\"},{\"name\":\"emoji_status\",\"type\":\"flags2.9?EmojiStatus\"},{\"name\":\"level\",\"type\":\"flags2.10?int\"}],\"type\":\"Chat\"},{\"id\":399807445,\"predicate\":\"channelForbidden\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"broadcast\",\"type\":\"flags.5?true\"},{\"name\":\"megagroup\",\"type\":\"flags.8?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"until_date\",\"type\":\"flags.16?int\"}],\"type\":\"Chat\"},{\"id\":2131196633,\"predicate\":\"contacts.resolvedPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.ResolvedPeer\"},{\"id\":-1146407795,\"predicate\":\"channelFull\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_view_participants\",\"type\":\"flags.3?true\"},{\"name\":\"can_set_username\",\"type\":\"flags.6?true\"},{\"name\":\"can_set_stickers\",\"type\":\"flags.7?true\"},{\"name\":\"hidden_prehistory\",\"type\":\"flags.10?true\"},{\"name\":\"can_set_location\",\"type\":\"flags.16?true\"},{\"name\":\"has_scheduled\",\"type\":\"flags.19?true\"},{\"name\":\"can_view_stats\",\"type\":\"flags.20?true\"},{\"name\":\"blocked\",\"type\":\"flags.22?true\"},{\"name\":\"flags2\",\"type\":\"#\"},{\"name\":\"can_delete_channel\",\"type\":\"flags2.0?true\"},{\"name\":\"antispam\",\"type\":\"flags2.1?true\"},{\"name\":\"participants_hidden\",\"type\":\"flags2.2?true\"},{\"name\":\"translations_disabled\",\"type\":\"flags2.3?true\"},{\"name\":\"stories_pinned_available\",\"type\":\"flags2.5?true\"},{\"name\":\"view_forum_as_messages\",\"type\":\"flags2.6?true\"},{\"name\":\"restricted_sponsored\",\"type\":\"flags2.11?true\"},{\"name\":\"can_view_revenue\",\"type\":\"flags2.12?true\"},{\"name\":\"paid_media_allowed\",\"type\":\"flags2.14?true\"},{\"name\":\"can_view_stars_revenue\",\"type\":\"flags2.15?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"participants_count\",\"type\":\"flags.0?int\"},{\"name\":\"admins_count\",\"type\":\"flags.1?int\"},{\"name\":\"kicked_count\",\"type\":\"flags.2?int\"},{\"name\":\"banned_count\",\"type\":\"flags.2?int\"},{\"name\":\"online_count\",\"type\":\"flags.13?int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"},{\"name\":\"chat_photo\",\"type\":\"Photo\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"exported_invite\",\"type\":\"flags.23?ExportedChatInvite\"},{\"name\":\"bot_info\",\"type\":\"Vector\"},{\"name\":\"migrated_from_chat_id\",\"type\":\"flags.4?long\"},{\"name\":\"migrated_from_max_id\",\"type\":\"flags.4?int\"},{\"name\":\"pinned_msg_id\",\"type\":\"flags.5?int\"},{\"name\":\"stickerset\",\"type\":\"flags.8?StickerSet\"},{\"name\":\"available_min_id\",\"type\":\"flags.9?int\"},{\"name\":\"folder_id\",\"type\":\"flags.11?int\"},{\"name\":\"linked_chat_id\",\"type\":\"flags.14?long\"},{\"name\":\"location\",\"type\":\"flags.15?ChannelLocation\"},{\"name\":\"slowmode_seconds\",\"type\":\"flags.17?int\"},{\"name\":\"slowmode_next_send_date\",\"type\":\"flags.18?int\"},{\"name\":\"stats_dc\",\"type\":\"flags.12?int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"call\",\"type\":\"flags.21?InputGroupCall\"},{\"name\":\"ttl_period\",\"type\":\"flags.24?int\"},{\"name\":\"pending_suggestions\",\"type\":\"flags.25?Vector\"},{\"name\":\"groupcall_default_join_as\",\"type\":\"flags.26?Peer\"},{\"name\":\"theme_emoticon\",\"type\":\"flags.27?string\"},{\"name\":\"requests_pending\",\"type\":\"flags.28?int\"},{\"name\":\"recent_requesters\",\"type\":\"flags.28?Vector\"},{\"name\":\"default_send_as\",\"type\":\"flags.29?Peer\"},{\"name\":\"available_reactions\",\"type\":\"flags.30?ChatReactions\"},{\"name\":\"reactions_limit\",\"type\":\"flags2.13?int\"},{\"name\":\"stories\",\"type\":\"flags2.4?PeerStories\"},{\"name\":\"wallpaper\",\"type\":\"flags2.7?WallPaper\"},{\"name\":\"boosts_applied\",\"type\":\"flags2.8?int\"},{\"name\":\"boosts_unrestrict\",\"type\":\"flags2.9?int\"},{\"name\":\"emojiset\",\"type\":\"flags2.10?StickerSet\"}],\"type\":\"ChatFull\"},{\"id\":182649427,\"predicate\":\"messageRange\",\"params\":[{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"MessageRange\"},{\"id\":-948520370,\"predicate\":\"messages.channelMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.1?true\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"offset_id_offset\",\"type\":\"flags.2?int\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"topics\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":-1781355374,\"predicate\":\"messageActionChannelCreate\",\"params\":[{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":277713951,\"predicate\":\"updateChannelTooLong\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"pts\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":1666927625,\"predicate\":\"updateChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":1656358105,\"predicate\":\"updateNewChannelMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1842450928,\"predicate\":\"updateReadChannelInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"still_unread_count\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1020437742,\"predicate\":\"updateDeleteChannelMessages\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-232346616,\"predicate\":\"updateChannelMessageViews\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"views\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1041346555,\"predicate\":\"updates.channelDifferenceEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"final\",\"type\":\"flags.0?true\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"timeout\",\"type\":\"flags.1?int\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":-1531132162,\"predicate\":\"updates.channelDifferenceTooLong\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"final\",\"type\":\"flags.0?true\"},{\"name\":\"timeout\",\"type\":\"flags.1?int\"},{\"name\":\"dialog\",\"type\":\"Dialog\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":543450958,\"predicate\":\"updates.channelDifference\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"final\",\"type\":\"flags.0?true\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"timeout\",\"type\":\"flags.1?int\"},{\"name\":\"new_messages\",\"type\":\"Vector\"},{\"name\":\"other_updates\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":-1798033689,\"predicate\":\"channelMessagesFilterEmpty\",\"params\":[],\"type\":\"ChannelMessagesFilter\"},{\"id\":-847783593,\"predicate\":\"channelMessagesFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_new_messages\",\"type\":\"flags.1?true\"},{\"name\":\"ranges\",\"type\":\"Vector\"}],\"type\":\"ChannelMessagesFilter\"},{\"id\":-1072953408,\"predicate\":\"channelParticipant\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChannelParticipant\"},{\"id\":900251559,\"predicate\":\"channelParticipantSelf\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"via_request\",\"type\":\"flags.0?true\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"inviter_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChannelParticipant\"},{\"id\":803602899,\"predicate\":\"channelParticipantCreator\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"flags.0?string\"}],\"type\":\"ChannelParticipant\"},{\"id\":-566281095,\"predicate\":\"channelParticipantsRecent\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-1268741783,\"predicate\":\"channelParticipantsAdmins\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-1548400251,\"predicate\":\"channelParticipantsKicked\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-1699676497,\"predicate\":\"channels.channelParticipants\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"channels.ChannelParticipants\"},{\"id\":-541588713,\"predicate\":\"channels.channelParticipant\",\"params\":[{\"name\":\"participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"channels.ChannelParticipant\"},{\"id\":-462696732,\"predicate\":\"chatParticipantCreator\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"ChatParticipant\"},{\"id\":-1600962725,\"predicate\":\"chatParticipantAdmin\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"inviter_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChatParticipant\"},{\"id\":-674602590,\"predicate\":\"updateChatParticipantAdmin\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"is_admin\",\"type\":\"Bool\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-519864430,\"predicate\":\"messageActionChatMigrateTo\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"}],\"type\":\"MessageAction\"},{\"id\":-365344535,\"predicate\":\"messageActionChannelMigrateFrom\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"MessageAction\"},{\"id\":-1328445861,\"predicate\":\"channelParticipantsBots\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":2013922064,\"predicate\":\"help.termsOfService\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"popup\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"DataJSON\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"},{\"name\":\"min_age_confirm\",\"type\":\"flags.1?int\"}],\"type\":\"help.TermsOfService\"},{\"id\":1753886890,\"predicate\":\"updateNewStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"messages.StickerSet\"}],\"type\":\"Update\"},{\"id\":196268545,\"predicate\":\"updateStickerSetsOrder\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"emojis\",\"type\":\"flags.1?true\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":834816008,\"predicate\":\"updateStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"emojis\",\"type\":\"flags.1?true\"}],\"type\":\"Update\"},{\"id\":-402498398,\"predicate\":\"messages.savedGifsNotModified\",\"params\":[],\"type\":\"messages.SavedGifs\"},{\"id\":-2069878259,\"predicate\":\"messages.savedGifs\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"gifs\",\"type\":\"Vector\"}],\"type\":\"messages.SavedGifs\"},{\"id\":-1821035490,\"predicate\":\"updateSavedGifs\",\"params\":[],\"type\":\"Update\"},{\"id\":864077702,\"predicate\":\"inputBotInlineMessageMediaAuto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"invert_media\",\"type\":\"flags.3?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":1036876423,\"predicate\":\"inputBotInlineMessageText\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.0?true\"},{\"name\":\"invert_media\",\"type\":\"flags.3?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":-2000710887,\"predicate\":\"inputBotInlineResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"description\",\"type\":\"flags.2?string\"},{\"name\":\"url\",\"type\":\"flags.3?string\"},{\"name\":\"thumb\",\"type\":\"flags.4?InputWebDocument\"},{\"name\":\"content\",\"type\":\"flags.5?InputWebDocument\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":1984755728,\"predicate\":\"botInlineMessageMediaAuto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"invert_media\",\"type\":\"flags.3?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1937807902,\"predicate\":\"botInlineMessageText\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.0?true\"},{\"name\":\"invert_media\",\"type\":\"flags.3?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":295067450,\"predicate\":\"botInlineResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"description\",\"type\":\"flags.2?string\"},{\"name\":\"url\",\"type\":\"flags.3?string\"},{\"name\":\"thumb\",\"type\":\"flags.4?WebDocument\"},{\"name\":\"content\",\"type\":\"flags.5?WebDocument\"},{\"name\":\"send_message\",\"type\":\"BotInlineMessage\"}],\"type\":\"BotInlineResult\"},{\"id\":-534646026,\"predicate\":\"messages.botResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"gallery\",\"type\":\"flags.0?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"next_offset\",\"type\":\"flags.1?string\"},{\"name\":\"switch_pm\",\"type\":\"flags.2?InlineBotSwitchPM\"},{\"name\":\"switch_webview\",\"type\":\"flags.3?InlineBotWebView\"},{\"name\":\"results\",\"type\":\"Vector\"},{\"name\":\"cache_time\",\"type\":\"int\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.BotResults\"},{\"id\":1232025500,\"predicate\":\"updateBotInlineQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"geo\",\"type\":\"flags.0?GeoPoint\"},{\"name\":\"peer_type\",\"type\":\"flags.1?InlineQueryPeerType\"},{\"name\":\"offset\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":317794823,\"predicate\":\"updateBotInlineSend\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"geo\",\"type\":\"flags.0?GeoPoint\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"msg_id\",\"type\":\"flags.1?InputBotInlineMessageID\"}],\"type\":\"Update\"},{\"id\":1358283666,\"predicate\":\"inputMessagesFilterVoice\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":928101534,\"predicate\":\"inputMessagesFilterMusic\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1107622874,\"predicate\":\"inputPrivacyKeyChatInvite\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1343122938,\"predicate\":\"privacyKeyChatInvite\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":1571494644,\"predicate\":\"exportedMessageLink\",\"params\":[{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"html\",\"type\":\"string\"}],\"type\":\"ExportedMessageLink\"},{\"id\":1313731771,\"predicate\":\"messageFwdHeader\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"imported\",\"type\":\"flags.7?true\"},{\"name\":\"saved_out\",\"type\":\"flags.11?true\"},{\"name\":\"from_id\",\"type\":\"flags.0?Peer\"},{\"name\":\"from_name\",\"type\":\"flags.5?string\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"channel_post\",\"type\":\"flags.2?int\"},{\"name\":\"post_author\",\"type\":\"flags.3?string\"},{\"name\":\"saved_from_peer\",\"type\":\"flags.4?Peer\"},{\"name\":\"saved_from_msg_id\",\"type\":\"flags.4?int\"},{\"name\":\"saved_from_id\",\"type\":\"flags.8?Peer\"},{\"name\":\"saved_from_name\",\"type\":\"flags.9?string\"},{\"name\":\"saved_date\",\"type\":\"flags.10?int\"},{\"name\":\"psa_type\",\"type\":\"flags.6?string\"}],\"type\":\"MessageFwdHeader\"},{\"id\":457133559,\"predicate\":\"updateEditChannelMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1799538451,\"predicate\":\"messageActionPinMessage\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":1923290508,\"predicate\":\"auth.codeTypeSms\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":1948046307,\"predicate\":\"auth.codeTypeCall\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":577556219,\"predicate\":\"auth.codeTypeFlashCall\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":1035688326,\"predicate\":\"auth.sentCodeTypeApp\",\"params\":[{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":-1073693790,\"predicate\":\"auth.sentCodeTypeSms\",\"params\":[{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":1398007207,\"predicate\":\"auth.sentCodeTypeCall\",\"params\":[{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":-1425815847,\"predicate\":\"auth.sentCodeTypeFlashCall\",\"params\":[{\"name\":\"pattern\",\"type\":\"string\"}],\"type\":\"auth.SentCodeType\"},{\"id\":629866245,\"predicate\":\"keyboardButtonUrl\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":901503851,\"predicate\":\"keyboardButtonCallback\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"requires_password\",\"type\":\"flags.0?true\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"KeyboardButton\"},{\"id\":-1318425559,\"predicate\":\"keyboardButtonRequestPhone\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":-59151553,\"predicate\":\"keyboardButtonRequestGeoLocation\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":-1816527947,\"predicate\":\"keyboardButtonSwitchInline\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"same_peer\",\"type\":\"flags.0?true\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"peer_types\",\"type\":\"flags.1?Vector\"}],\"type\":\"KeyboardButton\"},{\"id\":1218642516,\"predicate\":\"replyInlineMarkup\",\"params\":[{\"name\":\"rows\",\"type\":\"Vector\"}],\"type\":\"ReplyMarkup\"},{\"id\":911761060,\"predicate\":\"messages.botCallbackAnswer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"alert\",\"type\":\"flags.1?true\"},{\"name\":\"has_url\",\"type\":\"flags.3?true\"},{\"name\":\"native_ui\",\"type\":\"flags.4?true\"},{\"name\":\"message\",\"type\":\"flags.0?string\"},{\"name\":\"url\",\"type\":\"flags.2?string\"},{\"name\":\"cache_time\",\"type\":\"int\"}],\"type\":\"messages.BotCallbackAnswer\"},{\"id\":-1177566067,\"predicate\":\"updateBotCallbackQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"chat_instance\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"flags.0?bytes\"},{\"name\":\"game_short_name\",\"type\":\"flags.1?string\"}],\"type\":\"Update\"},{\"id\":649453030,\"predicate\":\"messages.messageEditData\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"caption\",\"type\":\"flags.0?true\"}],\"type\":\"messages.MessageEditData\"},{\"id\":-469536605,\"predicate\":\"updateEditMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1768777083,\"predicate\":\"inputBotInlineMessageMediaGeo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.0?int\"},{\"name\":\"period\",\"type\":\"flags.1?int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.3?int\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":1098628881,\"predicate\":\"inputBotInlineMessageMediaVenue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":-1494368259,\"predicate\":\"inputBotInlineMessageMediaContact\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":85477117,\"predicate\":\"botInlineMessageMediaGeo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.0?int\"},{\"name\":\"period\",\"type\":\"flags.1?int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.3?int\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1970903652,\"predicate\":\"botInlineMessageMediaVenue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":416402882,\"predicate\":\"botInlineMessageMediaContact\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1462213465,\"predicate\":\"inputBotInlineResultPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"InputPhoto\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":-459324,\"predicate\":\"inputBotInlineResultDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"description\",\"type\":\"flags.2?string\"},{\"name\":\"document\",\"type\":\"InputDocument\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":400266251,\"predicate\":\"botInlineMediaResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?Photo\"},{\"name\":\"document\",\"type\":\"flags.1?Document\"},{\"name\":\"title\",\"type\":\"flags.2?string\"},{\"name\":\"description\",\"type\":\"flags.3?string\"},{\"name\":\"send_message\",\"type\":\"BotInlineMessage\"}],\"type\":\"BotInlineResult\"},{\"id\":-1995686519,\"predicate\":\"inputBotInlineMessageID\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputBotInlineMessageID\"},{\"id\":1763610706,\"predicate\":\"updateInlineBotCallbackQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"msg_id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"chat_instance\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"flags.0?bytes\"},{\"name\":\"game_short_name\",\"type\":\"flags.1?string\"}],\"type\":\"Update\"},{\"id\":1008755359,\"predicate\":\"inlineBotSwitchPM\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"start_param\",\"type\":\"string\"}],\"type\":\"InlineBotSwitchPM\"},{\"id\":863093588,\"predicate\":\"messages.peerDialogs\",\"params\":[{\"name\":\"dialogs\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"state\",\"type\":\"updates.State\"}],\"type\":\"messages.PeerDialogs\"},{\"id\":-305282981,\"predicate\":\"topPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"rating\",\"type\":\"double\"}],\"type\":\"TopPeer\"},{\"id\":-1419371685,\"predicate\":\"topPeerCategoryBotsPM\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":344356834,\"predicate\":\"topPeerCategoryBotsInline\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":104314861,\"predicate\":\"topPeerCategoryCorrespondents\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-1122524854,\"predicate\":\"topPeerCategoryGroups\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":371037736,\"predicate\":\"topPeerCategoryChannels\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-75283823,\"predicate\":\"topPeerCategoryPeers\",\"params\":[{\"name\":\"category\",\"type\":\"TopPeerCategory\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"peers\",\"type\":\"Vector\"}],\"type\":\"TopPeerCategoryPeers\"},{\"id\":-567906571,\"predicate\":\"contacts.topPeersNotModified\",\"params\":[],\"type\":\"contacts.TopPeers\"},{\"id\":1891070632,\"predicate\":\"contacts.topPeers\",\"params\":[{\"name\":\"categories\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.TopPeers\"},{\"id\":-595914432,\"predicate\":\"messageEntityMentionName\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"MessageEntity\"},{\"id\":546203849,\"predicate\":\"inputMessageEntityMentionName\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"MessageEntity\"},{\"id\":975236280,\"predicate\":\"inputMessagesFilterChatPhotos\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1218471511,\"predicate\":\"updateReadChannelOutbox\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":457829485,\"predicate\":\"updateDraftMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"draft\",\"type\":\"DraftMessage\"}],\"type\":\"Update\"},{\"id\":453805082,\"predicate\":\"draftMessageEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"date\",\"type\":\"flags.0?int\"}],\"type\":\"DraftMessage\"},{\"id\":761606687,\"predicate\":\"draftMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"invert_media\",\"type\":\"flags.6?true\"},{\"name\":\"reply_to\",\"type\":\"flags.4?InputReplyTo\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"},{\"name\":\"media\",\"type\":\"flags.5?InputMedia\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"effect\",\"type\":\"flags.7?long\"}],\"type\":\"DraftMessage\"},{\"id\":-1615153660,\"predicate\":\"messageActionHistoryClear\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-958657434,\"predicate\":\"messages.featuredStickersNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":-1103615738,\"predicate\":\"messages.featuredStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"premium\",\"type\":\"flags.0?true\"},{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector\"},{\"name\":\"unread\",\"type\":\"Vector\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":1461528386,\"predicate\":\"updateReadFeaturedStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":186120336,\"predicate\":\"messages.recentStickersNotModified\",\"params\":[],\"type\":\"messages.RecentStickers\"},{\"id\":-1999405994,\"predicate\":\"messages.recentStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"packs\",\"type\":\"Vector\"},{\"name\":\"stickers\",\"type\":\"Vector\"},{\"name\":\"dates\",\"type\":\"Vector\"}],\"type\":\"messages.RecentStickers\"},{\"id\":-1706939360,\"predicate\":\"updateRecentStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":1338747336,\"predicate\":\"messages.archivedStickers\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector\"}],\"type\":\"messages.ArchivedStickers\"},{\"id\":946083368,\"predicate\":\"messages.stickerSetInstallResultSuccess\",\"params\":[],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":904138920,\"predicate\":\"messages.stickerSetInstallResultArchive\",\"params\":[{\"name\":\"sets\",\"type\":\"Vector\"}],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":1678812626,\"predicate\":\"stickerSetCovered\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"cover\",\"type\":\"Document\"}],\"type\":\"StickerSetCovered\"},{\"id\":-1574314746,\"predicate\":\"updateConfig\",\"params\":[],\"type\":\"Update\"},{\"id\":861169551,\"predicate\":\"updatePtsChanged\",\"params\":[],\"type\":\"Update\"},{\"id\":-440664550,\"predicate\":\"inputMediaPhotoExternal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"spoiler\",\"type\":\"flags.1?true\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":-78455655,\"predicate\":\"inputMediaDocumentExternal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"spoiler\",\"type\":\"flags.1?true\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":872932635,\"predicate\":\"stickerSetMultiCovered\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"covers\",\"type\":\"Vector\"}],\"type\":\"StickerSetCovered\"},{\"id\":-1361650766,\"predicate\":\"maskCoords\",\"params\":[{\"name\":\"n\",\"type\":\"int\"},{\"name\":\"x\",\"type\":\"double\"},{\"name\":\"y\",\"type\":\"double\"},{\"name\":\"zoom\",\"type\":\"double\"}],\"type\":\"MaskCoords\"},{\"id\":-1744710921,\"predicate\":\"documentAttributeHasStickers\",\"params\":[],\"type\":\"DocumentAttribute\"},{\"id\":1251549527,\"predicate\":\"inputStickeredMediaPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"InputStickeredMedia\"},{\"id\":70813275,\"predicate\":\"inputStickeredMediaDocument\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"}],\"type\":\"InputStickeredMedia\"},{\"id\":-1107729093,\"predicate\":\"game\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"document\",\"type\":\"flags.0?Document\"}],\"type\":\"Game\"},{\"id\":1336154098,\"predicate\":\"inputBotInlineResultGame\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":1262639204,\"predicate\":\"inputBotInlineMessageGame\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":-38694904,\"predicate\":\"messageMediaGame\",\"params\":[{\"name\":\"game\",\"type\":\"Game\"}],\"type\":\"MessageMedia\"},{\"id\":-750828557,\"predicate\":\"inputMediaGame\",\"params\":[{\"name\":\"id\",\"type\":\"InputGame\"}],\"type\":\"InputMedia\"},{\"id\":53231223,\"predicate\":\"inputGameID\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputGame\"},{\"id\":-1020139510,\"predicate\":\"inputGameShortName\",\"params\":[{\"name\":\"bot_id\",\"type\":\"InputUser\"},{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"InputGame\"},{\"id\":1358175439,\"predicate\":\"keyboardButtonGame\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":-1834538890,\"predicate\":\"messageActionGameScore\",\"params\":[{\"name\":\"game_id\",\"type\":\"long\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":1940093419,\"predicate\":\"highScore\",\"params\":[{\"name\":\"pos\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"HighScore\"},{\"id\":-1707344487,\"predicate\":\"messages.highScores\",\"params\":[{\"name\":\"scores\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.HighScores\"},{\"id\":1258196845,\"predicate\":\"updates.differenceTooLong\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"}],\"type\":\"updates.Difference\"},{\"id\":791390623,\"predicate\":\"updateChannelWebPage\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"webpage\",\"type\":\"WebPage\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1663561404,\"predicate\":\"messages.chatsSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":-599948721,\"predicate\":\"textEmpty\",\"params\":[],\"type\":\"RichText\"},{\"id\":1950782688,\"predicate\":\"textPlain\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":1730456516,\"predicate\":\"textBold\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-653089380,\"predicate\":\"textItalic\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-1054465340,\"predicate\":\"textUnderline\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-1678197867,\"predicate\":\"textStrike\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":1816074681,\"predicate\":\"textFixed\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":1009288385,\"predicate\":\"textUrl\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"webpage_id\",\"type\":\"long\"}],\"type\":\"RichText\"},{\"id\":-564523562,\"predicate\":\"textEmail\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":2120376535,\"predicate\":\"textConcat\",\"params\":[{\"name\":\"texts\",\"type\":\"Vector\"}],\"type\":\"RichText\"},{\"id\":324435594,\"predicate\":\"pageBlockUnsupported\",\"params\":[],\"type\":\"PageBlock\"},{\"id\":1890305021,\"predicate\":\"pageBlockTitle\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1879401953,\"predicate\":\"pageBlockSubtitle\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1162877472,\"predicate\":\"pageBlockAuthorDate\",\"params\":[{\"name\":\"author\",\"type\":\"RichText\"},{\"name\":\"published_date\",\"type\":\"int\"}],\"type\":\"PageBlock\"},{\"id\":-1076861716,\"predicate\":\"pageBlockHeader\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-248793375,\"predicate\":\"pageBlockSubheader\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":1182402406,\"predicate\":\"pageBlockParagraph\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1066346178,\"predicate\":\"pageBlockPreformatted\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"language\",\"type\":\"string\"}],\"type\":\"PageBlock\"},{\"id\":1216809369,\"predicate\":\"pageBlockFooter\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-618614392,\"predicate\":\"pageBlockDivider\",\"params\":[],\"type\":\"PageBlock\"},{\"id\":-837994576,\"predicate\":\"pageBlockAnchor\",\"params\":[{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"PageBlock\"},{\"id\":-454524911,\"predicate\":\"pageBlockList\",\"params\":[{\"name\":\"items\",\"type\":\"Vector\"}],\"type\":\"PageBlock\"},{\"id\":641563686,\"predicate\":\"pageBlockBlockquote\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"caption\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":1329878739,\"predicate\":\"pageBlockPullquote\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"caption\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":391759200,\"predicate\":\"pageBlockPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"photo_id\",\"type\":\"long\"},{\"name\":\"caption\",\"type\":\"PageCaption\"},{\"name\":\"url\",\"type\":\"flags.0?string\"},{\"name\":\"webpage_id\",\"type\":\"flags.0?long\"}],\"type\":\"PageBlock\"},{\"id\":2089805750,\"predicate\":\"pageBlockVideo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"autoplay\",\"type\":\"flags.0?true\"},{\"name\":\"loop\",\"type\":\"flags.1?true\"},{\"name\":\"video_id\",\"type\":\"long\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":972174080,\"predicate\":\"pageBlockCover\",\"params\":[{\"name\":\"cover\",\"type\":\"PageBlock\"}],\"type\":\"PageBlock\"},{\"id\":-1468953147,\"predicate\":\"pageBlockEmbed\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"full_width\",\"type\":\"flags.0?true\"},{\"name\":\"allow_scrolling\",\"type\":\"flags.3?true\"},{\"name\":\"url\",\"type\":\"flags.1?string\"},{\"name\":\"html\",\"type\":\"flags.2?string\"},{\"name\":\"poster_photo_id\",\"type\":\"flags.4?long\"},{\"name\":\"w\",\"type\":\"flags.5?int\"},{\"name\":\"h\",\"type\":\"flags.5?int\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":-229005301,\"predicate\":\"pageBlockEmbedPost\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"webpage_id\",\"type\":\"long\"},{\"name\":\"author_photo_id\",\"type\":\"long\"},{\"name\":\"author\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"blocks\",\"type\":\"Vector\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":1705048653,\"predicate\":\"pageBlockCollage\",\"params\":[{\"name\":\"items\",\"type\":\"Vector\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":52401552,\"predicate\":\"pageBlockSlideshow\",\"params\":[{\"name\":\"items\",\"type\":\"Vector\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":1930545681,\"predicate\":\"webPageNotModified\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"cached_page_views\",\"type\":\"flags.0?int\"}],\"type\":\"WebPage\"},{\"id\":-88417185,\"predicate\":\"inputPrivacyKeyPhoneCall\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1030105979,\"predicate\":\"privacyKeyPhoneCall\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":-580219064,\"predicate\":\"sendMessageGamePlayAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-2048646399,\"predicate\":\"phoneCallDiscardReasonMissed\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":-527056480,\"predicate\":\"phoneCallDiscardReasonDisconnect\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":1471006352,\"predicate\":\"phoneCallDiscardReasonHangup\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":-84416311,\"predicate\":\"phoneCallDiscardReasonBusy\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":1852826908,\"predicate\":\"updateDialogPinned\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"folder_id\",\"type\":\"flags.1?int\"},{\"name\":\"peer\",\"type\":\"DialogPeer\"}],\"type\":\"Update\"},{\"id\":-99664734,\"predicate\":\"updatePinnedDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.1?int\"},{\"name\":\"order\",\"type\":\"flags.0?Vector\"}],\"type\":\"Update\"},{\"id\":2104790276,\"predicate\":\"dataJSON\",\"params\":[{\"name\":\"data\",\"type\":\"string\"}],\"type\":\"DataJSON\"},{\"id\":-2095595325,\"predicate\":\"updateBotWebhookJSON\",\"params\":[{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"Update\"},{\"id\":-1684914010,\"predicate\":\"updateBotWebhookJSONQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"DataJSON\"},{\"name\":\"timeout\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-886477832,\"predicate\":\"labeledPrice\",\"params\":[{\"name\":\"label\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"}],\"type\":\"LabeledPrice\"},{\"id\":1572428309,\"predicate\":\"invoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"test\",\"type\":\"flags.0?true\"},{\"name\":\"name_requested\",\"type\":\"flags.1?true\"},{\"name\":\"phone_requested\",\"type\":\"flags.2?true\"},{\"name\":\"email_requested\",\"type\":\"flags.3?true\"},{\"name\":\"shipping_address_requested\",\"type\":\"flags.4?true\"},{\"name\":\"flexible\",\"type\":\"flags.5?true\"},{\"name\":\"phone_to_provider\",\"type\":\"flags.6?true\"},{\"name\":\"email_to_provider\",\"type\":\"flags.7?true\"},{\"name\":\"recurring\",\"type\":\"flags.9?true\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"prices\",\"type\":\"Vector\"},{\"name\":\"max_tip_amount\",\"type\":\"flags.8?long\"},{\"name\":\"suggested_tip_amounts\",\"type\":\"flags.8?Vector\"},{\"name\":\"terms_url\",\"type\":\"flags.10?string\"}],\"type\":\"Invoice\"},{\"id\":1080028941,\"predicate\":\"inputMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?InputWebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"provider\",\"type\":\"flags.3?string\"},{\"name\":\"provider_data\",\"type\":\"DataJSON\"},{\"name\":\"start_param\",\"type\":\"flags.1?string\"},{\"name\":\"extended_media\",\"type\":\"flags.2?InputMedia\"}],\"type\":\"InputMedia\"},{\"id\":-368917890,\"predicate\":\"paymentCharge\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"provider_charge_id\",\"type\":\"string\"}],\"type\":\"PaymentCharge\"},{\"id\":-1892568281,\"predicate\":\"messageActionPaymentSentMe\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"recurring_init\",\"type\":\"flags.2?true\"},{\"name\":\"recurring_used\",\"type\":\"flags.3?true\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"shipping_option_id\",\"type\":\"flags.1?string\"},{\"name\":\"charge\",\"type\":\"PaymentCharge\"}],\"type\":\"MessageAction\"},{\"id\":-156940077,\"predicate\":\"messageMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"shipping_address_requested\",\"type\":\"flags.1?true\"},{\"name\":\"test\",\"type\":\"flags.3?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?WebDocument\"},{\"name\":\"receipt_msg_id\",\"type\":\"flags.2?int\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"start_param\",\"type\":\"string\"},{\"name\":\"extended_media\",\"type\":\"flags.4?MessageExtendedMedia\"}],\"type\":\"MessageMedia\"},{\"id\":512535275,\"predicate\":\"postAddress\",\"params\":[{\"name\":\"street_line1\",\"type\":\"string\"},{\"name\":\"street_line2\",\"type\":\"string\"},{\"name\":\"city\",\"type\":\"string\"},{\"name\":\"state\",\"type\":\"string\"},{\"name\":\"country_iso2\",\"type\":\"string\"},{\"name\":\"post_code\",\"type\":\"string\"}],\"type\":\"PostAddress\"},{\"id\":-1868808300,\"predicate\":\"paymentRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"name\",\"type\":\"flags.0?string\"},{\"name\":\"phone\",\"type\":\"flags.1?string\"},{\"name\":\"email\",\"type\":\"flags.2?string\"},{\"name\":\"shipping_address\",\"type\":\"flags.3?PostAddress\"}],\"type\":\"PaymentRequestedInfo\"},{\"id\":-1344716869,\"predicate\":\"keyboardButtonBuy\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":-1776926890,\"predicate\":\"messageActionPaymentSent\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"recurring_init\",\"type\":\"flags.2?true\"},{\"name\":\"recurring_used\",\"type\":\"flags.3?true\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"invoice_slug\",\"type\":\"flags.0?string\"}],\"type\":\"MessageAction\"},{\"id\":-842892769,\"predicate\":\"paymentSavedCredentialsCard\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"PaymentSavedCredentials\"},{\"id\":475467473,\"predicate\":\"webDocument\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector\"}],\"type\":\"WebDocument\"},{\"id\":-1678949555,\"predicate\":\"inputWebDocument\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector\"}],\"type\":\"InputWebDocument\"},{\"id\":-1036396922,\"predicate\":\"inputWebFileLocation\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputWebFileLocation\"},{\"id\":568808380,\"predicate\":\"upload.webFile\",\"params\":[{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"file_type\",\"type\":\"storage.FileType\"},{\"name\":\"mtime\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"upload.WebFile\"},{\"id\":-1610250415,\"predicate\":\"payments.paymentForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_save_credentials\",\"type\":\"flags.2?true\"},{\"name\":\"password_missing\",\"type\":\"flags.3?true\"},{\"name\":\"form_id\",\"type\":\"long\"},{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.5?WebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"provider_id\",\"type\":\"long\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"native_provider\",\"type\":\"flags.4?string\"},{\"name\":\"native_params\",\"type\":\"flags.4?DataJSON\"},{\"name\":\"additional_methods\",\"type\":\"flags.6?Vector\"},{\"name\":\"saved_info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"saved_credentials\",\"type\":\"flags.1?Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"payments.PaymentForm\"},{\"id\":-784000893,\"predicate\":\"payments.validatedRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"flags.0?string\"},{\"name\":\"shipping_options\",\"type\":\"flags.1?Vector\"}],\"type\":\"payments.ValidatedRequestedInfo\"},{\"id\":1314881805,\"predicate\":\"payments.paymentResult\",\"params\":[{\"name\":\"updates\",\"type\":\"Updates\"}],\"type\":\"payments.PaymentResult\"},{\"id\":1891958275,\"predicate\":\"payments.paymentReceipt\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"provider_id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.2?WebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"shipping\",\"type\":\"flags.1?ShippingOption\"},{\"name\":\"tip_amount\",\"type\":\"flags.3?long\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"credentials_title\",\"type\":\"string\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"payments.PaymentReceipt\"},{\"id\":-74456004,\"predicate\":\"payments.savedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_saved_credentials\",\"type\":\"flags.1?true\"},{\"name\":\"saved_info\",\"type\":\"flags.0?PaymentRequestedInfo\"}],\"type\":\"payments.SavedInfo\"},{\"id\":-1056001329,\"predicate\":\"inputPaymentCredentialsSaved\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"tmp_password\",\"type\":\"bytes\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":873977640,\"predicate\":\"inputPaymentCredentials\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"save\",\"type\":\"flags.0?true\"},{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":-614138572,\"predicate\":\"account.tmpPassword\",\"params\":[{\"name\":\"tmp_password\",\"type\":\"bytes\"},{\"name\":\"valid_until\",\"type\":\"int\"}],\"type\":\"account.TmpPassword\"},{\"id\":-1239335713,\"predicate\":\"shippingOption\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"prices\",\"type\":\"Vector\"}],\"type\":\"ShippingOption\"},{\"id\":-1246823043,\"predicate\":\"updateBotShippingQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"shipping_address\",\"type\":\"PostAddress\"}],\"type\":\"Update\"},{\"id\":-1934976362,\"predicate\":\"updateBotPrecheckoutQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"shipping_option_id\",\"type\":\"flags.1?string\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":853188252,\"predicate\":\"inputStickerSetItem\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"document\",\"type\":\"InputDocument\"},{\"name\":\"emoji\",\"type\":\"string\"},{\"name\":\"mask_coords\",\"type\":\"flags.0?MaskCoords\"},{\"name\":\"keywords\",\"type\":\"flags.1?string\"}],\"type\":\"InputStickerSetItem\"},{\"id\":-1425052898,\"predicate\":\"updatePhoneCall\",\"params\":[{\"name\":\"phone_call\",\"type\":\"PhoneCall\"}],\"type\":\"Update\"},{\"id\":506920429,\"predicate\":\"inputPhoneCall\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPhoneCall\"},{\"id\":1399245077,\"predicate\":\"phoneCallEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"PhoneCall\"},{\"id\":-987599081,\"predicate\":\"phoneCallWaiting\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"participant_id\",\"type\":\"long\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"},{\"name\":\"receive_date\",\"type\":\"flags.0?int\"}],\"type\":\"PhoneCall\"},{\"id\":347139340,\"predicate\":\"phoneCallRequested\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"participant_id\",\"type\":\"long\"},{\"name\":\"g_a_hash\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"PhoneCall\"},{\"id\":912311057,\"predicate\":\"phoneCallAccepted\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"participant_id\",\"type\":\"long\"},{\"name\":\"g_b\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"PhoneCall\"},{\"id\":810769141,\"predicate\":\"phoneCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"p2p_allowed\",\"type\":\"flags.5?true\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"participant_id\",\"type\":\"long\"},{\"name\":\"g_a_or_b\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"},{\"name\":\"connections\",\"type\":\"Vector\"},{\"name\":\"start_date\",\"type\":\"int\"},{\"name\":\"custom_parameters\",\"type\":\"flags.7?DataJSON\"}],\"type\":\"PhoneCall\"},{\"id\":1355435489,\"predicate\":\"phoneCallDiscarded\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"need_rating\",\"type\":\"flags.2?true\"},{\"name\":\"need_debug\",\"type\":\"flags.3?true\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"reason\",\"type\":\"flags.0?PhoneCallDiscardReason\"},{\"name\":\"duration\",\"type\":\"flags.1?int\"}],\"type\":\"PhoneCall\"},{\"id\":-1665063993,\"predicate\":\"phoneConnection\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"tcp\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"ipv6\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"peer_tag\",\"type\":\"bytes\"}],\"type\":\"PhoneConnection\"},{\"id\":-58224696,\"predicate\":\"phoneCallProtocol\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"udp_p2p\",\"type\":\"flags.0?true\"},{\"name\":\"udp_reflector\",\"type\":\"flags.1?true\"},{\"name\":\"min_layer\",\"type\":\"int\"},{\"name\":\"max_layer\",\"type\":\"int\"},{\"name\":\"library_versions\",\"type\":\"Vector\"}],\"type\":\"PhoneCallProtocol\"},{\"id\":-326966976,\"predicate\":\"phone.phoneCall\",\"params\":[{\"name\":\"phone_call\",\"type\":\"PhoneCall\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"phone.PhoneCall\"},{\"id\":-2134272152,\"predicate\":\"inputMessagesFilterPhoneCalls\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"missed\",\"type\":\"flags.0?true\"}],\"type\":\"MessagesFilter\"},{\"id\":-2132731265,\"predicate\":\"messageActionPhoneCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.2?true\"},{\"name\":\"call_id\",\"type\":\"long\"},{\"name\":\"reason\",\"type\":\"flags.0?PhoneCallDiscardReason\"},{\"name\":\"duration\",\"type\":\"flags.1?int\"}],\"type\":\"MessageAction\"},{\"id\":2054952868,\"predicate\":\"inputMessagesFilterRoundVoice\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1253451181,\"predicate\":\"inputMessagesFilterRoundVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1997373508,\"predicate\":\"sendMessageRecordRoundAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":608050278,\"predicate\":\"sendMessageUploadRoundAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":-242427324,\"predicate\":\"upload.fileCdnRedirect\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"encryption_key\",\"type\":\"bytes\"},{\"name\":\"encryption_iv\",\"type\":\"bytes\"},{\"name\":\"file_hashes\",\"type\":\"Vector\"}],\"type\":\"upload.File\"},{\"id\":-290921362,\"predicate\":\"upload.cdnFileReuploadNeeded\",\"params\":[{\"name\":\"request_token\",\"type\":\"bytes\"}],\"type\":\"upload.CdnFile\"},{\"id\":-1449145777,\"predicate\":\"upload.cdnFile\",\"params\":[{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"upload.CdnFile\"},{\"id\":-914167110,\"predicate\":\"cdnPublicKey\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"public_key\",\"type\":\"string\"}],\"type\":\"CdnPublicKey\"},{\"id\":1462101002,\"predicate\":\"cdnConfig\",\"params\":[{\"name\":\"public_keys\",\"type\":\"Vector\"}],\"type\":\"CdnConfig\"},{\"id\":-283684427,\"predicate\":\"pageBlockChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"Chat\"}],\"type\":\"PageBlock\"},{\"id\":-892239370,\"predicate\":\"langPackString\",\"params\":[{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"}],\"type\":\"LangPackString\"},{\"id\":1816636575,\"predicate\":\"langPackStringPluralized\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"zero_value\",\"type\":\"flags.0?string\"},{\"name\":\"one_value\",\"type\":\"flags.1?string\"},{\"name\":\"two_value\",\"type\":\"flags.2?string\"},{\"name\":\"few_value\",\"type\":\"flags.3?string\"},{\"name\":\"many_value\",\"type\":\"flags.4?string\"},{\"name\":\"other_value\",\"type\":\"string\"}],\"type\":\"LangPackString\"},{\"id\":695856818,\"predicate\":\"langPackStringDeleted\",\"params\":[{\"name\":\"key\",\"type\":\"string\"}],\"type\":\"LangPackString\"},{\"id\":-209337866,\"predicate\":\"langPackDifference\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"strings\",\"type\":\"Vector\"}],\"type\":\"LangPackDifference\"},{\"id\":-288727837,\"predicate\":\"langPackLanguage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"official\",\"type\":\"flags.0?true\"},{\"name\":\"rtl\",\"type\":\"flags.2?true\"},{\"name\":\"beta\",\"type\":\"flags.3?true\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"native_name\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"base_lang_code\",\"type\":\"flags.1?string\"},{\"name\":\"plural_code\",\"type\":\"string\"},{\"name\":\"strings_count\",\"type\":\"int\"},{\"name\":\"translated_count\",\"type\":\"int\"},{\"name\":\"translations_url\",\"type\":\"string\"}],\"type\":\"LangPackLanguage\"},{\"id\":1180041828,\"predicate\":\"updateLangPackTooLong\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":1442983757,\"predicate\":\"updateLangPack\",\"params\":[{\"name\":\"difference\",\"type\":\"LangPackDifference\"}],\"type\":\"Update\"},{\"id\":885242707,\"predicate\":\"channelParticipantAdmin\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_edit\",\"type\":\"flags.0?true\"},{\"name\":\"self\",\"type\":\"flags.1?true\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"inviter_id\",\"type\":\"flags.1?long\"},{\"name\":\"promoted_by\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"flags.2?string\"}],\"type\":\"ChannelParticipant\"},{\"id\":1844969806,\"predicate\":\"channelParticipantBanned\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"left\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"kicked_by\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"ChannelParticipant\"},{\"id\":338142689,\"predicate\":\"channelParticipantsBanned\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":106343499,\"predicate\":\"channelParticipantsSearch\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-421545947,\"predicate\":\"channelAdminLogEventActionChangeTitle\",\"params\":[{\"name\":\"prev_value\",\"type\":\"string\"},{\"name\":\"new_value\",\"type\":\"string\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1427671598,\"predicate\":\"channelAdminLogEventActionChangeAbout\",\"params\":[{\"name\":\"prev_value\",\"type\":\"string\"},{\"name\":\"new_value\",\"type\":\"string\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1783299128,\"predicate\":\"channelAdminLogEventActionChangeUsername\",\"params\":[{\"name\":\"prev_value\",\"type\":\"string\"},{\"name\":\"new_value\",\"type\":\"string\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1129042607,\"predicate\":\"channelAdminLogEventActionChangePhoto\",\"params\":[{\"name\":\"prev_photo\",\"type\":\"Photo\"},{\"name\":\"new_photo\",\"type\":\"Photo\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":460916654,\"predicate\":\"channelAdminLogEventActionToggleInvites\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":648939889,\"predicate\":\"channelAdminLogEventActionToggleSignatures\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-370660328,\"predicate\":\"channelAdminLogEventActionUpdatePinned\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1889215493,\"predicate\":\"channelAdminLogEventActionEditMessage\",\"params\":[{\"name\":\"prev_message\",\"type\":\"Message\"},{\"name\":\"new_message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1121994683,\"predicate\":\"channelAdminLogEventActionDeleteMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":405815507,\"predicate\":\"channelAdminLogEventActionParticipantJoin\",\"params\":[],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-124291086,\"predicate\":\"channelAdminLogEventActionParticipantLeave\",\"params\":[],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-484690728,\"predicate\":\"channelAdminLogEventActionParticipantInvite\",\"params\":[{\"name\":\"participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-422036098,\"predicate\":\"channelAdminLogEventActionParticipantToggleBan\",\"params\":[{\"name\":\"prev_participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-714643696,\"predicate\":\"channelAdminLogEventActionParticipantToggleAdmin\",\"params\":[{\"name\":\"prev_participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":531458253,\"predicate\":\"channelAdminLogEvent\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"action\",\"type\":\"ChannelAdminLogEventAction\"}],\"type\":\"ChannelAdminLogEvent\"},{\"id\":-309659827,\"predicate\":\"channels.adminLogResults\",\"params\":[{\"name\":\"events\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"channels.AdminLogResults\"},{\"id\":-368018716,\"predicate\":\"channelAdminLogEventsFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"join\",\"type\":\"flags.0?true\"},{\"name\":\"leave\",\"type\":\"flags.1?true\"},{\"name\":\"invite\",\"type\":\"flags.2?true\"},{\"name\":\"ban\",\"type\":\"flags.3?true\"},{\"name\":\"unban\",\"type\":\"flags.4?true\"},{\"name\":\"kick\",\"type\":\"flags.5?true\"},{\"name\":\"unkick\",\"type\":\"flags.6?true\"},{\"name\":\"promote\",\"type\":\"flags.7?true\"},{\"name\":\"demote\",\"type\":\"flags.8?true\"},{\"name\":\"info\",\"type\":\"flags.9?true\"},{\"name\":\"settings\",\"type\":\"flags.10?true\"},{\"name\":\"pinned\",\"type\":\"flags.11?true\"},{\"name\":\"edit\",\"type\":\"flags.12?true\"},{\"name\":\"delete\",\"type\":\"flags.13?true\"},{\"name\":\"group_call\",\"type\":\"flags.14?true\"},{\"name\":\"invites\",\"type\":\"flags.15?true\"},{\"name\":\"send\",\"type\":\"flags.16?true\"},{\"name\":\"forums\",\"type\":\"flags.17?true\"}],\"type\":\"ChannelAdminLogEventsFilter\"},{\"id\":511092620,\"predicate\":\"topPeerCategoryPhoneCalls\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-2143067670,\"predicate\":\"pageBlockAudio\",\"params\":[{\"name\":\"audio_id\",\"type\":\"long\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":1558266229,\"predicate\":\"popularContact\",\"params\":[{\"name\":\"client_id\",\"type\":\"long\"},{\"name\":\"importers\",\"type\":\"int\"}],\"type\":\"PopularContact\"},{\"id\":1200788123,\"predicate\":\"messageActionScreenshotTaken\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-1634752813,\"predicate\":\"messages.favedStickersNotModified\",\"params\":[],\"type\":\"messages.FavedStickers\"},{\"id\":750063767,\"predicate\":\"messages.favedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"packs\",\"type\":\"Vector\"},{\"name\":\"stickers\",\"type\":\"Vector\"}],\"type\":\"messages.FavedStickers\"},{\"id\":-451831443,\"predicate\":\"updateFavedStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":-366410403,\"predicate\":\"updateChannelReadMessagesContents\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"messages\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-1040652646,\"predicate\":\"inputMessagesFilterMyMentions\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":1887741886,\"predicate\":\"updateContactsReset\",\"params\":[],\"type\":\"Update\"},{\"id\":-1312568665,\"predicate\":\"channelAdminLogEventActionChangeStickerSet\",\"params\":[{\"name\":\"prev_stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"new_stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-85549226,\"predicate\":\"messageActionCustomAction\",\"params\":[{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":178373535,\"predicate\":\"inputPaymentCredentialsApplePay\",\"params\":[{\"name\":\"payment_data\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":-419271411,\"predicate\":\"inputMessagesFilterGeo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-530392189,\"predicate\":\"inputMessagesFilterContacts\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1304443240,\"predicate\":\"updateChannelAvailableMessages\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"available_min_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1599903217,\"predicate\":\"channelAdminLogEventActionTogglePreHistoryHidden\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1759532989,\"predicate\":\"inputMediaGeoLive\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"stopped\",\"type\":\"flags.0?true\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.2?int\"},{\"name\":\"period\",\"type\":\"flags.1?int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.3?int\"}],\"type\":\"InputMedia\"},{\"id\":-1186937242,\"predicate\":\"messageMediaGeoLive\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.0?int\"},{\"name\":\"period\",\"type\":\"int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.1?int\"}],\"type\":\"MessageMedia\"},{\"id\":1189204285,\"predicate\":\"recentMeUrlUnknown\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"RecentMeUrl\"},{\"id\":-1188296222,\"predicate\":\"recentMeUrlUser\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"RecentMeUrl\"},{\"id\":-1294306862,\"predicate\":\"recentMeUrlChat\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"RecentMeUrl\"},{\"id\":-347535331,\"predicate\":\"recentMeUrlChatInvite\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"chat_invite\",\"type\":\"ChatInvite\"}],\"type\":\"RecentMeUrl\"},{\"id\":-1140172836,\"predicate\":\"recentMeUrlStickerSet\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"set\",\"type\":\"StickerSetCovered\"}],\"type\":\"RecentMeUrl\"},{\"id\":235081943,\"predicate\":\"help.recentMeUrls\",\"params\":[{\"name\":\"urls\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"help.RecentMeUrls\"},{\"id\":-266911767,\"predicate\":\"channels.channelParticipantsNotModified\",\"params\":[],\"type\":\"channels.ChannelParticipants\"},{\"id\":1951620897,\"predicate\":\"messages.messagesNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":482797855,\"predicate\":\"inputSingleMedia\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"media\",\"type\":\"InputMedia\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.0?Vector\"}],\"type\":\"InputSingleMedia\"},{\"id\":-1493633966,\"predicate\":\"webAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"domain\",\"type\":\"string\"},{\"name\":\"browser\",\"type\":\"string\"},{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"date_created\",\"type\":\"int\"},{\"name\":\"date_active\",\"type\":\"int\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"region\",\"type\":\"string\"}],\"type\":\"WebAuthorization\"},{\"id\":-313079300,\"predicate\":\"account.webAuthorizations\",\"params\":[{\"name\":\"authorizations\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"account.WebAuthorizations\"},{\"id\":-1502174430,\"predicate\":\"inputMessageID\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"InputMessage\"},{\"id\":-1160215659,\"predicate\":\"inputMessageReplyTo\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"InputMessage\"},{\"id\":-2037963464,\"predicate\":\"inputMessagePinned\",\"params\":[],\"type\":\"InputMessage\"},{\"id\":-1687559349,\"predicate\":\"messageEntityPhone\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1280209983,\"predicate\":\"messageEntityCashtag\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-988359047,\"predicate\":\"messageActionBotAllowed\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attach_menu\",\"type\":\"flags.1?true\"},{\"name\":\"from_request\",\"type\":\"flags.3?true\"},{\"name\":\"domain\",\"type\":\"flags.0?string\"},{\"name\":\"app\",\"type\":\"flags.2?BotApp\"}],\"type\":\"MessageAction\"},{\"id\":-55902537,\"predicate\":\"inputDialogPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"InputDialogPeer\"},{\"id\":-445792507,\"predicate\":\"dialogPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"DialogPeer\"},{\"id\":223655517,\"predicate\":\"messages.foundStickerSetsNotModified\",\"params\":[],\"type\":\"messages.FoundStickerSets\"},{\"id\":-1963942446,\"predicate\":\"messages.foundStickerSets\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"sets\",\"type\":\"Vector\"}],\"type\":\"messages.FoundStickerSets\"},{\"id\":-207944868,\"predicate\":\"fileHash\",\"params\":[{\"name\":\"offset\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"FileHash\"},{\"id\":-104284986,\"predicate\":\"webDocumentNoProxy\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector\"}],\"type\":\"WebDocument\"},{\"id\":1968737087,\"predicate\":\"inputClientProxy\",\"params\":[{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"}],\"type\":\"InputClientProxy\"},{\"id\":-483352705,\"predicate\":\"help.termsOfServiceUpdateEmpty\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"help.TermsOfServiceUpdate\"},{\"id\":686618977,\"predicate\":\"help.termsOfServiceUpdate\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"terms_of_service\",\"type\":\"help.TermsOfService\"}],\"type\":\"help.TermsOfServiceUpdate\"},{\"id\":859091184,\"predicate\":\"inputSecureFileUploaded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"md5_checksum\",\"type\":\"string\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"InputSecureFile\"},{\"id\":1399317950,\"predicate\":\"inputSecureFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputSecureFile\"},{\"id\":-876089816,\"predicate\":\"inputSecureFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":1679398724,\"predicate\":\"secureFileEmpty\",\"params\":[],\"type\":\"SecureFile\"},{\"id\":2097791614,\"predicate\":\"secureFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"long\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"SecureFile\"},{\"id\":-1964327229,\"predicate\":\"secureData\",\"params\":[{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"data_hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"SecureData\"},{\"id\":2103482845,\"predicate\":\"securePlainPhone\",\"params\":[{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"SecurePlainData\"},{\"id\":569137759,\"predicate\":\"securePlainEmail\",\"params\":[{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"SecurePlainData\"},{\"id\":-1658158621,\"predicate\":\"secureValueTypePersonalDetails\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":1034709504,\"predicate\":\"secureValueTypePassport\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":115615172,\"predicate\":\"secureValueTypeDriverLicense\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1596951477,\"predicate\":\"secureValueTypeIdentityCard\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1717268701,\"predicate\":\"secureValueTypeInternalPassport\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-874308058,\"predicate\":\"secureValueTypeAddress\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-63531698,\"predicate\":\"secureValueTypeUtilityBill\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1995211763,\"predicate\":\"secureValueTypeBankStatement\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1954007928,\"predicate\":\"secureValueTypeRentalAgreement\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1713143702,\"predicate\":\"secureValueTypePassportRegistration\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-368907213,\"predicate\":\"secureValueTypeTemporaryRegistration\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1289704741,\"predicate\":\"secureValueTypePhone\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1908627474,\"predicate\":\"secureValueTypeEmail\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":411017418,\"predicate\":\"secureValue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"data\",\"type\":\"flags.0?SecureData\"},{\"name\":\"front_side\",\"type\":\"flags.1?SecureFile\"},{\"name\":\"reverse_side\",\"type\":\"flags.2?SecureFile\"},{\"name\":\"selfie\",\"type\":\"flags.3?SecureFile\"},{\"name\":\"translation\",\"type\":\"flags.6?Vector\"},{\"name\":\"files\",\"type\":\"flags.4?Vector\"},{\"name\":\"plain_data\",\"type\":\"flags.5?SecurePlainData\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"SecureValue\"},{\"id\":-618540889,\"predicate\":\"inputSecureValue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"data\",\"type\":\"flags.0?SecureData\"},{\"name\":\"front_side\",\"type\":\"flags.1?InputSecureFile\"},{\"name\":\"reverse_side\",\"type\":\"flags.2?InputSecureFile\"},{\"name\":\"selfie\",\"type\":\"flags.3?InputSecureFile\"},{\"name\":\"translation\",\"type\":\"flags.6?Vector\"},{\"name\":\"files\",\"type\":\"flags.4?Vector\"},{\"name\":\"plain_data\",\"type\":\"flags.5?SecurePlainData\"}],\"type\":\"InputSecureValue\"},{\"id\":-316748368,\"predicate\":\"secureValueHash\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"SecureValueHash\"},{\"id\":-391902247,\"predicate\":\"secureValueErrorData\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"data_hash\",\"type\":\"bytes\"},{\"name\":\"field\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":12467706,\"predicate\":\"secureValueErrorFrontSide\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-2037765467,\"predicate\":\"secureValueErrorReverseSide\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-449327402,\"predicate\":\"secureValueErrorSelfie\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":2054162547,\"predicate\":\"secureValueErrorFile\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":1717706985,\"predicate\":\"secureValueErrorFiles\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"Vector\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":871426631,\"predicate\":\"secureCredentialsEncrypted\",\"params\":[{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"SecureCredentialsEncrypted\"},{\"id\":-1389486888,\"predicate\":\"account.authorizationForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"required_types\",\"type\":\"Vector\"},{\"name\":\"values\",\"type\":\"Vector\"},{\"name\":\"errors\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"privacy_policy_url\",\"type\":\"flags.0?string\"}],\"type\":\"account.AuthorizationForm\"},{\"id\":-2128640689,\"predicate\":\"account.sentEmailCode\",\"params\":[{\"name\":\"email_pattern\",\"type\":\"string\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"account.SentEmailCode\"},{\"id\":455635795,\"predicate\":\"messageActionSecureValuesSentMe\",\"params\":[{\"name\":\"values\",\"type\":\"Vector\"},{\"name\":\"credentials\",\"type\":\"SecureCredentialsEncrypted\"}],\"type\":\"MessageAction\"},{\"id\":-648257196,\"predicate\":\"messageActionSecureValuesSent\",\"params\":[{\"name\":\"types\",\"type\":\"Vector\"}],\"type\":\"MessageAction\"},{\"id\":1722786150,\"predicate\":\"help.deepLinkInfoEmpty\",\"params\":[],\"type\":\"help.DeepLinkInfo\"},{\"id\":1783556146,\"predicate\":\"help.deepLinkInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"update_app\",\"type\":\"flags.0?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"}],\"type\":\"help.DeepLinkInfo\"},{\"id\":289586518,\"predicate\":\"savedPhoneContact\",\"params\":[{\"name\":\"phone\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"SavedContact\"},{\"id\":1304052993,\"predicate\":\"account.takeout\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"account.Takeout\"},{\"id\":700340377,\"predicate\":\"inputTakeoutFileLocation\",\"params\":[],\"type\":\"InputFileLocation\"},{\"id\":-513517117,\"predicate\":\"updateDialogUnreadMark\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"unread\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"DialogPeer\"}],\"type\":\"Update\"},{\"id\":-253500010,\"predicate\":\"messages.dialogsNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.Dialogs\"},{\"id\":-1625153079,\"predicate\":\"inputWebFileGeoPointLocation\",\"params\":[{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"zoom\",\"type\":\"int\"},{\"name\":\"scale\",\"type\":\"int\"}],\"type\":\"InputWebFileLocation\"},{\"id\":-1255369827,\"predicate\":\"contacts.topPeersDisabled\",\"params\":[],\"type\":\"contacts.TopPeers\"},{\"id\":-1685456582,\"predicate\":\"inputReportReasonCopyright\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-732254058,\"predicate\":\"passwordKdfAlgoUnknown\",\"params\":[],\"type\":\"PasswordKdfAlgo\"},{\"id\":4883767,\"predicate\":\"securePasswordKdfAlgoUnknown\",\"params\":[],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":-1141711456,\"predicate\":\"securePasswordKdfAlgoPBKDF2HMACSHA512iter100000\",\"params\":[{\"name\":\"salt\",\"type\":\"bytes\"}],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":-2042159726,\"predicate\":\"securePasswordKdfAlgoSHA512\",\"params\":[{\"name\":\"salt\",\"type\":\"bytes\"}],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":354925740,\"predicate\":\"secureSecretSettings\",\"params\":[{\"name\":\"secure_algo\",\"type\":\"SecurePasswordKdfAlgo\"},{\"name\":\"secure_secret\",\"type\":\"bytes\"},{\"name\":\"secure_secret_id\",\"type\":\"long\"}],\"type\":\"SecureSecretSettings\"},{\"id\":982592842,\"predicate\":\"passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow\",\"params\":[{\"name\":\"salt1\",\"type\":\"bytes\"},{\"name\":\"salt2\",\"type\":\"bytes\"},{\"name\":\"g\",\"type\":\"int\"},{\"name\":\"p\",\"type\":\"bytes\"}],\"type\":\"PasswordKdfAlgo\"},{\"id\":-1736378792,\"predicate\":\"inputCheckPasswordEmpty\",\"params\":[],\"type\":\"InputCheckPasswordSRP\"},{\"id\":-763367294,\"predicate\":\"inputCheckPasswordSRP\",\"params\":[{\"name\":\"srp_id\",\"type\":\"long\"},{\"name\":\"A\",\"type\":\"bytes\"},{\"name\":\"M1\",\"type\":\"bytes\"}],\"type\":\"InputCheckPasswordSRP\"},{\"id\":-2036501105,\"predicate\":\"secureValueError\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-1592506512,\"predicate\":\"secureValueErrorTranslationFile\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":878931416,\"predicate\":\"secureValueErrorTranslationFiles\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"Vector\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-2103600678,\"predicate\":\"secureRequiredType\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"native_names\",\"type\":\"flags.0?true\"},{\"name\":\"selfie_required\",\"type\":\"flags.1?true\"},{\"name\":\"translation_required\",\"type\":\"flags.2?true\"},{\"name\":\"type\",\"type\":\"SecureValueType\"}],\"type\":\"SecureRequiredType\"},{\"id\":41187252,\"predicate\":\"secureRequiredTypeOneOf\",\"params\":[{\"name\":\"types\",\"type\":\"Vector\"}],\"type\":\"SecureRequiredType\"},{\"id\":-1078332329,\"predicate\":\"help.passportConfigNotModified\",\"params\":[],\"type\":\"help.PassportConfig\"},{\"id\":-1600596305,\"predicate\":\"help.passportConfig\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"countries_langs\",\"type\":\"DataJSON\"}],\"type\":\"help.PassportConfig\"},{\"id\":488313413,\"predicate\":\"inputAppEvent\",\"params\":[{\"name\":\"time\",\"type\":\"double\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"peer\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"JSONValue\"}],\"type\":\"InputAppEvent\"},{\"id\":-1059185703,\"predicate\":\"jsonObjectValue\",\"params\":[{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"JSONValue\"}],\"type\":\"JSONObjectValue\"},{\"id\":1064139624,\"predicate\":\"jsonNull\",\"params\":[],\"type\":\"JSONValue\"},{\"id\":-952869270,\"predicate\":\"jsonBool\",\"params\":[{\"name\":\"value\",\"type\":\"Bool\"}],\"type\":\"JSONValue\"},{\"id\":736157604,\"predicate\":\"jsonNumber\",\"params\":[{\"name\":\"value\",\"type\":\"double\"}],\"type\":\"JSONValue\"},{\"id\":-1222740358,\"predicate\":\"jsonString\",\"params\":[{\"name\":\"value\",\"type\":\"string\"}],\"type\":\"JSONValue\"},{\"id\":-146520221,\"predicate\":\"jsonArray\",\"params\":[{\"name\":\"value\",\"type\":\"Vector\"}],\"type\":\"JSONValue\"},{\"id\":-1715350371,\"predicate\":\"jsonObject\",\"params\":[{\"name\":\"value\",\"type\":\"Vector\"}],\"type\":\"JSONValue\"},{\"id\":-1311015810,\"predicate\":\"inputNotifyBroadcasts\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":-703403793,\"predicate\":\"notifyBroadcasts\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":-311786236,\"predicate\":\"textSubscript\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-939827711,\"predicate\":\"textSuperscript\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":55281185,\"predicate\":\"textMarked\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":483104362,\"predicate\":\"textPhone\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":136105807,\"predicate\":\"textImage\",\"params\":[{\"name\":\"document_id\",\"type\":\"long\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"}],\"type\":\"RichText\"},{\"id\":504660880,\"predicate\":\"pageBlockKicker\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":878078826,\"predicate\":\"pageTableCell\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"header\",\"type\":\"flags.0?true\"},{\"name\":\"align_center\",\"type\":\"flags.3?true\"},{\"name\":\"align_right\",\"type\":\"flags.4?true\"},{\"name\":\"valign_middle\",\"type\":\"flags.5?true\"},{\"name\":\"valign_bottom\",\"type\":\"flags.6?true\"},{\"name\":\"text\",\"type\":\"flags.7?RichText\"},{\"name\":\"colspan\",\"type\":\"flags.1?int\"},{\"name\":\"rowspan\",\"type\":\"flags.2?int\"}],\"type\":\"PageTableCell\"},{\"id\":-524237339,\"predicate\":\"pageTableRow\",\"params\":[{\"name\":\"cells\",\"type\":\"Vector\"}],\"type\":\"PageTableRow\"},{\"id\":-1085412734,\"predicate\":\"pageBlockTable\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"bordered\",\"type\":\"flags.0?true\"},{\"name\":\"striped\",\"type\":\"flags.1?true\"},{\"name\":\"title\",\"type\":\"RichText\"},{\"name\":\"rows\",\"type\":\"Vector\"}],\"type\":\"PageBlock\"},{\"id\":1869903447,\"predicate\":\"pageCaption\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"credit\",\"type\":\"RichText\"}],\"type\":\"PageCaption\"},{\"id\":-1188055347,\"predicate\":\"pageListItemText\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageListItem\"},{\"id\":635466748,\"predicate\":\"pageListItemBlocks\",\"params\":[{\"name\":\"blocks\",\"type\":\"Vector\"}],\"type\":\"PageListItem\"},{\"id\":1577484359,\"predicate\":\"pageListOrderedItemText\",\"params\":[{\"name\":\"num\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageListOrderedItem\"},{\"id\":-1730311882,\"predicate\":\"pageListOrderedItemBlocks\",\"params\":[{\"name\":\"num\",\"type\":\"string\"},{\"name\":\"blocks\",\"type\":\"Vector\"}],\"type\":\"PageListOrderedItem\"},{\"id\":-1702174239,\"predicate\":\"pageBlockOrderedList\",\"params\":[{\"name\":\"items\",\"type\":\"Vector\"}],\"type\":\"PageBlock\"},{\"id\":1987480557,\"predicate\":\"pageBlockDetails\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"open\",\"type\":\"flags.0?true\"},{\"name\":\"blocks\",\"type\":\"Vector\"},{\"name\":\"title\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1282352120,\"predicate\":\"pageRelatedArticle\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"webpage_id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"description\",\"type\":\"flags.1?string\"},{\"name\":\"photo_id\",\"type\":\"flags.2?long\"},{\"name\":\"author\",\"type\":\"flags.3?string\"},{\"name\":\"published_date\",\"type\":\"flags.4?int\"}],\"type\":\"PageRelatedArticle\"},{\"id\":370236054,\"predicate\":\"pageBlockRelatedArticles\",\"params\":[{\"name\":\"title\",\"type\":\"RichText\"},{\"name\":\"articles\",\"type\":\"Vector\"}],\"type\":\"PageBlock\"},{\"id\":-1538310410,\"predicate\":\"pageBlockMap\",\"params\":[{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"zoom\",\"type\":\"int\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":-1738178803,\"predicate\":\"page\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"part\",\"type\":\"flags.0?true\"},{\"name\":\"rtl\",\"type\":\"flags.1?true\"},{\"name\":\"v2\",\"type\":\"flags.2?true\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"blocks\",\"type\":\"Vector\"},{\"name\":\"photos\",\"type\":\"Vector\"},{\"name\":\"documents\",\"type\":\"Vector\"},{\"name\":\"views\",\"type\":\"flags.3?int\"}],\"type\":\"Page\"},{\"id\":-610373422,\"predicate\":\"inputPrivacyKeyPhoneP2P\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":961092808,\"predicate\":\"privacyKeyPhoneP2P\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":894777186,\"predicate\":\"textAnchor\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":-1945767479,\"predicate\":\"help.supportName\",\"params\":[{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"help.SupportName\"},{\"id\":-206688531,\"predicate\":\"help.userInfoEmpty\",\"params\":[],\"type\":\"help.UserInfo\"},{\"id\":32192344,\"predicate\":\"help.userInfo\",\"params\":[{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"},{\"name\":\"author\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"help.UserInfo\"},{\"id\":-202219658,\"predicate\":\"messageActionContactSignUp\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-1398708869,\"predicate\":\"updateMessagePoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"poll_id\",\"type\":\"long\"},{\"name\":\"poll\",\"type\":\"flags.0?Poll\"},{\"name\":\"results\",\"type\":\"PollResults\"}],\"type\":\"Update\"},{\"id\":-15277366,\"predicate\":\"pollAnswer\",\"params\":[{\"name\":\"text\",\"type\":\"TextWithEntities\"},{\"name\":\"option\",\"type\":\"bytes\"}],\"type\":\"PollAnswer\"},{\"id\":1484026161,\"predicate\":\"poll\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"closed\",\"type\":\"flags.0?true\"},{\"name\":\"public_voters\",\"type\":\"flags.1?true\"},{\"name\":\"multiple_choice\",\"type\":\"flags.2?true\"},{\"name\":\"quiz\",\"type\":\"flags.3?true\"},{\"name\":\"question\",\"type\":\"TextWithEntities\"},{\"name\":\"answers\",\"type\":\"Vector\"},{\"name\":\"close_period\",\"type\":\"flags.4?int\"},{\"name\":\"close_date\",\"type\":\"flags.5?int\"}],\"type\":\"Poll\"},{\"id\":997055186,\"predicate\":\"pollAnswerVoters\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chosen\",\"type\":\"flags.0?true\"},{\"name\":\"correct\",\"type\":\"flags.1?true\"},{\"name\":\"option\",\"type\":\"bytes\"},{\"name\":\"voters\",\"type\":\"int\"}],\"type\":\"PollAnswerVoters\"},{\"id\":2061444128,\"predicate\":\"pollResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"min\",\"type\":\"flags.0?true\"},{\"name\":\"results\",\"type\":\"flags.1?Vector\"},{\"name\":\"total_voters\",\"type\":\"flags.2?int\"},{\"name\":\"recent_voters\",\"type\":\"flags.3?Vector\"},{\"name\":\"solution\",\"type\":\"flags.4?string\"},{\"name\":\"solution_entities\",\"type\":\"flags.4?Vector\"}],\"type\":\"PollResults\"},{\"id\":261416433,\"predicate\":\"inputMediaPoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"poll\",\"type\":\"Poll\"},{\"name\":\"correct_answers\",\"type\":\"flags.0?Vector\"},{\"name\":\"solution\",\"type\":\"flags.1?string\"},{\"name\":\"solution_entities\",\"type\":\"flags.1?Vector\"}],\"type\":\"InputMedia\"},{\"id\":1272375192,\"predicate\":\"messageMediaPoll\",\"params\":[{\"name\":\"poll\",\"type\":\"Poll\"},{\"name\":\"results\",\"type\":\"PollResults\"}],\"type\":\"MessageMedia\"},{\"id\":-264117680,\"predicate\":\"chatOnlines\",\"params\":[{\"name\":\"onlines\",\"type\":\"int\"}],\"type\":\"ChatOnlines\"},{\"id\":1202287072,\"predicate\":\"statsURL\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"StatsURL\"},{\"id\":-525288402,\"predicate\":\"photoStrippedSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":1605510357,\"predicate\":\"chatAdminRights\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"change_info\",\"type\":\"flags.0?true\"},{\"name\":\"post_messages\",\"type\":\"flags.1?true\"},{\"name\":\"edit_messages\",\"type\":\"flags.2?true\"},{\"name\":\"delete_messages\",\"type\":\"flags.3?true\"},{\"name\":\"ban_users\",\"type\":\"flags.4?true\"},{\"name\":\"invite_users\",\"type\":\"flags.5?true\"},{\"name\":\"pin_messages\",\"type\":\"flags.7?true\"},{\"name\":\"add_admins\",\"type\":\"flags.9?true\"},{\"name\":\"anonymous\",\"type\":\"flags.10?true\"},{\"name\":\"manage_call\",\"type\":\"flags.11?true\"},{\"name\":\"other\",\"type\":\"flags.12?true\"},{\"name\":\"manage_topics\",\"type\":\"flags.13?true\"},{\"name\":\"post_stories\",\"type\":\"flags.14?true\"},{\"name\":\"edit_stories\",\"type\":\"flags.15?true\"},{\"name\":\"delete_stories\",\"type\":\"flags.16?true\"}],\"type\":\"ChatAdminRights\"},{\"id\":-1626209256,\"predicate\":\"chatBannedRights\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"view_messages\",\"type\":\"flags.0?true\"},{\"name\":\"send_messages\",\"type\":\"flags.1?true\"},{\"name\":\"send_media\",\"type\":\"flags.2?true\"},{\"name\":\"send_stickers\",\"type\":\"flags.3?true\"},{\"name\":\"send_gifs\",\"type\":\"flags.4?true\"},{\"name\":\"send_games\",\"type\":\"flags.5?true\"},{\"name\":\"send_inline\",\"type\":\"flags.6?true\"},{\"name\":\"embed_links\",\"type\":\"flags.7?true\"},{\"name\":\"send_polls\",\"type\":\"flags.8?true\"},{\"name\":\"change_info\",\"type\":\"flags.10?true\"},{\"name\":\"invite_users\",\"type\":\"flags.15?true\"},{\"name\":\"pin_messages\",\"type\":\"flags.17?true\"},{\"name\":\"manage_topics\",\"type\":\"flags.18?true\"},{\"name\":\"send_photos\",\"type\":\"flags.19?true\"},{\"name\":\"send_videos\",\"type\":\"flags.20?true\"},{\"name\":\"send_roundvideos\",\"type\":\"flags.21?true\"},{\"name\":\"send_audios\",\"type\":\"flags.22?true\"},{\"name\":\"send_voices\",\"type\":\"flags.23?true\"},{\"name\":\"send_docs\",\"type\":\"flags.24?true\"},{\"name\":\"send_plain\",\"type\":\"flags.25?true\"},{\"name\":\"until_date\",\"type\":\"int\"}],\"type\":\"ChatBannedRights\"},{\"id\":1421875280,\"predicate\":\"updateChatDefaultBannedRights\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"default_banned_rights\",\"type\":\"ChatBannedRights\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-433014407,\"predicate\":\"inputWallPaper\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputWallPaper\"},{\"id\":1913199744,\"predicate\":\"inputWallPaperSlug\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"InputWallPaper\"},{\"id\":-1150621555,\"predicate\":\"channelParticipantsContacts\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":771095562,\"predicate\":\"channelAdminLogEventActionDefaultBannedRights\",\"params\":[{\"name\":\"prev_banned_rights\",\"type\":\"ChatBannedRights\"},{\"name\":\"new_banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1895328189,\"predicate\":\"channelAdminLogEventActionStopPoll\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":471437699,\"predicate\":\"account.wallPapersNotModified\",\"params\":[],\"type\":\"account.WallPapers\"},{\"id\":-842824308,\"predicate\":\"account.wallPapers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"wallpapers\",\"type\":\"Vector\"}],\"type\":\"account.WallPapers\"},{\"id\":-1390068360,\"predicate\":\"codeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"allow_flashcall\",\"type\":\"flags.0?true\"},{\"name\":\"current_number\",\"type\":\"flags.1?true\"},{\"name\":\"allow_app_hash\",\"type\":\"flags.4?true\"},{\"name\":\"allow_missed_call\",\"type\":\"flags.5?true\"},{\"name\":\"allow_firebase\",\"type\":\"flags.7?true\"},{\"name\":\"unknown_number\",\"type\":\"flags.9?true\"},{\"name\":\"logout_tokens\",\"type\":\"flags.6?Vector\"},{\"name\":\"token\",\"type\":\"flags.8?string\"},{\"name\":\"app_sandbox\",\"type\":\"flags.8?Bool\"}],\"type\":\"CodeSettings\"},{\"id\":925826256,\"predicate\":\"wallPaperSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"blur\",\"type\":\"flags.1?true\"},{\"name\":\"motion\",\"type\":\"flags.2?true\"},{\"name\":\"background_color\",\"type\":\"flags.0?int\"},{\"name\":\"second_background_color\",\"type\":\"flags.4?int\"},{\"name\":\"third_background_color\",\"type\":\"flags.5?int\"},{\"name\":\"fourth_background_color\",\"type\":\"flags.6?int\"},{\"name\":\"intensity\",\"type\":\"flags.3?int\"},{\"name\":\"rotation\",\"type\":\"flags.4?int\"},{\"name\":\"emoticon\",\"type\":\"flags.7?string\"}],\"type\":\"WallPaperSettings\"},{\"id\":-1163561432,\"predicate\":\"autoDownloadSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"disabled\",\"type\":\"flags.0?true\"},{\"name\":\"video_preload_large\",\"type\":\"flags.1?true\"},{\"name\":\"audio_preload_next\",\"type\":\"flags.2?true\"},{\"name\":\"phonecalls_less_data\",\"type\":\"flags.3?true\"},{\"name\":\"stories_preload\",\"type\":\"flags.4?true\"},{\"name\":\"photo_size_max\",\"type\":\"int\"},{\"name\":\"video_size_max\",\"type\":\"long\"},{\"name\":\"file_size_max\",\"type\":\"long\"},{\"name\":\"video_upload_maxbitrate\",\"type\":\"int\"},{\"name\":\"small_queue_active_operations_max\",\"type\":\"int\"},{\"name\":\"large_queue_active_operations_max\",\"type\":\"int\"}],\"type\":\"AutoDownloadSettings\"},{\"id\":1674235686,\"predicate\":\"account.autoDownloadSettings\",\"params\":[{\"name\":\"low\",\"type\":\"AutoDownloadSettings\"},{\"name\":\"medium\",\"type\":\"AutoDownloadSettings\"},{\"name\":\"high\",\"type\":\"AutoDownloadSettings\"}],\"type\":\"account.AutoDownloadSettings\"},{\"id\":-709641735,\"predicate\":\"emojiKeyword\",\"params\":[{\"name\":\"keyword\",\"type\":\"string\"},{\"name\":\"emoticons\",\"type\":\"Vector\"}],\"type\":\"EmojiKeyword\"},{\"id\":594408994,\"predicate\":\"emojiKeywordDeleted\",\"params\":[{\"name\":\"keyword\",\"type\":\"string\"},{\"name\":\"emoticons\",\"type\":\"Vector\"}],\"type\":\"EmojiKeyword\"},{\"id\":1556570557,\"predicate\":\"emojiKeywordsDifference\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"keywords\",\"type\":\"Vector\"}],\"type\":\"EmojiKeywordsDifference\"},{\"id\":-1519029347,\"predicate\":\"emojiURL\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"EmojiURL\"},{\"id\":-1275374751,\"predicate\":\"emojiLanguage\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiLanguage\"},{\"id\":-1529000952,\"predicate\":\"inputPrivacyKeyForwards\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1777096355,\"predicate\":\"privacyKeyForwards\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":1461304012,\"predicate\":\"inputPrivacyKeyProfilePhoto\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":-1777000467,\"predicate\":\"privacyKeyProfilePhoto\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":1075322878,\"predicate\":\"inputPhotoFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"thumb_size\",\"type\":\"string\"}],\"type\":\"InputFileLocation\"},{\"id\":-667654413,\"predicate\":\"inputPhotoLegacyFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"volume_id\",\"type\":\"long\"},{\"name\":\"local_id\",\"type\":\"int\"},{\"name\":\"secret\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":925204121,\"predicate\":\"inputPeerPhotoFileLocation\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"big\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"photo_id\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":-1652231205,\"predicate\":\"inputStickerSetThumb\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"thumb_version\",\"type\":\"int\"}],\"type\":\"InputFileLocation\"},{\"id\":-11252123,\"predicate\":\"folder\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"autofill_new_broadcasts\",\"type\":\"flags.0?true\"},{\"name\":\"autofill_public_groups\",\"type\":\"flags.1?true\"},{\"name\":\"autofill_new_correspondents\",\"type\":\"flags.2?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.3?ChatPhoto\"}],\"type\":\"Folder\"},{\"id\":1908216652,\"predicate\":\"dialogFolder\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.2?true\"},{\"name\":\"folder\",\"type\":\"Folder\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"top_message\",\"type\":\"int\"},{\"name\":\"unread_muted_peers_count\",\"type\":\"int\"},{\"name\":\"unread_unmuted_peers_count\",\"type\":\"int\"},{\"name\":\"unread_muted_messages_count\",\"type\":\"int\"},{\"name\":\"unread_unmuted_messages_count\",\"type\":\"int\"}],\"type\":\"Dialog\"},{\"id\":1684014375,\"predicate\":\"inputDialogPeerFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"InputDialogPeer\"},{\"id\":1363483106,\"predicate\":\"dialogPeerFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"DialogPeer\"},{\"id\":-70073706,\"predicate\":\"inputFolderPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"InputFolderPeer\"},{\"id\":-373643672,\"predicate\":\"folderPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"FolderPeer\"},{\"id\":422972864,\"predicate\":\"updateFolderPeers\",\"params\":[{\"name\":\"folder_peers\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":497305826,\"predicate\":\"inputUserFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"InputUser\"},{\"id\":1536380829,\"predicate\":\"inputChannelFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"channel_id\",\"type\":\"long\"}],\"type\":\"InputChannel\"},{\"id\":-1468331492,\"predicate\":\"inputPeerUserFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":-1121318848,\"predicate\":\"inputPeerChannelFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"channel_id\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":55761658,\"predicate\":\"inputPrivacyKeyPhoneNumber\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":-778378131,\"predicate\":\"privacyKeyPhoneNumber\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":-1472172887,\"predicate\":\"topPeerCategoryForwardUsers\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-68239120,\"predicate\":\"topPeerCategoryForwardChats\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":84703944,\"predicate\":\"channelAdminLogEventActionChangeLinkedChat\",\"params\":[{\"name\":\"prev_value\",\"type\":\"long\"},{\"name\":\"new_value\",\"type\":\"long\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-398136321,\"predicate\":\"messages.searchCounter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.1?true\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.SearchCounter\"},{\"id\":280464681,\"predicate\":\"keyboardButtonUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"fwd_text\",\"type\":\"flags.0?string\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"button_id\",\"type\":\"int\"}],\"type\":\"KeyboardButton\"},{\"id\":-802258988,\"predicate\":\"inputKeyboardButtonUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"request_write_access\",\"type\":\"flags.0?true\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"fwd_text\",\"type\":\"flags.1?string\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"bot\",\"type\":\"InputUser\"}],\"type\":\"KeyboardButton\"},{\"id\":-1831650802,\"predicate\":\"urlAuthResultRequest\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"request_write_access\",\"type\":\"flags.0?true\"},{\"name\":\"bot\",\"type\":\"User\"},{\"name\":\"domain\",\"type\":\"string\"}],\"type\":\"UrlAuthResult\"},{\"id\":-1886646706,\"predicate\":\"urlAuthResultAccepted\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"UrlAuthResult\"},{\"id\":-1445536993,\"predicate\":\"urlAuthResultDefault\",\"params\":[],\"type\":\"UrlAuthResult\"},{\"id\":-2079962673,\"predicate\":\"inputPrivacyValueAllowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"InputPrivacyRule\"},{\"id\":-380694650,\"predicate\":\"inputPrivacyValueDisallowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"InputPrivacyRule\"},{\"id\":1796427406,\"predicate\":\"privacyValueAllowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"PrivacyRule\"},{\"id\":1103656293,\"predicate\":\"privacyValueDisallowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"PrivacyRule\"},{\"id\":-1672577397,\"predicate\":\"messageEntityUnderline\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-1090087980,\"predicate\":\"messageEntityStrike\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1786671974,\"predicate\":\"updatePeerSettings\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"settings\",\"type\":\"PeerSettings\"}],\"type\":\"Update\"},{\"id\":-1078612597,\"predicate\":\"channelLocationEmpty\",\"params\":[],\"type\":\"ChannelLocation\"},{\"id\":547062491,\"predicate\":\"channelLocation\",\"params\":[{\"name\":\"geo_point\",\"type\":\"GeoPoint\"},{\"name\":\"address\",\"type\":\"string\"}],\"type\":\"ChannelLocation\"},{\"id\":-901375139,\"predicate\":\"peerLocated\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"distance\",\"type\":\"int\"}],\"type\":\"PeerLocated\"},{\"id\":-1263546448,\"predicate\":\"updatePeerLocated\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":241923758,\"predicate\":\"channelAdminLogEventActionChangeLocation\",\"params\":[{\"name\":\"prev_value\",\"type\":\"ChannelLocation\"},{\"name\":\"new_value\",\"type\":\"ChannelLocation\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-606798099,\"predicate\":\"inputReportReasonGeoIrrelevant\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":1401984889,\"predicate\":\"channelAdminLogEventActionToggleSlowMode\",\"params\":[{\"name\":\"prev_value\",\"type\":\"int\"},{\"name\":\"new_value\",\"type\":\"int\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1148485274,\"predicate\":\"auth.authorizationSignUpRequired\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"terms_of_service\",\"type\":\"flags.0?help.TermsOfService\"}],\"type\":\"auth.Authorization\"},{\"id\":-666824391,\"predicate\":\"payments.paymentVerificationNeeded\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"payments.PaymentResult\"},{\"id\":42402760,\"predicate\":\"inputStickerSetAnimatedEmoji\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":967122427,\"predicate\":\"updateNewScheduledMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"Update\"},{\"id\":-1870238482,\"predicate\":\"updateDeleteScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"messages\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-797791052,\"predicate\":\"restrictionReason\",\"params\":[{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"reason\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"RestrictionReason\"},{\"id\":1012306921,\"predicate\":\"inputTheme\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputTheme\"},{\"id\":-175567375,\"predicate\":\"inputThemeSlug\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"InputTheme\"},{\"id\":-1609668650,\"predicate\":\"theme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"default\",\"type\":\"flags.1?true\"},{\"name\":\"for_chat\",\"type\":\"flags.5?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"document\",\"type\":\"flags.2?Document\"},{\"name\":\"settings\",\"type\":\"flags.3?Vector\"},{\"name\":\"emoticon\",\"type\":\"flags.6?string\"},{\"name\":\"installs_count\",\"type\":\"flags.4?int\"}],\"type\":\"Theme\"},{\"id\":-199313886,\"predicate\":\"account.themesNotModified\",\"params\":[],\"type\":\"account.Themes\"},{\"id\":-1707242387,\"predicate\":\"account.themes\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"themes\",\"type\":\"Vector\"}],\"type\":\"account.Themes\"},{\"id\":-2112423005,\"predicate\":\"updateTheme\",\"params\":[{\"name\":\"theme\",\"type\":\"Theme\"}],\"type\":\"Update\"},{\"id\":-786326563,\"predicate\":\"inputPrivacyKeyAddedByPhone\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1124062251,\"predicate\":\"privacyKeyAddedByPhone\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":-2027964103,\"predicate\":\"updateGeoLiveViewed\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1448076945,\"predicate\":\"updateLoginToken\",\"params\":[],\"type\":\"Update\"},{\"id\":1654593920,\"predicate\":\"auth.loginToken\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"auth.LoginToken\"},{\"id\":110008598,\"predicate\":\"auth.loginTokenMigrateTo\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"auth.LoginToken\"},{\"id\":957176926,\"predicate\":\"auth.loginTokenSuccess\",\"params\":[{\"name\":\"authorization\",\"type\":\"auth.Authorization\"}],\"type\":\"auth.LoginToken\"},{\"id\":1474462241,\"predicate\":\"account.contentSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"sensitive_enabled\",\"type\":\"flags.0?true\"},{\"name\":\"sensitive_can_change\",\"type\":\"flags.1?true\"}],\"type\":\"account.ContentSettings\"},{\"id\":-1456996667,\"predicate\":\"messages.inactiveChats\",\"params\":[{\"name\":\"dates\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.InactiveChats\"},{\"id\":-1012849566,\"predicate\":\"baseThemeClassic\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":-69724536,\"predicate\":\"baseThemeDay\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":-1212997976,\"predicate\":\"baseThemeNight\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":1834973166,\"predicate\":\"baseThemeTinted\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":1527845466,\"predicate\":\"baseThemeArctic\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":-1770371538,\"predicate\":\"inputWallPaperNoFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"InputWallPaper\"},{\"id\":-528465642,\"predicate\":\"wallPaperNoFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"default\",\"type\":\"flags.1?true\"},{\"name\":\"dark\",\"type\":\"flags.4?true\"},{\"name\":\"settings\",\"type\":\"flags.2?WallPaperSettings\"}],\"type\":\"WallPaper\"},{\"id\":-1881255857,\"predicate\":\"inputThemeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message_colors_animated\",\"type\":\"flags.2?true\"},{\"name\":\"base_theme\",\"type\":\"BaseTheme\"},{\"name\":\"accent_color\",\"type\":\"int\"},{\"name\":\"outbox_accent_color\",\"type\":\"flags.3?int\"},{\"name\":\"message_colors\",\"type\":\"flags.0?Vector\"},{\"name\":\"wallpaper\",\"type\":\"flags.1?InputWallPaper\"},{\"name\":\"wallpaper_settings\",\"type\":\"flags.1?WallPaperSettings\"}],\"type\":\"InputThemeSettings\"},{\"id\":-94849324,\"predicate\":\"themeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message_colors_animated\",\"type\":\"flags.2?true\"},{\"name\":\"base_theme\",\"type\":\"BaseTheme\"},{\"name\":\"accent_color\",\"type\":\"int\"},{\"name\":\"outbox_accent_color\",\"type\":\"flags.3?int\"},{\"name\":\"message_colors\",\"type\":\"flags.0?Vector\"},{\"name\":\"wallpaper\",\"type\":\"flags.1?WallPaper\"}],\"type\":\"ThemeSettings\"},{\"id\":1421174295,\"predicate\":\"webPageAttributeTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"documents\",\"type\":\"flags.0?Vector\"},{\"name\":\"settings\",\"type\":\"flags.1?ThemeSettings\"}],\"type\":\"WebPageAttribute\"},{\"id\":619974263,\"predicate\":\"updateMessagePollVote\",\"params\":[{\"name\":\"poll_id\",\"type\":\"long\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"options\",\"type\":\"Vector\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1218005070,\"predicate\":\"messages.votesList\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"votes\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"next_offset\",\"type\":\"flags.0?string\"}],\"type\":\"messages.VotesList\"},{\"id\":-1144565411,\"predicate\":\"keyboardButtonRequestPoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"quiz\",\"type\":\"flags.0?Bool\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":1981704948,\"predicate\":\"messageEntityBankCard\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-177732982,\"predicate\":\"bankCardOpenUrl\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"BankCardOpenUrl\"},{\"id\":1042605427,\"predicate\":\"payments.bankCardData\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"open_urls\",\"type\":\"Vector\"}],\"type\":\"payments.BankCardData\"},{\"id\":-118740917,\"predicate\":\"peerSelfLocated\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"PeerLocated\"},{\"id\":1605718587,\"predicate\":\"dialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"contacts\",\"type\":\"flags.0?true\"},{\"name\":\"non_contacts\",\"type\":\"flags.1?true\"},{\"name\":\"groups\",\"type\":\"flags.2?true\"},{\"name\":\"broadcasts\",\"type\":\"flags.3?true\"},{\"name\":\"bots\",\"type\":\"flags.4?true\"},{\"name\":\"exclude_muted\",\"type\":\"flags.11?true\"},{\"name\":\"exclude_read\",\"type\":\"flags.12?true\"},{\"name\":\"exclude_archived\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"emoticon\",\"type\":\"flags.25?string\"},{\"name\":\"color\",\"type\":\"flags.27?int\"},{\"name\":\"pinned_peers\",\"type\":\"Vector\"},{\"name\":\"include_peers\",\"type\":\"Vector\"},{\"name\":\"exclude_peers\",\"type\":\"Vector\"}],\"type\":\"DialogFilter\"},{\"id\":2004110666,\"predicate\":\"dialogFilterSuggested\",\"params\":[{\"name\":\"filter\",\"type\":\"DialogFilter\"},{\"name\":\"description\",\"type\":\"string\"}],\"type\":\"DialogFilterSuggested\"},{\"id\":654302845,\"predicate\":\"updateDialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"filter\",\"type\":\"flags.0?DialogFilter\"}],\"type\":\"Update\"},{\"id\":-1512627963,\"predicate\":\"updateDialogFilterOrder\",\"params\":[{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":889491791,\"predicate\":\"updateDialogFilters\",\"params\":[],\"type\":\"Update\"},{\"id\":-1237848657,\"predicate\":\"statsDateRangeDays\",\"params\":[{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"}],\"type\":\"StatsDateRangeDays\"},{\"id\":-884757282,\"predicate\":\"statsAbsValueAndPrev\",\"params\":[{\"name\":\"current\",\"type\":\"double\"},{\"name\":\"previous\",\"type\":\"double\"}],\"type\":\"StatsAbsValueAndPrev\"},{\"id\":-875679776,\"predicate\":\"statsPercentValue\",\"params\":[{\"name\":\"part\",\"type\":\"double\"},{\"name\":\"total\",\"type\":\"double\"}],\"type\":\"StatsPercentValue\"},{\"id\":1244130093,\"predicate\":\"statsGraphAsync\",\"params\":[{\"name\":\"token\",\"type\":\"string\"}],\"type\":\"StatsGraph\"},{\"id\":-1092839390,\"predicate\":\"statsGraphError\",\"params\":[{\"name\":\"error\",\"type\":\"string\"}],\"type\":\"StatsGraph\"},{\"id\":-1901828938,\"predicate\":\"statsGraph\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"json\",\"type\":\"DataJSON\"},{\"name\":\"zoom_token\",\"type\":\"flags.0?string\"}],\"type\":\"StatsGraph\"},{\"id\":963421692,\"predicate\":\"stats.broadcastStats\",\"params\":[{\"name\":\"period\",\"type\":\"StatsDateRangeDays\"},{\"name\":\"followers\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"views_per_post\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"shares_per_post\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"reactions_per_post\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"views_per_story\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"shares_per_story\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"reactions_per_story\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"enabled_notifications\",\"type\":\"StatsPercentValue\"},{\"name\":\"growth_graph\",\"type\":\"StatsGraph\"},{\"name\":\"followers_graph\",\"type\":\"StatsGraph\"},{\"name\":\"mute_graph\",\"type\":\"StatsGraph\"},{\"name\":\"top_hours_graph\",\"type\":\"StatsGraph\"},{\"name\":\"interactions_graph\",\"type\":\"StatsGraph\"},{\"name\":\"iv_interactions_graph\",\"type\":\"StatsGraph\"},{\"name\":\"views_by_source_graph\",\"type\":\"StatsGraph\"},{\"name\":\"new_followers_by_source_graph\",\"type\":\"StatsGraph\"},{\"name\":\"languages_graph\",\"type\":\"StatsGraph\"},{\"name\":\"reactions_by_emotion_graph\",\"type\":\"StatsGraph\"},{\"name\":\"story_interactions_graph\",\"type\":\"StatsGraph\"},{\"name\":\"story_reactions_by_emotion_graph\",\"type\":\"StatsGraph\"},{\"name\":\"recent_posts_interactions\",\"type\":\"Vector\"}],\"type\":\"stats.BroadcastStats\"},{\"id\":-428884101,\"predicate\":\"inputMediaDice\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":1065280907,\"predicate\":\"messageMediaDice\",\"params\":[{\"name\":\"value\",\"type\":\"int\"},{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"MessageMedia\"},{\"id\":-427863538,\"predicate\":\"inputStickerSetDice\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"InputStickerSet\"},{\"id\":-1728664459,\"predicate\":\"help.promoDataEmpty\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"help.PromoData\"},{\"id\":-1942390465,\"predicate\":\"help.promoData\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"proxy\",\"type\":\"flags.0?true\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"psa_type\",\"type\":\"flags.1?string\"},{\"name\":\"psa_message\",\"type\":\"flags.2?string\"}],\"type\":\"help.PromoData\"},{\"id\":-567037804,\"predicate\":\"videoSize\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"video_start_ts\",\"type\":\"flags.0?double\"}],\"type\":\"VideoSize\"},{\"id\":643940105,\"predicate\":\"updatePhoneCallSignalingData\",\"params\":[{\"name\":\"phone_call_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"Update\"},{\"id\":1634294960,\"predicate\":\"chatInvitePeek\",\"params\":[{\"name\":\"chat\",\"type\":\"Chat\"},{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"ChatInvite\"},{\"id\":-1660637285,\"predicate\":\"statsGroupTopPoster\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"messages\",\"type\":\"int\"},{\"name\":\"avg_chars\",\"type\":\"int\"}],\"type\":\"StatsGroupTopPoster\"},{\"id\":-682079097,\"predicate\":\"statsGroupTopAdmin\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"deleted\",\"type\":\"int\"},{\"name\":\"kicked\",\"type\":\"int\"},{\"name\":\"banned\",\"type\":\"int\"}],\"type\":\"StatsGroupTopAdmin\"},{\"id\":1398765469,\"predicate\":\"statsGroupTopInviter\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"invitations\",\"type\":\"int\"}],\"type\":\"StatsGroupTopInviter\"},{\"id\":-276825834,\"predicate\":\"stats.megagroupStats\",\"params\":[{\"name\":\"period\",\"type\":\"StatsDateRangeDays\"},{\"name\":\"members\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"messages\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"viewers\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"posters\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"growth_graph\",\"type\":\"StatsGraph\"},{\"name\":\"members_graph\",\"type\":\"StatsGraph\"},{\"name\":\"new_members_by_source_graph\",\"type\":\"StatsGraph\"},{\"name\":\"languages_graph\",\"type\":\"StatsGraph\"},{\"name\":\"messages_graph\",\"type\":\"StatsGraph\"},{\"name\":\"actions_graph\",\"type\":\"StatsGraph\"},{\"name\":\"top_hours_graph\",\"type\":\"StatsGraph\"},{\"name\":\"weekdays_graph\",\"type\":\"StatsGraph\"},{\"name\":\"top_posters\",\"type\":\"Vector\"},{\"name\":\"top_admins\",\"type\":\"Vector\"},{\"name\":\"top_inviters\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"stats.MegagroupStats\"},{\"id\":1934380235,\"predicate\":\"globalPrivacySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"archive_and_mute_new_noncontact_peers\",\"type\":\"flags.0?true\"},{\"name\":\"keep_archived_unmuted\",\"type\":\"flags.1?true\"},{\"name\":\"keep_archived_folders\",\"type\":\"flags.2?true\"},{\"name\":\"hide_read_marks\",\"type\":\"flags.3?true\"},{\"name\":\"new_noncontact_peers_require_premium\",\"type\":\"flags.4?true\"}],\"type\":\"GlobalPrivacySettings\"},{\"id\":1667228533,\"predicate\":\"phoneConnectionWebrtc\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"turn\",\"type\":\"flags.0?true\"},{\"name\":\"stun\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"ipv6\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"username\",\"type\":\"string\"},{\"name\":\"password\",\"type\":\"string\"}],\"type\":\"PhoneConnection\"},{\"id\":1107543535,\"predicate\":\"help.countryCode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"country_code\",\"type\":\"string\"},{\"name\":\"prefixes\",\"type\":\"flags.0?Vector\"},{\"name\":\"patterns\",\"type\":\"flags.1?Vector\"}],\"type\":\"help.CountryCode\"},{\"id\":-1014526429,\"predicate\":\"help.country\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"hidden\",\"type\":\"flags.0?true\"},{\"name\":\"iso2\",\"type\":\"string\"},{\"name\":\"default_name\",\"type\":\"string\"},{\"name\":\"name\",\"type\":\"flags.1?string\"},{\"name\":\"country_codes\",\"type\":\"Vector\"}],\"type\":\"help.Country\"},{\"id\":-1815339214,\"predicate\":\"help.countriesListNotModified\",\"params\":[],\"type\":\"help.CountriesList\"},{\"id\":-2016381538,\"predicate\":\"help.countriesList\",\"params\":[{\"name\":\"countries\",\"type\":\"Vector\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.CountriesList\"},{\"id\":1163625789,\"predicate\":\"messageViews\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"views\",\"type\":\"flags.0?int\"},{\"name\":\"forwards\",\"type\":\"flags.1?int\"},{\"name\":\"replies\",\"type\":\"flags.2?MessageReplies\"}],\"type\":\"MessageViews\"},{\"id\":-761649164,\"predicate\":\"updateChannelMessageForwards\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"forwards\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-96535659,\"predicate\":\"photoSizeProgressive\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"sizes\",\"type\":\"Vector\"}],\"type\":\"PhotoSize\"},{\"id\":-1228606141,\"predicate\":\"messages.messageViews\",\"params\":[{\"name\":\"views\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.MessageViews\"},{\"id\":-693004986,\"predicate\":\"updateReadChannelDiscussionInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"top_msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"},{\"name\":\"broadcast_id\",\"type\":\"flags.0?long\"},{\"name\":\"broadcast_post\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":1767677564,\"predicate\":\"updateReadChannelDiscussionOutbox\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"top_msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1506535550,\"predicate\":\"messages.discussionMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"max_id\",\"type\":\"flags.0?int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"flags.1?int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"flags.2?int\"},{\"name\":\"unread_count\",\"type\":\"int\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.DiscussionMessage\"},{\"id\":-1346631205,\"predicate\":\"messageReplyHeader\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reply_to_scheduled\",\"type\":\"flags.2?true\"},{\"name\":\"forum_topic\",\"type\":\"flags.3?true\"},{\"name\":\"quote\",\"type\":\"flags.9?true\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.4?int\"},{\"name\":\"reply_to_peer_id\",\"type\":\"flags.0?Peer\"},{\"name\":\"reply_from\",\"type\":\"flags.5?MessageFwdHeader\"},{\"name\":\"reply_media\",\"type\":\"flags.8?MessageMedia\"},{\"name\":\"reply_to_top_id\",\"type\":\"flags.1?int\"},{\"name\":\"quote_text\",\"type\":\"flags.6?string\"},{\"name\":\"quote_entities\",\"type\":\"flags.7?Vector\"},{\"name\":\"quote_offset\",\"type\":\"flags.10?int\"}],\"type\":\"MessageReplyHeader\"},{\"id\":-2083123262,\"predicate\":\"messageReplies\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"comments\",\"type\":\"flags.0?true\"},{\"name\":\"replies\",\"type\":\"int\"},{\"name\":\"replies_pts\",\"type\":\"int\"},{\"name\":\"recent_repliers\",\"type\":\"flags.1?Vector\"},{\"name\":\"channel_id\",\"type\":\"flags.0?long\"},{\"name\":\"max_id\",\"type\":\"flags.2?int\"},{\"name\":\"read_max_id\",\"type\":\"flags.3?int\"}],\"type\":\"MessageReplies\"},{\"id\":-337610926,\"predicate\":\"updatePeerBlocked\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"blocked\",\"type\":\"flags.0?true\"},{\"name\":\"blocked_my_stories_from\",\"type\":\"flags.1?true\"},{\"name\":\"peer_id\",\"type\":\"Peer\"}],\"type\":\"Update\"},{\"id\":-386039788,\"predicate\":\"peerBlocked\",\"params\":[{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"PeerBlocked\"},{\"id\":-1937192669,\"predicate\":\"updateChannelUserTyping\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":-1392895362,\"predicate\":\"inputMessageCallbackQuery\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"query_id\",\"type\":\"long\"}],\"type\":\"InputMessage\"},{\"id\":453242886,\"predicate\":\"channelParticipantLeft\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"ChannelParticipant\"},{\"id\":-531931925,\"predicate\":\"channelParticipantsMentions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"q\",\"type\":\"flags.0?string\"},{\"name\":\"top_msg_id\",\"type\":\"flags.1?int\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-309990731,\"predicate\":\"updatePinnedMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1538885128,\"predicate\":\"updatePinnedChannelMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":464520273,\"predicate\":\"inputMessagesFilterPinned\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":2145983508,\"predicate\":\"stats.messageStats\",\"params\":[{\"name\":\"views_graph\",\"type\":\"StatsGraph\"},{\"name\":\"reactions_by_emotion_graph\",\"type\":\"StatsGraph\"}],\"type\":\"stats.MessageStats\"},{\"id\":-1730095465,\"predicate\":\"messageActionGeoProximityReached\",\"params\":[{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"to_id\",\"type\":\"Peer\"},{\"name\":\"distance\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":-668906175,\"predicate\":\"photoPathSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":-651419003,\"predicate\":\"speakingInGroupCallAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":2004925620,\"predicate\":\"groupCallDiscarded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"duration\",\"type\":\"int\"}],\"type\":\"GroupCall\"},{\"id\":-711498484,\"predicate\":\"groupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"join_muted\",\"type\":\"flags.1?true\"},{\"name\":\"can_change_join_muted\",\"type\":\"flags.2?true\"},{\"name\":\"join_date_asc\",\"type\":\"flags.6?true\"},{\"name\":\"schedule_start_subscribed\",\"type\":\"flags.8?true\"},{\"name\":\"can_start_video\",\"type\":\"flags.9?true\"},{\"name\":\"record_video_active\",\"type\":\"flags.11?true\"},{\"name\":\"rtmp_stream\",\"type\":\"flags.12?true\"},{\"name\":\"listeners_hidden\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"flags.3?string\"},{\"name\":\"stream_dc_id\",\"type\":\"flags.4?int\"},{\"name\":\"record_start_date\",\"type\":\"flags.5?int\"},{\"name\":\"schedule_date\",\"type\":\"flags.7?int\"},{\"name\":\"unmuted_video_count\",\"type\":\"flags.10?int\"},{\"name\":\"unmuted_video_limit\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"GroupCall\"},{\"id\":-659913713,\"predicate\":\"inputGroupCall\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputGroupCall\"},{\"id\":2047704898,\"predicate\":\"messageActionGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"duration\",\"type\":\"flags.0?int\"}],\"type\":\"MessageAction\"},{\"id\":1345295095,\"predicate\":\"messageActionInviteToGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"MessageAction\"},{\"id\":-341428482,\"predicate\":\"groupCallParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"muted\",\"type\":\"flags.0?true\"},{\"name\":\"left\",\"type\":\"flags.1?true\"},{\"name\":\"can_self_unmute\",\"type\":\"flags.2?true\"},{\"name\":\"just_joined\",\"type\":\"flags.4?true\"},{\"name\":\"versioned\",\"type\":\"flags.5?true\"},{\"name\":\"min\",\"type\":\"flags.8?true\"},{\"name\":\"muted_by_you\",\"type\":\"flags.9?true\"},{\"name\":\"volume_by_admin\",\"type\":\"flags.10?true\"},{\"name\":\"self\",\"type\":\"flags.12?true\"},{\"name\":\"video_joined\",\"type\":\"flags.15?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"active_date\",\"type\":\"flags.3?int\"},{\"name\":\"source\",\"type\":\"int\"},{\"name\":\"volume\",\"type\":\"flags.7?int\"},{\"name\":\"about\",\"type\":\"flags.11?string\"},{\"name\":\"raise_hand_rating\",\"type\":\"flags.13?long\"},{\"name\":\"video\",\"type\":\"flags.6?GroupCallParticipantVideo\"},{\"name\":\"presentation\",\"type\":\"flags.14?GroupCallParticipantVideo\"}],\"type\":\"GroupCallParticipant\"},{\"id\":-124097970,\"predicate\":\"updateChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":-219423922,\"predicate\":\"updateGroupCallParticipants\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":347227392,\"predicate\":\"updateGroupCall\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"call\",\"type\":\"GroupCall\"}],\"type\":\"Update\"},{\"id\":-1636664659,\"predicate\":\"phone.groupCall\",\"params\":[{\"name\":\"call\",\"type\":\"GroupCall\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"participants_next_offset\",\"type\":\"string\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"phone.GroupCall\"},{\"id\":-193506890,\"predicate\":\"phone.groupParticipants\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"next_offset\",\"type\":\"string\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"phone.GroupParticipants\"},{\"id\":813821341,\"predicate\":\"inlineQueryPeerTypeSameBotPM\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":-2093215828,\"predicate\":\"inlineQueryPeerTypePM\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":-681130742,\"predicate\":\"inlineQueryPeerTypeChat\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":1589952067,\"predicate\":\"inlineQueryPeerTypeMegagroup\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":1664413338,\"predicate\":\"inlineQueryPeerTypeBroadcast\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":589338437,\"predicate\":\"channelAdminLogEventActionStartGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-610299584,\"predicate\":\"channelAdminLogEventActionDiscardGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-115071790,\"predicate\":\"channelAdminLogEventActionParticipantMute\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-431740480,\"predicate\":\"channelAdminLogEventActionParticipantUnmute\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1456906823,\"predicate\":\"channelAdminLogEventActionToggleGroupCallSetting\",\"params\":[{\"name\":\"join_muted\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1966921727,\"predicate\":\"inputPaymentCredentialsGooglePay\",\"params\":[{\"name\":\"payment_token\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":375566091,\"predicate\":\"messages.historyImport\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"messages.HistoryImport\"},{\"id\":-606432698,\"predicate\":\"sendMessageHistoryImportAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":1578088377,\"predicate\":\"messages.historyImportParsed\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pm\",\"type\":\"flags.0?true\"},{\"name\":\"group\",\"type\":\"flags.1?true\"},{\"name\":\"title\",\"type\":\"flags.2?string\"}],\"type\":\"messages.HistoryImportParsed\"},{\"id\":-170010905,\"predicate\":\"inputReportReasonFake\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-275956116,\"predicate\":\"messages.affectedFoundMessages\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector\"}],\"type\":\"messages.AffectedFoundMessages\"},{\"id\":1007897979,\"predicate\":\"messageActionSetMessagesTTL\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"period\",\"type\":\"int\"},{\"name\":\"auto_setting_from\",\"type\":\"flags.0?long\"}],\"type\":\"MessageAction\"},{\"id\":-1147422299,\"predicate\":\"updatePeerHistoryTTL\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"ttl_period\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":-796432838,\"predicate\":\"updateChatParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"actor_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"prev_participant\",\"type\":\"flags.0?ChatParticipant\"},{\"name\":\"new_participant\",\"type\":\"flags.1?ChatParticipant\"},{\"name\":\"invite\",\"type\":\"flags.2?ExportedChatInvite\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1738720581,\"predicate\":\"updateChannelParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"via_chatlist\",\"type\":\"flags.3?true\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"actor_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"prev_participant\",\"type\":\"flags.0?ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"flags.1?ChannelParticipant\"},{\"name\":\"invite\",\"type\":\"flags.2?ExportedChatInvite\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-997782967,\"predicate\":\"updateBotStopped\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"stopped\",\"type\":\"Bool\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1940201511,\"predicate\":\"chatInviteImporter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"requested\",\"type\":\"flags.0?true\"},{\"name\":\"via_chatlist\",\"type\":\"flags.3?true\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"about\",\"type\":\"flags.2?string\"},{\"name\":\"approved_by\",\"type\":\"flags.1?long\"}],\"type\":\"ChatInviteImporter\"},{\"id\":-1111085620,\"predicate\":\"messages.exportedChatInvites\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"invites\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ExportedChatInvites\"},{\"id\":410107472,\"predicate\":\"messages.exportedChatInvite\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":572915951,\"predicate\":\"messages.exportedChatInviteReplaced\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"new_invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":-2118733814,\"predicate\":\"messages.chatInviteImporters\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"importers\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ChatInviteImporters\"},{\"id\":-219353309,\"predicate\":\"chatAdminWithInvites\",\"params\":[{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"invites_count\",\"type\":\"int\"},{\"name\":\"revoked_invites_count\",\"type\":\"int\"}],\"type\":\"ChatAdminWithInvites\"},{\"id\":-1231326505,\"predicate\":\"messages.chatAdminsWithInvites\",\"params\":[{\"name\":\"admins\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ChatAdminsWithInvites\"},{\"id\":-23084712,\"predicate\":\"channelAdminLogEventActionParticipantJoinByInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"via_chatlist\",\"type\":\"flags.0?true\"},{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1515256996,\"predicate\":\"channelAdminLogEventActionExportedInviteDelete\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1091179342,\"predicate\":\"channelAdminLogEventActionExportedInviteRevoke\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-384910503,\"predicate\":\"channelAdminLogEventActionExportedInviteEdit\",\"params\":[{\"name\":\"prev_invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"new_invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1048537159,\"predicate\":\"channelAdminLogEventActionParticipantVolume\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1855199800,\"predicate\":\"channelAdminLogEventActionChangeHistoryTTL\",\"params\":[{\"name\":\"prev_value\",\"type\":\"int\"},{\"name\":\"new_value\",\"type\":\"int\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1571952873,\"predicate\":\"messages.checkedHistoryImportPeer\",\"params\":[{\"name\":\"confirm_text\",\"type\":\"string\"}],\"type\":\"messages.CheckedHistoryImportPeer\"},{\"id\":93890858,\"predicate\":\"inputGroupCallStream\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"time_ms\",\"type\":\"long\"},{\"name\":\"scale\",\"type\":\"int\"},{\"name\":\"video_channel\",\"type\":\"flags.0?int\"},{\"name\":\"video_quality\",\"type\":\"flags.0?int\"}],\"type\":\"InputFileLocation\"},{\"id\":-1343921601,\"predicate\":\"phone.joinAsPeers\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"phone.JoinAsPeers\"},{\"id\":541839704,\"predicate\":\"phone.exportedGroupCallInvite\",\"params\":[{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"phone.ExportedGroupCallInvite\"},{\"id\":-672693723,\"predicate\":\"inputBotInlineMessageMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?InputWebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"provider_data\",\"type\":\"DataJSON\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":894081801,\"predicate\":\"botInlineMessageMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"shipping_address_requested\",\"type\":\"flags.1?true\"},{\"name\":\"test\",\"type\":\"flags.3?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?WebDocument\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1281329567,\"predicate\":\"messageActionGroupCallScheduled\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"schedule_date\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":-592373577,\"predicate\":\"groupCallParticipantVideoSourceGroup\",\"params\":[{\"name\":\"semantics\",\"type\":\"string\"},{\"name\":\"sources\",\"type\":\"Vector\"}],\"type\":\"GroupCallParticipantVideoSourceGroup\"},{\"id\":1735736008,\"predicate\":\"groupCallParticipantVideo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"paused\",\"type\":\"flags.0?true\"},{\"name\":\"endpoint\",\"type\":\"string\"},{\"name\":\"source_groups\",\"type\":\"Vector\"},{\"name\":\"audio_source\",\"type\":\"flags.1?int\"}],\"type\":\"GroupCallParticipantVideo\"},{\"id\":192428418,\"predicate\":\"updateGroupCallConnection\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"presentation\",\"type\":\"flags.0?true\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"Update\"},{\"id\":-2046910401,\"predicate\":\"stickers.suggestedShortName\",\"params\":[{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"stickers.SuggestedShortName\"},{\"id\":795652779,\"predicate\":\"botCommandScopeDefault\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":1011811544,\"predicate\":\"botCommandScopeUsers\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":1877059713,\"predicate\":\"botCommandScopeChats\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":-1180016534,\"predicate\":\"botCommandScopeChatAdmins\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":-610432643,\"predicate\":\"botCommandScopePeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"BotCommandScope\"},{\"id\":1071145937,\"predicate\":\"botCommandScopePeerAdmins\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"BotCommandScope\"},{\"id\":169026035,\"predicate\":\"botCommandScopePeerUser\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"BotCommandScope\"},{\"id\":-478701471,\"predicate\":\"account.resetPasswordFailedWait\",\"params\":[{\"name\":\"retry_date\",\"type\":\"int\"}],\"type\":\"account.ResetPasswordResult\"},{\"id\":-370148227,\"predicate\":\"account.resetPasswordRequestedWait\",\"params\":[{\"name\":\"until_date\",\"type\":\"int\"}],\"type\":\"account.ResetPasswordResult\"},{\"id\":-383330754,\"predicate\":\"account.resetPasswordOk\",\"params\":[],\"type\":\"account.ResetPasswordResult\"},{\"id\":1299263278,\"predicate\":\"updateBotCommands\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"commands\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-1434950843,\"predicate\":\"messageActionSetChatTheme\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":-1336228175,\"predicate\":\"sendMessageChooseStickerAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-1108478618,\"predicate\":\"sponsoredMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"recommended\",\"type\":\"flags.5?true\"},{\"name\":\"can_report\",\"type\":\"flags.12?true\"},{\"name\":\"random_id\",\"type\":\"bytes\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"photo\",\"type\":\"flags.6?Photo\"},{\"name\":\"color\",\"type\":\"flags.13?PeerColor\"},{\"name\":\"button_text\",\"type\":\"string\"},{\"name\":\"sponsor_info\",\"type\":\"flags.7?string\"},{\"name\":\"additional_info\",\"type\":\"flags.8?string\"}],\"type\":\"SponsoredMessage\"},{\"id\":-907141753,\"predicate\":\"messages.sponsoredMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"posts_between\",\"type\":\"flags.0?int\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.SponsoredMessages\"},{\"id\":215889721,\"predicate\":\"inputStickerSetAnimatedEmojiAnimations\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":630664139,\"predicate\":\"sendMessageEmojiInteraction\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"interaction\",\"type\":\"DataJSON\"}],\"type\":\"SendMessageAction\"},{\"id\":-1234857938,\"predicate\":\"sendMessageEmojiInteractionSeen\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"SendMessageAction\"},{\"id\":-1227287081,\"predicate\":\"inputBotInlineMessageID64\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"owner_id\",\"type\":\"long\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputBotInlineMessageID\"},{\"id\":-911191137,\"predicate\":\"searchResultsCalendarPeriod\",\"params\":[{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"min_msg_id\",\"type\":\"int\"},{\"name\":\"max_msg_id\",\"type\":\"int\"},{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"SearchResultsCalendarPeriod\"},{\"id\":343859772,\"predicate\":\"messages.searchResultsCalendar\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.0?true\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"min_msg_id\",\"type\":\"int\"},{\"name\":\"offset_id_offset\",\"type\":\"flags.1?int\"},{\"name\":\"periods\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.SearchResultsCalendar\"},{\"id\":2137295719,\"predicate\":\"searchResultPosition\",\"params\":[{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"SearchResultsPosition\"},{\"id\":1404185519,\"predicate\":\"messages.searchResultsPositions\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"positions\",\"type\":\"Vector\"}],\"type\":\"messages.SearchResultsPositions\"},{\"id\":-339958837,\"predicate\":\"messageActionChatJoinedByRequest\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":1885586395,\"predicate\":\"updatePendingJoinRequests\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"requests_pending\",\"type\":\"int\"},{\"name\":\"recent_requesters\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":299870598,\"predicate\":\"updateBotChatInviteRequester\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1347021750,\"predicate\":\"channelAdminLogEventActionParticipantJoinByRequest\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"approved_by\",\"type\":\"long\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-376962181,\"predicate\":\"inputKeyboardButtonUserProfile\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"KeyboardButton\"},{\"id\":814112961,\"predicate\":\"keyboardButtonUserProfile\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"KeyboardButton\"},{\"id\":-191450938,\"predicate\":\"channels.sendAsPeers\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"channels.SendAsPeers\"},{\"id\":-886388890,\"predicate\":\"channelAdminLogEventActionToggleNoForwards\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-738646805,\"predicate\":\"messages.stickerSetNotModified\",\"params\":[],\"type\":\"messages.StickerSet\"},{\"id\":997004590,\"predicate\":\"users.userFull\",\"params\":[{\"name\":\"full_user\",\"type\":\"UserFull\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"users.UserFull\"},{\"id\":1753266509,\"predicate\":\"messages.peerSettings\",\"params\":[{\"name\":\"settings\",\"type\":\"PeerSettings\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.PeerSettings\"},{\"id\":663693416,\"predicate\":\"channelAdminLogEventActionSendMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-702884114,\"predicate\":\"auth.codeTypeMissedCall\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":-2113903484,\"predicate\":\"auth.sentCodeTypeMissedCall\",\"params\":[{\"name\":\"prefix\",\"type\":\"string\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":-1012759713,\"predicate\":\"auth.loggedOut\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"future_auth_token\",\"type\":\"flags.0?bytes\"}],\"type\":\"auth.LoggedOut\"},{\"id\":1578843320,\"predicate\":\"updateMessageReactions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"reactions\",\"type\":\"MessageReactions\"}],\"type\":\"Update\"},{\"id\":-1546531968,\"predicate\":\"reactionCount\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chosen_order\",\"type\":\"flags.0?int\"},{\"name\":\"reaction\",\"type\":\"Reaction\"},{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"ReactionCount\"},{\"id\":1328256121,\"predicate\":\"messageReactions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"min\",\"type\":\"flags.0?true\"},{\"name\":\"can_see_list\",\"type\":\"flags.2?true\"},{\"name\":\"reactions_as_tags\",\"type\":\"flags.3?true\"},{\"name\":\"results\",\"type\":\"Vector\"},{\"name\":\"recent_reactions\",\"type\":\"flags.1?Vector\"}],\"type\":\"MessageReactions\"},{\"id\":834488621,\"predicate\":\"messages.messageReactionsList\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"reactions\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"next_offset\",\"type\":\"flags.0?string\"}],\"type\":\"messages.MessageReactionsList\"},{\"id\":-1065882623,\"predicate\":\"availableReaction\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inactive\",\"type\":\"flags.0?true\"},{\"name\":\"premium\",\"type\":\"flags.2?true\"},{\"name\":\"reaction\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"static_icon\",\"type\":\"Document\"},{\"name\":\"appear_animation\",\"type\":\"Document\"},{\"name\":\"select_animation\",\"type\":\"Document\"},{\"name\":\"activate_animation\",\"type\":\"Document\"},{\"name\":\"effect_animation\",\"type\":\"Document\"},{\"name\":\"around_animation\",\"type\":\"flags.1?Document\"},{\"name\":\"center_icon\",\"type\":\"flags.1?Document\"}],\"type\":\"AvailableReaction\"},{\"id\":-1626924713,\"predicate\":\"messages.availableReactionsNotModified\",\"params\":[],\"type\":\"messages.AvailableReactions\"},{\"id\":1989032621,\"predicate\":\"messages.availableReactions\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"reactions\",\"type\":\"Vector\"}],\"type\":\"messages.AvailableReactions\"},{\"id\":852137487,\"predicate\":\"messageEntitySpoiler\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-1102180616,\"predicate\":\"channelAdminLogEventActionChangeAvailableReactions\",\"params\":[{\"name\":\"prev_value\",\"type\":\"ChatReactions\"},{\"name\":\"new_value\",\"type\":\"ChatReactions\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1938180548,\"predicate\":\"messagePeerReaction\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"big\",\"type\":\"flags.0?true\"},{\"name\":\"unread\",\"type\":\"flags.1?true\"},{\"name\":\"my\",\"type\":\"flags.2?true\"},{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"reaction\",\"type\":\"Reaction\"}],\"type\":\"MessagePeerReaction\"},{\"id\":-2132064081,\"predicate\":\"groupCallStreamChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"int\"},{\"name\":\"scale\",\"type\":\"int\"},{\"name\":\"last_timestamp_ms\",\"type\":\"long\"}],\"type\":\"GroupCallStreamChannel\"},{\"id\":-790330702,\"predicate\":\"phone.groupCallStreamChannels\",\"params\":[{\"name\":\"channels\",\"type\":\"Vector\"}],\"type\":\"phone.GroupCallStreamChannels\"},{\"id\":177124030,\"predicate\":\"inputReportReasonIllegalDrugs\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-1631091139,\"predicate\":\"inputReportReasonPersonalDetails\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":767505458,\"predicate\":\"phone.groupCallStreamRtmpUrl\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"key\",\"type\":\"string\"}],\"type\":\"phone.GroupCallStreamRtmpUrl\"},{\"id\":1165423600,\"predicate\":\"attachMenuBotIconColor\",\"params\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"color\",\"type\":\"int\"}],\"type\":\"AttachMenuBotIconColor\"},{\"id\":-1297663893,\"predicate\":\"attachMenuBotIcon\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"icon\",\"type\":\"Document\"},{\"name\":\"colors\",\"type\":\"flags.0?Vector\"}],\"type\":\"AttachMenuBotIcon\"},{\"id\":-653423106,\"predicate\":\"attachMenuBot\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inactive\",\"type\":\"flags.0?true\"},{\"name\":\"has_settings\",\"type\":\"flags.1?true\"},{\"name\":\"request_write_access\",\"type\":\"flags.2?true\"},{\"name\":\"show_in_attach_menu\",\"type\":\"flags.3?true\"},{\"name\":\"show_in_side_menu\",\"type\":\"flags.4?true\"},{\"name\":\"side_menu_disclaimer_needed\",\"type\":\"flags.5?true\"},{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"peer_types\",\"type\":\"flags.3?Vector\"},{\"name\":\"icons\",\"type\":\"Vector\"}],\"type\":\"AttachMenuBot\"},{\"id\":-237467044,\"predicate\":\"attachMenuBotsNotModified\",\"params\":[],\"type\":\"AttachMenuBots\"},{\"id\":1011024320,\"predicate\":\"attachMenuBots\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"bots\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"AttachMenuBots\"},{\"id\":-1816172929,\"predicate\":\"attachMenuBotsBot\",\"params\":[{\"name\":\"bot\",\"type\":\"AttachMenuBot\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"AttachMenuBotsBot\"},{\"id\":397910539,\"predicate\":\"updateAttachMenuBots\",\"params\":[],\"type\":\"Update\"},{\"id\":1294139288,\"predicate\":\"webViewResultUrl\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"fullsize\",\"type\":\"flags.1?true\"},{\"name\":\"query_id\",\"type\":\"flags.0?long\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"WebViewResult\"},{\"id\":211046684,\"predicate\":\"webViewMessageSent\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"msg_id\",\"type\":\"flags.0?InputBotInlineMessageID\"}],\"type\":\"WebViewMessageSent\"},{\"id\":361936797,\"predicate\":\"updateWebViewResultSent\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":326529584,\"predicate\":\"keyboardButtonWebView\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":-1598009252,\"predicate\":\"keyboardButtonSimpleWebView\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":1205698681,\"predicate\":\"messageActionWebViewDataSentMe\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"data\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":-1262252875,\"predicate\":\"messageActionWebViewDataSent\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":347625491,\"predicate\":\"updateBotMenuButton\",\"params\":[{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"button\",\"type\":\"BotMenuButton\"}],\"type\":\"Update\"},{\"id\":1966318984,\"predicate\":\"botMenuButtonDefault\",\"params\":[],\"type\":\"BotMenuButton\"},{\"id\":1113113093,\"predicate\":\"botMenuButtonCommands\",\"params\":[],\"type\":\"BotMenuButton\"},{\"id\":-944407322,\"predicate\":\"botMenuButton\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"BotMenuButton\"},{\"id\":-67704655,\"predicate\":\"account.savedRingtonesNotModified\",\"params\":[],\"type\":\"account.SavedRingtones\"},{\"id\":-1041683259,\"predicate\":\"account.savedRingtones\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"ringtones\",\"type\":\"Vector\"}],\"type\":\"account.SavedRingtones\"},{\"id\":1960361625,\"predicate\":\"updateSavedRingtones\",\"params\":[],\"type\":\"Update\"},{\"id\":-1746354498,\"predicate\":\"notificationSoundDefault\",\"params\":[],\"type\":\"NotificationSound\"},{\"id\":1863070943,\"predicate\":\"notificationSoundNone\",\"params\":[],\"type\":\"NotificationSound\"},{\"id\":-2096391452,\"predicate\":\"notificationSoundLocal\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"data\",\"type\":\"string\"}],\"type\":\"NotificationSound\"},{\"id\":-9666487,\"predicate\":\"notificationSoundRingtone\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"NotificationSound\"},{\"id\":-1222230163,\"predicate\":\"account.savedRingtone\",\"params\":[],\"type\":\"account.SavedRingtone\"},{\"id\":523271863,\"predicate\":\"account.savedRingtoneConverted\",\"params\":[{\"name\":\"document\",\"type\":\"Document\"}],\"type\":\"account.SavedRingtone\"},{\"id\":2104224014,\"predicate\":\"attachMenuPeerTypeSameBotPM\",\"params\":[],\"type\":\"AttachMenuPeerType\"},{\"id\":-1020528102,\"predicate\":\"attachMenuPeerTypeBotPM\",\"params\":[],\"type\":\"AttachMenuPeerType\"},{\"id\":-247016673,\"predicate\":\"attachMenuPeerTypePM\",\"params\":[],\"type\":\"AttachMenuPeerType\"},{\"id\":84480319,\"predicate\":\"attachMenuPeerTypeChat\",\"params\":[],\"type\":\"AttachMenuPeerType\"},{\"id\":2080104188,\"predicate\":\"attachMenuPeerTypeBroadcast\",\"params\":[],\"type\":\"AttachMenuPeerType\"},{\"id\":-317687113,\"predicate\":\"chatInvitePublicJoinRequests\",\"params\":[],\"type\":\"ExportedChatInvite\"},{\"id\":-977967015,\"predicate\":\"inputInvoiceMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"InputInvoice\"},{\"id\":-1020867857,\"predicate\":\"inputInvoiceSlug\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"InputInvoice\"},{\"id\":-1362048039,\"predicate\":\"payments.exportedInvoice\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"payments.ExportedInvoice\"},{\"id\":8703322,\"predicate\":\"updateTranscribedAudio\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pending\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"transcription_id\",\"type\":\"long\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":-809903785,\"predicate\":\"messages.transcribedAudio\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pending\",\"type\":\"flags.0?true\"},{\"name\":\"transcription_id\",\"type\":\"long\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"trial_remains_num\",\"type\":\"flags.1?int\"},{\"name\":\"trial_remains_until_date\",\"type\":\"flags.1?int\"}],\"type\":\"messages.TranscribedAudio\"},{\"id\":909284270,\"predicate\":\"dialogFilterDefault\",\"params\":[],\"type\":\"DialogFilter\"},{\"id\":1395946908,\"predicate\":\"help.premiumPromo\",\"params\":[{\"name\":\"status_text\",\"type\":\"string\"},{\"name\":\"status_entities\",\"type\":\"Vector\"},{\"name\":\"video_sections\",\"type\":\"Vector\"},{\"name\":\"videos\",\"type\":\"Vector\"},{\"name\":\"period_options\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"help.PremiumPromo\"},{\"id\":-925956616,\"predicate\":\"messageEntityCustomEmoji\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"document_id\",\"type\":\"long\"}],\"type\":\"MessageEntity\"},{\"id\":-48981863,\"predicate\":\"documentAttributeCustomEmoji\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"free\",\"type\":\"flags.0?true\"},{\"name\":\"text_color\",\"type\":\"flags.1?true\"},{\"name\":\"alt\",\"type\":\"string\"},{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"DocumentAttribute\"},{\"id\":1087454222,\"predicate\":\"stickerSetFullCovered\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"packs\",\"type\":\"Vector\"},{\"name\":\"keywords\",\"type\":\"Vector\"},{\"name\":\"documents\",\"type\":\"Vector\"}],\"type\":\"StickerSetCovered\"},{\"id\":-1502273946,\"predicate\":\"inputStorePaymentPremiumSubscription\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"restore\",\"type\":\"flags.0?true\"},{\"name\":\"upgrade\",\"type\":\"flags.1?true\"}],\"type\":\"InputStorePaymentPurpose\"},{\"id\":1634697192,\"predicate\":\"inputStorePaymentGiftPremium\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"}],\"type\":\"InputStorePaymentPurpose\"},{\"id\":-935499028,\"predicate\":\"messageActionGiftPremium\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"},{\"name\":\"months\",\"type\":\"int\"},{\"name\":\"crypto_currency\",\"type\":\"flags.0?string\"},{\"name\":\"crypto_amount\",\"type\":\"flags.0?long\"}],\"type\":\"MessageAction\"},{\"id\":1958953753,\"predicate\":\"premiumGiftOption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"months\",\"type\":\"int\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"},{\"name\":\"bot_url\",\"type\":\"string\"},{\"name\":\"store_product\",\"type\":\"flags.0?string\"}],\"type\":\"PremiumGiftOption\"},{\"id\":-930399486,\"predicate\":\"inputStickerSetPremiumGifts\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":-78886548,\"predicate\":\"updateReadFeaturedEmojiStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":-1360618136,\"predicate\":\"inputPrivacyKeyVoiceMessages\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":110621716,\"predicate\":\"privacyKeyVoiceMessages\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":-1996951013,\"predicate\":\"paymentFormMethod\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"PaymentFormMethod\"},{\"id\":-193992412,\"predicate\":\"inputWebFileAudioAlbumThumbLocation\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"small\",\"type\":\"flags.2?true\"},{\"name\":\"document\",\"type\":\"flags.0?InputDocument\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"performer\",\"type\":\"flags.1?string\"}],\"type\":\"InputWebFileLocation\"},{\"id\":769727150,\"predicate\":\"emojiStatusEmpty\",\"params\":[],\"type\":\"EmojiStatus\"},{\"id\":-1835310691,\"predicate\":\"emojiStatus\",\"params\":[{\"name\":\"document_id\",\"type\":\"long\"}],\"type\":\"EmojiStatus\"},{\"id\":-97474361,\"predicate\":\"emojiStatusUntil\",\"params\":[{\"name\":\"document_id\",\"type\":\"long\"},{\"name\":\"until\",\"type\":\"int\"}],\"type\":\"EmojiStatus\"},{\"id\":674706841,\"predicate\":\"updateUserEmojiStatus\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"emoji_status\",\"type\":\"EmojiStatus\"}],\"type\":\"Update\"},{\"id\":821314523,\"predicate\":\"updateRecentEmojiStatuses\",\"params\":[],\"type\":\"Update\"},{\"id\":-796072379,\"predicate\":\"account.emojiStatusesNotModified\",\"params\":[],\"type\":\"account.EmojiStatuses\"},{\"id\":-1866176559,\"predicate\":\"account.emojiStatuses\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"statuses\",\"type\":\"Vector\"}],\"type\":\"account.EmojiStatuses\"},{\"id\":2046153753,\"predicate\":\"reactionEmpty\",\"params\":[],\"type\":\"Reaction\"},{\"id\":455247544,\"predicate\":\"reactionEmoji\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"Reaction\"},{\"id\":-1992950669,\"predicate\":\"reactionCustomEmoji\",\"params\":[{\"name\":\"document_id\",\"type\":\"long\"}],\"type\":\"Reaction\"},{\"id\":-352570692,\"predicate\":\"chatReactionsNone\",\"params\":[],\"type\":\"ChatReactions\"},{\"id\":1385335754,\"predicate\":\"chatReactionsAll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"allow_custom\",\"type\":\"flags.0?true\"}],\"type\":\"ChatReactions\"},{\"id\":1713193015,\"predicate\":\"chatReactionsSome\",\"params\":[{\"name\":\"reactions\",\"type\":\"Vector\"}],\"type\":\"ChatReactions\"},{\"id\":-1334846497,\"predicate\":\"messages.reactionsNotModified\",\"params\":[],\"type\":\"messages.Reactions\"},{\"id\":-352454890,\"predicate\":\"messages.reactions\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"reactions\",\"type\":\"Vector\"}],\"type\":\"messages.Reactions\"},{\"id\":1870160884,\"predicate\":\"updateRecentReactions\",\"params\":[],\"type\":\"Update\"},{\"id\":-2030252155,\"predicate\":\"updateMoveStickerSetToTop\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"emojis\",\"type\":\"flags.1?true\"},{\"name\":\"stickerset\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":-196020837,\"predicate\":\"auth.sentCodeTypeEmailCode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"apple_signin_allowed\",\"type\":\"flags.0?true\"},{\"name\":\"google_signin_allowed\",\"type\":\"flags.1?true\"},{\"name\":\"email_pattern\",\"type\":\"string\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"reset_available_period\",\"type\":\"flags.3?int\"},{\"name\":\"reset_pending_date\",\"type\":\"flags.4?int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":-1521934870,\"predicate\":\"auth.sentCodeTypeSetUpEmailRequired\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"apple_signin_allowed\",\"type\":\"flags.0?true\"},{\"name\":\"google_signin_allowed\",\"type\":\"flags.1?true\"}],\"type\":\"auth.SentCodeType\"},{\"id\":1128644211,\"predicate\":\"emailVerifyPurposeLoginSetup\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"}],\"type\":\"EmailVerifyPurpose\"},{\"id\":1383932651,\"predicate\":\"emailVerifyPurposeLoginChange\",\"params\":[],\"type\":\"EmailVerifyPurpose\"},{\"id\":-1141565819,\"predicate\":\"emailVerifyPurposePassport\",\"params\":[],\"type\":\"EmailVerifyPurpose\"},{\"id\":-1842457175,\"predicate\":\"emailVerificationCode\",\"params\":[{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"EmailVerification\"},{\"id\":-611279166,\"predicate\":\"emailVerificationGoogle\",\"params\":[{\"name\":\"token\",\"type\":\"string\"}],\"type\":\"EmailVerification\"},{\"id\":-1764723459,\"predicate\":\"emailVerificationApple\",\"params\":[{\"name\":\"token\",\"type\":\"string\"}],\"type\":\"EmailVerification\"},{\"id\":731303195,\"predicate\":\"account.emailVerified\",\"params\":[{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"account.EmailVerified\"},{\"id\":-507835039,\"predicate\":\"account.emailVerifiedLogin\",\"params\":[{\"name\":\"email\",\"type\":\"string\"},{\"name\":\"sent_code\",\"type\":\"auth.SentCode\"}],\"type\":\"account.EmailVerified\"},{\"id\":1596792306,\"predicate\":\"premiumSubscriptionOption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"current\",\"type\":\"flags.1?true\"},{\"name\":\"can_purchase_upgrade\",\"type\":\"flags.2?true\"},{\"name\":\"transaction\",\"type\":\"flags.3?string\"},{\"name\":\"months\",\"type\":\"int\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"},{\"name\":\"bot_url\",\"type\":\"string\"},{\"name\":\"store_product\",\"type\":\"flags.0?string\"}],\"type\":\"PremiumSubscriptionOption\"},{\"id\":80008398,\"predicate\":\"inputStickerSetEmojiGenericAnimations\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":701560302,\"predicate\":\"inputStickerSetEmojiDefaultStatuses\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":-1206095820,\"predicate\":\"sendAsPeer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"premium_required\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"SendAsPeer\"},{\"id\":-1386050360,\"predicate\":\"messageExtendedMediaPreview\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"w\",\"type\":\"flags.0?int\"},{\"name\":\"h\",\"type\":\"flags.0?int\"},{\"name\":\"thumb\",\"type\":\"flags.1?PhotoSize\"},{\"name\":\"video_duration\",\"type\":\"flags.2?int\"}],\"type\":\"MessageExtendedMedia\"},{\"id\":-297296796,\"predicate\":\"messageExtendedMedia\",\"params\":[{\"name\":\"media\",\"type\":\"MessageMedia\"}],\"type\":\"MessageExtendedMedia\"},{\"id\":-710666460,\"predicate\":\"updateMessageExtendedMedia\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"extended_media\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-50416996,\"predicate\":\"stickerKeyword\",\"params\":[{\"name\":\"document_id\",\"type\":\"long\"},{\"name\":\"keyword\",\"type\":\"Vector\"}],\"type\":\"StickerKeyword\"},{\"id\":-1274595769,\"predicate\":\"username\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"editable\",\"type\":\"flags.0?true\"},{\"name\":\"active\",\"type\":\"flags.1?true\"},{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Username\"},{\"id\":-263212119,\"predicate\":\"channelAdminLogEventActionChangeUsernames\",\"params\":[{\"name\":\"prev_value\",\"type\":\"Vector\"},{\"name\":\"new_value\",\"type\":\"Vector\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":46949251,\"predicate\":\"channelAdminLogEventActionToggleForum\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1483767080,\"predicate\":\"channelAdminLogEventActionCreateTopic\",\"params\":[{\"name\":\"topic\",\"type\":\"ForumTopic\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-261103096,\"predicate\":\"channelAdminLogEventActionEditTopic\",\"params\":[{\"name\":\"prev_topic\",\"type\":\"ForumTopic\"},{\"name\":\"new_topic\",\"type\":\"ForumTopic\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1374254839,\"predicate\":\"channelAdminLogEventActionDeleteTopic\",\"params\":[{\"name\":\"topic\",\"type\":\"ForumTopic\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1569535291,\"predicate\":\"channelAdminLogEventActionPinTopic\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"prev_topic\",\"type\":\"flags.0?ForumTopic\"},{\"name\":\"new_topic\",\"type\":\"flags.1?ForumTopic\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":37687451,\"predicate\":\"forumTopicDeleted\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"ForumTopic\"},{\"id\":1903173033,\"predicate\":\"forumTopic\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"my\",\"type\":\"flags.1?true\"},{\"name\":\"closed\",\"type\":\"flags.2?true\"},{\"name\":\"pinned\",\"type\":\"flags.3?true\"},{\"name\":\"short\",\"type\":\"flags.5?true\"},{\"name\":\"hidden\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"icon_color\",\"type\":\"int\"},{\"name\":\"icon_emoji_id\",\"type\":\"flags.0?long\"},{\"name\":\"top_message\",\"type\":\"int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"},{\"name\":\"unread_mentions_count\",\"type\":\"int\"},{\"name\":\"unread_reactions_count\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"draft\",\"type\":\"flags.4?DraftMessage\"}],\"type\":\"ForumTopic\"},{\"id\":913709011,\"predicate\":\"messages.forumTopics\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"order_by_create_date\",\"type\":\"flags.0?true\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"topics\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"}],\"type\":\"messages.ForumTopics\"},{\"id\":228168278,\"predicate\":\"messageActionTopicCreate\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"icon_color\",\"type\":\"int\"},{\"name\":\"icon_emoji_id\",\"type\":\"flags.0?long\"}],\"type\":\"MessageAction\"},{\"id\":-1064024032,\"predicate\":\"messageActionTopicEdit\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"icon_emoji_id\",\"type\":\"flags.1?long\"},{\"name\":\"closed\",\"type\":\"flags.2?Bool\"},{\"name\":\"hidden\",\"type\":\"flags.3?Bool\"}],\"type\":\"MessageAction\"},{\"id\":422509539,\"predicate\":\"updateChannelPinnedTopic\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"topic_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1548122514,\"predicate\":\"inputNotifyForumTopic\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"int\"}],\"type\":\"InputNotifyPeer\"},{\"id\":577659656,\"predicate\":\"notifyForumTopic\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"top_msg_id\",\"type\":\"int\"}],\"type\":\"NotifyPeer\"},{\"id\":1153562857,\"predicate\":\"inputStickerSetEmojiDefaultTopicIcons\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":406407439,\"predicate\":\"messages.sponsoredMessagesEmpty\",\"params\":[],\"type\":\"messages.SponsoredMessages\"},{\"id\":-31881726,\"predicate\":\"updateChannelPinnedTopics\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"order\",\"type\":\"flags.0?Vector\"}],\"type\":\"Update\"},{\"id\":1135897376,\"predicate\":\"defaultHistoryTTL\",\"params\":[{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"DefaultHistoryTTL\"},{\"id\":116234636,\"predicate\":\"auth.codeTypeFragmentSms\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":-648651719,\"predicate\":\"auth.sentCodeTypeFragmentSms\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":1103040667,\"predicate\":\"exportedContactToken\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"ExportedContactToken\"},{\"id\":1693675004,\"predicate\":\"channelAdminLogEventActionToggleAntiSpam\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1474192222,\"predicate\":\"messageActionSuggestProfilePhoto\",\"params\":[{\"name\":\"photo\",\"type\":\"Photo\"}],\"type\":\"MessageAction\"},{\"id\":2008112412,\"predicate\":\"stickerSetNoCovered\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"}],\"type\":\"StickerSetCovered\"},{\"id\":542282808,\"predicate\":\"updateUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":596704836,\"predicate\":\"auth.sentCodeSuccess\",\"params\":[{\"name\":\"authorization\",\"type\":\"auth.Authorization\"}],\"type\":\"auth.SentCode\"},{\"id\":827428507,\"predicate\":\"messageActionRequestedPeer\",\"params\":[{\"name\":\"button_id\",\"type\":\"int\"},{\"name\":\"peers\",\"type\":\"Vector\"}],\"type\":\"MessageAction\"},{\"id\":1597737472,\"predicate\":\"requestPeerTypeUser\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"bot\",\"type\":\"flags.0?Bool\"},{\"name\":\"premium\",\"type\":\"flags.1?Bool\"}],\"type\":\"RequestPeerType\"},{\"id\":-906990053,\"predicate\":\"requestPeerTypeChat\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"bot_participant\",\"type\":\"flags.5?true\"},{\"name\":\"has_username\",\"type\":\"flags.3?Bool\"},{\"name\":\"forum\",\"type\":\"flags.4?Bool\"},{\"name\":\"user_admin_rights\",\"type\":\"flags.1?ChatAdminRights\"},{\"name\":\"bot_admin_rights\",\"type\":\"flags.2?ChatAdminRights\"}],\"type\":\"RequestPeerType\"},{\"id\":865857388,\"predicate\":\"requestPeerTypeBroadcast\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"has_username\",\"type\":\"flags.3?Bool\"},{\"name\":\"user_admin_rights\",\"type\":\"flags.1?ChatAdminRights\"},{\"name\":\"bot_admin_rights\",\"type\":\"flags.2?ChatAdminRights\"}],\"type\":\"RequestPeerType\"},{\"id\":1406648280,\"predicate\":\"keyboardButtonRequestPeer\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"button_id\",\"type\":\"int\"},{\"name\":\"peer_type\",\"type\":\"RequestPeerType\"},{\"name\":\"max_quantity\",\"type\":\"int\"}],\"type\":\"KeyboardButton\"},{\"id\":1209970170,\"predicate\":\"emojiListNotModified\",\"params\":[],\"type\":\"EmojiList\"},{\"id\":2048790993,\"predicate\":\"emojiList\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"document_id\",\"type\":\"Vector\"}],\"type\":\"EmojiList\"},{\"id\":10475318,\"predicate\":\"auth.sentCodeTypeFirebaseSms\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"nonce\",\"type\":\"flags.0?bytes\"},{\"name\":\"play_integrity_project_id\",\"type\":\"flags.2?long\"},{\"name\":\"play_integrity_nonce\",\"type\":\"flags.2?bytes\"},{\"name\":\"receipt\",\"type\":\"flags.1?string\"},{\"name\":\"push_timeout\",\"type\":\"flags.1?int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":2056961449,\"predicate\":\"emojiGroup\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"icon_emoji_id\",\"type\":\"long\"},{\"name\":\"emoticons\",\"type\":\"Vector\"}],\"type\":\"EmojiGroup\"},{\"id\":1874111879,\"predicate\":\"messages.emojiGroupsNotModified\",\"params\":[],\"type\":\"messages.EmojiGroups\"},{\"id\":-2011186869,\"predicate\":\"messages.emojiGroups\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"groups\",\"type\":\"Vector\"}],\"type\":\"messages.EmojiGroups\"},{\"id\":-128171716,\"predicate\":\"videoSizeEmojiMarkup\",\"params\":[{\"name\":\"emoji_id\",\"type\":\"long\"},{\"name\":\"background_colors\",\"type\":\"Vector\"}],\"type\":\"VideoSize\"},{\"id\":228623102,\"predicate\":\"videoSizeStickerMarkup\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"sticker_id\",\"type\":\"long\"},{\"name\":\"background_colors\",\"type\":\"Vector\"}],\"type\":\"VideoSize\"},{\"id\":1964978502,\"predicate\":\"textWithEntities\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"}],\"type\":\"TextWithEntities\"},{\"id\":870003448,\"predicate\":\"messages.translateResult\",\"params\":[{\"name\":\"result\",\"type\":\"Vector\"}],\"type\":\"messages.TranslatedText\"},{\"id\":-934791986,\"predicate\":\"autoSaveSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"photos\",\"type\":\"flags.0?true\"},{\"name\":\"videos\",\"type\":\"flags.1?true\"},{\"name\":\"video_max_size\",\"type\":\"flags.2?long\"}],\"type\":\"AutoSaveSettings\"},{\"id\":-2124403385,\"predicate\":\"autoSaveException\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"settings\",\"type\":\"AutoSaveSettings\"}],\"type\":\"AutoSaveException\"},{\"id\":1279133341,\"predicate\":\"account.autoSaveSettings\",\"params\":[{\"name\":\"users_settings\",\"type\":\"AutoSaveSettings\"},{\"name\":\"chats_settings\",\"type\":\"AutoSaveSettings\"},{\"name\":\"broadcasts_settings\",\"type\":\"AutoSaveSettings\"},{\"name\":\"exceptions\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"account.AutoSaveSettings\"},{\"id\":-335171433,\"predicate\":\"updateAutoSaveSettings\",\"params\":[],\"type\":\"Update\"},{\"id\":2094949405,\"predicate\":\"help.appConfigNotModified\",\"params\":[],\"type\":\"help.AppConfig\"},{\"id\":-585598930,\"predicate\":\"help.appConfig\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"config\",\"type\":\"JSONValue\"}],\"type\":\"help.AppConfig\"},{\"id\":-1457472134,\"predicate\":\"inputBotAppID\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputBotApp\"},{\"id\":-1869872121,\"predicate\":\"inputBotAppShortName\",\"params\":[{\"name\":\"bot_id\",\"type\":\"InputUser\"},{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"InputBotApp\"},{\"id\":1571189943,\"predicate\":\"botAppNotModified\",\"params\":[],\"type\":\"BotApp\"},{\"id\":-1778593322,\"predicate\":\"botApp\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"document\",\"type\":\"flags.0?Document\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"BotApp\"},{\"id\":-347034123,\"predicate\":\"messages.botApp\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inactive\",\"type\":\"flags.0?true\"},{\"name\":\"request_write_access\",\"type\":\"flags.1?true\"},{\"name\":\"has_settings\",\"type\":\"flags.2?true\"},{\"name\":\"app\",\"type\":\"BotApp\"}],\"type\":\"messages.BotApp\"},{\"id\":-1250781739,\"predicate\":\"inlineBotWebView\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"InlineBotWebView\"},{\"id\":1246753138,\"predicate\":\"readParticipantDate\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ReadParticipantDate\"},{\"id\":-1612542300,\"predicate\":\"dialogFilterChatlist\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_my_invites\",\"type\":\"flags.26?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"emoticon\",\"type\":\"flags.25?string\"},{\"name\":\"color\",\"type\":\"flags.27?int\"},{\"name\":\"pinned_peers\",\"type\":\"Vector\"},{\"name\":\"include_peers\",\"type\":\"Vector\"}],\"type\":\"DialogFilter\"},{\"id\":-203367885,\"predicate\":\"inputChatlistDialogFilter\",\"params\":[{\"name\":\"filter_id\",\"type\":\"int\"}],\"type\":\"InputChatlist\"},{\"id\":206668204,\"predicate\":\"exportedChatlistInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"peers\",\"type\":\"Vector\"}],\"type\":\"ExportedChatlistInvite\"},{\"id\":283567014,\"predicate\":\"chatlists.exportedChatlistInvite\",\"params\":[{\"name\":\"filter\",\"type\":\"DialogFilter\"},{\"name\":\"invite\",\"type\":\"ExportedChatlistInvite\"}],\"type\":\"chatlists.ExportedChatlistInvite\"},{\"id\":279670215,\"predicate\":\"chatlists.exportedInvites\",\"params\":[{\"name\":\"invites\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"chatlists.ExportedInvites\"},{\"id\":-91752871,\"predicate\":\"chatlists.chatlistInviteAlready\",\"params\":[{\"name\":\"filter_id\",\"type\":\"int\"},{\"name\":\"missing_peers\",\"type\":\"Vector\"},{\"name\":\"already_peers\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"chatlists.ChatlistInvite\"},{\"id\":500007837,\"predicate\":\"chatlists.chatlistInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"emoticon\",\"type\":\"flags.0?string\"},{\"name\":\"peers\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"chatlists.ChatlistInvite\"},{\"id\":-1816295539,\"predicate\":\"chatlists.chatlistUpdates\",\"params\":[{\"name\":\"missing_peers\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"chatlists.ChatlistUpdates\"},{\"id\":1348510708,\"predicate\":\"messageActionSetChatWallPaper\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"same\",\"type\":\"flags.0?true\"},{\"name\":\"for_both\",\"type\":\"flags.1?true\"},{\"name\":\"wallpaper\",\"type\":\"WallPaper\"}],\"type\":\"MessageAction\"},{\"id\":-391678544,\"predicate\":\"bots.botInfo\",\"params\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"}],\"type\":\"bots.BotInfo\"},{\"id\":238759180,\"predicate\":\"inlineQueryPeerTypeBotPM\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":-1228133028,\"predicate\":\"messagePeerVote\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"option\",\"type\":\"bytes\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessagePeerVote\"},{\"id\":1959634180,\"predicate\":\"messagePeerVoteInputOption\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessagePeerVote\"},{\"id\":1177089766,\"predicate\":\"messagePeerVoteMultiple\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"options\",\"type\":\"Vector\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessagePeerVote\"},{\"id\":941870144,\"predicate\":\"inputPrivacyKeyAbout\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":-1534675103,\"predicate\":\"privacyKeyAbout\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":-1923523370,\"predicate\":\"storyViews\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_viewers\",\"type\":\"flags.1?true\"},{\"name\":\"views_count\",\"type\":\"int\"},{\"name\":\"forwards_count\",\"type\":\"flags.2?int\"},{\"name\":\"reactions\",\"type\":\"flags.3?Vector\"},{\"name\":\"reactions_count\",\"type\":\"flags.4?int\"},{\"name\":\"recent_viewers\",\"type\":\"flags.0?Vector\"}],\"type\":\"StoryViews\"},{\"id\":1374088783,\"predicate\":\"storyItemDeleted\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"StoryItem\"},{\"id\":-5388013,\"predicate\":\"storyItemSkipped\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"close_friends\",\"type\":\"flags.8?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"expire_date\",\"type\":\"int\"}],\"type\":\"StoryItem\"},{\"id\":2041735716,\"predicate\":\"storyItem\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.5?true\"},{\"name\":\"public\",\"type\":\"flags.7?true\"},{\"name\":\"close_friends\",\"type\":\"flags.8?true\"},{\"name\":\"min\",\"type\":\"flags.9?true\"},{\"name\":\"noforwards\",\"type\":\"flags.10?true\"},{\"name\":\"edited\",\"type\":\"flags.11?true\"},{\"name\":\"contacts\",\"type\":\"flags.12?true\"},{\"name\":\"selected_contacts\",\"type\":\"flags.13?true\"},{\"name\":\"out\",\"type\":\"flags.16?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"flags.18?Peer\"},{\"name\":\"fwd_from\",\"type\":\"flags.17?StoryFwdHeader\"},{\"name\":\"expire_date\",\"type\":\"int\"},{\"name\":\"caption\",\"type\":\"flags.0?string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"media\",\"type\":\"MessageMedia\"},{\"name\":\"media_areas\",\"type\":\"flags.14?Vector\"},{\"name\":\"privacy\",\"type\":\"flags.2?Vector\"},{\"name\":\"views\",\"type\":\"flags.3?StoryViews\"},{\"name\":\"sent_reaction\",\"type\":\"flags.15?Reaction\"}],\"type\":\"StoryItem\"},{\"id\":1974712216,\"predicate\":\"updateStory\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"story\",\"type\":\"StoryItem\"}],\"type\":\"Update\"},{\"id\":-145845461,\"predicate\":\"updateReadStories\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":291044926,\"predicate\":\"stories.allStoriesNotModified\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"state\",\"type\":\"string\"},{\"name\":\"stealth_mode\",\"type\":\"StoriesStealthMode\"}],\"type\":\"stories.AllStories\"},{\"id\":1862033025,\"predicate\":\"stories.allStories\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_more\",\"type\":\"flags.0?true\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"state\",\"type\":\"string\"},{\"name\":\"peer_stories\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"stealth_mode\",\"type\":\"StoriesStealthMode\"}],\"type\":\"stories.AllStories\"},{\"id\":1673780490,\"predicate\":\"stories.stories\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"stories\",\"type\":\"Vector\"},{\"name\":\"pinned_to_top\",\"type\":\"flags.0?Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"stories.Stories\"},{\"id\":793067081,\"predicate\":\"inputPrivacyValueAllowCloseFriends\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":-135735141,\"predicate\":\"privacyValueAllowCloseFriends\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":-1329730875,\"predicate\":\"storyView\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"blocked\",\"type\":\"flags.0?true\"},{\"name\":\"blocked_my_stories_from\",\"type\":\"flags.1?true\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"reaction\",\"type\":\"flags.2?Reaction\"}],\"type\":\"StoryView\"},{\"id\":1507299269,\"predicate\":\"stories.storyViewsList\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"views_count\",\"type\":\"int\"},{\"name\":\"forwards_count\",\"type\":\"int\"},{\"name\":\"reactions_count\",\"type\":\"int\"},{\"name\":\"views\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"next_offset\",\"type\":\"flags.0?string\"}],\"type\":\"stories.StoryViewsList\"},{\"id\":-560009955,\"predicate\":\"stories.storyViews\",\"params\":[{\"name\":\"views\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"stories.StoryViews\"},{\"id\":583071445,\"predicate\":\"inputReplyToMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reply_to_msg_id\",\"type\":\"int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"reply_to_peer_id\",\"type\":\"flags.1?InputPeer\"},{\"name\":\"quote_text\",\"type\":\"flags.2?string\"},{\"name\":\"quote_entities\",\"type\":\"flags.3?Vector\"},{\"name\":\"quote_offset\",\"type\":\"flags.4?int\"}],\"type\":\"InputReplyTo\"},{\"id\":1484862010,\"predicate\":\"inputReplyToStory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"story_id\",\"type\":\"int\"}],\"type\":\"InputReplyTo\"},{\"id\":240843065,\"predicate\":\"messageReplyStoryHeader\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"story_id\",\"type\":\"int\"}],\"type\":\"MessageReplyHeader\"},{\"id\":468923833,\"predicate\":\"updateStoryID\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"random_id\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":1070138683,\"predicate\":\"exportedStoryLink\",\"params\":[{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"ExportedStoryLink\"},{\"id\":-1979852936,\"predicate\":\"inputMediaStory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"InputMedia\"},{\"id\":1758159491,\"predicate\":\"messageMediaStory\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"via_mention\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"story\",\"type\":\"flags.0?StoryItem\"}],\"type\":\"MessageMedia\"},{\"id\":781501415,\"predicate\":\"webPageAttributeStory\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"story\",\"type\":\"flags.0?StoryItem\"}],\"type\":\"WebPageAttribute\"},{\"id\":1898850301,\"predicate\":\"storiesStealthMode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"active_until_date\",\"type\":\"flags.0?int\"},{\"name\":\"cooldown_until_date\",\"type\":\"flags.1?int\"}],\"type\":\"StoriesStealthMode\"},{\"id\":738741697,\"predicate\":\"updateStoriesStealthMode\",\"params\":[{\"name\":\"stealth_mode\",\"type\":\"StoriesStealthMode\"}],\"type\":\"Update\"},{\"id\":-808853502,\"predicate\":\"mediaAreaCoordinates\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"x\",\"type\":\"double\"},{\"name\":\"y\",\"type\":\"double\"},{\"name\":\"w\",\"type\":\"double\"},{\"name\":\"h\",\"type\":\"double\"},{\"name\":\"rotation\",\"type\":\"double\"},{\"name\":\"radius\",\"type\":\"flags.0?double\"}],\"type\":\"MediaAreaCoordinates\"},{\"id\":-1098720356,\"predicate\":\"mediaAreaVenue\",\"params\":[{\"name\":\"coordinates\",\"type\":\"MediaAreaCoordinates\"},{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"}],\"type\":\"MediaArea\"},{\"id\":-1300094593,\"predicate\":\"inputMediaAreaVenue\",\"params\":[{\"name\":\"coordinates\",\"type\":\"MediaAreaCoordinates\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"result_id\",\"type\":\"string\"}],\"type\":\"MediaArea\"},{\"id\":-891992787,\"predicate\":\"mediaAreaGeoPoint\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"coordinates\",\"type\":\"MediaAreaCoordinates\"},{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"address\",\"type\":\"flags.0?GeoPointAddress\"}],\"type\":\"MediaArea\"},{\"id\":2103604867,\"predicate\":\"updateSentStoryReaction\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"story_id\",\"type\":\"int\"},{\"name\":\"reaction\",\"type\":\"Reaction\"}],\"type\":\"Update\"},{\"id\":340088945,\"predicate\":\"mediaAreaSuggestedReaction\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"flipped\",\"type\":\"flags.1?true\"},{\"name\":\"coordinates\",\"type\":\"MediaAreaCoordinates\"},{\"name\":\"reaction\",\"type\":\"Reaction\"}],\"type\":\"MediaArea\"},{\"id\":-1707742823,\"predicate\":\"peerStories\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"max_read_id\",\"type\":\"flags.0?int\"},{\"name\":\"stories\",\"type\":\"Vector\"}],\"type\":\"PeerStories\"},{\"id\":-890861720,\"predicate\":\"stories.peerStories\",\"params\":[{\"name\":\"stories\",\"type\":\"PeerStories\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"stories.PeerStories\"},{\"id\":-44166467,\"predicate\":\"messages.webPage\",\"params\":[{\"name\":\"webpage\",\"type\":\"WebPage\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.WebPage\"},{\"id\":-1551868097,\"predicate\":\"inputStorePaymentPremiumGiftCode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"boost_peer\",\"type\":\"flags.0?InputPeer\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"}],\"type\":\"InputStorePaymentPurpose\"},{\"id\":369444042,\"predicate\":\"inputStorePaymentPremiumGiveaway\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"only_new_subscribers\",\"type\":\"flags.0?true\"},{\"name\":\"winners_are_visible\",\"type\":\"flags.3?true\"},{\"name\":\"boost_peer\",\"type\":\"InputPeer\"},{\"name\":\"additional_peers\",\"type\":\"flags.1?Vector\"},{\"name\":\"countries_iso2\",\"type\":\"flags.2?Vector\"},{\"name\":\"prize_description\",\"type\":\"flags.4?string\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"until_date\",\"type\":\"int\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"}],\"type\":\"InputStorePaymentPurpose\"},{\"id\":-1734841331,\"predicate\":\"inputInvoicePremiumGiftCode\",\"params\":[{\"name\":\"purpose\",\"type\":\"InputStorePaymentPurpose\"},{\"name\":\"option\",\"type\":\"PremiumGiftCodeOption\"}],\"type\":\"InputInvoice\"},{\"id\":629052971,\"predicate\":\"premiumGiftCodeOption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"users\",\"type\":\"int\"},{\"name\":\"months\",\"type\":\"int\"},{\"name\":\"store_product\",\"type\":\"flags.0?string\"},{\"name\":\"store_quantity\",\"type\":\"flags.1?int\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"}],\"type\":\"PremiumGiftCodeOption\"},{\"id\":675942550,\"predicate\":\"payments.checkedGiftCode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"via_giveaway\",\"type\":\"flags.2?true\"},{\"name\":\"from_id\",\"type\":\"flags.4?Peer\"},{\"name\":\"giveaway_msg_id\",\"type\":\"flags.3?int\"},{\"name\":\"to_id\",\"type\":\"flags.0?long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"months\",\"type\":\"int\"},{\"name\":\"used_date\",\"type\":\"flags.1?int\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"payments.CheckedGiftCode\"},{\"id\":-626162256,\"predicate\":\"messageMediaGiveaway\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"only_new_subscribers\",\"type\":\"flags.0?true\"},{\"name\":\"winners_are_visible\",\"type\":\"flags.2?true\"},{\"name\":\"channels\",\"type\":\"Vector\"},{\"name\":\"countries_iso2\",\"type\":\"flags.1?Vector\"},{\"name\":\"prize_description\",\"type\":\"flags.3?string\"},{\"name\":\"quantity\",\"type\":\"int\"},{\"name\":\"months\",\"type\":\"int\"},{\"name\":\"until_date\",\"type\":\"int\"}],\"type\":\"MessageMedia\"},{\"id\":1737240073,\"predicate\":\"messageActionGiftCode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"via_giveaway\",\"type\":\"flags.0?true\"},{\"name\":\"unclaimed\",\"type\":\"flags.2?true\"},{\"name\":\"boost_peer\",\"type\":\"flags.1?Peer\"},{\"name\":\"months\",\"type\":\"int\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"currency\",\"type\":\"flags.2?string\"},{\"name\":\"amount\",\"type\":\"flags.2?long\"},{\"name\":\"crypto_currency\",\"type\":\"flags.3?string\"},{\"name\":\"crypto_amount\",\"type\":\"flags.3?long\"}],\"type\":\"MessageAction\"},{\"id\":858499565,\"predicate\":\"messageActionGiveawayLaunch\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":1130879648,\"predicate\":\"payments.giveawayInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"participating\",\"type\":\"flags.0?true\"},{\"name\":\"preparing_results\",\"type\":\"flags.3?true\"},{\"name\":\"start_date\",\"type\":\"int\"},{\"name\":\"joined_too_early_date\",\"type\":\"flags.1?int\"},{\"name\":\"admin_disallowed_chat_id\",\"type\":\"flags.2?long\"},{\"name\":\"disallowed_country\",\"type\":\"flags.4?string\"}],\"type\":\"payments.GiveawayInfo\"},{\"id\":13456752,\"predicate\":\"payments.giveawayInfoResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"winner\",\"type\":\"flags.0?true\"},{\"name\":\"refunded\",\"type\":\"flags.1?true\"},{\"name\":\"start_date\",\"type\":\"int\"},{\"name\":\"gift_code_slug\",\"type\":\"flags.0?string\"},{\"name\":\"finish_date\",\"type\":\"int\"},{\"name\":\"winners_count\",\"type\":\"int\"},{\"name\":\"activated_count\",\"type\":\"int\"}],\"type\":\"payments.GiveawayInfo\"},{\"id\":-238245204,\"predicate\":\"messageEntityBlockquote\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"collapsed\",\"type\":\"flags.0?true\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-1303143084,\"predicate\":\"prepaidGiveaway\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"months\",\"type\":\"int\"},{\"name\":\"quantity\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"PrepaidGiveaway\"},{\"id\":-1038383031,\"predicate\":\"inputMediaWebPage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"force_large_media\",\"type\":\"flags.0?true\"},{\"name\":\"force_small_media\",\"type\":\"flags.1?true\"},{\"name\":\"optional\",\"type\":\"flags.2?true\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":-1109605104,\"predicate\":\"inputBotInlineMessageMediaWebPage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"invert_media\",\"type\":\"flags.3?true\"},{\"name\":\"force_large_media\",\"type\":\"flags.4?true\"},{\"name\":\"force_small_media\",\"type\":\"flags.5?true\"},{\"name\":\"optional\",\"type\":\"flags.6?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":-2137335386,\"predicate\":\"botInlineMessageMediaWebPage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"invert_media\",\"type\":\"flags.3?true\"},{\"name\":\"force_large_media\",\"type\":\"flags.4?true\"},{\"name\":\"force_small_media\",\"type\":\"flags.5?true\"},{\"name\":\"manual\",\"type\":\"flags.7?true\"},{\"name\":\"safe\",\"type\":\"flags.8?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":706514033,\"predicate\":\"boost\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"gift\",\"type\":\"flags.1?true\"},{\"name\":\"giveaway\",\"type\":\"flags.2?true\"},{\"name\":\"unclaimed\",\"type\":\"flags.3?true\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"flags.0?long\"},{\"name\":\"giveaway_msg_id\",\"type\":\"flags.2?int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"used_gift_slug\",\"type\":\"flags.4?string\"},{\"name\":\"multiplier\",\"type\":\"flags.5?int\"}],\"type\":\"Boost\"},{\"id\":-2030542532,\"predicate\":\"premium.boostsList\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"boosts\",\"type\":\"Vector\"},{\"name\":\"next_offset\",\"type\":\"flags.0?string\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"premium.BoostsList\"},{\"id\":-1001897636,\"predicate\":\"myBoost\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"slot\",\"type\":\"int\"},{\"name\":\"peer\",\"type\":\"flags.0?Peer\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"cooldown_until_date\",\"type\":\"flags.1?int\"}],\"type\":\"MyBoost\"},{\"id\":-1696454430,\"predicate\":\"premium.myBoosts\",\"params\":[{\"name\":\"my_boosts\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"premium.MyBoosts\"},{\"id\":1230586490,\"predicate\":\"premium.boostsStatus\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"my_boost\",\"type\":\"flags.2?true\"},{\"name\":\"level\",\"type\":\"int\"},{\"name\":\"current_level_boosts\",\"type\":\"int\"},{\"name\":\"boosts\",\"type\":\"int\"},{\"name\":\"gift_boosts\",\"type\":\"flags.4?int\"},{\"name\":\"next_level_boosts\",\"type\":\"flags.0?int\"},{\"name\":\"premium_audience\",\"type\":\"flags.1?StatsPercentValue\"},{\"name\":\"boost_url\",\"type\":\"string\"},{\"name\":\"prepaid_giveaways\",\"type\":\"flags.3?Vector\"},{\"name\":\"my_boost_slots\",\"type\":\"flags.2?Vector\"}],\"type\":\"premium.BoostsStatus\"},{\"id\":-1873947492,\"predicate\":\"updateBotChatBoost\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"boost\",\"type\":\"Boost\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":129403168,\"predicate\":\"updateChannelViewForumAsMessages\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Update\"},{\"id\":715107781,\"predicate\":\"messageActionGiveawayResults\",\"params\":[{\"name\":\"winners_count\",\"type\":\"int\"},{\"name\":\"unclaimed_count\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":-1371598819,\"predicate\":\"updatePeerWallpaper\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"wallpaper_overridden\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"wallpaper\",\"type\":\"flags.0?WallPaper\"}],\"type\":\"Update\"},{\"id\":-1205411504,\"predicate\":\"storyFwdHeader\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"modified\",\"type\":\"flags.3?true\"},{\"name\":\"from\",\"type\":\"flags.0?Peer\"},{\"name\":\"from_name\",\"type\":\"flags.1?string\"},{\"name\":\"story_id\",\"type\":\"flags.2?int\"}],\"type\":\"StoryFwdHeader\"},{\"id\":-419066241,\"predicate\":\"postInteractionCountersMessage\",\"params\":[{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"views\",\"type\":\"int\"},{\"name\":\"forwards\",\"type\":\"int\"},{\"name\":\"reactions\",\"type\":\"int\"}],\"type\":\"PostInteractionCounters\"},{\"id\":-1974989273,\"predicate\":\"postInteractionCountersStory\",\"params\":[{\"name\":\"story_id\",\"type\":\"int\"},{\"name\":\"views\",\"type\":\"int\"},{\"name\":\"forwards\",\"type\":\"int\"},{\"name\":\"reactions\",\"type\":\"int\"}],\"type\":\"PostInteractionCounters\"},{\"id\":1355613820,\"predicate\":\"stats.storyStats\",\"params\":[{\"name\":\"views_graph\",\"type\":\"StatsGraph\"},{\"name\":\"reactions_by_emotion_graph\",\"type\":\"StatsGraph\"}],\"type\":\"stats.StoryStats\"},{\"id\":32685898,\"predicate\":\"publicForwardMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"PublicForward\"},{\"id\":-302797360,\"predicate\":\"publicForwardStory\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"story\",\"type\":\"StoryItem\"}],\"type\":\"PublicForward\"},{\"id\":-1828487648,\"predicate\":\"stats.publicForwards\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"forwards\",\"type\":\"Vector\"},{\"name\":\"next_offset\",\"type\":\"flags.0?string\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"stats.PublicForwards\"},{\"id\":-1253352753,\"predicate\":\"peerColor\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"color\",\"type\":\"flags.0?int\"},{\"name\":\"background_emoji_id\",\"type\":\"flags.1?long\"}],\"type\":\"PeerColor\"},{\"id\":639736408,\"predicate\":\"help.peerColorSet\",\"params\":[{\"name\":\"colors\",\"type\":\"Vector\"}],\"type\":\"help.PeerColorSet\"},{\"id\":1987928555,\"predicate\":\"help.peerColorProfileSet\",\"params\":[{\"name\":\"palette_colors\",\"type\":\"Vector\"},{\"name\":\"bg_colors\",\"type\":\"Vector\"},{\"name\":\"story_colors\",\"type\":\"Vector\"}],\"type\":\"help.PeerColorSet\"},{\"id\":-1377014082,\"predicate\":\"help.peerColorOption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"hidden\",\"type\":\"flags.0?true\"},{\"name\":\"color_id\",\"type\":\"int\"},{\"name\":\"colors\",\"type\":\"flags.1?help.PeerColorSet\"},{\"name\":\"dark_colors\",\"type\":\"flags.2?help.PeerColorSet\"},{\"name\":\"channel_min_level\",\"type\":\"flags.3?int\"},{\"name\":\"group_min_level\",\"type\":\"flags.4?int\"}],\"type\":\"help.PeerColorOption\"},{\"id\":732034510,\"predicate\":\"help.peerColorsNotModified\",\"params\":[],\"type\":\"help.PeerColors\"},{\"id\":16313608,\"predicate\":\"help.peerColors\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"colors\",\"type\":\"Vector\"}],\"type\":\"help.PeerColors\"},{\"id\":-963047320,\"predicate\":\"messageMediaGiveawayResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"only_new_subscribers\",\"type\":\"flags.0?true\"},{\"name\":\"refunded\",\"type\":\"flags.2?true\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"additional_peers_count\",\"type\":\"flags.3?int\"},{\"name\":\"launch_msg_id\",\"type\":\"int\"},{\"name\":\"winners_count\",\"type\":\"int\"},{\"name\":\"unclaimed_count\",\"type\":\"int\"},{\"name\":\"winners\",\"type\":\"Vector\"},{\"name\":\"months\",\"type\":\"int\"},{\"name\":\"prize_description\",\"type\":\"flags.1?string\"},{\"name\":\"until_date\",\"type\":\"int\"}],\"type\":\"MessageMedia\"},{\"id\":1620104917,\"predicate\":\"storyReaction\",\"params\":[{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"reaction\",\"type\":\"Reaction\"}],\"type\":\"StoryReaction\"},{\"id\":-1146411453,\"predicate\":\"storyReactionPublicForward\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"StoryReaction\"},{\"id\":-808644845,\"predicate\":\"storyReactionPublicRepost\",\"params\":[{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"story\",\"type\":\"StoryItem\"}],\"type\":\"StoryReaction\"},{\"id\":-1436583780,\"predicate\":\"stories.storyReactionsList\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"reactions\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"next_offset\",\"type\":\"flags.0?string\"}],\"type\":\"stories.StoryReactionsList\"},{\"id\":-1870436597,\"predicate\":\"storyViewPublicForward\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"blocked\",\"type\":\"flags.0?true\"},{\"name\":\"blocked_my_stories_from\",\"type\":\"flags.1?true\"},{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"StoryView\"},{\"id\":-1116418231,\"predicate\":\"storyViewPublicRepost\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"blocked\",\"type\":\"flags.0?true\"},{\"name\":\"blocked_my_stories_from\",\"type\":\"flags.1?true\"},{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"story\",\"type\":\"StoryItem\"}],\"type\":\"StoryView\"},{\"id\":1469507456,\"predicate\":\"channelAdminLogEventActionChangePeerColor\",\"params\":[{\"name\":\"prev_value\",\"type\":\"PeerColor\"},{\"name\":\"new_value\",\"type\":\"PeerColor\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1581742885,\"predicate\":\"channelAdminLogEventActionChangeProfilePeerColor\",\"params\":[{\"name\":\"prev_value\",\"type\":\"PeerColor\"},{\"name\":\"new_value\",\"type\":\"PeerColor\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":834362706,\"predicate\":\"channelAdminLogEventActionChangeWallpaper\",\"params\":[{\"name\":\"prev_value\",\"type\":\"WallPaper\"},{\"name\":\"new_value\",\"type\":\"WallPaper\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1051328177,\"predicate\":\"channelAdminLogEventActionChangeEmojiStatus\",\"params\":[{\"name\":\"prev_value\",\"type\":\"EmojiStatus\"},{\"name\":\"new_value\",\"type\":\"EmojiStatus\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1232373075,\"predicate\":\"inputStickerSetEmojiChannelDefaultStatuses\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":1996756655,\"predicate\":\"mediaAreaChannelPost\",\"params\":[{\"name\":\"coordinates\",\"type\":\"MediaAreaCoordinates\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"MediaArea\"},{\"id\":577893055,\"predicate\":\"inputMediaAreaChannelPost\",\"params\":[{\"name\":\"coordinates\",\"type\":\"MediaAreaCoordinates\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"MediaArea\"},{\"id\":-1407069234,\"predicate\":\"updateBotMessageReaction\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"actor\",\"type\":\"Peer\"},{\"name\":\"old_reactions\",\"type\":\"Vector\"},{\"name\":\"new_reactions\",\"type\":\"Vector\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":164329305,\"predicate\":\"updateBotMessageReactions\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"reactions\",\"type\":\"Vector\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1115174036,\"predicate\":\"savedDialog\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"top_message\",\"type\":\"int\"}],\"type\":\"SavedDialog\"},{\"id\":-1364222348,\"predicate\":\"updateSavedDialogPinned\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"DialogPeer\"}],\"type\":\"Update\"},{\"id\":1751942566,\"predicate\":\"updatePinnedSavedDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"order\",\"type\":\"flags.0?Vector\"}],\"type\":\"Update\"},{\"id\":-130358751,\"predicate\":\"messages.savedDialogs\",\"params\":[{\"name\":\"dialogs\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.SavedDialogs\"},{\"id\":1153080793,\"predicate\":\"messages.savedDialogsSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"dialogs\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.SavedDialogs\"},{\"id\":-1071681560,\"predicate\":\"messages.savedDialogsNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.SavedDialogs\"},{\"id\":-881854424,\"predicate\":\"savedReactionTag\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reaction\",\"type\":\"Reaction\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"SavedReactionTag\"},{\"id\":-2003084817,\"predicate\":\"messages.savedReactionTagsNotModified\",\"params\":[],\"type\":\"messages.SavedReactionTags\"},{\"id\":844731658,\"predicate\":\"messages.savedReactionTags\",\"params\":[{\"name\":\"tags\",\"type\":\"Vector\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.SavedReactionTags\"},{\"id\":969307186,\"predicate\":\"updateSavedReactionTags\",\"params\":[],\"type\":\"Update\"},{\"id\":1001931436,\"predicate\":\"outboxReadDate\",\"params\":[{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"OutboxReadDate\"},{\"id\":-872240531,\"predicate\":\"messageActionBoostApply\",\"params\":[{\"name\":\"boosts\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":1188577451,\"predicate\":\"channelAdminLogEventActionChangeEmojiStickerSet\",\"params\":[{\"name\":\"prev_stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"new_stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-594852657,\"predicate\":\"smsjobs.eligibleToJoin\",\"params\":[{\"name\":\"terms_url\",\"type\":\"string\"},{\"name\":\"monthly_sent_sms\",\"type\":\"int\"}],\"type\":\"smsjobs.EligibilityToJoin\"},{\"id\":720277905,\"predicate\":\"smsjobs.status\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"allow_international\",\"type\":\"flags.0?true\"},{\"name\":\"recent_sent\",\"type\":\"int\"},{\"name\":\"recent_since\",\"type\":\"int\"},{\"name\":\"recent_remains\",\"type\":\"int\"},{\"name\":\"total_sent\",\"type\":\"int\"},{\"name\":\"total_since\",\"type\":\"int\"},{\"name\":\"last_gift_slug\",\"type\":\"flags.1?string\"},{\"name\":\"terms_url\",\"type\":\"string\"}],\"type\":\"smsjobs.Status\"},{\"id\":-245208620,\"predicate\":\"updateSmsJob\",\"params\":[{\"name\":\"job_id\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":-425595208,\"predicate\":\"smsJob\",\"params\":[{\"name\":\"job_id\",\"type\":\"string\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SmsJob\"},{\"id\":302717625,\"predicate\":\"businessWeeklyOpen\",\"params\":[{\"name\":\"start_minute\",\"type\":\"int\"},{\"name\":\"end_minute\",\"type\":\"int\"}],\"type\":\"BusinessWeeklyOpen\"},{\"id\":-1936543592,\"predicate\":\"businessWorkHours\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"open_now\",\"type\":\"flags.0?true\"},{\"name\":\"timezone_id\",\"type\":\"string\"},{\"name\":\"weekly_open\",\"type\":\"Vector\"}],\"type\":\"BusinessWorkHours\"},{\"id\":-1403249929,\"predicate\":\"businessLocation\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo_point\",\"type\":\"flags.0?GeoPoint\"},{\"name\":\"address\",\"type\":\"string\"}],\"type\":\"BusinessLocation\"},{\"id\":1871393450,\"predicate\":\"inputBusinessRecipients\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"existing_chats\",\"type\":\"flags.0?true\"},{\"name\":\"new_chats\",\"type\":\"flags.1?true\"},{\"name\":\"contacts\",\"type\":\"flags.2?true\"},{\"name\":\"non_contacts\",\"type\":\"flags.3?true\"},{\"name\":\"exclude_selected\",\"type\":\"flags.5?true\"},{\"name\":\"users\",\"type\":\"flags.4?Vector\"}],\"type\":\"InputBusinessRecipients\"},{\"id\":554733559,\"predicate\":\"businessRecipients\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"existing_chats\",\"type\":\"flags.0?true\"},{\"name\":\"new_chats\",\"type\":\"flags.1?true\"},{\"name\":\"contacts\",\"type\":\"flags.2?true\"},{\"name\":\"non_contacts\",\"type\":\"flags.3?true\"},{\"name\":\"exclude_selected\",\"type\":\"flags.5?true\"},{\"name\":\"users\",\"type\":\"flags.4?Vector\"}],\"type\":\"BusinessRecipients\"},{\"id\":-910564679,\"predicate\":\"businessAwayMessageScheduleAlways\",\"params\":[],\"type\":\"BusinessAwayMessageSchedule\"},{\"id\":-1007487743,\"predicate\":\"businessAwayMessageScheduleOutsideWorkHours\",\"params\":[],\"type\":\"BusinessAwayMessageSchedule\"},{\"id\":-867328308,\"predicate\":\"businessAwayMessageScheduleCustom\",\"params\":[{\"name\":\"start_date\",\"type\":\"int\"},{\"name\":\"end_date\",\"type\":\"int\"}],\"type\":\"BusinessAwayMessageSchedule\"},{\"id\":26528571,\"predicate\":\"inputBusinessGreetingMessage\",\"params\":[{\"name\":\"shortcut_id\",\"type\":\"int\"},{\"name\":\"recipients\",\"type\":\"InputBusinessRecipients\"},{\"name\":\"no_activity_days\",\"type\":\"int\"}],\"type\":\"InputBusinessGreetingMessage\"},{\"id\":-451302485,\"predicate\":\"businessGreetingMessage\",\"params\":[{\"name\":\"shortcut_id\",\"type\":\"int\"},{\"name\":\"recipients\",\"type\":\"BusinessRecipients\"},{\"name\":\"no_activity_days\",\"type\":\"int\"}],\"type\":\"BusinessGreetingMessage\"},{\"id\":-2094959136,\"predicate\":\"inputBusinessAwayMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"offline_only\",\"type\":\"flags.0?true\"},{\"name\":\"shortcut_id\",\"type\":\"int\"},{\"name\":\"schedule\",\"type\":\"BusinessAwayMessageSchedule\"},{\"name\":\"recipients\",\"type\":\"InputBusinessRecipients\"}],\"type\":\"InputBusinessAwayMessage\"},{\"id\":-283809188,\"predicate\":\"businessAwayMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"offline_only\",\"type\":\"flags.0?true\"},{\"name\":\"shortcut_id\",\"type\":\"int\"},{\"name\":\"schedule\",\"type\":\"BusinessAwayMessageSchedule\"},{\"name\":\"recipients\",\"type\":\"BusinessRecipients\"}],\"type\":\"BusinessAwayMessage\"},{\"id\":-7173643,\"predicate\":\"timezone\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"utc_offset\",\"type\":\"int\"}],\"type\":\"Timezone\"},{\"id\":-1761146676,\"predicate\":\"help.timezonesListNotModified\",\"params\":[],\"type\":\"help.TimezonesList\"},{\"id\":2071260529,\"predicate\":\"help.timezonesList\",\"params\":[{\"name\":\"timezones\",\"type\":\"Vector\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.TimezonesList\"},{\"id\":110563371,\"predicate\":\"quickReply\",\"params\":[{\"name\":\"shortcut_id\",\"type\":\"int\"},{\"name\":\"shortcut\",\"type\":\"string\"},{\"name\":\"top_message\",\"type\":\"int\"},{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"QuickReply\"},{\"id\":609840449,\"predicate\":\"inputQuickReplyShortcut\",\"params\":[{\"name\":\"shortcut\",\"type\":\"string\"}],\"type\":\"InputQuickReplyShortcut\"},{\"id\":18418929,\"predicate\":\"inputQuickReplyShortcutId\",\"params\":[{\"name\":\"shortcut_id\",\"type\":\"int\"}],\"type\":\"InputQuickReplyShortcut\"},{\"id\":-963811691,\"predicate\":\"messages.quickReplies\",\"params\":[{\"name\":\"quick_replies\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.QuickReplies\"},{\"id\":1603398491,\"predicate\":\"messages.quickRepliesNotModified\",\"params\":[],\"type\":\"messages.QuickReplies\"},{\"id\":-112784718,\"predicate\":\"updateQuickReplies\",\"params\":[{\"name\":\"quick_replies\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-180508905,\"predicate\":\"updateNewQuickReply\",\"params\":[{\"name\":\"quick_reply\",\"type\":\"QuickReply\"}],\"type\":\"Update\"},{\"id\":1407644140,\"predicate\":\"updateDeleteQuickReply\",\"params\":[{\"name\":\"shortcut_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1040518415,\"predicate\":\"updateQuickReplyMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"Update\"},{\"id\":1450174413,\"predicate\":\"updateDeleteQuickReplyMessages\",\"params\":[{\"name\":\"shortcut_id\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-1123645951,\"predicate\":\"connectedBot\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_reply\",\"type\":\"flags.0?true\"},{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"recipients\",\"type\":\"BusinessBotRecipients\"}],\"type\":\"ConnectedBot\"},{\"id\":400029819,\"predicate\":\"account.connectedBots\",\"params\":[{\"name\":\"connected_bots\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"account.ConnectedBots\"},{\"id\":718878489,\"predicate\":\"messages.dialogFilters\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"tags_enabled\",\"type\":\"flags.0?true\"},{\"name\":\"filters\",\"type\":\"Vector\"}],\"type\":\"messages.DialogFilters\"},{\"id\":1821253126,\"predicate\":\"birthday\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"day\",\"type\":\"int\"},{\"name\":\"month\",\"type\":\"int\"},{\"name\":\"year\",\"type\":\"flags.0?int\"}],\"type\":\"Birthday\"},{\"id\":-1964652166,\"predicate\":\"updateBotBusinessConnect\",\"params\":[{\"name\":\"connection\",\"type\":\"BotBusinessConnection\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1646578564,\"predicate\":\"updateBotNewBusinessMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"connection_id\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"reply_to_message\",\"type\":\"flags.0?Message\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":132077692,\"predicate\":\"updateBotEditBusinessMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"connection_id\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"reply_to_message\",\"type\":\"flags.0?Message\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1607821266,\"predicate\":\"updateBotDeleteBusinessMessage\",\"params\":[{\"name\":\"connection_id\",\"type\":\"string\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1989921868,\"predicate\":\"botBusinessConnection\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_reply\",\"type\":\"flags.0?true\"},{\"name\":\"disabled\",\"type\":\"flags.1?true\"},{\"name\":\"connection_id\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"BotBusinessConnection\"},{\"id\":163867085,\"predicate\":\"inputBusinessIntro\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"sticker\",\"type\":\"flags.0?InputDocument\"}],\"type\":\"InputBusinessIntro\"},{\"id\":1510606445,\"predicate\":\"businessIntro\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"sticker\",\"type\":\"flags.0?Document\"}],\"type\":\"BusinessIntro\"},{\"id\":-83926371,\"predicate\":\"messages.myStickers\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector\"}],\"type\":\"messages.MyStickers\"},{\"id\":-476815191,\"predicate\":\"inputCollectibleUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"InputCollectible\"},{\"id\":-1562241884,\"predicate\":\"inputCollectiblePhone\",\"params\":[{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"InputCollectible\"},{\"id\":1857945489,\"predicate\":\"fragment.collectibleInfo\",\"params\":[{\"name\":\"purchase_date\",\"type\":\"int\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"},{\"name\":\"crypto_currency\",\"type\":\"string\"},{\"name\":\"crypto_amount\",\"type\":\"long\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"fragment.CollectibleInfo\"},{\"id\":-991587810,\"predicate\":\"inputBusinessBotRecipients\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"existing_chats\",\"type\":\"flags.0?true\"},{\"name\":\"new_chats\",\"type\":\"flags.1?true\"},{\"name\":\"contacts\",\"type\":\"flags.2?true\"},{\"name\":\"non_contacts\",\"type\":\"flags.3?true\"},{\"name\":\"exclude_selected\",\"type\":\"flags.5?true\"},{\"name\":\"users\",\"type\":\"flags.4?Vector\"},{\"name\":\"exclude_users\",\"type\":\"flags.6?Vector\"}],\"type\":\"InputBusinessBotRecipients\"},{\"id\":-1198722189,\"predicate\":\"businessBotRecipients\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"existing_chats\",\"type\":\"flags.0?true\"},{\"name\":\"new_chats\",\"type\":\"flags.1?true\"},{\"name\":\"contacts\",\"type\":\"flags.2?true\"},{\"name\":\"non_contacts\",\"type\":\"flags.3?true\"},{\"name\":\"exclude_selected\",\"type\":\"flags.5?true\"},{\"name\":\"users\",\"type\":\"flags.4?Vector\"},{\"name\":\"exclude_users\",\"type\":\"flags.6?Vector\"}],\"type\":\"BusinessBotRecipients\"},{\"id\":496600883,\"predicate\":\"contactBirthday\",\"params\":[{\"name\":\"contact_id\",\"type\":\"long\"},{\"name\":\"birthday\",\"type\":\"Birthday\"}],\"type\":\"ContactBirthday\"},{\"id\":290452237,\"predicate\":\"contacts.contactBirthdays\",\"params\":[{\"name\":\"contacts\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.ContactBirthdays\"},{\"id\":-698740276,\"predicate\":\"inputPrivacyKeyBirthday\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":536913176,\"predicate\":\"privacyKeyBirthday\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":2009975281,\"predicate\":\"inputPrivacyValueAllowPremium\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":-320241333,\"predicate\":\"privacyValueAllowPremium\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":1653379620,\"predicate\":\"missingInvitee\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"premium_would_allow_invite\",\"type\":\"flags.0?true\"},{\"name\":\"premium_required_for_pm\",\"type\":\"flags.1?true\"},{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"MissingInvitee\"},{\"id\":2136862630,\"predicate\":\"messages.invitedUsers\",\"params\":[{\"name\":\"updates\",\"type\":\"Updates\"},{\"name\":\"missing_invitees\",\"type\":\"Vector\"}],\"type\":\"messages.InvitedUsers\"},{\"id\":292003751,\"predicate\":\"inputBusinessChatLink\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.0?Vector\"},{\"name\":\"title\",\"type\":\"flags.1?string\"}],\"type\":\"InputBusinessChatLink\"},{\"id\":-1263638929,\"predicate\":\"businessChatLink\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.0?Vector\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"views\",\"type\":\"int\"}],\"type\":\"BusinessChatLink\"},{\"id\":-331111727,\"predicate\":\"account.businessChatLinks\",\"params\":[{\"name\":\"links\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"account.BusinessChatLinks\"},{\"id\":-1708937439,\"predicate\":\"account.resolvedBusinessChatLinks\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.0?Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"account.ResolvedBusinessChatLinks\"},{\"id\":-701500310,\"predicate\":\"requestedPeerUser\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"first_name\",\"type\":\"flags.0?string\"},{\"name\":\"last_name\",\"type\":\"flags.0?string\"},{\"name\":\"username\",\"type\":\"flags.1?string\"},{\"name\":\"photo\",\"type\":\"flags.2?Photo\"}],\"type\":\"RequestedPeer\"},{\"id\":1929860175,\"predicate\":\"requestedPeerChat\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"photo\",\"type\":\"flags.2?Photo\"}],\"type\":\"RequestedPeer\"},{\"id\":-1952185372,\"predicate\":\"requestedPeerChannel\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"username\",\"type\":\"flags.1?string\"},{\"name\":\"photo\",\"type\":\"flags.2?Photo\"}],\"type\":\"RequestedPeer\"},{\"id\":-1816979384,\"predicate\":\"messageActionRequestedPeerSentMe\",\"params\":[{\"name\":\"button_id\",\"type\":\"int\"},{\"name\":\"peers\",\"type\":\"Vector\"}],\"type\":\"MessageAction\"},{\"id\":-916050683,\"predicate\":\"inputKeyboardButtonRequestPeer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"name_requested\",\"type\":\"flags.0?true\"},{\"name\":\"username_requested\",\"type\":\"flags.1?true\"},{\"name\":\"photo_requested\",\"type\":\"flags.2?true\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"button_id\",\"type\":\"int\"},{\"name\":\"peer_type\",\"type\":\"RequestPeerType\"},{\"name\":\"max_quantity\",\"type\":\"int\"}],\"type\":\"KeyboardButton\"},{\"id\":1124938064,\"predicate\":\"sponsoredMessageReportOption\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"option\",\"type\":\"bytes\"}],\"type\":\"SponsoredMessageReportOption\"},{\"id\":-2073059774,\"predicate\":\"channels.sponsoredMessageReportResultChooseOption\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"options\",\"type\":\"Vector\"}],\"type\":\"channels.SponsoredMessageReportResult\"},{\"id\":1044107055,\"predicate\":\"channels.sponsoredMessageReportResultAdsHidden\",\"params\":[],\"type\":\"channels.SponsoredMessageReportResult\"},{\"id\":-1384544183,\"predicate\":\"channels.sponsoredMessageReportResultReported\",\"params\":[],\"type\":\"channels.SponsoredMessageReportResult\"},{\"id\":1409802903,\"predicate\":\"stats.broadcastRevenueStats\",\"params\":[{\"name\":\"top_hours_graph\",\"type\":\"StatsGraph\"},{\"name\":\"revenue_graph\",\"type\":\"StatsGraph\"},{\"name\":\"balances\",\"type\":\"BroadcastRevenueBalances\"},{\"name\":\"usd_rate\",\"type\":\"double\"}],\"type\":\"stats.BroadcastRevenueStats\"},{\"id\":-328886473,\"predicate\":\"stats.broadcastRevenueWithdrawalUrl\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"stats.BroadcastRevenueWithdrawalUrl\"},{\"id\":1434332356,\"predicate\":\"broadcastRevenueTransactionProceeds\",\"params\":[{\"name\":\"amount\",\"type\":\"long\"},{\"name\":\"from_date\",\"type\":\"int\"},{\"name\":\"to_date\",\"type\":\"int\"}],\"type\":\"BroadcastRevenueTransaction\"},{\"id\":1515784568,\"predicate\":\"broadcastRevenueTransactionWithdrawal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pending\",\"type\":\"flags.0?true\"},{\"name\":\"failed\",\"type\":\"flags.2?true\"},{\"name\":\"amount\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"transaction_date\",\"type\":\"flags.1?int\"},{\"name\":\"transaction_url\",\"type\":\"flags.1?string\"}],\"type\":\"BroadcastRevenueTransaction\"},{\"id\":1121127726,\"predicate\":\"broadcastRevenueTransactionRefund\",\"params\":[{\"name\":\"amount\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"provider\",\"type\":\"string\"}],\"type\":\"BroadcastRevenueTransaction\"},{\"id\":-2028632986,\"predicate\":\"stats.broadcastRevenueTransactions\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"transactions\",\"type\":\"Vector\"}],\"type\":\"stats.BroadcastRevenueTransactions\"},{\"id\":1355547603,\"predicate\":\"webPageAttributeStickerSet\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"emojis\",\"type\":\"flags.0?true\"},{\"name\":\"text_color\",\"type\":\"flags.1?true\"},{\"name\":\"stickers\",\"type\":\"Vector\"}],\"type\":\"WebPageAttribute\"},{\"id\":-1161583078,\"predicate\":\"reactionNotificationsFromContacts\",\"params\":[],\"type\":\"ReactionNotificationsFrom\"},{\"id\":1268654752,\"predicate\":\"reactionNotificationsFromAll\",\"params\":[],\"type\":\"ReactionNotificationsFrom\"},{\"id\":1457736048,\"predicate\":\"reactionsNotifySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"messages_notify_from\",\"type\":\"flags.0?ReactionNotificationsFrom\"},{\"name\":\"stories_notify_from\",\"type\":\"flags.1?ReactionNotificationsFrom\"},{\"name\":\"sound\",\"type\":\"NotificationSound\"},{\"name\":\"show_previews\",\"type\":\"Bool\"}],\"type\":\"ReactionsNotifySettings\"},{\"id\":405070859,\"predicate\":\"updateNewStoryReaction\",\"params\":[{\"name\":\"story_id\",\"type\":\"int\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"reaction\",\"type\":\"Reaction\"}],\"type\":\"Update\"},{\"id\":-1542017919,\"predicate\":\"auth.sentCodeTypeSmsWord\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"beginning\",\"type\":\"flags.0?string\"}],\"type\":\"auth.SentCodeType\"},{\"id\":-1284008785,\"predicate\":\"auth.sentCodeTypeSmsPhrase\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"beginning\",\"type\":\"flags.0?string\"}],\"type\":\"auth.SentCodeType\"},{\"id\":-2133693241,\"predicate\":\"emojiGroupGreeting\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"icon_emoji_id\",\"type\":\"long\"},{\"name\":\"emoticons\",\"type\":\"Vector\"}],\"type\":\"EmojiGroup\"},{\"id\":154914612,\"predicate\":\"emojiGroupPremium\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"icon_emoji_id\",\"type\":\"long\"}],\"type\":\"EmojiGroup\"},{\"id\":-2076642874,\"predicate\":\"broadcastRevenueBalances\",\"params\":[{\"name\":\"current_balance\",\"type\":\"long\"},{\"name\":\"available_balance\",\"type\":\"long\"},{\"name\":\"overall_revenue\",\"type\":\"long\"}],\"type\":\"BroadcastRevenueBalances\"},{\"id\":-539401739,\"predicate\":\"updateBroadcastRevenueTransactions\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"balances\",\"type\":\"BroadcastRevenueBalances\"}],\"type\":\"Update\"},{\"id\":-1815879042,\"predicate\":\"availableEffect\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"premium_required\",\"type\":\"flags.2?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"static_icon_id\",\"type\":\"flags.0?long\"},{\"name\":\"effect_sticker_id\",\"type\":\"long\"},{\"name\":\"effect_animation_id\",\"type\":\"flags.1?long\"}],\"type\":\"AvailableEffect\"},{\"id\":-772957605,\"predicate\":\"messages.availableEffectsNotModified\",\"params\":[],\"type\":\"messages.AvailableEffects\"},{\"id\":-1109696146,\"predicate\":\"messages.availableEffects\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"effects\",\"type\":\"Vector\"},{\"name\":\"documents\",\"type\":\"Vector\"}],\"type\":\"messages.AvailableEffects\"},{\"id\":-1197736753,\"predicate\":\"factCheck\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"need_check\",\"type\":\"flags.0?true\"},{\"name\":\"country\",\"type\":\"flags.1?string\"},{\"name\":\"text\",\"type\":\"flags.1?TextWithEntities\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"FactCheck\"},{\"id\":-1779253276,\"predicate\":\"starsTransactionPeerUnsupported\",\"params\":[],\"type\":\"StarsTransactionPeer\"},{\"id\":-1269320843,\"predicate\":\"starsTransactionPeerAppStore\",\"params\":[],\"type\":\"StarsTransactionPeer\"},{\"id\":2069236235,\"predicate\":\"starsTransactionPeerPlayMarket\",\"params\":[],\"type\":\"StarsTransactionPeer\"},{\"id\":621656824,\"predicate\":\"starsTransactionPeerPremiumBot\",\"params\":[],\"type\":\"StarsTransactionPeer\"},{\"id\":-382740222,\"predicate\":\"starsTransactionPeerFragment\",\"params\":[],\"type\":\"StarsTransactionPeer\"},{\"id\":-670195363,\"predicate\":\"starsTransactionPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"StarsTransactionPeer\"},{\"id\":1326377183,\"predicate\":\"inputStorePaymentStars\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"stars\",\"type\":\"long\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"}],\"type\":\"InputStorePaymentPurpose\"},{\"id\":198776256,\"predicate\":\"starsTopupOption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"extended\",\"type\":\"flags.1?true\"},{\"name\":\"stars\",\"type\":\"long\"},{\"name\":\"store_product\",\"type\":\"flags.0?string\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"}],\"type\":\"StarsTopupOption\"},{\"id\":497236696,\"predicate\":\"inputInvoiceStars\",\"params\":[{\"name\":\"option\",\"type\":\"StarsTopupOption\"}],\"type\":\"InputInvoice\"},{\"id\":766853519,\"predicate\":\"starsTransaction\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"refund\",\"type\":\"flags.3?true\"},{\"name\":\"pending\",\"type\":\"flags.4?true\"},{\"name\":\"failed\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"stars\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"peer\",\"type\":\"StarsTransactionPeer\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"description\",\"type\":\"flags.1?string\"},{\"name\":\"photo\",\"type\":\"flags.2?WebDocument\"},{\"name\":\"transaction_date\",\"type\":\"flags.5?int\"},{\"name\":\"transaction_url\",\"type\":\"flags.5?string\"},{\"name\":\"bot_payload\",\"type\":\"flags.7?bytes\"},{\"name\":\"msg_id\",\"type\":\"flags.8?int\"},{\"name\":\"extended_media\",\"type\":\"flags.9?Vector\"}],\"type\":\"StarsTransaction\"},{\"id\":-1930105248,\"predicate\":\"payments.starsStatus\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"balance\",\"type\":\"long\"},{\"name\":\"history\",\"type\":\"Vector\"},{\"name\":\"next_offset\",\"type\":\"flags.0?string\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"payments.StarsStatus\"},{\"id\":263737752,\"predicate\":\"updateStarsBalance\",\"params\":[{\"name\":\"balance\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":2079764828,\"predicate\":\"payments.paymentFormStars\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"form_id\",\"type\":\"long\"},{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.5?WebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"payments.PaymentForm\"},{\"id\":-625215430,\"predicate\":\"payments.paymentReceiptStars\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.2?WebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"transaction_id\",\"type\":\"string\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"payments.PaymentReceipt\"},{\"id\":926421125,\"predicate\":\"mediaAreaUrl\",\"params\":[{\"name\":\"coordinates\",\"type\":\"MediaAreaCoordinates\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"MediaArea\"},{\"id\":-394605632,\"predicate\":\"foundStory\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"story\",\"type\":\"StoryItem\"}],\"type\":\"FoundStory\"},{\"id\":-488736969,\"predicate\":\"stories.foundStories\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"stories\",\"type\":\"Vector\"},{\"name\":\"next_offset\",\"type\":\"flags.0?string\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"stories.FoundStories\"},{\"id\":-565420653,\"predicate\":\"geoPointAddress\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"country_iso2\",\"type\":\"string\"},{\"name\":\"state\",\"type\":\"flags.0?string\"},{\"name\":\"city\",\"type\":\"flags.1?string\"},{\"name\":\"street\",\"type\":\"flags.2?string\"}],\"type\":\"GeoPointAddress\"},{\"id\":513998247,\"predicate\":\"updateBusinessBotCallbackQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"connection_id\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"reply_to_message\",\"type\":\"flags.2?Message\"},{\"name\":\"chat_instance\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"flags.0?bytes\"}],\"type\":\"Update\"},{\"id\":2033461574,\"predicate\":\"starsRevenueStatus\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"withdrawal_enabled\",\"type\":\"flags.0?true\"},{\"name\":\"current_balance\",\"type\":\"long\"},{\"name\":\"available_balance\",\"type\":\"long\"},{\"name\":\"overall_revenue\",\"type\":\"long\"},{\"name\":\"next_withdrawal_at\",\"type\":\"flags.1?int\"}],\"type\":\"StarsRevenueStatus\"},{\"id\":-919881925,\"predicate\":\"payments.starsRevenueStats\",\"params\":[{\"name\":\"revenue_graph\",\"type\":\"StatsGraph\"},{\"name\":\"status\",\"type\":\"StarsRevenueStatus\"},{\"name\":\"usd_rate\",\"type\":\"double\"}],\"type\":\"payments.StarsRevenueStats\"},{\"id\":497778871,\"predicate\":\"payments.starsRevenueWithdrawalUrl\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"payments.StarsRevenueWithdrawalUrl\"},{\"id\":-1518030823,\"predicate\":\"updateStarsRevenueStatus\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"status\",\"type\":\"StarsRevenueStatus\"}],\"type\":\"Update\"},{\"id\":-1436147773,\"predicate\":\"inputMediaPaidMedia\",\"params\":[{\"name\":\"stars_amount\",\"type\":\"long\"},{\"name\":\"extended_media\",\"type\":\"Vector\"}],\"type\":\"InputMedia\"},{\"id\":-1467669359,\"predicate\":\"messageMediaPaidMedia\",\"params\":[{\"name\":\"stars_amount\",\"type\":\"long\"},{\"name\":\"extended_media\",\"type\":\"Vector\"}],\"type\":\"MessageMedia\"},{\"id\":1617438738,\"predicate\":\"starsTransactionPeerAds\",\"params\":[],\"type\":\"StarsTransactionPeer\"},{\"id\":961445665,\"predicate\":\"payments.starsRevenueAdsAccountUrl\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"payments.StarsRevenueAdsAccountUrl\"},{\"id\":543876817,\"predicate\":\"inputStarsTransaction\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"refund\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"string\"}],\"type\":\"InputStarsTransaction\"}],\"methods\":[{\"id\":-878758099,\"method\":\"invokeAfterMsg\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":1036301552,\"method\":\"invokeAfterMsgs\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1502141361,\"method\":\"auth.sendCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":-1429752041,\"method\":\"auth.signUp\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_joined_notifications\",\"type\":\"flags.0?true\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":-1923962543,\"method\":\"auth.signIn\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"flags.0?string\"},{\"name\":\"email_verification\",\"type\":\"flags.1?EmailVerification\"}],\"type\":\"auth.Authorization\"},{\"id\":1047706137,\"method\":\"auth.logOut\",\"params\":[],\"type\":\"auth.LoggedOut\"},{\"id\":-1616179942,\"method\":\"auth.resetAuthorizations\",\"params\":[],\"type\":\"Bool\"},{\"id\":-440401971,\"method\":\"auth.exportAuthorization\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"auth.ExportedAuthorization\"},{\"id\":-1518699091,\"method\":\"auth.importAuthorization\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"auth.Authorization\"},{\"id\":-841733627,\"method\":\"auth.bindTempAuthKey\",\"params\":[{\"name\":\"perm_auth_key_id\",\"type\":\"long\"},{\"name\":\"nonce\",\"type\":\"long\"},{\"name\":\"expires_at\",\"type\":\"int\"},{\"name\":\"encrypted_message\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-326762118,\"method\":\"account.registerDevice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_muted\",\"type\":\"flags.0?true\"},{\"name\":\"token_type\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"app_sandbox\",\"type\":\"Bool\"},{\"name\":\"secret\",\"type\":\"bytes\"},{\"name\":\"other_uids\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":1779249670,\"method\":\"account.unregisterDevice\",\"params\":[{\"name\":\"token_type\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"other_uids\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-2067899501,\"method\":\"account.updateNotifySettings\",\"params\":[{\"name\":\"peer\",\"type\":\"InputNotifyPeer\"},{\"name\":\"settings\",\"type\":\"InputPeerNotifySettings\"}],\"type\":\"Bool\"},{\"id\":313765169,\"method\":\"account.getNotifySettings\",\"params\":[{\"name\":\"peer\",\"type\":\"InputNotifyPeer\"}],\"type\":\"PeerNotifySettings\"},{\"id\":-612493497,\"method\":\"account.resetNotifySettings\",\"params\":[],\"type\":\"Bool\"},{\"id\":2018596725,\"method\":\"account.updateProfile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"first_name\",\"type\":\"flags.0?string\"},{\"name\":\"last_name\",\"type\":\"flags.1?string\"},{\"name\":\"about\",\"type\":\"flags.2?string\"}],\"type\":\"User\"},{\"id\":1713919532,\"method\":\"account.updateStatus\",\"params\":[{\"name\":\"offline\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":127302966,\"method\":\"account.getWallPapers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"account.WallPapers\"},{\"id\":-977650298,\"method\":\"account.reportPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":227648840,\"method\":\"users.getUsers\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-1240508136,\"method\":\"users.getFullUser\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"}],\"type\":\"users.UserFull\"},{\"id\":2061264541,\"method\":\"contacts.getContactIDs\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"Vector\"},{\"id\":-995929106,\"method\":\"contacts.getStatuses\",\"params\":[],\"type\":\"Vector\"},{\"id\":1574346258,\"method\":\"contacts.getContacts\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"contacts.Contacts\"},{\"id\":746589157,\"method\":\"contacts.importContacts\",\"params\":[{\"name\":\"contacts\",\"type\":\"Vector\"}],\"type\":\"contacts.ImportedContacts\"},{\"id\":157945344,\"method\":\"contacts.deleteContacts\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":269745566,\"method\":\"contacts.deleteByPhones\",\"params\":[{\"name\":\"phones\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":774801204,\"method\":\"contacts.block\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"my_stories_from\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-1252994264,\"method\":\"contacts.unblock\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"my_stories_from\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-1702457472,\"method\":\"contacts.getBlocked\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"my_stories_from\",\"type\":\"flags.0?true\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"contacts.Blocked\"},{\"id\":1673946374,\"method\":\"messages.getMessages\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":-1594569905,\"method\":\"messages.getDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_pinned\",\"type\":\"flags.0?true\"},{\"name\":\"folder_id\",\"type\":\"flags.1?int\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_peer\",\"type\":\"InputPeer\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Dialogs\"},{\"id\":1143203525,\"method\":\"messages.getHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Messages\"},{\"id\":703497338,\"method\":\"messages.search\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"from_id\",\"type\":\"flags.0?InputPeer\"},{\"name\":\"saved_peer_id\",\"type\":\"flags.2?InputPeer\"},{\"name\":\"saved_reaction\",\"type\":\"flags.3?Vector\"},{\"name\":\"top_msg_id\",\"type\":\"flags.1?int\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Messages\"},{\"id\":238054714,\"method\":\"messages.readHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":-1332768214,\"method\":\"messages.deleteHistory\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"just_clear\",\"type\":\"flags.0?true\"},{\"name\":\"revoke\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_date\",\"type\":\"flags.2?int\"},{\"name\":\"max_date\",\"type\":\"flags.3?int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":-443640366,\"method\":\"messages.deleteMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":94983360,\"method\":\"messages.receivedMessages\",\"params\":[{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Vector\"},{\"id\":1486110434,\"method\":\"messages.setTyping\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Bool\"},{\"id\":-1740662971,\"method\":\"messages.sendMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"noforwards\",\"type\":\"flags.14?true\"},{\"name\":\"update_stickersets_order\",\"type\":\"flags.15?true\"},{\"name\":\"invert_media\",\"type\":\"flags.16?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to\",\"type\":\"flags.0?InputReplyTo\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"},{\"name\":\"send_as\",\"type\":\"flags.13?InputPeer\"},{\"name\":\"quick_reply_shortcut\",\"type\":\"flags.17?InputQuickReplyShortcut\"},{\"name\":\"effect\",\"type\":\"flags.18?long\"}],\"type\":\"Updates\"},{\"id\":2018673486,\"method\":\"messages.sendMedia\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"noforwards\",\"type\":\"flags.14?true\"},{\"name\":\"update_stickersets_order\",\"type\":\"flags.15?true\"},{\"name\":\"invert_media\",\"type\":\"flags.16?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to\",\"type\":\"flags.0?InputReplyTo\"},{\"name\":\"media\",\"type\":\"InputMedia\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"},{\"name\":\"send_as\",\"type\":\"flags.13?InputPeer\"},{\"name\":\"quick_reply_shortcut\",\"type\":\"flags.17?InputQuickReplyShortcut\"},{\"name\":\"effect\",\"type\":\"flags.18?long\"}],\"type\":\"Updates\"},{\"id\":-721186296,\"method\":\"messages.forwardMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"with_my_score\",\"type\":\"flags.8?true\"},{\"name\":\"drop_author\",\"type\":\"flags.11?true\"},{\"name\":\"drop_media_captions\",\"type\":\"flags.12?true\"},{\"name\":\"noforwards\",\"type\":\"flags.14?true\"},{\"name\":\"from_peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"},{\"name\":\"random_id\",\"type\":\"Vector\"},{\"name\":\"to_peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.9?int\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"},{\"name\":\"send_as\",\"type\":\"flags.13?InputPeer\"},{\"name\":\"quick_reply_shortcut\",\"type\":\"flags.17?InputQuickReplyShortcut\"}],\"type\":\"Updates\"},{\"id\":-820669733,\"method\":\"messages.reportSpam\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-270948702,\"method\":\"messages.getPeerSettings\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.PeerSettings\"},{\"id\":-1991005362,\"method\":\"messages.report\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1240027791,\"method\":\"messages.getChats\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":-1364194508,\"method\":\"messages.getFullChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"messages.ChatFull\"},{\"id\":1937260541,\"method\":\"messages.editChatTitle\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":903730804,\"method\":\"messages.editChatPhoto\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"photo\",\"type\":\"InputChatPhoto\"}],\"type\":\"Updates\"},{\"id\":-876162809,\"method\":\"messages.addChatUser\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"fwd_limit\",\"type\":\"int\"}],\"type\":\"messages.InvitedUsers\"},{\"id\":-1575461717,\"method\":\"messages.deleteChatUser\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke_history\",\"type\":\"flags.0?true\"},{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"Updates\"},{\"id\":-1831936556,\"method\":\"messages.createChat\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"ttl_period\",\"type\":\"flags.0?int\"}],\"type\":\"messages.InvitedUsers\"},{\"id\":-304838614,\"method\":\"updates.getState\",\"params\":[],\"type\":\"updates.State\"},{\"id\":432207715,\"method\":\"updates.getDifference\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_limit\",\"type\":\"flags.1?int\"},{\"name\":\"pts_total_limit\",\"type\":\"flags.0?int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"qts\",\"type\":\"int\"},{\"name\":\"qts_limit\",\"type\":\"flags.2?int\"}],\"type\":\"updates.Difference\"},{\"id\":166207545,\"method\":\"photos.updateProfilePhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"fallback\",\"type\":\"flags.0?true\"},{\"name\":\"bot\",\"type\":\"flags.1?InputUser\"},{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"photos.Photo\"},{\"id\":59286453,\"method\":\"photos.uploadProfilePhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"fallback\",\"type\":\"flags.3?true\"},{\"name\":\"bot\",\"type\":\"flags.5?InputUser\"},{\"name\":\"file\",\"type\":\"flags.0?InputFile\"},{\"name\":\"video\",\"type\":\"flags.1?InputFile\"},{\"name\":\"video_start_ts\",\"type\":\"flags.2?double\"},{\"name\":\"video_emoji_markup\",\"type\":\"flags.4?VideoSize\"}],\"type\":\"photos.Photo\"},{\"id\":-2016444625,\"method\":\"photos.deletePhotos\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-1291540959,\"method\":\"upload.saveFilePart\",\"params\":[{\"name\":\"file_id\",\"type\":\"long\"},{\"name\":\"file_part\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-1101843010,\"method\":\"upload.getFile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"precise\",\"type\":\"flags.0?true\"},{\"name\":\"cdn_supported\",\"type\":\"flags.1?true\"},{\"name\":\"location\",\"type\":\"InputFileLocation\"},{\"name\":\"offset\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.File\"},{\"id\":-990308245,\"method\":\"help.getConfig\",\"params\":[],\"type\":\"Config\"},{\"id\":531836966,\"method\":\"help.getNearestDc\",\"params\":[],\"type\":\"NearestDc\"},{\"id\":1378703997,\"method\":\"help.getAppUpdate\",\"params\":[{\"name\":\"source\",\"type\":\"string\"}],\"type\":\"help.AppUpdate\"},{\"id\":1295590211,\"method\":\"help.getInviteText\",\"params\":[],\"type\":\"help.InviteText\"},{\"id\":-1848823128,\"method\":\"photos.getUserPhotos\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"photos.Photos\"},{\"id\":651135312,\"method\":\"messages.getDhConfig\",\"params\":[{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"random_length\",\"type\":\"int\"}],\"type\":\"messages.DhConfig\"},{\"id\":-162681021,\"method\":\"messages.requestEncryption\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"random_id\",\"type\":\"int\"},{\"name\":\"g_a\",\"type\":\"bytes\"}],\"type\":\"EncryptedChat\"},{\"id\":1035731989,\"method\":\"messages.acceptEncryption\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"g_b\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"}],\"type\":\"EncryptedChat\"},{\"id\":-208425312,\"method\":\"messages.discardEncryption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"delete_history\",\"type\":\"flags.0?true\"},{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":2031374829,\"method\":\"messages.setEncryptedTyping\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"typing\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":2135648522,\"method\":\"messages.readEncryptedHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"max_date\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":1157265941,\"method\":\"messages.sendEncrypted\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":1431914525,\"method\":\"messages.sendEncryptedFile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"file\",\"type\":\"InputEncryptedFile\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":852769188,\"method\":\"messages.sendEncryptedService\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":1436924774,\"method\":\"messages.receivedQueue\",\"params\":[{\"name\":\"max_qts\",\"type\":\"int\"}],\"type\":\"Vector\"},{\"id\":1259113487,\"method\":\"messages.reportEncryptedSpam\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"}],\"type\":\"Bool\"},{\"id\":-562337987,\"method\":\"upload.saveBigFilePart\",\"params\":[{\"name\":\"file_id\",\"type\":\"long\"},{\"name\":\"file_part\",\"type\":\"int\"},{\"name\":\"file_total_parts\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-1043505495,\"method\":\"initConnection\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"device_model\",\"type\":\"string\"},{\"name\":\"system_version\",\"type\":\"string\"},{\"name\":\"app_version\",\"type\":\"string\"},{\"name\":\"system_lang_code\",\"type\":\"string\"},{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"proxy\",\"type\":\"flags.0?InputClientProxy\"},{\"name\":\"params\",\"type\":\"flags.1?JSONValue\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1663104819,\"method\":\"help.getSupport\",\"params\":[],\"type\":\"help.Support\"},{\"id\":916930423,\"method\":\"messages.readMessageContents\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":655677548,\"method\":\"account.checkUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1040964988,\"method\":\"account.updateUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"User\"},{\"id\":301470424,\"method\":\"contacts.search\",\"params\":[{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"contacts.Found\"},{\"id\":-623130288,\"method\":\"account.getPrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"InputPrivacyKey\"}],\"type\":\"account.PrivacyRules\"},{\"id\":-906486552,\"method\":\"account.setPrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"InputPrivacyKey\"},{\"name\":\"rules\",\"type\":\"Vector\"}],\"type\":\"account.PrivacyRules\"},{\"id\":-1564422284,\"method\":\"account.deleteAccount\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reason\",\"type\":\"string\"},{\"name\":\"password\",\"type\":\"flags.0?InputCheckPasswordSRP\"}],\"type\":\"Bool\"},{\"id\":150761757,\"method\":\"account.getAccountTTL\",\"params\":[],\"type\":\"AccountDaysTTL\"},{\"id\":608323678,\"method\":\"account.setAccountTTL\",\"params\":[{\"name\":\"ttl\",\"type\":\"AccountDaysTTL\"}],\"type\":\"Bool\"},{\"id\":-627372787,\"method\":\"invokeWithLayer\",\"params\":[{\"name\":\"layer\",\"type\":\"int\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-113456221,\"method\":\"contacts.resolveUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"contacts.ResolvedPeer\"},{\"id\":-2108208411,\"method\":\"account.sendChangePhoneCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":1891839707,\"method\":\"account.changePhone\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"User\"},{\"id\":-710552671,\"method\":\"messages.getStickers\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Stickers\"},{\"id\":-1197432408,\"method\":\"messages.getAllStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.AllStickers\"},{\"id\":954152242,\"method\":\"account.updateDeviceLocked\",\"params\":[{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":1738800940,\"method\":\"auth.importBotAuthorization\",\"params\":[{\"name\":\"flags\",\"type\":\"int\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"bot_auth_token\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":-1956073268,\"method\":\"messages.getWebPagePreview\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"}],\"type\":\"MessageMedia\"},{\"id\":-484392616,\"method\":\"account.getAuthorizations\",\"params\":[],\"type\":\"account.Authorizations\"},{\"id\":-545786948,\"method\":\"account.resetAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":1418342645,\"method\":\"account.getPassword\",\"params\":[],\"type\":\"account.Password\"},{\"id\":-1663767815,\"method\":\"account.getPasswordSettings\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"account.PasswordSettings\"},{\"id\":-1516564433,\"method\":\"account.updatePasswordSettings\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"},{\"name\":\"new_settings\",\"type\":\"account.PasswordInputSettings\"}],\"type\":\"Bool\"},{\"id\":-779399914,\"method\":\"auth.checkPassword\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"auth.Authorization\"},{\"id\":-661144474,\"method\":\"auth.requestPasswordRecovery\",\"params\":[],\"type\":\"auth.PasswordRecovery\"},{\"id\":923364464,\"method\":\"auth.recoverPassword\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"code\",\"type\":\"string\"},{\"name\":\"new_settings\",\"type\":\"flags.0?account.PasswordInputSettings\"}],\"type\":\"auth.Authorization\"},{\"id\":-1080796745,\"method\":\"invokeWithoutUpdates\",\"params\":[{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1607670315,\"method\":\"messages.exportChatInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"legacy_revoke_permanent\",\"type\":\"flags.2?true\"},{\"name\":\"request_needed\",\"type\":\"flags.3?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"expire_date\",\"type\":\"flags.0?int\"},{\"name\":\"usage_limit\",\"type\":\"flags.1?int\"},{\"name\":\"title\",\"type\":\"flags.4?string\"}],\"type\":\"ExportedChatInvite\"},{\"id\":1051570619,\"method\":\"messages.checkChatInvite\",\"params\":[{\"name\":\"hash\",\"type\":\"string\"}],\"type\":\"ChatInvite\"},{\"id\":1817183516,\"method\":\"messages.importChatInvite\",\"params\":[{\"name\":\"hash\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-928977804,\"method\":\"messages.getStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.StickerSet\"},{\"id\":-946871200,\"method\":\"messages.installStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"archived\",\"type\":\"Bool\"}],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":-110209570,\"method\":\"messages.uninstallStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"Bool\"},{\"id\":-421563528,\"method\":\"messages.startBot\",\"params\":[{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"start_param\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":1468322785,\"method\":\"messages.getMessagesViews\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"},{\"name\":\"increment\",\"type\":\"Bool\"}],\"type\":\"messages.MessageViews\"},{\"id\":-871347913,\"method\":\"channels.readHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-2067661490,\"method\":\"channels.deleteMessages\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":-196443371,\"method\":\"channels.reportSpam\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"participant\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1383294429,\"method\":\"channels.getMessages\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":2010044880,\"method\":\"channels.getParticipants\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"filter\",\"type\":\"ChannelParticipantsFilter\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"channels.ChannelParticipants\"},{\"id\":-1599378234,\"method\":\"channels.getParticipant\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"participant\",\"type\":\"InputPeer\"}],\"type\":\"channels.ChannelParticipant\"},{\"id\":176122811,\"method\":\"channels.getChannels\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":141781513,\"method\":\"channels.getFullChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"messages.ChatFull\"},{\"id\":-1862244601,\"method\":\"channels.createChannel\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"broadcast\",\"type\":\"flags.0?true\"},{\"name\":\"megagroup\",\"type\":\"flags.1?true\"},{\"name\":\"for_import\",\"type\":\"flags.3?true\"},{\"name\":\"forum\",\"type\":\"flags.5?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"geo_point\",\"type\":\"flags.2?InputGeoPoint\"},{\"name\":\"address\",\"type\":\"flags.2?string\"},{\"name\":\"ttl_period\",\"type\":\"flags.4?int\"}],\"type\":\"Updates\"},{\"id\":-751007486,\"method\":\"channels.editAdmin\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":1450044624,\"method\":\"channels.editTitle\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-248621111,\"method\":\"channels.editPhoto\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"photo\",\"type\":\"InputChatPhoto\"}],\"type\":\"Updates\"},{\"id\":283557164,\"method\":\"channels.checkUsername\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":890549214,\"method\":\"channels.updateUsername\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":615851205,\"method\":\"channels.joinChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":-130635115,\"method\":\"channels.leaveChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":-907854508,\"method\":\"channels.inviteToChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.InvitedUsers\"},{\"id\":-1072619549,\"method\":\"channels.deleteChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":51854712,\"method\":\"updates.getChannelDifference\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"force\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"filter\",\"type\":\"ChannelMessagesFilter\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":-1470377534,\"method\":\"messages.editChatAdmin\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"is_admin\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-1568189671,\"method\":\"messages.migrateChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"Updates\"},{\"id\":1271290010,\"method\":\"messages.searchGlobal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"broadcasts_only\",\"type\":\"flags.1?true\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"},{\"name\":\"offset_rate\",\"type\":\"int\"},{\"name\":\"offset_peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":2016638777,\"method\":\"messages.reorderStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"emojis\",\"type\":\"flags.1?true\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1309538785,\"method\":\"messages.getDocumentByHash\",\"params\":[{\"name\":\"sha256\",\"type\":\"bytes\"},{\"name\":\"size\",\"type\":\"long\"},{\"name\":\"mime_type\",\"type\":\"string\"}],\"type\":\"Document\"},{\"id\":1559270965,\"method\":\"messages.getSavedGifs\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.SavedGifs\"},{\"id\":846868683,\"method\":\"messages.saveGif\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":1364105629,\"method\":\"messages.getInlineBotResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"geo_point\",\"type\":\"flags.0?InputGeoPoint\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"offset\",\"type\":\"string\"}],\"type\":\"messages.BotResults\"},{\"id\":-1156406247,\"method\":\"messages.setInlineBotResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"gallery\",\"type\":\"flags.0?true\"},{\"name\":\"private\",\"type\":\"flags.1?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"results\",\"type\":\"Vector\"},{\"name\":\"cache_time\",\"type\":\"int\"},{\"name\":\"next_offset\",\"type\":\"flags.2?string\"},{\"name\":\"switch_pm\",\"type\":\"flags.3?InlineBotSwitchPM\"},{\"name\":\"switch_webview\",\"type\":\"flags.4?InlineBotWebView\"}],\"type\":\"Bool\"},{\"id\":1052698730,\"method\":\"messages.sendInlineBotResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"hide_via\",\"type\":\"flags.11?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to\",\"type\":\"flags.0?InputReplyTo\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"},{\"name\":\"send_as\",\"type\":\"flags.13?InputPeer\"},{\"name\":\"quick_reply_shortcut\",\"type\":\"flags.17?InputQuickReplyShortcut\"}],\"type\":\"Updates\"},{\"id\":-432034325,\"method\":\"channels.exportMessageLink\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"grouped\",\"type\":\"flags.0?true\"},{\"name\":\"thread\",\"type\":\"flags.1?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"ExportedMessageLink\"},{\"id\":527021574,\"method\":\"channels.toggleSignatures\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":-890997469,\"method\":\"auth.resendCode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"reason\",\"type\":\"flags.0?string\"}],\"type\":\"auth.SentCode\"},{\"id\":520357240,\"method\":\"auth.cancelCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-39416522,\"method\":\"messages.getMessageEditData\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"messages.MessageEditData\"},{\"id\":-539934715,\"method\":\"messages.editMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"invert_media\",\"type\":\"flags.16?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"flags.11?string\"},{\"name\":\"media\",\"type\":\"flags.14?InputMedia\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"},{\"name\":\"schedule_date\",\"type\":\"flags.15?int\"},{\"name\":\"quick_reply_shortcut_id\",\"type\":\"flags.17?int\"}],\"type\":\"Updates\"},{\"id\":-2091549254,\"method\":\"messages.editInlineBotMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"invert_media\",\"type\":\"flags.16?true\"},{\"name\":\"id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"message\",\"type\":\"flags.11?string\"},{\"name\":\"media\",\"type\":\"flags.14?InputMedia\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"}],\"type\":\"Bool\"},{\"id\":-1824339449,\"method\":\"messages.getBotCallbackAnswer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"game\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"data\",\"type\":\"flags.0?bytes\"},{\"name\":\"password\",\"type\":\"flags.2?InputCheckPasswordSRP\"}],\"type\":\"messages.BotCallbackAnswer\"},{\"id\":-712043766,\"method\":\"messages.setBotCallbackAnswer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"alert\",\"type\":\"flags.1?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"message\",\"type\":\"flags.0?string\"},{\"name\":\"url\",\"type\":\"flags.2?string\"},{\"name\":\"cache_time\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-1758168906,\"method\":\"contacts.getTopPeers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"correspondents\",\"type\":\"flags.0?true\"},{\"name\":\"bots_pm\",\"type\":\"flags.1?true\"},{\"name\":\"bots_inline\",\"type\":\"flags.2?true\"},{\"name\":\"phone_calls\",\"type\":\"flags.3?true\"},{\"name\":\"forward_users\",\"type\":\"flags.4?true\"},{\"name\":\"forward_chats\",\"type\":\"flags.5?true\"},{\"name\":\"groups\",\"type\":\"flags.10?true\"},{\"name\":\"channels\",\"type\":\"flags.15?true\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"contacts.TopPeers\"},{\"id\":451113900,\"method\":\"contacts.resetTopPeerRating\",\"params\":[{\"name\":\"category\",\"type\":\"TopPeerCategory\"},{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-462373635,\"method\":\"messages.getPeerDialogs\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector\"}],\"type\":\"messages.PeerDialogs\"},{\"id\":-747452978,\"method\":\"messages.saveDraft\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"invert_media\",\"type\":\"flags.6?true\"},{\"name\":\"reply_to\",\"type\":\"flags.4?InputReplyTo\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"},{\"name\":\"media\",\"type\":\"flags.5?InputMedia\"},{\"name\":\"effect\",\"type\":\"flags.7?long\"}],\"type\":\"Bool\"},{\"id\":1782549861,\"method\":\"messages.getAllDrafts\",\"params\":[],\"type\":\"Updates\"},{\"id\":1685588756,\"method\":\"messages.getFeaturedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":1527873830,\"method\":\"messages.readFeaturedStickers\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1649852357,\"method\":\"messages.getRecentStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attached\",\"type\":\"flags.0?true\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.RecentStickers\"},{\"id\":958863608,\"method\":\"messages.saveRecentSticker\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attached\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-1986437075,\"method\":\"messages.clearRecentStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attached\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":1475442322,\"method\":\"messages.getArchivedStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"emojis\",\"type\":\"flags.1?true\"},{\"name\":\"offset_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ArchivedStickers\"},{\"id\":457157256,\"method\":\"account.sendConfirmPhoneCode\",\"params\":[{\"name\":\"hash\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":1596029123,\"method\":\"account.confirmPhone\",\"params\":[{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-122669393,\"method\":\"channels.getAdminedPublicChannels\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"by_location\",\"type\":\"flags.0?true\"},{\"name\":\"check_limit\",\"type\":\"flags.1?true\"},{\"name\":\"for_personal\",\"type\":\"flags.2?true\"}],\"type\":\"messages.Chats\"},{\"id\":1678738104,\"method\":\"messages.getMaskStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.AllStickers\"},{\"id\":-866424884,\"method\":\"messages.getAttachedStickers\",\"params\":[{\"name\":\"media\",\"type\":\"InputStickeredMedia\"}],\"type\":\"Vector\"},{\"id\":-1907842680,\"method\":\"auth.dropTempAuthKeys\",\"params\":[{\"name\":\"except_auth_keys\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1896289088,\"method\":\"messages.setGameScore\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"edit_message\",\"type\":\"flags.0?true\"},{\"name\":\"force\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":363700068,\"method\":\"messages.setInlineGameScore\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"edit_message\",\"type\":\"flags.0?true\"},{\"name\":\"force\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-400399203,\"method\":\"messages.getGameHighScores\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"messages.HighScores\"},{\"id\":258170395,\"method\":\"messages.getInlineGameHighScores\",\"params\":[{\"name\":\"id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"messages.HighScores\"},{\"id\":-468934396,\"method\":\"messages.getCommonChats\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"max_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Chats\"},{\"id\":-333262899,\"method\":\"help.setBotUpdatesStatus\",\"params\":[{\"name\":\"pending_updates_count\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-1919511901,\"method\":\"messages.getWebPage\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.WebPage\"},{\"id\":-1489903017,\"method\":\"messages.toggleDialogPin\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputDialogPeer\"}],\"type\":\"Bool\"},{\"id\":991616823,\"method\":\"messages.reorderPinnedDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"force\",\"type\":\"flags.0?true\"},{\"name\":\"folder_id\",\"type\":\"int\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-692498958,\"method\":\"messages.getPinnedDialogs\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"messages.PeerDialogs\"},{\"id\":-1440257555,\"method\":\"bots.sendCustomRequest\",\"params\":[{\"name\":\"custom_method\",\"type\":\"string\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"DataJSON\"},{\"id\":-434028723,\"method\":\"bots.answerWebhookJSONQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":619086221,\"method\":\"upload.getWebFile\",\"params\":[{\"name\":\"location\",\"type\":\"InputWebFileLocation\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.WebFile\"},{\"id\":924093883,\"method\":\"payments.getPaymentForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"invoice\",\"type\":\"InputInvoice\"},{\"name\":\"theme_params\",\"type\":\"flags.0?DataJSON\"}],\"type\":\"payments.PaymentForm\"},{\"id\":611897804,\"method\":\"payments.getPaymentReceipt\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"payments.PaymentReceipt\"},{\"id\":-1228345045,\"method\":\"payments.validateRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"save\",\"type\":\"flags.0?true\"},{\"name\":\"invoice\",\"type\":\"InputInvoice\"},{\"name\":\"info\",\"type\":\"PaymentRequestedInfo\"}],\"type\":\"payments.ValidatedRequestedInfo\"},{\"id\":755192367,\"method\":\"payments.sendPaymentForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"form_id\",\"type\":\"long\"},{\"name\":\"invoice\",\"type\":\"InputInvoice\"},{\"name\":\"requested_info_id\",\"type\":\"flags.0?string\"},{\"name\":\"shipping_option_id\",\"type\":\"flags.1?string\"},{\"name\":\"credentials\",\"type\":\"InputPaymentCredentials\"},{\"name\":\"tip_amount\",\"type\":\"flags.2?long\"}],\"type\":\"payments.PaymentResult\"},{\"id\":1151208273,\"method\":\"account.getTmpPassword\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"},{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"account.TmpPassword\"},{\"id\":578650699,\"method\":\"payments.getSavedInfo\",\"params\":[],\"type\":\"payments.SavedInfo\"},{\"id\":-667062079,\"method\":\"payments.clearSavedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"credentials\",\"type\":\"flags.0?true\"},{\"name\":\"info\",\"type\":\"flags.1?true\"}],\"type\":\"Bool\"},{\"id\":-436833542,\"method\":\"messages.setBotShippingResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"error\",\"type\":\"flags.0?string\"},{\"name\":\"shipping_options\",\"type\":\"flags.1?Vector\"}],\"type\":\"Bool\"},{\"id\":163765653,\"method\":\"messages.setBotPrecheckoutResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"success\",\"type\":\"flags.1?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"error\",\"type\":\"flags.0?string\"}],\"type\":\"Bool\"},{\"id\":-1876841625,\"method\":\"stickers.createStickerSet\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"emojis\",\"type\":\"flags.5?true\"},{\"name\":\"text_color\",\"type\":\"flags.6?true\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"thumb\",\"type\":\"flags.2?InputDocument\"},{\"name\":\"stickers\",\"type\":\"Vector\"},{\"name\":\"software\",\"type\":\"flags.3?string\"}],\"type\":\"messages.StickerSet\"},{\"id\":-143257775,\"method\":\"stickers.removeStickerFromSet\",\"params\":[{\"name\":\"sticker\",\"type\":\"InputDocument\"}],\"type\":\"messages.StickerSet\"},{\"id\":-4795190,\"method\":\"stickers.changeStickerPosition\",\"params\":[{\"name\":\"sticker\",\"type\":\"InputDocument\"},{\"name\":\"position\",\"type\":\"int\"}],\"type\":\"messages.StickerSet\"},{\"id\":-2041315650,\"method\":\"stickers.addStickerToSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"sticker\",\"type\":\"InputStickerSetItem\"}],\"type\":\"messages.StickerSet\"},{\"id\":345405816,\"method\":\"messages.uploadMedia\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"business_connection_id\",\"type\":\"flags.0?string\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"media\",\"type\":\"InputMedia\"}],\"type\":\"MessageMedia\"},{\"id\":1430593449,\"method\":\"phone.getCallConfig\",\"params\":[],\"type\":\"DataJSON\"},{\"id\":1124046573,\"method\":\"phone.requestCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.0?true\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"random_id\",\"type\":\"int\"},{\"name\":\"g_a_hash\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"phone.PhoneCall\"},{\"id\":1003664544,\"method\":\"phone.acceptCall\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"g_b\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"phone.PhoneCall\"},{\"id\":788404002,\"method\":\"phone.confirmCall\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"g_a\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"phone.PhoneCall\"},{\"id\":399855457,\"method\":\"phone.receivedCall\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"}],\"type\":\"Bool\"},{\"id\":-1295269440,\"method\":\"phone.discardCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"duration\",\"type\":\"int\"},{\"name\":\"reason\",\"type\":\"PhoneCallDiscardReason\"},{\"name\":\"connection_id\",\"type\":\"long\"}],\"type\":\"Updates\"},{\"id\":1508562471,\"method\":\"phone.setCallRating\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_initiative\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"rating\",\"type\":\"int\"},{\"name\":\"comment\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":662363518,\"method\":\"phone.saveCallDebug\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"debug\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":962554330,\"method\":\"upload.getCdnFile\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"offset\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.CdnFile\"},{\"id\":-1691921240,\"method\":\"upload.reuploadCdnFile\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"request_token\",\"type\":\"bytes\"}],\"type\":\"Vector\"},{\"id\":1375900482,\"method\":\"help.getCdnConfig\",\"params\":[],\"type\":\"CdnConfig\"},{\"id\":-219008246,\"method\":\"langpack.getLangPack\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"LangPackDifference\"},{\"id\":-269862909,\"method\":\"langpack.getStrings\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"keys\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-845657435,\"method\":\"langpack.getDifference\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"}],\"type\":\"LangPackDifference\"},{\"id\":1120311183,\"method\":\"langpack.getLanguages\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"}],\"type\":\"Vector\"},{\"id\":-1763259007,\"method\":\"channels.editBanned\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"participant\",\"type\":\"InputPeer\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"Updates\"},{\"id\":870184064,\"method\":\"channels.getAdminLog\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"events_filter\",\"type\":\"flags.0?ChannelAdminLogEventsFilter\"},{\"name\":\"admins\",\"type\":\"flags.1?Vector\"},{\"name\":\"max_id\",\"type\":\"long\"},{\"name\":\"min_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"channels.AdminLogResults\"},{\"id\":-1847836879,\"method\":\"upload.getCdnFileHashes\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"offset\",\"type\":\"long\"}],\"type\":\"Vector\"},{\"id\":-1589618665,\"method\":\"messages.sendScreenshotNotification\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to\",\"type\":\"InputReplyTo\"},{\"name\":\"random_id\",\"type\":\"long\"}],\"type\":\"Updates\"},{\"id\":-359881479,\"method\":\"channels.setStickers\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"Bool\"},{\"id\":82946729,\"method\":\"messages.getFavedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.FavedStickers\"},{\"id\":-1174420133,\"method\":\"messages.faveSticker\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unfave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-357180360,\"method\":\"channels.readMessageContents\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-2020263951,\"method\":\"contacts.resetSaved\",\"params\":[],\"type\":\"Bool\"},{\"id\":-251140208,\"method\":\"messages.getUnreadMentions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":-1683319225,\"method\":\"channels.deleteHistory\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"for_everyone\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1036054804,\"method\":\"help.getRecentMeUrls\",\"params\":[{\"name\":\"referer\",\"type\":\"string\"}],\"type\":\"help.RecentMeUrls\"},{\"id\":-356796084,\"method\":\"channels.togglePreHistoryHidden\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":921026381,\"method\":\"messages.readMentions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":1881817312,\"method\":\"messages.getRecentLocations\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Messages\"},{\"id\":934757205,\"method\":\"messages.sendMultiMedia\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"noforwards\",\"type\":\"flags.14?true\"},{\"name\":\"update_stickersets_order\",\"type\":\"flags.15?true\"},{\"name\":\"invert_media\",\"type\":\"flags.16?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to\",\"type\":\"flags.0?InputReplyTo\"},{\"name\":\"multi_media\",\"type\":\"Vector\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"},{\"name\":\"send_as\",\"type\":\"flags.13?InputPeer\"},{\"name\":\"quick_reply_shortcut\",\"type\":\"flags.17?InputQuickReplyShortcut\"},{\"name\":\"effect\",\"type\":\"flags.18?long\"}],\"type\":\"Updates\"},{\"id\":1347929239,\"method\":\"messages.uploadEncryptedFile\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"file\",\"type\":\"InputEncryptedFile\"}],\"type\":\"EncryptedFile\"},{\"id\":405695855,\"method\":\"account.getWebAuthorizations\",\"params\":[],\"type\":\"account.WebAuthorizations\"},{\"id\":755087855,\"method\":\"account.resetWebAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":1747789204,\"method\":\"account.resetWebAuthorizations\",\"params\":[],\"type\":\"Bool\"},{\"id\":896555914,\"method\":\"messages.searchStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_featured\",\"type\":\"flags.0?true\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.FoundStickerSets\"},{\"id\":-1856595926,\"method\":\"upload.getFileHashes\",\"params\":[{\"name\":\"location\",\"type\":\"InputFileLocation\"},{\"name\":\"offset\",\"type\":\"long\"}],\"type\":\"Vector\"},{\"id\":749019089,\"method\":\"help.getTermsOfServiceUpdate\",\"params\":[],\"type\":\"help.TermsOfServiceUpdate\"},{\"id\":-294455398,\"method\":\"help.acceptTermsOfService\",\"params\":[{\"name\":\"id\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":-1299661699,\"method\":\"account.getAllSecureValues\",\"params\":[],\"type\":\"Vector\"},{\"id\":1936088002,\"method\":\"account.getSecureValue\",\"params\":[{\"name\":\"types\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-1986010339,\"method\":\"account.saveSecureValue\",\"params\":[{\"name\":\"value\",\"type\":\"InputSecureValue\"},{\"name\":\"secure_secret_id\",\"type\":\"long\"}],\"type\":\"SecureValue\"},{\"id\":-1199522741,\"method\":\"account.deleteSecureValue\",\"params\":[{\"name\":\"types\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1865902923,\"method\":\"users.setSecureValueErrors\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"},{\"name\":\"errors\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1456907910,\"method\":\"account.getAuthorizationForm\",\"params\":[{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"scope\",\"type\":\"string\"},{\"name\":\"public_key\",\"type\":\"string\"}],\"type\":\"account.AuthorizationForm\"},{\"id\":-202552205,\"method\":\"account.acceptAuthorization\",\"params\":[{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"scope\",\"type\":\"string\"},{\"name\":\"public_key\",\"type\":\"string\"},{\"name\":\"value_hashes\",\"type\":\"Vector\"},{\"name\":\"credentials\",\"type\":\"SecureCredentialsEncrypted\"}],\"type\":\"Bool\"},{\"id\":-1516022023,\"method\":\"account.sendVerifyPhoneCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":1305716726,\"method\":\"account.verifyPhone\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-1730136133,\"method\":\"account.sendVerifyEmailCode\",\"params\":[{\"name\":\"purpose\",\"type\":\"EmailVerifyPurpose\"},{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"account.SentEmailCode\"},{\"id\":53322959,\"method\":\"account.verifyEmail\",\"params\":[{\"name\":\"purpose\",\"type\":\"EmailVerifyPurpose\"},{\"name\":\"verification\",\"type\":\"EmailVerification\"}],\"type\":\"account.EmailVerified\"},{\"id\":1072547679,\"method\":\"help.getDeepLinkInfo\",\"params\":[{\"name\":\"path\",\"type\":\"string\"}],\"type\":\"help.DeepLinkInfo\"},{\"id\":-2098076769,\"method\":\"contacts.getSaved\",\"params\":[],\"type\":\"Vector\"},{\"id\":-2092831552,\"method\":\"channels.getLeftChannels\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"messages.Chats\"},{\"id\":-1896617296,\"method\":\"account.initTakeoutSession\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"contacts\",\"type\":\"flags.0?true\"},{\"name\":\"message_users\",\"type\":\"flags.1?true\"},{\"name\":\"message_chats\",\"type\":\"flags.2?true\"},{\"name\":\"message_megagroups\",\"type\":\"flags.3?true\"},{\"name\":\"message_channels\",\"type\":\"flags.4?true\"},{\"name\":\"files\",\"type\":\"flags.5?true\"},{\"name\":\"file_max_size\",\"type\":\"flags.5?long\"}],\"type\":\"account.Takeout\"},{\"id\":489050862,\"method\":\"account.finishTakeoutSession\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"success\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":486505992,\"method\":\"messages.getSplitRanges\",\"params\":[],\"type\":\"Vector\"},{\"id\":911373810,\"method\":\"invokeWithMessagesRange\",\"params\":[{\"name\":\"range\",\"type\":\"MessageRange\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1398145746,\"method\":\"invokeWithTakeout\",\"params\":[{\"name\":\"takeout_id\",\"type\":\"long\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1031349873,\"method\":\"messages.markDialogUnread\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"unread\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputDialogPeer\"}],\"type\":\"Bool\"},{\"id\":585256482,\"method\":\"messages.getDialogUnreadMarks\",\"params\":[],\"type\":\"Vector\"},{\"id\":-2062238246,\"method\":\"contacts.toggleTopPeers\",\"params\":[{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":2119757468,\"method\":\"messages.clearAllDrafts\",\"params\":[],\"type\":\"Bool\"},{\"id\":1642330196,\"method\":\"help.getAppConfig\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.AppConfig\"},{\"id\":1862465352,\"method\":\"help.saveAppLog\",\"params\":[{\"name\":\"events\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-966677240,\"method\":\"help.getPassportConfig\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.PassportConfig\"},{\"id\":1784243458,\"method\":\"langpack.getLanguage\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"LangPackLanguage\"},{\"id\":-760547348,\"method\":\"messages.updatePinnedMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.0?true\"},{\"name\":\"unpin\",\"type\":\"flags.1?true\"},{\"name\":\"pm_oneside\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-1881204448,\"method\":\"account.confirmPasswordEmail\",\"params\":[{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":2055154197,\"method\":\"account.resendPasswordEmail\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1043606090,\"method\":\"account.cancelPasswordEmail\",\"params\":[],\"type\":\"Bool\"},{\"id\":-748624084,\"method\":\"help.getSupportName\",\"params\":[],\"type\":\"help.SupportName\"},{\"id\":59377875,\"method\":\"help.getUserInfo\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"help.UserInfo\"},{\"id\":1723407216,\"method\":\"help.editUserInfo\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"}],\"type\":\"help.UserInfo\"},{\"id\":-1626880216,\"method\":\"account.getContactSignUpNotification\",\"params\":[],\"type\":\"Bool\"},{\"id\":-806076575,\"method\":\"account.setContactSignUpNotification\",\"params\":[{\"name\":\"silent\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":1398240377,\"method\":\"account.getNotifyExceptions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"compare_sound\",\"type\":\"flags.1?true\"},{\"name\":\"compare_stories\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"flags.0?InputNotifyPeer\"}],\"type\":\"Updates\"},{\"id\":283795844,\"method\":\"messages.sendVote\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"options\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":1941660731,\"method\":\"messages.getPollResults\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1848369232,\"method\":\"messages.getOnlines\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"ChatOnlines\"},{\"id\":-554301545,\"method\":\"messages.editChatAbout\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"about\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-1517917375,\"method\":\"messages.editChatDefaultBannedRights\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"Updates\"},{\"id\":-57811990,\"method\":\"account.getWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"}],\"type\":\"WallPaper\"},{\"id\":-476410109,\"method\":\"account.uploadWallPaper\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"for_chat\",\"type\":\"flags.0?true\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"WallPaperSettings\"}],\"type\":\"WallPaper\"},{\"id\":1817860919,\"method\":\"account.saveWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"},{\"name\":\"unsave\",\"type\":\"Bool\"},{\"name\":\"settings\",\"type\":\"WallPaperSettings\"}],\"type\":\"Bool\"},{\"id\":-18000023,\"method\":\"account.installWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"},{\"name\":\"settings\",\"type\":\"WallPaperSettings\"}],\"type\":\"Bool\"},{\"id\":-1153722364,\"method\":\"account.resetWallPapers\",\"params\":[],\"type\":\"Bool\"},{\"id\":1457130303,\"method\":\"account.getAutoDownloadSettings\",\"params\":[],\"type\":\"account.AutoDownloadSettings\"},{\"id\":1995661875,\"method\":\"account.saveAutoDownloadSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"low\",\"type\":\"flags.0?true\"},{\"name\":\"high\",\"type\":\"flags.1?true\"},{\"name\":\"settings\",\"type\":\"AutoDownloadSettings\"}],\"type\":\"Bool\"},{\"id\":899735650,\"method\":\"messages.getEmojiKeywords\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiKeywordsDifference\"},{\"id\":352892591,\"method\":\"messages.getEmojiKeywordsDifference\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"}],\"type\":\"EmojiKeywordsDifference\"},{\"id\":1318675378,\"method\":\"messages.getEmojiKeywordsLanguages\",\"params\":[{\"name\":\"lang_codes\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-709817306,\"method\":\"messages.getEmojiURL\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiURL\"},{\"id\":1749536939,\"method\":\"folders.editPeerFolders\",\"params\":[{\"name\":\"folder_peers\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":465367808,\"method\":\"messages.getSearchCounters\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"saved_peer_id\",\"type\":\"flags.2?InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"filters\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-170208392,\"method\":\"channels.getGroupsForDiscussion\",\"params\":[],\"type\":\"messages.Chats\"},{\"id\":1079520178,\"method\":\"channels.setDiscussionGroup\",\"params\":[{\"name\":\"broadcast\",\"type\":\"InputChannel\"},{\"name\":\"group\",\"type\":\"InputChannel\"}],\"type\":\"Bool\"},{\"id\":428848198,\"method\":\"messages.requestUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"flags.1?InputPeer\"},{\"name\":\"msg_id\",\"type\":\"flags.1?int\"},{\"name\":\"button_id\",\"type\":\"flags.1?int\"},{\"name\":\"url\",\"type\":\"flags.2?string\"}],\"type\":\"UrlAuthResult\"},{\"id\":-1322487515,\"method\":\"messages.acceptUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"write_allowed\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"flags.1?InputPeer\"},{\"name\":\"msg_id\",\"type\":\"flags.1?int\"},{\"name\":\"button_id\",\"type\":\"flags.1?int\"},{\"name\":\"url\",\"type\":\"flags.2?string\"}],\"type\":\"UrlAuthResult\"},{\"id\":1336717624,\"method\":\"messages.hidePeerSettingsBar\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-386636848,\"method\":\"contacts.addContact\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"add_phone_privacy_exception\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"InputUser\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-130964977,\"method\":\"contacts.acceptContact\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"}],\"type\":\"Updates\"},{\"id\":-1892102881,\"method\":\"channels.editCreator\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"Updates\"},{\"id\":-750207932,\"method\":\"contacts.getLocated\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"background\",\"type\":\"flags.1?true\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"self_expires\",\"type\":\"flags.0?int\"}],\"type\":\"Updates\"},{\"id\":1491484525,\"method\":\"channels.editLocation\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"address\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-304832784,\"method\":\"channels.toggleSlowMode\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"seconds\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-183077365,\"method\":\"messages.getScheduledHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Messages\"},{\"id\":-1111817116,\"method\":\"messages.getScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":-1120369398,\"method\":\"messages.sendScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":1504586518,\"method\":\"messages.deleteScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":473805619,\"method\":\"account.uploadTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"thumb\",\"type\":\"flags.0?InputFile\"},{\"name\":\"file_name\",\"type\":\"string\"},{\"name\":\"mime_type\",\"type\":\"string\"}],\"type\":\"Document\"},{\"id\":1697530880,\"method\":\"account.createTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"document\",\"type\":\"flags.2?InputDocument\"},{\"name\":\"settings\",\"type\":\"flags.3?Vector\"}],\"type\":\"Theme\"},{\"id\":737414348,\"method\":\"account.updateTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"theme\",\"type\":\"InputTheme\"},{\"name\":\"slug\",\"type\":\"flags.0?string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"document\",\"type\":\"flags.2?InputDocument\"},{\"name\":\"settings\",\"type\":\"flags.3?Vector\"}],\"type\":\"Theme\"},{\"id\":-229175188,\"method\":\"account.saveTheme\",\"params\":[{\"name\":\"theme\",\"type\":\"InputTheme\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-953697477,\"method\":\"account.installTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"theme\",\"type\":\"flags.1?InputTheme\"},{\"name\":\"format\",\"type\":\"flags.2?string\"},{\"name\":\"base_theme\",\"type\":\"flags.3?BaseTheme\"}],\"type\":\"Bool\"},{\"id\":978872812,\"method\":\"account.getTheme\",\"params\":[{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"theme\",\"type\":\"InputTheme\"}],\"type\":\"Theme\"},{\"id\":1913054296,\"method\":\"account.getThemes\",\"params\":[{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"account.Themes\"},{\"id\":-1210022402,\"method\":\"auth.exportLoginToken\",\"params\":[{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"except_ids\",\"type\":\"Vector\"}],\"type\":\"auth.LoginToken\"},{\"id\":-1783866140,\"method\":\"auth.importLoginToken\",\"params\":[{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"auth.LoginToken\"},{\"id\":-392909491,\"method\":\"auth.acceptLoginToken\",\"params\":[{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"Authorization\"},{\"id\":-1250643605,\"method\":\"account.setContentSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"sensitive_enabled\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":-1952756306,\"method\":\"account.getContentSettings\",\"params\":[],\"type\":\"account.ContentSettings\"},{\"id\":300429806,\"method\":\"channels.getInactiveChannels\",\"params\":[],\"type\":\"messages.InactiveChats\"},{\"id\":1705865692,\"method\":\"account.getMultiWallPapers\",\"params\":[{\"name\":\"wallpapers\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-1200736242,\"method\":\"messages.getPollVotes\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"option\",\"type\":\"flags.0?bytes\"},{\"name\":\"offset\",\"type\":\"flags.1?string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.VotesList\"},{\"id\":-1257951254,\"method\":\"messages.toggleStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"uninstall\",\"type\":\"flags.0?true\"},{\"name\":\"archive\",\"type\":\"flags.1?true\"},{\"name\":\"unarchive\",\"type\":\"flags.2?true\"},{\"name\":\"stickersets\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":779736953,\"method\":\"payments.getBankCardData\",\"params\":[{\"name\":\"number\",\"type\":\"string\"}],\"type\":\"payments.BankCardData\"},{\"id\":-271283063,\"method\":\"messages.getDialogFilters\",\"params\":[],\"type\":\"messages.DialogFilters\"},{\"id\":-1566780372,\"method\":\"messages.getSuggestedDialogFilters\",\"params\":[],\"type\":\"Vector\"},{\"id\":450142282,\"method\":\"messages.updateDialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"filter\",\"type\":\"flags.0?DialogFilter\"}],\"type\":\"Bool\"},{\"id\":-983318044,\"method\":\"messages.updateDialogFiltersOrder\",\"params\":[{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1421720550,\"method\":\"stats.getBroadcastStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"stats.BroadcastStats\"},{\"id\":1646092192,\"method\":\"stats.loadAsyncGraph\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"x\",\"type\":\"flags.0?long\"}],\"type\":\"StatsGraph\"},{\"id\":-1486204014,\"method\":\"stickers.setStickerSetThumb\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"thumb\",\"type\":\"flags.0?InputDocument\"},{\"name\":\"thumb_document_id\",\"type\":\"flags.1?long\"}],\"type\":\"messages.StickerSet\"},{\"id\":85399130,\"method\":\"bots.setBotCommands\",\"params\":[{\"name\":\"scope\",\"type\":\"BotCommandScope\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"commands\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":2127598753,\"method\":\"messages.getOldFeaturedStickers\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":-1063816159,\"method\":\"help.getPromoData\",\"params\":[],\"type\":\"help.PromoData\"},{\"id\":505748629,\"method\":\"help.hidePromoData\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-8744061,\"method\":\"phone.sendSignalingData\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-589330937,\"method\":\"stats.getMegagroupStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"stats.MegagroupStats\"},{\"id\":-349483786,\"method\":\"account.getGlobalPrivacySettings\",\"params\":[],\"type\":\"GlobalPrivacySettings\"},{\"id\":517647042,\"method\":\"account.setGlobalPrivacySettings\",\"params\":[{\"name\":\"settings\",\"type\":\"GlobalPrivacySettings\"}],\"type\":\"GlobalPrivacySettings\"},{\"id\":-183649631,\"method\":\"help.dismissSuggestion\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"suggestion\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1935116200,\"method\":\"help.getCountriesList\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.CountriesList\"},{\"id\":584962828,\"method\":\"messages.getReplies\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Messages\"},{\"id\":1147761405,\"method\":\"messages.getDiscussionMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"messages.DiscussionMessage\"},{\"id\":-147740172,\"method\":\"messages.readDiscussion\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":698914348,\"method\":\"contacts.blockFromReplies\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"delete_message\",\"type\":\"flags.0?true\"},{\"name\":\"delete_history\",\"type\":\"flags.1?true\"},{\"name\":\"report_spam\",\"type\":\"flags.2?true\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1595212100,\"method\":\"stats.getMessagePublicForwards\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"offset\",\"type\":\"string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"stats.PublicForwards\"},{\"id\":-1226791947,\"method\":\"stats.getMessageStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"stats.MessageStats\"},{\"id\":-299714136,\"method\":\"messages.unpinAllMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":1221445336,\"method\":\"phone.createGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"rtmp_stream\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"random_id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"schedule_date\",\"type\":\"flags.1?int\"}],\"type\":\"Updates\"},{\"id\":-1322057861,\"method\":\"phone.joinGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"muted\",\"type\":\"flags.0?true\"},{\"name\":\"video_stopped\",\"type\":\"flags.2?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"join_as\",\"type\":\"InputPeer\"},{\"name\":\"invite_hash\",\"type\":\"flags.1?string\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"Updates\"},{\"id\":1342404601,\"method\":\"phone.leaveGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"source\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":2067345760,\"method\":\"phone.inviteToGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":2054648117,\"method\":\"phone.discardGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"Updates\"},{\"id\":1958458429,\"method\":\"phone.toggleGroupCallSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reset_invite_hash\",\"type\":\"flags.1?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"join_muted\",\"type\":\"flags.0?Bool\"}],\"type\":\"Updates\"},{\"id\":68699611,\"method\":\"phone.getGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"phone.GroupCall\"},{\"id\":-984033109,\"method\":\"phone.getGroupParticipants\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"ids\",\"type\":\"Vector\"},{\"name\":\"sources\",\"type\":\"Vector\"},{\"name\":\"offset\",\"type\":\"string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"phone.GroupParticipants\"},{\"id\":-1248003721,\"method\":\"phone.checkGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"sources\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":1540419152,\"method\":\"messages.deleteChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":-104078327,\"method\":\"messages.deletePhoneCallHistory\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke\",\"type\":\"flags.0?true\"}],\"type\":\"messages.AffectedFoundMessages\"},{\"id\":1140726259,\"method\":\"messages.checkHistoryImport\",\"params\":[{\"name\":\"import_head\",\"type\":\"string\"}],\"type\":\"messages.HistoryImportParsed\"},{\"id\":873008187,\"method\":\"messages.initHistoryImport\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"media_count\",\"type\":\"int\"}],\"type\":\"messages.HistoryImport\"},{\"id\":713433234,\"method\":\"messages.uploadImportedMedia\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"import_id\",\"type\":\"long\"},{\"name\":\"file_name\",\"type\":\"string\"},{\"name\":\"media\",\"type\":\"InputMedia\"}],\"type\":\"MessageMedia\"},{\"id\":-1271008444,\"method\":\"messages.startHistoryImport\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"import_id\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":-1565154314,\"method\":\"messages.getExportedChatInvites\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoked\",\"type\":\"flags.3?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"admin_id\",\"type\":\"InputUser\"},{\"name\":\"offset_date\",\"type\":\"flags.2?int\"},{\"name\":\"offset_link\",\"type\":\"flags.2?string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ExportedChatInvites\"},{\"id\":1937010524,\"method\":\"messages.getExportedChatInvite\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":-1110823051,\"method\":\"messages.editExportedChatInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoked\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"expire_date\",\"type\":\"flags.0?int\"},{\"name\":\"usage_limit\",\"type\":\"flags.1?int\"},{\"name\":\"request_needed\",\"type\":\"flags.3?Bool\"},{\"name\":\"title\",\"type\":\"flags.4?string\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":1452833749,\"method\":\"messages.deleteRevokedExportedChatInvites\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"admin_id\",\"type\":\"InputUser\"}],\"type\":\"Bool\"},{\"id\":-731601877,\"method\":\"messages.deleteExportedChatInvite\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":958457583,\"method\":\"messages.getAdminsWithInvites\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.ChatAdminsWithInvites\"},{\"id\":-553329330,\"method\":\"messages.getChatInviteImporters\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"requested\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"flags.1?string\"},{\"name\":\"q\",\"type\":\"flags.2?string\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"offset_user\",\"type\":\"InputUser\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ChatInviteImporters\"},{\"id\":-1207017500,\"method\":\"messages.setHistoryTTL\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-91437323,\"method\":\"account.reportProfilePhoto\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"photo_id\",\"type\":\"InputPhoto\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":187239529,\"method\":\"channels.convertToGigagroup\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":1573261059,\"method\":\"messages.checkHistoryImportPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.CheckedHistoryImportPeer\"},{\"id\":-248985848,\"method\":\"phone.toggleGroupCallRecord\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"start\",\"type\":\"flags.0?true\"},{\"name\":\"video\",\"type\":\"flags.2?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"video_portrait\",\"type\":\"flags.2?Bool\"}],\"type\":\"Updates\"},{\"id\":-1524155713,\"method\":\"phone.editGroupCallParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"participant\",\"type\":\"InputPeer\"},{\"name\":\"muted\",\"type\":\"flags.0?Bool\"},{\"name\":\"volume\",\"type\":\"flags.1?int\"},{\"name\":\"raise_hand\",\"type\":\"flags.2?Bool\"},{\"name\":\"video_stopped\",\"type\":\"flags.3?Bool\"},{\"name\":\"video_paused\",\"type\":\"flags.4?Bool\"},{\"name\":\"presentation_paused\",\"type\":\"flags.5?Bool\"}],\"type\":\"Updates\"},{\"id\":480685066,\"method\":\"phone.editGroupCallTitle\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-277077702,\"method\":\"phone.getGroupCallJoinAs\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"phone.JoinAsPeers\"},{\"id\":-425040769,\"method\":\"phone.exportGroupCallInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_self_unmute\",\"type\":\"flags.0?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"phone.ExportedGroupCallInvite\"},{\"id\":563885286,\"method\":\"phone.toggleGroupCallStartSubscription\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"subscribed\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":1451287362,\"method\":\"phone.startScheduledGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"Updates\"},{\"id\":1465786252,\"method\":\"phone.saveDefaultGroupCallJoinAs\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"join_as\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-873829436,\"method\":\"phone.joinGroupCallPresentation\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"Updates\"},{\"id\":475058500,\"method\":\"phone.leaveGroupCallPresentation\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"Updates\"},{\"id\":676017721,\"method\":\"stickers.checkShortName\",\"params\":[{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1303364867,\"method\":\"stickers.suggestShortName\",\"params\":[{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"stickers.SuggestedShortName\"},{\"id\":1032708345,\"method\":\"bots.resetBotCommands\",\"params\":[{\"name\":\"scope\",\"type\":\"BotCommandScope\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-481554986,\"method\":\"bots.getBotCommands\",\"params\":[{\"name\":\"scope\",\"type\":\"BotCommandScope\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"Vector\"},{\"id\":-1828139493,\"method\":\"account.resetPassword\",\"params\":[],\"type\":\"account.ResetPasswordResult\"},{\"id\":1284770294,\"method\":\"account.declinePasswordReset\",\"params\":[],\"type\":\"Bool\"},{\"id\":221691769,\"method\":\"auth.checkRecoveryPassword\",\"params\":[{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-700916087,\"method\":\"account.getChatThemes\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"account.Themes\"},{\"id\":-432283329,\"method\":\"messages.setChatTheme\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-1095836780,\"method\":\"channels.viewSponsoredMessage\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"random_id\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-333377601,\"method\":\"channels.getSponsoredMessages\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"messages.SponsoredMessages\"},{\"id\":834782287,\"method\":\"messages.getMessageReadParticipants\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Vector\"},{\"id\":1789130429,\"method\":\"messages.getSearchResultsCalendar\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"saved_peer_id\",\"type\":\"flags.2?InputPeer\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_date\",\"type\":\"int\"}],\"type\":\"messages.SearchResultsCalendar\"},{\"id\":-1669386480,\"method\":\"messages.getSearchResultsPositions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"saved_peer_id\",\"type\":\"flags.2?InputPeer\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.SearchResultsPositions\"},{\"id\":2145904661,\"method\":\"messages.hideChatJoinRequest\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"approved\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"Updates\"},{\"id\":-528091926,\"method\":\"messages.hideAllChatJoinRequests\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"approved\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"flags.1?string\"}],\"type\":\"Updates\"},{\"id\":-1323389022,\"method\":\"messages.toggleNoForwards\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":-855777386,\"method\":\"messages.saveDefaultSendAs\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"send_as\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":231174382,\"method\":\"channels.getSendAs\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"channels.SendAsPeers\"},{\"id\":-1081501024,\"method\":\"account.setAuthorizationTTL\",\"params\":[{\"name\":\"authorization_ttl_days\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":1089766498,\"method\":\"account.changeAuthorizationSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"confirmed\",\"type\":\"flags.3?true\"},{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"encrypted_requests_disabled\",\"type\":\"flags.0?Bool\"},{\"name\":\"call_requests_disabled\",\"type\":\"flags.1?Bool\"}],\"type\":\"Bool\"},{\"id\":913655003,\"method\":\"channels.deleteParticipantHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"participant\",\"type\":\"InputPeer\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":-754091820,\"method\":\"messages.sendReaction\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"big\",\"type\":\"flags.1?true\"},{\"name\":\"add_to_recent\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"reaction\",\"type\":\"flags.0?Vector\"}],\"type\":\"Updates\"},{\"id\":-1950707482,\"method\":\"messages.getMessagesReactions\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":1176190792,\"method\":\"messages.getMessageReactionsList\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"reaction\",\"type\":\"flags.0?Reaction\"},{\"name\":\"offset\",\"type\":\"flags.1?string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.MessageReactionsList\"},{\"id\":1511328724,\"method\":\"messages.setChatAvailableReactions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"available_reactions\",\"type\":\"ChatReactions\"},{\"name\":\"reactions_limit\",\"type\":\"flags.0?int\"}],\"type\":\"Updates\"},{\"id\":417243308,\"method\":\"messages.getAvailableReactions\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.AvailableReactions\"},{\"id\":1330094102,\"method\":\"messages.setDefaultReaction\",\"params\":[{\"name\":\"reaction\",\"type\":\"Reaction\"}],\"type\":\"Bool\"},{\"id\":1662529584,\"method\":\"messages.translateText\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"flags.0?InputPeer\"},{\"name\":\"id\",\"type\":\"flags.0?Vector\"},{\"name\":\"text\",\"type\":\"flags.1?Vector\"},{\"name\":\"to_lang\",\"type\":\"string\"}],\"type\":\"messages.TranslatedText\"},{\"id\":841173339,\"method\":\"messages.getUnreadReactions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":1420459918,\"method\":\"messages.readReactions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":-1963375804,\"method\":\"contacts.resolvePhone\",\"params\":[{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"contacts.ResolvedPeer\"},{\"id\":447879488,\"method\":\"phone.getGroupCallStreamChannels\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"phone.GroupCallStreamChannels\"},{\"id\":-558650433,\"method\":\"phone.getGroupCallStreamRtmpUrl\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"revoke\",\"type\":\"Bool\"}],\"type\":\"phone.GroupCallStreamRtmpUrl\"},{\"id\":276705696,\"method\":\"messages.searchSentMedia\",\"params\":[{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":385663691,\"method\":\"messages.getAttachMenuBots\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"AttachMenuBots\"},{\"id\":1998676370,\"method\":\"messages.getAttachMenuBot\",\"params\":[{\"name\":\"bot\",\"type\":\"InputUser\"}],\"type\":\"AttachMenuBotsBot\"},{\"id\":1777704297,\"method\":\"messages.toggleBotInAttachMenu\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"write_allowed\",\"type\":\"flags.0?true\"},{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":647873217,\"method\":\"messages.requestWebView\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"from_bot_menu\",\"type\":\"flags.4?true\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"compact\",\"type\":\"flags.7?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"url\",\"type\":\"flags.1?string\"},{\"name\":\"start_param\",\"type\":\"flags.3?string\"},{\"name\":\"theme_params\",\"type\":\"flags.2?DataJSON\"},{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"reply_to\",\"type\":\"flags.0?InputReplyTo\"},{\"name\":\"send_as\",\"type\":\"flags.13?InputPeer\"}],\"type\":\"WebViewResult\"},{\"id\":-1328014717,\"method\":\"messages.prolongWebView\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"reply_to\",\"type\":\"flags.0?InputReplyTo\"},{\"name\":\"send_as\",\"type\":\"flags.13?InputPeer\"}],\"type\":\"Bool\"},{\"id\":1094336115,\"method\":\"messages.requestSimpleWebView\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"from_switch_webview\",\"type\":\"flags.1?true\"},{\"name\":\"from_side_menu\",\"type\":\"flags.2?true\"},{\"name\":\"compact\",\"type\":\"flags.7?true\"},{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"url\",\"type\":\"flags.3?string\"},{\"name\":\"start_param\",\"type\":\"flags.4?string\"},{\"name\":\"theme_params\",\"type\":\"flags.0?DataJSON\"},{\"name\":\"platform\",\"type\":\"string\"}],\"type\":\"WebViewResult\"},{\"id\":172168437,\"method\":\"messages.sendWebViewResultMessage\",\"params\":[{\"name\":\"bot_query_id\",\"type\":\"string\"},{\"name\":\"result\",\"type\":\"InputBotInlineResult\"}],\"type\":\"WebViewMessageSent\"},{\"id\":-603831608,\"method\":\"messages.sendWebViewData\",\"params\":[{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"button_text\",\"type\":\"string\"},{\"name\":\"data\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":1157944655,\"method\":\"bots.setBotMenuButton\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"button\",\"type\":\"BotMenuButton\"}],\"type\":\"Bool\"},{\"id\":-1671369944,\"method\":\"bots.getBotMenuButton\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"BotMenuButton\"},{\"id\":-510647672,\"method\":\"account.getSavedRingtones\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"account.SavedRingtones\"},{\"id\":1038768899,\"method\":\"account.saveRingtone\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"account.SavedRingtone\"},{\"id\":-2095414366,\"method\":\"account.uploadRingtone\",\"params\":[{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"file_name\",\"type\":\"string\"},{\"name\":\"mime_type\",\"type\":\"string\"}],\"type\":\"Document\"},{\"id\":2021942497,\"method\":\"bots.setBotBroadcastDefaultAdminRights\",\"params\":[{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"}],\"type\":\"Bool\"},{\"id\":-1839281686,\"method\":\"bots.setBotGroupDefaultAdminRights\",\"params\":[{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"}],\"type\":\"Bool\"},{\"id\":1092913030,\"method\":\"phone.saveCallLog\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"file\",\"type\":\"InputFile\"}],\"type\":\"Bool\"},{\"id\":-456419968,\"method\":\"channels.toggleJoinToSend\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":1277789622,\"method\":\"channels.toggleJoinRequest\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":261206117,\"method\":\"payments.exportInvoice\",\"params\":[{\"name\":\"invoice_media\",\"type\":\"InputMedia\"}],\"type\":\"payments.ExportedInvoice\"},{\"id\":647928393,\"method\":\"messages.transcribeAudio\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"messages.TranscribedAudio\"},{\"id\":2132608815,\"method\":\"messages.rateTranscribedAudio\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"transcription_id\",\"type\":\"long\"},{\"name\":\"good\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-2131921795,\"method\":\"payments.assignAppStoreTransaction\",\"params\":[{\"name\":\"receipt\",\"type\":\"bytes\"},{\"name\":\"purpose\",\"type\":\"InputStorePaymentPurpose\"}],\"type\":\"Updates\"},{\"id\":-537046829,\"method\":\"payments.assignPlayMarketTransaction\",\"params\":[{\"name\":\"receipt\",\"type\":\"DataJSON\"},{\"name\":\"purpose\",\"type\":\"InputStorePaymentPurpose\"}],\"type\":\"Updates\"},{\"id\":-1614700874,\"method\":\"payments.canPurchasePremium\",\"params\":[{\"name\":\"purpose\",\"type\":\"InputStorePaymentPurpose\"}],\"type\":\"Bool\"},{\"id\":-1206152236,\"method\":\"help.getPremiumPromo\",\"params\":[],\"type\":\"help.PremiumPromo\"},{\"id\":-643100844,\"method\":\"messages.getCustomEmojiDocuments\",\"params\":[{\"name\":\"document_id\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-67329649,\"method\":\"messages.getEmojiStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.AllStickers\"},{\"id\":248473398,\"method\":\"messages.getFeaturedEmojiStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":-70001045,\"method\":\"account.updateEmojiStatus\",\"params\":[{\"name\":\"emoji_status\",\"type\":\"EmojiStatus\"}],\"type\":\"Bool\"},{\"id\":-696962170,\"method\":\"account.getDefaultEmojiStatuses\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"account.EmojiStatuses\"},{\"id\":257392901,\"method\":\"account.getRecentEmojiStatuses\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"account.EmojiStatuses\"},{\"id\":404757166,\"method\":\"account.clearRecentEmojiStatuses\",\"params\":[],\"type\":\"Bool\"},{\"id\":1063567478,\"method\":\"messages.reportReaction\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"reaction_peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-1149164102,\"method\":\"messages.getTopReactions\",\"params\":[{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Reactions\"},{\"id\":960896434,\"method\":\"messages.getRecentReactions\",\"params\":[{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Reactions\"},{\"id\":-1644236876,\"method\":\"messages.clearRecentReactions\",\"params\":[],\"type\":\"Bool\"},{\"id\":-2064119788,\"method\":\"messages.getExtendedMedia\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":767062953,\"method\":\"auth.importWebTokenAuthorization\",\"params\":[{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"web_auth_token\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":-279966037,\"method\":\"account.reorderUsernames\",\"params\":[{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":1490465654,\"method\":\"account.toggleUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"},{\"name\":\"active\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-1268978403,\"method\":\"channels.reorderUsernames\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":1358053637,\"method\":\"channels.toggleUsername\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"username\",\"type\":\"string\"},{\"name\":\"active\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":170155475,\"method\":\"channels.deactivateAllUsernames\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Bool\"},{\"id\":-1540781271,\"method\":\"channels.toggleForum\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":-200539612,\"method\":\"channels.createForumTopic\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"icon_color\",\"type\":\"flags.0?int\"},{\"name\":\"icon_emoji_id\",\"type\":\"flags.3?long\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"send_as\",\"type\":\"flags.2?InputPeer\"}],\"type\":\"Updates\"},{\"id\":233136337,\"method\":\"channels.getForumTopics\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"q\",\"type\":\"flags.0?string\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_topic\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ForumTopics\"},{\"id\":-1333584199,\"method\":\"channels.getForumTopicsByID\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"topics\",\"type\":\"Vector\"}],\"type\":\"messages.ForumTopics\"},{\"id\":-186670715,\"method\":\"channels.editForumTopic\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"topic_id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"icon_emoji_id\",\"type\":\"flags.1?long\"},{\"name\":\"closed\",\"type\":\"flags.2?Bool\"},{\"name\":\"hidden\",\"type\":\"flags.3?Bool\"}],\"type\":\"Updates\"},{\"id\":1814925350,\"method\":\"channels.updatePinnedForumTopic\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"topic_id\",\"type\":\"int\"},{\"name\":\"pinned\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":876830509,\"method\":\"channels.deleteTopicHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"top_msg_id\",\"type\":\"int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":693150095,\"method\":\"channels.reorderPinnedForumTopics\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"force\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":1760814315,\"method\":\"channels.toggleAntiSpam\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":-1471109485,\"method\":\"channels.reportAntiSpamFalsePositive\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-1632299963,\"method\":\"messages.setDefaultHistoryTTL\",\"params\":[{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":1703637384,\"method\":\"messages.getDefaultHistoryTTL\",\"params\":[],\"type\":\"DefaultHistoryTTL\"},{\"id\":-127582169,\"method\":\"contacts.exportContactToken\",\"params\":[],\"type\":\"ExportedContactToken\"},{\"id\":318789512,\"method\":\"contacts.importContactToken\",\"params\":[{\"name\":\"token\",\"type\":\"string\"}],\"type\":\"User\"},{\"id\":-515093903,\"method\":\"photos.uploadContactProfilePhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"suggest\",\"type\":\"flags.3?true\"},{\"name\":\"save\",\"type\":\"flags.4?true\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"file\",\"type\":\"flags.0?InputFile\"},{\"name\":\"video\",\"type\":\"flags.1?InputFile\"},{\"name\":\"video_start_ts\",\"type\":\"flags.2?double\"},{\"name\":\"video_emoji_markup\",\"type\":\"flags.5?VideoSize\"}],\"type\":\"photos.Photo\"},{\"id\":1785624660,\"method\":\"channels.toggleParticipantsHidden\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":-1850552224,\"method\":\"messages.sendBotRequestedPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"button_id\",\"type\":\"int\"},{\"name\":\"requested_peers\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":-495647960,\"method\":\"account.getDefaultProfilePhotoEmojis\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"EmojiList\"},{\"id\":-1856479058,\"method\":\"account.getDefaultGroupPhotoEmojis\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"EmojiList\"},{\"id\":-1908857314,\"method\":\"auth.requestFirebaseSms\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"safety_net_token\",\"type\":\"flags.0?string\"},{\"name\":\"play_integrity_token\",\"type\":\"flags.2?string\"},{\"name\":\"ios_push_secret\",\"type\":\"flags.1?string\"}],\"type\":\"Bool\"},{\"id\":1955122779,\"method\":\"messages.getEmojiGroups\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.EmojiGroups\"},{\"id\":785209037,\"method\":\"messages.getEmojiStatusGroups\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.EmojiGroups\"},{\"id\":564480243,\"method\":\"messages.getEmojiProfilePhotoGroups\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.EmojiGroups\"},{\"id\":739360983,\"method\":\"messages.searchCustomEmoji\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"EmojiList\"},{\"id\":-461589127,\"method\":\"messages.togglePeerTranslations\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"disabled\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-1379156774,\"method\":\"account.getAutoSaveSettings\",\"params\":[],\"type\":\"account.AutoSaveSettings\"},{\"id\":-694451359,\"method\":\"account.saveAutoSaveSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"users\",\"type\":\"flags.0?true\"},{\"name\":\"chats\",\"type\":\"flags.1?true\"},{\"name\":\"broadcasts\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"flags.3?InputPeer\"},{\"name\":\"settings\",\"type\":\"AutoSaveSettings\"}],\"type\":\"Bool\"},{\"id\":1404829728,\"method\":\"account.deleteAutoSaveExceptions\",\"params\":[],\"type\":\"Bool\"},{\"id\":-179077444,\"method\":\"stickers.changeSticker\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"sticker\",\"type\":\"InputDocument\"},{\"name\":\"emoji\",\"type\":\"flags.0?string\"},{\"name\":\"mask_coords\",\"type\":\"flags.1?MaskCoords\"},{\"name\":\"keywords\",\"type\":\"flags.2?string\"}],\"type\":\"messages.StickerSet\"},{\"id\":306912256,\"method\":\"stickers.renameStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"messages.StickerSet\"},{\"id\":-2022685804,\"method\":\"stickers.deleteStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"Bool\"},{\"id\":889046467,\"method\":\"messages.getBotApp\",\"params\":[{\"name\":\"app\",\"type\":\"InputBotApp\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.BotApp\"},{\"id\":1398901710,\"method\":\"messages.requestAppWebView\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"write_allowed\",\"type\":\"flags.0?true\"},{\"name\":\"compact\",\"type\":\"flags.7?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"app\",\"type\":\"InputBotApp\"},{\"name\":\"start_param\",\"type\":\"flags.1?string\"},{\"name\":\"theme_params\",\"type\":\"flags.2?DataJSON\"},{\"name\":\"platform\",\"type\":\"string\"}],\"type\":\"WebViewResult\"},{\"id\":282013987,\"method\":\"bots.setBotInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"bot\",\"type\":\"flags.2?InputUser\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"name\",\"type\":\"flags.3?string\"},{\"name\":\"about\",\"type\":\"flags.0?string\"},{\"name\":\"description\",\"type\":\"flags.1?string\"}],\"type\":\"Bool\"},{\"id\":-589753091,\"method\":\"bots.getBotInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"bot\",\"type\":\"flags.0?InputUser\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"bots.BotInfo\"},{\"id\":2123760019,\"method\":\"auth.resetLoginEmail\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"}],\"type\":\"auth.SentCode\"},{\"id\":-2072885362,\"method\":\"chatlists.exportChatlistInvite\",\"params\":[{\"name\":\"chatlist\",\"type\":\"InputChatlist\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"peers\",\"type\":\"Vector\"}],\"type\":\"chatlists.ExportedChatlistInvite\"},{\"id\":1906072670,\"method\":\"chatlists.deleteExportedInvite\",\"params\":[{\"name\":\"chatlist\",\"type\":\"InputChatlist\"},{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1698543165,\"method\":\"chatlists.editExportedInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chatlist\",\"type\":\"InputChatlist\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"peers\",\"type\":\"flags.2?Vector\"}],\"type\":\"ExportedChatlistInvite\"},{\"id\":-838608253,\"method\":\"chatlists.getExportedInvites\",\"params\":[{\"name\":\"chatlist\",\"type\":\"InputChatlist\"}],\"type\":\"chatlists.ExportedInvites\"},{\"id\":1103171583,\"method\":\"chatlists.checkChatlistInvite\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"chatlists.ChatlistInvite\"},{\"id\":-1498291302,\"method\":\"chatlists.joinChatlistInvite\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"peers\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":-1992190687,\"method\":\"chatlists.getChatlistUpdates\",\"params\":[{\"name\":\"chatlist\",\"type\":\"InputChatlist\"}],\"type\":\"chatlists.ChatlistUpdates\"},{\"id\":-527828747,\"method\":\"chatlists.joinChatlistUpdates\",\"params\":[{\"name\":\"chatlist\",\"type\":\"InputChatlist\"},{\"name\":\"peers\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":1726252795,\"method\":\"chatlists.hideChatlistUpdates\",\"params\":[{\"name\":\"chatlist\",\"type\":\"InputChatlist\"}],\"type\":\"Bool\"},{\"id\":-37955820,\"method\":\"chatlists.getLeaveChatlistSuggestions\",\"params\":[{\"name\":\"chatlist\",\"type\":\"InputChatlist\"}],\"type\":\"Vector\"},{\"id\":1962598714,\"method\":\"chatlists.leaveChatlist\",\"params\":[{\"name\":\"chatlist\",\"type\":\"InputChatlist\"},{\"name\":\"peers\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":-1760972350,\"method\":\"bots.reorderUsernames\",\"params\":[{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":87861619,\"method\":\"bots.toggleUsername\",\"params\":[{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"username\",\"type\":\"string\"},{\"name\":\"active\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-1879389471,\"method\":\"messages.setChatWallPaper\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"for_both\",\"type\":\"flags.3?true\"},{\"name\":\"revert\",\"type\":\"flags.4?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"wallpaper\",\"type\":\"flags.0?InputWallPaper\"},{\"name\":\"settings\",\"type\":\"flags.2?WallPaperSettings\"},{\"name\":\"id\",\"type\":\"flags.1?int\"}],\"type\":\"Updates\"},{\"id\":-896866118,\"method\":\"account.invalidateSignInCodes\",\"params\":[{\"name\":\"codes\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":414170259,\"method\":\"channels.clickSponsoredMessage\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"random_id\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-1167653392,\"method\":\"contacts.editCloseFriends\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-941629475,\"method\":\"stories.canSendStory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-454661813,\"method\":\"stories.sendStory\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.2?true\"},{\"name\":\"noforwards\",\"type\":\"flags.4?true\"},{\"name\":\"fwd_modified\",\"type\":\"flags.7?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"media\",\"type\":\"InputMedia\"},{\"name\":\"media_areas\",\"type\":\"flags.5?Vector\"},{\"name\":\"caption\",\"type\":\"flags.0?string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"privacy_rules\",\"type\":\"Vector\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"period\",\"type\":\"flags.3?int\"},{\"name\":\"fwd_from_id\",\"type\":\"flags.6?InputPeer\"},{\"name\":\"fwd_from_story\",\"type\":\"flags.6?int\"}],\"type\":\"Updates\"},{\"id\":-1249658298,\"method\":\"stories.editStory\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"media\",\"type\":\"flags.0?InputMedia\"},{\"name\":\"media_areas\",\"type\":\"flags.3?Vector\"},{\"name\":\"caption\",\"type\":\"flags.1?string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"privacy_rules\",\"type\":\"flags.2?Vector\"}],\"type\":\"Updates\"},{\"id\":-1369842849,\"method\":\"stories.deleteStories\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-1703566865,\"method\":\"stories.togglePinned\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"},{\"name\":\"pinned\",\"type\":\"Bool\"}],\"type\":\"Vector\"},{\"id\":-290400731,\"method\":\"stories.getAllStories\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"next\",\"type\":\"flags.1?true\"},{\"name\":\"hidden\",\"type\":\"flags.2?true\"},{\"name\":\"state\",\"type\":\"flags.0?string\"}],\"type\":\"stories.AllStories\"},{\"id\":1478600156,\"method\":\"stories.getPinnedStories\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"stories.Stories\"},{\"id\":-1271586794,\"method\":\"stories.getStoriesArchive\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"stories.Stories\"},{\"id\":1467271796,\"method\":\"stories.getStoriesByID\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"stories.Stories\"},{\"id\":2082822084,\"method\":\"stories.toggleAllStoriesHidden\",\"params\":[{\"name\":\"hidden\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-1521034552,\"method\":\"stories.readStories\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Vector\"},{\"id\":-1308456197,\"method\":\"stories.incrementStoryViews\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":2127707223,\"method\":\"stories.getStoryViewsList\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"just_contacts\",\"type\":\"flags.0?true\"},{\"name\":\"reactions_first\",\"type\":\"flags.2?true\"},{\"name\":\"forwards_first\",\"type\":\"flags.3?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"q\",\"type\":\"flags.1?string\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"offset\",\"type\":\"string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"stories.StoryViewsList\"},{\"id\":685862088,\"method\":\"stories.getStoriesViews\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"stories.StoryViews\"},{\"id\":2072899360,\"method\":\"stories.exportStoryLink\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"ExportedStoryLink\"},{\"id\":421788300,\"method\":\"stories.report\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1471926630,\"method\":\"stories.activateStealthMode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"past\",\"type\":\"flags.0?true\"},{\"name\":\"future\",\"type\":\"flags.1?true\"}],\"type\":\"Updates\"},{\"id\":-1798939530,\"method\":\"contacts.setBlocked\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"my_stories_from\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"Vector\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":2144810674,\"method\":\"stories.sendReaction\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"add_to_recent\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"story_id\",\"type\":\"int\"},{\"name\":\"reaction\",\"type\":\"Reaction\"}],\"type\":\"Updates\"},{\"id\":324662502,\"method\":\"bots.canSendMessage\",\"params\":[{\"name\":\"bot\",\"type\":\"InputUser\"}],\"type\":\"Bool\"},{\"id\":-248323089,\"method\":\"bots.allowSendMessage\",\"params\":[{\"name\":\"bot\",\"type\":\"InputUser\"}],\"type\":\"Updates\"},{\"id\":142591463,\"method\":\"bots.invokeWebViewCustomMethod\",\"params\":[{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"custom_method\",\"type\":\"string\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"DataJSON\"},{\"id\":743103056,\"method\":\"stories.getPeerStories\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"stories.PeerStories\"},{\"id\":-1688541191,\"method\":\"stories.getAllReadPeerStories\",\"params\":[],\"type\":\"Updates\"},{\"id\":1398375363,\"method\":\"stories.getPeerMaxIDs\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-1519744160,\"method\":\"stories.getChatsToSend\",\"params\":[],\"type\":\"messages.Chats\"},{\"id\":-1123805756,\"method\":\"stories.togglePeerStoriesHidden\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"hidden\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":660060756,\"method\":\"payments.getPremiumGiftCodeOptions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"boost_peer\",\"type\":\"flags.0?InputPeer\"}],\"type\":\"Vector\"},{\"id\":-1907247935,\"method\":\"payments.checkGiftCode\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"payments.CheckedGiftCode\"},{\"id\":-152934316,\"method\":\"payments.applyGiftCode\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-198994907,\"method\":\"payments.getGiveawayInfo\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"payments.GiveawayInfo\"},{\"id\":1609928480,\"method\":\"payments.launchPrepaidGiveaway\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"giveaway_id\",\"type\":\"long\"},{\"name\":\"purpose\",\"type\":\"InputStorePaymentPurpose\"}],\"type\":\"Updates\"},{\"id\":2096079197,\"method\":\"account.updateColor\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"for_profile\",\"type\":\"flags.1?true\"},{\"name\":\"color\",\"type\":\"flags.2?int\"},{\"name\":\"background_emoji_id\",\"type\":\"flags.0?long\"}],\"type\":\"Bool\"},{\"id\":-659933583,\"method\":\"channels.updateColor\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"for_profile\",\"type\":\"flags.1?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"color\",\"type\":\"flags.2?int\"},{\"name\":\"background_emoji_id\",\"type\":\"flags.0?long\"}],\"type\":\"Updates\"},{\"id\":-1509246514,\"method\":\"account.getDefaultBackgroundEmojis\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"EmojiList\"},{\"id\":1626764896,\"method\":\"premium.getBoostsList\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"gifts\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"offset\",\"type\":\"string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"premium.BoostsList\"},{\"id\":199719754,\"method\":\"premium.getMyBoosts\",\"params\":[],\"type\":\"premium.MyBoosts\"},{\"id\":1803396934,\"method\":\"premium.applyBoost\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"slots\",\"type\":\"flags.0?Vector\"},{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"premium.MyBoosts\"},{\"id\":70197089,\"method\":\"premium.getBoostsStatus\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"premium.BoostsStatus\"},{\"id\":965037343,\"method\":\"premium.getUserBoosts\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"premium.BoostsList\"},{\"id\":-1757889771,\"method\":\"channels.toggleViewForumAsMessages\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":-1833678516,\"method\":\"messages.searchEmojiStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_featured\",\"type\":\"flags.0?true\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.FoundStickerSets\"},{\"id\":631707458,\"method\":\"channels.getChannelRecommendations\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"flags.0?InputChannel\"}],\"type\":\"messages.Chats\"},{\"id\":927985472,\"method\":\"stats.getStoryStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"stats.StoryStats\"},{\"id\":-1505526026,\"method\":\"stats.getStoryPublicForwards\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"offset\",\"type\":\"string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"stats.PublicForwards\"},{\"id\":-629083089,\"method\":\"help.getPeerColors\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.PeerColors\"},{\"id\":-1412453891,\"method\":\"help.getPeerProfileColors\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.PeerColors\"},{\"id\":-1179482081,\"method\":\"stories.getStoryReactionsList\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"forwards_first\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"reaction\",\"type\":\"flags.0?Reaction\"},{\"name\":\"offset\",\"type\":\"flags.1?string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"stories.StoryReactionsList\"},{\"id\":-254548312,\"method\":\"channels.updateEmojiStatus\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"emoji_status\",\"type\":\"EmojiStatus\"}],\"type\":\"Updates\"},{\"id\":1999087573,\"method\":\"account.getChannelDefaultEmojiStatuses\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"account.EmojiStatuses\"},{\"id\":900325589,\"method\":\"account.getChannelRestrictedStatusEmojis\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"EmojiList\"},{\"id\":1401016858,\"method\":\"messages.getSavedDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_pinned\",\"type\":\"flags.0?true\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_peer\",\"type\":\"InputPeer\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.SavedDialogs\"},{\"id\":1033519437,\"method\":\"messages.getSavedHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Messages\"},{\"id\":1855459371,\"method\":\"messages.deleteSavedHistory\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_date\",\"type\":\"flags.2?int\"},{\"name\":\"max_date\",\"type\":\"flags.3?int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":-700607264,\"method\":\"messages.getPinnedSavedDialogs\",\"params\":[],\"type\":\"messages.SavedDialogs\"},{\"id\":-1400783906,\"method\":\"messages.toggleSavedDialogPin\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputDialogPeer\"}],\"type\":\"Bool\"},{\"id\":-1955502713,\"method\":\"messages.reorderPinnedSavedDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"force\",\"type\":\"flags.0?true\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":909631579,\"method\":\"messages.getSavedReactionTags\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"flags.0?InputPeer\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.SavedReactionTags\"},{\"id\":1613331948,\"method\":\"messages.updateSavedReactionTag\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reaction\",\"type\":\"Reaction\"},{\"name\":\"title\",\"type\":\"flags.0?string\"}],\"type\":\"Bool\"},{\"id\":-1107741656,\"method\":\"messages.getDefaultTagReactions\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Reactions\"},{\"id\":-1941176739,\"method\":\"messages.getOutboxReadDate\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"OutboxReadDate\"},{\"id\":-1507677680,\"method\":\"users.getIsPremiumRequiredToContact\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-1388733202,\"method\":\"channels.setBoostsToUnblockRestrictions\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"boosts\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1020866743,\"method\":\"channels.setEmojiStickers\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"Bool\"},{\"id\":249313744,\"method\":\"smsjobs.isEligibleToJoin\",\"params\":[],\"type\":\"smsjobs.EligibilityToJoin\"},{\"id\":-1488007635,\"method\":\"smsjobs.join\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1734824589,\"method\":\"smsjobs.leave\",\"params\":[],\"type\":\"Bool\"},{\"id\":155164863,\"method\":\"smsjobs.updateSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"allow_international\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":279353576,\"method\":\"smsjobs.getStatus\",\"params\":[],\"type\":\"smsjobs.Status\"},{\"id\":2005766191,\"method\":\"smsjobs.getSmsJob\",\"params\":[{\"name\":\"job_id\",\"type\":\"string\"}],\"type\":\"SmsJob\"},{\"id\":1327415076,\"method\":\"smsjobs.finishJob\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"job_id\",\"type\":\"string\"},{\"name\":\"error\",\"type\":\"flags.0?string\"}],\"type\":\"Bool\"},{\"id\":1236468288,\"method\":\"help.getTimezonesList\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.TimezonesList\"},{\"id\":1258348646,\"method\":\"account.updateBusinessWorkHours\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"business_work_hours\",\"type\":\"flags.0?BusinessWorkHours\"}],\"type\":\"Bool\"},{\"id\":-1637149926,\"method\":\"account.updateBusinessLocation\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo_point\",\"type\":\"flags.1?InputGeoPoint\"},{\"name\":\"address\",\"type\":\"flags.0?string\"}],\"type\":\"Bool\"},{\"id\":1724755908,\"method\":\"account.updateBusinessGreetingMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"flags.0?InputBusinessGreetingMessage\"}],\"type\":\"Bool\"},{\"id\":-1570078811,\"method\":\"account.updateBusinessAwayMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"flags.0?InputBusinessAwayMessage\"}],\"type\":\"Bool\"},{\"id\":-729550168,\"method\":\"messages.getQuickReplies\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.QuickReplies\"},{\"id\":1613961479,\"method\":\"messages.reorderQuickReplies\",\"params\":[{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-237962285,\"method\":\"messages.checkQuickReplyShortcut\",\"params\":[{\"name\":\"shortcut\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1543519471,\"method\":\"messages.editQuickReplyShortcut\",\"params\":[{\"name\":\"shortcut_id\",\"type\":\"int\"},{\"name\":\"shortcut\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1019234112,\"method\":\"messages.deleteQuickReplyShortcut\",\"params\":[{\"name\":\"shortcut_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-1801153085,\"method\":\"messages.getQuickReplyMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"shortcut_id\",\"type\":\"int\"},{\"name\":\"id\",\"type\":\"flags.0?Vector\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Messages\"},{\"id\":1819610593,\"method\":\"messages.sendQuickReplyMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"shortcut_id\",\"type\":\"int\"},{\"name\":\"id\",\"type\":\"Vector\"},{\"name\":\"random_id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":-519706352,\"method\":\"messages.deleteQuickReplyMessages\",\"params\":[{\"name\":\"shortcut_id\",\"type\":\"int\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":1138250269,\"method\":\"account.updateConnectedBot\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_reply\",\"type\":\"flags.0?true\"},{\"name\":\"deleted\",\"type\":\"flags.1?true\"},{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"recipients\",\"type\":\"InputBusinessBotRecipients\"}],\"type\":\"Updates\"},{\"id\":1319421967,\"method\":\"account.getConnectedBots\",\"params\":[],\"type\":\"account.ConnectedBots\"},{\"id\":-47326647,\"method\":\"messages.toggleDialogFilterTags\",\"params\":[{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-584540274,\"method\":\"invokeWithBusinessConnection\",\"params\":[{\"name\":\"connection_id\",\"type\":\"string\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":1990746736,\"method\":\"account.getBotBusinessConnection\",\"params\":[{\"name\":\"connection_id\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-1508585420,\"method\":\"account.updateBusinessIntro\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"intro\",\"type\":\"flags.0?InputBusinessIntro\"}],\"type\":\"Bool\"},{\"id\":1184253338,\"method\":\"stickers.replaceSticker\",\"params\":[{\"name\":\"sticker\",\"type\":\"InputDocument\"},{\"name\":\"new_sticker\",\"type\":\"InputStickerSetItem\"}],\"type\":\"messages.StickerSet\"},{\"id\":-793386500,\"method\":\"messages.getMyStickers\",\"params\":[{\"name\":\"offset_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.MyStickers\"},{\"id\":-1105295942,\"method\":\"fragment.getCollectibleInfo\",\"params\":[{\"name\":\"collectible\",\"type\":\"InputCollectible\"}],\"type\":\"fragment.CollectibleInfo\"},{\"id\":1684934807,\"method\":\"account.toggleConnectedBotPaused\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"paused\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":1581481689,\"method\":\"account.disablePeerConnectedBot\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-865203183,\"method\":\"account.updateBirthday\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"birthday\",\"type\":\"flags.0?Birthday\"}],\"type\":\"Bool\"},{\"id\":-621959068,\"method\":\"contacts.getBirthdays\",\"params\":[],\"type\":\"contacts.ContactBirthdays\"},{\"id\":-2007898482,\"method\":\"account.createBusinessChatLink\",\"params\":[{\"name\":\"link\",\"type\":\"InputBusinessChatLink\"}],\"type\":\"BusinessChatLink\"},{\"id\":-1942744913,\"method\":\"account.editBusinessChatLink\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"link\",\"type\":\"InputBusinessChatLink\"}],\"type\":\"BusinessChatLink\"},{\"id\":1611085428,\"method\":\"account.deleteBusinessChatLink\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1869667809,\"method\":\"account.getBusinessChatLinks\",\"params\":[],\"type\":\"account.BusinessChatLinks\"},{\"id\":1418913262,\"method\":\"account.resolveBusinessChatLink\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"account.ResolvedBusinessChatLinks\"},{\"id\":-649919008,\"method\":\"account.updatePersonalChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Bool\"},{\"id\":-1349519687,\"method\":\"channels.reportSponsoredMessage\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"random_id\",\"type\":\"bytes\"},{\"name\":\"option\",\"type\":\"bytes\"}],\"type\":\"channels.SponsoredMessageReportResult\"},{\"id\":1977595505,\"method\":\"stats.getBroadcastRevenueStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"stats.BroadcastRevenueStats\"},{\"id\":711323507,\"method\":\"stats.getBroadcastRevenueWithdrawalUrl\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"stats.BroadcastRevenueWithdrawalUrl\"},{\"id\":6891535,\"method\":\"stats.getBroadcastRevenueTransactions\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"stats.BroadcastRevenueTransactions\"},{\"id\":-1696000743,\"method\":\"channels.restrictSponsoredMessages\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"restricted\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":-1176919155,\"method\":\"account.toggleSponsoredMessages\",\"params\":[{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":187268763,\"method\":\"stories.togglePinnedToTop\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":115172684,\"method\":\"account.getReactionsNotifySettings\",\"params\":[],\"type\":\"ReactionsNotifySettings\"},{\"id\":829220168,\"method\":\"account.setReactionsNotifySettings\",\"params\":[{\"name\":\"settings\",\"type\":\"ReactionsNotifySettings\"}],\"type\":\"ReactionsNotifySettings\"},{\"id\":-878841866,\"method\":\"auth.reportMissingCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"mnc\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":500711669,\"method\":\"messages.getEmojiStickerGroups\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.EmojiGroups\"},{\"id\":502868356,\"method\":\"invokeWithGooglePlayIntegrity\",\"params\":[{\"name\":\"nonce\",\"type\":\"string\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":229528824,\"method\":\"invokeWithApnsSecret\",\"params\":[{\"name\":\"nonce\",\"type\":\"string\"},{\"name\":\"secret\",\"type\":\"string\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-559805895,\"method\":\"messages.getAvailableEffects\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.AvailableEffects\"},{\"id\":-778069893,\"method\":\"channels.searchPosts\",\"params\":[{\"name\":\"hashtag\",\"type\":\"string\"},{\"name\":\"offset_rate\",\"type\":\"int\"},{\"name\":\"offset_peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":92925557,\"method\":\"messages.editFactCheck\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"text\",\"type\":\"TextWithEntities\"}],\"type\":\"Updates\"},{\"id\":-774204404,\"method\":\"messages.deleteFactCheck\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-1177696786,\"method\":\"messages.getFactCheck\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-1072773165,\"method\":\"payments.getStarsTopupOptions\",\"params\":[],\"type\":\"Vector\"},{\"id\":273665959,\"method\":\"payments.getStarsStatus\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"payments.StarsStatus\"},{\"id\":-1751937702,\"method\":\"payments.getStarsTransactions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inbound\",\"type\":\"flags.0?true\"},{\"name\":\"outbound\",\"type\":\"flags.1?true\"},{\"name\":\"ascending\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"offset\",\"type\":\"string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"payments.StarsStatus\"},{\"id\":45839133,\"method\":\"payments.sendStarsForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"form_id\",\"type\":\"long\"},{\"name\":\"invoice\",\"type\":\"InputInvoice\"}],\"type\":\"payments.PaymentResult\"},{\"id\":632196938,\"method\":\"payments.refundStarsCharge\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"charge_id\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":1827279210,\"method\":\"stories.searchPosts\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"hashtag\",\"type\":\"flags.0?string\"},{\"name\":\"area\",\"type\":\"flags.1?MediaArea\"},{\"name\":\"offset\",\"type\":\"string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"stories.FoundStories\"},{\"id\":-652215594,\"method\":\"payments.getStarsRevenueStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"payments.StarsRevenueStats\"},{\"id\":331081907,\"method\":\"payments.getStarsRevenueWithdrawalUrl\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"stars\",\"type\":\"long\"},{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"payments.StarsRevenueWithdrawalUrl\"},{\"id\":-774377531,\"method\":\"payments.getStarsRevenueAdsAccountUrl\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"payments.StarsRevenueAdsAccountUrl\"},{\"id\":662973742,\"method\":\"payments.getStarsTransactionsByID\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"payments.StarsStatus\"}]},\"layer\":183} as {\n MTProto: {\n constructors: MTProtoConstructor[],\n methods: MTProtoMethod[],\n constructorsIndex?: {[id: number]: number}\n },\n API: {\n constructors: MTProtoConstructor[],\n methods: MTProtoMethod[],\n constructorsIndex?: {[id: number]: number}\n },\n layer: number,\n};\n","/*! pako 2.1.0 https://github.com/nodeca/pako @license (MIT AND Zlib) */\n!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],t):t((e=\"undefined\"!=typeof globalThis?globalThis:e||self).pako={})}(this,(function(e){\"use strict\";var t=(e,t,i,n)=>{let a=65535&e|0,r=e>>>16&65535|0,o=0;for(;0!==i;){o=i>2e3?2e3:i,i-=o;do{a=a+t[n++]|0,r=r+a|0}while(--o);a%=65521,r%=65521}return a|r<<16|0};const i=new Uint32Array((()=>{let e,t=[];for(var i=0;i<256;i++){e=i;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[i]=e}return t})());var n=(e,t,n,a)=>{const r=i,o=a+n;e^=-1;for(let i=a;i>>8^r[255&(e^t[i])];return-1^e};const a=16209;var r=function(e,t){let i,n,r,o,s,l,d,f,c,h,u,w,b,m,k,_,g,p,v,x,y,E,R,A;const Z=e.state;i=e.next_in,R=e.input,n=i+(e.avail_in-5),r=e.next_out,A=e.output,o=r-(t-e.avail_out),s=r+(e.avail_out-257),l=Z.dmax,d=Z.wsize,f=Z.whave,c=Z.wnext,h=Z.window,u=Z.hold,w=Z.bits,b=Z.lencode,m=Z.distcode,k=(1<>>24,u>>>=p,w-=p,p=g>>>16&255,0===p)A[r++]=65535&g;else{if(!(16&p)){if(0==(64&p)){g=b[(65535&g)+(u&(1<>>=p,w-=p),w<15&&(u+=R[i++]<>>24,u>>>=p,w-=p,p=g>>>16&255,!(16&p)){if(0==(64&p)){g=m[(65535&g)+(u&(1<l){e.msg=\"invalid distance too far back\",Z.mode=a;break e}if(u>>>=p,w-=p,p=r-o,x>p){if(p=x-p,p>f&&Z.sane){e.msg=\"invalid distance too far back\",Z.mode=a;break e}if(y=0,E=h,0===c){if(y+=d-p,p2;)A[r++]=E[y++],A[r++]=E[y++],A[r++]=E[y++],v-=3;v&&(A[r++]=E[y++],v>1&&(A[r++]=E[y++]))}else{y=r-x;do{A[r++]=A[y++],A[r++]=A[y++],A[r++]=A[y++],v-=3}while(v>2);v&&(A[r++]=A[y++],v>1&&(A[r++]=A[y++]))}break}}break}}while(i>3,i-=v,w-=v<<3,u&=(1<{const u=h.bits;let w,b,m,k,_,g,p=0,v=0,x=0,y=0,E=0,R=0,A=0,Z=0,S=0,T=0,O=null;const U=new Uint16Array(16),D=new Uint16Array(16);let I,B,N,C=null;for(p=0;p<=o;p++)U[p]=0;for(v=0;v=1&&0===U[y];y--);if(E>y&&(E=y),0===y)return a[r++]=20971520,a[r++]=20971520,h.bits=1,0;for(x=1;x0&&(0===e||1!==y))return-1;for(D[1]=0,p=1;p852||2===e&&S>592)return 1;for(;;){I=p-A,c[v]+1=g?(B=C[c[v]-g],N=O[c[v]-g]):(B=96,N=0),w=1<>A)+b]=I<<24|B<<16|N|0}while(0!==b);for(w=1<>=1;if(0!==w?(T&=w-1,T+=w):T=0,v++,0==--U[p]){if(p===y)break;p=t[i+c[v]]}if(p>E&&(T&k)!==m){for(0===A&&(A=E),_+=x,R=p-A,Z=1<852||2===e&&S>592)return 1;m=T&k,a[m]=E<<24|R<<16|_-r|0}}return 0!==T&&(a[_+T]=p-A<<24|64<<16|0),h.bits=E,0},h={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{Z_FINISH:u,Z_BLOCK:w,Z_TREES:b,Z_OK:m,Z_STREAM_END:k,Z_NEED_DICT:_,Z_STREAM_ERROR:g,Z_DATA_ERROR:p,Z_MEM_ERROR:v,Z_BUF_ERROR:x,Z_DEFLATED:y}=h,E=16180,R=16190,A=16191,Z=16192,S=16194,T=16199,O=16200,U=16206,D=16209,I=e=>(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24);function B(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const N=e=>{if(!e)return 1;const t=e.state;return!t||t.strm!==e||t.mode16211?1:0},C=e=>{if(N(e))return g;const t=e.state;return e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=E,t.last=0,t.havedict=0,t.flags=-1,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,m},z=e=>{if(N(e))return g;const t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,C(e)},F=(e,t)=>{let i;if(N(e))return g;const n=e.state;return t<0?(i=0,t=-t):(i=5+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?g:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=i,n.wbits=t,z(e))},L=(e,t)=>{if(!e)return g;const i=new B;e.state=i,i.strm=e,i.window=null,i.mode=E;const n=F(e,t);return n!==m&&(e.state=null),n};let M,H,j=!0;const K=e=>{if(j){M=new Int32Array(512),H=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(c(1,e.lens,0,288,M,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;c(2,e.lens,0,32,H,0,e.work,{bits:5}),j=!1}e.lencode=M,e.lenbits=9,e.distcode=H,e.distbits=5},P=(e,t,i,n)=>{let a;const r=e.state;return null===r.window&&(r.wsize=1<=r.wsize?(r.window.set(t.subarray(i-r.wsize,i),0),r.wnext=0,r.whave=r.wsize):(a=r.wsize-r.wnext,a>n&&(a=n),r.window.set(t.subarray(i-n,i-n+a),r.wnext),(n-=a)?(r.window.set(t.subarray(i-n,i),0),r.wnext=n,r.whave=r.wsize):(r.wnext+=a,r.wnext===r.wsize&&(r.wnext=0),r.whaveL(e,15),inflateInit2:L,inflate:(e,i)=>{let a,o,s,l,d,f,h,B,C,z,F,L,M,H,j,Y,G,X,W,q,J,Q,V=0;const $=new Uint8Array(4);let ee,te;const ie=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(N(e)||!e.output||!e.input&&0!==e.avail_in)return g;a=e.state,a.mode===A&&(a.mode=Z),d=e.next_out,s=e.output,h=e.avail_out,l=e.next_in,o=e.input,f=e.avail_in,B=a.hold,C=a.bits,z=f,F=h,Q=m;e:for(;;)switch(a.mode){case E:if(0===a.wrap){a.mode=Z;break}for(;C<16;){if(0===f)break e;f--,B+=o[l++]<>>8&255,a.check=n(a.check,$,2,0),B=0,C=0,a.mode=16181;break}if(a.head&&(a.head.done=!1),!(1&a.wrap)||(((255&B)<<8)+(B>>8))%31){e.msg=\"incorrect header check\",a.mode=D;break}if((15&B)!==y){e.msg=\"unknown compression method\",a.mode=D;break}if(B>>>=4,C-=4,J=8+(15&B),0===a.wbits&&(a.wbits=J),J>15||J>a.wbits){e.msg=\"invalid window size\",a.mode=D;break}a.dmax=1<>8&1),512&a.flags&&4&a.wrap&&($[0]=255&B,$[1]=B>>>8&255,a.check=n(a.check,$,2,0)),B=0,C=0,a.mode=16182;case 16182:for(;C<32;){if(0===f)break e;f--,B+=o[l++]<>>8&255,$[2]=B>>>16&255,$[3]=B>>>24&255,a.check=n(a.check,$,4,0)),B=0,C=0,a.mode=16183;case 16183:for(;C<16;){if(0===f)break e;f--,B+=o[l++]<>8),512&a.flags&&4&a.wrap&&($[0]=255&B,$[1]=B>>>8&255,a.check=n(a.check,$,2,0)),B=0,C=0,a.mode=16184;case 16184:if(1024&a.flags){for(;C<16;){if(0===f)break e;f--,B+=o[l++]<>>8&255,a.check=n(a.check,$,2,0)),B=0,C=0}else a.head&&(a.head.extra=null);a.mode=16185;case 16185:if(1024&a.flags&&(L=a.length,L>f&&(L=f),L&&(a.head&&(J=a.head.extra_len-a.length,a.head.extra||(a.head.extra=new Uint8Array(a.head.extra_len)),a.head.extra.set(o.subarray(l,l+L),J)),512&a.flags&&4&a.wrap&&(a.check=n(a.check,o,L,l)),f-=L,l+=L,a.length-=L),a.length))break e;a.length=0,a.mode=16186;case 16186:if(2048&a.flags){if(0===f)break e;L=0;do{J=o[l+L++],a.head&&J&&a.length<65536&&(a.head.name+=String.fromCharCode(J))}while(J&&L>9&1,a.head.done=!0),e.adler=a.check=0,a.mode=A;break;case 16189:for(;C<32;){if(0===f)break e;f--,B+=o[l++]<>>=7&C,C-=7&C,a.mode=U;break}for(;C<3;){if(0===f)break e;f--,B+=o[l++]<>>=1,C-=1,3&B){case 0:a.mode=16193;break;case 1:if(K(a),a.mode=T,i===b){B>>>=2,C-=2;break e}break;case 2:a.mode=16196;break;case 3:e.msg=\"invalid block type\",a.mode=D}B>>>=2,C-=2;break;case 16193:for(B>>>=7&C,C-=7&C;C<32;){if(0===f)break e;f--,B+=o[l++]<>>16^65535)){e.msg=\"invalid stored block lengths\",a.mode=D;break}if(a.length=65535&B,B=0,C=0,a.mode=S,i===b)break e;case S:a.mode=16195;case 16195:if(L=a.length,L){if(L>f&&(L=f),L>h&&(L=h),0===L)break e;s.set(o.subarray(l,l+L),d),f-=L,l+=L,h-=L,d+=L,a.length-=L;break}a.mode=A;break;case 16196:for(;C<14;){if(0===f)break e;f--,B+=o[l++]<>>=5,C-=5,a.ndist=1+(31&B),B>>>=5,C-=5,a.ncode=4+(15&B),B>>>=4,C-=4,a.nlen>286||a.ndist>30){e.msg=\"too many length or distance symbols\",a.mode=D;break}a.have=0,a.mode=16197;case 16197:for(;a.have>>=3,C-=3}for(;a.have<19;)a.lens[ie[a.have++]]=0;if(a.lencode=a.lendyn,a.lenbits=7,ee={bits:a.lenbits},Q=c(0,a.lens,0,19,a.lencode,0,a.work,ee),a.lenbits=ee.bits,Q){e.msg=\"invalid code lengths set\",a.mode=D;break}a.have=0,a.mode=16198;case 16198:for(;a.have>>24,Y=V>>>16&255,G=65535&V,!(j<=C);){if(0===f)break e;f--,B+=o[l++]<>>=j,C-=j,a.lens[a.have++]=G;else{if(16===G){for(te=j+2;C>>=j,C-=j,0===a.have){e.msg=\"invalid bit length repeat\",a.mode=D;break}J=a.lens[a.have-1],L=3+(3&B),B>>>=2,C-=2}else if(17===G){for(te=j+3;C>>=j,C-=j,J=0,L=3+(7&B),B>>>=3,C-=3}else{for(te=j+7;C>>=j,C-=j,J=0,L=11+(127&B),B>>>=7,C-=7}if(a.have+L>a.nlen+a.ndist){e.msg=\"invalid bit length repeat\",a.mode=D;break}for(;L--;)a.lens[a.have++]=J}}if(a.mode===D)break;if(0===a.lens[256]){e.msg=\"invalid code -- missing end-of-block\",a.mode=D;break}if(a.lenbits=9,ee={bits:a.lenbits},Q=c(1,a.lens,0,a.nlen,a.lencode,0,a.work,ee),a.lenbits=ee.bits,Q){e.msg=\"invalid literal/lengths set\",a.mode=D;break}if(a.distbits=6,a.distcode=a.distdyn,ee={bits:a.distbits},Q=c(2,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,ee),a.distbits=ee.bits,Q){e.msg=\"invalid distances set\",a.mode=D;break}if(a.mode=T,i===b)break e;case T:a.mode=O;case O:if(f>=6&&h>=258){e.next_out=d,e.avail_out=h,e.next_in=l,e.avail_in=f,a.hold=B,a.bits=C,r(e,F),d=e.next_out,s=e.output,h=e.avail_out,l=e.next_in,o=e.input,f=e.avail_in,B=a.hold,C=a.bits,a.mode===A&&(a.back=-1);break}for(a.back=0;V=a.lencode[B&(1<>>24,Y=V>>>16&255,G=65535&V,!(j<=C);){if(0===f)break e;f--,B+=o[l++]<>X)],j=V>>>24,Y=V>>>16&255,G=65535&V,!(X+j<=C);){if(0===f)break e;f--,B+=o[l++]<>>=X,C-=X,a.back+=X}if(B>>>=j,C-=j,a.back+=j,a.length=G,0===Y){a.mode=16205;break}if(32&Y){a.back=-1,a.mode=A;break}if(64&Y){e.msg=\"invalid literal/length code\",a.mode=D;break}a.extra=15&Y,a.mode=16201;case 16201:if(a.extra){for(te=a.extra;C>>=a.extra,C-=a.extra,a.back+=a.extra}a.was=a.length,a.mode=16202;case 16202:for(;V=a.distcode[B&(1<>>24,Y=V>>>16&255,G=65535&V,!(j<=C);){if(0===f)break e;f--,B+=o[l++]<>X)],j=V>>>24,Y=V>>>16&255,G=65535&V,!(X+j<=C);){if(0===f)break e;f--,B+=o[l++]<>>=X,C-=X,a.back+=X}if(B>>>=j,C-=j,a.back+=j,64&Y){e.msg=\"invalid distance code\",a.mode=D;break}a.offset=G,a.extra=15&Y,a.mode=16203;case 16203:if(a.extra){for(te=a.extra;C>>=a.extra,C-=a.extra,a.back+=a.extra}if(a.offset>a.dmax){e.msg=\"invalid distance too far back\",a.mode=D;break}a.mode=16204;case 16204:if(0===h)break e;if(L=F-h,a.offset>L){if(L=a.offset-L,L>a.whave&&a.sane){e.msg=\"invalid distance too far back\",a.mode=D;break}L>a.wnext?(L-=a.wnext,M=a.wsize-L):M=a.wnext-L,L>a.length&&(L=a.length),H=a.window}else H=s,M=d-a.offset,L=a.length;L>h&&(L=h),h-=L,a.length-=L;do{s[d++]=H[M++]}while(--L);0===a.length&&(a.mode=O);break;case 16205:if(0===h)break e;s[d++]=a.length,h--,a.mode=O;break;case U:if(a.wrap){for(;C<32;){if(0===f)break e;f--,B|=o[l++]<{if(N(e))return g;let t=e.state;return t.window&&(t.window=null),e.state=null,m},inflateGetHeader:(e,t)=>{if(N(e))return g;const i=e.state;return 0==(2&i.wrap)?g:(i.head=t,t.done=!1,m)},inflateSetDictionary:(e,i)=>{const n=i.length;let a,r,o;return N(e)?g:(a=e.state,0!==a.wrap&&a.mode!==R?g:a.mode===R&&(r=1,r=t(r,i,n,0),r!==a.check)?p:(o=P(e,i,n,n),o?(a.mode=16210,v):(a.havedict=1,m)))},inflateInfo:\"pako inflate (from Nodeca project)\"};const G=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var X=function(e){const t=Array.prototype.slice.call(arguments,1);for(;t.length;){const i=t.shift();if(i){if(\"object\"!=typeof i)throw new TypeError(i+\"must be non-object\");for(const t in i)G(i,t)&&(e[t]=i[t])}}return e},W=e=>{let t=0;for(let i=0,n=e.length;i=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;J[254]=J[254]=1;var Q=e=>{if(\"function\"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(e);let t,i,n,a,r,o=e.length,s=0;for(a=0;a>>6,t[r++]=128|63&i):i<65536?(t[r++]=224|i>>>12,t[r++]=128|i>>>6&63,t[r++]=128|63&i):(t[r++]=240|i>>>18,t[r++]=128|i>>>12&63,t[r++]=128|i>>>6&63,t[r++]=128|63&i);return t},V=(e,t)=>{const i=t||e.length;if(\"function\"==typeof TextDecoder&&TextDecoder.prototype.decode)return(new TextDecoder).decode(e.subarray(0,t));let n,a;const r=new Array(2*i);for(a=0,n=0;n4)r[a++]=65533,n+=o-1;else{for(t&=2===o?31:3===o?15:7;o>1&&n1?r[a++]=65533:t<65536?r[a++]=t:(t-=65536,r[a++]=55296|t>>10&1023,r[a++]=56320|1023&t)}}return((e,t)=>{if(t<65534&&e.subarray&&q)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let i=\"\";for(let n=0;n{(t=t||e.length)>e.length&&(t=e.length);let i=t-1;for(;i>=0&&128==(192&e[i]);)i--;return i<0||0===i?t:i+J[e[i]]>t?i:t},ee={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"};var te=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0};var ie=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1};const ne=Object.prototype.toString,{Z_NO_FLUSH:ae,Z_FINISH:re,Z_OK:oe,Z_STREAM_END:se,Z_NEED_DICT:le,Z_STREAM_ERROR:de,Z_DATA_ERROR:fe,Z_MEM_ERROR:ce}=h;function he(e){this.options=X({chunkSize:65536,windowBits:15,to:\"\"},e||{});const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new te,this.strm.avail_out=0;let i=Y.inflateInit2(this.strm,t.windowBits);if(i!==oe)throw new Error(ee[i]);if(this.header=new ie,Y.inflateGetHeader(this.strm,this.header),t.dictionary&&(\"string\"==typeof t.dictionary?t.dictionary=Q(t.dictionary):\"[object ArrayBuffer]\"===ne.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(i=Y.inflateSetDictionary(this.strm,t.dictionary),i!==oe)))throw new Error(ee[i])}function ue(e,t){const i=new he(t);if(i.push(e),i.err)throw i.msg||ee[i.err];return i.result}he.prototype.push=function(e,t){const i=this.strm,n=this.options.chunkSize,a=this.options.dictionary;let r,o,s;if(this.ended)return!1;for(o=t===~~t?t:!0===t?re:ae,\"[object ArrayBuffer]\"===ne.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;;){for(0===i.avail_out&&(i.output=new Uint8Array(n),i.next_out=0,i.avail_out=n),r=Y.inflate(i,o),r===le&&a&&(r=Y.inflateSetDictionary(i,a),r===oe?r=Y.inflate(i,o):r===fe&&(r=le));i.avail_in>0&&r===se&&i.state.wrap>0&&0!==e[i.next_in];)Y.inflateReset(i),r=Y.inflate(i,o);switch(r){case de:case fe:case le:case ce:return this.onEnd(r),this.ended=!0,!1}if(s=i.avail_out,i.next_out&&(0===i.avail_out||r===se))if(\"string\"===this.options.to){let e=$(i.output,i.next_out),t=i.next_out-e,a=V(i.output,e);i.next_out=t,i.avail_out=n-t,t&&i.output.set(i.output.subarray(e,e+t),0),this.onData(a)}else this.onData(i.output.length===i.next_out?i.output:i.output.subarray(0,i.next_out));if(r!==oe||0!==s){if(r===se)return r=Y.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,!0;if(0===i.avail_in)break}}return!0},he.prototype.onData=function(e){this.chunks.push(e)},he.prototype.onEnd=function(e){e===oe&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=W(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var we=he,be=ue,me=function(e,t){return(t=t||{}).raw=!0,ue(e,t)},ke=ue,_e=h,ge={Inflate:we,inflate:be,inflateRaw:me,ungzip:ke,constants:_e};e.Inflate=we,e.constants=_e,e.default=ge,e.inflate=be,e.inflateRaw=me,e.ungzip=ke,Object.defineProperty(e,\"__esModule\",{value:!0})}));\n","// export function gzipUncompress(bytes: ArrayBuffer, toString: true): string;\n\n// @ts-ignore\nimport pako from 'pako/dist/pako_inflate.min.js';\n// import dT from './dT';\n\n// export function gzipUncompress(bytes: ArrayBuffer, toString?: false): Uint8Array;\nexport default function gzipUncompress(bytes: ArrayBuffer, toString?: boolean): string | Uint8Array {\n // console.log(dT(), 'Gzip uncompress start');\n const result = pako.inflate(bytes, toString ? {to: 'string'} : undefined);\n // console.log(dT(), 'Gzip uncompress finish'/* , result */);\n return result;\n}\n","export default function intToUint(val: number) {\n // return val < 0 ? val + 4294967296 : val; // 0 <= val <= Infinity\n return val >>> 0; // (4294967296 >>> 0) === 0; 0 <= val <= 4294967295\n}\n","import bigInt from 'big-integer';\nimport intToUint from '../number/intToUint';\n\nexport default function ulongFromInts(high: number, low: number) {\n high = intToUint(high), low = intToUint(low);\n return bigInt(high).shiftLeft(32).add(bigInt(low));\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport Schema, {MTProtoConstructor, MTProtoMethod} from './schema';\nimport {JSONValue} from '../../layer';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\nimport isObject from '../../helpers/object/isObject';\nimport gzipUncompress from '../../helpers/gzipUncompress';\nimport bigInt from 'big-integer';\nimport ulongFromInts from '../../helpers/long/ulongFromInts';\nimport {safeBigInt} from '../../helpers/bigInt/bigIntConstants';\nimport {bigIntToSigned, bigIntToUnsigned} from '../../helpers/bigInt/bigIntConversion';\n\nconst boolFalse = +Schema.API.constructors.find((c) => c.predicate === 'boolFalse').id;\nconst boolTrue = +Schema.API.constructors.find((c) => c.predicate === 'boolTrue').id;\nconst vector = +Schema.API.constructors.find((c) => c.predicate === 'vector').id;\nconst gzipPacked = +Schema.MTProto.constructors.find((c) => c.predicate === 'gzip_packed').id;\n\n// * using slice to have a new buffer, otherwise the buffer will be copied to main thread\nconst sliceMethod: 'slice' | 'subarray' = 'slice'; // subarray\n\nclass TLSerialization {\n private maxLength = 2048; // 2Kb\n private offset = 0; // in bytes\n private mtproto = false;\n private debug = false;// Modes.debug;\n\n private buffer: ArrayBuffer;\n private intView: Int32Array;\n private byteView: Uint8Array;\n\n constructor(options: Partial<{startMaxLength: number, mtproto: true}> = {}) {\n this.maxLength = options.startMaxLength || 2048; // 2Kb\n this.mtproto = options.mtproto || false;\n this.createBuffer();\n }\n\n public createBuffer() {\n this.buffer = new ArrayBuffer(this.maxLength);\n this.intView = new Int32Array(this.buffer);\n this.byteView = new Uint8Array(this.buffer);\n }\n\n public getArray() {\n const resultBuffer = new ArrayBuffer(this.offset);\n\n // let perf = performance.now();\n /* const resultUint8: any = new Uint8Array(resultBuffer);\n resultUint8.set(this.byteView.subarray(0, this.offset)); */\n // console.log('perf uint8', performance.now() - perf);\n\n // perf = performance.now();\n const resultInt32 = new Int32Array(resultBuffer);\n resultInt32.set(this.intView.subarray(0, this.offset / 4));\n // console.log('perf int32', performance.now() - perf);\n\n /* if(resultUint8.buffer.byteLength !== resultInt32.buffer.byteLength) {\n console.error(resultUint8, resultInt32);\n } */\n\n return resultInt32;\n }\n\n public getBuffer() {\n return this.getArray().buffer;\n }\n\n public getBytes(typed: true): Uint8Array;\n public getBytes(typed?: false): number[];\n public getBytes(typed: boolean = true): number[] | Uint8Array {\n if(typed) {\n const resultBuffer = new ArrayBuffer(this.offset);\n const resultArray = new Uint8Array(resultBuffer);\n\n resultArray.set(this.byteView.subarray(0, this.offset));\n\n return resultArray;\n }\n\n const bytes: number[] = new Array(this.offset);\n for(let i = 0; i < this.offset; ++i) {\n bytes[i] = this.byteView[i];\n }\n return bytes;\n }\n\n public getOffset() {\n return this.offset;\n }\n\n public checkLength(needBytes: number) {\n if(this.offset + needBytes < this.maxLength) {\n return;\n }\n\n // console.log('Increase buffer start', this.offset, needBytes, this.maxLength, this.byteView.slice(0, 32));\n this.maxLength = Math.ceil(Math.max(this.maxLength * 2, this.offset + needBytes + 16) / 4) * 4;\n const previousBuffer = this.buffer;\n // const previousByteView = this.byteView;\n const previousArray = new Int32Array(previousBuffer);\n\n this.createBuffer();\n\n new Int32Array(this.buffer).set(previousArray);\n /* console.log('Increase buffer end', this.offset, needBytes, this.maxLength, this.byteView.slice(0, 32),\n bytesCmp(previousByteView, this.byteView.slice(0, previousByteView.length))); */\n }\n\n public writeInt(i: number, field: string) {\n this.debug && console.log('>>>', i.toString(16), i, field);\n\n const offset = this.offset / 4;\n this.checkLength(4);\n this.intView[offset] = i;\n this.offset += 4;\n\n return offset;\n }\n\n public storeInt(i: number, field?: string) {\n return this.writeInt(i, (field || '') + ':int');\n }\n\n public storeBool(i: boolean, field?: string) {\n if(i) {\n this.writeInt(boolTrue, (field || '') + ':bool');\n } else {\n this.writeInt(boolFalse, (field || '') + ':bool');\n }\n }\n\n public storeLongP(iHigh: number, iLow: number, field?: string) {\n this.writeInt(iLow, (field || '') + ':long[low]');\n this.writeInt(iHigh, (field || '') + ':long[high]');\n }\n\n public storeLong(sLong: Array | string | number, field?: string) {\n if(Array.isArray(sLong)) {\n if(sLong.length === 2) {\n return this.storeLongP(sLong[0], sLong[1], field);\n } else {\n return this.storeIntBytes(sLong, 64, field);\n }\n }\n\n const _bigInt = bigIntToUnsigned(bigInt(sLong as string));\n const {quotient, remainder} = _bigInt.divmod(0x100000000);\n const high = quotient.toJSNumber();\n const low = remainder.toJSNumber();\n\n this.writeInt(low, (field || '') + ':long[low]');\n this.writeInt(high, (field || '') + ':long[high]');\n }\n\n public storeDouble(f: any, field?: string) {\n const buffer = new ArrayBuffer(8);\n const intView = new Int32Array(buffer);\n const doubleView = new Float64Array(buffer);\n\n doubleView[0] = f;\n\n this.writeInt(intView[0], (field || '') + ':double[low]');\n this.writeInt(intView[1], (field || '') + ':double[high]');\n }\n\n public storeString(s: string, field?: string) {\n this.debug && console.log('>>>', s, (field || '') + ':string');\n\n if(s === undefined) {\n s = '';\n }\n const sUTF8 = unescape(encodeURIComponent(s));\n\n this.checkLength(sUTF8.length + 8);\n\n const len = sUTF8.length;\n if(len <= 253) {\n this.byteView[this.offset++] = len;\n } else {\n this.byteView[this.offset++] = 254;\n this.byteView[this.offset++] = len & 0xFF;\n this.byteView[this.offset++] = (len & 0xFF00) >> 8;\n this.byteView[this.offset++] = (len & 0xFF0000) >> 16;\n }\n for(let i = 0; i < len; ++i) {\n this.byteView[this.offset++] = sUTF8.charCodeAt(i);\n }\n\n // Padding\n while(this.offset % 4) {\n this.byteView[this.offset++] = 0;\n }\n }\n\n public storeBytes(bytes: ArrayBuffer | Uint8Array | number[], field?: string) {\n if(bytes instanceof ArrayBuffer) {\n bytes = new Uint8Array(bytes);\n } else if(bytes === undefined) {\n bytes = [];\n }\n\n this.debug && console.log('>>>', bytesToHex(bytes as number[]), (field || '') + ':bytes');\n\n // if uint8array was json.stringified, then will be: {'0': 123, '1': 123}\n const len = (bytes as Uint8Array).length;\n this.checkLength(len + 8);\n if(len <= 253) {\n this.byteView[this.offset++] = len;\n } else {\n this.byteView[this.offset++] = 254;\n this.byteView[this.offset++] = len & 0xFF;\n this.byteView[this.offset++] = (len & 0xFF00) >> 8;\n this.byteView[this.offset++] = (len & 0xFF0000) >> 16;\n }\n\n this.byteView.set(bytes as Uint8Array, this.offset);\n this.offset += len;\n\n // Padding\n while(this.offset % 4) {\n this.byteView[this.offset++] = 0;\n }\n }\n\n public storeIntBytes(bytes: ArrayBuffer | Uint8Array | number[], bits: number, field?: string) {\n if(bytes instanceof ArrayBuffer) {\n bytes = new Uint8Array(bytes);\n }\n\n const len = (bytes as Uint8Array).length;\n if((bits % 32) || (len * 8) !== bits) {\n const error = new Error('Invalid bits: ' + bits + ', ' + len);\n console.error(error, bytes, field);\n throw error;\n }\n\n this.debug && console.log('>>>', bytesToHex(bytes as Uint8Array), (field || '') + ':int' + bits);\n this.checkLength(len);\n\n this.byteView.set(bytes as Uint8Array, this.offset);\n this.offset += len;\n }\n\n public storeRawBytes(bytes: ArrayLike, field?: string) {\n if(bytes instanceof ArrayBuffer) {\n bytes = new Uint8Array(bytes);\n }\n\n const len = bytes.length;\n\n this.debug && console.log('>>>', bytesToHex(bytes), (field || ''));\n this.checkLength(len);\n\n this.byteView.set(bytes, this.offset);\n this.offset += len;\n }\n\n public storeMethod(methodName: string, params: any) {\n const schema = this.mtproto ? Schema.MTProto : Schema.API;\n const methodData = schema.methods.find((m) => m.method === methodName);\n\n if(!methodData) {\n throw new Error('No method ' + methodName + ' found');\n }\n\n this.storeInt(methodData.id, methodName + '[id]');\n\n this.storeBody(params, methodData, methodName);\n\n return methodData.type;\n }\n\n public storeObject(obj: any, type: string, field?: string) {\n switch(type) {\n case '#':\n obj ||= 0;\n case 'int':\n return this.storeInt(obj, field);\n case 'long':\n return this.storeLong(obj, field);\n case 'int128':\n return this.storeIntBytes(obj, 128, field);\n case 'int256':\n return this.storeIntBytes(obj, 256, field);\n case 'int512':\n return this.storeIntBytes(obj, 512, field);\n case 'string':\n return this.storeString(obj, field);\n case 'bytes':\n return this.storeBytes(obj, field);\n case 'double':\n return this.storeDouble(obj, field);\n case 'Bool':\n return this.storeBool(obj, field);\n case 'true':\n return;\n }\n\n if(Array.isArray(obj)) {\n if(type.substr(0, 6) === 'Vector') {\n this.writeInt(vector, field + '[id]');\n } else if(type.substr(0, 6) !== 'vector') {\n throw new Error('Invalid vector type ' + type);\n }\n\n const itemType = type.substr(7, type.length - 8); // for \"Vector\"\n this.writeInt(obj.length, field + '[count]');\n for(let i = 0; i < obj.length; ++i) {\n this.storeObject(obj[i], itemType, field + '[' + i + ']');\n }\n\n return true;\n } else if(type.substr(0, 6).toLowerCase() === 'vector') {\n throw new Error('Invalid vector object');\n }\n\n if(!isObject(obj)) {\n throw new Error('Invalid object for type ' + type);\n }\n\n const schema = this.mtproto ? Schema.MTProto : Schema.API;\n const predicate = obj['_'];\n let isBare = false;\n const constructorData: MTProtoConstructor = schema.constructors.find((c) => c.predicate === predicate);\n\n if(isBare = (type.charAt(0) === '%')) {\n type = type.substr(1);\n }\n\n if(!constructorData) {\n throw new Error('No predicate ' + predicate + ' found');\n }\n\n if(predicate === type) {\n isBare = true;\n }\n\n if(!isBare) {\n this.writeInt(constructorData.id, field + '[' + predicate + '][id]');\n }\n\n this.storeBody(obj, constructorData, field + '[' + predicate + ']');\n\n return constructorData.type;\n }\n\n private storeBody(obj: any, constructorData: MTProtoConstructor | MTProtoMethod, field: string) {\n const pFlags = obj.pFlags || obj; // * support pFlags, though am not expecting it to be there\n let flagsHandler: {[paramName: string]: {flags: number, offset?: number}};\n for(const param of constructorData.params) {\n let type = param.type;\n\n if(type.indexOf('?') !== -1) {\n const condType = type.split('?');\n const fieldBit = condType[0].split('.');\n\n // * commented to avoid using 'flags' property\n // if(!(obj[fieldBit[0]] & (1 << +fieldBit[1]))) {\n if(condType[1] === 'true' ? pFlags?.[param.name] : obj[param.name] !== undefined) {\n flagsHandler[fieldBit[0]].flags |= 1 << +fieldBit[1];\n } else {\n continue;\n }\n // }\n\n type = condType[1];\n }\n\n const isFlagHandler = type === '#';\n if(isFlagHandler) {\n (flagsHandler ??= {})[param.name] = {flags: 0};\n }\n\n const result = this.storeObject(\n isFlagHandler ? flagsHandler[param.name].flags : obj[param.name],\n type,\n field + '[' + param.name + ']'\n );\n\n if(isFlagHandler) {\n flagsHandler[param.name].offset = result as number;\n }\n }\n\n for(const paramName in flagsHandler) {\n const {flags, offset} = flagsHandler[paramName];\n this.intView[offset] = flags;\n }\n }\n}\n\nclass TLDeserialization {\n private offset = 0; // in bytes\n private override: {[key: string]: (result: any, field: string) => void};\n\n private buffer: ArrayBuffer;\n private intView: Int32Array;\n private byteView: Uint8Array;\n\n // this.debug =\n private mtproto: boolean = false;\n private debug: boolean;\n\n constructor(buffer: ArrayBuffer | Uint8Array, options: Partial<{override: any, mtproto: true, debug: true}> = {}) {\n // buffer = addPadding(buffer, 4, true); // fix 21.01.2020 for wss\n if(buffer instanceof ArrayBuffer) {\n this.buffer = buffer;\n this.intView = new Int32Array(buffer);\n this.byteView = new Uint8Array(this.buffer);\n } else {\n this.buffer = buffer.buffer;\n this.intView = new Int32Array(buffer.buffer, buffer.byteOffset, buffer.byteLength / 4);\n this.byteView = buffer;\n }\n\n this.override = options.override || {};\n this.mtproto = !!options.mtproto;\n this.debug = options.debug !== undefined ? options.debug : /* Modes.debug */false;\n }\n\n /* public setMtproto(mtproto: boolean) {\n this.mtproto = mtproto;\n } */\n\n private readInt(field: string) {\n // if(this.offset >= this.intView.length * 4) {\n if((this.byteView.length - this.offset) < 4) {\n console.error(this.byteView, this.offset);\n throw new Error('Nothing to fetch: ' + field);\n }\n\n const i = this.intView[this.offset / 4];\n // const i = new Uint32Array(this.byteView.buffer.slice(this.offset, this.offset + 4))[0];\n\n this.debug &&/* || field.includes('[dialog][read_outbox_max_id]') */\n console.log('<<<', i.toString(16), i, field,\n this.byteView.slice(this.offset - 16, this.offset + 16),\n bytesToHex(this.byteView.slice(this.offset - 16, this.offset + 16)));\n\n this.offset += 4;\n\n return i;\n }\n\n public fetchInt(field?: string) {\n return this.readInt((field || '') + ':int');\n }\n\n public fetchDouble(field?: string) {\n const buffer = new ArrayBuffer(8);\n const intView = new Int32Array(buffer);\n const doubleView = new Float64Array(buffer);\n\n intView[0] = this.readInt((field || '') + ':double[low]'),\n intView[1] = this.readInt((field || '') + ':double[high]');\n\n return doubleView[0];\n }\n\n // ! it should've been signed\n public fetchLong(field?: string): FetchLongAs {\n const iLow = this.readInt((field || '') + ':long[low]');\n const iHigh = this.readInt((field || '') + ':long[high]');\n\n let ulong = ulongFromInts(iHigh, iLow);\n if(/* !unsigned && */!this.mtproto) { // make it signed\n ulong = bigIntToSigned(ulong);\n }\n\n if(!this.mtproto) {\n if(safeBigInt.greaterOrEquals(ulong.abs())) {\n // @ts-ignore\n return ulong.toJSNumber();\n }\n }\n\n // @ts-ignore\n return ulong.toString(10);\n }\n\n public fetchBool(field?: string): boolean {\n const i = this.readInt((field || '') + ':bool');\n if(i === boolTrue) {\n return true;\n } else if(i === boolFalse) {\n return false;\n }\n\n this.offset -= 4;\n return this.fetchObject('Object', field);\n }\n\n public fetchString(field?: string): string {\n let len = this.byteView[this.offset++];\n\n if(len === 254) {\n len = this.byteView[this.offset++] |\n (this.byteView[this.offset++] << 8) |\n (this.byteView[this.offset++] << 16);\n }\n\n let sUTF8 = '';\n for(let i = 0; i < len; ++i) {\n sUTF8 += String.fromCharCode(this.byteView[this.offset++]);\n }\n\n // Padding\n while(this.offset % 4) {\n ++this.offset;\n }\n\n let s: string;\n try {\n s = decodeURIComponent(escape(sUTF8));\n } catch(e) {\n s = sUTF8;\n }\n\n this.debug && console.log('<<<', s, (field || '') + ':string');\n\n return s;\n }\n\n public fetchBytes(field?: string) {\n let len = this.byteView[this.offset++];\n\n if(len === 254) {\n len = this.byteView[this.offset++] |\n (this.byteView[this.offset++] << 8) |\n (this.byteView[this.offset++] << 16);\n }\n\n const bytes = this.byteView[sliceMethod](this.offset, this.offset + len);\n this.offset += len;\n\n // Padding\n while(this.offset % 4) {\n ++this.offset;\n }\n\n this.debug && console.log('<<<', bytesToHex(bytes), (field || '') + ':bytes');\n\n return bytes;\n }\n\n public fetchIntBytes(bits: number, typed: true, field?: string): Uint8Array;\n public fetchIntBytes(bits: number, typed?: false, field?: string): number[];\n public fetchIntBytes(bits: number, typed: boolean = true, field?: string) {\n if(bits % 32) {\n throw new Error('Invalid bits: ' + bits);\n }\n\n const len = bits / 8;\n if(typed) {\n const result = this.byteView[sliceMethod](this.offset, this.offset + len);\n this.offset += len;\n return result;\n }\n\n const bytes: number[] = new Array(len);\n for(let i = 0; i < len; ++i) {\n bytes[i] = this.byteView[this.offset++];\n }\n\n this.debug && console.log('<<<', bytesToHex(bytes), (field || '') + ':int' + bits);\n\n return bytes;\n }\n\n public fetchRawBytes(len: number | false, typed: true, field: string): Uint8Array;\n public fetchRawBytes(len: number | false, typed: false, field: string): number[];\n public fetchRawBytes(len: number | false, typed: boolean = true, field: string) {\n if(len === false) {\n len = this.readInt((field || '') + '_length');\n if(len > this.byteView.byteLength) {\n throw new Error('Invalid raw bytes length: ' + len + ', buffer len: ' + this.byteView.byteLength);\n }\n }\n\n if(typed) {\n const bytes = new Uint8Array(len);\n bytes.set(this.byteView[sliceMethod](this.offset, this.offset + len));\n this.offset += len;\n return bytes;\n }\n\n const bytes: number[] = new Array(len);\n for(let i = 0; i < len; ++i) {\n bytes[i] = this.byteView[this.offset++];\n }\n\n this.debug && console.log('<<<', bytesToHex(bytes), (field || ''));\n\n return bytes;\n }\n\n private fetchVector(type: string, field?: string) {\n const len = this.readInt(field + '[count]');\n const result: any[] = new Array(len);\n if(len > 0) {\n const itemType = type.substr(7, type.length - 8); // for \"Vector\"\n for(let i = 0; i < len; ++i) {\n result[i] = this.fetchObject(itemType, field + '[' + i + ']');\n }\n }\n\n return result;\n }\n\n public fetchObject(type: string, field?: string): any {\n switch(type) {\n case '#':\n case 'int':\n return this.fetchInt(field);\n case 'long':\n return this.fetchLong(field);\n case 'int128':\n return this.fetchIntBytes(128, true, field);\n case 'int256':\n return this.fetchIntBytes(256, true, field);\n case 'int512':\n return this.fetchIntBytes(512, true, field);\n case 'string':\n return this.fetchString(field);\n case 'bytes':\n return this.fetchBytes(field);\n case 'double':\n return this.fetchDouble(field);\n case 'Bool':\n return this.fetchBool(field);\n case 'true':\n return true;\n }\n\n field = field || type || 'Object';\n\n if(type.charAt(0) === 'v' && type.substr(1, 5) === 'ector') {\n return this.fetchVector(type, field);\n }\n\n const schema = this.mtproto ? Schema.MTProto : Schema.API;\n let constructorData: MTProtoConstructor = null;\n let fallback = false;\n\n if(type.charAt(0) === '%') {\n const checkType = type.substr(1);\n constructorData = schema.constructors.find((c) => c.type === checkType);\n if(!constructorData) {\n throw new Error('Constructor not found for type: ' + type);\n }\n }/* else if(type.charAt(0) >= 97 && type.charAt(0) <= 122) {\n constructorData = schema.constructors.find((c) => c.predicate === type);\n if(!constructorData) {\n throw new Error('Constructor not found for predicate: ' + type);\n }\n } */ else {\n const constructorCmp = this.readInt(field + '[id]');\n\n if(constructorCmp === gzipPacked) { // Gzip packed\n const compressed = this.fetchBytes(field + '[packed_string]');\n const uncompressed = gzipUncompress(compressed) as Uint8Array;\n const newDeserializer = new TLDeserialization(uncompressed); // rpc_result is packed here\n\n return newDeserializer.fetchObject(type, field);\n }\n\n if(constructorCmp === vector) {\n return this.fetchVector(type, field);\n }\n\n let index = schema.constructorsIndex;\n if(!index) {\n schema.constructorsIndex = index = {};\n for(let i = 0, len = schema.constructors.length; i < len; ++i) {\n index[schema.constructors[i].id] = i;\n }\n }\n\n const i = index[constructorCmp];\n if(i !== undefined) {\n constructorData = schema.constructors[i];\n }\n\n if(!constructorData && this.mtproto) {\n const schemaFallback = Schema.API;\n for(let i = 0, len = schemaFallback.constructors.length; i < len; ++i) {\n if(+schemaFallback.constructors[i].id === constructorCmp) {\n constructorData = schemaFallback.constructors[i];\n\n delete this.mtproto;\n fallback = true;\n break;\n }\n }\n }\n\n if(!constructorData) {\n console.error('Constructor not found:', constructorCmp);\n\n let int1: number, int2: number;\n try {\n int1 = this.fetchInt(field);\n int2 = this.fetchInt(field);\n } catch(err) {\n\n }\n\n throw new Error('Constructor not found: ' + constructorCmp + ' ' + int1 + ' ' + int2 + ' ' + field);\n }\n }\n\n const predicate = constructorData.predicate;\n\n const result: any = {'_': predicate};\n const overrideKey = (this.mtproto ? 'mt_' : '') + predicate;\n if(this.override[overrideKey]) {\n this.override[overrideKey](result, field + '[' + predicate + ']');\n } else {\n // * will use local flags storage to avoid passing 'flags' property anywhere\n let flagsHandler: {[name: string]: number} = {};\n for(let i = 0, len = constructorData.params.length; i < len; ++i) {\n const param = constructorData.params[i];\n let type = param.type;\n\n const isFlagHandler = type === '#';\n if(isFlagHandler) {\n result.pFlags ??= {};\n (flagsHandler ??= {})[param.name] = 0;\n }\n\n const isCond = type.indexOf('?') !== -1;\n if(isCond) {\n const condType = type.split('?');\n const fieldBit = condType[0].split('.');\n\n if(!(flagsHandler[fieldBit[0]] & (1 << +fieldBit[1]))) {\n continue;\n }\n\n type = condType[1];\n }\n\n const value = this.fetchObject(type, field + '[' + predicate + '][' + param.name + ']');\n\n if(isCond && type === 'true') {\n result.pFlags[param.name] = value;\n } else {\n (isFlagHandler ? flagsHandler : result)[param.name] = value;\n }\n }\n }\n\n if(fallback) {\n this.mtproto = true;\n }\n\n if(type === 'JSONValue') {\n return this.formatJSONValue(result);\n }\n\n return result;\n }\n\n private formatJSONValue(jsonValue: JSONValue): any {\n if(!jsonValue._) return jsonValue;\n switch(jsonValue._) {\n case 'jsonNull':\n return null;\n case 'jsonObject': {\n const out: any = {};\n const objectValues = jsonValue.value;\n for(let i = 0, length = objectValues.length; i < length; ++i) {\n const objectValue = objectValues[i];\n out[objectValue.key] = this.formatJSONValue(objectValue.value);\n }\n return out;\n }\n default:\n return jsonValue.value;\n }\n }\n\n public getOffset() {\n return this.offset;\n }\n\n public setOffset(offset: number) {\n this.offset = offset;\n }\n\n /* public fetchEnd() {\n if(this.offset !== this.byteView.length) {\n throw new Error('Fetch end with non-empty buffer');\n }\n\n return true;\n } */\n}\n\nMOUNT_CLASS_TO.TLDeserialization = TLDeserialization;\nMOUNT_CLASS_TO.TLSerialization = TLSerialization;\nexport {TLDeserialization, TLSerialization};\n","import randomize from '../array/randomize';\nimport bufferConcats from './bufferConcats';\n\nexport default function addPadding(\n bytes: T,\n blockSize: number = 16,\n zeroes?: boolean,\n blockSizeAsTotalLength = false,\n prepend = false\n): T {\n const len = (bytes as ArrayBuffer).byteLength || (bytes as Uint8Array).length;\n const needPadding = blockSizeAsTotalLength ? blockSize - len : blockSize - (len % blockSize);\n if(needPadding > 0 && needPadding < blockSize) {\n // //console.log('addPadding()', len, blockSize, needPadding);\n const padding = new Uint8Array(needPadding);\n if(zeroes) {\n for(let i = 0; i < needPadding; ++i) {\n padding[i] = 0;\n }\n } else {\n randomize(padding);\n }\n\n if(bytes instanceof ArrayBuffer) {\n return (prepend ? bufferConcats(padding, bytes) : bufferConcats(bytes, padding)).buffer as T;\n } else if(bytes instanceof Uint8Array) {\n return (prepend ? bufferConcats(padding, bytes) : bufferConcats(bytes, padding)) as T;\n } else {\n // @ts-ignore\n return (prepend ? [...padding].concat(bytes) : bytes.concat([...padding])) as T;\n }\n }\n\n return bytes;\n}\n","import addPadding from '../bytes/addPadding';\nimport bigInt from 'big-integer';\nimport {bigIntToBytes} from '../bigInt/bigIntConversion';\n\nexport default function longToBytes(sLong: string) {\n const bigIntBytes = bigIntToBytes(bigInt(sLong)).reverse();\n const bytes = addPadding(bigIntBytes, 8, true, false, false);\n // console.log('longToBytes', bytes, bigIntBytes);\n\n return bytes;\n}\n","export default function convertToUint8Array(bytes: Uint8Array | ArrayBuffer | number[] | string): Uint8Array {\n if(bytes instanceof Uint8Array) {\n return bytes;\n } else if(typeof(bytes) === 'string') {\n return new TextEncoder().encode(bytes);\n }\n\n return new Uint8Array(bytes);\n}\n","import bigInt from 'big-integer';\n\nexport default function sortLongsArray(arr: string[]) {\n return arr.map((long) => {\n return bigInt(long);\n }).sort((a, b) => {\n return a.compare(b);\n }).map((bigInt) => {\n return bigInt.toString(10);\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {TLDeserialization, TLSerialization} from './tl_utils';\nimport CryptoWorker from '../crypto/cryptoMessagePort';\nimport sessionStorage from '../sessionStorage';\nimport Schema from './schema';\nimport {NetworkerFactory} from './networkerFactory';\nimport {logger, LogTypes} from '../logger';\nimport {InvokeApiOptions} from '../../types';\nimport longToBytes from '../../helpers/long/longToBytes';\nimport MTTransport from './transports/transport';\nimport {nextRandomUint, randomLong} from '../../helpers/random';\nimport App from '../../config/app';\nimport DEBUG from '../../config/debug';\nimport Modes from '../../config/modes';\nimport noop from '../../helpers/noop';\nimport HTTP from './transports/http';\nimport type TcpObfuscated from './transports/tcpObfuscated';\nimport bigInt from 'big-integer';\nimport {ConnectionStatus} from './connectionStatus';\nimport ctx from '../../environment/ctx';\nimport bufferConcats from '../../helpers/bytes/bufferConcats';\nimport bytesCmp from '../../helpers/bytes/bytesCmp';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\nimport convertToUint8Array from '../../helpers/bytes/convertToUint8Array';\nimport isObject from '../../helpers/object/isObject';\nimport forEachReverse from '../../helpers/array/forEachReverse';\nimport sortLongsArray from '../../helpers/long/sortLongsArray';\nimport randomize from '../../helpers/array/randomize';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport pause from '../../helpers/schedulers/pause';\nimport {getEnvironment} from '../../environment/utils';\nimport {TimeManager} from './timeManager';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\n\n// console.error('networker included!', new Error().stack);\n\nexport type MTMessageOptions = InvokeApiOptions & Partial<{\n noResponse: boolean, // http_wait\n longPoll: boolean,\n\n canCleanup: boolean,\n notContentRelated: boolean, // https://core.telegram.org/mtproto/description#content-related-message\n noSchedule: boolean,\n // withResult: boolean,\n messageId: MTLong,\n\n resending: Set\n}>;\n\nexport type MTMessage = InvokeApiOptions & MTMessageOptions & {\n msg_id: MTLong,\n seq_no: number,\n body?: Uint8Array | number[],\n isAPI?: boolean,\n // only these four are important\n\n acked?: boolean,\n\n deferred?: CancellablePromise,\n\n container?: boolean,\n inner?: MTLong[],\n resending?: Set,\n\n humanReadable?: string,\n // sentTime?: number,\n\n // below - options\n\n notContentRelated?: boolean,\n noSchedule?: boolean,\n\n resultType?: string,\n\n longPoll?: boolean,\n noResponse?: boolean, // only with http (http_wait for longPoll)\n};\n\n// const TEST_RESEND_RPC: string = 'upload.file';\nconst TEST_RESEND_RPC: string = undefined;\nlet TESTING_RESENDING_RPC = !!TEST_RESEND_RPC;\nconst TEST_NO_ACKS = false;\nconst TEST_HTTP_DROPPING_REQUESTS = import.meta.env.VITE_MTPROTO_HAS_HTTP && false;\nconst HTTP_POLLING_NEEDED_FOR_FILES = true;\nconst CHECK_CONNECTION_MAX_PERIOD = TEST_HTTP_DROPPING_REQUESTS ? 0 : 15;\n\nconst DRAIN_TIMEOUT = 10000;\nconst delays: {\n [k in 'client' | 'file']: {\n disconnectDelayMin: number,\n disconnectDelayMax: number,\n pingInterval: number,\n pingMaxTime: number,\n connectionTimeout: number\n }\n} = {\n client: {\n disconnectDelayMin: 7,\n disconnectDelayMax: 20,\n pingInterval: 2000,\n pingMaxTime: 5,\n connectionTimeout: 5000\n },\n file: {\n disconnectDelayMin: 10,\n disconnectDelayMax: 24,\n pingInterval: 3000,\n pingMaxTime: 7,\n connectionTimeout: 7500\n }\n};\n// * don't clean these messages in `cleanupSent`,\n// * can ask the server to resend the response\nconst RESEND_OPTIONS: MTMessageOptions = {notContentRelated: true, noSchedule: true};\nconst HTTP_WAIT_OPTIONS: MTMessageOptions = {notContentRelated: true, canCleanup: true, longPoll: true};\nlet invokeAfterMsgConstructor: number;\nlet networkerTempId = 0;\n\nexport default class MTPNetworker {\n private authKeyUint8: Uint8Array;\n\n public isFileNetworker: boolean;\n private isFileUpload: boolean;\n private isFileDownload: boolean;\n\n private lastServerMessages: Set = new Set();\n\n private sentMessages: {\n [msgId: MTLong]: MTMessage\n } = {};\n\n private pendingMessages: {[msgId: MTLong]: number} = {};\n private pendingAcks: Array = [];\n private pendingResendReq: MTLong[] = [];\n // private pendingResendAnsReq: MTLong[] = [];\n private sentResendReq: Map = new Map(); // * server answer message id -> msg_resend_req message\n public connectionInited: boolean;\n\n private nextReqTimeout: number;\n private nextReq: number = 0;\n\n // HTTP-only\n private longPollInterval: number;\n private longPollPending: number;\n private checkConnectionRetryAt: number;\n private checkConnectionTimeout: number;\n private checkConnectionPeriod = 0;\n private sleepAfter: number;\n private offline = false;\n private sendingLongPoll: boolean;\n\n private seqNo: number;\n private prevSessionId: Uint8Array;\n private sessionId: Uint8Array;\n private serverSalt: Uint8Array;\n\n private lastResendReq: {\n reqMsgId: MTLong,\n msgIds: MTPNetworker['pendingResendReq']\n };\n // private lastResendAnsReq: MTPNetworker['lastResendReq'];\n\n private name: string;\n private log: ReturnType;\n\n public isOnline = false;\n private status: ConnectionStatus = ConnectionStatus.Closed;\n private lastResponseTime = 0;\n\n private debug = Modes.debug;\n\n public activeRequests = 0;\n\n public onDrain: () => void;\n private onDrainTimeout: number;\n\n public transport: MTTransport;\n\n // WS-only\n private pingDelayDisconnectDeferred: CancellablePromise;\n // private pingPromise: Promise;\n // private pingInterval: number;\n private lastPingTime: number;\n // private lastPingRealTime: number;\n private lastPingStartTime: number;\n private lastPingDelayDisconnectId: string;\n\n // public onConnectionStatusChange: (online: boolean) => void;\n\n // private debugRequests: Array<{before: Uint8Array, after: Uint8Array}> = [];\n\n private delays: typeof delays[keyof typeof delays];\n // private getNewTimeOffset: boolean;\n\n constructor(\n private networkerFactory: NetworkerFactory,\n private timeManager: TimeManager,\n public dcId: number,\n private authKey: Uint8Array,\n private authKeyId: Uint8Array,\n serverSalt: Uint8Array,\n options: InvokeApiOptions = {}\n ) {\n this.authKeyUint8 = convertToUint8Array(this.authKey);\n this.serverSalt = convertToUint8Array(serverSalt);\n\n this.isFileUpload = !!options.fileUpload;\n this.isFileDownload = !!options.fileDownload;\n this.isFileNetworker = this.isFileUpload || this.isFileDownload;\n this.delays = this.isFileNetworker ? delays.file : delays.client;\n\n const suffix = this.isFileUpload ? '-U' : this.isFileDownload ? '-D' : '';\n this.name = 'NET-' + dcId + suffix;\n // this.log = logger(this.name, this.upload && this.dcId === 2 ? LogLevels.debug | LogLevels.warn | LogLevels.log | LogLevels.error : LogLevels.error);\n this.log = logger(\n this.name + (suffix ? '' : '-C') + '-' + networkerTempId++,\n LogTypes.Log | LogTypes.Error | LogTypes.Warn | (this.debug ? LogTypes.Debug : 0)\n );\n this.log('constructor'/* , this.authKey, this.authKeyID, this.serverSalt */);\n\n // Test resend after bad_server_salt\n /* if(this.dcId === 2 && this.upload) {\n //timeManager.applyServerTime((Date.now() / 1000 - 86400) | 0);\n this.serverSalt[0] = 0;\n } */\n\n this.updateSession();\n\n // if(!NetworkerFactory.offlineInited) {\n // NetworkerFactory.offlineInited = true;\n // /* rootScope.offline = true\n // rootScope.offlineConnecting = true */\n // }\n }\n\n private updateSession() {\n this.seqNo = 0;\n this.prevSessionId = this.sessionId;\n this.sessionId = randomize(new Uint8Array(8));\n }\n\n private updateSentMessage(sentMessageId: MTLong) {\n const log = this.log.bindPrefix('updateSentMessage');\n const sentMessage = this.sentMessages[sentMessageId];\n if(!sentMessage) {\n log.error('no sentMessage', sentMessageId);\n return false;\n }\n\n log('updating', sentMessage);\n\n delete this.sentMessages[sentMessageId];\n\n if(sentMessage.container) {\n let deleted = false;\n forEachReverse(sentMessage.inner, (innerSentMessageId, idx) => {\n const innerSentMessage = this.updateSentMessage(innerSentMessageId);\n if(!innerSentMessage) {\n sentMessage.inner.splice(idx, 1);\n deleted = true;\n } else {\n sentMessage.inner[idx] = innerSentMessage.msg_id;\n }\n });\n\n if(deleted && !sentMessage.inner.length) {\n log('deleted container', sentMessage);\n return;\n }\n }\n\n sentMessage.msg_id = this.timeManager.generateId();\n sentMessage.seq_no = this.generateSeqNo(sentMessage.notContentRelated);\n\n log('old and new', sentMessageId, sentMessage.msg_id);\n\n this.sentMessages[sentMessage.msg_id] = sentMessage;\n\n return sentMessage;\n }\n\n private generateSeqNo(notContentRelated?: boolean) {\n let seqNo = this.seqNo * 2;\n\n if(!notContentRelated) {\n seqNo++;\n this.seqNo++;\n }\n\n return seqNo;\n }\n\n public wrapMtpCall(method: string, params: any, options: MTMessageOptions) {\n const serializer = new TLSerialization({mtproto: true});\n\n serializer.storeMethod(method, params);\n\n const messageId = this.timeManager.generateId();\n const seqNo = this.generateSeqNo();\n const message: MTMessage = {\n msg_id: messageId,\n seq_no: seqNo,\n body: serializer.getBytes(true),\n humanReadable: method\n };\n\n if(Modes.debug) {\n this.log('MT call', method, params, messageId, seqNo);\n }\n\n return this.pushMessage(message, options);\n }\n\n public wrapMtpMessage(object: any, options: MTMessageOptions) {\n const serializer = new TLSerialization({mtproto: true});\n serializer.storeObject(object, 'Object');\n\n const messageId = this.timeManager.generateId();\n const seqNo = this.generateSeqNo(options.notContentRelated);\n const message: MTMessage = {\n msg_id: messageId,\n seq_no: seqNo,\n body: serializer.getBytes(true),\n humanReadable: object._\n };\n\n if(Modes.debug) {\n this.log('MT message', object, messageId, seqNo);\n }\n\n return this.pushMessage(message, options);\n }\n\n public wrapApiCall(method: string, params: any = {}, options: InvokeApiOptions = {}) {\n const log = this.log.bindPrefix('wrapApiCall');\n const serializer = new TLSerialization(options);\n\n if(!this.connectionInited) { // this will call once for each new session\n log('adding invokeWithLayer');\n\n const invokeWithLayer = Schema.API.methods.find((m) => m.method === 'invokeWithLayer');\n if(!invokeWithLayer) throw new Error('no invokeWithLayer!');\n serializer.storeInt(+invokeWithLayer.id, 'invokeWithLayer');\n\n serializer.storeInt(Schema.layer, 'layer');\n\n const initConnection = Schema.API.methods.find((m) => m.method === 'initConnection');\n if(!initConnection) throw new Error('no initConnection!');\n\n serializer.storeInt(+initConnection.id, 'initConnection');\n serializer.storeInt(0x0, 'flags');\n serializer.storeInt(App.id, 'api_id');\n serializer.storeString(getEnvironment().USER_AGENT || 'Unknown UserAgent', 'device_model');\n serializer.storeString(navigator.platform || 'Unknown Platform', 'system_version');\n serializer.storeString(App.version + (App.isMainDomain ? ' ' + App.suffix : ''), 'app_version');\n serializer.storeString(navigator.language || 'en', 'system_lang_code');\n serializer.storeString(App.langPack, 'lang_pack');\n serializer.storeString(this.networkerFactory.language, 'lang_code');\n // serializer.storeInt(0x0, 'proxy');\n /* serializer.storeMethod('initConnection', {\n 'flags': 0,\n 'api_id': App.id,\n 'device_model': navigator.userAgent || 'Unknown UserAgent',\n 'system_version': navigator.platform || 'Unknown Platform',\n 'app_version': App.version,\n 'system_lang_code': navigator.language || 'en',\n 'lang_pack': '',\n 'lang_code': navigator.language || 'en'\n }); */\n }\n\n if(options.afterMessageId) {\n if(invokeAfterMsgConstructor === undefined) {\n const m = Schema.API.methods.find((m) => m.method === 'invokeAfterMsg');\n invokeAfterMsgConstructor = m ? +m.id : 0;\n }\n\n if(invokeAfterMsgConstructor) {\n log('store invokeAfterMsg');\n serializer.storeInt(invokeAfterMsgConstructor, 'invokeAfterMsg');\n serializer.storeLong(options.afterMessageId, 'msg_id');\n } else {\n log.error('no invokeAfterMsg');\n }\n }\n\n options.resultType = serializer.storeMethod(method, params);\n\n const messageId = this.timeManager.generateId();\n const seqNo = this.generateSeqNo();\n const message: MTMessage = {\n msg_id: messageId,\n seq_no: seqNo,\n body: serializer.getBytes(true),\n isAPI: true,\n humanReadable: method\n };\n\n log('call', method, message, params, options);\n\n return this.pushMessage(message, options);\n }\n\n public changeTransport(transport?: MTTransport) {\n const oldTransport = this.transport;\n if(oldTransport) {\n oldTransport.destroy();\n\n this.clearNextReq();\n\n this.connectionInited = false;\n\n if(import.meta.env.VITE_MTPROTO_HAS_HTTP) {\n if(this.longPollInterval) {\n clearInterval(this.longPollInterval);\n this.longPollInterval = undefined;\n }\n\n this.clearCheckConnectionTimeout();\n }\n }\n\n this.log('change transport', transport, oldTransport);\n\n if(import.meta.env.VITE_MTPROTO_HAS_WS) {\n this.clearPingDelayDisconnect();\n\n // if(this.pingInterval !== undefined) {\n // clearInterval(this.pingInterval);\n // this.pingInterval = undefined;\n // }\n\n // this.clearPing();\n }\n\n this.transport = transport;\n if(!transport) {\n return;\n }\n\n transport.networker = this;\n\n if(import.meta.env.VITE_MTPROTO_HAS_HTTP) {\n if(!import.meta.env.VITE_MTPROTO_HAS_WS || transport instanceof HTTP) {\n if(!this.isFileNetworker || HTTP_POLLING_NEEDED_FOR_FILES) {\n this.longPollInterval = ctx.setInterval(this.checkLongPoll, 10000);\n this.checkLongPoll();\n }\n\n this.checkConnection('changed transport');\n }\n }\n\n if(import.meta.env.VITE_MTPROTO_HAS_WS) {\n // * handle outcoming dead socket, server will close the connection\n if((transport as TcpObfuscated).connection) {\n // this.sendPingDelayDisconnect();\n\n if(transport.connected) {\n this.setConnectionStatus(ConnectionStatus.Connected);\n }\n\n // this.pingInterval = ctx.setInterval(this.sendPing, PING_INTERVAL);\n // this.sendPing();\n }\n }\n\n this.resend();\n }\n\n public destroy() {\n this.log('destroy');\n }\n\n public forceReconnectTimeout() {\n if((this.transport as TcpObfuscated).reconnect) {\n (this.transport as TcpObfuscated).reconnect();\n } else {\n this.resend();\n }\n }\n\n public forceReconnect() {\n if((this.transport as TcpObfuscated).forceReconnect) {\n (this.transport as TcpObfuscated).forceReconnect();\n } else {\n this.checkConnection('force reconnect');\n }\n }\n\n /* private clearPing() {\n if(this.pingPromise) {\n this.pingPromise = undefined;\n }\n\n this.lastPingTime = undefined;\n }\n\n private sendPing = () => {\n // return;\n\n // if(!(this.transport as TcpObfuscated).connected) {\n // this.clearPing();\n // return;\n // }\n\n if(this.pingPromise) {\n return;\n }\n\n const startTime = Date.now();\n this.log('sendPing: ping', startTime);\n const promise = this.pingPromise = this.wrapMtpCall('ping', {\n ping_id: randomLong()\n }, {\n notContentRelated: true\n }).then(() => {\n const elapsedTime = Date.now() - startTime;\n this.lastPingTime = elapsedTime / 1000;\n this.log('sendPing: pong', elapsedTime);\n\n setTimeout(() => {\n if(this.pingPromise !== promise) {\n return;\n }\n\n this.pingPromise = undefined;\n this.sendPing();\n }, Math.max(0, PING_INTERVAL - elapsedTime));\n });\n }; */\n\n private clearPingDelayDisconnect() {\n const deferred = this.pingDelayDisconnectDeferred;\n this.pingDelayDisconnectDeferred = undefined;\n this.lastPingDelayDisconnectId = undefined;\n\n if(deferred) {\n deferred.reject();\n }\n }\n\n private sendPingDelayDisconnect = () => {\n // return;\n\n if(this.pingDelayDisconnectDeferred || !this.transport || !this.transport.connected) return;\n\n /* if(!this.isOnline) {\n if((this.transport as TcpObfuscated).connected) {\n (this.transport as TcpObfuscated).connection.close();\n }\n\n return;\n } */\n\n const deferred = this.pingDelayDisconnectDeferred = deferredPromise();\n const delays = this.delays;\n const pingMaxTime = this.delays.pingMaxTime;\n const lastPingTime = Math.min(this.lastPingTime ?? 0, pingMaxTime);\n const disconnectDelay = Math.round(delays.disconnectDelayMin + lastPingTime / pingMaxTime * (delays.disconnectDelayMax - delays.disconnectDelayMin));\n const timeoutTime = disconnectDelay * 1000;\n const startTime = this.lastPingStartTime = Date.now();\n const pingId = this.lastPingDelayDisconnectId = randomLong();\n const options: MTMessageOptions = {notContentRelated: true, canCleanup: true};\n this.wrapMtpCall('ping_delay_disconnect', {\n ping_id: pingId,\n disconnect_delay: disconnectDelay\n }, options);\n\n const log = this.log.bindPrefix('sendPingDelayDisconnect');\n log.debug(`ping, timeout=${timeoutTime}, lastPingTime=${this.lastPingTime}, msgId=${options.messageId}, pingId=${pingId}`);\n const rejectTimeout = ctx.setTimeout(deferred.reject.bind(deferred), timeoutTime);\n\n const onResolved = (reason: string) => {\n clearTimeout(rejectTimeout);\n const elapsedTime = Date.now() - startTime;\n this.lastPingTime = elapsedTime / 1000;\n log.debug(`pong, reason='${reason}', time=${lastPingTime}, msgId=${options.messageId}`);\n if(elapsedTime > timeoutTime) {\n throw undefined;\n } else {\n return pause(Math.max(0, this.delays.pingInterval - elapsedTime/* timeoutTime - elapsedTime - PING_INTERVAL */));\n }\n };\n\n const onTimeout = () => {\n clearTimeout(rejectTimeout);\n const transport = this.transport as TcpObfuscated;\n if(this.pingDelayDisconnectDeferred !== deferred || !transport?.connection) {\n return;\n }\n\n log.error('catch, closing connection', this.lastPingTime, options.messageId);\n transport.connection.close();\n };\n\n const onFinally = () => {\n if(this.pingDelayDisconnectDeferred !== deferred) {\n return;\n }\n\n this.pingDelayDisconnectDeferred = undefined;\n this.sendPingDelayDisconnect();\n };\n\n deferred\n .then(onResolved)\n .catch(onTimeout)\n .finally(onFinally);\n };\n\n private checkLongPoll = () => {\n if(!import.meta.env.VITE_MTPROTO_HAS_HTTP) {\n return;\n }\n\n if(this.isFileNetworker && !HTTP_POLLING_NEEDED_FOR_FILES) {\n return;\n }\n\n const log = this.log.bindPrefix('checkLongPoll');\n\n if(\n this.offline ||\n (this.longPollPending && Date.now() < this.longPollPending) ||\n this.isStopped()\n ) {\n log('no lp this time');\n return;\n }\n\n log('check', this.longPollPending);\n\n const isClean = this.cleanupSent();\n sessionStorage.get('dc').then((baseDcId) => {\n if(isClean && (\n baseDcId !== this.dcId ||\n (this.sleepAfter && Date.now() > this.sleepAfter)\n )) {\n log.warn('send long-poll for DC is delayed', this.sleepAfter);\n return;\n }\n\n this.sendLongPoll();\n });\n };\n\n private sendLongPoll() {\n if(!import.meta.env.VITE_MTPROTO_HAS_HTTP) {\n return;\n }\n\n const log = this.log.bindPrefix('sendLongPoll');\n if(this.sendingLongPoll) {\n log('already sending');\n return;\n }\n\n this.sendingLongPoll = true;\n const maxWait = 25000;\n\n this.longPollPending = Date.now() + maxWait;\n log('send', this.longPollPending);\n\n this.wrapMtpCall('http_wait', {\n max_delay: 500,\n wait_after: 150,\n max_wait: maxWait\n }, {\n ...HTTP_WAIT_OPTIONS,\n noResponse: true\n }).then(() => {\n log('success');\n this.longPollPending = undefined;\n setTimeout(this.checkLongPoll, 0);\n }, (error: ErrorEvent) => {\n log('failed', error);\n }).finally(() => {\n this.sendingLongPoll = undefined;\n });\n }\n\n private checkConnection = (event: Event | string) => {\n if(!import.meta.env.VITE_MTPROTO_HAS_HTTP) {\n return;\n }\n\n const log = this.log.bindPrefix('checkConnection');\n\n log('check connection', event);\n this.clearCheckConnectionTimeout();\n\n if(!this.transport) {\n log.warn('no transport for checkConnection');\n return;\n }\n\n const serializer = new TLSerialization({mtproto: true});\n const pingId = randomLong();\n\n serializer.storeMethod('ping', {\n ping_id: pingId\n });\n\n const pingMessage = {\n msg_id: this.timeManager.generateId(),\n seq_no: this.generateSeqNo(true),\n body: serializer.getBytes(true)\n };\n\n if(this.offline) {\n this.setConnectionStatus(ConnectionStatus.Connecting);\n }\n\n this.sendEncryptedRequest(pingMessage).then(() => {\n log('got ping');\n this.toggleOffline(false);\n }, () => {\n log('still error, delay', this.checkConnectionPeriod * 1000);\n this.checkConnectionTimeout = ctx.setTimeout(() => this.checkConnection('from failed checkConnection request'), this.checkConnectionPeriod * 1000 | 0);\n this.checkConnectionPeriod = Math.min(CHECK_CONNECTION_MAX_PERIOD, this.checkConnectionPeriod * 1.5);\n });\n };\n\n private clearCheckConnectionTimeout() {\n if(!import.meta.env.VITE_MTPROTO_HAS_HTTP) {\n return;\n }\n\n if(this.checkConnectionTimeout) {\n clearTimeout(this.checkConnectionTimeout);\n this.checkConnectionTimeout = undefined;\n }\n }\n\n private toggleOffline(offline: boolean) {\n if(!import.meta.env.VITE_MTPROTO_HAS_HTTP) {\n return;\n }\n\n if(this.offline !== offline) {\n this.offline = offline;\n\n this.clearCheckConnectionTimeout();\n if(offline) {\n this.clearNextReq();\n\n if(this.checkConnectionPeriod < 1.5) {\n this.checkConnectionPeriod = 0;\n }\n\n const delay = this.checkConnectionPeriod * 1000 | 0;\n this.checkConnectionRetryAt = Date.now() + delay;\n this.setConnectionStatus(ConnectionStatus.Closed, this.checkConnectionRetryAt);\n this.checkConnectionTimeout = ctx.setTimeout(() => this.checkConnection('from toggleOffline'), delay);\n this.checkConnectionPeriod = Math.min(CHECK_CONNECTION_MAX_PERIOD, (1 + this.checkConnectionPeriod) * 1.5);\n\n if(!import.meta.env.VITE_MTPROTO_WORKER) {\n document.body.addEventListener('online', this.checkConnection, false);\n document.body.addEventListener('focus', this.checkConnection, false);\n }\n } else {\n this.onTransportOpen();\n this.checkLongPoll();\n\n if(!import.meta.env.VITE_MTPROTO_WORKER) {\n document.body.removeEventListener('online', this.checkConnection);\n document.body.removeEventListener('focus', this.checkConnection);\n }\n }\n } else {\n this.setConnectionStatus(\n offline ? ConnectionStatus.Closed : ConnectionStatus.Connected,\n offline ? this.checkConnectionRetryAt : undefined\n );\n }\n }\n\n private handleSentEncryptedRequestHTTP(promise: ReturnType, message: MTMessage, noResponseMsgs: string[]) {\n if(!import.meta.env.VITE_MTPROTO_HAS_HTTP) {\n return;\n }\n // let timeout = setTimeout(() => {\n // this.log.error('handleSentEncryptedRequestHTTP timeout', promise, message, noResponseMsgs);\n // }, 5e3);\n\n promise.then(async(result) => {\n this.toggleOffline(false);\n\n await this.onTransportData(result);\n\n this.checkLongPoll();\n this.checkConnectionPeriod = Math.max(1.1, Math.sqrt(this.checkConnectionPeriod));\n\n return true;\n }, (error) => {\n this.log.error('encrypted request failed', error, message);\n\n this.pushResend(message.msg_id);\n this.toggleOffline(true);\n\n return false;\n }).then((shouldResolve) => {\n // clearTimeout(timeout);\n const sentMessages = this.sentMessages;\n noResponseMsgs.forEach((msgId) => {\n const sentMessage = sentMessages[msgId];\n if(sentMessage) {\n const {deferred} = sentMessage;\n delete sentMessages[msgId];\n delete this.pendingMessages[msgId];\n shouldResolve ? deferred.resolve() : deferred.reject();\n }\n });\n });\n }\n\n // тут можно сделать таймаут и выводить дисконнект\n private pushMessage(message: MTMessage, options: MTMessageOptions) {\n let promise: CancellablePromise;\n if(!options.notContentRelated || options.noResponse) {\n promise = deferredPromise();\n }\n\n this.sentMessages[message.msg_id] = Object.assign(\n message,\n options,\n promise ? {deferred: promise} : undefined\n );\n\n this.pendingMessages[message.msg_id] = 0;\n\n if(!options.noSchedule) {\n this.scheduleRequest();\n }\n\n if(isObject(options)) {\n options.messageId = message.msg_id;\n }\n\n return promise;\n }\n\n public attachPromise(promise: Promise, message: MTMessage) {\n const canIncrement = true;\n const timeout = setTimeout(() => {\n if(this.lastResponseTime && (Date.now() - this.lastResponseTime) < this.delays.connectionTimeout) {\n return;\n }\n\n this.log.error('timeout', message);\n if(this.isOnline) {\n this.setConnectionStatus(ConnectionStatus.TimedOut);\n }\n\n /* this.getEncryptedOutput(message).then((bytes) => {\n this.log.error('timeout encrypted', bytes);\n }); */\n }, this.delays.connectionTimeout);\n\n promise.catch(noop).finally(() => {\n clearTimeout(timeout);\n this.setConnectionStatus(ConnectionStatus.Connected);\n\n if(canIncrement) {\n --this.activeRequests;\n this.setDrainTimeout();\n }\n });\n\n if(canIncrement) {\n ++this.activeRequests;\n if(this.onDrainTimeout) {\n clearTimeout(this.onDrainTimeout);\n this.onDrainTimeout = undefined;\n }\n }\n }\n\n public setDrainTimeout() {\n if(!this.activeRequests && this.onDrain && !this.onDrainTimeout) {\n this.onDrainTimeout = ctx.setTimeout(() => {\n this.onDrainTimeout = undefined;\n this.log('drain');\n this.onDrain();\n }, DRAIN_TIMEOUT);\n }\n }\n\n public setConnectionStatus(status: ConnectionStatus, retryAt?: number, scheduleRequestIfOnline = true) {\n const isOnline = status === ConnectionStatus.Connected;\n const willChange = this.status !== status;\n this.isOnline = isOnline;\n this.status = status;\n\n if(willChange) {\n if(this.networkerFactory.onConnectionStatusChange) {\n this.networkerFactory.onConnectionStatusChange({\n _: 'networkerStatus',\n status,\n dcId: this.dcId,\n name: this.name,\n isFileNetworker: this.isFileNetworker,\n isFileDownload: this.isFileDownload,\n isFileUpload: this.isFileUpload,\n retryAt\n });\n }\n\n if(this.isOnline && scheduleRequestIfOnline) {\n this.scheduleRequest();\n }\n\n if((this.transport as TcpObfuscated)?.connection) {\n this.clearPingDelayDisconnect();\n this.sendPingDelayDisconnect();\n }\n\n // this.getNewTimeOffset = true;\n }\n /* if(this.onConnectionStatusChange) {\n this.onConnectionStatusChange(this.isOnline);\n } */\n }\n\n public onTransportOpen() {\n this.setConnectionStatus(ConnectionStatus.Connected);\n this.cleanupSent();\n if(!TEST_HTTP_DROPPING_REQUESTS) this.resend();\n }\n\n private pushResend(messageId: MTLong, delay = 100) {\n const log = this.log.bindPrefix('pushResend');\n const sentMessage = this.sentMessages[messageId];\n if(!sentMessage) {\n log.warn('no sentMessage', messageId);\n return;\n }\n\n const value = delay ? Date.now() + delay : 0;\n if(sentMessage.container) {\n for(const innerMsgId of sentMessage.inner) {\n this.pushResend(innerMsgId, delay);\n }\n\n log('deleting container', messageId);\n delete this.sentMessages[messageId];\n } else {\n if(\n this.pendingMessages[messageId] !== undefined &&\n this.pendingMessages[messageId] <= value\n ) {\n log('already pending', messageId);\n return;\n }\n\n this.pendingMessages[messageId] = value;\n }\n\n if(sentMessage.acked) {\n log.error('acked message?', sentMessage);\n }\n\n log('push', sentMessage, delay);\n\n this.scheduleRequest(delay);\n }\n\n // * correct, fully checked\n private async getMsgKey(dataWithPadding: Uint8Array, isOut: boolean) {\n const x = isOut ? 0 : 8;\n const msgKeyLargePlain = bufferConcats(this.authKeyUint8.subarray(88 + x, 88 + x + 32), dataWithPadding);\n\n const msgKeyLarge = await CryptoWorker.invokeCrypto('sha256', msgKeyLargePlain);\n const msgKey = new Uint8Array(msgKeyLarge).subarray(8, 24);\n return msgKey;\n };\n\n // * correct, fully checked\n private async getAesKeyIv(msgKey: Uint8Array, isOut: boolean): Promise<[Uint8Array, Uint8Array]> {\n const x = isOut ? 0 : 8;\n const sha2aText = new Uint8Array(52);\n const sha2bText = new Uint8Array(52);\n const promises: Array> = [];\n\n sha2aText.set(msgKey, 0);\n sha2aText.set(this.authKeyUint8.subarray(x, x + 36), 16);\n promises.push(CryptoWorker.invokeCrypto('sha256', sha2aText));\n\n sha2bText.set(this.authKeyUint8.subarray(40 + x, 40 + x + 36), 0);\n sha2bText.set(msgKey, 36);\n promises.push(CryptoWorker.invokeCrypto('sha256', sha2bText));\n\n const results = await Promise.all(promises);\n\n const aesKey = new Uint8Array(32);\n const aesIv = new Uint8Array(32);\n const sha2a = new Uint8Array(results[0]);\n const sha2b = new Uint8Array(results[1]);\n\n aesKey.set(sha2a.subarray(0, 8));\n aesKey.set(sha2b.subarray(8, 24), 8);\n aesKey.set(sha2a.subarray(24, 32), 24);\n\n aesIv.set(sha2b.subarray(0, 8));\n aesIv.set(sha2a.subarray(8, 24), 8);\n aesIv.set(sha2b.subarray(24, 32), 24);\n\n return [aesKey, aesIv];\n }\n\n public isStopped() {\n return this.networkerFactory.akStopped && !this.isFileNetworker;\n }\n\n private performScheduledRequest() {\n const log = this.log.bindPrefix('performScheduledRequest');\n if(this.isStopped()) {\n log('is stopped');\n return false;\n }\n\n let lengthOverflow = false;\n let hasApiCall: boolean, hasHttpWait: boolean;\n if(import.meta.env.VITE_MTPROTO_HAS_HTTP) {\n hasApiCall = hasHttpWait = false;\n }\n\n if(this.pendingAcks.length) {\n const ackMsgIds = this.pendingAcks.splice(0, Math.min(8192, this.pendingAcks.length));\n\n this.wrapMtpMessage({\n _: 'msgs_ack',\n msg_ids: ackMsgIds\n }, {\n canCleanup: true,\n notContentRelated: true,\n noSchedule: true\n });\n\n log.debug('acking messages', ackMsgIds);\n\n if(this.pendingAcks.length) {\n lengthOverflow = true;\n }\n }\n\n const pendingResendReqLength = this.pendingResendReq.length;\n if(pendingResendReqLength) {\n const msgIds = this.pendingResendReq.splice(0, Math.min(8192, pendingResendReqLength));\n const options: MTMessageOptions = {...RESEND_OPTIONS, resending: new Set(msgIds)};\n this.wrapMtpMessage({\n _: 'msg_resend_req',\n msg_ids: msgIds\n }, options);\n\n const sentMessage = this.sentMessages[options.messageId];\n msgIds.forEach((msgId) => {\n this.sentResendReq.set(msgId, sentMessage);\n });\n\n log.debug('resending requests', options.messageId, msgIds);\n\n if(import.meta.env.VITE_MTPROTO_HAS_HTTP) {\n hasApiCall = true;\n }\n\n if(this.pendingResendReq.length) {\n lengthOverflow = true;\n }\n /* this.lastResendReq = {\n reqMsgId: options.messageId,\n msgIds: msgIds\n }; */\n\n // this.pendingResendReq.length = 0;\n }\n\n // if(this.pendingResendAnsReq.length) {\n // const options: MTMessageOptions = {...RESEND_OPTIONS};\n // const msgIds = this.pendingResendAnsReq.slice();\n // this.wrapMtpMessage({\n // _: 'msg_resend_ans_req',\n // msg_ids: msgIds\n // }, options);\n\n // this.log('resend: requesting answers', options.messageId, msgIds);\n // this.lastResendAnsReq = {\n // reqMsgId: options.messageId,\n // msgIds: msgIds\n // };\n\n // // this.pendingResendAnsReq.length = 0;\n // }\n\n let outMessage: MTMessage;\n const messages: typeof outMessage[] = [];\n\n // const currentTime = Date.now();\n let messagesByteLen = 0;\n\n // * Сюда никогда не попадут контейнеры, так как их не будет в pendingMessages\n const keys = sortLongsArray(Object.keys(this.pendingMessages));\n for(const messageId of keys) {\n const message = this.sentMessages[messageId];\n if(message?.body) {\n const messageByteLength = message.body.length + 32;\n\n if((messagesByteLen + messageByteLength) > 655360) { // 640 Kb\n log.warn('length overflow', message, messages);\n lengthOverflow = true;\n\n if(outMessage) { // if it's not a first message\n break;\n }\n }\n\n // message.sentTime = time;\n messages.push(message);\n messagesByteLen += messageByteLength;\n\n if(import.meta.env.VITE_MTPROTO_HAS_HTTP) {\n if(message.isAPI) {\n hasApiCall = true;\n } else if(message.longPoll) {\n hasHttpWait = true;\n }\n }\n\n outMessage = message;\n } else {\n log.error('no body', message, messageId);\n }\n\n delete this.pendingMessages[messageId];\n }\n\n if(import.meta.env.VITE_MTPROTO_HAS_HTTP) {\n if(!import.meta.env.VITE_MTPROTO_HAS_WS || this.transport instanceof HTTP) {\n if(hasApiCall && !hasHttpWait) {\n const options: MTMessageOptions = {...HTTP_WAIT_OPTIONS, noSchedule: true};\n this.wrapMtpCall('http_wait', {\n max_delay: 500,\n wait_after: 150,\n max_wait: 3000\n }, options);\n\n const message = this.sentMessages[options.messageId];\n messages.push(message);\n delete this.pendingMessages[message.msg_id]\n log('appended http_wait', message.msg_id);\n }\n }\n }\n\n if(!messages.length) {\n log('no messages to send');\n return;\n }\n\n let noResponseMsgs: Array;\n if(import.meta.env.VITE_MTPROTO_HAS_HTTP) {\n noResponseMsgs = messages.filter((message) => message.noResponse).map((message) => message.msg_id);\n }\n\n if(messages.length > 1) {\n // log.debug('packing messages into container', messagesByteLen, messages.map((m) => m.msg_id));\n const container = this.generateContainerMessage(messagesByteLen, messages);\n outMessage = container.messageWithBody;\n\n this.sentMessages[outMessage.msg_id] = container.message;\n } else {\n this.sentMessages[outMessage.msg_id] = outMessage;\n }\n\n const promise = this.sendEncryptedRequest(outMessage);\n\n if(import.meta.env.VITE_MTPROTO_HAS_HTTP) {\n if(!import.meta.env.VITE_MTPROTO_HAS_WS || this.transport instanceof HTTP) {\n this.handleSentEncryptedRequestHTTP(promise, outMessage, noResponseMsgs);\n }\n }\n\n this.cleanupSent();\n\n if(lengthOverflow) {\n log('scheduling next request because of overflow');\n this.scheduleRequest();\n }\n }\n\n private generateContainerMessage(messagesByteLen: number, messages: MTMessage[]) {\n const container = new TLSerialization({\n mtproto: true,\n startMaxLength: messagesByteLen + 64\n });\n\n container.storeInt(0x73f1f8dc, 'CONTAINER[id]');\n container.storeInt(messages.length, 'CONTAINER[count]');\n\n const innerMessages = messages.map((message, i) => {\n container.storeLong(message.msg_id, 'CONTAINER[' + i + '][msg_id]');\n container.storeInt(message.seq_no, 'CONTAINER[' + i + '][seq_no]');\n container.storeInt(message.body.length, 'CONTAINER[' + i + '][bytes]');\n container.storeRawBytes(message.body, 'CONTAINER[' + i + '][body]');\n return message.msg_id;\n });\n\n const message: MTMessage = {\n msg_id: this.timeManager.generateId(),\n seq_no: this.generateSeqNo(true),\n container: true,\n inner: innerMessages,\n notContentRelated: true\n };\n\n this.log.warn('container', message.msg_id, message.seq_no, innerMessages);\n\n return {\n message,\n messageWithBody: Object.assign({body: container.getBytes(true)}, message)\n };\n }\n\n private async getEncryptedMessage(dataWithPadding: Uint8Array) {\n const msgKey = await this.getMsgKey(dataWithPadding, true);\n const keyIv = await this.getAesKeyIv(msgKey, true);\n // this.log('after msg key iv')\n\n const encryptedBytes = await CryptoWorker.invokeCrypto('aes-encrypt', dataWithPadding, keyIv[0], keyIv[1]);\n // this.log('Finish encrypt')\n\n return {\n bytes: encryptedBytes,\n msgKey\n };\n }\n\n private async getDecryptedMessage(msgKey: Uint8Array, encryptedData: Uint8Array) {\n // this.log('get decrypted start')\n const keyIv = await this.getAesKeyIv(msgKey, false);\n // this.log('after msg key iv')\n return CryptoWorker.invokeCrypto('aes-decrypt', encryptedData, keyIv[0], keyIv[1]);\n }\n\n private async getEncryptedOutput(message: MTMessage) {\n /* if(DEBUG) {\n this.log.debug('Send encrypted', message, this.authKeyId);\n } */\n /* if(!this.isOnline) {\n this.log('trying to send message when offline:', Object.assign({}, message));\n //debugger;\n } */\n\n const data = new TLSerialization({\n startMaxLength: message.body.length + 2048\n });\n\n data.storeIntBytes(this.serverSalt, 64, 'salt');\n data.storeIntBytes(this.sessionId, 64, 'session_id');\n\n data.storeLong(message.msg_id, 'message_id');\n data.storeInt(message.seq_no, 'seq_no');\n\n data.storeInt(message.body.length, 'message_data_length');\n data.storeRawBytes(message.body, 'message_data');\n\n /* const des = new TLDeserialization(data.getBuffer().slice(16));\n const desSalt = des.fetchLong();\n const desSessionId = des.fetchLong();\n\n if(!this.isOnline) {\n this.log.error('trying to send message when offline', message, new Uint8Array(des.buffer), desSalt, desSessionId);\n } */\n\n /* const messageDataLength = message.body.length;\n let canBeLength = 0; // bytes\n canBeLength += 8;\n canBeLength += 8;\n canBeLength += 8;\n canBeLength += 4;\n canBeLength += 4;\n canBeLength += message.body.length; */\n\n const dataBuffer = data.getBuffer();\n\n /* if(dataBuffer.byteLength !== canBeLength || !bytesCmp(new Uint8Array(dataBuffer.slice(dataBuffer.byteLength - message.body.length)), new Uint8Array(message.body))) {\n this.log.error('wrong length', dataBuffer, canBeLength, message.msg_id);\n } */\n\n const paddingLength = (16 - (data.getOffset() % 16)) + 16 * (1 + nextRandomUint(8) % 5);\n const padding = /* (message as any).padding || */randomize(new Uint8Array(paddingLength))/* .fill(0) */;\n /* const padding = [167, 148, 207, 226, 86, 192, 193, 57, 124, 153, 174, 145, 159, 1, 5, 70, 127, 157,\n 51, 241, 46, 85, 141, 212, 139, 234, 213, 164, 197, 116, 245, 70, 184, 40, 40, 201, 233, 211, 150,\n 94, 57, 84, 1, 135, 108, 253, 34, 139, 222, 208, 71, 214, 90, 67, 36, 28, 167, 148, 207, 226, 86, 192, 193, 57, 124, 153, 174, 145, 159, 1, 5, 70, 127, 157,\n 51, 241, 46, 85, 141, 212, 139, 234, 213, 164, 197, 116, 245, 70, 184, 40, 40, 201, 233, 211, 150,\n 94, 57, 84, 1, 135, 108, 253, 34, 139, 222, 208, 71, 214, 90, 67, 36, 28].slice(0, paddingLength); */\n\n // (message as any).padding = padding;\n\n const dataWithPadding = bufferConcats(dataBuffer, padding);\n // this.log('Adding padding', dataBuffer, padding, dataWithPadding)\n // this.log('auth_key_id', bytesToHex(self.authKeyID))\n\n /* if(dataWithPadding.byteLength % 16) {\n this.log.error('aaa', dataWithPadding, paddingLength);\n }\n\n if(message.fileUpload) {\n this.log('Send encrypted: body length:', (message.body as ArrayBuffer).byteLength, paddingLength, dataWithPadding);\n } */\n\n // * full next block is correct\n const encryptedResult = await this.getEncryptedMessage(dataWithPadding);\n /* if(DEBUG) {\n this.log('Got encrypted out message', encryptedResult);\n } */\n\n const request = new TLSerialization({\n startMaxLength: encryptedResult.bytes.length + 256\n });\n request.storeIntBytes(this.authKeyId, 64, 'auth_key_id');\n request.storeIntBytes(encryptedResult.msgKey, 128, 'msg_key');\n request.storeRawBytes(encryptedResult.bytes, 'encrypted_data');\n\n const requestData = request.getBytes(true);\n\n // if(this.isFileNetworker) {\n // //this.log('Send encrypted: requestData length:', requestData.length, requestData.length % 16, paddingLength % 16, paddingLength, data.offset, encryptedResult.msgKey.length % 16, encryptedResult.bytes.length % 16);\n // //this.log('Send encrypted: messageId:', message.msg_id, requestData.length);\n // //this.log('Send encrypted:', message, new Uint8Array(bufferConcat(des.buffer, padding)), requestData, this.serverSalt.hex, this.sessionId.hex/* new Uint8Array(des.buffer) */);\n // this.debugRequests.push({before: new Uint8Array(bufferConcat(des.buffer, padding)), after: requestData});\n // }\n\n return requestData;\n }\n\n private async sendEncryptedRequest(message: MTMessage) {\n const log = this.log.bindPrefix('sendEncryptedRequest');\n const requestData = await this.getEncryptedOutput(message);\n\n if(!this.transport) {\n log.error('trying to send something when offline', this.transport, this);\n }\n\n log.debug('sending', message, [message.msg_id].concat(message.inner || []), requestData.length);\n const promise: Promise = this.transport ? this.transport.send(requestData) as any : Promise.reject({});\n\n if(!import.meta.env.VITE_MTPROTO_HAS_HTTP) {\n return promise;\n }\n\n if(import.meta.env.VITE_MTPROTO_HAS_WS && !(this.transport instanceof HTTP)) {\n return promise;\n }\n\n const baseError: ApiError = {\n code: 406,\n type: 'NETWORK_BAD_RESPONSE',\n // @ts-ignore\n transport: this.transport\n };\n\n return promise.then((result) => {\n if(!result?.byteLength) {\n throw baseError;\n }\n\n // this.debug && this.log.debug('sendEncryptedRequest: got response for:', message, [message.msg_id].concat(message.inner || []));\n return result;\n }, (error) => {\n if(!error.message && !error.type) {\n error = Object.assign(baseError, {\n type: 'NETWORK_BAD_REQUEST',\n originalError: error\n });\n }\n\n throw error;\n });\n }\n\n public async onTransportData(data: Uint8Array, packetTime: number = Date.now()) {\n const response = await this.parseResponse(data);\n // this.debug && this.log.debug('server response', response);\n this.processMessage(response.response, response.messageId, response.sessionId, packetTime);\n }\n\n public async parseResponse(responseBuffer: Uint8Array) {\n // const perf = performance.now();\n /* if(this.debug) {\n this.log.debug('Start parsing response', responseBuffer);\n } */\n\n this.lastResponseTime = Date.now();\n\n let deserializer = new TLDeserialization(responseBuffer);\n\n const authKeyId = deserializer.fetchIntBytes(64, true, 'auth_key_id');\n if(!bytesCmp(authKeyId, this.authKeyId)) {\n throw new Error('[MT] Invalid server auth_key_id: ' + bytesToHex(authKeyId));\n }\n\n const msgKey = deserializer.fetchIntBytes(128, true, 'msg_key');\n const encryptedData = deserializer.fetchRawBytes(responseBuffer.byteLength - deserializer.getOffset(), true, 'encrypted_data');\n\n const dataWithPadding = await this.getDecryptedMessage(msgKey, encryptedData);\n // this.log('after decrypt')\n const calcMsgKey = await this.getMsgKey(dataWithPadding, false);\n if(!bytesCmp(msgKey, calcMsgKey)) {\n this.log.warn('[MT] msg_keys', msgKey, calcMsgKey);\n this.updateSession(); // fix 28.01.2020\n throw new Error('[MT] server msgKey mismatch, updating session');\n }\n // this.log('after msgKey check')\n\n deserializer = new TLDeserialization(dataWithPadding, {mtproto: true});\n\n /* const salt = */deserializer.fetchIntBytes(64, true, 'salt'); // need\n const sessionId = deserializer.fetchIntBytes(64, true, 'session_id');\n const messageId = deserializer.fetchLong('message_id') as MTLong;\n\n if(!bytesCmp(sessionId, this.sessionId) &&\n (!this.prevSessionId || !bytesCmp(sessionId, this.prevSessionId))) {\n this.log.warn('sessions', sessionId, this.sessionId, this.prevSessionId, dataWithPadding);\n // this.updateSession();\n // this.sessionID = sessionID;\n throw new Error('[MT] Invalid server session_id: ' + bytesToHex(sessionId));\n }\n\n const seqNo = deserializer.fetchInt('seq_no');\n\n const totalLength = dataWithPadding.byteLength;\n\n const messageBodyLength = deserializer.fetchInt('message_data[length]');\n let offset = deserializer.getOffset();\n\n if((messageBodyLength % 4) ||\n messageBodyLength > (totalLength - offset)) {\n throw new Error('[MT] Invalid body length: ' + messageBodyLength);\n }\n const messageBody = deserializer.fetchRawBytes(messageBodyLength, true, 'message_data');\n\n offset = deserializer.getOffset();\n const paddingLength = totalLength - offset;\n if(paddingLength < 12 || paddingLength > 1024) {\n throw new Error('[MT] Invalid padding length: ' + paddingLength);\n }\n\n const response = this.parseResponseMessageBody(messageBody);\n // this.log('parse response time', performance.now() - perf);\n return {\n response,\n messageId,\n sessionId,\n seqNo\n };\n }\n\n private parseResponseMessageBody(messageBody: Uint8Array) {\n // let buffer = bytesToArrayBuffer(messageBody);\n const deserializer = new TLDeserialization(/* buffer */messageBody, {\n mtproto: true,\n override: {\n mt_message: (result: any, field: string) => {\n result.msg_id = deserializer.fetchLong(field + '[msg_id]');\n result.seqno = deserializer.fetchInt(field + '[seqno]');\n result.bytes = deserializer.fetchInt(field + '[bytes]');\n\n const offset = deserializer.getOffset();\n\n // this.log('mt_message!!!!!', result, field);\n\n try {\n result.body = deserializer.fetchObject('Object', field + '[body]');\n } catch(e) {\n this.log.error('parse error', (e as Error).message, (e as Error).stack);\n result.body = {\n _: 'parse_error',\n error: e\n };\n }\n\n if(deserializer.getOffset() !== (offset + result.bytes)) {\n // this.log.warn('set offset', deserializer.offset, offset, result.bytes)\n // this.log(result)\n deserializer.setOffset(offset + result.bytes);\n }\n // this.log('override message', result)\n },\n mt_rpc_result: (result: any, field: any) => {\n result.req_msg_id = deserializer.fetchLong(field + '[req_msg_id]');\n\n const sentMessage = this.sentMessages[result.req_msg_id];\n const type = sentMessage && sentMessage.resultType || 'Object';\n\n if(result.req_msg_id && !sentMessage) {\n // this.log.warn('Result for unknown message', result);\n return;\n }\n\n // deserializer.setMtproto(false);\n result.result = deserializer.fetchObject(type, field + '[result]');\n // deserializer.setMtproto(true);\n // this.log('override rpc_result', sentMessage, type, result);\n }\n }\n });\n\n return deserializer.fetchObject('', 'INPUT');\n }\n\n private applyServerSalt(newServerSalt: string) {\n const serverSalt = longToBytes(newServerSalt);\n\n sessionStorage.set({\n ['dc' + this.dcId + '_server_salt']: bytesToHex(serverSalt)\n });\n\n this.serverSalt = new Uint8Array(serverSalt);\n }\n\n private clearNextReq() {\n const log = this.log.bindPrefix('clearNextReq').debug;\n if(!this.nextReq) {\n log('nothing to clear');\n return;\n }\n\n // * can have nextReq without nextReqTimeout\n if(this.nextReqTimeout) {\n log('clear');\n clearTimeout(this.nextReqTimeout);\n this.nextReqTimeout = 0;\n }\n\n this.nextReq = 0;\n }\n\n // ! таймаут очень сильно тормозит скорость работы сокета (даже нулевой)\n public scheduleRequest(delay?: number) {\n const log = this.log.bindPrefix('scheduleRequest').debug;\n /* if(!this.isOnline) {\n return;\n } */\n\n if(import.meta.env.VITE_MTPROTO_HAS_HTTP) {\n if(!import.meta.env.VITE_MTPROTO_HAS_WS || this.transport instanceof HTTP) {\n if(this.offline) {\n this.checkConnection('forced schedule');\n }\n\n delay ||= 0; // set zero timeout to pack other messages too\n }\n }\n\n const nextReq = Date.now() + (delay || 0);\n if(this.nextReq && (delay === undefined || this.nextReq <= nextReq)) {\n log('already has nextReq', this.nextReq, nextReq);\n return;\n }\n\n log('delay', delay);\n\n const cb = () => {\n if(perf) {\n log('timeout delay', performance.now() - perf);\n }\n\n this.clearNextReq();\n\n if(import.meta.env.VITE_MTPROTO_HAS_HTTP) {\n if(!import.meta.env.VITE_MTPROTO_HAS_WS || this.transport instanceof HTTP) {\n if(this.offline) {\n log('cancel scheduled');\n return;\n }\n }\n }\n\n this.performScheduledRequest();\n };\n\n let perf: number;\n if(delay !== undefined) {\n perf = performance.now();\n if(this.nextReqTimeout) {\n clearTimeout(this.nextReqTimeout);\n this.nextReqTimeout = 0;\n }\n\n this.nextReq = nextReq;\n this.nextReqTimeout = ctx.setTimeout(cb, delay);\n } else {\n cb();\n }\n }\n\n private ackMessage(msgId: MTLong) {\n if(TEST_NO_ACKS) {\n this.log('skipping sending ack', msgId);\n return;\n }\n\n // this.log('ack message', msgID)\n this.pendingAcks.push(msgId);\n\n let delay: number;\n\n if(import.meta.env.VITE_MTPROTO_HAS_HTTP) {\n if(!import.meta.env.VITE_MTPROTO_HAS_WS || this.transport instanceof HTTP) {\n delay = 30000;\n }\n }\n\n this.scheduleRequest(delay);\n }\n\n /**\n * will clear `msg_resend_req` message from sentMessages when all messages are acked\n */\n private processResentReqMessage(messageId: MTLong) {\n const resendRequestMessage = this.sentResendReq.get(messageId);\n if(resendRequestMessage) {\n resendRequestMessage.resending.delete(messageId);\n if(!resendRequestMessage.resending.size) {\n delete this.sentMessages[resendRequestMessage.msg_id];\n }\n\n this.sentResendReq.delete(messageId);\n }\n }\n\n private reqResend(msgId: MTLong/* , isAnswer?: boolean */) {\n this.log.debug('req resend', msgId/* , isAnswer */);\n\n // (isAnswer ? this.pendingResendAnsReq : this.pendingResendReq).push(msgId);\n if(!this.pendingResendReq.includes(msgId)) this.pendingResendReq.push(msgId);\n this.scheduleRequest(100);\n }\n\n public cleanupSent() {\n const log = this.log.bindPrefix('cleanupSent', this.debug ? LogTypes.Log : LogTypes.None);\n let notEmpty = false;\n const sentMessages = this.sentMessages;\n log.group('start');\n Object.keys(sentMessages).forEach((msgId) => {\n const message = sentMessages[msgId];\n\n // log('clean iter', msgId, message);\n if(message.canCleanup && this.pendingMessages[msgId] === undefined) {\n log('clean canCleanup', msgId);\n delete sentMessages[msgId];\n } else if(message.container) {\n for(const innerMsgId of message.inner) {\n if(sentMessages[innerMsgId]) {\n log(`clean failed, found item=${innerMsgId} in container=${msgId}`);\n notEmpty = true;\n return;\n }\n }\n\n log('clean container', msgId);\n delete sentMessages[msgId];\n } else {\n log('clean failed', msgId);\n notEmpty = true;\n }\n });\n\n log('end', notEmpty);\n log.groupEnd();\n return !notEmpty;\n }\n\n private processMessageAck(messageId: Long) {\n const sentMessage = this.sentMessages[messageId];\n if(sentMessage && !sentMessage.acked) {\n // delete sentMessage.body;\n sentMessage.acked = true;\n }\n }\n\n private processError(rawError: {error_message: string, error_code: number}): ApiError {\n const matches = (rawError.error_message || '').match(/^([A-Z_0-9]+\\b)(: (.+))?/) || [];\n rawError.error_code = rawError.error_code;\n\n return {\n code: !rawError.error_code || rawError.error_code <= 0 ? 500 : rawError.error_code,\n type: matches[1] as any || 'UNKNOWN',\n description: matches[3] || ('CODE#' + rawError.error_code + ' ' + rawError.error_message),\n originalError: rawError\n };\n }\n\n public resend() {\n this.log.warn('resending all messages');\n\n const sentMessages = this.sentMessages;\n for(const id in sentMessages) {\n const msg = sentMessages[id];\n if(msg.body || msg.container) {\n this.pushResend(id);\n }\n }\n\n if((this.transport as TcpObfuscated).connection) {\n this.clearPingDelayDisconnect();\n this.sendPingDelayDisconnect();\n }\n }\n\n /* public requestMessageStatus() {\n const ids: string[] = [];\n for(const id in this.sentMessages) {\n const message = this.sentMessages[id];\n if(message.isAPI && message.fileUpload) {\n ids.push(message.msg_id);\n }\n }\n\n this.wrapMtpMessage({\n _: 'msgs_state_req',\n msg_ids: ids\n }, {\n notContentRelated: true\n }).then((res) => {\n this.log('status', res);\n });\n } */\n\n private applyServerTime(messageId: string) {\n const serverTime = bigInt(messageId).shiftRight(32).toJSNumber();\n this.log('applying server time', serverTime);\n return this.timeManager.applyServerTime(serverTime);\n }\n\n // * https://core.telegram.org/mtproto/service_messages_about_messages#notice-of-ignored-error-message\n public processMessage(message: any, messageId: MTLong, sessionId: Uint8Array | number[], packetTime?: number) {\n const log = this.log.bindPrefix('processMessage');\n if(message._ === 'messageEmpty') {\n log.warn('messageEmpty', message, messageId);\n return;\n }\n\n // messageId = messageId.toString();\n\n const msgidInt = parseInt(messageId.substr(0, -10), 10);\n if(msgidInt % 2) {\n log.warn('server even message id', messageId, message);\n return;\n }\n\n log.debug('process message', message, messageId, packetTime ? Date.now() - packetTime : undefined);\n\n this.pingDelayDisconnectDeferred?.resolve('any message');\n\n // let changedTimeOffset: boolean;\n // if(this.getNewTimeOffset) {\n // changedTimeOffset = this.applyServerTime(messageId);\n // this.getNewTimeOffset = undefined;\n // }\n\n switch(message._) {\n case 'msg_container': {\n for(const innerMessage of message.messages) {\n this.processMessage(innerMessage, innerMessage.msg_id, sessionId);\n }\n\n break;\n }\n\n case 'bad_server_salt': {\n log('bad server salt', message);\n\n this.applyServerSalt(message.new_server_salt);\n\n if(this.sentMessages[message.bad_msg_id]) {\n this.pushResend(message.bad_msg_id);\n }\n\n this.ackMessage(messageId);\n\n // simulate disconnect\n /* try {\n this.log('networker state:', this);\n // @ts-ignore\n this.transport.ws.close(1000);\n } catch(err) {\n this.log.error('transport', this.transport, err);\n } */\n\n break;\n }\n\n case 'bad_msg_notification': {\n log.error('bad msg notification', message);\n\n switch(message.error_code) {\n case 16: // * msg_id too low\n case 17: // * msg_id too high\n case 32: // * msg_seqno too low\n case 33: // * msg_seqno too high\n case 64: { // * invalid container\n // if(changedTimeOffset === undefined) {\n // changedTimeOffset = this.applyServerTime(messageId);\n // }\n\n const changedTimeOffset = this.applyServerTime(messageId);\n if(message.error_code === 17 || changedTimeOffset) {\n log('update session');\n this.updateSession();\n }\n\n const badMessage = this.updateSentMessage(message.bad_msg_id);\n if(badMessage) {\n this.pushResend(badMessage.msg_id);\n }\n }\n\n // * invalid container\n /* case 64: {\n const badMessage = this.sentMessages[message.bad_msg_id];\n if(badMessage) {\n for(const msgId of badMessage.inner) {\n if(this.sentMessages[msgId] !== undefined) {\n this.updateSentMessage\n }\n }\n const inner = badMessage.inner;\n }\n } */\n }\n\n break;\n }\n\n case 'message': {\n if(this.lastServerMessages.has(messageId)) {\n log.warn('server same messageId', messageId, message);\n this.ackMessage(messageId);\n return;\n }\n\n this.lastServerMessages.add(messageId);\n if(this.lastServerMessages.size > 100) {\n const first = this.lastServerMessages.values().next().value;\n this.lastServerMessages.delete(first);\n }\n\n this.processMessage(message.body, message.msg_id, sessionId);\n break;\n }\n\n case 'new_session_created': {\n this.ackMessage(messageId);\n\n log.debug('new_session_created', message);\n // this.updateSession();\n\n this.processMessageAck(message.first_msg_id);\n this.applyServerSalt(message.server_salt);\n\n sessionStorage.get('dc').then((baseDcId) => {\n if(baseDcId === this.dcId && !this.isFileNetworker) {\n this.networkerFactory.updatesProcessor?.(message);\n }\n });\n break;\n }\n\n case 'msgs_ack': {\n log.debug('got acks', message.msg_ids);\n for(const msgId of message.msg_ids) {\n this.processMessageAck(msgId);\n }\n\n break;\n }\n\n case 'msg_detailed_info': {\n const sentMessage = this.sentMessages[message.msg_id];\n if(!sentMessage) {\n this.ackMessage(message.answer_msg_id);\n break;\n }\n\n // * continue to resend below\n }\n\n case 'msg_new_detailed_info': {\n if(this.pendingAcks.includes(message.answer_msg_id)) {\n break;\n }\n\n this.reqResend(message.answer_msg_id);\n break;\n }\n\n case 'msgs_state_info': { // https://core.telegram.org/mtproto/service_messages_about_messages#informational-message-regarding-status-of-messages\n const sentMessageId = message.req_msg_id;\n const sentMessage = this.sentMessages[sentMessageId]; // should be msg_resend_req or msgs_state_req\n log('got msgs_state_info', sentMessage, message);\n if(sentMessage) {\n delete this.sentMessages[sentMessageId];\n }\n\n const arr = [\n [this.lastResendReq, this.pendingResendReq] as const\n // [this.lastResendAnsReq, this.pendingResendAnsReq] as const\n ];\n\n for(const [lastResend, pendingResend] of arr) {\n if(lastResend?.reqMsgId === sentMessageId && pendingResend.length) {\n for(const badMsgId of lastResend.msgIds) {\n indexOfAndSplice(pendingResend, badMsgId);\n }\n }\n }\n\n break;\n }\n\n case 'rpc_result': {\n if(TEST_RESEND_RPC && message.result._ === TEST_RESEND_RPC && TESTING_RESENDING_RPC) {\n TESTING_RESENDING_RPC = undefined;\n this.reqResend(messageId);\n break;\n }\n\n this.ackMessage(messageId);\n\n const sentMessageId = message.req_msg_id;\n const sentMessage = this.sentMessages[sentMessageId];\n\n // log('rpc response', message.result, sentMessage);\n\n this.processMessageAck(sentMessageId);\n if(sentMessage) {\n const {deferred} = sentMessage;\n const {result} = message;\n if(result._ === 'rpc_error') {\n const error = this.processError(result);\n log('rpc error', result, sentMessage, error);\n deferred?.reject(error);\n } else {\n log('rpc result', result, sentMessage/* , Date.now() - sentMessage.sentTime, sentMessage.sentTime */);\n deferred?.resolve(result);\n\n if(sentMessage.isAPI && !this.connectionInited) {\n this.connectionInited = true;\n }\n }\n\n this.processResentReqMessage(messageId);\n\n delete this.sentMessages[sentMessageId];\n } else {\n log('rpc result for unknown message:', sentMessageId, message);\n }\n\n break;\n }\n\n case 'pong': { // * https://core.telegram.org/mtproto/service_messages#ping-messages-pingpong - These messages don't require acknowledgments\n /* const sentMessageId = message.msg_id;\n const sentMessage = this.sentMessages[sentMessageId];\n\n if(sentMessage) {\n sentMessage.deferred.resolve(message);\n delete this.sentMessages[sentMessageId];\n } */\n const pingId = message.ping_id;\n if(this.lastPingDelayDisconnectId === pingId) {\n const deferred = this.pingDelayDisconnectDeferred;\n if(deferred) {\n deferred.resolve('pong');\n } else {\n log('ping deferred deleted', pingId);\n }\n\n // this.lastPingRealTime = Date.now() - this.lastPingStartTime;\n // log('last ping real time', this.lastPingRealTime);\n }\n\n break;\n }\n\n default:\n this.ackMessage(messageId);\n\n /* if(this.debug) {\n this.log.debug('Update', message);\n } */\n\n if(this.networkerFactory.updatesProcessor !== null) {\n this.networkerFactory.updatesProcessor(message);\n }\n break;\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {ConnectionStatusChange} from './connectionStatus';\nimport MTPNetworker from './networker';\nimport {InvokeApiOptions} from '../../types';\nimport App from '../../config/app';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport {AppManager} from '../appManagers/manager';\n\nexport class NetworkerFactory extends AppManager {\n private networkers: MTPNetworker[] = [];\n public language = navigator.language || App.langPackCode;\n public updatesProcessor: (obj: any) => void = null;\n // public onConnectionStatusChange: (status: ConnectionStatusChange) => void = null;\n public akStopped = false;\n\n public onConnectionStatusChange(status: ConnectionStatusChange) {\n this.rootScope.dispatchEvent('connection_status_change', status);\n // ({type: 'connectionStatusChange', payload: status});\n }\n\n public removeNetworker(networker: MTPNetworker) {\n indexOfAndSplice(this.networkers, networker);\n }\n\n public setUpdatesProcessor(callback: (obj: any) => void) {\n this.updatesProcessor = callback;\n }\n\n public getNetworker(dcId: number, authKey: Uint8Array, authKeyId: Uint8Array, serverSalt: Uint8Array, options: InvokeApiOptions) {\n // console.log('NetworkerFactory: creating new instance of MTPNetworker:', dcId, options);\n const networker = new MTPNetworker(this, this.timeManager, dcId, authKey, authKeyId, serverSalt, options);\n this.networkers.push(networker);\n return networker;\n }\n\n public startAll() {\n if(this.akStopped) {\n const stoppedNetworkers = this.networkers.filter((networker) => networker.isStopped());\n\n this.akStopped = false;\n this.updatesProcessor && this.updatesProcessor({_: 'new_session_created'});\n\n for(const networker of stoppedNetworkers) {\n networker.scheduleRequest();\n }\n }\n }\n\n public stopAll() {\n this.akStopped = true;\n }\n\n public setLanguage(langCode: string) {\n this.language = langCode;\n for(const networker of this.networkers) {\n if(!networker.isFileNetworker) {\n networker.connectionInited = false;\n }\n }\n }\n\n public unsetConnectionInited() {\n for(const networker of this.networkers) {\n networker.connectionInited = false;\n }\n }\n\n public forceReconnectTimeout() {\n for(const networker of this.networkers) {\n networker.forceReconnectTimeout();\n }\n }\n\n public forceReconnect() {\n for(const networker of this.networkers) {\n if(!networker.isFileNetworker) {\n networker.forceReconnect();\n break;\n }\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {TLSerialization} from './tl_utils';\nimport cryptoWorker from '../crypto/cryptoMessagePort';\nimport Modes from '../../config/modes';\nimport bytesFromHex from '../../helpers/bytes/bytesFromHex';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\nimport bigInt from 'big-integer';\n\nexport type RSAPublicKeyHex = {\n modulus: string,\n exponent: string\n};\n\nexport class RSAKeysManager {\n /**\n * Server public key, obtained from here: https://core.telegram.org/api/obtaining_api_id\n *\n *\n * -----BEGIN RSA PUBLIC KEY-----\n * MIIBCgKCAQEA6LszBcC1LGzyr992NzE0ieY+BSaOW622Aa9Bd4ZHLl+TuFQ4lo4g\n * 5nKaMBwK/BIb9xUfg0Q29/2mgIR6Zr9krM7HjuIcCzFvDtr+L0GQjae9H0pRB2OO\n * 62cECs5HKhT5DZ98K33vmWiLowc621dQuwKWSQKjWf50XYFw42h21P2KXUGyp2y/\n * +aEyZ+uVgLLQbRA1dEjSDZ2iGRy12Mk5gpYc397aYp438fsJoHIgJ2lgMv5h7WY9\n * t6N/byY9Nw9p21Og3AoXSL2q/2IJ1WRUhebgAdGVMlV1fkuOQoEzR7EdpqtQD9Cs\n * 5+bfo3Nhmcyvk5ftB0WkJ9z6bNZ7yxrP8wIDAQAB\n * -----END RSA PUBLIC KEY-----\n *\n * -----BEGIN RSA PUBLIC KEY-----\n * MIIBCgKCAQEBadMIUYSKhyznMh+Pg+OxTLyDZrWEjQIPZC3oJCtuZX7qUxgcWqFX\n * Q1952TSY8S8NYuz12sK9Fvp+lil1hIG0U/cuPsK08VB1hB4VA+p0S46fGwVsRovq\n * 4qUiUIzQSjSHDASuXTOinlYEHwmg/GaLc5G7qhePWa0p9YmqYR5Ha3xHJywcXZrn\n * yE3nC9igL96Aanqv+Prbu1N+r9vAgZeHh9cfbtbV8WWwruOANOTEv2ctQLR0dfr9\n * MwQXNePTPQlYsO9HNIGS1LWe7hZFtGBAVJH92F7Kig68WqHM3PIZ6Sq7N0VSzfzL\n * b11Z/YHz2UXYtXADwL/m5pTpKBUtJBXkOQIDAQAB\n * -----END RSA PUBLIC KEY-----\n *\n * Bytes can be got via\n * $ openssl rsa -in rsa.pem -RSAPublicKey_in -pubout > pub.pem\n * $ openssl rsa -pubin -in pub.pem -text -noout\n */\n\n /* private publisKeysHex = [{\n modulus: 'c150023e2f70db7985ded064759cfecf0af328e69a41daf4d6f01b538135a6f91f8f8b2a0ec9ba9720ce352efcf6c5680ffc424bd634864902de0b4bd6d49f4e580230e3ae97d95c8b19442b3c0a10d8f5633fecedd6926a7f6dab0ddb7d457f9ea81b8465fcd6fffeed114011df91c059caedaf97625f6c96ecc74725556934ef781d866b34f011fce4d835a090196e9a5f0e4449af7eb697ddb9076494ca5f81104a305b6dd27665722c46b60e5df680fb16b210607ef217652e60236c255f6a28315f4083a96791d7214bf64c1df4fd0db1944fb26a2a57031b32eee64ad15a8ba68885cde74a5bfc920f6abf59ba5c75506373e7130f9042da922179251f',\n exponent: '010001'\n }, {\n modulus: 'aeec36c8ffc109cb099624685b97815415657bd76d8c9c3e398103d7ad16c9bba6f525ed0412d7ae2c2de2b44e77d72cbf4b7438709a4e646a05c43427c7f184debf72947519680e651500890c6832796dd11f772c25ff8f576755afe055b0a3752c696eb7d8da0d8be1faf38c9bdd97ce0a77d3916230c4032167100edd0f9e7a3a9b602d04367b689536af0d64b613ccba7962939d3b57682beb6dae5b608130b2e52aca78ba023cf6ce806b1dc49c72cf928a7199d22e3d7ac84e47bc9427d0236945d10dbd15177bab413fbf0edfda09f014c7a7da088dde9759702ca760af2b8e4e97cc055c617bd74c3d97008635b98dc4d621b4891da9fb0473047927',\n exponent: '010001'\n }, {\n modulus: 'bdf2c77d81f6afd47bd30f29ac76e55adfe70e487e5e48297e5a9055c9c07d2b93b4ed3994d3eca5098bf18d978d54f8b7c713eb10247607e69af9ef44f38e28f8b439f257a11572945cc0406fe3f37bb92b79112db69eedf2dc71584a661638ea5becb9e23585074b80d57d9f5710dd30d2da940e0ada2f1b878397dc1a72b5ce2531b6f7dd158e09c828d03450ca0ff8a174deacebcaa22dde84ef66ad370f259d18af806638012da0ca4a70baa83d9c158f3552bc9158e69bf332a45809e1c36905a5caa12348dd57941a482131be7b2355a5f4635374f3bd3ddf5ff925bf4809ee27c1e67d9120c5fe08a9de458b1b4a3c5d0a428437f2beca81f4e2d5ff',\n exponent: '010001'\n }, {\n modulus: 'b3f762b739be98f343eb1921cf0148cfa27ff7af02b6471213fed9daa0098976e667750324f1abcea4c31e43b7d11f1579133f2b3d9fe27474e462058884e5e1b123be9cbbc6a443b2925c08520e7325e6f1a6d50e117eb61ea49d2534c8bb4d2ae4153fabe832b9edf4c5755fdd8b19940b81d1d96cf433d19e6a22968a85dc80f0312f596bd2530c1cfb28b5fe019ac9bc25cd9c2a5d8a0f3a1c0c79bcca524d315b5e21b5c26b46babe3d75d06d1cd33329ec782a0f22891ed1db42a1d6c0dea431428bc4d7aabdcf3e0eb6fda4e23eb7733e7727e9a1915580796c55188d2596d2665ad1182ba7abf15aaa5a8b779ea996317a20ae044b820bff35b6e8a1',\n exponent: '010001'\n }, {\n modulus: 'be6a71558ee577ff03023cfa17aab4e6c86383cff8a7ad38edb9fafe6f323f2d5106cbc8cafb83b869cffd1ccf121cd743d509e589e68765c96601e813dc5b9dfc4be415c7a6526132d0035ca33d6d6075d4f535122a1cdfe017041f1088d1419f65c8e5490ee613e16dbf662698c0f54870f0475fa893fc41eb55b08ff1ac211bc045ded31be27d12c96d8d3cfc6a7ae8aa50bf2ee0f30ed507cc2581e3dec56de94f5dc0a7abee0be990b893f2887bd2c6310a1e0a9e3e38bd34fded2541508dc102a9c9b4c95effd9dd2dfe96c29be647d6c69d66ca500843cfaed6e440196f1dbe0e2e22163c61ca48c79116fa77216726749a976a1c4b0944b5121e8c01',\n exponent: '010001'\n }]; */\n\n private testPublicKeysHex: RSAPublicKeyHex[] = [{\n modulus: 'c8c11d635691fac091dd9489aedced2932aa8a0bcefef05fa800892d9b52ed03200865c9e97211cb2ee6c7ae96d3fb0e15aeffd66019b44a08a240cfdd2868a85e1f54d6fa5deaa041f6941ddf302690d61dc476385c2fa655142353cb4e4b59f6e5b6584db76fe8b1370263246c010c93d011014113ebdf987d093f9d37c2be48352d69a1683f8f6e6c2167983c761e3ab169fde5daaa12123fa1beab621e4da5935e9c198f82f35eae583a99386d8110ea6bd1abb0f568759f62694419ea5f69847c43462abef858b4cb5edc84e7b9226cd7bd7e183aa974a712c079dde85b9dc063b8a5c08e8f859c0ee5dcd824c7807f20153361a7f63cfd2a433a1be7f5',\n exponent: '010001'\n }];\n\n private publisKeysHex: RSAPublicKeyHex[] = [{\n // modulus: '00e8bb3305c0b52c6cf2afdf7637313489e63e05268e5badb601af417786472e5f93b85438968e20e6729a301c0afc121bf7151f834436f7fda680847a66bf64accec78ee21c0b316f0edafe2f41908da7bd1f4a5107638eeb67040ace472a14f90d9f7c2b7def99688ba3073adb5750bb02964902a359fe745d8170e36876d4fd8a5d41b2a76cbff9a13267eb9580b2d06d10357448d20d9da2191cb5d8c93982961cdfdeda629e37f1fb09a0722027696032fe61ed663db7a37f6f263d370f69db53a0dc0a1748bdaaff6209d5645485e6e001d1953255757e4b8e42813347b11da6ab500fd0ace7e6dfa3736199ccaf9397ed0745a427dcfa6cd67bcb1acff3',\n modulus: 'e8bb3305c0b52c6cf2afdf7637313489e63e05268e5badb601af417786472e5f93b85438968e20e6729a301c0afc121bf7151f834436f7fda680847a66bf64accec78ee21c0b316f0edafe2f41908da7bd1f4a5107638eeb67040ace472a14f90d9f7c2b7def99688ba3073adb5750bb02964902a359fe745d8170e36876d4fd8a5d41b2a76cbff9a13267eb9580b2d06d10357448d20d9da2191cb5d8c93982961cdfdeda629e37f1fb09a0722027696032fe61ed663db7a37f6f263d370f69db53a0dc0a1748bdaaff6209d5645485e6e001d1953255757e4b8e42813347b11da6ab500fd0ace7e6dfa3736199ccaf9397ed0745a427dcfa6cd67bcb1acff3',\n exponent: '010001'\n }];\n\n private publicKeysParsed: {\n [hex: string]: RSAPublicKeyHex\n } = {};\n private prepared = false;\n private preparePromise: Promise = null;\n\n constructor() {\n if(Modes.test) {\n this.publisKeysHex = this.testPublicKeysHex;\n }\n }\n\n public prepare(): Promise {\n if(this.preparePromise) return this.preparePromise;\n else if(this.prepared) {\n return Promise.resolve();\n }\n\n return this.preparePromise = Promise.all(this.publisKeysHex.map((keyParsed) => {\n const RSAPublicKey = new TLSerialization();\n RSAPublicKey.storeBytes(bytesFromHex(keyParsed.modulus), 'n');\n RSAPublicKey.storeBytes(bytesFromHex(keyParsed.exponent), 'e');\n\n const buffer = RSAPublicKey.getBuffer();\n\n return cryptoWorker.invokeCrypto('sha1', buffer).then((bytes) => {\n const fingerprintBytes = bytes.slice(-8);\n fingerprintBytes.reverse();\n\n this.publicKeysParsed[bytesToHex(fingerprintBytes).toLowerCase()] = {\n modulus: keyParsed.modulus,\n exponent: keyParsed.exponent\n };\n });\n })).then(() => {\n this.prepared = true;\n\n // console.log('[MT] Prepared keys');\n this.preparePromise = null;\n });\n }\n\n public async select(fingerprints: Array) {\n await this.prepare();\n\n for(let i = 0; i < fingerprints.length; ++i) {\n let fingerprintHex = bigInt(fingerprints[i]).toString(16).toLowerCase();\n\n if(fingerprintHex.length < 16) {\n fingerprintHex = new Array(16 - fingerprintHex.length).fill('0').join('') + fingerprintHex;\n }\n\n // console.log(fingerprintHex, this.publicKeysParsed);\n const foundKey = this.publicKeysParsed[fingerprintHex];\n if(foundKey) {\n return Object.assign({\n fingerprint: fingerprints[i]\n }, foundKey);\n }\n }\n }\n}\n\nexport default new RSAKeysManager();\n","export default function bytesXor(bytes1: Uint8Array, bytes2: Uint8Array) {\n const len = bytes1.length;\n const bytes = new Uint8Array(len);\n\n for(let i = 0; i < len; ++i) {\n bytes[i] = bytes1[i] ^ bytes2[i];\n }\n\n return bytes;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport transportController from './transports/controller';\nimport {TLSerialization, TLDeserialization} from './tl_utils';\nimport {TransportType} from './dcConfigurator';\nimport rsaKeysManager from './rsaKeysManager';\nimport CryptoWorker from '../crypto/cryptoMessagePort';\nimport {logger, LogTypes} from '../logger';\nimport DEBUG from '../../config/debug';\nimport {Awaited, DcId} from '../../types';\nimport addPadding from '../../helpers/bytes/addPadding';\nimport bytesCmp from '../../helpers/bytes/bytesCmp';\nimport bytesFromHex from '../../helpers/bytes/bytesFromHex';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\nimport bytesXor from '../../helpers/bytes/bytesXor';\nimport {bigIntFromBytes} from '../../helpers/bigInt/bigIntConversion';\nimport bigInt from 'big-integer';\nimport randomize from '../../helpers/array/randomize';\nimport {AppManager} from '../appManagers/manager';\nimport Modes from '../../config/modes';\n\n/* let fNewNonce: any = bytesFromHex('8761970c24cb2329b5b2459752c502f3057cb7e8dbab200e526e8767fdc73b3c').reverse();\nlet fNonce: any = bytesFromHex('b597720d11faa5914ef485c529cde414').reverse();\nlet fResult: any = new Uint8Array(bytesFromHex('000000000000000001b473a0661b285e480000006324160514e4cd29c585f44e91a5fa110d7297b5c0c4134c84893db5715ecd56af5ed618082182053cc5de91cd00000015c4b51c02000000a5b7f709355fc30b216be86c022bb4c3'));\n\nfNewNonce = false;\nfNonce = false;\nfResult = false; */\n\ntype AuthOptions = {\n dcId: number,\n nonce: Uint8Array,\n\n serverNonce?: Uint8Array,\n pq?: Uint8Array,\n fingerprints?: string[],\n publicKey?: {\n modulus: string,\n exponent: string,\n fingerprint: string\n },\n\n // good\n p?: Uint8Array,\n q?: Uint8Array,\n\n newNonce?: Uint8Array,\n\n retry?: number,\n\n b?: Uint8Array,\n g?: number,\n gA?: Uint8Array,\n dhPrime?: Uint8Array,\n\n tmpAesKey?: Uint8Array,\n tmpAesIv?: Uint8Array,\n\n authKeyId?: Uint8Array,\n authKey?: Uint8Array,\n serverSalt?: Uint8Array,\n\n localTime?: number,\n serverTime?: any,\n};\n\ntype ResPQ = {\n _: 'resPQ';\n nonce: Uint8Array;\n pq: Uint8Array;\n server_nonce: Uint8Array;\n server_public_key_fingerprints: string[];\n};\n\ntype P_Q_inner_data = {\n _: 'p_q_inner_data_dc';\n pq: Uint8Array;\n p: Uint8Array;\n q: Uint8Array;\n nonce: Uint8Array;\n server_nonce: Uint8Array;\n new_nonce: Uint8Array;\n dc: number;\n};\n\ntype req_DH_params = {\n nonce: Uint8Array;\n server_nonce: Uint8Array;\n p: Uint8Array;\n q: Uint8Array;\n public_key_fingerprint: string;\n encrypted_data: Uint8Array;\n};\n\nexport class Authorizer extends AppManager {\n private cached: {\n [dcId: DcId]: Promise\n };\n\n private log: ReturnType;\n\n private transportType: TransportType;\n\n private getTransportTypePromise: Promise;\n\n protected after() {\n this.cached = {};\n this.log = logger(`AUTHORIZER`, LogTypes.Error | LogTypes.Log);\n }\n\n private sendPlainRequest(dcId: DcId, requestArray: Uint8Array) {\n const requestLength = requestArray.byteLength;\n\n const header = new TLSerialization();\n header.storeLongP(0, 0, 'auth_key_id');\n header.storeLong(this.timeManager.generateId(), 'msg_id');\n header.storeInt(requestLength, 'request_length');\n\n const headerArray = header.getBytes(true) as Uint8Array;\n const resultArray = new Uint8Array(headerArray.byteLength + requestLength);\n resultArray.set(headerArray);\n resultArray.set(requestArray, headerArray.length);\n\n const transport = this.dcConfigurator.chooseServer(dcId, 'client', this.transportType);\n const baseError = {\n code: 406,\n type: 'NETWORK_BAD_RESPONSE'\n };\n\n if(DEBUG) {\n this.log('mtpSendPlainRequest: creating requestPromise');\n }\n\n const promise = transport.send(resultArray) as any as Promise;\n return promise.then((result) => {\n if(DEBUG) {\n this.log('mtpSendPlainRequest: in good sector', result);\n }\n\n if(!result || !result.byteLength) {\n throw baseError;\n }\n\n try {\n /* result = fResult ? fResult : result;\n fResult = new Uint8Array(0); */\n\n const deserializer = new TLDeserialization(result, {mtproto: true});\n\n if(result.length === 4) {\n const errorCode = deserializer.fetchInt();\n this.log.error('mtpSendPlainRequest: wrong response, error code:', errorCode);\n throw errorCode;\n }\n\n const auth_key_id = deserializer.fetchLong('auth_key_id');\n if(auth_key_id !== '0') this.log.error('auth_key_id !== 0', auth_key_id);\n\n const msg_id = deserializer.fetchLong('msg_id');\n if(msg_id === '0') this.log.error('msg_id === 0', msg_id);\n\n const msg_len = deserializer.fetchInt('msg_len');\n if(!msg_len) this.log.error('no msg_len', msg_len);\n\n return deserializer;\n } catch(e) {\n this.log.error('mtpSendPlainRequest: deserialization went bad', e);\n const error = Object.assign(baseError, {originalError: e});\n throw error;\n }\n }, (error) => {\n if(!error.message && !error.type) {\n error = Object.assign(baseError, {\n originalError: error\n });\n }\n\n throw error;\n });\n }\n\n private async sendReqPQ(auth: AuthOptions) {\n const request = new TLSerialization({mtproto: true});\n\n request.storeMethod('req_pq_multi', {nonce: auth.nonce});\n\n if(DEBUG) {\n this.log('Send req_pq', bytesToHex(auth.nonce));\n }\n\n let deserializer: Awaited>;\n try {\n const promise = this.sendPlainRequest(auth.dcId, request.getBytes(true));\n rsaKeysManager.prepare();\n deserializer = await promise;\n } catch(error) {\n this.log.error('req_pq error', (error as Error).message);\n throw error;\n }\n\n const response: ResPQ = deserializer.fetchObject('ResPQ');\n\n if(response._ !== 'resPQ') {\n throw new Error('[MT] resPQ response invalid: ' + response._);\n }\n\n if(!bytesCmp(auth.nonce, response.nonce)) {\n this.log.error(auth.nonce, response.nonce);\n throw new Error('[MT] resPQ nonce mismatch');\n }\n\n auth.serverNonce = response.server_nonce; // need\n auth.pq = response.pq;\n auth.fingerprints = response.server_public_key_fingerprints;\n\n if(DEBUG) {\n this.log('Got ResPQ', bytesToHex(auth.serverNonce), bytesToHex(auth.pq), auth.fingerprints);\n }\n\n const publicKey = await rsaKeysManager.select(auth.fingerprints);\n if(!publicKey) {\n throw new Error('[MT] No public key found');\n }\n\n auth.publicKey = publicKey;\n\n if(DEBUG) {\n this.log('PQ factorization start', auth.pq);\n }\n\n // let pAndQ: Awaited>;\n try {\n var pAndQ = await CryptoWorker.invokeCrypto('factorize', auth.pq);\n } catch(error) {\n this.log.error('worker error factorize', error);\n throw error;\n }\n\n auth.p = pAndQ[0];\n auth.q = pAndQ[1];\n\n if(DEBUG) {\n this.log('PQ factorization done', pAndQ);\n }\n\n return this.sendReqDhParams(auth);\n }\n\n private async sendReqDhParams(auth: AuthOptions): Promise {\n auth.newNonce = randomize(new Uint8Array(32));\n\n const p_q_inner_data_dc: P_Q_inner_data = {\n _: 'p_q_inner_data_dc',\n pq: auth.pq,\n p: auth.p,\n q: auth.q,\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n new_nonce: auth.newNonce,\n dc: 0\n };\n\n const pQInnerDataSerialization = new TLSerialization({mtproto: true});\n pQInnerDataSerialization.storeObject(p_q_inner_data_dc, 'P_Q_inner_data', 'DECRYPTED_DATA');\n\n const data = pQInnerDataSerialization.getBytes(true);\n if(data.length > 144) {\n throw 'DH_params: data is more than 144 bytes!';\n }\n\n const dataWithPadding = addPadding(data, 192, false, true, false);\n const dataPadReversed = dataWithPadding.slice().reverse();\n\n const getKeyAesEncrypted = async() => {\n for(;;) {\n const tempKey = randomize(new Uint8Array(32));\n const dataWithHash = dataPadReversed.concat(await CryptoWorker.invokeCrypto('sha256', tempKey.concat(dataWithPadding)));\n if(dataWithHash.length !== 224) {\n throw 'DH_params: dataWithHash !== 224 bytes!';\n }\n\n const aesEncrypted = await CryptoWorker.invokeCrypto('aes-encrypt', dataWithHash, tempKey, new Uint8Array([0]));\n const tempKeyXor = bytesXor(tempKey, await CryptoWorker.invokeCrypto('sha256', aesEncrypted));\n const keyAesEncrypted = tempKeyXor.concat(aesEncrypted);\n\n const keyAesEncryptedBigInt = bigIntFromBytes(keyAesEncrypted);\n const publicKeyModulusBigInt = bigInt(auth.publicKey.modulus, 16);\n\n if(keyAesEncryptedBigInt.compare(publicKeyModulusBigInt) === -1) {\n return keyAesEncrypted;\n }\n }\n };\n\n const keyAesEncrypted = await getKeyAesEncrypted();\n const encryptedData = addPadding(await CryptoWorker.invokeCrypto('rsa-encrypt', keyAesEncrypted, auth.publicKey), 256, true, true, true);\n\n const req_DH_params: req_DH_params = {\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n p: auth.p,\n q: auth.q,\n public_key_fingerprint: auth.publicKey.fingerprint,\n encrypted_data: encryptedData\n };\n\n const request = new TLSerialization({mtproto: true});\n request.storeMethod('req_DH_params', req_DH_params);\n\n const requestBytes = request.getBytes(true);\n\n if(DEBUG) {\n this.log('Send req_DH_params', req_DH_params/* , requestBytes.hex */);\n }\n\n let deserializer: Awaited>;\n try {\n deserializer = await this.sendPlainRequest(auth.dcId, requestBytes);\n } catch(error) {\n this.log.error('Send req_DH_params FAIL!', error);\n throw error;\n }\n\n const response = deserializer.fetchObject('Server_DH_Params', 'RESPONSE');\n\n if(DEBUG) {\n this.log('Sent req_DH_params, response:', response);\n }\n\n if(response._ !== 'server_DH_params_fail' && response._ !== 'server_DH_params_ok') {\n throw new Error('[MT] Server_DH_Params response invalid: ' + response._);\n }\n\n if(!bytesCmp(auth.nonce, response.nonce)) {\n throw new Error('[MT] Server_DH_Params nonce mismatch');\n }\n\n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\n throw new Error('[MT] Server_DH_Params server_nonce mismatch');\n }\n\n if(response._ === 'server_DH_params_fail') {\n const newNonceHash = (await CryptoWorker.invokeCrypto('sha1', auth.newNonce)).slice(-16);\n if(!bytesCmp(newNonceHash, response.new_nonce_hash)) {\n throw new Error('[MT] server_DH_params_fail new_nonce_hash mismatch');\n }\n\n throw new Error('[MT] server_DH_params_fail');\n }\n\n // fill auth object\n try {\n await this.decryptServerDhDataAnswer(auth, response.encrypted_answer);\n } catch(e) {\n this.log.error('mtpDecryptServerDhDataAnswer FAILED!', e);\n throw e;\n }\n\n // console.log(dT(), 'mtpSendReqDhParams: executing mtpSendSetClientDhParams...');\n\n return this.sendSetClientDhParams(auth);\n }\n\n private async decryptServerDhDataAnswer(auth: AuthOptions, encryptedAnswer: any) {\n auth.localTime = Date.now();\n\n // ! can't concat Array with Uint8Array!\n auth.tmpAesKey = (await CryptoWorker.invokeCrypto('sha1', auth.newNonce.concat(auth.serverNonce)))\n .concat((await CryptoWorker.invokeCrypto('sha1', auth.serverNonce.concat(auth.newNonce))).slice(0, 12));\n\n auth.tmpAesIv = (await CryptoWorker.invokeCrypto('sha1', auth.serverNonce.concat(auth.newNonce))).slice(12)\n .concat(await CryptoWorker.invokeCrypto('sha1', auth.newNonce.concat(auth.newNonce)), auth.newNonce.slice(0, 4));\n\n const answerWithHash = new Uint8Array(await CryptoWorker.invokeCrypto('aes-decrypt', encryptedAnswer, auth.tmpAesKey, auth.tmpAesIv));\n\n const hash = answerWithHash.slice(0, 20);\n const answerWithPadding = answerWithHash.slice(20);\n\n const deserializer = new TLDeserialization(answerWithPadding, {mtproto: true});\n const response = deserializer.fetchObject('Server_DH_inner_data');\n\n if(response._ !== 'server_DH_inner_data') {\n throw new Error('[MT] server_DH_inner_data response invalid: ' + response);\n }\n\n if(!bytesCmp(auth.nonce, response.nonce)) {\n throw new Error('[MT] server_DH_inner_data nonce mismatch');\n }\n\n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\n throw new Error('[MT] server_DH_inner_data serverNonce mismatch');\n }\n\n if(DEBUG) {\n this.log('Done decrypting answer');\n }\n auth.g = response.g;\n auth.dhPrime = response.dh_prime;\n auth.gA = response.g_a;\n auth.serverTime = response.server_time;\n auth.retry = 0;\n\n this.verifyDhParams(auth.g, auth.dhPrime, auth.gA);\n\n const offset = deserializer.getOffset();\n\n if(!bytesCmp(hash, await CryptoWorker.invokeCrypto('sha1', answerWithPadding.slice(0, offset)))) {\n throw new Error('[MT] server_DH_inner_data SHA1 mismatch');\n }\n\n this.timeManager.applyServerTime(auth.serverTime, auth.localTime);\n }\n\n private verifyDhParams(g: number, dhPrime: Uint8Array, gA: Uint8Array) {\n if(DEBUG) {\n this.log('Verifying DH params', g, dhPrime, gA);\n }\n\n const dhPrimeHex = bytesToHex(dhPrime);\n if(g !== 3 || dhPrimeHex !== 'c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b') {\n // The verified value is from https://core.telegram.org/mtproto/security_guidelines\n throw new Error('[MT] DH params are not verified: unknown dhPrime');\n }\n\n if(DEBUG) {\n this.log('dhPrime cmp OK');\n }\n\n const gABigInt = bigIntFromBytes(gA);\n const dhPrimeBigInt = bigInt(dhPrimeHex, 16);\n\n if(gABigInt.compare(bigInt.one) <= 0) {\n throw new Error('[MT] DH params are not verified: gA <= 1');\n }\n\n if(gABigInt.compare(dhPrimeBigInt.subtract(bigInt.one)) >= 0) {\n throw new Error('[MT] DH params are not verified: gA >= dhPrime - 1');\n }\n\n if(DEBUG) {\n this.log('1 < gA < dhPrime-1 OK');\n }\n\n const twoPow = bigInt(2).pow(2048 - 64);\n\n if(gABigInt.compare(twoPow) < 0) {\n throw new Error('[MT] DH params are not verified: gA < 2^{2048-64}');\n }\n if(gABigInt.compare(dhPrimeBigInt.subtract(twoPow)) >= 0) {\n throw new Error('[MT] DH params are not verified: gA > dhPrime - 2^{2048-64}');\n }\n\n if(DEBUG) {\n this.log('2^{2048-64} < gA < dhPrime-2^{2048-64} OK');\n }\n\n return true;\n }\n\n private async sendSetClientDhParams(auth: AuthOptions): Promise {\n const gBytes = bytesFromHex(auth.g.toString(16));\n\n auth.b = randomize(new Uint8Array(256));\n // MTProto.secureRandom.nextBytes(auth.b);\n\n // let gB: Awaited>;\n try {\n var gB = await CryptoWorker.invokeCrypto('mod-pow', gBytes, auth.b, auth.dhPrime);\n } catch(error) {\n throw error;\n }\n\n const data = new TLSerialization({mtproto: true});\n data.storeObject({\n _: 'client_DH_inner_data',\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n retry_id: [0, auth.retry++],\n g_b: gB\n }, 'Client_DH_Inner_Data');\n\n const dataWithHash = (await CryptoWorker.invokeCrypto('sha1', data.getBuffer())).concat(data.getBytes(true));\n const encryptedData = await CryptoWorker.invokeCrypto('aes-encrypt', dataWithHash, auth.tmpAesKey, auth.tmpAesIv);\n\n const request = new TLSerialization({mtproto: true});\n request.storeMethod('set_client_DH_params', {\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n encrypted_data: encryptedData\n });\n\n if(DEBUG) {\n this.log('Send set_client_DH_params');\n }\n\n let deserializer: Awaited>;\n try {\n deserializer = await this.sendPlainRequest(auth.dcId, request.getBytes(true));\n } catch(err) {\n throw err;\n }\n\n const response = deserializer.fetchObject('Set_client_DH_params_answer');\n\n if(response._ !== 'dh_gen_ok' && response._ !== 'dh_gen_retry' && response._ !== 'dh_gen_fail') {\n throw new Error('[MT] Set_client_DH_params_answer response invalid: ' + response._);\n }\n\n if(!bytesCmp(auth.nonce, response.nonce)) {\n throw new Error('[MT] Set_client_DH_params_answer nonce mismatch');\n }\n\n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\n throw new Error('[MT] Set_client_DH_params_answer server_nonce mismatch');\n }\n\n // let authKey: Uint8Array;\n try {\n var authKey = await CryptoWorker.invokeCrypto('mod-pow', auth.gA, auth.b, auth.dhPrime);\n } catch(err) {\n throw authKey;\n }\n\n const authKeyHash = await CryptoWorker.invokeCrypto('sha1', authKey),\n authKeyAux = authKeyHash.slice(0, 8),\n authKeyId = authKeyHash.slice(-8);\n\n if(DEBUG) {\n this.log('Got Set_client_DH_params_answer', response._, authKey);\n }\n switch(response._) {\n case 'dh_gen_ok': {\n const newNonceHash1 = (await CryptoWorker.invokeCrypto('sha1', auth.newNonce.concat([1], authKeyAux))).slice(-16);\n\n if(!bytesCmp(newNonceHash1, response.new_nonce_hash1)) {\n this.log.error('Set_client_DH_params_answer new_nonce_hash1 mismatch', newNonceHash1, response);\n throw new Error('new_nonce_hash1 mismatch');\n }\n\n const serverSalt = bytesXor(auth.newNonce.slice(0, 8), auth.serverNonce.slice(0, 8));\n if(DEBUG) {\n this.log('Auth successfull!', authKeyId, authKey, serverSalt);\n }\n\n auth.authKeyId = authKeyId;\n auth.authKey = authKey;\n auth.serverSalt = serverSalt;\n\n return auth;\n }\n\n case 'dh_gen_retry': {\n const newNonceHash2 = (await CryptoWorker.invokeCrypto('sha1', auth.newNonce.concat([2], authKeyAux))).slice(-16);\n if(!bytesCmp(newNonceHash2, response.new_nonce_hash2)) {\n throw new Error('[MT] Set_client_DH_params_answer new_nonce_hash2 mismatch');\n }\n\n return this.sendSetClientDhParams(auth);\n }\n\n case 'dh_gen_fail': {\n const newNonceHash3 = (await CryptoWorker.invokeCrypto('sha1', auth.newNonce.concat([3], authKeyAux))).slice(-16);\n if(!bytesCmp(newNonceHash3, response.new_nonce_hash3)) {\n throw new Error('[MT] Set_client_DH_params_answer new_nonce_hash3 mismatch');\n }\n\n throw new Error('[MT] Set_client_DH_params_answer fail');\n }\n }\n }\n\n private getTransportType = () => {\n if(!import.meta.env.VITE_MTPROTO_AUTO || !Modes.multipleTransports) {\n return;\n }\n\n if(this.getTransportTypePromise) return this.getTransportTypePromise;\n return this.getTransportTypePromise = transportController.pingTransports().then(({websocket}) => {\n this.transportType = websocket ? 'websocket' : 'https';\n this.log('will use transport:', this.transportType);\n });\n };\n\n public auth(dcId: DcId) {\n let promise = this.cached[dcId];\n if(promise) {\n return promise;\n }\n\n promise = new Promise(async(resolve, reject) => {\n await this.getTransportType();\n\n let error: ApiError;\n let _try = 1;\n while(_try++ <= 3) {\n try {\n const auth: AuthOptions = {\n dcId,\n nonce: randomize(new Uint8Array(16))\n };\n\n const promise = this.sendReqPQ(auth);\n resolve(await promise);\n return;\n } catch(err) {\n error = err;\n }\n }\n\n reject(error);\n });\n\n return this.cached[dcId] = promise;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport sessionStorage from '../sessionStorage';\nimport {nextRandomUint} from '../../helpers/random';\nimport {WorkerTaskVoidTemplate} from '../../types';\nimport ulongFromInts from '../../helpers/long/ulongFromInts';\nimport {AppManager} from '../appManagers/manager';\n\n/*\nlet lol: any = {};\nfor(var i = 0; i < 100; i++) {\n timeManager.generateId();\n}\n*/\n\nexport interface ApplyServerTimeOffsetTask extends WorkerTaskVoidTemplate {\n type: 'applyServerTimeOffset',\n payload: TimeManager['timeOffset']\n};\n\nexport class TimeManager extends AppManager {\n private lastMessageId: [number, number];\n private timeOffset: number;\n\n /* private midnightNoOffset: number;\n private midnightOffseted: Date;\n\n private midnightOffset: number; */\n\n /* private timeParams: {\n midnightOffset: number,\n serverTimeOffset: number\n }; */\n\n protected after() {\n this.lastMessageId = [0, 0];\n this.timeOffset = 0;\n\n sessionStorage.get('server_time_offset').then((to) => {\n if(to) {\n this.timeOffset = to;\n }\n });\n\n\n // * migrated from ServerTimeManager\n /* const timestampNow = tsNow(true);\n this.midnightNoOffset = timestampNow - (timestampNow % 86400);\n this.midnightOffseted = new Date();\n this.midnightOffseted.setHours(0, 0, 0, 0);\n\n this.midnightOffset = this.midnightNoOffset - (Math.floor(+this.midnightOffseted / 1000)); */\n\n /* this.timeParams = {\n midnightOffset: this.midnightOffset,\n serverTimeOffset: this.serverTimeOffset\n }; */\n }\n\n public getServerTimeOffset() {\n return this.timeOffset;\n }\n\n public generateId(): string {\n const timeTicks = Date.now(),\n timeSec = Math.floor(timeTicks / 1000) + this.timeOffset,\n timeMSec = timeTicks % 1000,\n random = nextRandomUint(16);\n\n let messageId: TimeManager['lastMessageId'] = [timeSec, (timeMSec << 21) | (random << 3) | 4];\n if(this.lastMessageId[0] > messageId[0] ||\n this.lastMessageId[0] === messageId[0] && this.lastMessageId[1] >= messageId[1]) {\n messageId = [this.lastMessageId[0], this.lastMessageId[1] + 4];\n }\n\n this.lastMessageId = messageId;\n\n const ret = ulongFromInts(messageId[0], messageId[1]).toString(10);\n\n // if(lol[ret]) {\n // console.error('[TimeManager]: Generated SAME msg id', messageId, this.timeOffset, ret);\n // }\n // lol[ret] = true;\n\n // console.log('[TimeManager]: Generated msg id', messageId, this.timeOffset, ret);\n\n return ret\n }\n\n public applyServerTime(serverTime: number, localTime?: number) {\n localTime = (localTime || Date.now()) / 1000 | 0;\n const newTimeOffset = serverTime - localTime;\n const changed = Math.abs(this.timeOffset - newTimeOffset) > 10;\n this.lastMessageId = [0, 0];\n\n if(this.timeOffset !== newTimeOffset) {\n sessionStorage.set({\n server_time_offset: newTimeOffset\n });\n\n this.timeOffset = newTimeOffset;\n }\n\n // console.log('[TimeManager]: Apply server time', serverTime, localTime, newTimeOffset, changed);\n\n return changed;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {DocumentAttribute, WebDocument} from '../../layer';\n\nexport default class AppWebDocsManager {\n public saveWebDocument(webDocument: WebDocument) {\n if(!webDocument) {\n return;\n }\n\n const attribute: DocumentAttribute.documentAttributeImageSize = webDocument.attributes.find((attribute) => attribute._ === 'documentAttributeImageSize') as any;\n if(attribute) {\n webDocument.w = attribute.w;\n webDocument.h = attribute.h;\n }\n\n return webDocument;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {HelpPremiumPromo, InputInvoice, InputPaymentCredentials, InputStorePaymentPurpose, PaymentRequestedInfo, PaymentsPaymentForm, PaymentsPaymentResult, PaymentsStarsStatus, StarsTransactionPeer, Update} from '../../layer';\nimport {AppManager} from './manager';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\n\nexport default class AppPaymentsManager extends AppManager {\n private premiumPromo: MaybePromise;\n private starsStatus: MaybePromise;\n\n protected after() {\n // * reset premium promo\n this.rootScope.addEventListener('premium_toggle', () => {\n this.getPremiumPromo(true);\n });\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateStarsBalance: this.onUpdateStarsBalance\n });\n }\n\n public getInputInvoiceBySlug(slug: string): InputInvoice.inputInvoiceSlug {\n return {\n _: 'inputInvoiceSlug',\n slug\n };\n }\n\n public getInputInvoiceByPeerId(peerId: PeerId, mid: number): InputInvoice.inputInvoiceMessage {\n return {\n _: 'inputInvoiceMessage',\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(mid)\n };\n }\n\n public getPaymentForm(invoice: InputInvoice) {\n return this.apiManager.invokeApi('payments.getPaymentForm', {\n invoice,\n theme_params: this.apiManager.getThemeParams()\n }).then((paymentForm) => {\n this.appPeersManager.saveApiPeers(paymentForm);\n paymentForm.photo = this.appWebDocsManager.saveWebDocument(paymentForm.photo);\n\n return paymentForm;\n });\n }\n\n public getPaymentReceipt(peerId: PeerId, mid: number) {\n return this.apiManager.invokeApi('payments.getPaymentReceipt', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(mid)\n }).then((paymentForm) => {\n this.appPeersManager.saveApiPeers(paymentForm);\n paymentForm.photo = this.appWebDocsManager.saveWebDocument(paymentForm.photo);\n\n return paymentForm;\n });\n }\n\n public validateRequestedInfo(invoice: InputInvoice, info: PaymentRequestedInfo, save?: boolean) {\n return this.apiManager.invokeApi('payments.validateRequestedInfo', {\n save,\n invoice,\n info\n });\n }\n\n public sendPaymentForm(\n invoice: InputInvoice,\n formId: PaymentsPaymentForm['form_id'],\n requestedInfoId: string,\n shippingOptionId: string,\n credentials: InputPaymentCredentials,\n tipAmount?: number\n ) {\n return this.apiManager.invokeApi('payments.sendPaymentForm', {\n form_id: formId,\n invoice,\n requested_info_id: requestedInfoId,\n shipping_option_id: shippingOptionId,\n credentials,\n tip_amount: tipAmount || undefined\n }).then(this.processPaymentResult);\n }\n\n public clearSavedInfo(info?: boolean, credentials?: boolean) {\n return this.apiManager.invokeApi('payments.clearSavedInfo', {\n info,\n credentials\n });\n }\n\n public getPremiumGiftCodeOptions(peerId: PeerId) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'payments.getPremiumGiftCodeOptions',\n params: {\n boost_peer: this.appPeersManager.getInputPeerById(peerId)\n },\n processResult: (premiumGiftCodeOptions) => {\n return premiumGiftCodeOptions/* .filter((option) => !option.store_product) */;\n }\n });\n }\n\n public getPremiumPromo(overwrite?: boolean) {\n if(overwrite && this.premiumPromo) {\n this.premiumPromo = undefined;\n }\n\n return this.premiumPromo ??= this.apiManager.invokeApiSingleProcess({\n method: 'help.getPremiumPromo',\n params: {},\n processResult: (helpPremiumPromo) => {\n this.appPeersManager.saveApiPeers(helpPremiumPromo);\n helpPremiumPromo.videos = helpPremiumPromo.videos.map((doc) => {\n return this.appDocsManager.saveDoc(doc, {type: 'premiumPromo'});\n });\n\n return this.premiumPromo = helpPremiumPromo;\n }\n });\n }\n\n public checkGiftCode(slug: string) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'payments.checkGiftCode',\n params: {slug},\n processResult: (checkedGiftCode) => {\n this.appPeersManager.saveApiPeers(checkedGiftCode);\n checkedGiftCode.slug = slug;\n\n if(checkedGiftCode.giveaway_msg_id) {\n const fromPeerId = checkedGiftCode.from_id && this.appPeersManager.getPeerId(checkedGiftCode.from_id);\n checkedGiftCode.giveaway_msg_id = this.appMessagesIdsManager.generateMessageId(\n checkedGiftCode.giveaway_msg_id,\n !fromPeerId || fromPeerId.isUser() ? undefined : fromPeerId.toChatId()\n );\n }\n\n return checkedGiftCode;\n }\n });\n }\n\n public applyGiftCode(slug: string) {\n // return Promise.reject({type: 'PREMIUM_SUB_ACTIVE_UNTIL_1703345751'});\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'payments.applyGiftCode',\n params: {slug},\n processResult: (updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n }\n });\n }\n\n public getGiveawayInfo(peerId: PeerId, mid: number) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'payments.getGiveawayInfo',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(mid)\n }\n });\n }\n\n public launchPrepaidGiveaway(peerId: PeerId, id: Long, purpose: InputStorePaymentPurpose) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'payments.launchPrepaidGiveaway',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n giveaway_id: id,\n purpose\n },\n processResult: (updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n }\n });\n }\n\n public getStarsTopupOptions() {\n return this.apiManager.invokeApi('payments.getStarsTopupOptions');\n }\n\n private saveStarsStatus = (starsStatus: PaymentsStarsStatus) => {\n this.appPeersManager.saveApiPeers(starsStatus);\n\n starsStatus.history.forEach((transaction) => {\n const transactionPeer = transaction.peer as StarsTransactionPeer.starsTransactionPeer;\n const peerId = transactionPeer && this.appPeersManager.getPeerId(transactionPeer.peer);\n if(transaction.msg_id) {\n transaction.msg_id = this.appMessagesIdsManager.generateMessageId(\n transaction.msg_id,\n this.appPeersManager.isChannel(peerId) ? peerId.toChatId() : undefined\n );\n }\n\n if(transaction.extended_media) {\n transaction.extended_media.forEach((messageMedia) => {\n this.appMessagesManager.saveMessageMedia(\n {media: messageMedia},\n {type: 'starsTransaction', peerId, mid: transaction.msg_id}\n );\n });\n }\n });\n\n return starsStatus;\n };\n\n public getStarsStatus(overwrite?: boolean) {\n if(overwrite) {\n this.starsStatus = undefined;\n }\n\n return this.starsStatus ??= this.apiManager.invokeApiSingleProcess({\n method: 'payments.getStarsStatus',\n params: {\n peer: this.appPeersManager.getInputPeerById(this.rootScope.myId)\n },\n processResult: (starsStatus) => {\n return this.starsStatus = this.saveStarsStatus(starsStatus);\n }\n });\n }\n\n public getStarsTransactions(offset: string = '', inbound?: boolean) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'payments.getStarsTransactions',\n params: {\n peer: this.appPeersManager.getInputPeerById(this.rootScope.myId),\n offset,\n inbound,\n outbound: inbound === false,\n limit: 30\n },\n processResult: this.saveStarsStatus\n });\n }\n\n public sendStarsForm(\n invoice: InputInvoice,\n formId: PaymentsPaymentForm['form_id']\n ) {\n return this.apiManager.invokeApi('payments.sendStarsForm', {\n form_id: formId,\n invoice\n }).then(this.processPaymentResult);\n }\n\n private processPaymentResult = (result: PaymentsPaymentResult) => {\n if(result._ === 'payments.paymentResult') {\n this.apiUpdatesManager.processUpdateMessage(result.updates);\n }\n\n return result;\n };\n\n private onUpdateStarsBalance = (update: Update.updateStarsBalance) => {\n const {starsStatus} = this;\n if(!starsStatus || starsStatus instanceof Promise) {\n return;\n }\n\n (starsStatus as PaymentsStarsStatus).balance = update.balance;\n this.rootScope.dispatchEvent('stars_balance', update.balance);\n };\n}\n","import {AttachMenuBot} from '../../../../layer';\nimport {ATTACH_MENU_BOT_ICON_NAME} from '../../../mtproto/mtproto_config';\n\nexport default function getAttachMenuBotIcon(attachMenuBot: AttachMenuBot) {\n if(!attachMenuBot) {\n return;\n }\n\n return attachMenuBot.icons.find((icon) => icon.name === ATTACH_MENU_BOT_ICON_NAME);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MessageSendingParams} from './appMessagesManager';\nimport {AppManager} from './manager';\nimport {AttachMenuBots, AttachMenuBot, Update, DataJSON, BotApp} from '../../layer';\nimport assumeType from '../../helpers/assumeType';\nimport makeError from '../../helpers/makeError';\nimport getAttachMenuBotIcon from './utils/attachMenuBots/getAttachMenuBotIcon';\nimport {randomLong} from '../../helpers/random';\nimport {ReferenceContext} from '../mtproto/referenceDatabase';\n\nconst BOTS_SUPPORTED = true;\n\nexport type RequestWebViewOptions = MessageSendingParams & {\n botId: BotId,\n peerId: PeerId,\n // platform: string,\n startParam?: string,\n fromBotMenu?: boolean,\n fromAttachMenu?: boolean,\n fromSwitchWebView?: boolean,\n fromSideMenu?: boolean,\n attachMenuBot?: AttachMenuBot,\n url?: string,\n themeParams?: DataJSON,\n isSimpleWebView?: boolean,\n buttonText?: string,\n writeAllowed?: boolean,\n app?: BotApp.botApp,\n noConfirmation?: boolean,\n hasSettings?: boolean\n};\n\nexport default class AppAttachMenuBotsManager extends AppManager {\n private attachMenuBots: Map;\n private attachMenuBotsArr: AttachMenuBot[];\n\n protected after() {\n this.clear(true);\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateAttachMenuBots: this.onUpdateAttachMenuBots,\n\n updateWebViewResultSent: this.onUpdateWebViewResultSent\n });\n\n this.rootScope.addEventListener('user_auth', () => {\n this.appAttachMenuBotsManager.getAttachMenuBots();\n\n setInterval(() => {\n this.onUpdateAttachMenuBots({_: 'updateAttachMenuBots'});\n }, 30 * 60e3);\n });\n }\n\n public clear = (init = false) => {\n if(!init) {\n this.attachMenuBots.clear();\n this.attachMenuBotsArr = undefined;\n } else {\n this.attachMenuBots = new Map();\n }\n };\n\n private onUpdateAttachMenuBots = (update: Update.updateAttachMenuBots) => {\n this.clear();\n this.getAttachMenuBots();\n };\n\n private onUpdateWebViewResultSent = (update: Update.updateWebViewResultSent) => {\n this.rootScope.dispatchEvent('web_view_result_sent', update.query_id);\n };\n\n public onLanguageChange() {\n if(!this.attachMenuBots?.size) {\n return;\n }\n\n this.onUpdateAttachMenuBots({_: 'updateAttachMenuBots'});\n }\n\n public saveAttachMenuBot(attachMenuBot: AttachMenuBot) {\n this.attachMenuBots.set(attachMenuBot.bot_id, attachMenuBot);\n const menuBotIcon = getAttachMenuBotIcon(attachMenuBot);\n if(menuBotIcon) {\n menuBotIcon.icon = this.appDocsManager.saveDoc(menuBotIcon.icon, {type: 'attachMenuBotIcon', botId: attachMenuBot.bot_id});\n this.apiFileManager.downloadMedia({media: menuBotIcon.icon});\n }\n this.rootScope.dispatchEvent('attach_menu_bot', attachMenuBot);\n return attachMenuBot;\n }\n\n public saveAttachMenuBots(attachMenuBots: AttachMenuBot[]) {\n if((attachMenuBots as any).saved) return;\n (attachMenuBots as any).saved = true;\n attachMenuBots.forEach((user) => this.saveAttachMenuBot(user));\n }\n\n public saveBotApp(botId: BotId, botApp: BotApp) {\n if(!botApp) {\n return;\n }\n\n assumeType(botApp);\n\n const referenceContext: ReferenceContext = {\n type: 'botApp',\n botId,\n appName: botApp.short_name\n };\n\n botApp.photo = this.appPhotosManager.savePhoto(botApp.photo, referenceContext);\n botApp.document = this.appDocsManager.saveDoc(botApp.document, referenceContext);\n\n return botApp;\n }\n\n public getAttachMenuBots() {\n return this.attachMenuBotsArr ?? this.apiManager.invokeApiSingleProcess({\n method: 'messages.getAttachMenuBots',\n processResult: (attachMenuBots) => {\n assumeType(attachMenuBots);\n this.appUsersManager.saveApiUsers(attachMenuBots.users);\n this.saveAttachMenuBots(attachMenuBots.bots);\n return this.attachMenuBotsArr = attachMenuBots.bots.slice(0, BOTS_SUPPORTED ? undefined : 0);\n }\n });\n }\n\n public getAttachMenuBotCached(botId: BotId) {\n return this.attachMenuBots.get(botId);\n }\n\n public getAttachMenuBot(botId: BotId, overwrite?: boolean) {\n if(!this.appUsersManager.isAttachMenuBot(botId) || !BOTS_SUPPORTED) {\n throw makeError('BOT_INVALID');\n }\n\n return (!overwrite && this.getAttachMenuBotCached(botId)) ?? this.apiManager.invokeApiSingleProcess({\n method: 'messages.getAttachMenuBot',\n params: {\n bot: this.appUsersManager.getUserInput(botId)\n },\n processResult: (attachMenuBotsBot) => {\n this.appUsersManager.saveApiUsers(attachMenuBotsBot.users);\n const attachMenuBot = this.saveAttachMenuBot(attachMenuBotsBot.bot);\n return attachMenuBot;\n }\n });\n }\n\n public requestWebView(options: RequestWebViewOptions) {\n const {\n botId,\n peerId,\n url,\n fromBotMenu,\n fromSwitchWebView,\n fromSideMenu,\n themeParams = this.apiManager.getThemeParams(),\n // platform,\n silent,\n sendAsPeerId,\n startParam,\n isSimpleWebView,\n app,\n writeAllowed\n } = options;\n\n const platform = 'web';\n\n if(app) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.requestAppWebView',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n start_param: startParam,\n theme_params: themeParams,\n platform,\n write_allowed: writeAllowed,\n app: {\n _: 'inputBotAppID',\n access_hash: app.access_hash,\n id: app.id\n }\n }\n });\n }\n\n if(isSimpleWebView) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.requestSimpleWebView',\n params: {\n bot: this.appUsersManager.getUserInput(botId),\n url,\n platform,\n from_switch_webview: fromSwitchWebView,\n from_side_menu: fromSideMenu,\n theme_params: themeParams,\n start_param: startParam\n }\n });\n }\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.requestWebView',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n bot: this.appUsersManager.getUserInput(botId),\n silent,\n platform,\n url,\n reply_to: this.appMessagesManager.getInputReplyTo(options),\n from_bot_menu: fromBotMenu,\n theme_params: themeParams,\n send_as: sendAsPeerId ? this.appPeersManager.getInputPeerById(sendAsPeerId) : undefined,\n start_param: startParam\n }\n });\n }\n\n public prolongWebView(options: MessageSendingParams & {\n peerId: PeerId,\n botId: BotId,\n queryId: string | number\n }) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.prolongWebView',\n params: {\n peer: this.appPeersManager.getInputPeerById(options.peerId),\n bot: this.appUsersManager.getUserInput(options.botId),\n query_id: options.queryId,\n silent: options.silent,\n reply_to: this.appMessagesManager.getInputReplyTo(options),\n send_as: options.sendAsPeerId ? this.appPeersManager.getInputPeerById(options.sendAsPeerId) : undefined\n }\n });\n }\n\n public toggleBotInAttachMenu(botId: BotId, enabled: boolean, writeAllowed?: boolean) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.toggleBotInAttachMenu',\n params: {\n bot: this.appUsersManager.getUserInput(botId),\n enabled,\n write_allowed: writeAllowed\n }/* ,\n processResult: (result) => {\n return result;\n // this.apiUpdatesManager.processLocalUpdate({_: 'updateAttachMenuBots'});\n } */\n });\n }\n\n public sendWebViewData(botId: BotId, buttonText: string, data: string) {\n return this.apiManager.invokeApi('messages.sendWebViewData', {\n bot: this.appUsersManager.getUserInput(botId),\n button_text: buttonText,\n data,\n random_id: randomLong()\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n\n public getBotApp(botId: BotId, shortName: string) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.getBotApp',\n params: {\n app: {\n _: 'inputBotAppShortName',\n bot_id: this.appUsersManager.getUserInput(botId),\n short_name: shortName\n },\n hash: 0\n },\n processResult: (messagesBotApp) => {\n messagesBotApp.app = this.saveBotApp(botId, messagesBotApp.app);\n return messagesBotApp;\n }\n });\n }\n\n public invokeWebViewCustomMethod(botId: BotId, customMethod: string, params: string) {\n return this.apiManager.invokeApi('bots.invokeWebViewCustomMethod', {\n bot: this.appUsersManager.getUserInput(botId),\n custom_method: customMethod,\n params: {\n _: 'dataJSON',\n data: JSON.stringify(params)\n }\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {UrlAuthResult} from '../../layer';\nimport {AppManager} from './manager';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\n\nexport default class AppSeamlessLoginManager extends AppManager {\n public requestUrlAuth(url: string, peerId?: PeerId, mid?: number, buttonId?: number) {\n return this.apiManager.invokeApi('messages.requestUrlAuth', {\n button_id: buttonId,\n msg_id: mid ? getServerMessageId(mid) : undefined,\n peer: peerId ? this.appPeersManager.getInputPeerById(peerId) : undefined,\n url\n }).then((urlAuthResult) => {\n if(urlAuthResult._ === 'urlAuthResultRequest') {\n this.appUsersManager.saveApiUser(urlAuthResult.bot);\n }\n\n return urlAuthResult;\n });\n }\n\n public acceptUrlAuth(url: string, peerId?: PeerId, mid?: number, buttonId?: number, writeAllowed?: boolean) {\n return this.apiManager.invokeApi('messages.acceptUrlAuth', {\n button_id: buttonId,\n msg_id: mid ? getServerMessageId(mid) : undefined,\n peer: peerId ? this.appPeersManager.getInputPeerById(peerId) : undefined,\n url,\n write_allowed: writeAllowed\n }).then((urlAuthResult) => {\n return urlAuthResult as Exclude;\n });\n }\n\n public getWebAuthorizations() {\n return this.apiManager.invokeApi('account.getWebAuthorizations').then((webAuthorizations) => {\n this.appUsersManager.saveApiUsers(webAuthorizations.users);\n return webAuthorizations.authorizations;\n });\n }\n\n public resetWebAuthorization(hash: Long) {\n return this.apiManager.invokeApi('account.resetWebAuthorization', {\n hash\n });\n }\n\n public resetWebAuthorizations() {\n return this.apiManager.invokeApi('account.resetWebAuthorizations');\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport assumeType from '../../helpers/assumeType';\nimport {AccountThemes, AccountWallPapers, InputWallPaper, WallPaper} from '../../layer';\nimport {AppManager} from './manager';\n\ntype WallPaperId = WallPaper['id'];\n\nexport default class AppThemesManager extends AppManager {\n private wallPapers: {[id: WallPaperId]: WallPaper};\n private wallPapersBySlug: {[slug: string]: WallPaper};\n\n protected after() {\n this.wallPapers = {};\n this.wallPapersBySlug = {};\n\n this.rootScope.addEventListener('user_auth', () => {\n this.getThemes();\n });\n\n return this.appStateManager.getState().then((state) => {\n try {\n this.saveAccountThemes(state.accountThemes);\n } catch(err) {}\n });\n }\n\n public saveWallPaper(wallPaper: WallPaper) {\n if(!wallPaper) {\n return wallPaper;\n }\n // const oldWallPaper = this.wallPapers[wallPaper.id];\n\n // ! IT'S BROKEN NOW. SERVER RETURNS SAME ID FOR DIFFERENT WALLPAPERS\n // if(oldWallPaper) {\n // console.log('rewrite', {...oldWallPaper}, {...wallPaper});\n // }\n\n let slug: string;\n if(wallPaper._ !== 'wallPaperNoFile') {\n slug = wallPaper.slug;\n wallPaper.document = this.appDocsManager.saveDoc(wallPaper.document, {type: 'wallPaper', wallPaperId: wallPaper.id});\n }\n\n // if(oldWallPaper) {\n // return Object.assign(oldWallPaper, wallPaper);\n // } else {\n this.wallPapers[wallPaper.id] = wallPaper;\n // }\n\n if(slug) {\n this.wallPapersBySlug[slug] = wallPaper;\n }\n\n return wallPaper;\n }\n\n public getWallPaper(inputWallPaper: InputWallPaper) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'account.getWallPaper',\n params: {wallpaper: inputWallPaper},\n processResult: (wallPaper) => {\n return this.saveWallPaper(wallPaper);\n }\n });\n }\n\n public getInputWallPaper(wallPaper: WallPaper | string): InputWallPaper {\n if(typeof(wallPaper) === 'string') {\n return {_: 'inputWallPaperSlug', slug: wallPaper};\n } else if(wallPaper._ === 'wallPaperNoFile') {\n return {_: 'inputWallPaperNoFile', id: wallPaper.id};\n } else {\n return {_: 'inputWallPaper', id: wallPaper.id, access_hash: wallPaper.access_hash};\n }\n }\n\n public getWallPaperById(id: WallPaperId) {\n const wallPaper = this.wallPapers[id];\n return this.getWallPaper(this.getInputWallPaper(wallPaper));\n }\n\n public getWallPaperBySlug(slug: string) {\n const wallPaper = this.wallPapersBySlug[slug];\n if(wallPaper) {\n return wallPaper;\n }\n\n return this.getWallPaper(this.getInputWallPaper(slug));\n }\n\n private saveAccountThemes(accountThemes: AccountThemes.accountThemes) {\n accountThemes.themes?.forEach((theme) => {\n if(!theme.settings) {\n return;\n }\n\n theme.settings.forEach((themeSettings) => {\n themeSettings.wallpaper = this.saveWallPaper(themeSettings.wallpaper);\n });\n });\n }\n\n public async getThemes() {\n const state = await this.appStateManager.getState();\n const oldAccountThemes = state.accountThemes;\n return this.apiManager.invokeApiSingleProcess({\n method: 'account.getThemes',\n params: {format: 'macos', hash: oldAccountThemes?.hash ?? 0},\n processResult: async(accountThemes) => {\n if(accountThemes._ === 'account.themesNotModified') {\n return oldAccountThemes.themes;\n }\n\n this.saveAccountThemes(accountThemes);\n await this.appStateManager.pushToState('accountThemes', accountThemes);\n return accountThemes.themes;\n }\n });\n }\n\n public getWallPapers() {\n return this.apiManager.invokeApiHashable({method: 'account.getWallPapers'}).then((accountWallpapers) => {\n const wallPapers = (accountWallpapers as AccountWallPapers.accountWallPapers).wallpapers;\n wallPapers.forEach((wallPaper, idx, arr) => {\n arr[idx] = this.saveWallPaper(wallPaper);\n });\n\n return wallPapers;\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {AppManager} from './manager';\n\nexport default class AppUsernamesManager extends AppManager {\n public toggleUsername({\n username,\n active,\n peerId\n }: {\n username: string,\n active: boolean,\n peerId?: PeerId\n }) {\n if(!peerId || peerId === this.appUsersManager.userId) {\n return this.apiManager.invokeApi('account.toggleUsername', {username, active});\n } else if(peerId.isAnyChat()) {\n const chatId = peerId.toChatId();\n const promise = this.apiManager.invokeApi('channels.toggleUsername', {\n channel: this.appChatsManager.getChannelInput(chatId),\n username,\n active\n });\n\n return this.appChatsManager.refreshChatAfterRequest(chatId, promise);\n } else {\n return this.apiManager.invokeApi('bots.toggleUsername', {\n bot: this.appUsersManager.getUserInput(peerId),\n username,\n active\n });\n }\n }\n\n public reorderUsernames({\n peerId,\n order\n }: {\n peerId: PeerId,\n order: string[]\n }) {\n if(!peerId) {\n return this.apiManager.invokeApi('account.reorderUsernames', {order});\n } else if(peerId.isAnyChat()) {\n const chatId = peerId.toChatId();\n const promise = this.apiManager.invokeApi('channels.reorderUsernames', {\n channel: this.appChatsManager.getChannelInput(chatId),\n order\n });\n\n return this.appChatsManager.refreshChatAfterRequest(chatId, promise);\n } else {\n return this.apiManager.invokeApi('bots.reorderUsernames', {\n bot: this.appUsersManager.getUserInput(peerId),\n order\n });\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {ChatInvite, InputUser, Updates} from '../../layer';\nimport {AppManager} from './manager';\nimport getPeerId from './utils/peers/getPeerId';\n\nexport default class AppChatInvitesManager extends AppManager {\n protected after() {\n this.apiUpdatesManager.addMultipleEventsListeners({\n updatePendingJoinRequests: async(update) => {\n const peerId = getPeerId(update.peer);\n const state = await this.appStateManager.getState();\n delete state.hideChatJoinRequests[peerId];\n this.appStateManager.pushToState('hideChatJoinRequests', state.hideChatJoinRequests);\n this.rootScope.dispatchEvent('chat_requests', {\n chatId: peerId.toChatId(),\n recentRequesters: update.recent_requesters,\n requestsPending: update.requests_pending\n });\n }\n });\n }\n\n public saveChatInvite(hash: string, chatInvite: ChatInvite) {\n if(!chatInvite) {\n return;\n }\n\n if((chatInvite as ChatInvite.chatInvitePeek).chat) {\n this.appChatsManager.saveApiChat((chatInvite as ChatInvite.chatInvitePeek).chat, true);\n }\n\n if((chatInvite as ChatInvite.chatInvite).photo) {\n (chatInvite as ChatInvite.chatInvite).photo = this.appPhotosManager.savePhoto(\n (chatInvite as ChatInvite.chatInvite).photo,\n {type: 'chatInvite', hash}\n );\n }\n\n return chatInvite;\n }\n\n public exportChatInvite({\n chatId,\n expireDate,\n usageLimit,\n requestNeeded,\n title\n }: {\n chatId: ChatId,\n expireDate?: number,\n usageLimit?: number,\n requestNeeded?: boolean,\n title?: string\n }) {\n return this.apiManager.invokeApi('messages.exportChatInvite', {\n peer: this.appChatsManager.getInputPeer(chatId),\n expire_date: expireDate,\n usage_limit: usageLimit,\n request_needed: requestNeeded,\n title\n });\n }\n\n public checkChatInvite(hash: string) {\n return this.apiManager.invokeApi('messages.checkChatInvite', {hash}).then((chatInvite) => {\n return this.appChatInvitesManager.saveChatInvite(hash, chatInvite);\n });\n }\n\n public importChatInvite(hash: string) {\n return this.apiManager.invokeApi('messages.importChatInvite', {hash})\n .then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n const chat = (updates as Updates.updates).chats[0];\n return chat.id;\n });\n }\n\n public getExportedChatInvites({\n chatId,\n revoked,\n adminId\n }: {\n chatId: ChatId,\n revoked?: boolean,\n adminId?: UserId\n }) {\n return this.apiManager.invokeApi('messages.getExportedChatInvites', {\n peer: this.appChatsManager.getInputPeer(chatId),\n admin_id: adminId ? this.appUsersManager.getUserInput(adminId) : {_: 'inputUserSelf'},\n limit: 50,\n revoked\n }).then((exportedChatInvites) => {\n this.appUsersManager.saveApiUsers(exportedChatInvites.users);\n return exportedChatInvites;\n });\n }\n\n public editExportedChatInvite({\n chatId,\n link,\n expireDate,\n usageLimit,\n requestNeeded,\n title,\n revoked\n }: {\n chatId: ChatId,\n link: string,\n expireDate?: number,\n usageLimit?: number,\n requestNeeded?: boolean,\n title?: string,\n revoked?: boolean\n }) {\n return this.apiManager.invokeApi('messages.editExportedChatInvite', {\n peer: this.appChatsManager.getInputPeer(chatId),\n revoked,\n link,\n expire_date: expireDate,\n usage_limit: usageLimit,\n request_needed: requestNeeded,\n title\n }).then((exportedChatInvite) => {\n this.appUsersManager.saveApiUsers(exportedChatInvite.users);\n return exportedChatInvite;\n });\n }\n\n public deleteRevokedExportedChatInvites(chatId: ChatId, adminId?: UserId) {\n return this.apiManager.invokeApi('messages.deleteRevokedExportedChatInvites', {\n peer: this.appChatsManager.getInputPeer(chatId),\n admin_id: this.appUsersManager.getUserInput(adminId)\n });\n }\n\n public deleteExportedChatInvite(chatId: ChatId, link: string) {\n return this.apiManager.invokeApi('messages.deleteExportedChatInvite', {\n peer: this.appChatsManager.getInputPeer(chatId),\n link\n });\n }\n\n public getAdminsWithInvites(chatId: ChatId) {\n return this.apiManager.invokeApi('messages.getAdminsWithInvites', {\n peer: this.appChatsManager.getInputPeer(chatId)\n }).then((chatAdminsWithInvites) => {\n this.appUsersManager.saveApiUsers(chatAdminsWithInvites.users);\n return chatAdminsWithInvites;\n });\n }\n\n public getChatInviteImporters({\n chatId,\n limit = 50,\n offsetDate = 0,\n offsetUserId,\n link,\n q,\n requested\n }: {\n chatId: ChatId,\n limit?: number,\n offsetDate?: number,\n offsetUserId?: UserId,\n link?: string,\n q?: string,\n requested?: boolean\n }) {\n const offsetUser: InputUser = offsetUserId ? this.appUsersManager.getUserInput(offsetUserId) : {_: 'inputUserEmpty'};\n return this.apiManager.invokeApi('messages.getChatInviteImporters', {\n peer: this.appChatsManager.getInputPeer(chatId),\n limit,\n offset_date: offsetDate,\n offset_user: offsetUser,\n link,\n q,\n requested\n }).then((chatInviteImporters) => {\n this.appUsersManager.saveApiUsers(chatInviteImporters.users);\n return chatInviteImporters;\n });\n }\n}\n","enum StoriesCacheType {\n Stories = 'stories',\n Pinned = 'pinnedStories',\n Archive = 'archiveStories'\n}\n\nexport default StoriesCacheType;\n","import insertInDescendSortedArray from '../../../../helpers/array/insertInDescendSortedArray';\nimport {StoryItem} from '../../../../layer';\nimport StoriesCacheType from './cacheType';\n\nexport default function insertStory(array: any[], storyItem: StoryItem, onlyId: boolean, cacheType: StoriesCacheType, pinnedToTop?: Map) {\n const valueToInsert = onlyId ? storyItem.id : storyItem;\n if(cacheType === StoriesCacheType.Pinned) {\n return insertInDescendSortedArray(\n array,\n valueToInsert,\n (_storyItem) => {\n const storyId = onlyId ? _storyItem as number : (_storyItem as StoryItem).id;\n const pinnedIndex = onlyId ? pinnedToTop.get(storyId) : (_storyItem as StoryItem.storyItem).pinnedIndex;\n return pinnedIndex !== undefined ? 0xFFFFFFFF - pinnedIndex : storyId;\n }\n );\n } else if(cacheType === StoriesCacheType.Archive) {\n return insertInDescendSortedArray(\n array,\n valueToInsert,\n onlyId ? (storyId) => storyId as number : (storyItem) => (storyItem as StoryItem).id\n );\n } else {\n return insertInDescendSortedArray(\n array,\n valueToInsert,\n onlyId ? (storyId) => 0xFFFFFFFF - (storyId as number) : (storyItem) => 0xFFFFFFFF - (storyItem as StoryItem).id\n );\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport forEachReverse from '../../helpers/array/forEachReverse';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport insertInDescendSortedArray from '../../helpers/array/insertInDescendSortedArray';\nimport toArray from '../../helpers/array/toArray';\nimport assumeType from '../../helpers/assumeType';\nimport callbackify from '../../helpers/callbackify';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport makeError from '../../helpers/makeError';\nimport deepEqual from '../../helpers/object/deepEqual';\nimport safeReplaceObject from '../../helpers/object/safeReplaceObject';\nimport pause from '../../helpers/schedulers/pause';\nimport tsNow from '../../helpers/tsNow';\nimport {Reaction, ReportReason, StoriesAllStories, StoriesStories, StoryItem, Update, PeerStories, User, Chat, StoryView, MediaArea} from '../../layer';\nimport {MTAppConfig} from '../mtproto/appConfig';\nimport {SERVICE_PEER_ID, TEST_NO_STORIES} from '../mtproto/mtproto_config';\nimport {ReferenceContext} from '../mtproto/referenceDatabase';\nimport {AppManager} from './manager';\nimport reactionsEqual from './utils/reactions/reactionsEqual';\nimport StoriesCacheType from './utils/stories/cacheType';\nimport insertStory from './utils/stories/insertStory';\n\ntype MyStoryItem = Exclude;\n\nexport type StoriesListType = 'stories' | 'archive';\nexport type StoriesListPosition = {type: StoriesListType, index: number};\nexport type StoriesSegment = {length: number, type: 'unread' | 'close' | 'read'};\nexport type StoriesSegments = StoriesSegment[];\ntype StoriesPeerCache = {\n peerId: PeerId,\n stories: StoryItem['id'][],\n pinnedStories: StoriesPeerCache['stories'],\n archiveStories: StoriesPeerCache['stories'],\n pinnedToTop: Map,\n storiesMap: Map,\n deleted: Set,\n maxReadId?: number,\n getStoriesPromises: Map>,\n getStoriesPromise?: CancellablePromise,\n dispatchStoriesEvent?: boolean,\n pinnedLoadedAll?: boolean,\n archiveLoadedAll?: boolean,\n position?: StoriesListPosition,\n count?: number\n};\n\ntype ExpiringItem = {peerId: PeerId, id: number, timestamp: number};\n\nconst TEST_SKIPPED = false;\nconst TEST_READ = false;\nconst TEST_EXPIRING = 0;\n\nexport default class AppStoriesManager extends AppManager {\n private cache: {[userId: UserId]: StoriesPeerCache};\n private lists: {[type in StoriesListType]: PeerId[]};\n private changelogPeerId: PeerId;\n private expiring: ExpiringItem[];\n\n protected after() {\n this.clear(true);\n\n this.changelogPeerId = SERVICE_PEER_ID;\n\n if(TEST_NO_STORIES) {\n return;\n }\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateStory: this.onUpdateStory,\n\n updateReadStories: this.onUpdateReadStories\n });\n\n this.rootScope.addEventListener('app_config', this.setChangelogPeerIdFromAppConfig);\n\n this.rootScope.addEventListener('contacts_update', (userId) => {\n this.onSubscriptionUpdate(userId.toPeerId(false));\n });\n\n this.rootScope.addEventListener('chat_participation', ({chatId}) => {\n this.onSubscriptionUpdate(chatId.toPeerId(true));\n });\n\n this.rootScope.addEventListener('peer_stories_hidden', ({peerId}) => {\n const cache = this.getPeerStoriesCache(peerId, false);\n if(!cache) {\n return;\n }\n\n this.updateListCachePosition(cache);\n this.rootScope.dispatchEvent('stories_stories', this.convertPeerStoriesCache(cache));\n\n // move stories from cache to archive\n // const arrays = [cache[StoriesCacheType.Stories], cache[StoriesCacheType.Archive]];\n // if(!hidden) {\n // arrays.reverse();\n // }\n\n // const [from, to] = arrays;\n // const stories = from.splice(0, from.length);\n // to.push(...stories);\n });\n\n this.rootScope.addEventListener('user_auth', () => {\n setTimeout(() => {\n this.getAllStories(false, undefined, true);\n }, 2e3);\n });\n\n setInterval(() => this.checkExpired(), 5e3);\n }\n\n public clear = (init?: boolean) => {\n this.cache = {};\n this.lists = {\n stories: [],\n archive: []\n };\n this.expiring = [];\n };\n\n private onSubscriptionUpdate(peerId: PeerId) {\n const peer = this.getPeer(peerId);\n if(!peer) {\n return;\n }\n\n const cache = this.getPeerStoriesCache(peerId, false);\n if(!cache) {\n const isSubscribed = this.isSubcribedToPeer(peerId);\n const hasStories = peer.stories_max_id !== undefined;\n if(isSubscribed && hasStories) {\n Promise.resolve(this.getPeerStories(peerId)).then((peerStories) => {\n this.rootScope.dispatchEvent('stories_stories', peerStories);\n });\n }\n\n return;\n }\n\n const position = cache.position;\n this.updateListCachePosition(cache);\n if(!position && cache.position) { // added to list\n this.rootScope.dispatchEvent('stories_stories', this.convertPeerStoriesCache(cache));\n }\n }\n\n private checkExpired() {\n const now = tsNow(true);\n let item: ExpiringItem;\n while(item = this.expiring[0]) {\n if(item.timestamp > now) {\n break;\n }\n\n this.expiring.shift();\n const cache = this.getPeerStoriesCache(item.peerId, false);\n if(!cache) {\n continue;\n }\n\n const spliced = indexOfAndSplice(cache.stories, item.id);\n if(spliced !== undefined) {\n this.updateListCachePosition(cache);\n this.rootScope.dispatchEvent('story_expired', {peerId: cache.peerId, id: item.id});\n }\n }\n }\n\n private setChangelogPeerIdFromAppConfig = (appConfig: MTAppConfig) => {\n const userId = appConfig.stories_changelog_user_id;\n return this.changelogPeerId = userId ? userId.toPeerId(false) : SERVICE_PEER_ID;\n };\n\n public getChangelogPeerId(): PeerId | Promise {\n return this.changelogPeerId || callbackify(this.apiManager.getAppConfig(), this.setChangelogPeerIdFromAppConfig);\n }\n\n public generateSortIndexForCache(cache: StoriesPeerCache) {\n const cacheType = this.getCacheTypeForPeerId(cache.peerId);\n if(!cacheType) {\n return;\n }\n\n const lastStoryId = cache.stories[cache.stories.length - 1];\n if(!lastStoryId) {\n return;\n }\n\n const lastStory = cache.storiesMap.get(lastStoryId);\n const unreadType = this.getUnreadType(cache.peerId);\n const isMe = cache.peerId === this.rootScope.myId;\n const isUnread = unreadType !== 'read';\n const isChangelog = cache.peerId === this.changelogPeerId;\n const isPremium = cache.peerId.isUser() ? this.appUsersManager.isPremium(cache.peerId.toUserId()) : false;\n const index = [\n isMe,\n isUnread,\n isChangelog,\n isPremium\n ].map((boolean) => +boolean).join('') + lastStory.date;\n return +index;\n }\n\n public generateListCachePosition(cache: StoriesPeerCache) {\n const index = this.generateSortIndexForCache(cache);\n if(!index) {\n return;\n }\n\n const peer = this.appPeersManager.getPeer(cache.peerId) as User.user | Chat.channel;\n const position: StoriesListPosition = {\n type: peer.pFlags.stories_hidden ? 'archive' : 'stories',\n index\n };\n\n return position;\n }\n\n public updateListCachePosition(cache: StoriesPeerCache) {\n const previousPosition = cache.position;\n const position = this.generateListCachePosition(cache);\n if(deepEqual(previousPosition, position)) {\n return;\n }\n\n if(previousPosition && previousPosition.type !== position?.type) {\n const previousList = this.lists[previousPosition.type];\n indexOfAndSplice(previousList, cache.peerId);\n }\n\n cache.position = position;\n\n if(position) {\n const list = this.lists[position.type];\n insertInDescendSortedArray(list, cache.peerId, (peerId) => {\n const cache = this.getPeerStoriesCache(peerId);\n return cache.position.index;\n });\n }\n\n this.rootScope.dispatchEvent('stories_position', {peerId: cache.peerId, position});\n }\n\n public getPeerStoriesCache(peerId: PeerId, create = true): StoriesPeerCache {\n return this.cache[peerId] ??= create ? {\n peerId,\n stories: [],\n pinnedStories: [],\n archiveStories: [],\n pinnedToTop: new Map(),\n storiesMap: new Map(),\n getStoriesPromises: new Map(),\n deleted: new Set()\n } : undefined;\n }\n\n public convertPeerStoriesCache(cache: StoriesPeerCache): PeerStories {\n return {\n _: 'peerStories',\n peer: this.appPeersManager.getOutputPeer(cache.peerId),\n stories: cache.stories.map((storyId) => cache.storiesMap.get(storyId)),\n max_read_id: cache.maxReadId\n };\n }\n\n public saveStoryItem(storyItem: StoryItem, cache: StoriesPeerCache, cacheType?: StoriesCacheType): MyStoryItem {\n if(TEST_NO_STORIES || !storyItem || storyItem._ === 'storyItemDeleted') {\n return;\n }\n\n const oldStoryItem = cache.storiesMap.get(storyItem.id);\n const oldIsSkipped = oldStoryItem?._ === 'storyItemSkipped';\n const isSkipped = storyItem._ === 'storyItemSkipped';\n if(isSkipped && oldStoryItem && !oldIsSkipped) {\n return oldStoryItem;\n }\n\n if(!isSkipped) {\n const mediaContext: ReferenceContext = {\n type: 'storyItem',\n peerId: cache.peerId,\n storyId: storyItem.id\n };\n\n this.appMessagesManager.saveMessageMedia(storyItem, mediaContext);\n const mediaAreas = storyItem.media_areas;\n mediaAreas?.forEach((mediaArea) => {\n (mediaArea as MediaArea.mediaAreaChannelPost).msg_id =\n this.appMessagesIdsManager.generateMessageId(\n (mediaArea as MediaArea.mediaAreaChannelPost).msg_id,\n (mediaArea as MediaArea.mediaAreaChannelPost).channel_id\n );\n });\n }\n\n const pinnedToTopIndex = cache.pinnedToTop.get(storyItem.id);\n const modifiedPinnedToTop = storyItem.pinnedIndex !== pinnedToTopIndex;\n if(modifiedPinnedToTop) {\n storyItem.pinnedIndex = pinnedToTopIndex;\n }\n\n let modifiedPinned: boolean;\n if(cacheType !== StoriesCacheType.Pinned) {\n const wasPinned = !!(oldStoryItem as StoryItem.storyItem)?.pFlags?.pinned;\n const newPinned = !!(storyItem as StoryItem.storyItem).pFlags?.pinned;\n if(wasPinned !== newPinned) {\n if(newPinned) {\n if(cache.pinnedLoadedAll ||\n (cache.pinnedStories.length && storyItem.id > cache.pinnedStories[cache.pinnedStories.length - 1])) {\n insertStory(cache.pinnedStories, storyItem, true, StoriesCacheType.Pinned, cache.pinnedToTop);\n modifiedPinned = true;\n }\n } else if(indexOfAndSplice(cache.pinnedStories, storyItem.id)) {\n modifiedPinned = true;\n }\n }\n }\n\n let modifiedArchive: boolean;\n if(cacheType !== StoriesCacheType.Archive && cache.peerId === this.appPeersManager.peerId) {\n if(!cache.archiveStories.includes(storyItem.id) && (cache.archiveLoadedAll ||\n (cache.archiveStories.length && storyItem.id > cache.archiveStories[cache.archiveStories.length - 1]))) {\n insertStory(cache.archiveStories, storyItem, true, StoriesCacheType.Archive);\n modifiedArchive = true;\n }\n }\n\n if(cacheType === StoriesCacheType.Stories) {\n if(TEST_EXPIRING) {\n storyItem.expire_date = tsNow(true) + TEST_EXPIRING;\n }\n\n const pos = this.expiring.findIndex((item) => item.peerId === cache.peerId && item.id === storyItem.id);\n insertInDescendSortedArray(\n this.expiring,\n {peerId: cache.peerId, id: storyItem.id, timestamp: storyItem.expire_date},\n (item) => 0x7FFFFFFF - (item.timestamp),\n pos\n );\n }\n\n if(cacheType) {\n const array = cache[cacheType];\n insertStory(array, storyItem, true, cacheType, cache.pinnedToTop);\n }\n\n if(!oldStoryItem) {\n cache.storiesMap.set(storyItem.id, storyItem);\n } else {\n if(!oldIsSkipped && !isSkipped && storyItem.pFlags.min) {\n const preserve: (keyof StoryItem.storyItem)[] = ['privacy', 'views'];\n for(const key of preserve) {\n // @ts-ignore\n storyItem[key] = oldStoryItem[key];\n }\n }\n\n if(!oldIsSkipped && !isSkipped && storyItem.pFlags.min) {\n const preserveFlags: (keyof StoryItem.storyItem['pFlags'])[] = ['out' as any];\n for(const key of preserveFlags) {\n // @ts-ignore\n storyItem.pFlags[key] = oldStoryItem.pFlags[key];\n }\n }\n\n safeReplaceObject(oldStoryItem, storyItem);\n }\n\n if(oldStoryItem || modifiedPinned || modifiedArchive || modifiedPinnedToTop) {\n this.rootScope.dispatchEvent('story_update', {\n peerId: cache.peerId,\n story: oldStoryItem || storyItem,\n modifiedPinned,\n modifiedArchive,\n modifiedPinnedToTop\n });\n }\n\n return oldStoryItem || storyItem;\n }\n\n public saveStoryItems(storyItems: StoryItem[], cache: StoriesPeerCache, cacheType?: StoriesCacheType) {\n // if((storyItems as any).saved) return storyItems;\n // (storyItems as any).saved = true;\n const indexesToDelete: number[] = [];\n const newStoryItems = storyItems.map((storyItem, idx) => {\n storyItem = this.saveStoryItem(storyItem, cache, cacheType);\n if(!storyItem) {\n indexesToDelete.push(idx);\n }\n\n return storyItem;\n });\n\n forEachReverse(indexesToDelete, (idx) => {\n newStoryItems.splice(idx, 1);\n });\n\n if(cache.stories.length && cacheType === StoriesCacheType.Stories) { // * fix peer missing flag\n const peer = this.getPeer(cache.peerId);\n if(!peer.stories_max_id) {\n const newPeer: typeof peer = {\n ...peer,\n stories_max_id: cache.storiesMap.get(cache.stories[cache.stories.length - 1]).id\n };\n\n if(cache.peerId.isUser()) this.appUsersManager.saveApiUsers([newPeer as User.user]);\n else this.appChatsManager.saveApiChats([newPeer as Chat.channel]);\n }\n }\n\n this.updateListCachePosition(cache);\n\n return newStoryItems;\n }\n\n public getPeer(peerId: PeerId) {\n return this.appPeersManager.getPeer(peerId) as User.user | Chat.channel;\n }\n\n public saveApiPeerStories(peer: T, oldPeer?: T) {\n if(peer._ !== 'channel' && peer._ !== 'user') {\n return;\n }\n\n const wasStories = oldPeer.stories_max_id ? true : (oldPeer.pFlags.stories_unavailable ? false : undefined);\n let newStories = peer.stories_max_id ? true : (peer.pFlags.stories_unavailable ? false : undefined);\n if(wasStories !== newStories) {\n if(newStories === undefined) {\n if(wasStories) {\n peer.stories_max_id = oldPeer.stories_max_id;\n }\n\n newStories = wasStories;\n }/* else {\n if(!newStories) {\n delete peer.pFlags.stories_unavailable;\n }\n } */\n }\n\n const wasStoriesHidden = oldPeer.pFlags.stories_hidden;\n const newStoriesHidden = peer.pFlags.stories_hidden;\n\n return () => {\n if(TEST_NO_STORIES) {\n return;\n }\n\n const peerId = peer.id.toPeerId(peer._ !== 'user');\n if(wasStories !== newStories && newStories !== undefined) {\n this.rootScope.dispatchEvent('peer_stories', {peerId, available: newStories});\n }\n\n if(wasStoriesHidden !== newStoriesHidden) {\n this.rootScope.dispatchEvent('peer_stories_hidden', {peerId, hidden: newStoriesHidden});\n }\n };\n }\n\n public saveStoriesStories(storiesStories: StoriesStories, cache: StoriesPeerCache, cacheType?: StoriesCacheType) {\n this.appPeersManager.saveApiPeers(storiesStories);\n const storyItems = this.saveStoryItems(storiesStories.stories, cache, cacheType) as StoryItem.storyItem[];\n\n if(TEST_NO_STORIES) {\n storyItems.splice(0, Infinity);\n }\n\n return storyItems;\n }\n\n public savePeerStories(peerStories: PeerStories) {\n const peerId = this.appPeersManager.getPeerId(peerStories.peer);\n const cache = this.getPeerStoriesCache(peerId);\n\n if(TEST_NO_STORIES) {\n peerStories.stories = [];\n }\n\n if(TEST_SKIPPED) {\n peerStories.stories = peerStories.stories.map((storyItem) => {\n return {\n _: 'storyItemSkipped',\n id: storyItem.id,\n date: (storyItem as StoryItem.storyItem).date,\n expire_date: (Date.now() / 1000 | 0) + 86400,\n pFlags: {}\n };\n });\n }\n\n const cacheType = this.getCacheTypeForPeerId(peerId, true);\n cache.maxReadId = peerStories.max_read_id ?? 0;\n peerStories.stories = this.saveStoryItems(peerStories.stories, cache, cacheType);\n\n if(cache.dispatchStoriesEvent) {\n delete cache.dispatchStoriesEvent;\n this.rootScope.dispatchEvent('peer_stories', {\n peerId,\n available: cache.stories.length > 0\n });\n }\n\n return peerStories;\n }\n\n public getUnreadType(peerId: PeerId, storyId?: number, cache = this.getPeerStoriesCache(peerId)): StoriesSegment['type'] {\n storyId ??= cache.stories[cache.stories.length - 1];\n if(!storyId && !cache.dispatchStoriesEvent) {\n cache.dispatchStoriesEvent = true;\n this.getPeerStories(peerId);\n }\n\n if(!storyId) {\n return;\n }\n\n return storyId > cache.maxReadId ? (cache.storiesMap.get(storyId).pFlags.close_friends ? 'close' : 'unread') : 'read';\n }\n\n public getPeerStoriesSegments(peerId: PeerId): StoriesSegments | Promise {\n const cache = this.getPeerStoriesCache(peerId);\n if(cache.maxReadId === undefined) {\n return callbackify(this.getPeerStories(peerId), () => this.getPeerStoriesSegments(peerId));\n }\n\n if(!cache.stories.length) {\n return;\n }\n\n const segments: StoriesSegments = [];\n let lastSegment: StoriesSegment;\n cache.stories.forEach((storyId) => {\n const type = this.getUnreadType(peerId, storyId, cache);\n if(lastSegment?.type !== type) {\n lastSegment = {\n length: 1,\n type\n };\n\n segments.push(lastSegment);\n } else {\n ++lastSegment.length;\n }\n });\n\n return segments;\n }\n\n public deleteStories(peerId: PeerId, ids: StoryItem['id'][]) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'stories.deleteStories',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: ids\n },\n processResult: (ids) => {\n ids.forEach((id) => {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateStory',\n peer: this.appPeersManager.getOutputPeer(peerId),\n story: {\n _: 'storyItemDeleted',\n id\n }\n });\n });\n }\n });\n }\n\n public togglePinned(peerId: PeerId, storyId: StoryItem['id'] | StoryItem['id'][], pinned: boolean) {\n storyId = toArray(storyId);\n return this.apiManager.invokeApiSingleProcess({\n method: 'stories.togglePinned',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: storyId,\n pinned\n },\n processResult: (result) => {\n if(!result.length) {\n return;\n }\n\n const cache = this.getPeerStoriesCache(this.rootScope.myId);\n const newStories: StoryItem.storyItem[] = result.map((storyId) => {\n const story = cache.storiesMap.get(storyId);\n if(story?._ !== 'storyItem') {\n return;\n }\n\n // if(pinned) story.pFlags.pinned = true;\n // else delete story.pFlags.pinned;\n return {\n ...story,\n pFlags: {\n ...story.pFlags,\n pinned: pinned || undefined\n }\n };\n });\n\n this.saveStoryItems(newStories, cache);\n }\n });\n }\n\n public async togglePinnedToTop(peerId: PeerId, storyIds: StoryItem['id'][], pin: boolean) {\n const oldPins = [...this.getPeerStoriesCache(peerId).pinnedToTop.entries()].sort((a, b) => a[1] - b[1]).map(([id]) => id);\n const newPins = pin ? oldPins.concat(storyIds) : oldPins.filter((id) => !storyIds.includes(id));\n const appConfig = await this.apiManager.getAppConfig();\n const limit = appConfig.stories_pinned_to_top_count_max ?? 3;\n if(newPins.length > limit) {\n const error = makeError('STORY_ID_TOO_MANY');\n error.limit = limit;\n throw error;\n }\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'stories.togglePinnedToTop',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: newPins\n },\n processResult: () => {\n const cache = this.getPeerStoriesCache(peerId);\n const pinnedToTop = cache.pinnedToTop;\n storyIds.forEach((storyId) => {\n const storyItem = this.getStoryByIdCached(peerId, storyId);\n if(pin) pinnedToTop.set(storyId, pinnedToTop.size);\n else pinnedToTop.delete(storyId);\n this.saveStoryItem(storyItem, cache, StoriesCacheType.Pinned);\n });\n }\n });\n }\n\n public hasArchive() {\n return this.lists.archive.length > 0;\n }\n\n public getAllStories(next?: boolean, state?: string, hidden?: boolean) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'stories.getAllStories',\n params: {\n next,\n state,\n hidden\n },\n processResult: (storiesAllStories) => {\n assumeType(storiesAllStories);\n this.appPeersManager.saveApiPeers(storiesAllStories);\n storiesAllStories.peer_stories = storiesAllStories.peer_stories\n .map((peerStories) => this.savePeerStories(peerStories))\n .filter((peerStories) => peerStories.stories.length);\n return storiesAllStories;\n }\n });\n }\n\n public getPeerStories(peerId: PeerId) {\n const cache = this.getPeerStoriesCache(peerId);\n if(cache.maxReadId !== undefined) {\n return this.convertPeerStoriesCache(cache);\n }\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'stories.getPeerStories',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId)\n },\n processResult: (storiesPeerStories) => {\n this.appPeersManager.saveApiPeers(storiesPeerStories);\n return this.savePeerStories(storiesPeerStories.stories);\n }\n });\n }\n\n private getCachedStories(cache: StoriesPeerCache, pinned: boolean, limit: number, offsetId: number) {\n let array = pinned ? cache.pinnedStories : cache.archiveStories;\n\n if(pinned && cache.pinnedToTop?.size && offsetId) {\n array = array.slice(cache.pinnedToTop.size);\n }\n\n const index = offsetId ? array.findIndex((storyId) => storyId < offsetId) : 0;\n if(index !== -1) {\n const sliced = array.slice(index, index + limit);\n if(sliced.length === limit || (pinned ? cache.pinnedLoadedAll : cache.archiveLoadedAll)) {\n return sliced.map((storyId) => cache.storiesMap.get(storyId)) as StoryItem.storyItem[];\n }\n }\n }\n\n private processLoadedStoriesStories(\n cache: StoriesPeerCache,\n pinned: boolean,\n limit: number,\n storiesStories: StoriesStories\n ) {\n if(pinned) {\n cache.pinnedToTop = new Map((storiesStories.pinned_to_top || []).map((storyId, idx) => [storyId, idx]));\n }\n\n const length = storiesStories.stories.length;\n const storyItems = this.saveStoriesStories(\n storiesStories,\n cache,\n pinned ? StoriesCacheType.Pinned : StoriesCacheType.Archive\n );\n cache.count = storiesStories.count;\n const array = pinned ? cache.pinnedStories : cache.archiveStories;\n if(array.length === storiesStories.count || length < limit) {\n if(pinned) cache.pinnedLoadedAll = true;\n else cache.archiveLoadedAll = true;\n }\n\n return {count: storiesStories.count, stories: storyItems, pinnedToTop: pinned ? cache.pinnedToTop : undefined};\n }\n\n public getPinnedStories(peerId: PeerId, limit: number, offsetId: number = 0): MaybePromise<{count: number, stories: StoryItem.storyItem[], pinnedToTop: StoriesPeerCache['pinnedToTop']}> {\n const cache = this.getPeerStoriesCache(peerId);\n const slice = this.getCachedStories(cache, true, limit, offsetId);\n if(slice) {\n return {count: cache.count, stories: slice, pinnedToTop: cache.pinnedToTop};\n }\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'stories.getPinnedStories',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n limit,\n offset_id: offsetId\n },\n processResult: (response) => { // * response list can have same story if it's pinned to top\n this.processLoadedStoriesStories(cache, true, limit, response);\n return this.getPinnedStories(peerId, limit, offsetId);\n }\n });\n }\n\n public getStoriesArchive(peerId: PeerId, limit: number, offsetId: number = 0): ReturnType {\n const cache = this.getPeerStoriesCache(peerId);\n const slice = this.getCachedStories(cache, false, limit, offsetId);\n if(slice) {\n return {count: cache.count, stories: slice, pinnedToTop: undefined};\n }\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'stories.getStoriesArchive',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n limit,\n offset_id: offsetId\n },\n processResult: this.processLoadedStoriesStories.bind(this, cache, false, limit)\n });\n }\n\n public fetchSingleStories(cache: StoriesPeerCache) {\n return cache.getStoriesPromise ??= pause(0).then(() => {\n const ids = [...cache.getStoriesPromises.keys()];\n\n const promise = this.apiManager.invokeApi('stories.getStoriesByID', {\n peer: this.appPeersManager.getInputPeerById(cache.peerId),\n id: ids\n }, {floodMaxTimeout: Infinity});\n\n const resolve = (storyItems: StoryItem.storyItem[]) => {\n const map: Map = new Map(\n storyItems.map((storyItem) => [storyItem.id, storyItem])\n );\n\n for(const id of ids) {\n const storyItem = map.get(id);\n if(!storyItem) {\n this.handleDeletedStory(cache, id);\n }\n\n const promise = cache.getStoriesPromises.get(id);\n cache.getStoriesPromises.delete(id);\n promise.resolve(storyItem);\n }\n };\n\n promise.then((storiesStories) => {\n const storyItems = this.saveStoriesStories(storiesStories, cache);\n resolve(storyItems);\n }, () => {\n resolve([]);\n }).then(() => {\n cache.getStoriesPromise = undefined;\n if(cache.getStoriesPromises.size) {\n this.fetchSingleStories(cache);\n }\n\n this.rootScope.dispatchEvent('stories_downloaded', {peerId: cache.peerId, ids});\n });\n });\n }\n\n public getStoryByIdCached(peerId: PeerId, id: StoryItem['id']): MyStoryItem {\n const cache = this.getPeerStoriesCache(peerId);\n return cache.storiesMap.get(id);\n }\n\n public getStoryById(peerId: PeerId, id: StoryItem['id'], overwrite?: boolean): MaybePromise {\n const cache = this.getPeerStoriesCache(peerId);\n const storyItem = cache.storiesMap.get(id);\n if(cache.deleted.has(id)) {\n return undefined;\n } else if(storyItem?._ === 'storyItem' && !overwrite) {\n return storyItem;\n } else {\n let promise = cache.getStoriesPromises.get(id);\n if(promise) {\n return promise;\n }\n\n cache.getStoriesPromises.set(id, promise = deferredPromise());\n this.fetchSingleStories(cache);\n return promise;\n }\n }\n\n public getStoriesById(peerId: PeerId, ids: StoryItem['id'][], overwrite?: boolean): MaybePromise {\n const arr = ids.map((id) => {\n return this.getStoryById(peerId, id, overwrite);\n });\n\n const hasPromise = arr.some((item) => item instanceof Promise);\n return hasPromise ? Promise.all(arr) : arr as StoryItem.storyItem[];\n }\n\n public readStories(peerId: PeerId, maxId: StoryItem['id']) {\n const cache = this.getPeerStoriesCache(peerId);\n if(cache.maxReadId !== undefined && cache.maxReadId >= maxId) {\n return;\n }\n\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateReadStories',\n peer: this.appPeersManager.getOutputPeer(peerId),\n max_id: maxId\n });\n\n if(TEST_READ) {\n return;\n }\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'stories.readStories',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n max_id: maxId\n }\n });\n }\n\n public incrementStoryViews(peerId: PeerId, ids: StoryItem['id'][]) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'stories.incrementStoryViews',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: ids\n }\n });\n }\n\n public getStoryViewsList(peerId: PeerId, id: number, limit: number, offset: string = '', q?: string, justContacts?: boolean) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'stories.getStoryViewsList',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id,\n limit,\n offset,\n q,\n just_contacts: justContacts\n },\n processResult: (storiesStoryViews) => {\n this.appPeersManager.saveApiPeers(storiesStoryViews);\n\n storiesStoryViews.views.forEach((storyView) => {\n (storyView as StoryView.storyViewPublicForward).message = this.appMessagesManager.saveMessage((storyView as StoryView.storyViewPublicForward).message);\n (storyView as StoryView.storyViewPublicRepost).story = (storyView as StoryView.storyViewPublicRepost).story && this.appStoriesManager.saveStoryItem(\n (storyView as StoryView.storyViewPublicRepost).story,\n this.appStoriesManager.getPeerStoriesCache(this.appPeersManager.getPeerId((storyView as StoryView.storyViewPublicRepost).peer_id))\n );\n });\n\n const views = storiesStoryViews.views.filter((storyView) => {\n return storyView._ === 'storyView';\n }) as StoryView.storyView[];\n\n return {\n count: storiesStoryViews.count,\n views: views,\n nextOffset: storiesStoryViews.next_offset\n };\n }\n });\n }\n\n public getStoriesViews(peerId: PeerId, ids: number[]) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'stories.getStoriesViews',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: ids\n },\n processResult: (storiesStoryViews) => {\n this.appPeersManager.saveApiPeers(storiesStoryViews);\n\n const cache = this.getPeerStoriesCache(this.appPeersManager.peerId);\n storiesStoryViews.views.forEach((views, idx) => {\n const id = ids[idx];\n const storyItem = cache.storiesMap.get(id);\n if(!storyItem) {\n return;\n }\n\n this.saveStoryItems([{\n ...(storyItem as StoryItem.storyItem),\n views\n }], cache);\n });\n\n return storiesStoryViews.views;\n }\n });\n }\n\n public report(peerId: PeerId, id: number[], reason: ReportReason['_'], message?: string) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'stories.report',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id,\n reason: {_: reason},\n message\n }\n });\n }\n\n public sendReaction(peerId: PeerId, id: number, reaction: Reaction) {\n reaction ??= {_: 'reactionEmpty'};\n const story = this.getStoryByIdCached(peerId, id) as StoryItem.storyItem;\n const views = story.views;\n const newSentReaction: Reaction = reaction._ === 'reactionEmpty' ? undefined : reaction;\n\n if(views) {\n const unsetPreviousReaction = () => {\n const reactionCount = views.reactions?.find((reactionCount) => reactionsEqual(reactionCount.reaction, story.sent_reaction));\n if(reactionCount) {\n --reactionCount.count;\n if(!reactionCount.count) {\n indexOfAndSplice(views.reactions, reactionCount);\n }\n }\n };\n\n views.reactions_count ??= 0;\n if(!story.sent_reaction && newSentReaction) {\n ++views.reactions_count;\n } else if(story.sent_reaction && !newSentReaction) {\n --views.reactions_count;\n }\n\n unsetPreviousReaction();\n if(newSentReaction) {\n let reactionCount = views.reactions?.find((reactionCount) => reactionsEqual(reactionCount.reaction, newSentReaction));\n if(!reactionCount) {\n views.reactions ??= [];\n views.reactions.push(reactionCount = {\n _: 'reactionCount',\n reaction: newSentReaction,\n count: 0\n });\n }\n\n ++reactionCount.count;\n }\n }\n\n this.saveStoryItems([{\n ...story,\n sent_reaction: newSentReaction\n }], this.getPeerStoriesCache(peerId));\n return this.apiManager.invokeApiSingleProcess({\n method: 'stories.sendReaction',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n reaction,\n story_id: id\n },\n processResult: (updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n }\n });\n }\n\n protected handleDeletedStory(cache: StoriesPeerCache, id: StoryItem['id']) {\n cache.deleted.add(id);\n if(!cache.storiesMap.delete(id)) {\n return;\n }\n\n [\n cache.stories,\n cache.pinnedStories,\n cache.archiveStories\n ].forEach((array) => {\n indexOfAndSplice(array, id);\n });\n\n this.updateListCachePosition(cache);\n this.rootScope.dispatchEvent('story_deleted', {peerId: cache.peerId, id});\n }\n\n public isSubcribedToPeer(peerId: PeerId) {\n if(peerId.isUser()) {\n return this.appUsersManager.isContact(peerId.toUserId());\n } else {\n const chatId = peerId.toChatId();\n return (this.appChatsManager.isBroadcast(chatId) || this.appChatsManager.isMegagroup(chatId)) &&\n this.appChatsManager.isInChat(chatId);\n }\n }\n\n public getCacheTypeForPeerId(peerId: PeerId, ignoreNoSubscription?: boolean) {\n if(\n !this.isSubcribedToPeer(peerId) &&\n peerId !== this.changelogPeerId &&\n !ignoreNoSubscription\n ) {\n return;\n }\n\n return StoriesCacheType.Stories;\n // return user.pFlags.stories_hidden && this.appPeersManager.peerId === peerId ?\n // StoriesCacheType.Archive :\n // StoriesCacheType.Stories;\n }\n\n public isStoryExpired(story: StoryItem.storyItemSkipped | StoryItem.storyItem) {\n return story.expire_date <= tsNow(true);\n }\n\n public hasRights(peerId: PeerId, storyId: number, right: 'send' | 'edit' | 'delete' | 'archive' | 'pin') {\n if(peerId.isUser()) {\n return this.appPeersManager.peerId === peerId;\n }\n\n const chatId = peerId.toChatId();\n const story = this.getStoryByIdCached(peerId, storyId) as StoryItem.storyItem;\n const isMyStory = !!story.pFlags.out;\n\n const canEdit = this.appChatsManager.hasRights(chatId, 'edit_stories');\n const canPost = this.appChatsManager.hasRights(chatId, 'post_stories');\n const canDelete = this.appChatsManager.hasRights(chatId, 'delete_stories');\n switch(right) {\n case 'send': {\n return canPost;\n }\n\n case 'edit': {\n return !isMyStory ? canEdit : canPost;\n }\n\n case 'delete': {\n return !isMyStory ? canDelete : canPost;\n }\n\n case 'archive': {\n return canEdit;\n }\n\n case 'pin': {\n return canEdit;\n }\n\n default: {\n return false;\n }\n }\n }\n\n public cantPinDeleteStories(peerId: PeerId, storyIds: number[]) {\n let cantPin = !storyIds.length, cantDelete = !storyIds.length;\n for(const storyId of storyIds) {\n if(!cantPin) {\n cantPin = !this.hasRights(peerId, storyId, 'pin');\n }\n\n if(!cantDelete) {\n cantDelete = !this.hasRights(peerId, storyId, 'delete');\n }\n\n if(cantPin && cantDelete) break;\n }\n\n return {cantPin, cantDelete};\n }\n\n public toggleStoriesHidden(peerId: PeerId, hidden: boolean) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'stories.togglePeerStoriesHidden',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n hidden\n },\n processResult: () => {\n const peer = this.getPeer(peerId);\n const pFlags = {...peer.pFlags};\n if(hidden) pFlags.stories_hidden = true;\n else delete pFlags.stories_hidden;\n const newPeer: typeof peer = {\n ...peer,\n pFlags\n };\n if(peerId.isUser()) this.appUsersManager.saveApiUsers([newPeer as User.user]);\n else this.appChatsManager.saveApiChats([newPeer as Chat.channel]);\n this.appNotificationsManager.toggleStoriesMute(peerId, hidden, true);\n }\n });\n }\n\n protected onUpdateStory = (update: Update.updateStory) => {\n const peerId = this.appPeersManager.getPeerId(update.peer);\n const cache = this.getPeerStoriesCache(peerId);\n let {story} = update;\n\n if(story._ === 'storyItemDeleted') {\n this.handleDeletedStory(cache, story.id);\n return;\n }\n\n if(cache.maxReadId === undefined) {\n Promise.resolve(this.getPeerStories(peerId)).then((userStories) => {\n this.rootScope.dispatchEvent('stories_stories', userStories);\n });\n return;\n }\n\n const cacheType: StoriesCacheType = this.isStoryExpired(story) ? undefined : this.getCacheTypeForPeerId(peerId);\n const hadStoryBefore = cache.storiesMap.has(story.id);\n story = this.saveStoryItems([update.story], cache, cacheType)[0];\n if(!hadStoryBefore && cacheType) {\n this.rootScope.dispatchEvent('story_new', {peerId, story, cacheType, maxReadId: cache.maxReadId});\n }\n };\n\n protected onUpdateReadStories = (update: Update.updateReadStories) => {\n const peerId = this.appPeersManager.getPeerId(update.peer);\n const cache = this.getPeerStoriesCache(peerId);\n cache.maxReadId = update.max_id;\n this.updateListCachePosition(cache);\n this.rootScope.dispatchEvent('stories_read', {peerId, maxReadId: cache.maxReadId});\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {AppManager} from './manager';\n\nexport default class AppBotsManager extends AppManager {\n public canSendMessage(botId: BotId) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'bots.canSendMessage',\n params: {\n bot: this.appUsersManager.getUserInput(botId)\n }\n });\n }\n\n public allowSendMessage(botId: BotId) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'bots.allowSendMessage',\n params: {\n bot: this.appUsersManager.getUserInput(botId)\n },\n processResult: (updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n }\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Boost} from '../../layer';\nimport {AppManager} from './manager';\n\nexport default class AppBoostsManager extends AppManager {\n public saveBoost(peerId: PeerId, boost: Boost) {\n if(boost.giveaway_msg_id) {\n boost.giveaway_msg_id = this.appMessagesIdsManager.generateMessageId(\n boost.giveaway_msg_id,\n this.appPeersManager.isChannel(peerId) ? peerId.toChatId() : undefined\n );\n }\n\n return boost;\n }\n\n public saveBoosts(peerId: PeerId, boosts: Boost[]) {\n if(!boosts || (boosts as any).saved) return boosts;\n (boosts as any).saved = true;\n boosts.forEach((boost, idx, arr) => {\n arr[idx] = this.saveBoost(peerId, boost);\n });\n\n return boosts;\n }\n\n public getBoostsList({\n peerId,\n limit,\n offset,\n gifts\n }: {\n peerId: PeerId,\n limit: number,\n offset: string,\n gifts?: boolean\n }) {\n return this.apiManager.invokeApi('premium.getBoostsList', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n limit,\n offset,\n gifts\n }).then((boostsList) => {\n this.appPeersManager.saveApiPeers(boostsList);\n boostsList.boosts = this.saveBoosts(peerId, boostsList.boosts);\n return boostsList;\n });\n }\n\n public getMyBoosts() {\n return this.apiManager.invokeApiSingleProcess({\n method: 'premium.getMyBoosts',\n processResult: (myBoosts) => {\n this.appPeersManager.saveApiPeers(myBoosts);\n return myBoosts;\n }\n });\n }\n\n public getBoostsStatus(peerId: PeerId) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'premium.getBoostsStatus',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId)\n }\n });\n }\n\n // public canApplyBoost(peerId: PeerId) {\n // return this.apiManager.invokeApiSingleProcess({\n // method: 'stories.canApplyBoost',\n // params: {\n // peer: this.appPeersManager.getInputPeerById(peerId)\n // },\n // processResult: (storiesCanApplyBoostResult) => {\n // this.appPeersManager.saveApiPeers(storiesCanApplyBoostResult as StoriesCanApplyBoostResult.storiesCanApplyBoostReplace);\n // return storiesCanApplyBoostResult;\n // },\n // options: {\n // floodMaxTimeout: 0\n // }\n // });\n // }\n\n public applyBoost(peerId: PeerId, slots?: number[]) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'premium.applyBoost',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n slots\n }\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport assumeType from '../../helpers/assumeType';\nimport callbackify from '../../helpers/callbackify';\nimport {ChatFull, Message, MessagesMessages, PublicForward, StatsBroadcastStats, StatsGraph, StatsPublicForwards} from '../../layer';\nimport {DcId, InvokeApiOptions} from '../../types';\nimport {AppManager} from './manager';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\n\ntype GetStatsParams = {\n peerId: PeerId,\n mid?: number,\n storyId?: number,\n dark?: boolean,\n dcId?: DcId\n};\n\nexport default class AppStatisticsManager extends AppManager {\n private async getInvokeOptions({peerId, dcId}: GetStatsParams) {\n const options: InvokeApiOptions = {};\n if(peerId.isUser()) {\n return options;\n }\n\n dcId ??= await callbackify(this.appProfileManager.getChatFull(peerId.toChatId()), async(chatFull) => {\n let dcId = (chatFull as ChatFull.channelFull).stats_dc;\n if(dcId === undefined) {\n dcId = await this.apiManager.getBaseDcId();\n }\n\n return dcId;\n });\n\n options.dcId = dcId;\n return options;\n }\n\n private processPublicForwards = (statsPublicForwards: StatsPublicForwards) => {\n this.appPeersManager.saveApiPeers(statsPublicForwards);\n statsPublicForwards.forwards.forEach((publicForward) => {\n (publicForward as PublicForward.publicForwardMessage).message = this.appMessagesManager.saveMessage((publicForward as PublicForward.publicForwardMessage).message);\n (publicForward as PublicForward.publicForwardStory).story = (publicForward as PublicForward.publicForwardStory).story && this.appStoriesManager.saveStoryItem(\n (publicForward as PublicForward.publicForwardStory).story,\n this.appStoriesManager.getPeerStoriesCache(this.appPeersManager.getPeerId((publicForward as PublicForward.publicForwardStory).peer))\n );\n });\n return statsPublicForwards;\n };\n\n public async getBroadcastStats(params: GetStatsParams): Promise<{stats: StatsBroadcastStats, dcId: DcId}> {\n const options = await this.getInvokeOptions(params);\n return this.apiManager.invokeApiSingleProcess({\n method: 'stats.getBroadcastStats',\n params: {\n channel: this.appChatsManager.getChannelInput(params.peerId.toChatId()),\n dark: params.dark\n },\n processResult: (stats) => {\n stats.recent_posts_interactions.forEach((postInteractionCounters) => {\n if(postInteractionCounters._ === 'postInteractionCountersMessage') {\n postInteractionCounters.msg_id = this.appMessagesIdsManager.generateMessageId(postInteractionCounters.msg_id, params.peerId.toChatId());\n }\n });\n\n return {\n stats,\n dcId: options.dcId\n };\n },\n options\n });\n }\n\n public loadAsyncGraph(token: string, x?: Long, dcId?: DcId): Promise> {\n return this.apiManager.invokeApiSingleProcess({\n method: 'stats.loadAsyncGraph',\n params: {\n token,\n x\n },\n options: {dcId}\n });\n }\n\n public async getMegagroupStats(params: GetStatsParams) {\n const options = await this.getInvokeOptions(params);\n return this.apiManager.invokeApiSingleProcess({\n method: 'stats.getMegagroupStats',\n params: {\n channel: this.appChatsManager.getChannelInput(params.peerId.toChatId()),\n dark: params.dark\n },\n processResult: (stats) => {\n this.appPeersManager.saveApiPeers(stats);\n\n return {\n stats,\n dcId: options.dcId\n };\n },\n options\n });\n }\n\n public async getMessagePublicForwards(params: {\n peerId: PeerId,\n mid: number,\n limit: number,\n offset?: string\n }) {\n const options = await this.getInvokeOptions(params);\n return this.apiManager.invokeApiSingleProcess({\n method: 'stats.getMessagePublicForwards',\n params: {\n channel: this.appChatsManager.getChannelInput(params.peerId.toChatId()),\n msg_id: getServerMessageId(params.mid),\n offset: params.offset,\n limit: params.limit\n },\n processResult: this.processPublicForwards,\n options\n });\n }\n\n public async getMessageStats(params: GetStatsParams) {\n const options = await this.getInvokeOptions(params);\n return this.apiManager.invokeApiSingleProcess({\n method: 'stats.getMessageStats',\n params: {\n channel: this.appChatsManager.getChannelInput(params.peerId.toChatId()),\n dark: params.dark,\n msg_id: getServerMessageId(params.mid)\n },\n processResult: (stats) => {\n return {\n stats,\n dcId: options.dcId\n };\n },\n options\n });\n }\n\n public async getStoryStats(params: GetStatsParams) {\n const options = await this.getInvokeOptions(params);\n return this.apiManager.invokeApiSingleProcess({\n method: 'stats.getStoryStats',\n params: {\n peer: this.appPeersManager.getInputPeerById(params.peerId),\n dark: params.dark,\n id: params.storyId\n },\n processResult: (stats) => {\n return {\n stats,\n dcId: options.dcId\n };\n },\n options\n });\n }\n\n public async getStoryPublicForwards(params: {\n peerId: PeerId,\n id: number,\n limit: number,\n offset?: string\n }) {\n const options = await this.getInvokeOptions(params);\n return this.apiManager.invokeApiSingleProcess({\n method: 'stats.getStoryPublicForwards',\n params: {\n peer: this.appPeersManager.getInputPeerById(params.peerId),\n id: params.id,\n limit: params.limit,\n offset: params.offset\n },\n processResult: this.processPublicForwards,\n options\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {BusinessIntro, MessageEntity} from '../../layer';\nimport {AppManager} from './manager';\nimport getPeerId from './utils/peers/getPeerId';\n\nexport default class AppBusinessManager extends AppManager {\n public saveBusinessIntro(userId: UserId, intro: BusinessIntro) {\n if(!intro) {\n return;\n }\n\n intro.sticker = this.appDocsManager.saveDoc(intro.sticker, {type: 'userFull', userId});\n return intro;\n }\n\n public resolveBusinessChatLink(slug: string) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'account.resolveBusinessChatLink',\n params: {slug},\n processResult: (resolved) => {\n this.appPeersManager.saveApiPeers(resolved);\n\n const peerId = getPeerId(resolved.peer);\n const {message, entities} = resolved;\n const out: {peerId: PeerId, message: string, entities?: MessageEntity[]/* , totalEntities?: MessageEntity[] */} = {\n peerId,\n message,\n entities\n };\n\n // this.appMessagesManager.wrapMessageEntities(out);\n return out;\n }\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport pause from '../../helpers/schedulers/pause';\nimport {TextWithEntities, MessagesTranslatedText, MessagesTranslateText} from '../../layer';\nimport {AppManager} from './manager';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\n\n// ! possible race-condition if message was edited while translation is in progress\n\nconst MAX_MESSAGES_PER_REQUEST = 20;\n\nexport default class AppTranslationsManager extends AppManager {\n private translateTextBatch: {\n [lang: string]: {\n text: Map>,\n messages: Map>>,\n textPromise?: Promise,\n messagesPromises: Map>\n }\n } = {};\n private triedToTranslateMessages: Map<`${PeerId}_${number}`, Set> = new Map();\n\n public hasTriedToTranslateMessage(peerId: PeerId, mid: number) {\n return this.triedToTranslateMessages.has(`${peerId}_${mid}`);\n }\n\n public resetMessageTranslations(peerId: PeerId, mid: number) {\n const key = `${peerId}_${mid}` as const;\n const languages = this.triedToTranslateMessages.get(key);\n if(!languages) {\n return;\n }\n\n for(const lang of languages) {\n const batch = this.translateTextBatch[lang];\n if(!batch) {\n continue;\n }\n\n const map = batch.messages.get(peerId);\n if(!map) {\n continue;\n }\n\n map.delete(mid);\n }\n\n this.triedToTranslateMessages.delete(key);\n }\n\n private processTextWithEntities = (textWithEntities: TextWithEntities) => {\n this.appMessagesManager.wrapMessageEntities(textWithEntities);\n return textWithEntities;\n };\n\n private batchTranslation(\n lang: string,\n map: Map>,\n getParams: (keys: T[]) => Partial,\n noCaching?: boolean\n ) {\n if(!map || ![...map.values()].some((v) => v instanceof Promise)) {\n return;\n }\n\n return pause(0).then(async() => {\n const doingEntries = [...map.entries()].filter(([mid, v]) => v instanceof Promise).slice(0, MAX_MESSAGES_PER_REQUEST);\n const doingMap = new Map(doingEntries);\n const doingKeys = doingEntries.map(([mid]) => mid);\n\n const result: MessagesTranslatedText = await this.apiManager.invokeApi('messages.translateText', {\n ...getParams(doingKeys),\n to_lang: lang\n }).catch((err) => {\n doingKeys.forEach((key) => {\n const deferred = doingMap.get(key) as CancellablePromise;\n map.delete(key);\n deferred.reject(err);\n });\n\n return undefined;\n });\n\n if(result) result.result.forEach((textWithEntities, idx) => {\n this.processTextWithEntities(textWithEntities);\n const key = doingKeys[idx];\n const deferred = doingMap.get(key) as CancellablePromise;\n if(noCaching) map.delete(key);\n else map.set(key, textWithEntities);\n deferred.resolve(textWithEntities);\n });\n });\n }\n\n private batchMessageTranslation(lang: string, peerId: PeerId) {\n const batch = this.translateTextBatch[lang];\n if(!batch || batch.messagesPromises.get(peerId)) {\n return;\n }\n\n const map = batch.messages.get(peerId);\n const promise = this.batchTranslation(lang, map, (mids) => ({\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: mids.map((mid) => getServerMessageId(mid))\n }));\n promise && batch.messagesPromises.set(peerId, promise);\n promise?.then(() => {\n batch.messagesPromises.delete(peerId);\n this.batchMessageTranslation(lang, peerId);\n });\n }\n\n private batchTextTranslation(lang: string) {\n const batch = this.translateTextBatch[lang];\n if(!batch || batch.textPromise) {\n return;\n }\n\n const map = batch.text;\n const promise = this.batchTranslation(lang, map, (keys) => ({\n text: keys.map((key) => ({entities: [], ...JSON.parse(key)}))\n }), true);\n promise && (batch.textPromise = promise);\n batch.textPromise?.then(() => {\n batch.textPromise = undefined;\n this.batchTextTranslation(lang);\n });\n }\n\n public translateText(options: ({\n peerId: PeerId,\n mid: number\n } | {\n text: TextWithEntities\n }) & {lang: string, onlyCache?: boolean}) {\n this.translateTextBatch[options.lang] ??= {text: new Map(), messages: new Map(), messagesPromises: new Map()};\n const batch = this.translateTextBatch[options.lang];\n const isMessage = 'peerId' in options;\n\n if(isMessage) {\n let map = batch.messages.get(options.peerId);\n if(!map) {\n batch.messages.set(options.peerId, map = new Map());\n }\n\n let promise = map.get(options.mid);\n if(promise || options.onlyCache) {\n return promise;\n }\n\n promise = deferredPromise();\n map.set(options.mid, promise);\n\n const key = `${options.peerId}_${options.mid}` as const;\n let tried = this.triedToTranslateMessages.get(key);\n if(!tried) {\n this.triedToTranslateMessages.set(key, tried = new Set());\n }\n tried.add(options.lang);\n\n this.batchMessageTranslation(options.lang, options.peerId);\n\n return promise;\n } else {\n const key = JSON.stringify(options.text);\n let promise = batch.text.get(key);\n if(promise || options.onlyCache) {\n return promise;\n }\n\n promise = deferredPromise();\n batch.text.set(key, promise);\n\n this.batchTextTranslation(options.lang);\n\n return promise;\n }\n }\n\n public togglePeerTranslations(peerId: PeerId, disabled: boolean) {\n this.appProfileManager.modifyCachedFullPeer(peerId, (fullPeer) => {\n if(disabled) fullPeer.pFlags.translations_disabled = true;\n else delete fullPeer.pFlags.translations_disabled;\n });\n\n return this.apiManager.invokeApi('messages.togglePeerTranslations', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n disabled\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport findAndSplice from '../../helpers/array/findAndSplice';\nimport assumeType from '../../helpers/assumeType';\nimport {BotInlineResult, MessagesSavedGifs, Document} from '../../layer';\nimport {NULL_PEER_ID} from '../mtproto/mtproto_config';\nimport {AppManager} from './manager';\nimport getDocumentInput from './utils/docs/getDocumentInput';\n\nexport default class AppGifsManager extends AppManager {\n private gifs: MaybePromise;\n\n protected after() {\n this.rootScope.addEventListener('user_auth', () => {\n this.rootScope.addEventListener('app_config', () => this.onGifsUpdated());\n });\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateSavedGifs: () => this.onGifsUpdated()\n });\n }\n\n private async onGifsUpdated() {\n const gifs = await this.getGifs(true);\n this.rootScope.dispatchEvent('gifs_updated', gifs);\n }\n\n public getGifs(overwrite?: boolean) {\n if(overwrite && Array.isArray(this.gifs)) {\n this.gifs = undefined;\n }\n\n return this.gifs ??= this.apiManager.invokeApi('messages.getSavedGifs').then((res) => {\n assumeType(res);\n return this.gifs = res.gifs.map((doc) => this.appDocsManager.saveDoc(doc)).filter(Boolean);\n });\n }\n\n public async searchGifs(query: string, nextOffset?: string) {\n const gifBotPeerId = (await this.appUsersManager.resolveUsername('gif')).id.toPeerId(false);\n const {results, next_offset} = await this.appInlineBotsManager.getInlineResults(NULL_PEER_ID, gifBotPeerId, query, nextOffset);\n\n const documents = results.map((result) => (result as BotInlineResult.botInlineMediaResult).document).filter(Boolean) as Document.document[];\n return {documents, nextOffset: next_offset};\n }\n\n public async saveGif(docId: DocId, unsave?: boolean) {\n const [limit, gifs] = await Promise.all([\n this.apiManager.getLimit('gifs'),\n this.getGifs()\n ]);\n\n const doc = this.appDocsManager.getDoc(docId);\n findAndSplice(gifs as Document.document[], (_doc) => _doc.id === doc.id);\n\n if(!unsave) {\n gifs.unshift(doc);\n const spliced = gifs.splice(limit, gifs.length - limit);\n }\n\n this.rootScope.dispatchEvent('gifs_updated', gifs);\n this.rootScope.dispatchEvent('gif_updated', {saved: !unsave, document: doc});\n\n return this.apiManager.invokeApi('messages.saveGif', {\n id: getDocumentInput(doc),\n unsave\n }).then(() => {\n if(unsave) {\n this.onGifsUpdated();\n }\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {PasswordManager} from '../mtproto/passwordManager';\nimport {ReferenceDatabase} from '../mtproto/referenceDatabase';\nimport DialogsStorage from '../storages/dialogs';\nimport FiltersStorage from '../storages/filters';\nimport {ApiUpdatesManager} from './apiUpdatesManager';\nimport {AppAvatarsManager} from './appAvatarsManager';\nimport {AppCallsManager} from './appCallsManager';\nimport {AppChatsManager} from './appChatsManager';\nimport {AppDocsManager} from './appDocsManager';\nimport {AppDraftsManager} from './appDraftsManager';\nimport {AppEmojiManager} from './appEmojiManager';\nimport {AppGroupCallsManager} from './appGroupCallsManager';\nimport {AppInlineBotsManager} from './appInlineBotsManager';\nimport {AppMessagesIdsManager} from './appMessagesIdsManager';\nimport {AppMessagesManager} from './appMessagesManager';\nimport {AppNotificationsManager} from './appNotificationsManager';\nimport {AppPeersManager} from './appPeersManager';\nimport {AppPhotosManager} from './appPhotosManager';\nimport {AppPollsManager} from './appPollsManager';\nimport {AppPrivacyManager} from './appPrivacyManager';\nimport {AppProfileManager} from './appProfileManager';\nimport {AppReactionsManager} from './appReactionsManager';\nimport {AppStickersManager} from './appStickersManager';\nimport {AppUsersManager} from './appUsersManager';\nimport {AppWebPagesManager} from './appWebPagesManager';\nimport {ApiFileManager} from '../mtproto/apiFileManager';\nimport {ApiManager} from '../mtproto/apiManager';\nimport ctx from '../../environment/ctx';\nimport PeersStorage from '../storages/peers';\nimport ThumbsStorage from '../storages/thumbs';\nimport {NetworkerFactory} from '../mtproto/networkerFactory';\nimport {RootScope} from '../rootScope';\nimport {Authorizer} from '../mtproto/authorizer';\nimport {DcConfigurator} from '../mtproto/dcConfigurator';\nimport {TimeManager} from '../mtproto/timeManager';\nimport {AppStoragesManager} from './appStoragesManager';\nimport cryptoMessagePort from '../crypto/cryptoMessagePort';\nimport appStateManager from './appStateManager';\nimport filterUnique from '../../helpers/array/filterUnique';\nimport AppWebDocsManager from './appWebDocsManager';\nimport AppPaymentsManager from './appPaymentsManager';\nimport AppAttachMenuBotsManager from './appAttachMenuBotsManager';\nimport AppSeamlessLoginManager from './appSeamlessLoginManager';\nimport AppThemesManager from './appThemesManager';\nimport AppUsernamesManager from './appUsernamesManager';\nimport AppChatInvitesManager from './appChatInvitesManager';\nimport AppStoriesManager from './appStoriesManager';\nimport AppBotsManager from './appBotsManager';\nimport AppBoostsManager from './appBoostsManager';\nimport AppStatisticsManager from './appStatisticsManager';\nimport AppBusinessManager from './appBusinessManager';\nimport AppTranslationsManager from './appTranslationsManager';\nimport AppGifsManager from './appGifsManager';\n\nexport default function createManagers(appStoragesManager: AppStoragesManager, userId: UserId) {\n const managers = {\n appPeersManager: new AppPeersManager,\n appChatsManager: new AppChatsManager,\n appDocsManager: new AppDocsManager,\n appPhotosManager: new AppPhotosManager,\n appPollsManager: new AppPollsManager,\n appUsersManager: new AppUsersManager,\n appWebPagesManager: new AppWebPagesManager,\n appDraftsManager: new AppDraftsManager,\n appProfileManager: new AppProfileManager,\n appNotificationsManager: new AppNotificationsManager,\n apiUpdatesManager: new ApiUpdatesManager,\n appAvatarsManager: new AppAvatarsManager,\n appGroupCallsManager: new AppGroupCallsManager,\n appCallsManager: new AppCallsManager,\n appReactionsManager: new AppReactionsManager,\n appMessagesManager: new AppMessagesManager,\n appMessagesIdsManager: new AppMessagesIdsManager,\n appPrivacyManager: new AppPrivacyManager,\n appInlineBotsManager: new AppInlineBotsManager,\n appStickersManager: new AppStickersManager,\n referenceDatabase: new ReferenceDatabase,\n appEmojiManager: new AppEmojiManager,\n filtersStorage: new FiltersStorage,\n dialogsStorage: new DialogsStorage,\n apiManager: new ApiManager,\n cryptoWorker: cryptoMessagePort,\n passwordManager: new PasswordManager,\n apiFileManager: new ApiFileManager,\n peersStorage: new PeersStorage,\n thumbsStorage: new ThumbsStorage,\n networkerFactory: new NetworkerFactory,\n rootScope: new RootScope,\n authorizer: new Authorizer,\n dcConfigurator: new DcConfigurator,\n timeManager: new TimeManager,\n appStoragesManager: appStoragesManager,\n appStateManager: appStateManager,\n appWebDocsManager: new AppWebDocsManager,\n appPaymentsManager: new AppPaymentsManager,\n appAttachMenuBotsManager: new AppAttachMenuBotsManager,\n appSeamlessLoginManager: new AppSeamlessLoginManager,\n appThemesManager: new AppThemesManager,\n appUsernamesManager: new AppUsernamesManager,\n appChatInvitesManager: new AppChatInvitesManager,\n appStoriesManager: new AppStoriesManager,\n appBotsManager: new AppBotsManager,\n appBoostsManager: new AppBoostsManager,\n appStatisticsManager: new AppStatisticsManager,\n appBusinessManager: new AppBusinessManager,\n appTranslationsManager: new AppTranslationsManager,\n appGifsManager: new AppGifsManager\n };\n\n type T = typeof managers;\n\n for(const name in managers) {\n const manager = managers[name as keyof T];\n if(!manager) {\n continue;\n }\n\n if((manager as AppMessagesManager).setManagers) {\n (manager as AppMessagesManager).setManagers(managers as any);\n delete (manager as AppMessagesManager).setManagers;\n }\n\n // @ts-ignore\n ctx[name] = manager;\n }\n\n const promises: Array void) | void> | void>[] = [];\n let names = Object.keys(managers) as (keyof T)[];\n names.unshift(\n 'appUsersManager',\n 'appChatsManager',\n 'appNotificationsManager',\n 'appMessagesManager',\n 'dialogsStorage'\n );\n names = filterUnique(names);\n for(const name of names) {\n const manager = managers[name];\n if((manager as any)?.after) {\n // console.log('injecting after', name);\n const result = (manager as any).after();\n promises.push(result);\n\n // if(result instanceof Promise) {\n // result.then(() => {\n // console.log('injected after', name);\n // });\n // }\n }\n }\n\n if(userId) {\n managers.apiManager.setUserAuth(userId);\n }\n\n return Promise.all(promises).then(() => {\n managers.rootScope.dispatchEventSingle('managers_ready');\n return managers;\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport ServiceMessagePort from '../serviceWorker/serviceMessagePort';\nimport App from '../../config/app';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport callbackify from '../../helpers/callbackify';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport cryptoMessagePort from '../crypto/cryptoMessagePort';\nimport MTProtoMessagePort from '../mtproto/mtprotoMessagePort';\nimport appStateManager from './appStateManager';\nimport {AppStoragesManager} from './appStoragesManager';\nimport createManagers from './createManagers';\n\ntype Managers = Awaited>;\n\n// for testing cases without video streaming\nconst CAN_USE_SERVICE_WORKER = true;\n\nexport class AppManagersManager {\n private managers: Managers | Promise;\n private cryptoWorkersURLs: string[];\n private cryptoPortsAttached: number;\n private cryptoPortPromise: CancellablePromise;\n\n private _isServiceWorkerOnline: boolean;\n\n private serviceMessagePort: ServiceMessagePort;\n private _serviceMessagePort: MessagePort\n\n constructor() {\n this._isServiceWorkerOnline = CAN_USE_SERVICE_WORKER;\n\n this.cryptoWorkersURLs = [];\n this.cryptoPortsAttached = 0;\n this.cryptoPortPromise = deferredPromise();\n this.cryptoPortPromise.then(() => {\n this.cryptoPortPromise = undefined;\n });\n }\n\n public start() {\n const port = MTProtoMessagePort.getInstance();\n\n port.addEventListener('manager', ({name, method, args}) => {\n return callbackify(this.getManagers(), (managers) => {\n // @ts-ignore\n const manager = managers[name];\n return manager[method](...args);\n });\n });\n\n port.addEventListener('cryptoPort', (payload, source, event) => {\n const port = event.ports[0];\n if(this.cryptoPortsAttached >= this.cryptoWorkersURLs.length) {\n port.close();\n return;\n }\n\n ++this.cryptoPortsAttached;\n cryptoMessagePort.attachPort(port);\n this.cryptoPortPromise?.resolve();\n });\n\n port.addEventListener('createProxyWorkerURLs', ({originalUrl, blob}) => {\n let length = this.cryptoWorkersURLs.length;\n if(!length) {\n this.cryptoWorkersURLs.push(originalUrl);\n ++length;\n }\n\n const maxLength = App.cryptoWorkers;\n if(length === maxLength) {\n return this.cryptoWorkersURLs;\n }\n\n const newURLs = new Array(maxLength - length).fill(undefined).map(() => URL.createObjectURL(blob));\n this.cryptoWorkersURLs.push(...newURLs);\n return this.cryptoWorkersURLs;\n });\n }\n\n private async createManagers() {\n const appStoragesManager = new AppStoragesManager();\n\n await Promise.all([\n // new Promise(() => {}),\n appStoragesManager.loadStorages(),\n this.cryptoPortPromise\n ]);\n\n const managers = await createManagers(appStoragesManager, appStateManager.userId);\n return this.managers = managers; // have to overwrite cached promise\n }\n\n public getManagers() {\n return this.managers ??= this.createManagers();\n }\n\n public get isServiceWorkerOnline() {\n return this._isServiceWorkerOnline;\n }\n\n public set isServiceWorkerOnline(value) {\n this._isServiceWorkerOnline = CAN_USE_SERVICE_WORKER ? value : false;\n }\n\n public getServiceMessagePort() {\n return this._isServiceWorkerOnline ? this.serviceMessagePort : undefined;\n }\n\n public onServiceWorkerPort(event: MessageEvent) {\n if(this.serviceMessagePort) {\n this.serviceMessagePort.detachPort(this._serviceMessagePort);\n this._serviceMessagePort = undefined;\n } else {\n this.serviceMessagePort = new ServiceMessagePort();\n this.serviceMessagePort.addMultipleEventsListeners({\n requestFilePart: (payload) => {\n return callbackify(appManagersManager.getManagers(), (managers) => {\n const {docId, dcId, offset, limit} = payload;\n return managers.appDocsManager.requestDocPart(docId, dcId, offset, limit);\n });\n },\n cancelFilePartRequests: (docId) => {\n return callbackify(appManagersManager.getManagers(), (managers) => {\n return managers.appDocsManager.cancelDocPartsRequests(docId);\n });\n },\n requestRtmpState(call) {\n return callbackify(appManagersManager.getManagers(), (managers) => {\n return managers.appGroupCallsManager.fetchRtmpState(call);\n });\n },\n requestRtmpPart(payload) {\n return callbackify(appManagersManager.getManagers(), (managers) => {\n const {request, dcId} = payload;\n return managers.appGroupCallsManager.fetchRtmpPart(request, dcId);\n });\n }\n });\n }\n\n // * port can be undefined in the future\n if(this._serviceMessagePort = event.ports[0]) {\n this.serviceMessagePort.attachPort(this._serviceMessagePort);\n }\n }\n}\n\nconst appManagersManager = new AppManagersManager();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.appManagersManager = appManagersManager);\nexport default appManagersManager;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type SuperMessagePort from '../lib/mtproto/superMessagePort';\nimport ctx from '../environment/ctx';\n\nexport default function listenMessagePort(\n messagePort: SuperMessagePort,\n onConnect?: (source: MessageEventSource) => void,\n onDisconnect?: (source: MessageEventSource) => void\n) {\n const attachPort = (listenPort: any, sendPort: any) => {\n messagePort.attachListenPort(listenPort);\n sendPort && messagePort.attachSendPort(sendPort);\n onConnect?.(listenPort);\n };\n\n messagePort.setOnPortDisconnect(onDisconnect);\n\n if(typeof(SharedWorkerGlobalScope) !== 'undefined') {\n (ctx as any as SharedWorkerGlobalScope).addEventListener('connect', (e) => attachPort(e.source, e.source));\n } else if(typeof(ServiceWorkerGlobalScope) !== 'undefined') {\n attachPort(ctx, null);\n } else {\n attachPort(ctx, ctx);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// just to include\nimport '../polyfill';\nimport '../../helpers/peerIdPolyfill';\n\nimport cryptoWorker from '../crypto/cryptoMessagePort';\nimport {setEnvironment} from '../../environment/utils';\nimport appStateManager from '../appManagers/appStateManager';\nimport transportController from './transports/controller';\nimport MTProtoMessagePort from './mtprotoMessagePort';\nimport RESET_STORAGES_PROMISE from '../appManagers/utils/storages/resetStoragesPromise';\nimport appManagersManager from '../appManagers/appManagersManager';\nimport listenMessagePort from '../../helpers/listenMessagePort';\nimport {logger} from '../logger';\nimport {State} from '../../config/state';\nimport toggleStorages from '../../helpers/toggleStorages';\nimport appTabsManager from '../appManagers/appTabsManager';\nimport callbackify from '../../helpers/callbackify';\nimport Modes from '../../config/modes';\n\nconst log = logger('MTPROTO');\n// let haveState = false;\n\nconst port = new MTProtoMessagePort();\nport.addMultipleEventsListeners({\n environment: (environment) => {\n setEnvironment(environment);\n\n if(import.meta.env.VITE_MTPROTO_AUTO && Modes.multipleTransports) {\n transportController.waitForWebSocket();\n }\n },\n\n crypto: ({method, args}) => {\n return cryptoWorker.invokeCrypto(method as any, ...args as any);\n },\n\n state: ({state, resetStorages, pushedKeys, newVersion, oldVersion, userId}) => {\n // if(haveState) {\n // return;\n // }\n\n log('got state', state, pushedKeys);\n\n appStateManager.userId = userId;\n appStateManager.newVersion = newVersion;\n appStateManager.oldVersion = oldVersion;\n\n RESET_STORAGES_PROMISE.resolve({\n storages: resetStorages,\n callback: () => {\n (Object.keys(state) as any as (keyof State)[]).forEach((key) => {\n appStateManager.pushToState(key, state[key], true, !pushedKeys.includes(key));\n });\n }\n });\n // haveState = true;\n },\n\n toggleStorages: ({enabled, clearWrite}) => {\n return toggleStorages(enabled, clearWrite);\n },\n\n event: (payload, source) => {\n log('will redirect event', payload, source);\n port.invokeExceptSource('event', payload, source);\n },\n\n serviceWorkerOnline: (online) => {\n appManagersManager.isServiceWorkerOnline = online;\n },\n\n serviceWorkerPort: (payload, source, event) => {\n appManagersManager.onServiceWorkerPort(event);\n port.invokeVoid('receivedServiceMessagePort', undefined, source);\n },\n\n createObjectURL: (blob) => {\n return URL.createObjectURL(blob);\n }\n\n // socketProxy: (task) => {\n // const socketTask = task.payload;\n // const id = socketTask.id;\n\n // const socketProxied = socketsProxied.get(id);\n // if(socketTask.type === 'message') {\n // socketProxied.dispatchEvent('message', socketTask.payload);\n // } else if(socketTask.type === 'open') {\n // socketProxied.dispatchEvent('open');\n // } else if(socketTask.type === 'close') {\n // socketProxied.dispatchEvent('close');\n // socketsProxied.delete(id);\n // }\n // },\n});\n\nlog('MTProto start');\n\nappManagersManager.start();\nappManagersManager.getManagers();\nappTabsManager.start();\n\nlet isFirst = true;\n// let sentHello = false;\nlistenMessagePort(port, (source) => {\n appTabsManager.addTab(source);\n if(isFirst) {\n isFirst = false;\n } else {\n callbackify(appManagersManager.getManagers(), (managers) => {\n managers.thumbsStorage.mirrorAll(source);\n managers.appPeersManager.mirrorAllPeers(source);\n managers.appMessagesManager.mirrorAllMessages(source);\n });\n }\n\n // port.invokeVoid('hello', undefined, source);\n // if(!sentHello) {\n // port.invokeVoid('hello', undefined, source);\n // sentHello = true;\n // }\n}, (source) => {\n appTabsManager.deleteTab(source);\n});\n"],"names":["bufferConcats","args","length","acc","v","tmp","lastLength","b","fn","onFinally","callback","result","reason","isAnyChat","peerId","isUser","isChat","value","newMethod","originMethod","Modes","DEBUG","ctx","MOUNT_CLASS_TO","tabId","indexOfAndSplice","array","item","idx","IS_SERVICE_WORKER","IS_WEB_WORKER","IS_WORKER","getWindowClients","postMessage","listener","err","notifyServiceWorker","all","listeners","notifyWorker","noop","EventListenerBase","reuseResults","name","options","_a","listenerObject","obj","i","l","error","collectResults","arr","CACHED_ERRORS","makeError","type","USER_AGENT","IS_SAFARI","IS_FIREFOX","_logTimer","dT","LogTypes","LOG_LEVELS","IS_WEBKIT","STYLES_SUPPORTED","LOGGER_STYLES","methods","logger","prefix","ignoreDebugReset","style","originalPrefix","originalStyle","log","method","logType","newPrefix","level","prefixCache","_type","prefix2","USE_LOCKS","SuperMessagePort","logSuffix","event","task","source","taskId","deferred","payload","previousResolve","ret","resolve","reject","pingResolve","newEvent","id","innerTask","resultTaskPayload","resultTask","ackTask","isPromise","cached","port","promise","lock","port2","portTasks","tasks","batchTask","ports","transfer","withAck","_void","interval","target","CryptoMessagePort","sendPortIndex","cryptoMessagePort","environment","getEnvironment","setEnvironment","env","NULL_PEER_ID","REPLIES_PEER_ID","REPLIES_HIDDEN_CHANNEL_ID","HIDDEN_PEER_ID","SERVICE_PEER_ID","MUTE_UNTIL","MAX_FILE_SAVE_SIZE","THUMB_TYPE_FULL","ATTACH_MENU_BOT_ICON_NAME","MESSAGE_ID_OFFSET","GENERAL_TOPIC_ID","CAN_HIDE_TOPIC","T_ME_PREFIXES","FOLDER_ID_ALL","FOLDER_ID_ARCHIVE","REAL_FOLDERS","START_LOCAL_ID","MTProtoMessagePort","RootScope","isNew","isPremium","status","settings","rootScope","deferredHelper","deferredPromise","_resolve","_reject","throttle","ms","shouldRunFirst","isPending","clear","_args","safeAssign","object","fromObject","_IDB","db","createNew","createIndexes","os","store","indexNames","indexName","index","createObjectStore","request","finished","calledNew","e","transaction","instance","preserve","storage","IDB","IDBStorage","storeName","entryName","isArray","objectStore","promises","mode","perf","onError","timeout","onComplete","results","requests","r","waitForTransactionComplete","callbackResult","left","onRequestFinished","THROTTLE_TIME","_AppStorage","set","keys","values","key","useCache","p","onlyLocal","canUseStorage","saveLocal","enabled","clearWrite","names","AppStorage","DATABASE_STATE","StateStorage","stateStorage","DEEP_PATH_JOINER","joinDeepPath","splitDeepPath","path","setDeepProperty","deleteIfUndefined","splitted","lastObject","part","lastKey","AppStateManager","first","direct","appStateManager","MAIN_DOMAINS","threads","App","pause","HTTP","dcId","url","logTypes","body","controller","response","buffer","connected","transportController","pending","Socket","randomize","Obfuscation","data","operation","codec","initPayload","val","val2","reversedPayload","encKey","encIv","decKey","decIv","idPromise","encrypted","AbridgedPacketCodec","len","header","abridgedPacketCodec","ConnectionStatus","ConnectionStatus2","bytesToHex","bytes","TcpObfuscated","Connection","retryTimeout","time","needTimeout","retryAt","diff","connection","enable","toEncode","encoded","sent","bodySent","TEST_SUFFIX","PREMIUM_SUFFIX","RETRY_TIMEOUT_CLIENT","RETRY_TIMEOUT_DOWNLOAD","getTelegramConnectionSuffix","connectionType","constructTelegramWebSocketUrl","premium","suffix","DcConfigurator","chosenServer","oooohLetMeLive","subdomain","transportType","reuse","servers","transports","transport","MTTransportController","opened","dcConfigurator","httpPromise","websocketPromise","socket","isHttpAvailable","isWebSocketAvailable","https","websocket","transportController$1","RESET_STORAGES_PROMISE","ServiceMessagePort","callbackify","smth","AppManager","managers","createStorages","storages","recordPromise","description","recordPromiseBound","loadStoragesInner","storagesKeys","storagesPromises","storagesResults","resetStorages","clearPromises","loadStorages","AppStoragesManager","PasswordManager","state","currentHashPromise","newHashPromise","params","newAlgo","salt1","hashes","password","inputCheckPassword","auth","code","deepEqual","x","y","ignoreKeys","ignoreSet","okok","ok","tx","ReferenceDatabase","reference","context","contexts","_context","c","hex","newHex","newContext","tsNow","seconds","t","LatinizeMap","badCharsRe","trimRe","C2L","clearBadCharsAndTrim","text","fixCyrillic","ch","latinizeString","cleanSearchText","latinize","processSearchText","hasTag","originalText","flatten","SearchIndex","searchText","query","queryWords","word","minChars","newFoundObjs","fullTexts","queryWordsLength","fullText","what","found","foundChars","isLastWord","fullTextLength","a","aLeftChars","bLeftChars","o","compareLong","str1","str2","str1Length","maxPartLength","v1","v2","compareValue","val1","SliceEnd","SlicedArray","slicedArray","side","isEnd","slice","start","deleteCount","items","slices","lowerBound","upperBound","foundSlice","lowerIndex","upperIndex","foundSliceIndex","sliced","insertIndex","s","prevSlice","nextSlice","offsetId","offset","maxId","addOffset","limit","sliceOffset","pos","sliceStart","sliceEnd","topWasMeantToLoad","bottomWasMeantToLoad","topFulfilled","bottomFulfilled","serialized","json","parsed","inserted","forEachReverse","insertInDescendSortedArray","element","getProperty","cmp","property","sortProperty","prev","next","safeReplaceObject","wasObject","newObject","clearMessageId","messageId","toServer","getServerMessageId","getDialogIndexKey","localId","isObject","getDialogIndex","dialog","indexKey","getPeerId","userId","chatId","peerParams","getPeerIdsFromMessage","message","peerIds","media","userIds","chatIds","peers","webPage","storyAttribute","attribute","peer","recentReactions","reaction","action","recentRepliers","reply","savedPeerId","fwdHeader","defineNotNumerableProperties","props","out","setDialogIndex","isForumTopic","isSavedDialog","isDialog","getDialogKey","getDialogThreadId","FilterType","FilterType2","GLOBAL_FOLDER_ID","DialogsStorage","init","folderId","update","folderPeer","folder_id","channelId","topicId","topic","isSaved","d","filterId","order","pinned","onFilterUpdate","filter","dialogs","_order","peerText","loaded","isVirtualFilter","orders","isPinned","offsetDate","folder","forumTopic","skipMigrated","filterType","currentPeerId","nextIndex","arrays","isVirtual","isRealFolder","pinnedIds","pinnedKey","pinnedIndex","topicOrSavedId","folders","verify","skipped","date","noIndex","filters","dialog1","wasIndex","wasDialog","wasDialogIndex","newDialogIndex","toggle","isTopic","callbacks","wasUnreadCount","wasUnmuted","addMessagesCount","newUnreadCount","newUnmuted","toggleDialog","toggleUnmuted","isForum","forumUnreadCount","count","hasUnmuted","_folder","justReturn","noPinnedOrderUpdate","_isDialog","topDate","channel","dialogKey","threadId","historyStorage","messagesStorage","history","incomingMessage","mid","pts","newPts","ignoreOffsetDate","saveGlobalOffset","savedGlobalOffsetDate","savedOffsetDate","keepLocal","foundDialog","wasPinned","dropped","updatedDialogs","getUpdateCache","cache","topMid","pendingTopMsgs","pendingTopMsgKey","topPendingMid","topPendingMessage","topMessage","updates","slicedUpdates","chat","migratedToPeer","wasDialogBefore","isOut","releaseUnreadCount","oldTopic","isIconChanged","isTitleChanged","isChanged","offsetIndex","forceLocal","recursion","fillContactsResult","reloadMissingDialogsPromise","realFolderId","curDialogStorage","isSearchSupported","isServerSearchSupported","d1","d2","loadedAll","isEnoughDialogs","forumTopics","ids","fullfillLeft","messagesForumTopics","ignoreIfAsMessages","f","myId","messagesMessages","pinnedOrder","isVirtualFolder","newPinned","copy","el","clonedObj","prop","findAndSplice","convertment","PREPENDED_FILTERS","LOCAL_FILTER","FiltersStorage","oldFilters","_filterId","allChatsFilter","archiveFilter","allChatsFilterIndex","pFlags","prepend","remove","reloadDialogs","inputPeer","isAlreadyReloaded","reloadPromises","missingPeerIds","overwrite","messagesDialogFilters","silent","from","to","arrayFrom","oldFilter","_filter","exportedChatlistInvite","slug","title","exportedInvites","chatlistInvite","chatlistUpdates","filterUnique","originalString","ALPHA_CHARS_REG_EXP","ALPHA_NUMERIC_REG_EXP","DOMAIN_ADD_CHARS","URL_ALPHANUMERIC_REG_EXP_PART","URL_PROTOCOL_REG_EXP_PART","URL_REG_EXP","USERNAME_REG_EXP","TIMESTAMP_REG_EXP","BOT_COMMAND_REG_EXP","FULL_REG_EXP","emojiRegExp","EMAIL_REG_EXP","MARKDOWN_REG_EXP","MARKDOWN_ENTITIES","PASS_CONFLICTING_ENTITIES","PASS_SINGLE_CONFLICTING_ENTITIES","PHONE_NUMBER_REG_EXP","LOCAL_ENTITIES","CAN_COMBINE_ENTITIES","combineSameEntities","entities","entity","nextEntityIdx","_i","nextEntity","SINGLE_ENTITIES","findConflictingEntity","currentEntities","newEntity","singleStart","singleEnd","currentEntity","sortEntities","mergeEntities","newEntities","filtered","parseMarkdown","raw","noTrim","pushedEntity","pushEntity","newTextParts","rawOffset","match","matchIndex","possibleNextRawOffset","beforeMatch","languageMatch","startIndex","endIndex","whitespace","previousPart","isSOH","rawOffsetDiff","newText","applyMixins","derivedCtor","constructors","baseCtor","SYNC_DELAY","ApiUpdatesManager","updateMessage","processOpts","fromId","toId","self","us","nextSeq","pendingUpdatesData","curState","curPts","goodPts","goodIndex","updatesState","wasSyncing","differenceResult","apiMessage","nextState","channelState","pts_count","toPeerId","popPts","popSeq","seq","seqStart","subscription","cb","force","langCode","newVersion","stateResult","strs","getChangelog","lang","res","langStr","languages","language","AppAvatarsManager","size","saved","photo","peerPhotoFileLocation","downloadOptions","blob","nextRandomUint","bits","randomLong","AppCallsManager","g_b","call","isDiscarded","oldCall","callId","phonePhoneCall","dhConfig","protocol","g_a_hash","video","duration","hasRights","rights","isThread","isCheckingRightsForSelf","myFlags","isAdmin","getParticipantPeerId","participant","getPeerActiveUsernames","usernames","username","AppChatsManager","forceInvalidation","chats","apiChats","override","oldChat","changedUsername","oldPhotoId","newPhotoId","toggledForum","changedPhoto","changedEmojiStatus","changedTitle","changedAnyBadge","changedParticipation","storiesCallback","banned_rights","good","allowMin","input","usersInputs","u","messagesInvitedUsers","timestamp","invitedUsers","fwdLimit","doNotRefresh","rank","wasChannel","inputFile","inputChatPhoto","about","bool","prevParticipant","newParticipant","bannedRights","messagesChats","reactions","chatFull","onResult","sendAsPeers","sponsoredMessages","sponsoredMessage","randomId","iconEmojiId","closed","hidden","iconColor","channelFull","sendAsInputPeer","groupId","newOrWasGroupId","groupChannelFull","approved","option","capitalizeFirstLetter","string","SKIP_PROTOCOLS","matchUrlProtocol","wrapUrl","unsafe","tgMeMatch","tgMatch","onclick","fullPath","setDirection","elem","setBlankToAnchor","anchor","equalFn","signalOptions","runEffects","runQueue","STALE","PENDING","Owner","Transition","ExternalSourceConfig","Listener","Updates","Effects","ExecCount","createSignal","setter","writeSignal","readSignal","untrack","updateComputation","runUpdates","lookUpstream","sSlot","node","isComp","current","TransitionRunning","markDownstream","cleanNode","runComputation","nextValue","owner","handleError","runTop","ancestors","wait","completeUpdates","queue","ignore","obs","castError","I18n","pluralRules","cacheLangPackPromise","setRTL","rtl","setLangCode","getCacheLangPack","langPack","applyLangPack","loadLocalLangPack","updateAmPm","dateTimeFormat","getDateTimeFormat","amText","pmText","setTimeFormat","format","haveToUpdate","cachedDateTimeFormats","IntlDateElement","defaultCode","langSign","countries","strings","formatLocalStrings","saveLangPack","loadLangPack","web","getStrings","pushTo","getLangPack","langPack1","langPack2","localLangPack1","localLangPack2","_","_Intl","currentLangCode","country","langPackKey","pushNextArgument","indexHolder","arg","superFormatter","indexes","str","regExp","lastIndex","p1","p2","p3","p4","wrappedUrl","formatted","plain","IntlElementBase","IntlElement","hours","i18n","i18n_","_i18n","I18n$1","months","days","monthsLocalized","daysLocalized","ONE_DAY","getWeekNumber","dayNum","yearStart","formatDateAccordingToTodayNew","today","now","getFullDate","joiner","fullYear","minYear","yearPattern","anyLetterRegExp","monthPattern","monthYearOrDayPattern","yearOrDayAndMonthPattern","shortDate","longDate","numberOfDaysEachMonth","fillTipDates","dates","q","haystack","year","month","day","minDate","maxDate","dayOfWeek","getDayOfWeek","currentDay","distance","formatWeekLong","matches","g1","g2","k","k1","selectedYear","createForMonthYear","createForDayMonth","g3","currentYear","validDateForMonth","formatterYearMax","getMonth","formatterMonthYear","isLeapYear","formatterDayMonth","safeReplaceArrayInObject","spoiler","chars","charsLength","char","encodeSpoiler","before","spoilerBefore","spoilerAfter","after","wrapPlainText","getDocumentInputFileLocation","doc","thumbSize","FILENAME_JOINER","getFileNameByLocation","location","fileName","ext","geoPoint","getFileURL","getDocumentDownloadOptions","thumb","queueId","onlyCache","inputFileLocation","mimeType","getDocumentURL","download","EXTENSION_MIME_TYPE_MAP","MIME_TYPE_EXTENSION_MAP","bytesFromHex","hexString","bytesCmp","bytes1","bytes2","readLengthField","buf","byte","parseDecoderSpecificInfo","lenSz","parseDecoderConfigDescriptor","parseES_Descriptor","dv","flags","streamDependenceFlag","URL_Flag","URLlength","BROKEN_DSCI","FIXED_ESDS","ESDS","MP4A","findUint8ArrayBack","needle","j","fixMp4ForChromium","u8","esdsOffset","esdsSize","mp4aOffset","esds","tryPatchMp4","uploadWallPaperTempId","AppDocsManager","online","oldDoc","mappedMimeType","appManagersManager","docId","file","document","cacheContext","wallpaper","wallPaper","onFinish","cancel","canceled","src","ab","repliesAreEqual","reply1","reply2","draftsAreEqual","draft1","draft2","AppDraftsManager","drafts","apiDraft","notify","draft","replyTo","localDraft","saveOnServer","serverDraft","draftObj","inputReplyTo","saveLocalDraft","combined","emptyDraft","validateInitObject","initObject","currentObject","onReplace","previousKey","ignorePaths","fixEmoji","end","EMOJI_LANG_PACK","RECENT_MAX_LENGTH","_AppEmojiManager","storageKey","pack","keywordsDifference","packKeywords","keywords","keyword","emoticons","addCustom","emojis","appEmojis","customEmojiIndex","emoji","customEmojisResult","customEmojis","recent","recentEmoji","recentCustomEmoji","add","docIds","documents","allIds","docs","pushPremiumGroup","groups","group","messagesEmojiGroups","emojiGroup","emoticon","AppEmojiManager","GET_PARTICIPANTS_LIMIT","AppGroupCallsManager","groupCallId","groupCall","participants","nextOffsetsMap","setNextOffset","newNextOffset","nextOffset","skipCounterUpdating","oldParticipant","hasLeft","modified","apiParticipants","shouldUpdate","scheduleDate","rtmp","groupCallParticipants","discard","groupCallInput","retry","full","revoke","getPhotoInput","getPhotoMediaInput","generateQId","queryId","resultId","getMediaInput","AppInlineBotsManager","geo","botId","botResults","topPeers","botPeerId","topPeer","fromPeerId","startParam","bot","peerData","button","queryAndResultIds","inlineResult","inputMedia","messageMedia","sendMessage","getDocumentMediaInput","webDocument","isLegacyMessageId","AppMessagesIdsManager","increment","mids","_channelId","prevItem","PARALLEL_LIMIT","IGNORE_ERRORS","LazyLoadQueueBase","parallelLimit","createDetails","MIDDLEWARE_ERROR","MiddlewareHelper","details","helper","additionalCallback","middleware","getMiddleware","getObjectKeysAndSort","sort","splitStringByLength","maxLength","lastSliceStartIndex","arrayIndex","delimiter","cut","_arrayIndex","overflowPart","partLength","debounce","shouldRunLast","waitingTimeout","waitingPromise","hadNewCall","invoke","_waitingTimeout","matchUrl","availableReactionToReaction","availableReaction","reactionsEqual","r1","r2","filterMessagesByInputFilter","inputFilter","messages","savedReaction","foundMsgs","filtering","neededContents","neededDocTypes","neededFlags","flag","goodEntities","reactionCount","uploadId","getFileNameForUpload","AppTabsManager","tab","appTabsManager","getGroupedText","foundMessages","m","getStickerEffectThumb","getDocumentInput","setBooleanFlag","getMessageThreadId","TLD","checkBrackets","urlLength","urlOpenBrackets","urlCloseBrackets","EmojiVersions","Emoji","version","encodeEmoji","emojiText","toCodePoints","removeVS16s","vs16RegExp","zeroWidthJoiner","rawEmoji","unicodeSurrogates","points","previous","getEmojiUnified","emojiCode","unified","parseEntities","tld","balanced","splittedLength","minutes","wrapMessageEntities","myEntities","totalEntities","getSearchType","getHistoryStorageKey","getSearchStorageFilterKey","hashtagType","reactionsPart","getFwdFromName","fwdFrom","getMainGroupedMessage","getUnreadReactions","isMentionUnread","canMessageHaveFactCheck","GLOBAL_HISTORY_PEER_ID","processAfter","AppMessagesManager","newMaxSeenId","updateMap","processDialog","isDialogDefined","topics","savedDialog","notifyPeerToHandle","muted","peerTypeNotifySettings","pendingData","isLocalThreadUpdate","threadKey","threadStorage","ignoreExisting","isExisting","firstSlice","inboxUnread","notifyPeer","msg_id","top_msg_id","modifyUnreadReactions","previousRecentReactions","isUnread","wasUnread","recentReaction","_b","oldMessage","newMessage","isTopMessage","dispatchEditEvent","newReactions","map","threadOrSavedId","stillUnreadCount","newUnreadMentionsCount","foundAffected","repliesKey","readMaxId","messageThreadId","setCount","threadKeyPart","topMsgId","availableMinId","threadKeys","virtual","historyUpdated","threadsStorages","affected","needDialog","canViewHistory","hasHistory","views","missingMessages","getMissingPromise","processMessage","notify_settings","extendedMedia","batch","toDispatch","previousReactions","previousResults","changedResults","previousReactionCount","_reactionCount","removedResults","midsMap","factCheck","filterFunc","msgs","isScheduled","drop","poll","Batcher","sendEntites","tempId","callbackName","finalize","inputMediaWebPage","schedule_date","process","MAX_LENGTH","isChannel","webPageSend","toggleError","sentRequestOptions","sendAs","apiPromise","mergedOptions","hadMessageBefore","attachType","apiFileName","fileType","isDocument","caption","attributes","isPhoto","strippedPhotoSize","mediaTempId","actionName","photoSize","videoAttribute","thumbs","sentDeferred","uploadingFileName","uploaded","uploadPromise","send","load","progress","percents","thumbUploadPromise","messagePromise","sendEntities","firstMessage","isSingleMessageForAlbum","preserveMediaTempId","multiMedia","isUploadCanceled","originalInputMedia","inputSingleMedia","inputs","spliced","contactPeerId","noOutgoingMessage","pollId","postAuthor","isBroadcast","user","replyWillBeInPeerId","replyToPeerId","replyToMsgId","replyToTopId","originalMessage","replies","isReply","originalFwdFrom","privateForwardName","stars","uploadFileName","chatHistoryStorage","offsetTopicId","offsetPeerId","useLimit","isSearch","processResult","maxSeenIdIncremented","hasPrepend","noIdsDialogs","setFolderId","folderDialogs","dialogsLength","slicedDialogs","requestOptions","config","overflowMids","newMids","newMessages","replyToMid","replyToMessageIdx","newReplyToMid","originalMainMessage","deletion","newMid","deleted","searchStorages","searchStorage","contextSearchStorages","last","_mid","lowerValue","higherValue","local","mirror","globalStorage","cantForward","cantDelete","useThrottled","reloadConversationsPeers","inputDialogPeers","currentState","just_clear","participantPeerId","affectedHistory","filterMessage","deletedMids","justClear","historyResult","needSingleMessages","ss","unpin","pm_oneside","grouped_id","minMid","groupedId","canBeOld","tempMid","overwriting","isMessage","mediaContext","replyToChannelId","msgId","savedFromPeerId","savedFromMid","unsupported","migrateFrom","migrateTo","originalDoc","messageKey","extendedMediaMedia","goodMessage","myPeerId","_message","limitType","max","dialogPeer","read","unread","fromChat","kind","goodMedias","messageReplyMarkup","lastReplyMarkup","onlyCached","_c","_d","_e","_f","canCache","historyType","migration","func","legacyResult","searchCounters","legacySearchCounters","searchCounter","_storage","serviceStartMid","maxMid","serviceStartMessage","newMaxId","isRecursion","serverMessageIds","affectedMessages","isReaction","isTopEnd","loadNextPromise","backLimit","minId","msgIds","historyKey","subscribe","newerMessage","olderMessage","isNewerGood","isOlderGood","_slice","searchHistory","readOutboxMaxId","maxOutId","replyMarkup","inputNotifyPeer","threadMessage","broadcastEventName","pendingMessage","muteUntil","mute","finalMessage","tempMessage","newPhoto","newDoc","newExtendedMedia","updatePhoto","photoId","newPhotoSize","oldCacheContext","updateDocument","skipReadParticipants","skipReactionsList","emptyMessageReactionsList","canViewMessageReadParticipants","readParticipantDates","messageReactionsList","filteredReadParticipants","user_id","readParticipantDate","appConfig","userFull","tabs","chatPeerIds","needRealOffsetIdOffset","getPossibleSlice","haveSlice","offsetIdOffset","offset_id_offset","isBottomEnd","topLoaded","bottomLoaded","isOffsetIncluded","serverOffsetId","searchSlicedArray","wasMaxId","requestPeerId","isRequestingLegacy","isRequestingGlobalCacheable","lastMessage","mergedResult","threadServiceMid","addSlice","toLoad","migratedResult","migratedResultCount","differentGroupedMessages","nextRate","isPublicHashtag","offsetMessage","commonOptions","searchOptions","searchGlobalOptions","getRepliesOptions","getSavedHistoryOptions","getHistoryOptions","requestPromises","getMessagesResult","toRequest","story","typing","shouldClearContexts","groupedStorage","unreadCount","getElementCallback","newMap","peerIdStr","sendAsPeerId","buttonId","requestedPeerIds","idMap","existingPromise","convertInputKeyToKey","inputKey","AppNotificationsManager","closestMuteUntil","peerNotifySettings","typeKey","isPeerType","notifySettings","respectType","n","peerKey","inputNotify","typeNotifySettings","inputPeerNotifySettings","platforms","getRestrictionReason","reasons","isRestricted","ignoreRestrictionReasons","isPeerRestricted","restrictionReasons","getPeerPhoto","AppPeersManager","migratedTo","ignorePeerId","AppPhotosManager","oldPhoto","inputUser","photosResult","photoIds","AppPollsManager","answer","correctAnswers","solution","solutionEntities","optionIds","votesList","newPoll","AppPrivacyManager","rules","privacyRules","inputRule","rule","privacyKey","getParticipantsCount","callbackifyAll","PEER_FULL_TTL","defaultGetChannelParticipantsOptions","AppProfileManager","_participants","typings","cancelAction","hasUser","fullChat","updated","hasChatPhoto","hasFullChatPhoto","usersUserFull","botInfo","referenceContext","modify","fullPeer","profile","exportedInvite","chatParticipant","chatParticipants","MANUALLY_FILTER","sendAsPeersResult","sendAsParticipants","sendAsPeer","channelParticipant","myParticipant","sendAsFiltered","fullChannel","global","processUserIds","ratingMap","cP","botsInlineTopPeers","chatMembers","searchResults","convertPeerIds","first_name","last_name","updateResult","strippedThumb","deletedList","channelParticipantsResult","channelParticipants","chatOnlinesResult","chatOnlines","peerSettings","messagesPeerSettings","__viteBrowserExternal","INPUT_ERROR","FINALIZE_ERROR","WINDOW","root","WEB_WORKER","NODE_JS","COMMON_JS","module","ARRAY_BUFFER","HEX_CHARS","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer8","isView","formatMessage","createOutputMethod","outputType","Md5","createMethod","nodeWrap","crypto","require$$0","Buffer","require$$1","bufferFrom","nodeMethod","createHmacOutputMethod","HmacMd5","createHmacMethod","sharedMemory","isString","bc","da","h0","h1","h2","h3","v3","base64Str","oKeyPad","iKeyPad","innerHash","exports","bigInt","undefined","BASE","LOG_BASE","MAX_INT","MAX_INT_ARR","smallToArray","DEFAULT_ALPHABET","supportsNativeBigInt","Integer","radix","alphabet","caseSensitive","parseValue","parseBase","BigInteger","sign","SmallInteger","NativeBigInt","isPrecise","arrayToSmall","trim","compareAbs","createArray","truncate","l_a","l_b","carry","base","sum","addAny","addSmall","subtract","a_l","b_l","borrow","difference","subtractAny","subtractSmall","small","multiplyLong","product","a_i","b_j","multiplySmall","shiftLeft","multiplyKaratsuba","ac","bd","abcd","useKaratsuba","l1","l2","abs","multiplySmallAndArray","square","a_j","divMod1","divisorMostSignificantDigit","lambda","remainder","divisor","quotientDigit","shift","divModSmall","divMod2","guess","xlen","highx","highy","check","quotient","divModAny","comparison","qSign","mod","mSign","_0","_1","_2","exp","isBasicPrime","millerRabinTest","nPrev","strict","isPrime","logN","iterations","rng","newT","newR","lastT","lastR","powersOfTwo","powers2Length","highestPower2","shift_isSmall","remQuo","bitwise","xSign","ySign","xRem","yRem","xDigit","yDigit","xDivMod","yDivMod","LOBMASK_I","LOBMASK_BI","roughLOB","integerLogarithm","min","gcd","lcm","randBetween","usedRNG","low","high","range","digits","toBase","restricted","top","digit","absBase","alphabetValues","isNegative","parseBaseFromArray","pow","stringify","neg","divmod","toBaseString","zeros","parseStringValue","split","decimalPlace","isValid","parseNumberValue","safeBigInt","ulongBigInt","longBigInt","bigIntFromBytes","bigIntToBytes","bigIntToSigned","bigIntToUnsigned","SAVE_DOC_KEYS","REFERENCE_CONTEXT","REFRESH_TAGS_INTERVAL","AppReactionsManager","availableReactions","tags","messagesAvailableReactions","unshiftQuickReaction","activeAvailableReactions","topReactions","quickReaction","chatAvailableReactions","filteredChatReactions","filteredChatAvailableReactions","messagesReactions","tag","peerAvailableReactions","lastSendingTimeKey","myPeer","unsetReactionCount","canSeeList","chosenReactions","unsetReactions","chosenReactionIdx","chosenReactionCount","chosenReactionsLength","reactionCountIdx","peerReaction","id1","id2","promiseKey","editMessageUpdateIdx","editMessageUpdate","messagesStickerSet","savedReactionsTags","messagesSavedReactionTags","availableEffects","availableEffect","effect","effects","getTagLongId","md5","insert","tag1","tag2","tag1LongId","tag2LongId","fixBase64String","toUrl","toArray","CACHE_TIME","LOCAL_IDS","LOCAL_IDS_SET","AppStickersManager","allStickers","sets","stickerSet","stickers","justPreload","cachedSet","saveById","animations","sound","bytesStr","unsave","attached","_doc","docEmoticon","isAnimation","preloadEmojiPromise","isPremiumEffect","isEmojis","shouldRemove","newSet","needSave","isLottie","isVideo","covered","favedStickers","unfave","excludeFeatured","foundSaved","includeOurStickers","includeServerStickers","excludePremiumEffectStickers","emoticonArray","cacheKey","messagesStickers","installedSets","recentStickers","foundStickers","sticker","cachedStickersAnimated","cachedStickersStatic","iteratePacks","packs","masks","cleanUsername","canSendToUser","SEARCH_OPTIONS","AppUsersManager","timestampNow","users","recentSearch","fromServer","contact","resolvedPeer","phone","includeSaved","sortBy","contactListPromise","_contactsList","contactsList","userId1","userId2","sortName1","sortName2","status1","rating1","myUserId","block","blockMyStoriesFrom","apiUsers","save","cleanedUsernames","searchUsername","oldPeer","userStatus","oldUser","fullName","changedPremium","wasContact","newContact","expires","eventTimestamp","onlineTimeFor","contacts","inputContacts","importedContactsResult","importedContact","contactsBlocked","lat","long","accuracy_radius","background","self_expires","geo_point","isContact","curIsContact","offline","addPhonePrivacyException","emojiStatus","emojiStatuses","isPremiumRequired","photoTypeSet","AppWebPagesManager","apiWebPage","oldWebPage","isUpdated","isMediaUpdated","siteName","shortTitle","pendingSet","messagesWebPage","blobSafeMimeType","blobConstruct","blobParts","safeMimeType","MemoryWriter","saveFileCallback","endOffset","newBytes","saveToStorage","parts","_CacheStorageController","dbName","rejected","fileSize","CacheStorageController","readBlobAs","reader","readBlobAsArrayBuffer","fixFirefoxSvg","svgIndex","__","width","height","getPhotoDownloadOptions","getWebFileDownloadOptions","getWebDocumentDownloadOptions","isWebDocument","isWebFileLocation","getDownloadFileNameFromOptions","getDownloadMediaDetails","readBlobAsUint8Array","fileNameRFC","DownloadWriter","serviceMessagePort","downloadId","DownloadStorage","headers","clamp","MAX_DOWNLOAD_FILE_PART_SIZE","MAX_UPLOAD_FILE_PART_SIZE","MIN_PART_SIZE","AVG_PART_SIZE","REGULAR_DOWNLOAD_DELTA","PREMIUM_DOWNLOAD_DELTA","ApiFileManager","activeDelta","priority","downloadPull","downloadLimit","checkCancel","arrayBuffer","extension","floodMaxTimeout","isUpload","maxParts","maxPartSize","originalMimeType","convertMethod","cacheFileName","cacheStorage","downloadStorage","errorHandler","prepared","isWebFile","isLocalWebFile","limitPart","getFile","cachePrepared","downloadPrepared","possibleSize","getErrorsCount","attach","_errorHandler","downloadFileName","writer","maxRequests","requestPart","dispatchProgress","done","throttledDispatchProgress","_writePromise","_offset","superpuper","writeDeferred","writePromise","requestPerf","requestTime","byteLength","isFinal","writeQueuePerf","writeQueueTime","processedResult","isBigFile","partSize","totalParts","fileId","resultInputFile","resolved","generator","_part","doneParts","it","LocalStorage","lastError","stringified","_LocalStorageController","LocalStorageController","sessionStorage","ApiManagerMethods","queryJSON","hash","newResult","processError","oldPromise","getNewPromise","helpAppConfig","themeParams","toggleStorages","PREMIUM_FILE_NETWORKERS_COUNT","REGULAR_FILE_NETWORKERS_COUNT","ApiManager","REFRESH_CONFIG_INTERVAL","networker","connections","dcs","oldTransportType","oldObject","oldGetKey","newGetKey","info","baseDcId","userAuth","wasDcId","storageKeys","storageResult","logoutPromises","networkers","maxNetworkers","foundRequests","foundNetworker","foundIndex","activeRequests","isOnline","getKey","ak","authKeyHex","serverSaltHex","authKey","authKeyId","CryptoWorker","serverSalt","_error","newTransportType","oldTransport","canRelease","afterMessageId","prepareTempMessageId","startTime","cachedNetworker","rejectPromise","performRequest","exportResolve","exportReject","exportedAuth","newDcId","waitTime","PeersStorage","generateEmptyThumb","getStickerThumbKey","toneIndex","getThumbKey","thumbFullSize","ThumbsStorage","downloaded","Schema","this","h","w","g","E","R","A","Z","S","T","O","U","D","I","B","N","C","z","F","L","M","H","K","P","Y","G","X","W","J","Q","V","$","ee","te","ie","ne","ae","re","oe","se","le","de","fe","ce","he","ue","we","be","me","ke","ge","gzipUncompress","toString","pako","intToUint","ulongFromInts","boolFalse","boolTrue","vector","gzipPacked","sliceMethod","TLSerialization","resultBuffer","resultInt32","typed","resultArray","needBytes","previousBuffer","previousArray","field","iHigh","iLow","sLong","_bigInt","intView","doubleView","sUTF8","methodName","methodData","itemType","schema","predicate","isBare","constructorData","flagsHandler","param","condType","fieldBit","isFlagHandler","paramName","TLDeserialization","ulong","fallback","checkType","constructorCmp","compressed","uncompressed","schemaFallback","int1","int2","overrideKey","isCond","jsonValue","objectValues","objectValue","addPadding","blockSize","zeroes","blockSizeAsTotalLength","needPadding","padding","longToBytes","bigIntBytes","convertToUint8Array","sortLongsArray","HTTP_POLLING_NEEDED_FOR_FILES","CHECK_CONNECTION_MAX_PERIOD","DRAIN_TIMEOUT","delays","RESEND_OPTIONS","HTTP_WAIT_OPTIONS","invokeAfterMsgConstructor","networkerTempId","MTPNetworker","networkerFactory","timeManager","pingMaxTime","lastPingTime","disconnectDelay","timeoutTime","pingId","rejectTimeout","onResolved","elapsedTime","onTimeout","isClean","serializer","pingMessage","sentMessageId","sentMessage","innerSentMessageId","innerSentMessage","notContentRelated","seqNo","invokeWithLayer","initConnection","maxWait","delay","noResponseMsgs","shouldResolve","sentMessages","scheduleRequestIfOnline","willChange","innerMsgId","dataWithPadding","msgKeyLargePlain","msgKeyLarge","msgKey","sha2aText","sha2bText","aesKey","aesIv","sha2a","sha2b","lengthOverflow","hasApiCall","hasHttpWait","ackMsgIds","pendingResendReqLength","outMessage","messagesByteLen","messageByteLength","container","innerMessages","keyIv","encryptedData","dataBuffer","paddingLength","encryptedResult","requestData","baseError","packetTime","responseBuffer","deserializer","calcMsgKey","sessionId","totalLength","messageBodyLength","messageBody","newServerSalt","nextReq","resendRequestMessage","notEmpty","rawError","msg","serverTime","innerMessage","changedTimeOffset","badMessage","lastResend","pendingResend","badMsgId","NetworkerFactory","stoppedNetworkers","RSAKeysManager","keyParsed","RSAPublicKey","cryptoWorker","fingerprintBytes","fingerprints","fingerprintHex","foundKey","rsaKeysManager","bytesXor","Authorizer","requestArray","requestLength","headerArray","errorCode","auth_key_id","msg_len","publicKey","pAndQ","p_q_inner_data_dc","pQInnerDataSerialization","dataPadReversed","keyAesEncrypted","tempKey","dataWithHash","aesEncrypted","keyAesEncryptedBigInt","publicKeyModulusBigInt","req_DH_params","requestBytes","newNonceHash","encryptedAnswer","answerWithHash","answerWithPadding","dhPrime","gA","dhPrimeHex","gABigInt","dhPrimeBigInt","twoPow","gBytes","gB","authKeyHash","authKeyAux","newNonceHash1","newNonceHash2","newNonceHash3","_try","TimeManager","timeTicks","timeSec","timeMSec","random","localTime","newTimeOffset","changed","AppWebDocsManager","AppPaymentsManager","starsStatus","transactionPeer","invoice","paymentForm","formId","requestedInfoId","shippingOptionId","credentials","tipAmount","premiumGiftCodeOptions","helpPremiumPromo","checkedGiftCode","purpose","inbound","getAttachMenuBotIcon","attachMenuBot","icon","BOTS_SUPPORTED","AppAttachMenuBotsManager","menuBotIcon","attachMenuBots","botApp","attachMenuBotsBot","fromBotMenu","fromSwitchWebView","fromSideMenu","isSimpleWebView","app","writeAllowed","platform","buttonText","shortName","messagesBotApp","customMethod","AppSeamlessLoginManager","urlAuthResult","webAuthorizations","AppThemesManager","inputWallPaper","accountThemes","theme","themeSettings","oldAccountThemes","accountWallpapers","wallPapers","AppUsernamesManager","active","AppChatInvitesManager","chatInvite","expireDate","usageLimit","requestNeeded","revoked","adminId","exportedChatInvites","link","exportedChatInvite","chatAdminsWithInvites","offsetUserId","requested","offsetUser","chatInviteImporters","StoriesCacheType","insertStory","storyItem","onlyId","cacheType","pinnedToTop","valueToInsert","_storyItem","storyId","AppStoriesManager","userStories","hadStoryBefore","isSubscribed","hasStories","peerStories","position","lastStoryId","lastStory","unreadType","isMe","isChangelog","boolean","previousPosition","previousList","list","create","oldStoryItem","oldIsSkipped","isSkipped","mediaArea","pinnedToTopIndex","modifiedPinnedToTop","modifiedPinned","modifiedArchive","preserveFlags","storyItems","indexesToDelete","newStoryItems","newPeer","wasStories","newStories","wasStoriesHidden","newStoriesHidden","storiesStories","segments","lastSegment","storyIds","pin","oldPins","newPins","storiesAllStories","storiesPeerStories","justContacts","storiesStoryViews","storyView","newSentReaction","unsetPreviousReaction","ignoreNoSubscription","right","isMyStory","canEdit","canPost","canDelete","cantPin","AppBotsManager","AppBoostsManager","boost","boosts","gifts","boostsList","myBoosts","slots","AppStatisticsManager","statsPublicForwards","publicForward","stats","postInteractionCounters","token","AppBusinessManager","intro","MAX_MESSAGES_PER_REQUEST","AppTranslationsManager","textWithEntities","getParams","noCaching","doingEntries","doingMap","doingKeys","tried","disabled","AppGifsManager","gifs","gifBotPeerId","next_offset","createManagers","appStoragesManager","manager","CAN_USE_SERVICE_WORKER","AppManagersManager","originalUrl","newURLs","appManagersManager$1","listenMessagePort","messagePort","onConnect","onDisconnect","attachPort","listenPort","sendPort","pushedKeys","oldVersion","isFirst"],"mappings":"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AK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,IAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,EAAK,KAAM,IAAK,IAAK,IAAK,KAAM,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,KAAM,EAAK,KAAM,EAAK,KAAM,EAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,EAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,KAAM,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,IAAK,KAAM,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,KAAM,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,KAAM,EAAK,IAAK,IAAK,KAAM,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EA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QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,mBAAmB,MAAO,kBAAkB,MAAO,QAAQ,MAAO,kBAAkB,MAAO,4CAA4C,MAAO,4CAA4C,MAAO,4CAA4C,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,mBAAmB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,mBAAmB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,8BAA8B,KAAM,mBAAmB,KAAM,8BAA8B,KAAM,8BAA8B,KAAM,mBAAmB,KAAM,8BAA8B,KAAM,yCAAyC,KAAM,8BAA8B,KAAM,yCAAyC,KAAM,yCAAyC,KAAM,8BAA8B,KAAM,yCAAyC,KAAM,8BAA8B,KAAM,yCAAyC,KAAM,yCAAyC,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,6BAA6B,KAAM,wCAAwC,KAAM,QAAQ,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,8BAA8B,KAAM,mBAAmB,KAAM,8BAA8B,KAAM,8BAA8B,KAAM,mBAAmB,KAAM,8BAA8B,KAAM,yCAAyC,KAAM,8BAA8B,KAAM,yCAAyC,KAAM,yCAAyC,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,6BAA6B,KAAM,6BAA6B,KAAM,wCAAwC,KAAM,wCAAwC,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,GAAI,QAAQ,GAAI,QAAQ,GAAI,QAAQ,GAAI,QAAQ,GAAI,QAAQ,GAAI,QAAQ,GAAI,QAAQ,IAAK,QAAQ,KAAM,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,KAAM,QAAQ,KAAM,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,mBAAmB,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,mBAAmB,IAAK,QAAQ,IAAK,mBAAmB,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,IAAK,QAAQ,GAAI,QAAQ,IAAK,QAAQ,IAAK,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,KAAM,QAAQ,IAAK,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,IAAK,QAAQ,KAAM,QAAQ,IAAK,QAAQ,GAAI,QAAQ,IAAK,QAAQ,IAAK,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,KAAM,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,KAAM,QAAQ,IAAK,QAAQ,IAAK,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,IAAK,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,8BAA8B,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,KAAM,OAAO,KAAM,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,KAAM,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,IAAK,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,KAAM,OAAO,KAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,MAAO,OAAO,KAAM,OAAO,MAAO,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,MAAO,iBAAiB,KAAM,iBAAiB,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,kBAAkB,KAAM,kBAAkB,KAAM,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,KAAM,OAAO,MAAO,OAAO,MAAO,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,E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","x_google_ignoreList":[178,179,221]}