diff --git a/Telegram/Telegram-iOS/en.lproj/Localizable.strings b/Telegram/Telegram-iOS/en.lproj/Localizable.strings index 6ed4fae02d..2c194093c3 100644 --- a/Telegram/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram/Telegram-iOS/en.lproj/Localizable.strings @@ -568,6 +568,7 @@ "ConversationProfile.LeaveDeleteAndExit" = "Delete and Exit"; "Group.LeaveGroup" = "Leave Group"; +"Group.DeleteGroup" = "Delete Group"; "Conversation.Megabytes" = "%.1f MB"; "Conversation.Kilobytes" = "%d KB"; @@ -4272,6 +4273,8 @@ Unused sets are archived when you add more."; "ChatList.DeleteForEveryoneConfirmationTitle" = "Warning!"; "ChatList.DeleteForEveryoneConfirmationText" = "This will **delete all messages** in this chat for **both participants**."; "ChatList.DeleteForEveryoneConfirmationAction" = "Delete All"; +"ChatList.DeleteForAllMembers" = "Delete for all members"; +"ChatList.DeleteForAllMembersConfirmationText" = "This will **delete all messages** in this chat for **all participants**."; "ChatList.DeleteSavedMessagesConfirmationTitle" = "Warning!"; "ChatList.DeleteSavedMessagesConfirmationText" = "This will **delete all messages** in this chat."; diff --git a/submodules/AccountContext/Sources/ContactMultiselectionController.swift b/submodules/AccountContext/Sources/ContactMultiselectionController.swift index 14238d48fd..efe538e005 100644 --- a/submodules/AccountContext/Sources/ContactMultiselectionController.swift +++ b/submodules/AccountContext/Sources/ContactMultiselectionController.swift @@ -6,14 +6,21 @@ import Postbox import TelegramCore public struct ChatListNodeAdditionalCategory { + public enum Appearance { + case option + case action + } + public var id: Int public var icon: UIImage? public var title: String + public var appearance: Appearance - public init(id: Int, icon: UIImage?, title: String) { + public init(id: Int, icon: UIImage?, title: String, appearance: Appearance = .option) { self.id = id self.icon = icon self.title = title + self.appearance = appearance } } diff --git a/submodules/AccountContext/Sources/PeerSelectionController.swift b/submodules/AccountContext/Sources/PeerSelectionController.swift index 5037f67c93..6ff389482b 100644 --- a/submodules/AccountContext/Sources/PeerSelectionController.swift +++ b/submodules/AccountContext/Sources/PeerSelectionController.swift @@ -35,17 +35,20 @@ public final class PeerSelectionControllerParams { public let hasContactSelector: Bool public let title: String? public let attemptSelection: ((Peer) -> Void)? + public let createNewGroup: (() -> Void)? - public init(context: AccountContext, filter: ChatListNodePeersFilter = [.onlyWriteable], hasContactSelector: Bool = true, title: String? = nil, attemptSelection: ((Peer) -> Void)? = nil) { + public init(context: AccountContext, filter: ChatListNodePeersFilter = [.onlyWriteable], hasContactSelector: Bool = true, title: String? = nil, attemptSelection: ((Peer) -> Void)? = nil, createNewGroup: (() -> Void)? = nil) { self.context = context self.filter = filter self.hasContactSelector = hasContactSelector self.title = title self.attemptSelection = attemptSelection + self.createNewGroup = createNewGroup } } public protocol PeerSelectionController: ViewController { - var peerSelected: ((PeerId) -> Void)? { get set } + var peerSelected: ((Peer) -> Void)? { get set } var inProgress: Bool { get set } + var customDismiss: (() -> Void)? { get set } } diff --git a/submodules/AvatarNode/Sources/AvatarNode.swift b/submodules/AvatarNode/Sources/AvatarNode.swift index 9ce01b26a9..c874fa9ea9 100644 --- a/submodules/AvatarNode/Sources/AvatarNode.swift +++ b/submodules/AvatarNode/Sources/AvatarNode.swift @@ -13,6 +13,7 @@ import AccountContext import Emoji private let deletedIcon = UIImage(bundleImageName: "Avatar/DeletedIcon")?.precomposed() +private let phoneIcon = generateTintedImage(image: UIImage(bundleImageName: "Avatar/PhoneIcon"), color: .white) private let savedMessagesIcon = generateTintedImage(image: UIImage(bundleImageName: "Avatar/SavedMessagesIcon"), color: .white) private let archivedChatsIcon = UIImage(bundleImageName: "Avatar/ArchiveAvatarIcon")?.precomposed() private let repliesIcon = generateTintedImage(image: UIImage(bundleImageName: "Avatar/RepliesMessagesIcon"), color: .white) @@ -79,10 +80,14 @@ private let savedMessagesColors: NSArray = [ UIColor(rgb: 0x2a9ef1).cgColor, UIColor(rgb: 0x72d5fd).cgColor ] +public enum AvatarNodeExplicitIcon { + case phone +} + private enum AvatarNodeState: Equatable { case empty case peerAvatar(PeerId, [String], TelegramMediaImageRepresentation?) - case custom(letter: [String], explicitColorIndex: Int?) + case custom(letter: [String], explicitColorIndex: Int?, explicitIcon: AvatarNodeExplicitIcon?) } private func ==(lhs: AvatarNodeState, rhs: AvatarNodeState) -> Bool { @@ -91,8 +96,8 @@ private func ==(lhs: AvatarNodeState, rhs: AvatarNodeState) -> Bool { return true case let (.peerAvatar(lhsPeerId, lhsLetters, lhsPhotoRepresentations), .peerAvatar(rhsPeerId, rhsLetters, rhsPhotoRepresentations)): return lhsPeerId == rhsPeerId && lhsLetters == rhsLetters && lhsPhotoRepresentations == rhsPhotoRepresentations - case let (.custom(lhsLetters, lhsIndex), .custom(rhsLetters, rhsIndex)): - return lhsLetters == rhsLetters && lhsIndex == rhsIndex + case let (.custom(lhsLetters, lhsIndex, lhsIcon), .custom(rhsLetters, rhsIndex, rhsIcon)): + return lhsLetters == rhsLetters && lhsIndex == rhsIndex && lhsIcon == rhsIcon default: return false } @@ -105,6 +110,7 @@ private enum AvatarNodeIcon: Equatable { case archivedChatsIcon(hiddenByDefault: Bool) case editAvatarIcon case deletedIcon + case phoneIcon } public enum AvatarNodeImageOverride: Equatable { @@ -115,6 +121,7 @@ public enum AvatarNodeImageOverride: Equatable { case archivedChatsIcon(hiddenByDefault: Bool) case editAvatarIcon case deletedIcon + case phoneIcon } public enum AvatarNodeColorOverride { @@ -323,6 +330,9 @@ public final class AvatarNode: ASDisplayNode { case .deletedIcon: representation = nil icon = .deletedIcon + case .phoneIcon: + representation = nil + icon = .phoneIcon } } else if peer?.restrictionText(platform: "ios", contentSettings: context.currentContentSettings.with { $0 }) == nil { representation = peer?.smallProfileImage @@ -383,7 +393,7 @@ public final class AvatarNode: ASDisplayNode { } } - public func setCustomLetters(_ letters: [String], explicitColor: AvatarNodeColorOverride? = nil) { + public func setCustomLetters(_ letters: [String], explicitColor: AvatarNodeColorOverride? = nil, icon: AvatarNodeExplicitIcon? = nil) { var explicitIndex: Int? if let explicitColor = explicitColor { switch explicitColor { @@ -391,11 +401,16 @@ public final class AvatarNode: ASDisplayNode { explicitIndex = 5 } } - let updatedState: AvatarNodeState = .custom(letter: letters, explicitColorIndex: explicitIndex) + let updatedState: AvatarNodeState = .custom(letter: letters, explicitColorIndex: explicitIndex, explicitIcon: icon) if updatedState != self.state { self.state = updatedState - let parameters = AvatarNodeParameters(theme: nil, accountPeerId: nil, peerId: nil, letters: letters, font: self.font, icon: .none, explicitColorIndex: explicitIndex, hasImage: false, clipStyle: .round) + let parameters: AvatarNodeParameters + if let icon = icon, case .phone = icon { + parameters = AvatarNodeParameters(theme: nil, accountPeerId: nil, peerId: nil, letters: [], font: self.font, icon: .phoneIcon, explicitColorIndex: explicitIndex, hasImage: false, clipStyle: .round) + } else { + parameters = AvatarNodeParameters(theme: nil, accountPeerId: nil, peerId: nil, letters: letters, font: self.font, icon: .none, explicitColorIndex: explicitIndex, hasImage: false, clipStyle: .round) + } self.displaySuspended = true self.contents = nil @@ -456,6 +471,8 @@ public final class AvatarNode: ASDisplayNode { if let parameters = parameters as? AvatarNodeParameters, parameters.icon != .none { if case .deletedIcon = parameters.icon { colorsArray = grayscaleColors + } else if case .phoneIcon = parameters.icon { + colorsArray = grayscaleColors } else if case .savedMessagesIcon = parameters.icon { colorsArray = savedMessagesColors } else if case .repliesIcon = parameters.icon { @@ -505,6 +522,15 @@ public final class AvatarNode: ASDisplayNode { if let deletedIcon = deletedIcon { context.draw(deletedIcon.cgImage!, in: CGRect(origin: CGPoint(x: floor((bounds.size.width - deletedIcon.size.width) / 2.0), y: floor((bounds.size.height - deletedIcon.size.height) / 2.0)), size: deletedIcon.size)) } + } else if case .phoneIcon = parameters.icon { + let factor: CGFloat = 1.0 + context.translateBy(x: bounds.size.width / 2.0, y: bounds.size.height / 2.0) + context.scaleBy(x: factor, y: -factor) + context.translateBy(x: -bounds.size.width / 2.0, y: -bounds.size.height / 2.0) + + if let phoneIcon = phoneIcon { + context.draw(phoneIcon.cgImage!, in: CGRect(origin: CGPoint(x: floor((bounds.size.width - phoneIcon.size.width) / 2.0), y: floor((bounds.size.height - phoneIcon.size.height) / 2.0)), size: phoneIcon.size)) + } } else if case .savedMessagesIcon = parameters.icon { let factor = bounds.size.width / 60.0 context.translateBy(x: bounds.size.width / 2.0, y: bounds.size.height / 2.0) diff --git a/submodules/CallListUI/Sources/CallListControllerNode.swift b/submodules/CallListUI/Sources/CallListControllerNode.swift index 9814555a54..0ba061d201 100644 --- a/submodules/CallListUI/Sources/CallListControllerNode.swift +++ b/submodules/CallListUI/Sources/CallListControllerNode.swift @@ -120,8 +120,8 @@ private func mappedInsertEntries(context: AccountContext, presentationData: Item }), directionHint: entry.directionHint) case let .displayTabInfo(_, text): return ListViewInsertItem(index: entry.index, previousIndex: entry.previousIndex, item: ItemListTextItem(presentationData: presentationData, text: .plain(text), sectionId: 0), directionHint: entry.directionHint) - case let .groupCall(peer, editing, isActive): - return ListViewInsertItem(index: entry.index, previousIndex: entry.previousIndex, item: CallListGroupCallItem(presentationData: presentationData, context: context, style: showSettings ? .blocks : .plain, peer: peer, isActive: isActive, editing: editing, interaction: nodeInteraction), directionHint: entry.directionHint) + case let .groupCall(peer, _, isActive): + return ListViewInsertItem(index: entry.index, previousIndex: entry.previousIndex, item: CallListGroupCallItem(presentationData: presentationData, context: context, style: showSettings ? .blocks : .plain, peer: peer, isActive: isActive, editing: false, interaction: nodeInteraction), directionHint: entry.directionHint) case let .messageEntry(topMessage, messages, _, _, dateTimeFormat, editing, hasActiveRevealControls, displayHeader): return ListViewInsertItem(index: entry.index, previousIndex: entry.previousIndex, item: CallListCallItem(presentationData: presentationData, dateTimeFormat: dateTimeFormat, context: context, style: showSettings ? .blocks : .plain, topMessage: topMessage, messages: messages, editing: editing, revealed: hasActiveRevealControls, displayHeader: displayHeader, interaction: nodeInteraction), directionHint: entry.directionHint) case let .holeEntry(_, theme): @@ -139,8 +139,8 @@ private func mappedUpdateEntries(context: AccountContext, presentationData: Item }), directionHint: entry.directionHint) case let .displayTabInfo(_, text): return ListViewUpdateItem(index: entry.index, previousIndex: entry.previousIndex, item: ItemListTextItem(presentationData: presentationData, text: .plain(text), sectionId: 0), directionHint: entry.directionHint) - case let .groupCall(peer, editing, isActive): - return ListViewUpdateItem(index: entry.index, previousIndex: entry.previousIndex, item: CallListGroupCallItem(presentationData: presentationData, context: context, style: showSettings ? .blocks : .plain, peer: peer, isActive: isActive, editing: editing, interaction: nodeInteraction), directionHint: entry.directionHint) + case let .groupCall(peer, _, isActive): + return ListViewUpdateItem(index: entry.index, previousIndex: entry.previousIndex, item: CallListGroupCallItem(presentationData: presentationData, context: context, style: showSettings ? .blocks : .plain, peer: peer, isActive: isActive, editing: false, interaction: nodeInteraction), directionHint: entry.directionHint) case let .messageEntry(topMessage, messages, _, _, dateTimeFormat, editing, hasActiveRevealControls, displayHeader): return ListViewUpdateItem(index: entry.index, previousIndex: entry.previousIndex, item: CallListCallItem(presentationData: presentationData, dateTimeFormat: dateTimeFormat, context: context, style: showSettings ? .blocks : .plain, topMessage: topMessage, messages: messages, editing: editing, revealed: hasActiveRevealControls, displayHeader: displayHeader, interaction: nodeInteraction), directionHint: entry.directionHint) case let .holeEntry(_, theme): @@ -263,9 +263,49 @@ final class CallListControllerNode: ASDisplayNode { }, openInfo: { [weak self] peerId, messages in self?.openInfo(peerId, messages) }, delete: { [weak self] messageIds in - if let strongSelf = self { - let _ = deleteMessagesInteractively(account: strongSelf.context.account, messageIds: messageIds, type: .forLocalPeer).start() + guard let strongSelf = self, let peerId = messageIds.first?.peerId else { + return } + + let _ = (strongSelf.context.account.postbox.transaction { transaction -> Peer? in + return transaction.getPeer(peerId) + } + |> deliverOnMainQueue).start(next: { peer in + guard let strongSelf = self, let peer = peer else { + return + } + + let actionSheet = ActionSheetController(presentationData: strongSelf.presentationData) + var items: [ActionSheetItem] = [] + + items.append(ActionSheetButtonItem(title: strongSelf.presentationData.strings.Conversation_DeleteMessagesFor(peer.displayTitle(strings: strongSelf.presentationData.strings, displayOrder: strongSelf.presentationData.nameDisplayOrder)).0, color: .destructive, action: { [weak actionSheet] in + actionSheet?.dismissAnimated() + guard let strongSelf = self else { + return + } + let _ = deleteMessagesInteractively(account: strongSelf.context.account, messageIds: messageIds, type: .forEveryone).start() + })) + + items.append(ActionSheetButtonItem(title: strongSelf.presentationData.strings.Conversation_DeleteMessagesForMe, color: .destructive, action: { [weak actionSheet] in + actionSheet?.dismissAnimated() + + guard let strongSelf = self else { + return + } + + let _ = deleteMessagesInteractively(account: strongSelf.context.account, messageIds: messageIds, type: .forLocalPeer).start() + })) + + actionSheet.setItemGroups([ + ActionSheetItemGroup(items: items), + ActionSheetItemGroup(items: [ + ActionSheetButtonItem(title: strongSelf.presentationData.strings.Common_Cancel, color: .accent, font: .bold, action: { [weak actionSheet] in + actionSheet?.dismissAnimated() + }) + ]) + ]) + strongSelf.controller?.present(actionSheet, in: .window(.root)) + }) }, updateShowCallsTab: { [weak self] value in if let strongSelf = self { let _ = updateCallListSettingsInteractively(accountManager: strongSelf.context.sharedContext.accountManager, { diff --git a/submodules/CallListUI/Sources/CallListGroupCallItem.swift b/submodules/CallListUI/Sources/CallListGroupCallItem.swift index 8a694a51ae..88c0d17abb 100644 --- a/submodules/CallListUI/Sources/CallListGroupCallItem.swift +++ b/submodules/CallListUI/Sources/CallListGroupCallItem.swift @@ -432,7 +432,7 @@ class CallListGroupCallItemNode: ItemListRevealOptionsItemNode { transition.updateFrameAdditive(node: strongSelf.joinBackgroundNode, frame: CGRect(origin: CGPoint(), size: joinButtonFrame.size)) let _ = joinTitleApply() - transition.updateFrameAdditive(node: strongSelf.joinTitleNode, frame: CGRect(origin: CGPoint(x: floor((joinButtonSize.width - joinTitleLayout.size.width) / 2.0), y: floor((joinButtonSize.height - joinTitleLayout.size.height) / 2.0) + 1.0), size: titleLayout.size)) + transition.updateFrameAdditive(node: strongSelf.joinTitleNode, frame: CGRect(origin: CGPoint(x: floor((joinButtonSize.width - joinTitleLayout.size.width) / 2.0), y: floor((joinButtonSize.height - joinTitleLayout.size.height) / 2.0) + 1.0), size: joinTitleLayout.size)) let topHighlightInset: CGFloat = (first || !nodeLayout.insets.top.isZero) ? 0.0 : separatorHeight strongSelf.backgroundNode.frame = CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: nodeLayout.contentSize.width, height: nodeLayout.contentSize.height)) diff --git a/submodules/ChatListUI/Sources/ChatListAdditionalCategoryItem.swift b/submodules/ChatListUI/Sources/ChatListAdditionalCategoryItem.swift index a41331f8ba..5fa01d75d7 100644 --- a/submodules/ChatListUI/Sources/ChatListAdditionalCategoryItem.swift +++ b/submodules/ChatListUI/Sources/ChatListAdditionalCategoryItem.swift @@ -16,6 +16,7 @@ public class ChatListAdditionalCategoryItem: ItemListItem, ListViewItemWithHeade let context: AccountContext let title: String let image: UIImage? + let appearance: ChatListNodeAdditionalCategory.Appearance let isSelected: Bool let action: () -> Void @@ -29,6 +30,7 @@ public class ChatListAdditionalCategoryItem: ItemListItem, ListViewItemWithHeade context: AccountContext, title: String, image: UIImage?, + appearance: ChatListNodeAdditionalCategory.Appearance, isSelected: Bool, action: @escaping () -> Void ) { @@ -37,10 +39,16 @@ public class ChatListAdditionalCategoryItem: ItemListItem, ListViewItemWithHeade self.context = context self.title = title self.image = image + self.appearance = appearance self.isSelected = isSelected self.action = action - self.header = ChatListSearchItemHeader(type: .chatTypes, theme: presentationData.theme, strings: presentationData.strings, actionTitle: nil, action: nil) + switch appearance { + case .option: + self.header = ChatListSearchItemHeader(type: .chatTypes, theme: presentationData.theme, strings: presentationData.strings, actionTitle: nil, action: nil) + case .action: + self.header = nil + } } public func nodeConfiguredForParams(async: @escaping (@escaping () -> Void) -> Void, params: ListViewItemLayoutParams, synchronousLoads: Bool, previousItem: ListViewItem?, nextItem: ListViewItem?, completion: @escaping (ListViewItemNode, @escaping () -> (Signal?, (ListViewItemApply) -> Void)) -> Void) { @@ -81,6 +89,9 @@ public class ChatListAdditionalCategoryItem: ItemListItem, ListViewItemWithHeade } public func selected(listView: ListView) { + if case .action = self.appearance { + listView.clearHighlightAnimated(true) + } self.action() } @@ -107,6 +118,9 @@ public class ChatListAdditionalCategoryItem: ItemListItem, ListViewItemWithHeade } else { last = true } + } else if let _ = nextItem as? ChatListAdditionalCategoryItem { + } else { + last = true } } else { last = true @@ -172,16 +186,37 @@ public class ChatListAdditionalCategoryItemNode: ItemListRevealOptionsItemNode { } override public func setHighlighted(_ highlighted: Bool, at point: CGPoint, animated: Bool) { - return - - /*super.setHighlighted(highlighted, at: point, animated: animated) - - self.isHighlighted = highlighted - self.updateIsHighlighted(transition: (animated && !highlighted) ? .animated(duration: 0.3, curve: .easeInOut) : .immediate)*/ + if let item = self.item, case .action = item.appearance { + super.setHighlighted(highlighted, at: point, animated: animated) + + self.isHighlighted = highlighted + self.updateIsHighlighted(transition: (animated && !highlighted) ? .animated(duration: 0.3, curve: .easeInOut) : .immediate) + } } public func updateIsHighlighted(transition: ContainedViewLayoutTransition) { + let reallyHighlighted = self.isHighlighted + let highlightProgress: CGFloat = 1.0 + + if reallyHighlighted { + if self.highlightedBackgroundNode.supernode == nil { + self.insertSubnode(self.highlightedBackgroundNode, aboveSubnode: self.separatorNode) + self.highlightedBackgroundNode.alpha = 0.0 + } + self.highlightedBackgroundNode.layer.removeAllAnimations() + transition.updateAlpha(layer: self.highlightedBackgroundNode.layer, alpha: highlightProgress) + } else { + if self.highlightedBackgroundNode.supernode != nil { + transition.updateAlpha(layer: self.highlightedBackgroundNode.layer, alpha: 1.0 - highlightProgress, completion: { [weak self] completed in + if let strongSelf = self { + if completed { + strongSelf.highlightedBackgroundNode.removeFromSupernode() + } + } + }) + } + } } public func asyncLayout() -> (_ item: ChatListAdditionalCategoryItem, _ params: ListViewItemLayoutParams, _ first: Bool, _ last: Bool, _ firstWithHeader: Bool, _ neighbors: ItemListNeighbors) -> (ListViewItemNodeLayout, () -> (Signal?, (Bool, Bool) -> Void)) { @@ -206,20 +241,29 @@ public class ChatListAdditionalCategoryItemNode: ItemListRevealOptionsItemNode { let updatedSelectionNode: CheckNode? let isSelected = item.isSelected - rightInset += 28.0 - - let selectionNode: CheckNode - if let current = currentSelectionNode { - selectionNode = current - updatedSelectionNode = selectionNode + if case .option = item.appearance { + rightInset += 28.0 + + let selectionNode: CheckNode + if let current = currentSelectionNode { + selectionNode = current + updatedSelectionNode = selectionNode + } else { + selectionNode = CheckNode(strokeColor: item.presentationData.theme.list.itemCheckColors.strokeColor, fillColor: item.presentationData.theme.list.itemCheckColors.fillColor, foregroundColor: item.presentationData.theme.list.itemCheckColors.foregroundColor, style: .plain) + selectionNode.isUserInteractionEnabled = false + updatedSelectionNode = selectionNode + } } else { - selectionNode = CheckNode(strokeColor: item.presentationData.theme.list.itemCheckColors.strokeColor, fillColor: item.presentationData.theme.list.itemCheckColors.fillColor, foregroundColor: item.presentationData.theme.list.itemCheckColors.foregroundColor, style: .plain) - selectionNode.isUserInteractionEnabled = false - updatedSelectionNode = selectionNode + updatedSelectionNode = nil } var titleAttributedString: NSAttributedString? - let textColor = item.presentationData.theme.list.itemPrimaryTextColor + let textColor: UIColor + if case .action = item.appearance { + textColor = item.presentationData.theme.list.itemAccentColor + } else { + textColor = item.presentationData.theme.list.itemPrimaryTextColor + } titleAttributedString = NSAttributedString(string: item.title, font: titleFont, textColor: textColor) let (titleLayout, titleApply) = makeTitleLayout(TextNodeLayoutArguments(attributedString: titleAttributedString, backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: max(0.0, params.width - leftInset - rightInset), height: CGFloat.infinity), alignment: .natural, cutout: nil, insets: UIEdgeInsets())) @@ -261,11 +305,12 @@ public class ChatListAdditionalCategoryItemNode: ItemListRevealOptionsItemNode { strongSelf.highlightedBackgroundNode.backgroundColor = item.presentationData.theme.list.itemHighlightedBackgroundColor } - strongSelf.avatarNode.image = item.image - strongSelf.topSeparatorNode.isHidden = true - transition.updateFrame(node: strongSelf.avatarNode, frame: CGRect(origin: CGPoint(x: revealOffset + leftInset - 50.0, y: floor((nodeLayout.contentSize.height - avatarDiameter) / 2.0)), size: CGSize(width: avatarDiameter, height: avatarDiameter))) + if let image = item.image { + strongSelf.avatarNode.image = item.image + transition.updateFrame(node: strongSelf.avatarNode, frame: CGRect(origin: CGPoint(x: revealOffset + leftInset - 50.0 + floor((avatarDiameter - image.size.width) / 2.0), y: floor((nodeLayout.contentSize.height - image.size.width) / 2.0)), size: image.size)) + } let _ = titleApply() transition.updateFrame(node: strongSelf.titleNode, frame: titleFrame.offsetBy(dx: revealOffset, dy: 0.0)) diff --git a/submodules/ChatListUI/Sources/ChatListController.swift b/submodules/ChatListUI/Sources/ChatListController.swift index ef900c946e..3901014e39 100644 --- a/submodules/ChatListUI/Sources/ChatListController.swift +++ b/submodules/ChatListUI/Sources/ChatListController.swift @@ -2126,15 +2126,20 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController if limitsConfiguration.maxMessageRevokeIntervalInPrivateChats == LimitsConfiguration.timeIntervalForever { canRemoveGlobally = true } + } else if peer.peerId.namespace == Namespaces.Peer.SecretChat { + canRemoveGlobally = true } if let user = chatPeer as? TelegramUser, user.botInfo == nil, canRemoveGlobally { strongSelf.maybeAskForPeerChatRemoval(peer: peer, joined: joined, completion: { _ in }, removed: {}) + } else if let _ = chatPeer as? TelegramSecretChat, canRemoveGlobally { + strongSelf.maybeAskForPeerChatRemoval(peer: peer, joined: joined, completion: { _ in }, removed: {}) } else { let actionSheet = ActionSheetController(presentationData: strongSelf.presentationData) var items: [ActionSheetItem] = [] var canClear = true var canStop = false + var canRemoveGlobally = false var deleteTitle = strongSelf.presentationData.strings.Common_Delete if let channel = chatPeer as? TelegramChannel { @@ -2142,11 +2147,18 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController canClear = false deleteTitle = strongSelf.presentationData.strings.Channel_LeaveChannel } else { - deleteTitle = strongSelf.presentationData.strings.Group_LeaveGroup + deleteTitle = strongSelf.presentationData.strings.Group_DeleteGroup } if let addressName = channel.addressName, !addressName.isEmpty { canClear = false } + if channel.flags.contains(.isCreator) { + canRemoveGlobally = true + } + } else if let group = chatPeer as? TelegramGroup { + if case .creator = group.role { + canRemoveGlobally = true + } } else if let user = chatPeer as? TelegramUser, user.botInfo != nil { canStop = !user.flags.contains(.isSupport) canClear = user.botInfo == nil @@ -2155,12 +2167,13 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController deleteTitle = strongSelf.presentationData.strings.ChatList_DeleteChat } - var canRemoveGlobally = false let limitsConfiguration = strongSelf.context.currentLimitsConfiguration.with { $0 } if chatPeer is TelegramUser && chatPeer.id != strongSelf.context.account.peerId { if limitsConfiguration.maxMessageRevokeIntervalInPrivateChats == LimitsConfiguration.timeIntervalForever { canRemoveGlobally = true } + } else if chatPeer is TelegramSecretChat { + canRemoveGlobally = true } items.append(DeleteChatPeerActionSheetItem(context: strongSelf.context, peer: mainPeer, chatPeer: chatPeer, action: .delete, strings: strongSelf.presentationData.strings, nameDisplayOrder: strongSelf.presentationData.nameDisplayOrder)) @@ -2265,7 +2278,43 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController return } - strongSelf.maybeAskForPeerChatRemoval(peer: peer, completion: { _ in }, removed: {}) + if canRemoveGlobally, (mainPeer is TelegramGroup || mainPeer is TelegramChannel) { + let actionSheet = ActionSheetController(presentationData: strongSelf.presentationData) + var items: [ActionSheetItem] = [] + + items.append(ActionSheetButtonItem(title: strongSelf.presentationData.strings.ChatList_DeleteForCurrentUser, color: .destructive, action: { [weak actionSheet] in + actionSheet?.dismissAnimated() + self?.schedulePeerChatRemoval(peer: peer, type: .forLocalPeer, deleteGloballyIfPossible: false, completion: { + }) + })) + + items.append(ActionSheetButtonItem(title: strongSelf.presentationData.strings.ChatList_DeleteForAllMembers, color: .destructive, action: { [weak actionSheet] in + actionSheet?.dismissAnimated() + guard let strongSelf = self else { + return + } + strongSelf.present(standardTextAlertController(theme: AlertControllerTheme(presentationData: strongSelf.presentationData), title: strongSelf.presentationData.strings.ChatList_DeleteForEveryoneConfirmationTitle, text: strongSelf.presentationData.strings.ChatList_DeleteForAllMembersConfirmationText, actions: [ + TextAlertAction(type: .genericAction, title: strongSelf.presentationData.strings.Common_Cancel, action: { + }), + TextAlertAction(type: .destructiveAction, title: strongSelf.presentationData.strings.ChatList_DeleteForEveryoneConfirmationAction, action: { + self?.schedulePeerChatRemoval(peer: peer, type: .forEveryone, deleteGloballyIfPossible: true, completion: { + }) + }) + ], parseMarkdown: true), in: .window(.root)) + })) + + actionSheet.setItemGroups([ + ActionSheetItemGroup(items: items), + ActionSheetItemGroup(items: [ + ActionSheetButtonItem(title: strongSelf.presentationData.strings.Common_Cancel, color: .accent, font: .bold, action: { [weak actionSheet] in + actionSheet?.dismissAnimated() + }) + ]) + ]) + strongSelf.present(actionSheet, in: .window(.root)) + } else { + strongSelf.maybeAskForPeerChatRemoval(peer: peer, completion: { _ in }, removed: {}) + } })) if canStop { @@ -2311,6 +2360,9 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController if let user = chatPeer as? TelegramUser, user.botInfo != nil { canRemoveGlobally = false } + if let _ = chatPeer as? TelegramSecretChat { + canRemoveGlobally = true + } if canRemoveGlobally { let actionSheet = ActionSheetController(presentationData: self.presentationData) diff --git a/submodules/ChatListUI/Sources/ChatListSearchContainerNode.swift b/submodules/ChatListUI/Sources/ChatListSearchContainerNode.swift index eb554c3a8a..e938a36eb6 100644 --- a/submodules/ChatListUI/Sources/ChatListSearchContainerNode.swift +++ b/submodules/ChatListUI/Sources/ChatListSearchContainerNode.swift @@ -895,7 +895,8 @@ public final class ChatListSearchContainerNode: SearchDisplayControllerContentNo }).start() let peerSelectionController = self.context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: self.context, filter: [.onlyWriteable, .excludeDisabled])) - peerSelectionController.peerSelected = { [weak self, weak peerSelectionController] peerId in + peerSelectionController.peerSelected = { [weak self, weak peerSelectionController] peer in + let peerId = peer.id if let strongSelf = self, let _ = peerSelectionController { if peerId == strongSelf.context.account.peerId { let _ = (enqueueMessages(account: strongSelf.context.account, peerId: peerId, messages: messageIds.map { id -> EnqueueMessage in diff --git a/submodules/ChatListUI/Sources/Node/ChatListNode.swift b/submodules/ChatListUI/Sources/Node/ChatListNode.swift index a727f30b32..faa5dbd4ee 100644 --- a/submodules/ChatListUI/Sources/Node/ChatListNode.swift +++ b/submodules/ChatListUI/Sources/Node/ChatListNode.swift @@ -165,12 +165,13 @@ private func mappedInsertEntries(context: AccountContext, nodeInteraction: ChatL switch entry.entry { case .HeaderEntry: return ListViewInsertItem(index: entry.index, previousIndex: entry.previousIndex, item: ChatListEmptyHeaderItem(), directionHint: entry.directionHint) - case let .AdditionalCategory(_, id, title, image, selected, presentationData): + case let .AdditionalCategory(_, id, title, image, appearance, selected, presentationData): return ListViewInsertItem(index: entry.index, previousIndex: entry.previousIndex, item: ChatListAdditionalCategoryItem( presentationData: ItemListPresentationData(theme: presentationData.theme, fontSize: presentationData.fontSize, strings: presentationData.strings), context: context, title: title, image: image, + appearance: appearance, isSelected: selected, action: { nodeInteraction.additionalCategorySelected(id) @@ -355,12 +356,13 @@ private func mappedUpdateEntries(context: AccountContext, nodeInteraction: ChatL return ListViewUpdateItem(index: entry.index, previousIndex: entry.previousIndex, item: ChatListArchiveInfoItem(theme: presentationData.theme, strings: presentationData.strings), directionHint: entry.directionHint) case .HeaderEntry: return ListViewUpdateItem(index: entry.index, previousIndex: entry.previousIndex, item: ChatListEmptyHeaderItem(), directionHint: entry.directionHint) - case let .AdditionalCategory(index: _, id, title, image, selected, presentationData): + case let .AdditionalCategory(index: _, id, title, image, appearance, selected, presentationData): return ListViewUpdateItem(index: entry.index, previousIndex: entry.previousIndex, item: ChatListAdditionalCategoryItem( presentationData: ItemListPresentationData(theme: presentationData.theme, fontSize: presentationData.fontSize, strings: presentationData.strings), context: context, title: title, image: image, + appearance: appearance, isSelected: selected, action: { nodeInteraction.additionalCategorySelected(id) diff --git a/submodules/ChatListUI/Sources/Node/ChatListNodeEntries.swift b/submodules/ChatListUI/Sources/Node/ChatListNodeEntries.swift index 415d0d42f8..7004665711 100644 --- a/submodules/ChatListUI/Sources/Node/ChatListNodeEntries.swift +++ b/submodules/ChatListUI/Sources/Node/ChatListNodeEntries.swift @@ -5,6 +5,7 @@ import TelegramCore import SyncCore import TelegramPresentationData import MergeLists +import AccountContext enum ChatListNodeEntryId: Hashable { case Header @@ -50,7 +51,7 @@ enum ChatListNodeEntry: Comparable, Identifiable { case HoleEntry(ChatListHole, theme: PresentationTheme) case GroupReferenceEntry(index: ChatListIndex, presentationData: ChatListPresentationData, groupId: PeerGroupId, peers: [ChatListGroupReferencePeer], message: Message?, editing: Bool, unreadState: PeerGroupUnreadCountersCombinedSummary, revealed: Bool, hiddenByDefault: Bool) case ArchiveIntro(presentationData: ChatListPresentationData) - case AdditionalCategory(index: Int, id: Int, title: String, image: UIImage?, selected: Bool, presentationData: ChatListPresentationData) + case AdditionalCategory(index: Int, id: Int, title: String, image: UIImage?, appearance: ChatListNodeAdditionalCategory.Appearance, selected: Bool, presentationData: ChatListPresentationData) var sortIndex: ChatListNodeEntrySortIndex { switch self { @@ -242,8 +243,8 @@ enum ChatListNodeEntry: Comparable, Identifiable { } else { return false } - case let .AdditionalCategory(lhsIndex, lhsId, lhsTitle, lhsImage, lhsSelected, lhsPresentationData): - if case let .AdditionalCategory(rhsIndex, rhsId, rhsTitle, rhsImage, rhsSelected, rhsPresentationData) = rhs { + case let .AdditionalCategory(lhsIndex, lhsId, lhsTitle, lhsImage, lhsAppearance, lhsSelected, lhsPresentationData): + if case let .AdditionalCategory(rhsIndex, rhsId, rhsTitle, rhsImage, rhsAppearance, rhsSelected, rhsPresentationData) = rhs { if lhsIndex != rhsIndex { return false } @@ -256,6 +257,9 @@ enum ChatListNodeEntry: Comparable, Identifiable { if lhsImage !== rhsImage { return false } + if lhsAppearance != rhsAppearance { + return false + } if lhsSelected != rhsSelected { return false } @@ -374,7 +378,7 @@ func chatListNodeEntriesForView(_ view: ChatListView, state: ChatListNodeState, _) = mode { var index = 0 for category in additionalCategories.reversed(){ - result.append(.AdditionalCategory(index: index, id: category.id, title: category.title, image: category.icon, selected: state.selectedAdditionalCategoryIds.contains(category.id), presentationData: state.presentationData)) + result.append(.AdditionalCategory(index: index, id: category.id, title: category.title, image: category.icon, appearance: category.appearance, selected: state.selectedAdditionalCategoryIds.contains(category.id), presentationData: state.presentationData)) index += 1 } } diff --git a/submodules/Display/Source/WindowContent.swift b/submodules/Display/Source/WindowContent.swift index 78fa55c0fa..b5ae48c0fe 100644 --- a/submodules/Display/Source/WindowContent.swift +++ b/submodules/Display/Source/WindowContent.swift @@ -294,7 +294,7 @@ public class Window1 { self.systemUserInterfaceStyle = hostView.systemUserInterfaceStyle let boundsSize = self.hostView.eventView.bounds.size - self.deviceMetrics = DeviceMetrics(screenSize: UIScreen.main.bounds.size, scale: UIScreen.main.scale, statusBarHeight: statusBarHost?.statusBarFrame.height ?? defaultStatusBarHeight, onScreenNavigationHeight: self.hostView.onScreenNavigationHeight) + self.deviceMetrics = DeviceMetrics(screenSize: UIScreen.main.bounds.size, scale: UIScreen.main.scale, statusBarHeight: statusBarHost?.statusBarFrame.height ?? 0.0, onScreenNavigationHeight: self.hostView.onScreenNavigationHeight) self.statusBarHost = statusBarHost let statusBarHeight: CGFloat @@ -303,7 +303,7 @@ public class Window1 { self.keyboardManager = KeyboardManager(host: statusBarHost) self.keyboardViewManager = KeyboardViewManager(host: statusBarHost) } else { - statusBarHeight = self.deviceMetrics.statusBarHeight + statusBarHeight = 0.0 self.keyboardManager = nil self.keyboardViewManager = nil } @@ -406,7 +406,7 @@ public class Window1 { self.overlayPresentationContext.containerLayoutUpdated(containedLayoutForWindowLayout(self.windowLayout, deviceMetrics: self.deviceMetrics), transition: .immediate) self.statusBarChangeObserver = NotificationCenter.default.addObserver(forName: UIApplication.willChangeStatusBarFrameNotification, object: nil, queue: OperationQueue.main, using: { [weak self] notification in - if let strongSelf = self { + if let strongSelf = self, strongSelf.statusBarHost != nil { let statusBarHeight: CGFloat = max(defaultStatusBarHeight, (notification.userInfo?[UIApplication.statusBarFrameUserInfoKey] as? NSValue)?.cgRectValue.height ?? defaultStatusBarHeight) let transition: ContainedViewLayoutTransition = .animated(duration: 0.35, curve: .easeInOut) @@ -981,10 +981,12 @@ public class Window1 { var statusBarHeight: CGFloat? = self.deviceMetrics.statusBarHeight(for: boundsSize) if let statusBarHeightValue = statusBarHeight, let statusBarHost = self.statusBarHost { statusBarHeight = max(statusBarHeightValue, statusBarHost.statusBarFrame.size.height) + } else { + statusBarHeight = nil } if self.deviceMetrics.type == .tablet, let onScreenNavigationHeight = self.hostView.onScreenNavigationHeight, onScreenNavigationHeight != self.deviceMetrics.onScreenNavigationHeight(inLandscape: false, systemOnScreenNavigationHeight: self.hostView.onScreenNavigationHeight) { - self.deviceMetrics = DeviceMetrics(screenSize: UIScreen.main.bounds.size, scale: UIScreen.main.scale, statusBarHeight: statusBarHeight ?? defaultStatusBarHeight, onScreenNavigationHeight: onScreenNavigationHeight) + self.deviceMetrics = DeviceMetrics(screenSize: UIScreen.main.bounds.size, scale: UIScreen.main.scale, statusBarHeight: statusBarHeight ?? 0.0, onScreenNavigationHeight: onScreenNavigationHeight) } let statusBarWasHidden = self.statusBarHidden diff --git a/submodules/LiveLocationManager/Sources/LiveLocationManager.swift b/submodules/LiveLocationManager/Sources/LiveLocationManager.swift index 24e039085f..0cb7e547ea 100644 --- a/submodules/LiveLocationManager/Sources/LiveLocationManager.swift +++ b/submodules/LiveLocationManager/Sources/LiveLocationManager.swift @@ -258,7 +258,7 @@ public final class LiveLocationManagerImpl: LiveLocationManager { transaction.updateMessage(id, update: { currentMessage in var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = currentMessage.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } var updatedMedia = currentMessage.media let timestamp = Int32(CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970) diff --git a/submodules/Postbox/Sources/IntermediateMessage.swift b/submodules/Postbox/Sources/IntermediateMessage.swift index 65d29e403c..d326376868 100644 --- a/submodules/Postbox/Sources/IntermediateMessage.swift +++ b/submodules/Postbox/Sources/IntermediateMessage.swift @@ -7,14 +7,16 @@ struct IntermediateMessageForwardInfo { let date: Int32 let authorSignature: String? let psaType: String? + let flags: MessageForwardInfo.Flags - init(authorId: PeerId?, sourceId: PeerId?, sourceMessageId: MessageId?, date: Int32, authorSignature: String?, psaType: String?) { + init(authorId: PeerId?, sourceId: PeerId?, sourceMessageId: MessageId?, date: Int32, authorSignature: String?, psaType: String?, flags: MessageForwardInfo.Flags) { self.authorId = authorId self.sourceId = sourceId self.sourceMessageId = sourceMessageId self.date = date self.authorSignature = authorSignature self.psaType = psaType + self.flags = flags } init(_ storeInfo: StoreMessageForwardInfo) { @@ -24,6 +26,7 @@ struct IntermediateMessageForwardInfo { self.date = storeInfo.date self.authorSignature = storeInfo.authorSignature self.psaType = storeInfo.psaType + self.flags = storeInfo.flags } } diff --git a/submodules/Postbox/Sources/Message.swift b/submodules/Postbox/Sources/Message.swift index d6570f2e38..0ddf1930de 100644 --- a/submodules/Postbox/Sources/Message.swift +++ b/submodules/Postbox/Sources/Message.swift @@ -413,36 +413,50 @@ public struct StoreMessageForwardInfo { public let date: Int32 public let authorSignature: String? public let psaType: String? + public let flags: MessageForwardInfo.Flags - public init(authorId: PeerId?, sourceId: PeerId?, sourceMessageId: MessageId?, date: Int32, authorSignature: String?, psaType: String?) { + public init(authorId: PeerId?, sourceId: PeerId?, sourceMessageId: MessageId?, date: Int32, authorSignature: String?, psaType: String?, flags: MessageForwardInfo.Flags) { self.authorId = authorId self.sourceId = sourceId self.sourceMessageId = sourceMessageId self.date = date self.authorSignature = authorSignature self.psaType = psaType + self.flags = flags } public init(_ info: MessageForwardInfo) { - self.init(authorId: info.author?.id, sourceId: info.source?.id, sourceMessageId: info.sourceMessageId, date: info.date, authorSignature: info.authorSignature, psaType: info.psaType) + self.init(authorId: info.author?.id, sourceId: info.source?.id, sourceMessageId: info.sourceMessageId, date: info.date, authorSignature: info.authorSignature, psaType: info.psaType, flags: info.flags) } } public struct MessageForwardInfo: Equatable { + public struct Flags: OptionSet { + public var rawValue: Int32 + + public init(rawValue: Int32) { + self.rawValue = rawValue + } + + public static let isImported = Flags(rawValue: 1 << 0) + } + public let author: Peer? public let source: Peer? public let sourceMessageId: MessageId? public let date: Int32 public let authorSignature: String? public let psaType: String? + public let flags: MessageForwardInfo.Flags - public init(author: Peer?, source: Peer?, sourceMessageId: MessageId?, date: Int32, authorSignature: String?, psaType: String?) { + public init(author: Peer?, source: Peer?, sourceMessageId: MessageId?, date: Int32, authorSignature: String?, psaType: String?, flags: MessageForwardInfo.Flags) { self.author = author self.source = source self.sourceMessageId = sourceMessageId self.date = date self.authorSignature = authorSignature self.psaType = psaType + self.flags = flags } public static func ==(lhs: MessageForwardInfo, rhs: MessageForwardInfo) -> Bool { @@ -468,6 +482,9 @@ public struct MessageForwardInfo: Equatable { if lhs.psaType != rhs.psaType { return false } + if lhs.flags != rhs.flags { + return false + } return true } diff --git a/submodules/Postbox/Sources/MessageHistoryTable.swift b/submodules/Postbox/Sources/MessageHistoryTable.swift index 468ca9d130..e714cf6ee5 100644 --- a/submodules/Postbox/Sources/MessageHistoryTable.swift +++ b/submodules/Postbox/Sources/MessageHistoryTable.swift @@ -1061,6 +1061,9 @@ final class MessageHistoryTable: Table { if forwardInfo.psaType != nil { forwardInfoFlags |= 1 << 4 } + if !forwardInfo.flags.isEmpty { + forwardInfoFlags |= 1 << 5 + } sharedBuffer.write(&forwardInfoFlags, offset: 0, length: 1) var forwardAuthorId: Int64 = forwardInfo.authorId?.toInt64() ?? 0 var forwardDate: Int32 = forwardInfo.date @@ -1102,6 +1105,11 @@ final class MessageHistoryTable: Table { sharedBuffer.write(&length, offset: 0, length: 4) } } + + if !forwardInfo.flags.isEmpty { + var value: Int32 = forwardInfo.flags.rawValue + sharedBuffer.write(&value, offset: 0, length: 4) + } } else { var forwardInfoFlags: Int8 = 0 sharedBuffer.write(&forwardInfoFlags, offset: 0, length: 1) @@ -1630,6 +1638,9 @@ final class MessageHistoryTable: Table { if forwardInfo.psaType != nil { forwardInfoFlags |= 1 << 4 } + if !forwardInfo.flags.isEmpty { + forwardInfoFlags |= 1 << 5 + } sharedBuffer.write(&forwardInfoFlags, offset: 0, length: 1) var forwardAuthorId: Int64 = forwardInfo.authorId?.toInt64() ?? 0 var forwardDate: Int32 = forwardInfo.date @@ -1671,6 +1682,11 @@ final class MessageHistoryTable: Table { sharedBuffer.write(&length, offset: 0, length: 4) } } + + if !forwardInfo.flags.isEmpty { + var value: Int32 = forwardInfo.flags.rawValue + sharedBuffer.write(&value, offset: 0, length: 4) + } } else { var forwardInfoFlags: Int8 = 0 sharedBuffer.write(&forwardInfoFlags, offset: 0, length: 1) @@ -1784,7 +1800,7 @@ final class MessageHistoryTable: Table { if let previousMessage = self.getMessage(index) { var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = previousMessage.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.authorId, sourceId: forwardInfo.sourceId, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.authorId, sourceId: forwardInfo.sourceId, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } var parsedAttributes: [MessageAttribute] = [] @@ -2187,6 +2203,7 @@ final class MessageHistoryTable: Table { var forwardSourceMessageId: MessageId? var authorSignature: String? = nil var psaType: String? = nil + var flags: MessageForwardInfo.Flags = [] value.read(&forwardAuthorId, offset: 0, length: 8) value.read(&forwardDate, offset: 0, length: 4) @@ -2221,7 +2238,13 @@ final class MessageHistoryTable: Table { value.skip(Int(psaTypeLength)) } - forwardInfo = IntermediateMessageForwardInfo(authorId: forwardAuthorId == 0 ? nil : PeerId(forwardAuthorId), sourceId: forwardSourceId, sourceMessageId: forwardSourceMessageId, date: forwardDate, authorSignature: authorSignature, psaType: psaType) + if (forwardInfoFlags & (1 << 5)) != 0 { + var rawValue: Int32 = 0 + value.read(&rawValue, offset: 0, length: 4) + flags = MessageForwardInfo.Flags(rawValue: rawValue) + } + + forwardInfo = IntermediateMessageForwardInfo(authorId: forwardAuthorId == 0 ? nil : PeerId(forwardAuthorId), sourceId: forwardSourceId, sourceMessageId: forwardSourceMessageId, date: forwardDate, authorSignature: authorSignature, psaType: psaType, flags: flags) } var hasAuthor: Int8 = 0 @@ -2377,7 +2400,7 @@ final class MessageHistoryTable: Table { if let sourceId = internalForwardInfo.sourceId { source = peerTable.get(sourceId) } - forwardInfo = MessageForwardInfo(author: forwardAuthor, source: source, sourceMessageId: internalForwardInfo.sourceMessageId, date: internalForwardInfo.date, authorSignature: internalForwardInfo.authorSignature, psaType: internalForwardInfo.psaType) + forwardInfo = MessageForwardInfo(author: forwardAuthor, source: source, sourceMessageId: internalForwardInfo.sourceMessageId, date: internalForwardInfo.date, authorSignature: internalForwardInfo.authorSignature, psaType: internalForwardInfo.psaType, flags: internalForwardInfo.flags) } var author: Peer? diff --git a/submodules/Postbox/Sources/Postbox.swift b/submodules/Postbox/Sources/Postbox.swift index 078c837cdc..0f72d8c5e9 100644 --- a/submodules/Postbox/Sources/Postbox.swift +++ b/submodules/Postbox/Sources/Postbox.swift @@ -1549,7 +1549,7 @@ public final class Postbox { flags.insert(.Failed) var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = message.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } return .update(StoreMessage(id: message.id, globallyUniqueId: message.globallyUniqueId, groupingKey: message.groupingKey, threadId: message.threadId, timestamp: message.timestamp, flags: flags, tags: message.tags, globalTags: message.globalTags, localTags: message.localTags, forwardInfo: storeForwardInfo, authorId: message.author?.id, text: message.text, attributes: message.attributes, media: message.media)) } else { diff --git a/submodules/SettingsUI/Sources/DebugController.swift b/submodules/SettingsUI/Sources/DebugController.swift index 01a1c2743e..466ca41969 100644 --- a/submodules/SettingsUI/Sources/DebugController.swift +++ b/submodules/SettingsUI/Sources/DebugController.swift @@ -199,7 +199,9 @@ private enum DebugControllerEntry: ItemListNodeEntry { actionSheet?.dismissAnimated() let controller = context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: context, filter: [.onlyWriteable, .excludeDisabled])) - controller.peerSelected = { [weak controller] peerId in + controller.peerSelected = { [weak controller] peer in + let peerId = peer.id + if let strongController = controller { strongController.dismiss() @@ -267,7 +269,9 @@ private enum DebugControllerEntry: ItemListNodeEntry { actionSheet?.dismissAnimated() let controller = context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: context, filter: [.onlyWriteable, .excludeDisabled])) - controller.peerSelected = { [weak controller] peerId in + controller.peerSelected = { [weak controller] peer in + let peerId = peer.id + if let strongController = controller { strongController.dismiss() @@ -347,7 +351,9 @@ private enum DebugControllerEntry: ItemListNodeEntry { actionSheet?.dismissAnimated() let controller = context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: context, filter: [.onlyWriteable, .excludeDisabled])) - controller.peerSelected = { [weak controller] peerId in + controller.peerSelected = { [weak controller] peer in + let peerId = peer.id + if let strongController = controller { strongController.dismiss() @@ -409,7 +415,9 @@ private enum DebugControllerEntry: ItemListNodeEntry { return } let controller = context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: context, filter: [.onlyWriteable, .excludeDisabled])) - controller.peerSelected = { [weak controller] peerId in + controller.peerSelected = { [weak controller] peer in + let peerId = peer.id + if let strongController = controller { strongController.dismiss() @@ -438,7 +446,9 @@ private enum DebugControllerEntry: ItemListNodeEntry { actionSheet?.dismissAnimated() let controller = context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: context, filter: [.onlyWriteable, .excludeDisabled])) - controller.peerSelected = { [weak controller] peerId in + controller.peerSelected = { [weak controller] peer in + let peerId = peer.id + if let strongController = controller { strongController.dismiss() diff --git a/submodules/SettingsUI/Sources/Notifications/Exceptions/NotificationExceptionControllerNode.swift b/submodules/SettingsUI/Sources/Notifications/Exceptions/NotificationExceptionControllerNode.swift index 524bb24665..78a1fb29da 100644 --- a/submodules/SettingsUI/Sources/Notifications/Exceptions/NotificationExceptionControllerNode.swift +++ b/submodules/SettingsUI/Sources/Notifications/Exceptions/NotificationExceptionControllerNode.swift @@ -891,7 +891,9 @@ final class NotificationExceptionsControllerNode: ViewControllerTracingNode { filter.insert(.onlyChannels) } let controller = context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: context, filter: filter, hasContactSelector: false, title: presentationData.strings.Notifications_AddExceptionTitle)) - controller.peerSelected = { [weak controller] peerId in + controller.peerSelected = { [weak controller] peer in + let peerId = peer.id + presentPeerSettings(peerId, { controller?.dismiss() }) diff --git a/submodules/SettingsUI/Sources/Privacy and Security/BlockedPeersController.swift b/submodules/SettingsUI/Sources/Privacy and Security/BlockedPeersController.swift index 03cab0a8c9..b9a73aec81 100644 --- a/submodules/SettingsUI/Sources/Privacy and Security/BlockedPeersController.swift +++ b/submodules/SettingsUI/Sources/Privacy and Security/BlockedPeersController.swift @@ -230,7 +230,9 @@ public func blockedPeersController(context: AccountContext, blockedPeersContext: }, addPeer: { let presentationData = context.sharedContext.currentPresentationData.with { $0 } let controller = context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: context, filter: [.onlyPrivateChats, .excludeSavedMessages, .removeSearchHeader, .excludeRecent, .doNotSearchMessages], title: presentationData.strings.BlockedUsers_SelectUserTitle)) - controller.peerSelected = { [weak controller] peerId in + controller.peerSelected = { [weak controller] peer in + let peerId = peer.id + guard let strongController = controller else { return } diff --git a/submodules/SettingsUI/Sources/Privacy and Security/ForwardPrivacyChatPreviewItem.swift b/submodules/SettingsUI/Sources/Privacy and Security/ForwardPrivacyChatPreviewItem.swift index 47b8bd1ce5..3ac27c2c04 100644 --- a/submodules/SettingsUI/Sources/Privacy and Security/ForwardPrivacyChatPreviewItem.swift +++ b/submodules/SettingsUI/Sources/Privacy and Security/ForwardPrivacyChatPreviewItem.swift @@ -157,7 +157,7 @@ class ForwardPrivacyChatPreviewItemNode: ListViewItemNode { peers[peerId] = TelegramUser(id: peerId, accessHash: nil, firstName: item.peerName, lastName: "", username: nil, phone: nil, photo: [], botInfo: nil, restrictionInfo: nil, flags: []) - let forwardInfo = MessageForwardInfo(author: item.linkEnabled ? peers[peerId] : nil, source: nil, sourceMessageId: nil, date: 0, authorSignature: item.linkEnabled ? nil : item.peerName, psaType: nil) + let forwardInfo = MessageForwardInfo(author: item.linkEnabled ? peers[peerId] : nil, source: nil, sourceMessageId: nil, date: 0, authorSignature: item.linkEnabled ? nil : item.peerName, psaType: nil, flags: []) let messageItem = item.context.sharedContext.makeChatMessagePreviewItem(context: item.context, messages: [Message(stableId: 1, stableVersion: 0, id: MessageId(peerId: peerId, namespace: 0, id: 1), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, threadId: nil, timestamp: 66000, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: forwardInfo, author: nil, text: item.strings.Privacy_Forwards_PreviewMessageText, attributes: [], media: [], peers: peers, associatedMessages: messages, associatedMessageIds: [])], theme: item.theme, strings: item.strings, wallpaper: item.wallpaper, fontSize: item.fontSize, chatBubbleCorners: item.chatBubbleCorners, dateTimeFormat: item.dateTimeFormat, nameOrder: item.nameDisplayOrder, forcedResourceStatus: nil, tapMessage: nil, clickThroughMessage: nil) diff --git a/submodules/ShareController/Sources/ShareController.swift b/submodules/ShareController/Sources/ShareController.swift index 2d56f4729b..0f2ce402b8 100644 --- a/submodules/ShareController/Sources/ShareController.swift +++ b/submodules/ShareController/Sources/ShareController.swift @@ -295,6 +295,7 @@ public final class ShareController: ViewController { private let immediatePeerId: PeerId? private let openStats: (() -> Void)? private let shares: Int? + private let fromForeignApp: Bool private let peers = Promise<([(RenderedPeer, PeerPresence?)], Peer)>() private let peersDisposable = MetaDisposable() @@ -305,11 +306,11 @@ public final class ShareController: ViewController { public var dismissed: ((Bool) -> Void)? - public convenience init(context: AccountContext, subject: ShareControllerSubject, presetText: String? = nil, preferredAction: ShareControllerPreferredAction = .default, showInChat: ((Message) -> Void)? = nil, openStats: (() -> Void)? = nil, shares: Int? = nil, externalShare: Bool = true, immediateExternalShare: Bool = false, switchableAccounts: [AccountWithInfo] = [], immediatePeerId: PeerId? = nil, forcedTheme: PresentationTheme? = nil, forcedActionTitle: String? = nil) { - self.init(sharedContext: context.sharedContext, currentContext: context, subject: subject, presetText: presetText, preferredAction: preferredAction, showInChat: showInChat, openStats: openStats, shares: shares, externalShare: externalShare, immediateExternalShare: immediateExternalShare, switchableAccounts: switchableAccounts, immediatePeerId: immediatePeerId, forcedTheme: forcedTheme, forcedActionTitle: forcedActionTitle) + public convenience init(context: AccountContext, subject: ShareControllerSubject, presetText: String? = nil, preferredAction: ShareControllerPreferredAction = .default, showInChat: ((Message) -> Void)? = nil, openStats: (() -> Void)? = nil, fromForeignApp: Bool = false, shares: Int? = nil, externalShare: Bool = true, immediateExternalShare: Bool = false, switchableAccounts: [AccountWithInfo] = [], immediatePeerId: PeerId? = nil, forcedTheme: PresentationTheme? = nil, forcedActionTitle: String? = nil) { + self.init(sharedContext: context.sharedContext, currentContext: context, subject: subject, presetText: presetText, preferredAction: preferredAction, showInChat: showInChat, openStats: openStats, fromForeignApp: fromForeignApp, shares: shares, externalShare: externalShare, immediateExternalShare: immediateExternalShare, switchableAccounts: switchableAccounts, immediatePeerId: immediatePeerId, forcedTheme: forcedTheme, forcedActionTitle: forcedActionTitle) } - public init(sharedContext: SharedAccountContext, currentContext: AccountContext, subject: ShareControllerSubject, presetText: String? = nil, preferredAction: ShareControllerPreferredAction = .default, showInChat: ((Message) -> Void)? = nil, openStats: (() -> Void)? = nil, shares: Int? = nil, externalShare: Bool = true, immediateExternalShare: Bool = false, switchableAccounts: [AccountWithInfo] = [], immediatePeerId: PeerId? = nil, forcedTheme: PresentationTheme? = nil, forcedActionTitle: String? = nil) { + public init(sharedContext: SharedAccountContext, currentContext: AccountContext, subject: ShareControllerSubject, presetText: String? = nil, preferredAction: ShareControllerPreferredAction = .default, showInChat: ((Message) -> Void)? = nil, openStats: (() -> Void)? = nil, fromForeignApp: Bool = false, shares: Int? = nil, externalShare: Bool = true, immediateExternalShare: Bool = false, switchableAccounts: [AccountWithInfo] = [], immediatePeerId: PeerId? = nil, forcedTheme: PresentationTheme? = nil, forcedActionTitle: String? = nil) { self.sharedContext = sharedContext self.currentContext = currentContext self.currentAccount = currentContext.account @@ -320,6 +321,7 @@ public final class ShareController: ViewController { self.switchableAccounts = switchableAccounts self.immediatePeerId = immediatePeerId self.openStats = openStats + self.fromForeignApp = fromForeignApp self.shares = shares self.forcedTheme = forcedTheme @@ -448,7 +450,7 @@ public final class ShareController: ViewController { return } strongSelf.present(standardTextAlertController(theme: AlertControllerTheme(presentationData: strongSelf.presentationData), title: title, text: text, actions: [TextAlertAction(type: .defaultAction, title: strongSelf.presentationData.strings.Common_OK, action: {})]), in: .window(.root)) - }, externalShare: self.externalShare, immediateExternalShare: self.immediateExternalShare, immediatePeerId: self.immediatePeerId, shares: self.shares, forcedTheme: self.forcedTheme) + }, externalShare: self.externalShare, immediateExternalShare: self.immediateExternalShare, immediatePeerId: self.immediatePeerId, shares: self.shares, fromForeignApp: self.fromForeignApp, forcedTheme: self.forcedTheme) self.controllerNode.dismiss = { [weak self] shared in self?.presentingViewController?.dismiss(animated: false, completion: nil) self?.dismissed?(shared) diff --git a/submodules/ShareController/Sources/ShareControllerNode.swift b/submodules/ShareController/Sources/ShareControllerNode.swift index a514042fa7..9140106385 100644 --- a/submodules/ShareController/Sources/ShareControllerNode.swift +++ b/submodules/ShareController/Sources/ShareControllerNode.swift @@ -34,6 +34,7 @@ final class ShareControllerNode: ViewControllerTracingNode, UIScrollViewDelegate private let immediateExternalShare: Bool private var immediatePeerId: PeerId? private let shares: Int? + private let fromForeignApp: Bool private let defaultAction: ShareControllerAction? private let requestLayout: (ContainedViewLayoutTransition) -> Void @@ -81,7 +82,7 @@ final class ShareControllerNode: ViewControllerTracingNode, UIScrollViewDelegate private let presetText: String? - init(sharedContext: SharedAccountContext, presetText: String?, defaultAction: ShareControllerAction?, requestLayout: @escaping (ContainedViewLayoutTransition) -> Void, presentError: @escaping (String?, String) -> Void, externalShare: Bool, immediateExternalShare: Bool, immediatePeerId: PeerId?, shares: Int?, forcedTheme: PresentationTheme?) { + init(sharedContext: SharedAccountContext, presetText: String?, defaultAction: ShareControllerAction?, requestLayout: @escaping (ContainedViewLayoutTransition) -> Void, presentError: @escaping (String?, String) -> Void, externalShare: Bool, immediateExternalShare: Bool, immediatePeerId: PeerId?, shares: Int?, fromForeignApp: Bool, forcedTheme: PresentationTheme?) { self.sharedContext = sharedContext self.presentationData = sharedContext.currentPresentationData.with { $0 } self.forcedTheme = forcedTheme @@ -89,6 +90,7 @@ final class ShareControllerNode: ViewControllerTracingNode, UIScrollViewDelegate self.immediateExternalShare = immediateExternalShare self.immediatePeerId = immediatePeerId self.shares = shares + self.fromForeignApp = fromForeignApp self.presentError = presentError self.presetText = presetText @@ -124,7 +126,11 @@ final class ShareControllerNode: ViewControllerTracingNode, UIScrollViewDelegate self.wrappingScrollNode.view.canCancelContentTouches = true self.dimNode = ASDisplayNode() - self.dimNode.backgroundColor = UIColor(white: 0.0, alpha: 0.5) + if self.fromForeignApp { + self.dimNode.backgroundColor = .clear + } else { + self.dimNode.backgroundColor = UIColor(white: 0.0, alpha: 0.5) + } self.cancelButtonNode = ASButtonNode() self.cancelButtonNode.displaysAsynchronously = false diff --git a/submodules/SyncCore/Sources/SecretChatOutgoingOperation.swift b/submodules/SyncCore/Sources/SecretChatOutgoingOperation.swift index 208617047d..35fa0e9439 100644 --- a/submodules/SyncCore/Sources/SecretChatOutgoingOperation.swift +++ b/submodules/SyncCore/Sources/SecretChatOutgoingOperation.swift @@ -122,7 +122,7 @@ public enum SecretChatOutgoingOperationContents: PostboxCoding { case pfsCommitKey(layer: SecretChatSequenceBasedLayer, actionGloballyUniqueId: Int64, rekeySessionId: Int64, keyFingerprint: Int64) case noop(layer: SecretChatSequenceBasedLayer, actionGloballyUniqueId: Int64) case setMessageAutoremoveTimeout(layer: SecretChatLayer, actionGloballyUniqueId: Int64, timeout: Int32, messageId: MessageId) - case terminate(reportSpam: Bool) + case terminate(reportSpam: Bool, requestRemoteHistoryRemoval: Bool) public init(decoder: PostboxDecoder) { switch decoder.decodeInt32ForKey("r", orElse: 0) { @@ -155,7 +155,7 @@ public enum SecretChatOutgoingOperationContents: PostboxCoding { case SecretChatOutgoingOperationValue.setMessageAutoremoveTimeout.rawValue: self = .setMessageAutoremoveTimeout(layer: SecretChatLayer(rawValue: decoder.decodeInt32ForKey("l", orElse: 0))!, actionGloballyUniqueId: decoder.decodeInt64ForKey("i", orElse: 0), timeout: decoder.decodeInt32ForKey("t", orElse: 0), messageId: MessageId(peerId: PeerId(decoder.decodeInt64ForKey("m.p", orElse: 0)), namespace: decoder.decodeInt32ForKey("m.n", orElse: 0), id: decoder.decodeInt32ForKey("m.i", orElse: 0))) case SecretChatOutgoingOperationValue.terminate.rawValue: - self = .terminate(reportSpam: decoder.decodeInt32ForKey("rs", orElse: 0) != 0) + self = .terminate(reportSpam: decoder.decodeInt32ForKey("rs", orElse: 0) != 0, requestRemoteHistoryRemoval: decoder.decodeInt32ForKey("requestRemoteHistoryRemoval", orElse: 0) != 0) default: self = .noop(layer: SecretChatSequenceBasedLayer(rawValue: decoder.decodeInt32ForKey("l", orElse: 0))!, actionGloballyUniqueId: 0) assertionFailure() @@ -249,9 +249,10 @@ public enum SecretChatOutgoingOperationContents: PostboxCoding { encoder.encodeInt64(messageId.peerId.toInt64(), forKey: "m.p") encoder.encodeInt32(messageId.namespace, forKey: "m.n") encoder.encodeInt32(messageId.id, forKey: "m.i") - case let .terminate(reportSpam): + case let .terminate(reportSpam, requestRemoteHistoryRemoval): encoder.encodeInt32(SecretChatOutgoingOperationValue.terminate.rawValue, forKey: "r") encoder.encodeInt32(reportSpam ? 1 : 0, forKey: "rs") + encoder.encodeInt32(requestRemoteHistoryRemoval ? 1 : 0, forKey: "requestRemoteHistoryRemoval") } } } diff --git a/submodules/TelegramApi/Sources/Api0.swift b/submodules/TelegramApi/Sources/Api0.swift index 8a960cff3d..debd636e49 100644 --- a/submodules/TelegramApi/Sources/Api0.swift +++ b/submodules/TelegramApi/Sources/Api0.swift @@ -11,8 +11,8 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[-457104426] = { return Api.InputGeoPoint.parse_inputGeoPointEmpty($0) } dict[1210199983] = { return Api.InputGeoPoint.parse_inputGeoPoint($0) } dict[-784000893] = { return Api.payments.ValidatedRequestedInfo.parse_validatedRequestedInfo($0) } - dict[231260545] = { return Api.ChatFull.parse_chatFull($0) } dict[2055070967] = { return Api.ChatFull.parse_channelFull($0) } + dict[-213431562] = { return Api.ChatFull.parse_chatFull($0) } dict[-1159937629] = { return Api.PollResults.parse_pollResults($0) } dict[-925415106] = { return Api.ChatParticipant.parse_chatParticipant($0) } dict[-636267638] = { return Api.ChatParticipant.parse_chatParticipantCreator($0) } @@ -175,6 +175,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[-1997373508] = { return Api.SendMessageAction.parse_sendMessageRecordRoundAction($0) } dict[608050278] = { return Api.SendMessageAction.parse_sendMessageUploadRoundAction($0) } dict[-651419003] = { return Api.SendMessageAction.parse_speakingInGroupCallAction($0) } + dict[-606432698] = { return Api.SendMessageAction.parse_sendMessageHistoryImportAction($0) } dict[-1137792208] = { return Api.PrivacyKey.parse_privacyKeyStatusTimestamp($0) } dict[1343122938] = { return Api.PrivacyKey.parse_privacyKeyChatInvite($0) } dict[1030105979] = { return Api.PrivacyKey.parse_privacyKeyPhoneCall($0) } @@ -574,6 +575,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[-1991004873] = { return Api.InputChatPhoto.parse_inputChatPhoto($0) } dict[-968723890] = { return Api.InputChatPhoto.parse_inputChatUploadedPhoto($0) } dict[-1228606141] = { return Api.messages.MessageViews.parse_messageViews($0) } + dict[375566091] = { return Api.messages.HistoryImport.parse_historyImport($0) } dict[-368917890] = { return Api.PaymentCharge.parse_paymentCharge($0) } dict[-1387279939] = { return Api.MessageInteractionCounters.parse_messageInteractionCounters($0) } dict[-1107852396] = { return Api.stats.BroadcastStats.parse_broadcastStats($0) } @@ -656,7 +658,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[-1056001329] = { return Api.InputPaymentCredentials.parse_inputPaymentCredentialsSaved($0) } dict[873977640] = { return Api.InputPaymentCredentials.parse_inputPaymentCredentials($0) } dict[178373535] = { return Api.InputPaymentCredentials.parse_inputPaymentCredentialsApplePay($0) } - dict[-905587442] = { return Api.InputPaymentCredentials.parse_inputPaymentCredentialsAndroidPay($0) } + dict[-1966921727] = { return Api.InputPaymentCredentials.parse_inputPaymentCredentialsGooglePay($0) } dict[-1239335713] = { return Api.ShippingOption.parse_shippingOption($0) } dict[859091184] = { return Api.InputSecureFile.parse_inputSecureFileUploaded($0) } dict[1399317950] = { return Api.InputSecureFile.parse_inputSecureFile($0) } @@ -736,7 +738,6 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[-1673717362] = { return Api.InputPeerNotifySettings.parse_inputPeerNotifySettings($0) } dict[-1634752813] = { return Api.messages.FavedStickers.parse_favedStickersNotModified($0) } dict[-209768682] = { return Api.messages.FavedStickers.parse_favedStickers($0) } - dict[1776236393] = { return Api.ExportedChatInvite.parse_chatInviteEmpty($0) } dict[1847917725] = { return Api.ExportedChatInvite.parse_chatInviteExported($0) } dict[-1389486888] = { return Api.account.AuthorizationForm.parse_authorizationForm($0) } dict[-1392388579] = { return Api.Authorization.parse_authorization($0) } @@ -1324,6 +1325,8 @@ public struct Api { _1.serialize(buffer, boxed) case let _1 as Api.messages.MessageViews: _1.serialize(buffer, boxed) + case let _1 as Api.messages.HistoryImport: + _1.serialize(buffer, boxed) case let _1 as Api.PaymentCharge: _1.serialize(buffer, boxed) case let _1 as Api.MessageInteractionCounters: diff --git a/submodules/TelegramApi/Sources/Api1.swift b/submodules/TelegramApi/Sources/Api1.swift index 144a3781bb..5761a8cb0b 100644 --- a/submodules/TelegramApi/Sources/Api1.swift +++ b/submodules/TelegramApi/Sources/Api1.swift @@ -1507,6 +1507,40 @@ public struct messages { } } + } + public enum HistoryImport: TypeConstructorDescription { + case historyImport(id: Int64) + + public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { + switch self { + case .historyImport(let id): + if boxed { + buffer.appendInt32(375566091) + } + serializeInt64(id, buffer: buffer, boxed: false) + break + } + } + + public func descriptionFields() -> (String, [(String, Any)]) { + switch self { + case .historyImport(let id): + return ("historyImport", [("id", id)]) + } + } + + public static func parse_historyImport(_ reader: BufferReader) -> HistoryImport? { + var _1: Int64? + _1 = reader.readInt64() + let _c1 = _1 != nil + if _c1 { + return Api.messages.HistoryImport.historyImport(id: _1!) + } + else { + return nil + } + } + } public enum PeerDialogs: TypeConstructorDescription { case peerDialogs(dialogs: [Api.Dialog], messages: [Api.Message], chats: [Api.Chat], users: [Api.User], state: Api.updates.State) @@ -2206,31 +2240,11 @@ public extension Api { } public enum ChatFull: TypeConstructorDescription { - case chatFull(flags: Int32, id: Int32, about: String, participants: Api.ChatParticipants, chatPhoto: Api.Photo?, notifySettings: Api.PeerNotifySettings, exportedInvite: Api.ExportedChatInvite, botInfo: [Api.BotInfo]?, pinnedMsgId: Int32?, folderId: Int32?, call: Api.InputGroupCall?) case channelFull(flags: Int32, id: Int32, about: String, participantsCount: Int32?, adminsCount: Int32?, kickedCount: Int32?, bannedCount: Int32?, onlineCount: Int32?, readInboxMaxId: Int32, readOutboxMaxId: Int32, unreadCount: Int32, chatPhoto: Api.Photo, notifySettings: Api.PeerNotifySettings, exportedInvite: Api.ExportedChatInvite?, botInfo: [Api.BotInfo], migratedFromChatId: Int32?, migratedFromMaxId: Int32?, pinnedMsgId: Int32?, stickerset: Api.StickerSet?, availableMinId: Int32?, folderId: Int32?, linkedChatId: Int32?, location: Api.ChannelLocation?, slowmodeSeconds: Int32?, slowmodeNextSendDate: Int32?, statsDc: Int32?, pts: Int32, call: Api.InputGroupCall?) + case chatFull(flags: Int32, id: Int32, about: String, participants: Api.ChatParticipants, chatPhoto: Api.Photo?, notifySettings: Api.PeerNotifySettings, exportedInvite: Api.ExportedChatInvite?, botInfo: [Api.BotInfo]?, pinnedMsgId: Int32?, folderId: Int32?, call: Api.InputGroupCall?) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { switch self { - case .chatFull(let flags, let id, let about, let participants, let chatPhoto, let notifySettings, let exportedInvite, let botInfo, let pinnedMsgId, let folderId, let call): - if boxed { - buffer.appendInt32(231260545) - } - serializeInt32(flags, buffer: buffer, boxed: false) - serializeInt32(id, buffer: buffer, boxed: false) - serializeString(about, buffer: buffer, boxed: false) - participants.serialize(buffer, true) - if Int(flags) & Int(1 << 2) != 0 {chatPhoto!.serialize(buffer, true)} - notifySettings.serialize(buffer, true) - exportedInvite.serialize(buffer, true) - if Int(flags) & Int(1 << 3) != 0 {buffer.appendInt32(481674261) - buffer.appendInt32(Int32(botInfo!.count)) - for item in botInfo! { - item.serialize(buffer, true) - }} - if Int(flags) & Int(1 << 6) != 0 {serializeInt32(pinnedMsgId!, buffer: buffer, boxed: false)} - if Int(flags) & Int(1 << 11) != 0 {serializeInt32(folderId!, buffer: buffer, boxed: false)} - if Int(flags) & Int(1 << 12) != 0 {call!.serialize(buffer, true)} - break case .channelFull(let flags, let id, let about, let participantsCount, let adminsCount, let kickedCount, let bannedCount, let onlineCount, let readInboxMaxId, let readOutboxMaxId, let unreadCount, let chatPhoto, let notifySettings, let exportedInvite, let botInfo, let migratedFromChatId, let migratedFromMaxId, let pinnedMsgId, let stickerset, let availableMinId, let folderId, let linkedChatId, let location, let slowmodeSeconds, let slowmodeNextSendDate, let statsDc, let pts, let call): if boxed { buffer.appendInt32(2055070967) @@ -2268,71 +2282,38 @@ public extension Api { serializeInt32(pts, buffer: buffer, boxed: false) if Int(flags) & Int(1 << 21) != 0 {call!.serialize(buffer, true)} break + case .chatFull(let flags, let id, let about, let participants, let chatPhoto, let notifySettings, let exportedInvite, let botInfo, let pinnedMsgId, let folderId, let call): + if boxed { + buffer.appendInt32(-213431562) + } + serializeInt32(flags, buffer: buffer, boxed: false) + serializeInt32(id, buffer: buffer, boxed: false) + serializeString(about, buffer: buffer, boxed: false) + participants.serialize(buffer, true) + if Int(flags) & Int(1 << 2) != 0 {chatPhoto!.serialize(buffer, true)} + notifySettings.serialize(buffer, true) + if Int(flags) & Int(1 << 13) != 0 {exportedInvite!.serialize(buffer, true)} + if Int(flags) & Int(1 << 3) != 0 {buffer.appendInt32(481674261) + buffer.appendInt32(Int32(botInfo!.count)) + for item in botInfo! { + item.serialize(buffer, true) + }} + if Int(flags) & Int(1 << 6) != 0 {serializeInt32(pinnedMsgId!, buffer: buffer, boxed: false)} + if Int(flags) & Int(1 << 11) != 0 {serializeInt32(folderId!, buffer: buffer, boxed: false)} + if Int(flags) & Int(1 << 12) != 0 {call!.serialize(buffer, true)} + break } } public func descriptionFields() -> (String, [(String, Any)]) { switch self { - case .chatFull(let flags, let id, let about, let participants, let chatPhoto, let notifySettings, let exportedInvite, let botInfo, let pinnedMsgId, let folderId, let call): - return ("chatFull", [("flags", flags), ("id", id), ("about", about), ("participants", participants), ("chatPhoto", chatPhoto), ("notifySettings", notifySettings), ("exportedInvite", exportedInvite), ("botInfo", botInfo), ("pinnedMsgId", pinnedMsgId), ("folderId", folderId), ("call", call)]) case .channelFull(let flags, let id, let about, let participantsCount, let adminsCount, let kickedCount, let bannedCount, let onlineCount, let readInboxMaxId, let readOutboxMaxId, let unreadCount, let chatPhoto, let notifySettings, let exportedInvite, let botInfo, let migratedFromChatId, let migratedFromMaxId, let pinnedMsgId, let stickerset, let availableMinId, let folderId, let linkedChatId, let location, let slowmodeSeconds, let slowmodeNextSendDate, let statsDc, let pts, let call): return ("channelFull", [("flags", flags), ("id", id), ("about", about), ("participantsCount", participantsCount), ("adminsCount", adminsCount), ("kickedCount", kickedCount), ("bannedCount", bannedCount), ("onlineCount", onlineCount), ("readInboxMaxId", readInboxMaxId), ("readOutboxMaxId", readOutboxMaxId), ("unreadCount", unreadCount), ("chatPhoto", chatPhoto), ("notifySettings", notifySettings), ("exportedInvite", exportedInvite), ("botInfo", botInfo), ("migratedFromChatId", migratedFromChatId), ("migratedFromMaxId", migratedFromMaxId), ("pinnedMsgId", pinnedMsgId), ("stickerset", stickerset), ("availableMinId", availableMinId), ("folderId", folderId), ("linkedChatId", linkedChatId), ("location", location), ("slowmodeSeconds", slowmodeSeconds), ("slowmodeNextSendDate", slowmodeNextSendDate), ("statsDc", statsDc), ("pts", pts), ("call", call)]) + case .chatFull(let flags, let id, let about, let participants, let chatPhoto, let notifySettings, let exportedInvite, let botInfo, let pinnedMsgId, let folderId, let call): + return ("chatFull", [("flags", flags), ("id", id), ("about", about), ("participants", participants), ("chatPhoto", chatPhoto), ("notifySettings", notifySettings), ("exportedInvite", exportedInvite), ("botInfo", botInfo), ("pinnedMsgId", pinnedMsgId), ("folderId", folderId), ("call", call)]) } } - public static func parse_chatFull(_ reader: BufferReader) -> ChatFull? { - var _1: Int32? - _1 = reader.readInt32() - var _2: Int32? - _2 = reader.readInt32() - var _3: String? - _3 = parseString(reader) - var _4: Api.ChatParticipants? - if let signature = reader.readInt32() { - _4 = Api.parse(reader, signature: signature) as? Api.ChatParticipants - } - var _5: Api.Photo? - if Int(_1!) & Int(1 << 2) != 0 {if let signature = reader.readInt32() { - _5 = Api.parse(reader, signature: signature) as? Api.Photo - } } - var _6: Api.PeerNotifySettings? - if let signature = reader.readInt32() { - _6 = Api.parse(reader, signature: signature) as? Api.PeerNotifySettings - } - var _7: Api.ExportedChatInvite? - if let signature = reader.readInt32() { - _7 = Api.parse(reader, signature: signature) as? Api.ExportedChatInvite - } - var _8: [Api.BotInfo]? - if Int(_1!) & Int(1 << 3) != 0 {if let _ = reader.readInt32() { - _8 = Api.parseVector(reader, elementSignature: 0, elementType: Api.BotInfo.self) - } } - var _9: Int32? - if Int(_1!) & Int(1 << 6) != 0 {_9 = reader.readInt32() } - var _10: Int32? - if Int(_1!) & Int(1 << 11) != 0 {_10 = reader.readInt32() } - var _11: Api.InputGroupCall? - if Int(_1!) & Int(1 << 12) != 0 {if let signature = reader.readInt32() { - _11 = Api.parse(reader, signature: signature) as? Api.InputGroupCall - } } - let _c1 = _1 != nil - let _c2 = _2 != nil - let _c3 = _3 != nil - let _c4 = _4 != nil - let _c5 = (Int(_1!) & Int(1 << 2) == 0) || _5 != nil - let _c6 = _6 != nil - let _c7 = _7 != nil - let _c8 = (Int(_1!) & Int(1 << 3) == 0) || _8 != nil - let _c9 = (Int(_1!) & Int(1 << 6) == 0) || _9 != nil - let _c10 = (Int(_1!) & Int(1 << 11) == 0) || _10 != nil - let _c11 = (Int(_1!) & Int(1 << 12) == 0) || _11 != nil - if _c1 && _c2 && _c3 && _c4 && _c5 && _c6 && _c7 && _c8 && _c9 && _c10 && _c11 { - return Api.ChatFull.chatFull(flags: _1!, id: _2!, about: _3!, participants: _4!, chatPhoto: _5, notifySettings: _6!, exportedInvite: _7!, botInfo: _8, pinnedMsgId: _9, folderId: _10, call: _11) - } - else { - return nil - } - } public static func parse_channelFull(_ reader: BufferReader) -> ChatFull? { var _1: Int32? _1 = reader.readInt32() @@ -2439,6 +2420,59 @@ public extension Api { return nil } } + public static func parse_chatFull(_ reader: BufferReader) -> ChatFull? { + var _1: Int32? + _1 = reader.readInt32() + var _2: Int32? + _2 = reader.readInt32() + var _3: String? + _3 = parseString(reader) + var _4: Api.ChatParticipants? + if let signature = reader.readInt32() { + _4 = Api.parse(reader, signature: signature) as? Api.ChatParticipants + } + var _5: Api.Photo? + if Int(_1!) & Int(1 << 2) != 0 {if let signature = reader.readInt32() { + _5 = Api.parse(reader, signature: signature) as? Api.Photo + } } + var _6: Api.PeerNotifySettings? + if let signature = reader.readInt32() { + _6 = Api.parse(reader, signature: signature) as? Api.PeerNotifySettings + } + var _7: Api.ExportedChatInvite? + if Int(_1!) & Int(1 << 13) != 0 {if let signature = reader.readInt32() { + _7 = Api.parse(reader, signature: signature) as? Api.ExportedChatInvite + } } + var _8: [Api.BotInfo]? + if Int(_1!) & Int(1 << 3) != 0 {if let _ = reader.readInt32() { + _8 = Api.parseVector(reader, elementSignature: 0, elementType: Api.BotInfo.self) + } } + var _9: Int32? + if Int(_1!) & Int(1 << 6) != 0 {_9 = reader.readInt32() } + var _10: Int32? + if Int(_1!) & Int(1 << 11) != 0 {_10 = reader.readInt32() } + var _11: Api.InputGroupCall? + if Int(_1!) & Int(1 << 12) != 0 {if let signature = reader.readInt32() { + _11 = Api.parse(reader, signature: signature) as? Api.InputGroupCall + } } + let _c1 = _1 != nil + let _c2 = _2 != nil + let _c3 = _3 != nil + let _c4 = _4 != nil + let _c5 = (Int(_1!) & Int(1 << 2) == 0) || _5 != nil + let _c6 = _6 != nil + let _c7 = (Int(_1!) & Int(1 << 13) == 0) || _7 != nil + let _c8 = (Int(_1!) & Int(1 << 3) == 0) || _8 != nil + let _c9 = (Int(_1!) & Int(1 << 6) == 0) || _9 != nil + let _c10 = (Int(_1!) & Int(1 << 11) == 0) || _10 != nil + let _c11 = (Int(_1!) & Int(1 << 12) == 0) || _11 != nil + if _c1 && _c2 && _c3 && _c4 && _c5 && _c6 && _c7 && _c8 && _c9 && _c10 && _c11 { + return Api.ChatFull.chatFull(flags: _1!, id: _2!, about: _3!, participants: _4!, chatPhoto: _5, notifySettings: _6!, exportedInvite: _7, botInfo: _8, pinnedMsgId: _9, folderId: _10, call: _11) + } + else { + return nil + } + } } public enum PollResults: TypeConstructorDescription { @@ -6184,6 +6218,7 @@ public extension Api { case sendMessageRecordRoundAction case sendMessageUploadRoundAction(progress: Int32) case speakingInGroupCallAction + case sendMessageHistoryImportAction(progress: Int32) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { switch self { @@ -6270,6 +6305,12 @@ public extension Api { buffer.appendInt32(-651419003) } + break + case .sendMessageHistoryImportAction(let progress): + if boxed { + buffer.appendInt32(-606432698) + } + serializeInt32(progress, buffer: buffer, boxed: false) break } } @@ -6304,6 +6345,8 @@ public extension Api { return ("sendMessageUploadRoundAction", [("progress", progress)]) case .speakingInGroupCallAction: return ("speakingInGroupCallAction", []) + case .sendMessageHistoryImportAction(let progress): + return ("sendMessageHistoryImportAction", [("progress", progress)]) } } @@ -6389,6 +6432,17 @@ public extension Api { public static func parse_speakingInGroupCallAction(_ reader: BufferReader) -> SendMessageAction? { return Api.SendMessageAction.speakingInGroupCallAction } + public static func parse_sendMessageHistoryImportAction(_ reader: BufferReader) -> SendMessageAction? { + var _1: Int32? + _1 = reader.readInt32() + let _c1 = _1 != nil + if _c1 { + return Api.SendMessageAction.sendMessageHistoryImportAction(progress: _1!) + } + else { + return nil + } + } } public enum PrivacyKey: TypeConstructorDescription { @@ -19113,7 +19167,7 @@ public extension Api { case inputPaymentCredentialsSaved(id: String, tmpPassword: Buffer) case inputPaymentCredentials(flags: Int32, data: Api.DataJSON) case inputPaymentCredentialsApplePay(paymentData: Api.DataJSON) - case inputPaymentCredentialsAndroidPay(paymentToken: Api.DataJSON, googleTransactionId: String) + case inputPaymentCredentialsGooglePay(paymentToken: Api.DataJSON) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { switch self { @@ -19137,12 +19191,11 @@ public extension Api { } paymentData.serialize(buffer, true) break - case .inputPaymentCredentialsAndroidPay(let paymentToken, let googleTransactionId): + case .inputPaymentCredentialsGooglePay(let paymentToken): if boxed { - buffer.appendInt32(-905587442) + buffer.appendInt32(-1966921727) } paymentToken.serialize(buffer, true) - serializeString(googleTransactionId, buffer: buffer, boxed: false) break } } @@ -19155,8 +19208,8 @@ public extension Api { return ("inputPaymentCredentials", [("flags", flags), ("data", data)]) case .inputPaymentCredentialsApplePay(let paymentData): return ("inputPaymentCredentialsApplePay", [("paymentData", paymentData)]) - case .inputPaymentCredentialsAndroidPay(let paymentToken, let googleTransactionId): - return ("inputPaymentCredentialsAndroidPay", [("paymentToken", paymentToken), ("googleTransactionId", googleTransactionId)]) + case .inputPaymentCredentialsGooglePay(let paymentToken): + return ("inputPaymentCredentialsGooglePay", [("paymentToken", paymentToken)]) } } @@ -19203,17 +19256,14 @@ public extension Api { return nil } } - public static func parse_inputPaymentCredentialsAndroidPay(_ reader: BufferReader) -> InputPaymentCredentials? { + public static func parse_inputPaymentCredentialsGooglePay(_ reader: BufferReader) -> InputPaymentCredentials? { var _1: Api.DataJSON? if let signature = reader.readInt32() { _1 = Api.parse(reader, signature: signature) as? Api.DataJSON } - var _2: String? - _2 = parseString(reader) let _c1 = _1 != nil - let _c2 = _2 != nil - if _c1 && _c2 { - return Api.InputPaymentCredentials.inputPaymentCredentialsAndroidPay(paymentToken: _1!, googleTransactionId: _2!) + if _c1 { + return Api.InputPaymentCredentials.inputPaymentCredentialsGooglePay(paymentToken: _1!) } else { return nil @@ -20978,17 +21028,10 @@ public extension Api { } public enum ExportedChatInvite: TypeConstructorDescription { - case chatInviteEmpty case chatInviteExported(flags: Int32, link: String, adminId: Int32, date: Int32, startDate: Int32?, expireDate: Int32?, usageLimit: Int32?, usage: Int32?) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { switch self { - case .chatInviteEmpty: - if boxed { - buffer.appendInt32(1776236393) - } - - break case .chatInviteExported(let flags, let link, let adminId, let date, let startDate, let expireDate, let usageLimit, let usage): if boxed { buffer.appendInt32(1847917725) @@ -21007,16 +21050,11 @@ public extension Api { public func descriptionFields() -> (String, [(String, Any)]) { switch self { - case .chatInviteEmpty: - return ("chatInviteEmpty", []) case .chatInviteExported(let flags, let link, let adminId, let date, let startDate, let expireDate, let usageLimit, let usage): return ("chatInviteExported", [("flags", flags), ("link", link), ("adminId", adminId), ("date", date), ("startDate", startDate), ("expireDate", expireDate), ("usageLimit", usageLimit), ("usage", usage)]) } } - public static func parse_chatInviteEmpty(_ reader: BufferReader) -> ExportedChatInvite? { - return Api.ExportedChatInvite.chatInviteEmpty - } public static func parse_chatInviteExported(_ reader: BufferReader) -> ExportedChatInvite? { var _1: Int32? _1 = reader.readInt32() diff --git a/submodules/TelegramApi/Sources/Api3.swift b/submodules/TelegramApi/Sources/Api3.swift index 84cb1abb7e..80cae41963 100644 --- a/submodules/TelegramApi/Sources/Api3.swift +++ b/submodules/TelegramApi/Sources/Api3.swift @@ -3889,6 +3889,24 @@ public extension Api { }) } + public static func getExportedChatInvites(flags: Int32, peer: Api.InputPeer, adminId: Api.InputUser?, offsetLink: String?, limit: Int32) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { + let buffer = Buffer() + buffer.appendInt32(1838984707) + serializeInt32(flags, buffer: buffer, boxed: false) + peer.serialize(buffer, true) + if Int(flags) & Int(1 << 0) != 0 {adminId!.serialize(buffer, true)} + if Int(flags) & Int(1 << 2) != 0 {serializeString(offsetLink!, buffer: buffer, boxed: false)} + serializeInt32(limit, buffer: buffer, boxed: false) + return (FunctionDescription(name: "messages.getExportedChatInvites", parameters: [("flags", flags), ("peer", peer), ("adminId", adminId), ("offsetLink", offsetLink), ("limit", limit)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.messages.ExportedChatInvites? in + let reader = BufferReader(buffer) + var result: Api.messages.ExportedChatInvites? + if let signature = reader.readInt32() { + result = Api.parse(reader, signature: signature) as? Api.messages.ExportedChatInvites + } + return result + }) + } + public static func exportChatInvite(flags: Int32, peer: Api.InputPeer, expireDate: Int32?, usageLimit: Int32?) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { let buffer = Buffer() buffer.appendInt32(347716823) @@ -3924,42 +3942,6 @@ public extension Api { }) } - public static func getChatInviteImporters(peer: Api.InputPeer, link: String, offsetDate: Int32, offsetUser: Api.InputUser, limit: Int32) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { - let buffer = Buffer() - buffer.appendInt32(654013065) - peer.serialize(buffer, true) - serializeString(link, buffer: buffer, boxed: false) - serializeInt32(offsetDate, buffer: buffer, boxed: false) - offsetUser.serialize(buffer, true) - serializeInt32(limit, buffer: buffer, boxed: false) - return (FunctionDescription(name: "messages.getChatInviteImporters", parameters: [("peer", peer), ("link", link), ("offsetDate", offsetDate), ("offsetUser", offsetUser), ("limit", limit)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.messages.ChatInviteImporters? in - let reader = BufferReader(buffer) - var result: Api.messages.ChatInviteImporters? - if let signature = reader.readInt32() { - result = Api.parse(reader, signature: signature) as? Api.messages.ChatInviteImporters - } - return result - }) - } - - public static func getExportedChatInvites(flags: Int32, peer: Api.InputPeer, adminId: Api.InputUser?, offsetLink: String?, limit: Int32) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { - let buffer = Buffer() - buffer.appendInt32(1838984707) - serializeInt32(flags, buffer: buffer, boxed: false) - peer.serialize(buffer, true) - if Int(flags) & Int(1 << 0) != 0 {adminId!.serialize(buffer, true)} - if Int(flags) & Int(1 << 2) != 0 {serializeString(offsetLink!, buffer: buffer, boxed: false)} - serializeInt32(limit, buffer: buffer, boxed: false) - return (FunctionDescription(name: "messages.getExportedChatInvites", parameters: [("flags", flags), ("peer", peer), ("adminId", adminId), ("offsetLink", offsetLink), ("limit", limit)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.messages.ExportedChatInvites? in - let reader = BufferReader(buffer) - var result: Api.messages.ExportedChatInvites? - if let signature = reader.readInt32() { - result = Api.parse(reader, signature: signature) as? Api.messages.ExportedChatInvites - } - return result - }) - } - public static func deleteRevokedExportedChatInvites(peer: Api.InputPeer) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { let buffer = Buffer() buffer.appendInt32(1375999075) @@ -3989,6 +3971,24 @@ public extension Api { }) } + public static func getChatInviteImporters(peer: Api.InputPeer, link: String, offsetDate: Int32, offsetUser: Api.InputUser, limit: Int32) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { + let buffer = Buffer() + buffer.appendInt32(654013065) + peer.serialize(buffer, true) + serializeString(link, buffer: buffer, boxed: false) + serializeInt32(offsetDate, buffer: buffer, boxed: false) + offsetUser.serialize(buffer, true) + serializeInt32(limit, buffer: buffer, boxed: false) + return (FunctionDescription(name: "messages.getChatInviteImporters", parameters: [("peer", peer), ("link", link), ("offsetDate", offsetDate), ("offsetUser", offsetUser), ("limit", limit)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.messages.ChatInviteImporters? in + let reader = BufferReader(buffer) + var result: Api.messages.ChatInviteImporters? + if let signature = reader.readInt32() { + result = Api.parse(reader, signature: signature) as? Api.messages.ChatInviteImporters + } + return result + }) + } + public static func discardEncryption(flags: Int32, chatId: Int32) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { let buffer = Buffer() buffer.appendInt32(-208425312) @@ -4031,6 +4031,54 @@ public extension Api { return result }) } + + public static func initHistoryImport(peer: Api.InputPeer, file: Api.InputFile, mediaCount: Int32) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { + let buffer = Buffer() + buffer.appendInt32(873008187) + peer.serialize(buffer, true) + file.serialize(buffer, true) + serializeInt32(mediaCount, buffer: buffer, boxed: false) + return (FunctionDescription(name: "messages.initHistoryImport", parameters: [("peer", peer), ("file", file), ("mediaCount", mediaCount)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.messages.HistoryImport? in + let reader = BufferReader(buffer) + var result: Api.messages.HistoryImport? + if let signature = reader.readInt32() { + result = Api.parse(reader, signature: signature) as? Api.messages.HistoryImport + } + return result + }) + } + + public static func uploadImportedMedia(peer: Api.InputPeer, importId: Int64, fileName: String, media: Api.InputMedia) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { + let buffer = Buffer() + buffer.appendInt32(713433234) + peer.serialize(buffer, true) + serializeInt64(importId, buffer: buffer, boxed: false) + serializeString(fileName, buffer: buffer, boxed: false) + media.serialize(buffer, true) + return (FunctionDescription(name: "messages.uploadImportedMedia", parameters: [("peer", peer), ("importId", importId), ("fileName", fileName), ("media", media)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.MessageMedia? in + let reader = BufferReader(buffer) + var result: Api.MessageMedia? + if let signature = reader.readInt32() { + result = Api.parse(reader, signature: signature) as? Api.MessageMedia + } + return result + }) + } + + public static func startHistoryImport(peer: Api.InputPeer, importId: Int64) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { + let buffer = Buffer() + buffer.appendInt32(-1271008444) + peer.serialize(buffer, true) + serializeInt64(importId, buffer: buffer, boxed: false) + return (FunctionDescription(name: "messages.startHistoryImport", parameters: [("peer", peer), ("importId", importId)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.Bool? in + let reader = BufferReader(buffer) + var result: Api.Bool? + if let signature = reader.readInt32() { + result = Api.parse(reader, signature: signature) as? Api.Bool + } + return result + }) + } } public struct channels { public static func readHistory(channel: Api.InputChannel, maxId: Int32) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { diff --git a/submodules/TelegramCore/Sources/AccountStateManagementUtils.swift b/submodules/TelegramCore/Sources/AccountStateManagementUtils.swift index 030589a6b9..7d7093fbb6 100644 --- a/submodules/TelegramCore/Sources/AccountStateManagementUtils.swift +++ b/submodules/TelegramCore/Sources/AccountStateManagementUtils.swift @@ -2554,7 +2554,7 @@ func replayFinalState(accountManager: AccountManager, postbox: Postbox, accountP transaction.updateMessage(messageId, update: { currentMessage in var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = currentMessage.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } var attributes = currentMessage.attributes var found = false @@ -2848,7 +2848,7 @@ func replayFinalState(accountManager: AccountManager, postbox: Postbox, accountP } updatePeerPresences(transaction: transaction, accountPeerId: accountPeerId, peerPresences: presences) case let .UpdateSecretChat(chat, _): - updateSecretChat(encryptionProvider: encryptionProvider, accountPeerId: accountPeerId, transaction: transaction, chat: chat, requestData: nil) + updateSecretChat(encryptionProvider: encryptionProvider, accountPeerId: accountPeerId, transaction: transaction, mediaBox: mediaBox, chat: chat, requestData: nil) case let .AddSecretMessages(messages): for message in messages { let peerId = message.peerId @@ -2917,7 +2917,7 @@ func replayFinalState(accountManager: AccountManager, postbox: Postbox, accountP transaction.updateMessage(id, update: { currentMessage in var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = currentMessage.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } var attributes = currentMessage.attributes loop: for j in 0 ..< attributes.count { @@ -2932,7 +2932,7 @@ func replayFinalState(accountManager: AccountManager, postbox: Postbox, accountP transaction.updateMessage(id, update: { currentMessage in var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = currentMessage.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } var attributes = currentMessage.attributes loop: for j in 0 ..< attributes.count { diff --git a/submodules/TelegramCore/Sources/ApplyMaxReadIndexInteractively.swift b/submodules/TelegramCore/Sources/ApplyMaxReadIndexInteractively.swift index 6de3383d3a..376d192779 100644 --- a/submodules/TelegramCore/Sources/ApplyMaxReadIndexInteractively.swift +++ b/submodules/TelegramCore/Sources/ApplyMaxReadIndexInteractively.swift @@ -23,7 +23,7 @@ func applyMaxReadIndexInteractively(transaction: Transaction, stateManager: Acco transaction.updateMessage(message.id, update: { currentMessage in var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = currentMessage.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } let updatedAttributes = currentMessage.attributes.map({ currentAttribute -> MessageAttribute in if let currentAttribute = currentAttribute as? AutoremoveTimeoutMessageAttribute { @@ -92,7 +92,7 @@ func applySecretOutgoingMessageReadActions(transaction: Transaction, id: Message transaction.updateMessage(message.id, update: { currentMessage in var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = currentMessage.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } let updatedAttributes = currentMessage.attributes.map({ currentAttribute -> MessageAttribute in if let currentAttribute = currentAttribute as? AutoremoveTimeoutMessageAttribute { diff --git a/submodules/TelegramCore/Sources/ApplyUpdateMessage.swift b/submodules/TelegramCore/Sources/ApplyUpdateMessage.swift index 483b116118..548ca80307 100644 --- a/submodules/TelegramCore/Sources/ApplyUpdateMessage.swift +++ b/submodules/TelegramCore/Sources/ApplyUpdateMessage.swift @@ -339,7 +339,7 @@ func applyUpdateGroupMessages(postbox: Postbox, stateManager: AccountStateManage var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = currentMessage.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } if let fromMedia = currentMessage.media.first, let toMedia = media.first { diff --git a/submodules/TelegramCore/Sources/ChatHistoryImport.swift b/submodules/TelegramCore/Sources/ChatHistoryImport.swift new file mode 100644 index 0000000000..f367821351 --- /dev/null +++ b/submodules/TelegramCore/Sources/ChatHistoryImport.swift @@ -0,0 +1,126 @@ +import Foundation +import SwiftSignalKit +import Postbox +import SyncCore +import TelegramCore +import TelegramApi + +public enum ChatHistoryImport { + public struct Session { + fileprivate var peerId: PeerId + fileprivate var inputPeer: Api.InputPeer + fileprivate var id: Int64 + } + + public enum InitImportError { + case generic + } + + public static func initSession(account: Account, peerId: PeerId, file: TempBoxFile, mediaCount: Int32) -> Signal { + return multipartUpload(network: account.network, postbox: account.postbox, source: .tempFile(file), encrypt: false, tag: nil, hintFileSize: nil, hintFileIsLarge: false) + |> mapError { _ -> InitImportError in + return .generic + } + |> mapToSignal { result -> Signal in + switch result { + case let .inputFile(inputFile): + return account.postbox.transaction { transaction -> Api.InputPeer? in + return transaction.getPeer(peerId).flatMap(apiInputPeer) + } + |> castError(InitImportError.self) + |> mapToSignal { inputPeer -> Signal in + guard let inputPeer = inputPeer else { + return .fail(.generic) + } + return account.network.request(Api.functions.messages.initHistoryImport(peer: inputPeer, file: inputFile, mediaCount: mediaCount)) + |> mapError { _ -> InitImportError in + return .generic + } + |> map { result -> Session in + switch result { + case let .historyImport(id): + return Session(peerId: peerId, inputPeer: inputPeer, id: id) + } + } + } + case .progress: + return .complete() + case .inputSecretFile: + return .fail(.generic) + } + } + } + + public enum MediaType { + case photo + case file + case video + case sticker + case voice + } + + public enum UploadMediaError { + case generic + } + + public static func uploadMedia(account: Account, session: Session, file: TempBoxFile, fileName: String, type: MediaType) -> Signal { + return multipartUpload(network: account.network, postbox: account.postbox, source: .tempFile(file), encrypt: false, tag: nil, hintFileSize: nil, hintFileIsLarge: false) + |> mapError { _ -> UploadMediaError in + return .generic + } + |> mapToSignal { result -> Signal in + let inputMedia: Api.InputMedia + switch result { + case let .inputFile(inputFile): + switch type { + case .photo: + inputMedia = .inputMediaUploadedPhoto(flags: 0, file: inputFile, stickers: nil, ttlSeconds: nil) + case .file, .video, .sticker, .voice: + var attributes: [Api.DocumentAttribute] = [] + attributes.append(.documentAttributeFilename(fileName: fileName)) + var mimeType = "application/octet-stream" + switch type { + case .video: + mimeType = "video/mp4" + case .sticker: + mimeType = "image/webp" + case .voice: + mimeType = "audio/ogg" + default: + break + } + inputMedia = .inputMediaUploadedDocument(flags: 0, file: inputFile, thumb: nil, mimeType: mimeType, attributes: attributes, stickers: nil, ttlSeconds: nil) + } + case .progress: + return .complete() + case .inputSecretFile: + return .fail(.generic) + } + return account.network.request(Api.functions.messages.uploadImportedMedia(peer: session.inputPeer, importId: session.id, fileName: fileName, media: inputMedia)) + |> mapError { _ -> UploadMediaError in + return .generic + } + |> mapToSignal { result -> Signal in + return .complete() + } + } + } + + public enum StartImportError { + case generic + } + + public static func startImport(account: Account, session: Session) -> Signal { + return account.network.request(Api.functions.messages.startHistoryImport(peer: session.inputPeer, importId: session.id)) + |> mapError { _ -> StartImportError in + return .generic + } + |> mapToSignal { result -> Signal in + if case .boolTrue = result { + return .complete() + } else { + return .fail(.generic) + } + } + } +} diff --git a/submodules/TelegramCore/Sources/CreateSecretChat.swift b/submodules/TelegramCore/Sources/CreateSecretChat.swift index af89fe7793..cc47c0ae1a 100644 --- a/submodules/TelegramCore/Sources/CreateSecretChat.swift +++ b/submodules/TelegramCore/Sources/CreateSecretChat.swift @@ -35,7 +35,7 @@ public func createSecretChat(account: Account, peerId: PeerId) -> Signal mapToSignal { result -> Signal in return account.postbox.transaction { transaction -> PeerId in - updateSecretChat(encryptionProvider: account.network.encryptionProvider, accountPeerId: account.peerId, transaction: transaction, chat: result, requestData: SecretChatRequestData(g: config.g, p: config.p, a: a)) + updateSecretChat(encryptionProvider: account.network.encryptionProvider, accountPeerId: account.peerId, transaction: transaction, mediaBox: account.postbox.mediaBox, chat: result, requestData: SecretChatRequestData(g: config.g, p: config.p, a: a)) return result.peerId } |> mapError { _ -> CreateSecretChatError in return .generic } diff --git a/submodules/TelegramCore/Sources/EnqueueMessage.swift b/submodules/TelegramCore/Sources/EnqueueMessage.swift index b957258705..9f49b7d50b 100644 --- a/submodules/TelegramCore/Sources/EnqueueMessage.swift +++ b/submodules/TelegramCore/Sources/EnqueueMessage.swift @@ -515,7 +515,7 @@ func enqueueMessages(transaction: Transaction, account: Account, peerId: PeerId, } if let sourceForwardInfo = sourceMessage.forwardInfo { - forwardInfo = StoreMessageForwardInfo(authorId: sourceForwardInfo.author?.id, sourceId: sourceForwardInfo.source?.id, sourceMessageId: sourceForwardInfo.sourceMessageId, date: sourceForwardInfo.date, authorSignature: sourceForwardInfo.authorSignature, psaType: nil) + forwardInfo = StoreMessageForwardInfo(authorId: sourceForwardInfo.author?.id, sourceId: sourceForwardInfo.source?.id, sourceMessageId: sourceForwardInfo.sourceMessageId, date: sourceForwardInfo.date, authorSignature: sourceForwardInfo.authorSignature, psaType: nil, flags: []) } else { if sourceMessage.id.peerId != account.peerId { var hasHiddenForwardMedia = false @@ -545,7 +545,7 @@ func enqueueMessages(transaction: Transaction, account: Account, peerId: PeerId, let psaType: String? = nil - forwardInfo = StoreMessageForwardInfo(authorId: author.id, sourceId: sourceId, sourceMessageId: sourceMessageId, date: sourceMessage.timestamp, authorSignature: authorSignature, psaType: psaType) + forwardInfo = StoreMessageForwardInfo(authorId: author.id, sourceId: sourceId, sourceMessageId: sourceMessageId, date: sourceMessage.timestamp, authorSignature: authorSignature, psaType: psaType, flags: []) } } else { forwardInfo = nil diff --git a/submodules/TelegramCore/Sources/ExportedInvitation.swift b/submodules/TelegramCore/Sources/ExportedInvitation.swift index 013b2692e1..c6960282f5 100644 --- a/submodules/TelegramCore/Sources/ExportedInvitation.swift +++ b/submodules/TelegramCore/Sources/ExportedInvitation.swift @@ -7,8 +7,6 @@ import SyncCore extension ExportedInvitation { init?(apiExportedInvite: Api.ExportedChatInvite) { switch apiExportedInvite { - case .chatInviteEmpty: - return nil case let .chatInviteExported(flags, link, adminId, date, startDate, expireDate, usageLimit, usage): self = ExportedInvitation(link: link, isPermanent: (flags & (1 << 5)) != 0, isRevoked: (flags & (1 << 0)) != 0, adminId: PeerId(namespace: Namespaces.Peer.CloudUser, id: adminId), date: date, startDate: startDate, expireDate: expireDate, usageLimit: usageLimit, count: usage) } diff --git a/submodules/TelegramCore/Sources/HistoryViewStateValidation.swift b/submodules/TelegramCore/Sources/HistoryViewStateValidation.swift index 8c1a349b06..f66c02d007 100644 --- a/submodules/TelegramCore/Sources/HistoryViewStateValidation.swift +++ b/submodules/TelegramCore/Sources/HistoryViewStateValidation.swift @@ -742,7 +742,7 @@ private func validateBatch(postbox: Postbox, network: Network, transaction: Tran } else { var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = currentMessage.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } var attributes = currentMessage.attributes if let channelPts = channelPts { @@ -777,7 +777,7 @@ private func validateBatch(postbox: Postbox, network: Network, transaction: Tran updatedTags.remove(tag) var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = currentMessage.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } var attributes = currentMessage.attributes for i in (0 ..< attributes.count).reversed() { @@ -810,7 +810,7 @@ private func validateBatch(postbox: Postbox, network: Network, transaction: Tran updatedTags.remove(tag) var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = currentMessage.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } var attributes = currentMessage.attributes for i in (0 ..< attributes.count).reversed() { @@ -845,7 +845,7 @@ private func validateBatch(postbox: Postbox, network: Network, transaction: Tran transaction.updateMessage(id, update: { currentMessage in var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = currentMessage.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } var attributes = currentMessage.attributes for i in (0 ..< attributes.count).reversed() { @@ -982,7 +982,7 @@ private func validateReplyThreadBatch(postbox: Postbox, network: Network, transa } else { var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = currentMessage.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } var attributes = currentMessage.attributes if let channelPts = channelPts { diff --git a/submodules/TelegramCore/Sources/ManagedAutoremoveMessageOperations.swift b/submodules/TelegramCore/Sources/ManagedAutoremoveMessageOperations.swift index 76c4ac24b6..e2f09b3ddd 100644 --- a/submodules/TelegramCore/Sources/ManagedAutoremoveMessageOperations.swift +++ b/submodules/TelegramCore/Sources/ManagedAutoremoveMessageOperations.swift @@ -64,7 +64,7 @@ func managedAutoremoveMessageOperations(postbox: Postbox) -> Signal = network.request(Api.functions.messages.deleteChatUser(chatId: peer.id.id, userId: Api.InputUser.inputUserSelf)) - |> map { result -> Api.Updates? in - return result - } - |> `catch` { _ in - return .single(nil) - } - |> mapToSignal { updates in - if let updates = updates { - stateManager.addUpdates(updates) + let deleteUser: Signal + if operation.deleteGloballyIfPossible { + deleteUser = network.request(Api.functions.messages.deleteChat(chatId: peer.id.id)) + |> `catch` { _ in + return .single(.boolFalse) } - return .complete() + |> mapToSignal { _ in + return .complete() + } + } else { + deleteUser = network.request(Api.functions.messages.deleteChatUser(chatId: peer.id.id, userId: Api.InputUser.inputUserSelf)) + |> map { result -> Api.Updates? in + return result + } + |> `catch` { _ in + return .single(nil) + } + |> mapToSignal { updates in + if let updates = updates { + stateManager.addUpdates(updates) + } + return .complete() + } } let reportSignal: Signal if let inputPeer = apiInputPeer(peer), operation.reportChatSpam { diff --git a/submodules/TelegramCore/Sources/ManagedConsumePersonalMessagesActions.swift b/submodules/TelegramCore/Sources/ManagedConsumePersonalMessagesActions.swift index dadf76ac62..63529ce177 100644 --- a/submodules/TelegramCore/Sources/ManagedConsumePersonalMessagesActions.swift +++ b/submodules/TelegramCore/Sources/ManagedConsumePersonalMessagesActions.swift @@ -171,7 +171,7 @@ private func synchronizeConsumeMessageContents(transaction: Transaction, postbox transaction.updateMessage(id, update: { currentMessage in var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = currentMessage.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } var attributes = currentMessage.attributes loop: for j in 0 ..< attributes.count { @@ -197,7 +197,7 @@ private func synchronizeConsumeMessageContents(transaction: Transaction, postbox transaction.updateMessage(id, update: { currentMessage in var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = currentMessage.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } var attributes = currentMessage.attributes loop: for j in 0 ..< attributes.count { diff --git a/submodules/TelegramCore/Sources/ManagedSecretChatOutgoingOperations.swift b/submodules/TelegramCore/Sources/ManagedSecretChatOutgoingOperations.swift index dfd2f79cb4..71fed31221 100644 --- a/submodules/TelegramCore/Sources/ManagedSecretChatOutgoingOperations.swift +++ b/submodules/TelegramCore/Sources/ManagedSecretChatOutgoingOperations.swift @@ -153,8 +153,8 @@ func managedSecretChatOutgoingOperations(auxiliaryMethods: AccountAuxiliaryMetho return sendServiceActionMessage(postbox: postbox, network: network, peerId: entry.peerId, action: .resendOperations(layer: layer, actionGloballyUniqueId: actionGloballyUniqueId, fromSeqNo: fromSeqNo, toSeqNo: toSeqNo), tagLocalIndex: entry.tagLocalIndex, wasDelivered: operation.delivered) case let .screenshotMessages(layer, actionGloballyUniqueId, globallyUniqueIds, messageId): return sendServiceActionMessage(postbox: postbox, network: network, peerId: entry.peerId, action: .screenshotMessages(layer: layer, actionGloballyUniqueId: actionGloballyUniqueId, globallyUniqueIds: globallyUniqueIds, messageId: messageId), tagLocalIndex: entry.tagLocalIndex, wasDelivered: operation.delivered) - case let .terminate(reportSpam): - return requestTerminateSecretChat(postbox: postbox, network: network, peerId: entry.peerId, tagLocalIndex: entry.tagLocalIndex, reportSpam: reportSpam) + case let .terminate(reportSpam, requestRemoteHistoryRemoval): + return requestTerminateSecretChat(postbox: postbox, network: network, peerId: entry.peerId, tagLocalIndex: entry.tagLocalIndex, reportSpam: reportSpam, requestRemoteHistoryRemoval: requestRemoteHistoryRemoval) } } else { assertionFailure() @@ -1479,7 +1479,7 @@ private func sendMessage(auxiliaryMethods: AccountAuxiliaryMethods, postbox: Pos } var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = currentMessage.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } var updatedMedia = currentMessage.media @@ -1567,7 +1567,7 @@ private func sendServiceActionMessage(postbox: Postbox, network: Network, peerId resultTimestamp = timestamp var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = currentMessage.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } return .update(StoreMessage(id: currentMessage.id, globallyUniqueId: currentMessage.globallyUniqueId, groupingKey: currentMessage.groupingKey, threadId: currentMessage.threadId, timestamp: timestamp, flags: flags, tags: currentMessage.tags, globalTags: currentMessage.globalTags, localTags: currentMessage.localTags, forwardInfo: storeForwardInfo, authorId: currentMessage.author?.id, text: currentMessage.text, attributes: currentMessage.attributes, media: currentMessage.media)) }) @@ -1673,8 +1673,12 @@ private func sendBoxedDecryptedMessage(postbox: Postbox, network: Network, peer: } } -private func requestTerminateSecretChat(postbox: Postbox, network: Network, peerId: PeerId, tagLocalIndex: Int32, reportSpam: Bool) -> Signal { - return network.request(Api.functions.messages.discardEncryption(flags: 0, chatId: peerId.id)) +private func requestTerminateSecretChat(postbox: Postbox, network: Network, peerId: PeerId, tagLocalIndex: Int32, reportSpam: Bool, requestRemoteHistoryRemoval: Bool) -> Signal { + var flags: Int32 = 0 + if requestRemoteHistoryRemoval { + flags |= 1 << 0 + } + return network.request(Api.functions.messages.discardEncryption(flags: flags, chatId: peerId.id)) |> map(Optional.init) |> `catch` { _ in return .single(nil) diff --git a/submodules/TelegramCore/Sources/MarkMessageContentAsConsumedInteractively.swift b/submodules/TelegramCore/Sources/MarkMessageContentAsConsumedInteractively.swift index f3cd4a6694..17b4548268 100644 --- a/submodules/TelegramCore/Sources/MarkMessageContentAsConsumedInteractively.swift +++ b/submodules/TelegramCore/Sources/MarkMessageContentAsConsumedInteractively.swift @@ -92,7 +92,7 @@ public func markMessageContentAsConsumedInteractively(postbox: Postbox, messageI transaction.updateMessage(message.id, update: { currentMessage in var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = currentMessage.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } return .update(StoreMessage(id: currentMessage.id, globallyUniqueId: currentMessage.globallyUniqueId, groupingKey: currentMessage.groupingKey, threadId: currentMessage.threadId, timestamp: currentMessage.timestamp, flags: StoreMessageFlags(currentMessage.flags), tags: currentMessage.tags, globalTags: currentMessage.globalTags, localTags: currentMessage.localTags, forwardInfo: storeForwardInfo, authorId: currentMessage.author?.id, text: currentMessage.text, attributes: updatedAttributes, media: currentMessage.media)) }) @@ -151,7 +151,7 @@ func markMessageContentAsConsumedRemotely(transaction: Transaction, messageId: M transaction.updateMessage(message.id, update: { currentMessage in var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = currentMessage.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } return .update(StoreMessage(id: currentMessage.id, globallyUniqueId: currentMessage.globallyUniqueId, groupingKey: currentMessage.groupingKey, threadId: currentMessage.threadId, timestamp: currentMessage.timestamp, flags: StoreMessageFlags(currentMessage.flags), tags: updatedTags, globalTags: currentMessage.globalTags, localTags: currentMessage.localTags, forwardInfo: storeForwardInfo, authorId: currentMessage.author?.id, text: currentMessage.text, attributes: updatedAttributes, media: updatedMedia)) }) diff --git a/submodules/TelegramCore/Sources/MessageReactions.swift b/submodules/TelegramCore/Sources/MessageReactions.swift index ff68ab56fd..139ef2e43e 100644 --- a/submodules/TelegramCore/Sources/MessageReactions.swift +++ b/submodules/TelegramCore/Sources/MessageReactions.swift @@ -12,7 +12,7 @@ public func updateMessageReactionsInteractively(postbox: Postbox, messageId: Mes transaction.updateMessage(messageId, update: { currentMessage in var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = currentMessage.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } var attributes = currentMessage.attributes loop: for j in 0 ..< attributes.count { @@ -71,7 +71,7 @@ private func requestUpdateMessageReaction(postbox: Postbox, network: Network, st transaction.updateMessage(messageId, update: { currentMessage in var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = currentMessage.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } let reactions = mergedMessageReactions(attributes: currentMessage.attributes) var attributes = currentMessage.attributes @@ -211,7 +211,7 @@ private func synchronizeMessageReactions(transaction: Transaction, postbox: Post transaction.updateMessage(id, update: { currentMessage in var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = currentMessage.forwardInfo { - storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType) + storeForwardInfo = StoreMessageForwardInfo(authorId: forwardInfo.author?.id, sourceId: forwardInfo.source?.id, sourceMessageId: forwardInfo.sourceMessageId, date: forwardInfo.date, authorSignature: forwardInfo.authorSignature, psaType: forwardInfo.psaType, flags: forwardInfo.flags) } var attributes = currentMessage.attributes loop: for j in 0 ..< attributes.count { diff --git a/submodules/TelegramCore/Sources/MessageUtils.swift b/submodules/TelegramCore/Sources/MessageUtils.swift index 3c84ab7aa9..493018d8e5 100644 --- a/submodules/TelegramCore/Sources/MessageUtils.swift +++ b/submodules/TelegramCore/Sources/MessageUtils.swift @@ -159,7 +159,7 @@ func locallyRenderedMessage(message: StoreMessage, peers: [PeerId: Peer]) -> Mes var forwardInfo: MessageForwardInfo? if let info = message.forwardInfo { - forwardInfo = MessageForwardInfo(author: info.authorId.flatMap({ peers[$0] }), source: info.sourceId.flatMap({ peers[$0] }), sourceMessageId: info.sourceMessageId, date: info.date, authorSignature: info.authorSignature, psaType: info.psaType) + forwardInfo = MessageForwardInfo(author: info.authorId.flatMap({ peers[$0] }), source: info.sourceId.flatMap({ peers[$0] }), sourceMessageId: info.sourceMessageId, date: info.date, authorSignature: info.authorSignature, psaType: info.psaType, flags: info.flags) if let author = forwardInfo?.author { messagePeers[author.id] = author } diff --git a/submodules/TelegramCore/Sources/MultipartUpload.swift b/submodules/TelegramCore/Sources/MultipartUpload.swift index ac1246a68b..9da058949b 100644 --- a/submodules/TelegramCore/Sources/MultipartUpload.swift +++ b/submodules/TelegramCore/Sources/MultipartUpload.swift @@ -361,6 +361,7 @@ public enum MultipartUploadSource { case resource(MediaResourceReference) case data(Data) case custom(Signal) + case tempFile(TempBoxFile) } enum MultipartUploadError { @@ -395,6 +396,15 @@ func multipartUpload(network: Network, postbox: Postbox, source: MultipartUpload headerSize = resource.resource.headerSize fetchedResource = fetchedMediaResource(mediaBox: postbox.mediaBox, reference: resource) |> map { _ in } + case let .tempFile(file): + if let size = fileSize(file.path) { + dataSignal = .single(.resourceData(MediaResourceData(path: file.path, offset: 0, size: size, complete: true))) + headerSize = 0 + fetchedResource = .complete() + } else { + subscriber.putError(.generic) + return EmptyDisposable + } case let .data(data): dataSignal = .single(.data(data)) headerSize = 0 diff --git a/submodules/TelegramCore/Sources/PeerInputActivity.swift b/submodules/TelegramCore/Sources/PeerInputActivity.swift index d59fa5bb88..36ff067c50 100644 --- a/submodules/TelegramCore/Sources/PeerInputActivity.swift +++ b/submodules/TelegramCore/Sources/PeerInputActivity.swift @@ -63,6 +63,8 @@ extension PeerInputActivity { self = .uploadingInstantVideo(progress: progress) case .speakingInGroupCallAction: self = .speakingInGroupCall(timestamp: timestamp) + case let .sendMessageHistoryImportAction(progress): + return nil } } } diff --git a/submodules/TelegramCore/Sources/PeerUtils.swift b/submodules/TelegramCore/Sources/PeerUtils.swift index 6ed76ec717..3762b88beb 100644 --- a/submodules/TelegramCore/Sources/PeerUtils.swift +++ b/submodules/TelegramCore/Sources/PeerUtils.swift @@ -254,4 +254,13 @@ public extension PeerId { return false } } + + var isImport: Bool { + if self.namespace == Namespaces.Peer.CloudUser { + if self.id == 225079 { + return true + } + } + return false + } } diff --git a/submodules/TelegramCore/Sources/PendingMessageManager.swift b/submodules/TelegramCore/Sources/PendingMessageManager.swift index 797d6a5598..7ae1f9580f 100644 --- a/submodules/TelegramCore/Sources/PendingMessageManager.swift +++ b/submodules/TelegramCore/Sources/PendingMessageManager.swift @@ -110,7 +110,7 @@ private func failMessages(postbox: Postbox, ids: [MessageId]) -> Signal (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[90]!, self._r[90]!, [_0]) + return formatWithArgumentRanges(self._s[91]!, self._r[91]!, [_0]) } - public var UserInfo_BotHelp: String { return self._s[92]! } - public var Passport_Identity_MainPage: String { return self._s[94]! } - public var LogoutOptions_ContactSupportText: String { return self._s[95]! } + public var UserInfo_BotHelp: String { return self._s[93]! } + public var Passport_Identity_MainPage: String { return self._s[95]! } + public var LogoutOptions_ContactSupportText: String { return self._s[96]! } public func VoiceOver_Chat_Title(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[96]!, self._r[96]!, [_0]) + return formatWithArgumentRanges(self._s[97]!, self._r[97]!, [_0]) } - public var StickerPack_ShowStickers: String { return self._s[98]! } - public var AttachmentMenu_PhotoOrVideo: String { return self._s[99]! } - public var Map_Satellite: String { return self._s[100]! } - public var Passport_Identity_MainPageHelp: String { return self._s[101]! } - public var Profile_About: String { return self._s[103]! } - public var Group_Setup_TypePrivate: String { return self._s[104]! } - public var Notifications_ChannelNotifications: String { return self._s[105]! } - public var Call_VoiceOver_VoiceCallIncoming: String { return self._s[106]! } + public var StickerPack_ShowStickers: String { return self._s[99]! } + public var AttachmentMenu_PhotoOrVideo: String { return self._s[100]! } + public var Map_Satellite: String { return self._s[101]! } + public var Passport_Identity_MainPageHelp: String { return self._s[102]! } + public var Profile_About: String { return self._s[104]! } + public var Group_Setup_TypePrivate: String { return self._s[105]! } + public var Notifications_ChannelNotifications: String { return self._s[106]! } + public var Call_VoiceOver_VoiceCallIncoming: String { return self._s[107]! } public func Login_WillCallYou(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[107]!, self._r[107]!, [_0]) + return formatWithArgumentRanges(self._s[108]!, self._r[108]!, [_0]) } - public var WallpaperPreview_Motion: String { return self._s[108]! } - public var Message_VideoMessage: String { return self._s[109]! } - public var SharedMedia_CategoryOther: String { return self._s[110]! } - public var Passport_FieldIdentityUploadHelp: String { return self._s[111]! } - public var PUSH_REMINDER_TITLE: String { return self._s[112]! } - public var Appearance_ThemePreview_Chat_3_Text: String { return self._s[114]! } - public var Login_ResetAccountProtected_Reset: String { return self._s[116]! } - public var Passport_Identity_TypeInternalPassportUploadScan: String { return self._s[117]! } + public var WallpaperPreview_Motion: String { return self._s[109]! } + public var Message_VideoMessage: String { return self._s[110]! } + public var SharedMedia_CategoryOther: String { return self._s[111]! } + public var Passport_FieldIdentityUploadHelp: String { return self._s[112]! } + public var PUSH_REMINDER_TITLE: String { return self._s[113]! } + public var Appearance_ThemePreview_Chat_3_Text: String { return self._s[115]! } + public var Login_ResetAccountProtected_Reset: String { return self._s[117]! } + public var Passport_Identity_TypeInternalPassportUploadScan: String { return self._s[118]! } public func Location_ProximityNotification_Notify(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[118]!, self._r[118]!, [_0]) + return formatWithArgumentRanges(self._s[119]!, self._r[119]!, [_0]) } - public var ChatList_PeerTypeContact: String { return self._s[119]! } - public var Stickers_SuggestAll: String { return self._s[121]! } - public var EmptyGroupInfo_Line3: String { return self._s[122]! } - public var Login_InvalidPhoneError: String { return self._s[123]! } - public var MediaPicker_GroupDescription: String { return self._s[124]! } - public var NetworkUsageSettings_MediaDocumentDataSection: String { return self._s[125]! } - public var Conversation_PrivateChannelTimeLimitedAlertText: String { return self._s[126]! } - public var PrivateDataSettings_Title: String { return self._s[127]! } - public var SecretChat_Title: String { return self._s[128]! } - public var Privacy_ChatsTitle: String { return self._s[129]! } - public var EditProfile_NameAndPhotoHelp: String { return self._s[130]! } - public var Watch_MessageView_Forward: String { return self._s[132]! } - public var ChannelMembers_WhoCanAddMembers_AllMembers: String { return self._s[133]! } + public var ChatList_PeerTypeContact: String { return self._s[120]! } + public var Stickers_SuggestAll: String { return self._s[122]! } + public var EmptyGroupInfo_Line3: String { return self._s[123]! } + public var Login_InvalidPhoneError: String { return self._s[124]! } + public var MediaPicker_GroupDescription: String { return self._s[125]! } + public var NetworkUsageSettings_MediaDocumentDataSection: String { return self._s[126]! } + public var Conversation_PrivateChannelTimeLimitedAlertText: String { return self._s[127]! } + public var PrivateDataSettings_Title: String { return self._s[128]! } + public var SecretChat_Title: String { return self._s[129]! } + public var Privacy_ChatsTitle: String { return self._s[130]! } + public var EditProfile_NameAndPhotoHelp: String { return self._s[131]! } + public var Watch_MessageView_Forward: String { return self._s[133]! } + public var ChannelMembers_WhoCanAddMembers_AllMembers: String { return self._s[134]! } public func PUSH_PINNED_QUIZ(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[134]!, self._r[134]!, [_1, _2]) + return formatWithArgumentRanges(self._s[135]!, self._r[135]!, [_1, _2]) } public func Channel_AdminLog_EndedVoiceChat(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[135]!, self._r[135]!, [_1]) + return formatWithArgumentRanges(self._s[136]!, self._r[136]!, [_1]) } - public var PhotoEditor_DiscardChanges: String { return self._s[136]! } - public var SocksProxySetup_AdNoticeHelp: String { return self._s[137]! } - public var Date_DialogDateFormat: String { return self._s[138]! } - public var SettingsSearch_Synonyms_Proxy_Title: String { return self._s[139]! } - public var Notifications_AlertTones: String { return self._s[140]! } - public var Permissions_SiriAllow_v0: String { return self._s[141]! } - public var Tour_StartButton: String { return self._s[142]! } - public var Stats_InstantViewInteractionsTitle: String { return self._s[143]! } - public var UserInfo_ScamUserWarning: String { return self._s[146]! } - public var NotificationsSound_Chime: String { return self._s[147]! } - public var Update_Skip: String { return self._s[148]! } + public var PhotoEditor_DiscardChanges: String { return self._s[137]! } + public var SocksProxySetup_AdNoticeHelp: String { return self._s[138]! } + public var Date_DialogDateFormat: String { return self._s[139]! } + public var SettingsSearch_Synonyms_Proxy_Title: String { return self._s[140]! } + public var Notifications_AlertTones: String { return self._s[141]! } + public var Permissions_SiriAllow_v0: String { return self._s[142]! } + public var Tour_StartButton: String { return self._s[143]! } + public var Stats_InstantViewInteractionsTitle: String { return self._s[144]! } + public var UserInfo_ScamUserWarning: String { return self._s[147]! } + public var NotificationsSound_Chime: String { return self._s[148]! } + public var Update_Skip: String { return self._s[149]! } public func ChannelInfo_ChannelForbidden(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[149]!, self._r[149]!, [_0]) + return formatWithArgumentRanges(self._s[150]!, self._r[150]!, [_0]) } - public var SettingsSearch_Synonyms_EditProfile_PhoneNumber: String { return self._s[150]! } - public var Notifications_PermissionsTitle: String { return self._s[151]! } - public var Channel_AdminLog_BanSendMedia: String { return self._s[152]! } - public var Notifications_Badge_CountUnreadMessages: String { return self._s[153]! } - public var Appearance_AppIcon: String { return self._s[154]! } - public var Passport_Identity_FilesUploadNew: String { return self._s[155]! } + public var SettingsSearch_Synonyms_EditProfile_PhoneNumber: String { return self._s[151]! } + public var Notifications_PermissionsTitle: String { return self._s[152]! } + public var Channel_AdminLog_BanSendMedia: String { return self._s[153]! } + public var Notifications_Badge_CountUnreadMessages: String { return self._s[154]! } + public var Appearance_AppIcon: String { return self._s[155]! } + public var Passport_Identity_FilesUploadNew: String { return self._s[156]! } public func Passport_Email_UseTelegramEmail(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[156]!, self._r[156]!, [_0]) + return formatWithArgumentRanges(self._s[157]!, self._r[157]!, [_0]) } - public var CreatePoll_QuizTitle: String { return self._s[157]! } - public var DialogList_DeleteConversationConfirmation: String { return self._s[158]! } - public var NotificationsSound_Calypso: String { return self._s[159]! } - public var ChannelMembers_GroupAdminsTitle: String { return self._s[160]! } - public var Checkout_NewCard_PaymentCard: String { return self._s[161]! } - public var Wallpaper_SetCustomBackground: String { return self._s[163]! } - public var Conversation_ContextMenuOpenProfile: String { return self._s[164]! } + public var CreatePoll_QuizTitle: String { return self._s[158]! } + public var DialogList_DeleteConversationConfirmation: String { return self._s[159]! } + public var NotificationsSound_Calypso: String { return self._s[160]! } + public var ChannelMembers_GroupAdminsTitle: String { return self._s[161]! } + public var Checkout_NewCard_PaymentCard: String { return self._s[162]! } + public var Wallpaper_SetCustomBackground: String { return self._s[164]! } + public var Conversation_ContextMenuOpenProfile: String { return self._s[165]! } public func PUSH_MESSAGE_VIDEO_SECRET(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[166]!, self._r[166]!, [_1]) + return formatWithArgumentRanges(self._s[167]!, self._r[167]!, [_1]) } - public var AuthSessions_Terminate: String { return self._s[167]! } - public var ShareFileTip_CloseTip: String { return self._s[168]! } - public var ChatSettings_DownloadInBackgroundInfo: String { return self._s[169]! } - public var Channel_Moderator_AccessLevelRevoke: String { return self._s[170]! } - public var Channel_AdminLogFilter_EventsDeletedMessages: String { return self._s[171]! } - public var Passport_Language_fr: String { return self._s[172]! } + public var AuthSessions_Terminate: String { return self._s[168]! } + public var ShareFileTip_CloseTip: String { return self._s[169]! } + public var ChatSettings_DownloadInBackgroundInfo: String { return self._s[170]! } + public var Channel_Moderator_AccessLevelRevoke: String { return self._s[171]! } + public var Channel_AdminLogFilter_EventsDeletedMessages: String { return self._s[172]! } + public var Passport_Language_fr: String { return self._s[173]! } public func Watch_Time_ShortTodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[174]!, self._r[174]!, [_0]) + return formatWithArgumentRanges(self._s[175]!, self._r[175]!, [_0]) } - public var Passport_Identity_TypeIdentityCard: String { return self._s[175]! } - public var VoiceChat_MuteForMe: String { return self._s[176]! } + public var Passport_Identity_TypeIdentityCard: String { return self._s[176]! } + public var VoiceChat_MuteForMe: String { return self._s[177]! } public func Conversation_OpenBotLinkAllowMessages(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[177]!, self._r[177]!, [_0]) + return formatWithArgumentRanges(self._s[178]!, self._r[178]!, [_0]) } - public var ReportPeer_ReasonCopyright: String { return self._s[178]! } - public var Permissions_PeopleNearbyText_v0: String { return self._s[180]! } - public var Channel_Stickers_NotFoundHelp: String { return self._s[181]! } - public var Passport_Identity_AddDriversLicense: String { return self._s[182]! } - public var AutoDownloadSettings_AutodownloadFiles: String { return self._s[183]! } - public var Permissions_SiriAllowInSettings_v0: String { return self._s[184]! } - public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[185]! } - public var Map_LocatingError: String { return self._s[187]! } - public var ChatSettings_AutoDownloadSettings_TypePhoto: String { return self._s[188]! } + public var ReportPeer_ReasonCopyright: String { return self._s[179]! } + public var Permissions_PeopleNearbyText_v0: String { return self._s[181]! } + public var Channel_Stickers_NotFoundHelp: String { return self._s[182]! } + public var Passport_Identity_AddDriversLicense: String { return self._s[183]! } + public var AutoDownloadSettings_AutodownloadFiles: String { return self._s[184]! } + public var Permissions_SiriAllowInSettings_v0: String { return self._s[185]! } + public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[186]! } + public var Map_LocatingError: String { return self._s[188]! } + public var ChatSettings_AutoDownloadSettings_TypePhoto: String { return self._s[189]! } public func VoiceOver_Chat_MusicFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[190]!, self._r[190]!, [_0]) - } - public func Contacts_AccessDeniedHelpLandscape(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[191]!, self._r[191]!, [_0]) } - public var Channel_AdminLog_EmptyFilterText: String { return self._s[192]! } - public var Login_SmsRequestState2: String { return self._s[193]! } - public var Conversation_Unmute: String { return self._s[195]! } - public var TwoFactorSetup_Intro_Text: String { return self._s[196]! } - public var Channel_AdminLog_BanSendMessages: String { return self._s[197]! } + public func Contacts_AccessDeniedHelpLandscape(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[192]!, self._r[192]!, [_0]) + } + public var Channel_AdminLog_EmptyFilterText: String { return self._s[193]! } + public var Login_SmsRequestState2: String { return self._s[194]! } + public var Conversation_Unmute: String { return self._s[196]! } + public var TwoFactorSetup_Intro_Text: String { return self._s[197]! } + public var Channel_AdminLog_BanSendMessages: String { return self._s[198]! } public func Channel_Management_RemovedBy(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[198]!, self._r[198]!, [_0]) + return formatWithArgumentRanges(self._s[199]!, self._r[199]!, [_0]) } - public var AccessDenied_LocationDenied: String { return self._s[199]! } - public var Share_AuthTitle: String { return self._s[200]! } - public var Month_ShortAugust: String { return self._s[201]! } + public var AccessDenied_LocationDenied: String { return self._s[200]! } + public var Share_AuthTitle: String { return self._s[201]! } + public var Month_ShortAugust: String { return self._s[202]! } public func Notification_PinnedDeletedMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[202]!, self._r[202]!, [_0]) + return formatWithArgumentRanges(self._s[203]!, self._r[203]!, [_0]) } - public var Channel_BanUser_PermissionSendMedia: String { return self._s[203]! } - public var SettingsSearch_Synonyms_Data_DownloadInBackground: String { return self._s[204]! } + public var Channel_BanUser_PermissionSendMedia: String { return self._s[204]! } + public var SettingsSearch_Synonyms_Data_DownloadInBackground: String { return self._s[205]! } public func PUSH_CONTACT_JOINED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[205]!, self._r[205]!, [_1]) + return formatWithArgumentRanges(self._s[206]!, self._r[206]!, [_1]) } - public var WallpaperSearch_ColorTitle: String { return self._s[207]! } - public var Wallpaper_Search: String { return self._s[208]! } - public var ClearCache_StorageUsage: String { return self._s[209]! } - public var CreatePoll_TextPlaceholder: String { return self._s[210]! } - public var Conversation_EditingMessagePanelTitle: String { return self._s[211]! } - public var Channel_EditAdmin_PermissionBanUsers: String { return self._s[212]! } - public var OldChannels_NoticeCreateText: String { return self._s[213]! } - public var ProfilePhoto_MainVideo: String { return self._s[214]! } - public var VoiceChat_StatusListening: String { return self._s[215]! } - public var UserInfo_NotificationsDisabled: String { return self._s[216]! } - public var Map_Unknown: String { return self._s[217]! } - public var Notifications_MessageNotificationsAlert: String { return self._s[218]! } - public var Conversation_StopQuiz: String { return self._s[219]! } - public var Checkout_LiabilityAlertTitle: String { return self._s[220]! } + public var WallpaperSearch_ColorTitle: String { return self._s[208]! } + public var Wallpaper_Search: String { return self._s[209]! } + public var ClearCache_StorageUsage: String { return self._s[210]! } + public var CreatePoll_TextPlaceholder: String { return self._s[211]! } + public var Conversation_EditingMessagePanelTitle: String { return self._s[212]! } + public var Channel_EditAdmin_PermissionBanUsers: String { return self._s[213]! } + public var OldChannels_NoticeCreateText: String { return self._s[214]! } + public var ProfilePhoto_MainVideo: String { return self._s[215]! } + public var VoiceChat_StatusListening: String { return self._s[216]! } + public var UserInfo_NotificationsDisabled: String { return self._s[217]! } + public var Map_Unknown: String { return self._s[218]! } + public var Notifications_MessageNotificationsAlert: String { return self._s[219]! } + public var Conversation_StopQuiz: String { return self._s[220]! } + public var Checkout_LiabilityAlertTitle: String { return self._s[221]! } public func Username_UsernameIsAvailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[221]!, self._r[221]!, [_0]) + return formatWithArgumentRanges(self._s[222]!, self._r[222]!, [_0]) } - public var CreatePoll_OptionPlaceholder: String { return self._s[222]! } - public var Conversation_RestrictedStickers: String { return self._s[223]! } - public var MemberSearch_BotSection: String { return self._s[225]! } - public var Channel_Management_AddModeratorHelp: String { return self._s[227]! } - public var MaskStickerSettings_Title: String { return self._s[228]! } - public var ShareMenu_Comment: String { return self._s[229]! } - public var GroupInfo_Notifications: String { return self._s[230]! } - public var CheckoutInfo_ReceiverInfoTitle: String { return self._s[231]! } + public var CreatePoll_OptionPlaceholder: String { return self._s[223]! } + public var Conversation_RestrictedStickers: String { return self._s[224]! } + public var MemberSearch_BotSection: String { return self._s[226]! } + public var Channel_Management_AddModeratorHelp: String { return self._s[228]! } + public var MaskStickerSettings_Title: String { return self._s[229]! } + public var ShareMenu_Comment: String { return self._s[230]! } + public var GroupInfo_Notifications: String { return self._s[231]! } + public var CheckoutInfo_ReceiverInfoTitle: String { return self._s[232]! } public func DialogList_EncryptedChatStartedOutgoing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[232]!, self._r[232]!, [_0]) + return formatWithArgumentRanges(self._s[233]!, self._r[233]!, [_0]) } - public var Conversation_ContextMenuCopyLink: String { return self._s[233]! } - public var VoiceChat_MutedHelp: String { return self._s[236]! } - public var ChatListFolder_CategoryMuted: String { return self._s[237]! } - public var TwoStepAuth_AddHintDescription: String { return self._s[238]! } + public var Conversation_ContextMenuCopyLink: String { return self._s[234]! } + public var VoiceChat_MutedHelp: String { return self._s[237]! } + public var ChatListFolder_CategoryMuted: String { return self._s[238]! } + public var TwoStepAuth_AddHintDescription: String { return self._s[239]! } public func VoiceOver_Chat_Duration(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[239]!, self._r[239]!, [_0]) + return formatWithArgumentRanges(self._s[240]!, self._r[240]!, [_0]) } - public var Conversation_ClousStorageInfo_Description3: String { return self._s[240]! } - public var Contacts_SortByPresence: String { return self._s[241]! } - public var Watch_Location_Access: String { return self._s[242]! } - public var WallpaperPreview_CustomColorTopText: String { return self._s[243]! } - public var Passport_Address_TypeBankStatement: String { return self._s[244]! } - public var Group_Username_RevokeExistingUsernamesInfo: String { return self._s[245]! } - public var Conversation_ClearPrivateHistory: String { return self._s[246]! } - public var ChatList_Mute: String { return self._s[249]! } - public var Channel_AdminLog_CanDeleteMessagesOfOthers: String { return self._s[250]! } - public var Stats_PostsTitle: String { return self._s[251]! } - public var Paint_Masks: String { return self._s[253]! } - public var PasscodeSettings_TryAgainIn1Minute: String { return self._s[255]! } - public var Chat_AttachmentLimitReached: String { return self._s[256]! } - public var StickerPackActionInfo_ArchivedTitle: String { return self._s[257]! } - public var Watch_Stickers_StickerPacks: String { return self._s[259]! } - public var Channel_Setup_Title: String { return self._s[260]! } - public var GroupInfo_Administrators: String { return self._s[261]! } - public var NotificationSettings_ShowNotificationsAllAccountsInfoOff: String { return self._s[263]! } - public var Conversation_ContextMenuDiscuss: String { return self._s[264]! } - public var StickerPack_BuiltinPackName: String { return self._s[265]! } - public var TwoStepAuth_RecoveryEmailChangeDescription: String { return self._s[267]! } - public var Checkout_ShippingMethod: String { return self._s[269]! } - public var ClearCache_FreeSpace: String { return self._s[270]! } - public var EditTheme_Expand_Preview_IncomingReplyText: String { return self._s[271]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsSound: String { return self._s[274]! } + public var Conversation_ClousStorageInfo_Description3: String { return self._s[241]! } + public var Contacts_SortByPresence: String { return self._s[242]! } + public var Watch_Location_Access: String { return self._s[243]! } + public var WallpaperPreview_CustomColorTopText: String { return self._s[244]! } + public var Passport_Address_TypeBankStatement: String { return self._s[245]! } + public var Group_Username_RevokeExistingUsernamesInfo: String { return self._s[246]! } + public var Conversation_ClearPrivateHistory: String { return self._s[247]! } + public var ChatList_Mute: String { return self._s[250]! } + public var Channel_AdminLog_CanDeleteMessagesOfOthers: String { return self._s[251]! } + public var Stats_PostsTitle: String { return self._s[252]! } + public var Paint_Masks: String { return self._s[254]! } + public var PasscodeSettings_TryAgainIn1Minute: String { return self._s[256]! } + public var Chat_AttachmentLimitReached: String { return self._s[257]! } + public var StickerPackActionInfo_ArchivedTitle: String { return self._s[258]! } + public var Watch_Stickers_StickerPacks: String { return self._s[260]! } + public var Channel_Setup_Title: String { return self._s[261]! } + public var GroupInfo_Administrators: String { return self._s[262]! } + public var NotificationSettings_ShowNotificationsAllAccountsInfoOff: String { return self._s[264]! } + public var Conversation_ContextMenuDiscuss: String { return self._s[265]! } + public var StickerPack_BuiltinPackName: String { return self._s[266]! } + public var TwoStepAuth_RecoveryEmailChangeDescription: String { return self._s[268]! } + public var Checkout_ShippingMethod: String { return self._s[270]! } + public var ClearCache_FreeSpace: String { return self._s[271]! } + public var EditTheme_Expand_Preview_IncomingReplyText: String { return self._s[272]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsSound: String { return self._s[275]! } public func TwoStepAuth_ConfirmEmailDescription(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[275]!, self._r[275]!, [_1]) + return formatWithArgumentRanges(self._s[276]!, self._r[276]!, [_1]) } - public var Conversation_typing: String { return self._s[276]! } + public var Conversation_typing: String { return self._s[277]! } public func PrivacySettings_LastSeenContactsMinus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[278]!, self._r[278]!, [_0]) + return formatWithArgumentRanges(self._s[279]!, self._r[279]!, [_0]) } - public var WebSearch_RecentSectionTitle: String { return self._s[279]! } - public var VoiceChat_EndConfirmationTitle: String { return self._s[280]! } - public var ChatList_UnhideAction: String { return self._s[282]! } - public var PasscodeSettings_6DigitCode: String { return self._s[283]! } - public var CallFeedback_AddComment: String { return self._s[284]! } - public var LoginPassword_PasswordHelp: String { return self._s[285]! } - public var Call_Flip: String { return self._s[286]! } - public var Weekday_ShortWednesday: String { return self._s[288]! } - public var VoiceOver_Chat_PollFinalResults: String { return self._s[289]! } - public var PeerInfo_ButtonAddMember: String { return self._s[290]! } - public var Call_Decline: String { return self._s[292]! } - public var VoiceChat_InviteMemberToGroupFirstAdd: String { return self._s[293]! } - public var Join_ChannelsTooMuch: String { return self._s[295]! } + public var WebSearch_RecentSectionTitle: String { return self._s[280]! } + public var VoiceChat_EndConfirmationTitle: String { return self._s[281]! } + public var ChatList_UnhideAction: String { return self._s[283]! } + public var PasscodeSettings_6DigitCode: String { return self._s[284]! } + public var CallFeedback_AddComment: String { return self._s[285]! } + public var LoginPassword_PasswordHelp: String { return self._s[286]! } + public var Call_Flip: String { return self._s[287]! } + public var Weekday_ShortWednesday: String { return self._s[289]! } + public var VoiceOver_Chat_PollFinalResults: String { return self._s[290]! } + public var PeerInfo_ButtonAddMember: String { return self._s[291]! } + public var Call_Decline: String { return self._s[293]! } + public var VoiceChat_InviteMemberToGroupFirstAdd: String { return self._s[294]! } + public var Join_ChannelsTooMuch: String { return self._s[296]! } public func PUSH_CHANNEL_MESSAGE_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[296]!, self._r[296]!, [_1]) + return formatWithArgumentRanges(self._s[297]!, self._r[297]!, [_1]) } - public var Passport_Identity_Selfie: String { return self._s[297]! } - public var Privacy_ContactsTitle: String { return self._s[298]! } - public var GroupInfo_InviteLink_Title: String { return self._s[300]! } - public var TwoFactorSetup_Password_PlaceholderPassword: String { return self._s[301]! } - public var Conversation_OpenFile: String { return self._s[302]! } - public var Map_SetThisPlace: String { return self._s[303]! } - public var Channel_Info_Management: String { return self._s[304]! } - public var Passport_Language_hr: String { return self._s[305]! } - public var VoiceChat_Title: String { return self._s[306]! } - public var EditTheme_Edit_Preview_IncomingText: String { return self._s[309]! } - public var OpenFile_Proceed: String { return self._s[310]! } - public var Conversation_SecretChatContextBotAlert: String { return self._s[312]! } - public var GroupInfo_Permissions_SlowmodeValue_Off: String { return self._s[313]! } - public var Privacy_Calls_P2PContacts: String { return self._s[314]! } - public var Appearance_PickAccentColor: String { return self._s[315]! } - public var MediaPicker_TapToUngroupDescription: String { return self._s[316]! } - public var Localization_EnglishLanguageName: String { return self._s[317]! } - public var Stickers_SuggestStickers: String { return self._s[318]! } - public var Passport_Language_ko: String { return self._s[319]! } - public var Settings_ProxyDisabled: String { return self._s[320]! } - public var PrivacySettings_PasscodeOff: String { return self._s[321]! } - public var Undo_LeftChannel: String { return self._s[322]! } - public var Appearance_AutoNightThemeDisabled: String { return self._s[323]! } - public var TextFormat_Bold: String { return self._s[324]! } - public var Login_InfoTitle: String { return self._s[325]! } - public var Channel_BanUser_PermissionSendPolls: String { return self._s[326]! } - public var Settings_AddAnotherAccount: String { return self._s[327]! } - public var GroupPermission_NewTitle: String { return self._s[328]! } - public var Login_SelectCountry_Title: String { return self._s[329]! } - public var Cache_ServiceFiles: String { return self._s[330]! } - public var Passport_Language_nl: String { return self._s[331]! } - public var Contacts_TopSection: String { return self._s[332]! } - public var Passport_Identity_DateOfBirthPlaceholder: String { return self._s[333]! } - public var VoiceChat_StatusInvited: String { return self._s[335]! } - public var Conversation_ContextMenuReport: String { return self._s[336]! } + public var Passport_Identity_Selfie: String { return self._s[298]! } + public var Privacy_ContactsTitle: String { return self._s[299]! } + public var GroupInfo_InviteLink_Title: String { return self._s[301]! } + public var TwoFactorSetup_Password_PlaceholderPassword: String { return self._s[302]! } + public var Conversation_OpenFile: String { return self._s[303]! } + public var Map_SetThisPlace: String { return self._s[304]! } + public var Channel_Info_Management: String { return self._s[305]! } + public var Passport_Language_hr: String { return self._s[306]! } + public var VoiceChat_Title: String { return self._s[307]! } + public var EditTheme_Edit_Preview_IncomingText: String { return self._s[310]! } + public var OpenFile_Proceed: String { return self._s[311]! } + public var Conversation_SecretChatContextBotAlert: String { return self._s[313]! } + public var GroupInfo_Permissions_SlowmodeValue_Off: String { return self._s[314]! } + public var Privacy_Calls_P2PContacts: String { return self._s[315]! } + public var Appearance_PickAccentColor: String { return self._s[316]! } + public var MediaPicker_TapToUngroupDescription: String { return self._s[317]! } + public var Localization_EnglishLanguageName: String { return self._s[318]! } + public var Stickers_SuggestStickers: String { return self._s[319]! } + public var Passport_Language_ko: String { return self._s[320]! } + public var Settings_ProxyDisabled: String { return self._s[321]! } + public var PrivacySettings_PasscodeOff: String { return self._s[322]! } + public var Undo_LeftChannel: String { return self._s[323]! } + public var Appearance_AutoNightThemeDisabled: String { return self._s[324]! } + public var TextFormat_Bold: String { return self._s[325]! } + public var Login_InfoTitle: String { return self._s[326]! } + public var Channel_BanUser_PermissionSendPolls: String { return self._s[327]! } + public var Settings_AddAnotherAccount: String { return self._s[328]! } + public var GroupPermission_NewTitle: String { return self._s[329]! } + public var Login_SelectCountry_Title: String { return self._s[330]! } + public var Cache_ServiceFiles: String { return self._s[331]! } + public var Passport_Language_nl: String { return self._s[332]! } + public var Contacts_TopSection: String { return self._s[333]! } + public var Passport_Identity_DateOfBirthPlaceholder: String { return self._s[334]! } + public var VoiceChat_StatusInvited: String { return self._s[336]! } + public var Conversation_ContextMenuReport: String { return self._s[337]! } public func Login_BannedPhoneBody(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[337]!, self._r[337]!, [_0]) + return formatWithArgumentRanges(self._s[338]!, self._r[338]!, [_0]) } - public var Conversation_Search: String { return self._s[338]! } - public var Group_Setup_HistoryVisibleHelp: String { return self._s[340]! } - public var ReportPeer_AlertSuccess: String { return self._s[342]! } - public var AutoNightTheme_Title: String { return self._s[344]! } + public var Conversation_Search: String { return self._s[339]! } + public var Group_Setup_HistoryVisibleHelp: String { return self._s[341]! } + public var ReportPeer_AlertSuccess: String { return self._s[343]! } + public var AutoNightTheme_Title: String { return self._s[345]! } public func Notification_PinnedTextMessage(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[346]!, self._r[346]!, [_0, _1]) + return formatWithArgumentRanges(self._s[347]!, self._r[347]!, [_0, _1]) } public func Conversation_OpenBotLinkText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[347]!, self._r[347]!, [_0]) + return formatWithArgumentRanges(self._s[348]!, self._r[348]!, [_0]) } - public var Conversation_ShareBotContactConfirmation: String { return self._s[348]! } - public var TwoStepAuth_RecoveryCode: String { return self._s[349]! } - public var SocksProxySetup_ConnectAndSave: String { return self._s[350]! } + public var Conversation_ShareBotContactConfirmation: String { return self._s[349]! } + public var TwoStepAuth_RecoveryCode: String { return self._s[350]! } + public var SocksProxySetup_ConnectAndSave: String { return self._s[351]! } public func MESSAGE_INVOICE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[351]!, self._r[351]!, [_1, _2]) + return formatWithArgumentRanges(self._s[352]!, self._r[352]!, [_1, _2]) } public func Channel_AdminLog_MessageChangedGroupUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[352]!, self._r[352]!, [_0]) + return formatWithArgumentRanges(self._s[353]!, self._r[353]!, [_0]) } - public var Replies_BlockAndDeleteRepliesActionTitle: String { return self._s[353]! } + public var Replies_BlockAndDeleteRepliesActionTitle: String { return self._s[354]! } public func Notification_GroupInviter(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[354]!, self._r[354]!, [_0]) + return formatWithArgumentRanges(self._s[355]!, self._r[355]!, [_0]) } - public var VoiceChat_CopyInviteLink: String { return self._s[355]! } - public var Conversation_InfoGroup: String { return self._s[356]! } + public var VoiceChat_CopyInviteLink: String { return self._s[356]! } + public var Conversation_InfoGroup: String { return self._s[357]! } public func Map_AccurateTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[358]!, self._r[358]!, [_0]) + return formatWithArgumentRanges(self._s[359]!, self._r[359]!, [_0]) } - public var Conversation_ChatBackground: String { return self._s[359]! } - public var PhotoEditor_Set: String { return self._s[360]! } + public var Conversation_ChatBackground: String { return self._s[360]! } + public var PhotoEditor_Set: String { return self._s[361]! } public func Channel_Management_PromotedBy(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[362]!, self._r[362]!, [_0]) + return formatWithArgumentRanges(self._s[363]!, self._r[363]!, [_0]) } - public var IntentsSettings_SuggestedChatsContacts: String { return self._s[363]! } - public var Passport_Phone_Title: String { return self._s[365]! } - public var Conversation_EditingMessageMediaChange: String { return self._s[366]! } - public var Channel_LinkItem: String { return self._s[367]! } - public var VoiceChat_EndConfirmationText: String { return self._s[368]! } + public var IntentsSettings_SuggestedChatsContacts: String { return self._s[364]! } + public var Passport_Phone_Title: String { return self._s[366]! } + public var Conversation_EditingMessageMediaChange: String { return self._s[367]! } + public var Channel_LinkItem: String { return self._s[368]! } + public var VoiceChat_EndConfirmationText: String { return self._s[369]! } public func PUSH_CHAT_DELETE_MEMBER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[369]!, self._r[369]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[370]!, self._r[370]!, [_1, _2, _3]) } - public var Conversation_DeleteManyMessages: String { return self._s[370]! } - public var Notifications_Badge_IncludeMutedChats: String { return self._s[371]! } - public var AuthSessions_AddedDeviceTitle: String { return self._s[374]! } - public var Privacy_Calls_NeverAllow_Placeholder: String { return self._s[375]! } - public var Settings_ProxyConnecting: String { return self._s[376]! } - public var Theme_Colors_Accent: String { return self._s[377]! } - public var Theme_Colors_ColorWallpaperWarning: String { return self._s[378]! } + public var Conversation_DeleteManyMessages: String { return self._s[371]! } + public var Notifications_Badge_IncludeMutedChats: String { return self._s[372]! } + public var AuthSessions_AddedDeviceTitle: String { return self._s[375]! } + public var Privacy_Calls_NeverAllow_Placeholder: String { return self._s[376]! } + public var Settings_ProxyConnecting: String { return self._s[377]! } + public var Theme_Colors_Accent: String { return self._s[378]! } + public var Theme_Colors_ColorWallpaperWarning: String { return self._s[379]! } public func PUSH_PHONE_CALL_MISSED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[380]!, self._r[380]!, [_1]) + return formatWithArgumentRanges(self._s[381]!, self._r[381]!, [_1]) } - public var Passport_Language_lo: String { return self._s[381]! } + public var Passport_Language_lo: String { return self._s[382]! } public func Watch_Time_ShortWeekdayAt(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[383]!, self._r[383]!, [_1, _2]) + return formatWithArgumentRanges(self._s[384]!, self._r[384]!, [_1, _2]) } - public var Permissions_NotificationsText_v0: String { return self._s[384]! } - public var ChatList_Context_RemoveFromRecents: String { return self._s[385]! } - public var Watch_GroupInfo_Title: String { return self._s[386]! } - public var Settings_AddDevice: String { return self._s[388]! } - public var WallpaperPreview_SwipeColorsTopText: String { return self._s[389]! } + public var Permissions_NotificationsText_v0: String { return self._s[385]! } + public var ChatList_Context_RemoveFromRecents: String { return self._s[386]! } + public var Watch_GroupInfo_Title: String { return self._s[387]! } + public var Settings_AddDevice: String { return self._s[389]! } + public var WallpaperPreview_SwipeColorsTopText: String { return self._s[390]! } public func PUSH_CHANNEL_ALBUM(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[390]!, self._r[390]!, [_1]) + return formatWithArgumentRanges(self._s[391]!, self._r[391]!, [_1]) } - public var TwoStepAuth_Disable: String { return self._s[392]! } + public var TwoStepAuth_Disable: String { return self._s[393]! } public func Conversation_AddNameToContacts(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[393]!, self._r[393]!, [_0]) + return formatWithArgumentRanges(self._s[394]!, self._r[394]!, [_0]) } public func Time_PreciseDate_m10(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[394]!, self._r[394]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[395]!, self._r[395]!, [_1, _2, _3]) } public func Login_WillSendSms(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[395]!, self._r[395]!, [_0]) + return formatWithArgumentRanges(self._s[396]!, self._r[396]!, [_0]) } - public var Channel_AdminLog_BanReadMessages: String { return self._s[396]! } - public var Undo_ChatDeleted: String { return self._s[397]! } - public var ContactInfo_URLLabelHomepage: String { return self._s[398]! } + public var Channel_AdminLog_BanReadMessages: String { return self._s[397]! } + public var Undo_ChatDeleted: String { return self._s[398]! } + public var ContactInfo_URLLabelHomepage: String { return self._s[399]! } public func PUSH_CHAT_MESSAGE_STICKER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[399]!, self._r[399]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[400]!, self._r[400]!, [_1, _2, _3]) } - public var FastTwoStepSetup_EmailHelp: String { return self._s[400]! } - public var Contacts_SelectAll: String { return self._s[401]! } - public var Privacy_ContactsReset: String { return self._s[402]! } - public var AttachmentMenu_File: String { return self._s[404]! } - public var PasscodeSettings_EncryptData: String { return self._s[405]! } - public var EditTheme_ThemeTemplateAlertText: String { return self._s[406]! } + public var FastTwoStepSetup_EmailHelp: String { return self._s[401]! } + public var Contacts_SelectAll: String { return self._s[402]! } + public var Privacy_ContactsReset: String { return self._s[403]! } + public var AttachmentMenu_File: String { return self._s[405]! } + public var PasscodeSettings_EncryptData: String { return self._s[406]! } + public var EditTheme_ThemeTemplateAlertText: String { return self._s[407]! } public func Privacy_GroupsAndChannels_InviteToChannelError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[408]!, self._r[408]!, [_0, _1]) - } - public func Profile_CreateEncryptedChatOutdatedError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[409]!, self._r[409]!, [_0, _1]) } - public var PhotoEditor_ShadowsTint: String { return self._s[411]! } - public var GroupInfo_ChatAdmins: String { return self._s[412]! } - public var ArchivedChats_IntroTitle2: String { return self._s[413]! } - public var Cache_LowDiskSpaceText: String { return self._s[414]! } - public var CreatePoll_Anonymous: String { return self._s[415]! } - public var Checkout_PaymentMethod_New: String { return self._s[416]! } - public var Invitation_JoinGroup: String { return self._s[417]! } + public func Profile_CreateEncryptedChatOutdatedError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[410]!, self._r[410]!, [_0, _1]) + } + public var PhotoEditor_ShadowsTint: String { return self._s[412]! } + public var GroupInfo_ChatAdmins: String { return self._s[413]! } + public var ArchivedChats_IntroTitle2: String { return self._s[414]! } + public var Cache_LowDiskSpaceText: String { return self._s[415]! } + public var CreatePoll_Anonymous: String { return self._s[416]! } + public var Checkout_PaymentMethod_New: String { return self._s[417]! } + public var Invitation_JoinGroup: String { return self._s[418]! } public func Time_MonthOfYear_m4(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[420]!, self._r[420]!, [_0]) + return formatWithArgumentRanges(self._s[421]!, self._r[421]!, [_0]) } - public var CheckoutInfo_SaveInfoHelp: String { return self._s[421]! } - public var Notification_Reply: String { return self._s[423]! } + public var CheckoutInfo_SaveInfoHelp: String { return self._s[422]! } + public var Notification_Reply: String { return self._s[424]! } public func Login_PhoneBannedEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[424]!, self._r[424]!, [_0]) + return formatWithArgumentRanges(self._s[425]!, self._r[425]!, [_0]) } - public var Login_PhoneTitle: String { return self._s[425]! } - public var VoiceChat_UnmuteHelp: String { return self._s[426]! } - public var VoiceOver_Media_PlaybackRateNormal: String { return self._s[427]! } + public var Login_PhoneTitle: String { return self._s[426]! } + public var VoiceChat_UnmuteHelp: String { return self._s[427]! } + public var VoiceOver_Media_PlaybackRateNormal: String { return self._s[428]! } public func PUSH_CHAT_MESSAGE_INVOICE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[428]!, self._r[428]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[429]!, self._r[429]!, [_1, _2, _3]) } - public var Appearance_TextSize_Title: String { return self._s[429]! } - public var NetworkUsageSettings_MediaImageDataSection: String { return self._s[431]! } - public var VoiceOver_Navigation_Compose: String { return self._s[432]! } - public var Passport_InfoText: String { return self._s[433]! } - public var ApplyLanguage_ApplyLanguageAction: String { return self._s[434]! } - public var MessagePoll_LabelClosed: String { return self._s[436]! } - public var AttachmentMenu_SendAsFiles: String { return self._s[437]! } - public var KeyCommand_FocusOnInputField: String { return self._s[438]! } - public var Conversation_ContextViewThread: String { return self._s[439]! } - public var Privacy_SecretChatsLinkPreviews: String { return self._s[441]! } - public var Permissions_PeopleNearbyAllow_v0: String { return self._s[442]! } - public var Conversation_ContextMenuMention: String { return self._s[444]! } - public var CreatePoll_QuizInfo: String { return self._s[445]! } - public var Appearance_ThemePreview_ChatList_2_Name: String { return self._s[446]! } - public var Username_LinkCopied: String { return self._s[447]! } - public var IntentsSettings_SuggestedAndSpotlightChatsInfo: String { return self._s[448]! } - public var TwoStepAuth_ChangePassword: String { return self._s[449]! } - public var Watch_Suggestion_Thanks: String { return self._s[450]! } - public var Channel_TitleInfo: String { return self._s[451]! } - public var ChatList_ChatTypesSection: String { return self._s[452]! } + public var Appearance_TextSize_Title: String { return self._s[430]! } + public var NetworkUsageSettings_MediaImageDataSection: String { return self._s[432]! } + public var VoiceOver_Navigation_Compose: String { return self._s[433]! } + public var Passport_InfoText: String { return self._s[434]! } + public var ApplyLanguage_ApplyLanguageAction: String { return self._s[435]! } + public var MessagePoll_LabelClosed: String { return self._s[437]! } + public var AttachmentMenu_SendAsFiles: String { return self._s[438]! } + public var KeyCommand_FocusOnInputField: String { return self._s[439]! } + public var Conversation_ContextViewThread: String { return self._s[440]! } + public var Privacy_SecretChatsLinkPreviews: String { return self._s[442]! } + public var Permissions_PeopleNearbyAllow_v0: String { return self._s[443]! } + public var Conversation_ContextMenuMention: String { return self._s[445]! } + public var CreatePoll_QuizInfo: String { return self._s[446]! } + public var Appearance_ThemePreview_ChatList_2_Name: String { return self._s[447]! } + public var Username_LinkCopied: String { return self._s[448]! } + public var IntentsSettings_SuggestedAndSpotlightChatsInfo: String { return self._s[449]! } + public var TwoStepAuth_ChangePassword: String { return self._s[450]! } + public var Watch_Suggestion_Thanks: String { return self._s[451]! } + public var Channel_TitleInfo: String { return self._s[452]! } + public var ChatList_ChatTypesSection: String { return self._s[453]! } public func Watch_LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[453]!, self._r[453]!, [_0]) - } - public func Channel_AdminLog_PollStopped(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[454]!, self._r[454]!, [_0]) } - public var AuthSessions_AddDevice_InvalidQRCode: String { return self._s[455]! } + public func Channel_AdminLog_PollStopped(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[455]!, self._r[455]!, [_0]) + } + public var AuthSessions_AddDevice_InvalidQRCode: String { return self._s[456]! } public func Call_MicrophoneOff(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[456]!, self._r[456]!, [_0]) + return formatWithArgumentRanges(self._s[457]!, self._r[457]!, [_0]) } - public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[457]! } - public var Profile_MessageLifetimeForever: String { return self._s[458]! } - public var ArchivedChats_IntroText1: String { return self._s[459]! } - public var Notifications_ChannelNotificationsPreview: String { return self._s[460]! } - public var Map_PullUpForPlaces: String { return self._s[462]! } - public var UserInfo_TelegramCall: String { return self._s[463]! } - public var Conversation_ShareMyContactInfo: String { return self._s[464]! } - public var ChatList_Tabs_All: String { return self._s[465]! } - public var Notification_PassportValueEmail: String { return self._s[466]! } - public var Notification_VideoCallIncoming: String { return self._s[467]! } - public var SettingsSearch_Synonyms_Appearance_AutoNightTheme: String { return self._s[468]! } - public var Channel_Username_InvalidTaken: String { return self._s[469]! } - public var GroupPermission_EditingDisabled: String { return self._s[470]! } - public var InviteLink_PeopleJoinedShortNone: String { return self._s[471]! } - public var ChatContextMenu_TextSelectionTip: String { return self._s[472]! } - public var Passport_Language_pl: String { return self._s[474]! } - public var Call_Accept: String { return self._s[475]! } - public var ChatListFolder_NameSectionHeader: String { return self._s[476]! } + public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[458]! } + public var Profile_MessageLifetimeForever: String { return self._s[459]! } + public var ArchivedChats_IntroText1: String { return self._s[460]! } + public var Notifications_ChannelNotificationsPreview: String { return self._s[461]! } + public var Map_PullUpForPlaces: String { return self._s[463]! } + public var UserInfo_TelegramCall: String { return self._s[464]! } + public var Conversation_ShareMyContactInfo: String { return self._s[465]! } + public var ChatList_Tabs_All: String { return self._s[466]! } + public var Notification_PassportValueEmail: String { return self._s[467]! } + public var Notification_VideoCallIncoming: String { return self._s[468]! } + public var SettingsSearch_Synonyms_Appearance_AutoNightTheme: String { return self._s[469]! } + public var Channel_Username_InvalidTaken: String { return self._s[470]! } + public var GroupPermission_EditingDisabled: String { return self._s[471]! } + public var InviteLink_PeopleJoinedShortNone: String { return self._s[472]! } + public var ChatContextMenu_TextSelectionTip: String { return self._s[473]! } + public var Passport_Language_pl: String { return self._s[475]! } + public var Call_Accept: String { return self._s[476]! } + public var ChatListFolder_NameSectionHeader: String { return self._s[477]! } public func Passport_Identity_NativeNameTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[477]!, self._r[477]!, [_0]) + return formatWithArgumentRanges(self._s[478]!, self._r[478]!, [_0]) } - public var ClearCache_Forever: String { return self._s[478]! } + public var ClearCache_Forever: String { return self._s[479]! } public func ChannelInfo_AddParticipantConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[480]!, self._r[480]!, [_0]) + return formatWithArgumentRanges(self._s[481]!, self._r[481]!, [_0]) } - public var Group_EditAdmin_RankAdminPlaceholder: String { return self._s[481]! } - public var Calls_SubmitRating: String { return self._s[482]! } - public var Location_LiveLocationRequired_ShareLocation: String { return self._s[483]! } + public var Group_EditAdmin_RankAdminPlaceholder: String { return self._s[482]! } + public var Calls_SubmitRating: String { return self._s[483]! } + public var Location_LiveLocationRequired_ShareLocation: String { return self._s[484]! } public func ChatList_AddedToFolderTooltip(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[484]!, self._r[484]!, [_1, _2]) + return formatWithArgumentRanges(self._s[485]!, self._r[485]!, [_1, _2]) } - public var IntentsSettings_MainAccountInfo: String { return self._s[485]! } - public var Map_Hybrid: String { return self._s[487]! } - public var ChatList_Context_Archive: String { return self._s[488]! } - public var Message_PinnedDocumentMessage: String { return self._s[489]! } - public var State_ConnectingToProxyInfo: String { return self._s[490]! } - public var Passport_Identity_NativeNameGenericTitle: String { return self._s[492]! } - public var Settings_AppLanguage: String { return self._s[493]! } + public var IntentsSettings_MainAccountInfo: String { return self._s[486]! } + public var Map_Hybrid: String { return self._s[488]! } + public var ChatList_Context_Archive: String { return self._s[489]! } + public var Message_PinnedDocumentMessage: String { return self._s[490]! } + public var State_ConnectingToProxyInfo: String { return self._s[491]! } + public var Passport_Identity_NativeNameGenericTitle: String { return self._s[493]! } + public var Settings_AppLanguage: String { return self._s[494]! } public func Checkout_SavePasswordTimeoutAndFaceId(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[494]!, self._r[494]!, [_0]) + return formatWithArgumentRanges(self._s[495]!, self._r[495]!, [_0]) } - public var Notifications_PermissionsEnable: String { return self._s[496]! } - public var CheckoutInfo_ShippingInfoAddress1Placeholder: String { return self._s[497]! } + public var Notifications_PermissionsEnable: String { return self._s[497]! } + public var CheckoutInfo_ShippingInfoAddress1Placeholder: String { return self._s[498]! } public func UserInfo_BlockActionTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[498]!, self._r[498]!, [_0]) - } - public func AuthSessions_Message(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[499]!, self._r[499]!, [_0]) } - public var NotificationsSound_Aurora: String { return self._s[502]! } - public var ScheduledMessages_ClearAll: String { return self._s[505]! } + public func AuthSessions_Message(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[500]!, self._r[500]!, [_0]) + } + public var NotificationsSound_Aurora: String { return self._s[503]! } + public var ScheduledMessages_ClearAll: String { return self._s[506]! } public func CancelResetAccount_TextSMS(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[506]!, self._r[506]!, [_0]) + return formatWithArgumentRanges(self._s[507]!, self._r[507]!, [_0]) } - public var Settings_BlockedUsers: String { return self._s[508]! } + public var Settings_BlockedUsers: String { return self._s[509]! } public func UserInfo_StartSecretChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[510]!, self._r[510]!, [_0]) + return formatWithArgumentRanges(self._s[511]!, self._r[511]!, [_0]) } - public var Passport_Language_hu: String { return self._s[511]! } + public var Passport_Language_hu: String { return self._s[512]! } public func Conversation_ScheduleMessage_SendTomorrow(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[512]!, self._r[512]!, [_0]) + return formatWithArgumentRanges(self._s[513]!, self._r[513]!, [_0]) } - public var StickerPack_Share: String { return self._s[513]! } - public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[514]! } + public var StickerPack_Share: String { return self._s[514]! } + public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[515]! } public func ForwardedAuthors2(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[515]!, self._r[515]!, [_0, _1]) + return formatWithArgumentRanges(self._s[516]!, self._r[516]!, [_0, _1]) } - public var Privacy_ContactsResetConfirmation: String { return self._s[516]! } - public var AppleWatch_ReplyPresets: String { return self._s[517]! } - public var Bot_GenericBotStatus: String { return self._s[518]! } - public var Appearance_ShareThemeColor: String { return self._s[519]! } - public var AuthSessions_AddDevice_UrlLoginHint: String { return self._s[520]! } - public var ReportGroupLocation_Title: String { return self._s[521]! } + public var Privacy_ContactsResetConfirmation: String { return self._s[517]! } + public var AppleWatch_ReplyPresets: String { return self._s[518]! } + public var Bot_GenericBotStatus: String { return self._s[519]! } + public var Appearance_ShareThemeColor: String { return self._s[520]! } + public var AuthSessions_AddDevice_UrlLoginHint: String { return self._s[521]! } + public var ReportGroupLocation_Title: String { return self._s[522]! } public func Activity_RemindAboutUser(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[522]!, self._r[522]!, [_0]) + return formatWithArgumentRanges(self._s[523]!, self._r[523]!, [_0]) } - public var Profile_CreateEncryptedChatError: String { return self._s[523]! } - public var Channel_EditAdmin_TransferOwnership: String { return self._s[524]! } - public var Wallpaper_ErrorNotFound: String { return self._s[525]! } - public var Bot_GenericSupportStatus: String { return self._s[526]! } - public var Activity_UploadingPhoto: String { return self._s[528]! } - public var Watch_UserInfo_Title: String { return self._s[530]! } - public var SocksProxySetup_ProxyTelegram: String { return self._s[531]! } - public var Appearance_ThemeDay: String { return self._s[532]! } + public var Profile_CreateEncryptedChatError: String { return self._s[524]! } + public var Channel_EditAdmin_TransferOwnership: String { return self._s[525]! } + public var Wallpaper_ErrorNotFound: String { return self._s[526]! } + public var Bot_GenericSupportStatus: String { return self._s[527]! } + public var Activity_UploadingPhoto: String { return self._s[529]! } + public var Watch_UserInfo_Title: String { return self._s[531]! } + public var SocksProxySetup_ProxyTelegram: String { return self._s[532]! } + public var Appearance_ThemeDay: String { return self._s[533]! } public func ApplyLanguage_ChangeLanguageOfficialText(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[533]!, self._r[533]!, [_1]) + return formatWithArgumentRanges(self._s[534]!, self._r[534]!, [_1]) } public func FileSize_B(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[534]!, self._r[534]!, [_0]) + return formatWithArgumentRanges(self._s[535]!, self._r[535]!, [_0]) } - public var InviteLink_AdditionalLinks: String { return self._s[535]! } - public var Passport_Title: String { return self._s[538]! } + public var InviteLink_AdditionalLinks: String { return self._s[536]! } + public var Passport_Title: String { return self._s[539]! } public func Time_PreciseDate_m3(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[540]!, self._r[540]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[541]!, self._r[541]!, [_1, _2, _3]) } - public var CheckoutInfo_ShippingInfoCountryPlaceholder: String { return self._s[541]! } - public var SocksProxySetup_ShareLink: String { return self._s[544]! } - public var AuthSessions_OtherDevices: String { return self._s[545]! } - public var IntentsSettings_SuggestedChatsGroups: String { return self._s[546]! } - public var Watch_MessageView_Reply: String { return self._s[547]! } - public var Camera_FlashOn: String { return self._s[549]! } + public var CheckoutInfo_ShippingInfoCountryPlaceholder: String { return self._s[542]! } + public var SocksProxySetup_ShareLink: String { return self._s[545]! } + public var AuthSessions_OtherDevices: String { return self._s[546]! } + public var IntentsSettings_SuggestedChatsGroups: String { return self._s[547]! } + public var Watch_MessageView_Reply: String { return self._s[548]! } + public var Camera_FlashOn: String { return self._s[550]! } public func PUSH_MESSAGE_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[550]!, self._r[550]!, [_1, _2]) + return formatWithArgumentRanges(self._s[551]!, self._r[551]!, [_1, _2]) } - public var Conversation_ContextMenuBlock: String { return self._s[551]! } - public var Channel_EditAdmin_PermissionEditMessages: String { return self._s[553]! } - public var Privacy_Calls_NeverAllow: String { return self._s[554]! } - public var SharedMedia_CategoryLinks: String { return self._s[555]! } - public var Conversation_PinMessageAlertGroup: String { return self._s[558]! } - public var Passport_Identity_ScansHelp: String { return self._s[559]! } - public var ShareMenu_CopyShareLink: String { return self._s[560]! } - public var StickerSettings_MaskContextInfo: String { return self._s[561]! } - public var InviteLink_Create_EditTitle: String { return self._s[562]! } - public var SocksProxySetup_ProxyStatusChecking: String { return self._s[563]! } - public var AutoDownloadSettings_AutodownloadPhotos: String { return self._s[565]! } - public var Checkout_ErrorPrecheckoutFailed: String { return self._s[567]! } - public var NotificationsSound_Popcorn: String { return self._s[568]! } - public var FeatureDisabled_Oops: String { return self._s[569]! } + public var Conversation_ContextMenuBlock: String { return self._s[552]! } + public var Channel_EditAdmin_PermissionEditMessages: String { return self._s[554]! } + public var Privacy_Calls_NeverAllow: String { return self._s[555]! } + public var SharedMedia_CategoryLinks: String { return self._s[556]! } + public var Conversation_PinMessageAlertGroup: String { return self._s[559]! } + public var Passport_Identity_ScansHelp: String { return self._s[560]! } + public var ShareMenu_CopyShareLink: String { return self._s[561]! } + public var StickerSettings_MaskContextInfo: String { return self._s[562]! } + public var InviteLink_Create_EditTitle: String { return self._s[563]! } + public var SocksProxySetup_ProxyStatusChecking: String { return self._s[564]! } + public var AutoDownloadSettings_AutodownloadPhotos: String { return self._s[566]! } + public var Checkout_ErrorPrecheckoutFailed: String { return self._s[568]! } + public var NotificationsSound_Popcorn: String { return self._s[569]! } + public var FeatureDisabled_Oops: String { return self._s[570]! } public func Channel_AdminLog_MessageChangedChannelAbout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[570]!, self._r[570]!, [_0]) + return formatWithArgumentRanges(self._s[571]!, self._r[571]!, [_0]) } - public var Notification_PinnedMessage: String { return self._s[571]! } - public var Tour_Title4: String { return self._s[572]! } + public var Notification_PinnedMessage: String { return self._s[572]! } + public var Tour_Title4: String { return self._s[573]! } public func Notification_VoiceChatInvitationForYou(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[573]!, self._r[573]!, [_1]) + return formatWithArgumentRanges(self._s[574]!, self._r[574]!, [_1]) } - public var Watch_Suggestion_OK: String { return self._s[574]! } - public var Compose_TokenListPlaceholder: String { return self._s[575]! } - public var InviteLink_PermanentLink: String { return self._s[576]! } - public var EditTheme_Edit_TopInfo: String { return self._s[577]! } - public var Gif_NoGifsFound: String { return self._s[578]! } - public var Login_InvalidCountryCode: String { return self._s[579]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsExceptions: String { return self._s[580]! } - public var Call_VoiceOver_VideoCallMissed: String { return self._s[581]! } + public var Watch_Suggestion_OK: String { return self._s[575]! } + public var Compose_TokenListPlaceholder: String { return self._s[576]! } + public var InviteLink_PermanentLink: String { return self._s[577]! } + public var EditTheme_Edit_TopInfo: String { return self._s[578]! } + public var Gif_NoGifsFound: String { return self._s[579]! } + public var Login_InvalidCountryCode: String { return self._s[580]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsExceptions: String { return self._s[581]! } + public var Call_VoiceOver_VideoCallMissed: String { return self._s[582]! } public func PUSH_LOCKED_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[583]!, self._r[583]!, [_1]) + return formatWithArgumentRanges(self._s[584]!, self._r[584]!, [_1]) } - public var Profile_CreateNewContact: String { return self._s[584]! } - public var AutoDownloadSettings_DataUsageLow: String { return self._s[585]! } - public var SettingsSearch_Synonyms_Notifications_InAppNotificationsPreview: String { return self._s[586]! } - public var Group_Setup_TypePublic: String { return self._s[587]! } - public var Weekday_ShortSaturday: String { return self._s[588]! } + public var Profile_CreateNewContact: String { return self._s[585]! } + public var AutoDownloadSettings_DataUsageLow: String { return self._s[586]! } + public var SettingsSearch_Synonyms_Notifications_InAppNotificationsPreview: String { return self._s[587]! } + public var Group_Setup_TypePublic: String { return self._s[588]! } + public var Weekday_ShortSaturday: String { return self._s[589]! } public func Time_MonthOfYear_m12(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[589]!, self._r[589]!, [_0]) + return formatWithArgumentRanges(self._s[590]!, self._r[590]!, [_0]) } - public var LiveLocation_MenuStopAll: String { return self._s[590]! } + public var LiveLocation_MenuStopAll: String { return self._s[591]! } public func DialogList_EncryptedChatStartedIncoming(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[591]!, self._r[591]!, [_0]) + return formatWithArgumentRanges(self._s[592]!, self._r[592]!, [_0]) } - public var ChatListFolder_NamePlaceholder: String { return self._s[592]! } - public var Channel_OwnershipTransfer_ErrorPublicChannelsTooMuch: String { return self._s[593]! } + public var ChatListFolder_NamePlaceholder: String { return self._s[593]! } + public var Channel_OwnershipTransfer_ErrorPublicChannelsTooMuch: String { return self._s[594]! } public func PUSH_CHAT_MESSAGE_GAME(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[594]!, self._r[594]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[595]!, self._r[595]!, [_1, _2, _3]) } - public var VoiceChat_ChatFullAlertText: String { return self._s[595]! } - public var Chat_GenericPsaTooltip: String { return self._s[597]! } - public var ChannelInfo_CreateVoiceChat: String { return self._s[598]! } + public var VoiceChat_ChatFullAlertText: String { return self._s[596]! } + public var Chat_GenericPsaTooltip: String { return self._s[598]! } + public var ChannelInfo_CreateVoiceChat: String { return self._s[599]! } public func Message_ForwardedMessageShort(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[599]!, self._r[599]!, [_0]) + return formatWithArgumentRanges(self._s[600]!, self._r[600]!, [_0]) } - public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[600]! } - public var Login_PhoneAndCountryHelp: String { return self._s[601]! } - public var SaveIncomingPhotosSettings_From: String { return self._s[603]! } - public var Conversation_JumpToDate: String { return self._s[604]! } - public var AuthSessions_AddDevice: String { return self._s[605]! } - public var Settings_FAQ: String { return self._s[607]! } - public var Username_Title: String { return self._s[608]! } - public var DialogList_Read: String { return self._s[609]! } - public var Conversation_InstantPagePreview: String { return self._s[610]! } - public var Login_ResetAccountProtected_Title: String { return self._s[612]! } - public var CallFeedback_ReasonDistortedSpeech: String { return self._s[613]! } - public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[614]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[601]! } + public var Login_PhoneAndCountryHelp: String { return self._s[602]! } + public var SaveIncomingPhotosSettings_From: String { return self._s[604]! } + public var Conversation_JumpToDate: String { return self._s[605]! } + public var AuthSessions_AddDevice: String { return self._s[606]! } + public var Settings_FAQ: String { return self._s[608]! } + public var Username_Title: String { return self._s[609]! } + public var DialogList_Read: String { return self._s[610]! } + public var Conversation_InstantPagePreview: String { return self._s[611]! } + public var Login_ResetAccountProtected_Title: String { return self._s[613]! } + public var CallFeedback_ReasonDistortedSpeech: String { return self._s[614]! } + public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[615]! } public func Channel_AdminLog_MessageRankUsername(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[615]!, self._r[615]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[616]!, self._r[616]!, [_1, _2, _3]) } - public var WallpaperPreview_PreviewBottomText: String { return self._s[617]! } - public var Privacy_SecretChatsTitle: String { return self._s[620]! } + public var WallpaperPreview_PreviewBottomText: String { return self._s[618]! } + public var Privacy_SecretChatsTitle: String { return self._s[621]! } public func Notification_PassportValuesSentMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[621]!, self._r[621]!, [_1, _2]) + return formatWithArgumentRanges(self._s[622]!, self._r[622]!, [_1, _2]) } - public var Checkout_NewCard_SaveInfoHelp: String { return self._s[622]! } - public var Conversation_ClousStorageInfo_Description4: String { return self._s[623]! } - public var PasscodeSettings_TurnPasscodeOn: String { return self._s[624]! } - public var Message_ReplyActionButtonShowReceipt: String { return self._s[625]! } + public var Checkout_NewCard_SaveInfoHelp: String { return self._s[623]! } + public var Conversation_ClousStorageInfo_Description4: String { return self._s[624]! } + public var PasscodeSettings_TurnPasscodeOn: String { return self._s[625]! } + public var Message_ReplyActionButtonShowReceipt: String { return self._s[626]! } public func PrivacyPolicy_AgeVerificationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[626]!, self._r[626]!, [_0]) + return formatWithArgumentRanges(self._s[627]!, self._r[627]!, [_0]) } - public var GroupInfo_DeleteAndExitConfirmation: String { return self._s[628]! } - public var TwoStepAuth_ConfirmationAbort: String { return self._s[629]! } - public var PrivacySettings_LastSeenEverybody: String { return self._s[630]! } - public var CallFeedback_ReasonDropped: String { return self._s[631]! } + public var GroupInfo_DeleteAndExitConfirmation: String { return self._s[629]! } + public var TwoStepAuth_ConfirmationAbort: String { return self._s[630]! } + public var PrivacySettings_LastSeenEverybody: String { return self._s[631]! } + public var CallFeedback_ReasonDropped: String { return self._s[632]! } public func ScheduledMessages_ScheduledDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[632]!, self._r[632]!, [_0]) + return formatWithArgumentRanges(self._s[633]!, self._r[633]!, [_0]) } - public var WebSearch_Images: String { return self._s[633]! } - public var Passport_Identity_Surname: String { return self._s[634]! } - public var Channel_Stickers_CreateYourOwn: String { return self._s[635]! } - public var TwoFactorSetup_Email_Title: String { return self._s[636]! } - public var Cache_ClearEmpty: String { return self._s[637]! } - public var AuthSessions_AddDeviceIntro_Action: String { return self._s[638]! } - public var Theme_Context_Apply: String { return self._s[639]! } - public var GroupInfo_Permissions_SearchPlaceholder: String { return self._s[640]! } - public var AutoDownloadSettings_DocumentsTitle: String { return self._s[641]! } + public var WebSearch_Images: String { return self._s[634]! } + public var Passport_Identity_Surname: String { return self._s[635]! } + public var Channel_Stickers_CreateYourOwn: String { return self._s[636]! } + public var TwoFactorSetup_Email_Title: String { return self._s[637]! } + public var Cache_ClearEmpty: String { return self._s[638]! } + public var AuthSessions_AddDeviceIntro_Action: String { return self._s[639]! } + public var Theme_Context_Apply: String { return self._s[640]! } + public var GroupInfo_Permissions_SearchPlaceholder: String { return self._s[641]! } + public var AutoDownloadSettings_DocumentsTitle: String { return self._s[642]! } public func NetworkUsageSettings_CellularUsageSince(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[642]!, self._r[642]!, [_0]) + return formatWithArgumentRanges(self._s[643]!, self._r[643]!, [_0]) } - public var Call_StatusRinging: String { return self._s[643]! } + public var Call_StatusRinging: String { return self._s[644]! } public func Map_DistanceAway(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[644]!, self._r[644]!, [_0]) - } - public func DialogList_SingleTypingSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[645]!, self._r[645]!, [_0]) } - public var Cache_ClearNone: String { return self._s[646]! } - public var PrivacyPolicy_Accept: String { return self._s[647]! } - public var Contacts_PhoneNumber: String { return self._s[648]! } - public var Passport_Identity_OneOfTypePassport: String { return self._s[649]! } - public var PhotoEditor_HighlightsTint: String { return self._s[651]! } - public var AutoDownloadSettings_AutodownloadVideos: String { return self._s[652]! } - public var Checkout_PaymentMethod_Title: String { return self._s[655]! } - public var Month_GenAugust: String { return self._s[657]! } - public var DialogList_Draft: String { return self._s[658]! } - public var ChatList_EmptyChatListFilterText: String { return self._s[659]! } - public var PeopleNearby_Description: String { return self._s[660]! } - public var WallpaperPreview_SwipeColorsBottomText: String { return self._s[661]! } - public var SettingsSearch_Synonyms_Privacy_Data_TopPeers: String { return self._s[663]! } - public var Watch_Message_ForwardedFrom: String { return self._s[664]! } - public var Notification_Mute1h: String { return self._s[665]! } - public var Appearance_ThemePreview_Chat_3_TextWithLink: String { return self._s[666]! } - public var SettingsSearch_Synonyms_Privacy_AuthSessions: String { return self._s[668]! } - public var Channel_Edit_LinkItem: String { return self._s[669]! } - public var Presence_online: String { return self._s[670]! } - public var AutoDownloadSettings_Title: String { return self._s[671]! } - public var Conversation_MessageDialogRetry: String { return self._s[672]! } - public var SettingsSearch_Synonyms_ChatSettings_OpenLinksIn: String { return self._s[674]! } - public var Channel_About_Placeholder: String { return self._s[676]! } - public var Passport_Language_sl: String { return self._s[677]! } - public var AppleWatch_Title: String { return self._s[679]! } - public var RepliesChat_DescriptionText: String { return self._s[681]! } - public var Stats_Message_PrivateShares: String { return self._s[682]! } - public var Settings_ViewPhoto: String { return self._s[683]! } - public var ChatList_DeleteSavedMessagesConfirmation: String { return self._s[684]! } - public var Cache_ClearProgress: String { return self._s[685]! } - public var Cache_Music: String { return self._s[686]! } - public var Conversation_ContextMenuShare: String { return self._s[688]! } - public var AutoDownloadSettings_Unlimited: String { return self._s[689]! } - public var Channel_OwnershipTransfer_ErrorPrivacyRestricted: String { return self._s[690]! } - public var Contacts_PermissionsAllow: String { return self._s[691]! } - public var Passport_Language_vi: String { return self._s[693]! } + public func DialogList_SingleTypingSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[646]!, self._r[646]!, [_0]) + } + public var Cache_ClearNone: String { return self._s[647]! } + public var PrivacyPolicy_Accept: String { return self._s[648]! } + public var Contacts_PhoneNumber: String { return self._s[649]! } + public var Passport_Identity_OneOfTypePassport: String { return self._s[650]! } + public var PhotoEditor_HighlightsTint: String { return self._s[652]! } + public var AutoDownloadSettings_AutodownloadVideos: String { return self._s[653]! } + public var Checkout_PaymentMethod_Title: String { return self._s[656]! } + public var Month_GenAugust: String { return self._s[658]! } + public var DialogList_Draft: String { return self._s[659]! } + public var ChatList_EmptyChatListFilterText: String { return self._s[660]! } + public var PeopleNearby_Description: String { return self._s[661]! } + public var WallpaperPreview_SwipeColorsBottomText: String { return self._s[662]! } + public var SettingsSearch_Synonyms_Privacy_Data_TopPeers: String { return self._s[664]! } + public var Watch_Message_ForwardedFrom: String { return self._s[665]! } + public var Notification_Mute1h: String { return self._s[666]! } + public var Appearance_ThemePreview_Chat_3_TextWithLink: String { return self._s[667]! } + public var SettingsSearch_Synonyms_Privacy_AuthSessions: String { return self._s[669]! } + public var Channel_Edit_LinkItem: String { return self._s[670]! } + public var Presence_online: String { return self._s[671]! } + public var AutoDownloadSettings_Title: String { return self._s[672]! } + public var Conversation_MessageDialogRetry: String { return self._s[673]! } + public var SettingsSearch_Synonyms_ChatSettings_OpenLinksIn: String { return self._s[675]! } + public var Channel_About_Placeholder: String { return self._s[677]! } + public var Passport_Language_sl: String { return self._s[678]! } + public var AppleWatch_Title: String { return self._s[680]! } + public var RepliesChat_DescriptionText: String { return self._s[682]! } + public var Stats_Message_PrivateShares: String { return self._s[683]! } + public var Settings_ViewPhoto: String { return self._s[684]! } + public var ChatList_DeleteSavedMessagesConfirmation: String { return self._s[685]! } + public var Cache_ClearProgress: String { return self._s[686]! } + public var Cache_Music: String { return self._s[687]! } + public var Conversation_ContextMenuShare: String { return self._s[689]! } + public var AutoDownloadSettings_Unlimited: String { return self._s[690]! } + public var Channel_OwnershipTransfer_ErrorPrivacyRestricted: String { return self._s[691]! } + public var Contacts_PermissionsAllow: String { return self._s[692]! } + public var Passport_Language_vi: String { return self._s[694]! } public func PUSH_MESSAGE_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[696]!, self._r[696]!, [_1, _2]) + return formatWithArgumentRanges(self._s[697]!, self._r[697]!, [_1, _2]) } - public var Passport_Language_de: String { return self._s[697]! } - public var Notifications_PermissionsText: String { return self._s[699]! } - public var GroupRemoved_AddToGroup: String { return self._s[700]! } - public var Appearance_ThemePreview_ChatList_4_Text: String { return self._s[701]! } - public var ChangePhoneNumberCode_RequestingACall: String { return self._s[702]! } - public var Login_TermsOfServiceAgree: String { return self._s[703]! } - public var VoiceOver_Navigation_ProxySettings: String { return self._s[704]! } + public var Passport_Language_de: String { return self._s[698]! } + public var Notifications_PermissionsText: String { return self._s[700]! } + public var GroupRemoved_AddToGroup: String { return self._s[701]! } + public var Appearance_ThemePreview_ChatList_4_Text: String { return self._s[702]! } + public var ChangePhoneNumberCode_RequestingACall: String { return self._s[703]! } + public var Login_TermsOfServiceAgree: String { return self._s[704]! } + public var VoiceOver_Navigation_ProxySettings: String { return self._s[705]! } public func PUSH_CHAT_JOINED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[705]!, self._r[705]!, [_1, _2]) + return formatWithArgumentRanges(self._s[706]!, self._r[706]!, [_1, _2]) } - public var SettingsSearch_Synonyms_Data_CallsUseLessData: String { return self._s[707]! } + public var SettingsSearch_Synonyms_Data_CallsUseLessData: String { return self._s[708]! } public func PUSH_CHAT_VOICECHAT_START(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[708]!, self._r[708]!, [_1, _2]) + return formatWithArgumentRanges(self._s[709]!, self._r[709]!, [_1, _2]) } - public var ChatListFolder_NameGroups: String { return self._s[709]! } - public var SocksProxySetup_ProxyDetailsTitle: String { return self._s[710]! } + public var ChatListFolder_NameGroups: String { return self._s[710]! } + public var SocksProxySetup_ProxyDetailsTitle: String { return self._s[711]! } public func Channel_AdminLog_MessageChangedLinkedGroup(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[711]!, self._r[711]!, [_1, _2]) + return formatWithArgumentRanges(self._s[712]!, self._r[712]!, [_1, _2]) } - public var Watch_Suggestion_TalkLater: String { return self._s[712]! } - public var Checkout_ShippingOption_Title: String { return self._s[713]! } - public var Conversation_TitleRepliesEmpty: String { return self._s[714]! } - public var CreatePoll_TextHeader: String { return self._s[715]! } - public var VoiceOver_Chat_Message: String { return self._s[717]! } - public var InfoPlist_NSLocationWhenInUseUsageDescription: String { return self._s[718]! } - public var ContactInfo_Note: String { return self._s[720]! } - public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[721]! } - public var Checkout_NewCard_CardholderNameTitle: String { return self._s[722]! } - public var AutoDownloadSettings_Photos: String { return self._s[723]! } - public var UserInfo_NotificationsDefaultDisabled: String { return self._s[724]! } - public var Channel_Info_Subscribers: String { return self._s[725]! } - public var ChatList_DeleteForCurrentUser: String { return self._s[726]! } - public var ChatListFolderSettings_FoldersSection: String { return self._s[727]! } + public var Watch_Suggestion_TalkLater: String { return self._s[713]! } + public var Checkout_ShippingOption_Title: String { return self._s[714]! } + public var Conversation_TitleRepliesEmpty: String { return self._s[715]! } + public var CreatePoll_TextHeader: String { return self._s[716]! } + public var VoiceOver_Chat_Message: String { return self._s[718]! } + public var InfoPlist_NSLocationWhenInUseUsageDescription: String { return self._s[719]! } + public var ContactInfo_Note: String { return self._s[721]! } + public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[722]! } + public var Checkout_NewCard_CardholderNameTitle: String { return self._s[723]! } + public var AutoDownloadSettings_Photos: String { return self._s[724]! } + public var UserInfo_NotificationsDefaultDisabled: String { return self._s[725]! } + public var Channel_Info_Subscribers: String { return self._s[726]! } + public var ChatList_DeleteForCurrentUser: String { return self._s[727]! } + public var ChatListFolderSettings_FoldersSection: String { return self._s[728]! } public func Time_PreciseDate_m9(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[731]!, self._r[731]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[732]!, self._r[732]!, [_1, _2, _3]) } - public var AutoNightTheme_System: String { return self._s[732]! } - public var Call_StatusWaiting: String { return self._s[733]! } - public var GroupInfo_GroupHistoryHidden: String { return self._s[734]! } + public var AutoNightTheme_System: String { return self._s[733]! } + public var Call_StatusWaiting: String { return self._s[734]! } + public var GroupInfo_GroupHistoryHidden: String { return self._s[735]! } public func CHAT_MESSAGE_INVOICE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[735]!, self._r[735]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[736]!, self._r[736]!, [_1, _2, _3]) } - public var Conversation_ContextMenuCopy: String { return self._s[737]! } - public var Notifications_MessageNotificationsPreview: String { return self._s[738]! } - public var Notifications_InAppNotificationsVibrate: String { return self._s[739]! } + public var Conversation_ContextMenuCopy: String { return self._s[738]! } + public var Notifications_MessageNotificationsPreview: String { return self._s[739]! } + public var Notifications_InAppNotificationsVibrate: String { return self._s[740]! } public func Conversation_RestrictedTextTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[740]!, self._r[740]!, [_0]) + return formatWithArgumentRanges(self._s[741]!, self._r[741]!, [_0]) } - public var Group_Status: String { return self._s[742]! } - public var Group_Setup_HistoryVisible: String { return self._s[743]! } - public var Conversation_DiscardVoiceMessageAction: String { return self._s[744]! } - public var Paint_Edit: String { return self._s[745]! } - public var Channel_EditAdmin_CannotEdit: String { return self._s[747]! } - public var Username_InvalidTooShort: String { return self._s[748]! } - public var ClearCache_StorageOtherApps: String { return self._s[749]! } - public var Conversation_ViewMessage: String { return self._s[750]! } - public var GroupInfo_PublicLinkAdd: String { return self._s[752]! } + public var Group_Status: String { return self._s[743]! } + public var Group_Setup_HistoryVisible: String { return self._s[744]! } + public var Conversation_DiscardVoiceMessageAction: String { return self._s[745]! } + public var Paint_Edit: String { return self._s[746]! } + public var Channel_EditAdmin_CannotEdit: String { return self._s[748]! } + public var Username_InvalidTooShort: String { return self._s[749]! } + public var ClearCache_StorageOtherApps: String { return self._s[750]! } + public var Conversation_ViewMessage: String { return self._s[751]! } + public var GroupInfo_PublicLinkAdd: String { return self._s[753]! } public func Notification_RemovedGroupPhoto(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[753]!, self._r[753]!, [_0]) + return formatWithArgumentRanges(self._s[754]!, self._r[754]!, [_0]) } - public var CallSettings_Title: String { return self._s[754]! } + public var CallSettings_Title: String { return self._s[755]! } public func Conversation_BotInteractiveUrlAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[755]!, self._r[755]!, [_0]) + return formatWithArgumentRanges(self._s[756]!, self._r[756]!, [_0]) } public func VoiceOver_Chat_ContactFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[758]!, self._r[758]!, [_0]) + return formatWithArgumentRanges(self._s[759]!, self._r[759]!, [_0]) } - public var PUSH_SENDER_YOU: String { return self._s[761]! } - public var Profile_ShareContactButton: String { return self._s[762]! } - public var GroupInfo_Permissions_SectionTitle: String { return self._s[763]! } - public var Map_ShareLiveLocation: String { return self._s[764]! } - public var ChatListFolder_TitleEdit: String { return self._s[765]! } - public var Passport_Address_Address: String { return self._s[767]! } - public var LastSeen_JustNow: String { return self._s[769]! } + public var PUSH_SENDER_YOU: String { return self._s[762]! } + public var Profile_ShareContactButton: String { return self._s[763]! } + public var GroupInfo_Permissions_SectionTitle: String { return self._s[764]! } + public var Map_ShareLiveLocation: String { return self._s[765]! } + public var ChatListFolder_TitleEdit: String { return self._s[766]! } + public var Passport_Address_Address: String { return self._s[768]! } + public var LastSeen_JustNow: String { return self._s[770]! } public func SecretImage_NotViewedYet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[770]!, self._r[770]!, [_0]) + return formatWithArgumentRanges(self._s[771]!, self._r[771]!, [_0]) } - public var ContactInfo_PhoneLabelOther: String { return self._s[771]! } - public var PasscodeSettings_DoNotMatch: String { return self._s[772]! } - public var Weekday_Today: String { return self._s[775]! } - public var DialogList_Title: String { return self._s[776]! } - public var SettingsSearch_Synonyms_Notifications_MessageNotificationsPreview: String { return self._s[777]! } - public var Cache_ClearCache: String { return self._s[778]! } - public var CreatePoll_ExplanationInfo: String { return self._s[779]! } - public var Notifications_ResetAllNotificationsHelp: String { return self._s[781]! } - public var Stats_MessageTitle: String { return self._s[782]! } - public var Passport_Address_Street: String { return self._s[784]! } + public var ContactInfo_PhoneLabelOther: String { return self._s[772]! } + public var PasscodeSettings_DoNotMatch: String { return self._s[773]! } + public var Weekday_Today: String { return self._s[776]! } + public var DialogList_Title: String { return self._s[777]! } + public var SettingsSearch_Synonyms_Notifications_MessageNotificationsPreview: String { return self._s[778]! } + public var Cache_ClearCache: String { return self._s[779]! } + public var CreatePoll_ExplanationInfo: String { return self._s[780]! } + public var Notifications_ResetAllNotificationsHelp: String { return self._s[782]! } + public var Stats_MessageTitle: String { return self._s[783]! } + public var Passport_Address_Street: String { return self._s[785]! } public func Channel_AdminLog_MessageRemovedGroupUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[785]!, self._r[785]!, [_0]) + return formatWithArgumentRanges(self._s[786]!, self._r[786]!, [_0]) } - public var Channel_AdminLog_ChannelEmptyText: String { return self._s[786]! } + public var Channel_AdminLog_ChannelEmptyText: String { return self._s[787]! } public func Login_PhoneGenericEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[787]!, self._r[787]!, [_0]) + return formatWithArgumentRanges(self._s[788]!, self._r[788]!, [_0]) } - public var TwoStepAuth_Email: String { return self._s[789]! } - public var Conversation_SecretLinkPreviewAlert: String { return self._s[790]! } - public var PrivacySettings_PasscodeOn: String { return self._s[791]! } - public var Camera_SquareMode: String { return self._s[793]! } - public var SocksProxySetup_Port: String { return self._s[794]! } - public var Watch_LastSeen_JustNow: String { return self._s[796]! } + public var TwoStepAuth_Email: String { return self._s[790]! } + public var Conversation_SecretLinkPreviewAlert: String { return self._s[791]! } + public var PrivacySettings_PasscodeOn: String { return self._s[792]! } + public var Camera_SquareMode: String { return self._s[794]! } + public var SocksProxySetup_Port: String { return self._s[795]! } + public var Watch_LastSeen_JustNow: String { return self._s[797]! } public func Location_ProximityAlertSetText(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[797]!, self._r[797]!, [_1, _2]) - } - public func PUSH_MESSAGE_GAME(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[798]!, self._r[798]!, [_1, _2]) } + public func PUSH_MESSAGE_GAME(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[799]!, self._r[799]!, [_1, _2]) + } public func Watch_LastSeen_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[799]!, self._r[799]!, [_0]) + return formatWithArgumentRanges(self._s[800]!, self._r[800]!, [_0]) } - public var EditTheme_Expand_Preview_OutgoingText: String { return self._s[800]! } - public var Channel_AdminLogFilter_EventsTitle: String { return self._s[801]! } - public var Watch_Suggestion_HoldOn: String { return self._s[804]! } + public var EditTheme_Expand_Preview_OutgoingText: String { return self._s[801]! } + public var Channel_AdminLogFilter_EventsTitle: String { return self._s[802]! } + public var Watch_Suggestion_HoldOn: String { return self._s[805]! } public func PUSH_CHANNEL_MESSAGE_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[805]!, self._r[805]!, [_1]) + return formatWithArgumentRanges(self._s[806]!, self._r[806]!, [_1]) } - public var CallSettings_TabIcon: String { return self._s[806]! } - public var ScheduledMessages_SendNow: String { return self._s[807]! } - public var Stats_GroupTopWeekdaysTitle: String { return self._s[808]! } - public var UserInfo_PhoneCall: String { return self._s[809]! } - public var Month_GenMarch: String { return self._s[810]! } - public var Camera_Discard: String { return self._s[811]! } - public var InfoPlist_NSFaceIDUsageDescription: String { return self._s[812]! } - public var Passport_RequestedInformation: String { return self._s[813]! } + public var CallSettings_TabIcon: String { return self._s[807]! } + public var ScheduledMessages_SendNow: String { return self._s[808]! } + public var Stats_GroupTopWeekdaysTitle: String { return self._s[809]! } + public var UserInfo_PhoneCall: String { return self._s[810]! } + public var Month_GenMarch: String { return self._s[811]! } + public var Camera_Discard: String { return self._s[812]! } + public var InfoPlist_NSFaceIDUsageDescription: String { return self._s[813]! } + public var Passport_RequestedInformation: String { return self._s[814]! } public func Notification_ProximityYouReached(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[815]!, self._r[815]!, [_1, _2]) + return formatWithArgumentRanges(self._s[816]!, self._r[816]!, [_1, _2]) } - public var Passport_Language_ro: String { return self._s[816]! } + public var Passport_Language_ro: String { return self._s[817]! } public func PUSH_CHAT_MESSAGE_DOC(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[817]!, self._r[817]!, [_1, _2]) + return formatWithArgumentRanges(self._s[818]!, self._r[818]!, [_1, _2]) } - public var AutoDownloadSettings_ResetHelp: String { return self._s[818]! } - public var Passport_Identity_DocumentDetails: String { return self._s[820]! } - public var Passport_Address_ScansHelp: String { return self._s[821]! } - public var Location_LiveLocationRequired_Title: String { return self._s[822]! } - public var ClearCache_StorageCache: String { return self._s[823]! } - public var Theme_Colors_ColorWallpaperWarningProceed: String { return self._s[824]! } - public var Conversation_RestrictedText: String { return self._s[825]! } - public var Notifications_MessageNotifications: String { return self._s[827]! } - public var Passport_Scans: String { return self._s[828]! } - public var TwoStepAuth_SetupHintTitle: String { return self._s[830]! } - public var LogoutOptions_ContactSupportTitle: String { return self._s[831]! } - public var Passport_Identity_SelfieHelp: String { return self._s[832]! } - public var Permissions_NotificationsUnreachableText_v0: String { return self._s[833]! } - public var Privacy_PaymentsClear_PaymentInfo: String { return self._s[834]! } - public var ShareMenu_CopyShareLinkGame: String { return self._s[835]! } - public var PeerInfo_ButtonSearch: String { return self._s[836]! } + public var AutoDownloadSettings_ResetHelp: String { return self._s[819]! } + public var Passport_Identity_DocumentDetails: String { return self._s[821]! } + public var Passport_Address_ScansHelp: String { return self._s[822]! } + public var Location_LiveLocationRequired_Title: String { return self._s[823]! } + public var ClearCache_StorageCache: String { return self._s[824]! } + public var Theme_Colors_ColorWallpaperWarningProceed: String { return self._s[825]! } + public var Conversation_RestrictedText: String { return self._s[826]! } + public var Notifications_MessageNotifications: String { return self._s[828]! } + public var Passport_Scans: String { return self._s[829]! } + public var TwoStepAuth_SetupHintTitle: String { return self._s[831]! } + public var LogoutOptions_ContactSupportTitle: String { return self._s[832]! } + public var Passport_Identity_SelfieHelp: String { return self._s[833]! } + public var Permissions_NotificationsUnreachableText_v0: String { return self._s[834]! } + public var Privacy_PaymentsClear_PaymentInfo: String { return self._s[835]! } + public var ShareMenu_CopyShareLinkGame: String { return self._s[836]! } + public var PeerInfo_ButtonSearch: String { return self._s[837]! } public func Notification_ProximityReachedYou(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[839]!, self._r[839]!, [_1, _2]) + return formatWithArgumentRanges(self._s[840]!, self._r[840]!, [_1, _2]) } - public var SettingsSearch_Synonyms_Privacy_Data_ClearPaymentsInfo: String { return self._s[840]! } - public var Passport_FieldIdentityTranslationHelp: String { return self._s[842]! } - public var Conversation_InputTextSilentBroadcastPlaceholder: String { return self._s[843]! } - public var Month_GenSeptember: String { return self._s[844]! } + public var SettingsSearch_Synonyms_Privacy_Data_ClearPaymentsInfo: String { return self._s[841]! } + public var Passport_FieldIdentityTranslationHelp: String { return self._s[843]! } + public var Conversation_InputTextSilentBroadcastPlaceholder: String { return self._s[844]! } + public var Month_GenSeptember: String { return self._s[845]! } public func Call_GroupFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[846]!, self._r[846]!, [_1, _2]) + return formatWithArgumentRanges(self._s[847]!, self._r[847]!, [_1, _2]) } - public var StickerPacksSettings_ArchivedPacks: String { return self._s[847]! } + public var StickerPacksSettings_ArchivedPacks: String { return self._s[848]! } public func Notification_VoiceChatInvitation(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[849]!, self._r[849]!, [_1, _2]) + return formatWithArgumentRanges(self._s[850]!, self._r[850]!, [_1, _2]) } public func Channel_Username_LinkHint(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[850]!, self._r[850]!, [_0]) + return formatWithArgumentRanges(self._s[851]!, self._r[851]!, [_0]) } public func PUSH_PINNED_CONTACT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[852]!, self._r[852]!, [_1, _2]) - } - public func PUSH_MESSAGE_VIDEOS(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[853]!, self._r[853]!, [_1, _2]) } - public var Calls_NotNow: String { return self._s[855]! } - public var Settings_ChatFolders: String { return self._s[859]! } - public var Login_PadPhoneHelpTitle: String { return self._s[860]! } - public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[861]! } - public var Settings_ChatBackground: String { return self._s[862]! } - public func PUSH_CHAT_MESSAGE_CONTACT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[864]!, self._r[864]!, [_1, _2]) + public func PUSH_MESSAGE_VIDEOS(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[854]!, self._r[854]!, [_1, _2]) } - public var ProxyServer_VoiceOver_Active: String { return self._s[865]! } - public var Call_StatusBusy: String { return self._s[866]! } - public var Conversation_MessageDeliveryFailed: String { return self._s[867]! } - public var Login_NetworkError: String { return self._s[869]! } - public var TwoStepAuth_SetupPasswordDescription: String { return self._s[870]! } - public var Privacy_Calls_Integration: String { return self._s[871]! } - public var DialogList_SearchSectionMessages: String { return self._s[872]! } - public var AutoDownloadSettings_VideosTitle: String { return self._s[873]! } - public var Preview_DeletePhoto: String { return self._s[874]! } - public var PrivacySettings_PhoneNumber: String { return self._s[876]! } - public var Forward_ErrorDisabledForChat: String { return self._s[877]! } - public var Watch_Compose_CurrentLocation: String { return self._s[878]! } - public var Settings_CallSettings: String { return self._s[879]! } - public var AutoDownloadSettings_TypePrivateChats: String { return self._s[880]! } - public var ChatList_Context_MarkAllAsRead: String { return self._s[881]! } - public var ChatSettings_AutoPlayAnimations: String { return self._s[882]! } - public var SaveIncomingPhotosSettings_Title: String { return self._s[883]! } - public var OwnershipTransfer_SecurityRequirements: String { return self._s[884]! } - public var Map_LiveLocationFor1Hour: String { return self._s[885]! } + public var Calls_NotNow: String { return self._s[856]! } + public var Settings_ChatFolders: String { return self._s[860]! } + public var Login_PadPhoneHelpTitle: String { return self._s[861]! } + public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[862]! } + public var Settings_ChatBackground: String { return self._s[863]! } + public func PUSH_CHAT_MESSAGE_CONTACT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[865]!, self._r[865]!, [_1, _2]) + } + public var ProxyServer_VoiceOver_Active: String { return self._s[866]! } + public var Call_StatusBusy: String { return self._s[867]! } + public var Conversation_MessageDeliveryFailed: String { return self._s[868]! } + public var Login_NetworkError: String { return self._s[870]! } + public var TwoStepAuth_SetupPasswordDescription: String { return self._s[871]! } + public var Privacy_Calls_Integration: String { return self._s[872]! } + public var DialogList_SearchSectionMessages: String { return self._s[873]! } + public var AutoDownloadSettings_VideosTitle: String { return self._s[874]! } + public var Preview_DeletePhoto: String { return self._s[875]! } + public var PrivacySettings_PhoneNumber: String { return self._s[877]! } + public var Forward_ErrorDisabledForChat: String { return self._s[878]! } + public var Watch_Compose_CurrentLocation: String { return self._s[879]! } + public var Settings_CallSettings: String { return self._s[880]! } + public var AutoDownloadSettings_TypePrivateChats: String { return self._s[881]! } + public var ChatList_Context_MarkAllAsRead: String { return self._s[882]! } + public var ChatSettings_AutoPlayAnimations: String { return self._s[883]! } + public var SaveIncomingPhotosSettings_Title: String { return self._s[884]! } + public var OwnershipTransfer_SecurityRequirements: String { return self._s[885]! } + public var Map_LiveLocationFor1Hour: String { return self._s[886]! } public func Privacy_GroupsAndChannels_InviteToGroupError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[886]!, self._r[886]!, [_0, _1]) + return formatWithArgumentRanges(self._s[887]!, self._r[887]!, [_0, _1]) } public func Notification_PinnedLiveLocationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[887]!, self._r[887]!, [_0]) + return formatWithArgumentRanges(self._s[888]!, self._r[888]!, [_0]) } - public var Conversation_UnvotePoll: String { return self._s[888]! } - public var TwoStepAuth_EnterEmailCode: String { return self._s[889]! } + public var Conversation_UnvotePoll: String { return self._s[889]! } + public var TwoStepAuth_EnterEmailCode: String { return self._s[890]! } public func LOCAL_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[890]!, self._r[890]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[891]!, self._r[891]!, [_1, "\(_2)"]) } - public var Passport_InfoTitle: String { return self._s[891]! } + public var Passport_InfoTitle: String { return self._s[892]! } public func Conversation_Bytes(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[892]!, self._r[892]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[893]!, self._r[893]!, ["\(_0)"]) } - public var AccentColor_Title: String { return self._s[893]! } + public var AccentColor_Title: String { return self._s[894]! } public func PUSH_MESSAGE_INVOICE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[894]!, self._r[894]!, [_1, _2]) + return formatWithArgumentRanges(self._s[895]!, self._r[895]!, [_1, _2]) } public func Notification_JoinedChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[897]!, self._r[897]!, [_0]) + return formatWithArgumentRanges(self._s[898]!, self._r[898]!, [_0]) } - public var AutoDownloadSettings_DataUsageCustom: String { return self._s[898]! } - public var Conversation_ShareBotLocationConfirmation: String { return self._s[899]! } - public var PrivacyPhoneNumberSettings_WhoCanSeeMyPhoneNumber: String { return self._s[900]! } - public var VoiceOver_Editing_ClearText: String { return self._s[901]! } - public var Conversation_Unarchive: String { return self._s[902]! } - public var Notification_CallOutgoing: String { return self._s[903]! } - public var Channel_Setup_PublicNoLink: String { return self._s[904]! } - public var Passport_Identity_GenderPlaceholder: String { return self._s[905]! } - public var Message_Animation: String { return self._s[906]! } - public var SettingsSearch_Synonyms_Appearance_Animations: String { return self._s[907]! } - public var ChatSettings_ConnectionType_Title: String { return self._s[908]! } + public var AutoDownloadSettings_DataUsageCustom: String { return self._s[899]! } + public var Conversation_ShareBotLocationConfirmation: String { return self._s[900]! } + public var PrivacyPhoneNumberSettings_WhoCanSeeMyPhoneNumber: String { return self._s[901]! } + public var VoiceOver_Editing_ClearText: String { return self._s[902]! } + public var Conversation_Unarchive: String { return self._s[903]! } + public var Notification_CallOutgoing: String { return self._s[904]! } + public var Channel_Setup_PublicNoLink: String { return self._s[905]! } + public var Passport_Identity_GenderPlaceholder: String { return self._s[906]! } + public var Message_Animation: String { return self._s[907]! } + public var SettingsSearch_Synonyms_Appearance_Animations: String { return self._s[908]! } + public var ChatSettings_ConnectionType_Title: String { return self._s[909]! } public func Watch_Time_ShortFullAt(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[909]!, self._r[909]!, [_1, _2]) + return formatWithArgumentRanges(self._s[910]!, self._r[910]!, [_1, _2]) } - public var Notification_CallBack: String { return self._s[911]! } - public var Appearance_Title: String { return self._s[913]! } - public var NotificationsSound_Glass: String { return self._s[915]! } - public var AutoDownloadSettings_CellularTitle: String { return self._s[917]! } - public var Notifications_PermissionsSuppressWarningTitle: String { return self._s[919]! } - public var ChatSearch_SearchPlaceholder: String { return self._s[920]! } - public var Passport_Identity_AddPassport: String { return self._s[921]! } - public var GroupPermission_NoAddMembers: String { return self._s[923]! } - public var ContactList_Context_SendMessage: String { return self._s[924]! } - public var PhotoEditor_GrainTool: String { return self._s[925]! } - public var Settings_CopyPhoneNumber: String { return self._s[926]! } - public var Passport_Address_City: String { return self._s[927]! } - public var ChannelRemoved_RemoveInfo: String { return self._s[928]! } - public var SocksProxySetup_Password: String { return self._s[930]! } - public var Settings_Passport: String { return self._s[931]! } - public var Channel_MessagePhotoUpdated: String { return self._s[933]! } - public var Stats_LanguagesTitle: String { return self._s[934]! } - public var ChatList_PeerTypeGroup: String { return self._s[935]! } - public var Privacy_Calls_P2PHelp: String { return self._s[936]! } - public var VoiceOver_Chat_PollNoVotes: String { return self._s[937]! } - public var Embed_PlayingInPIP: String { return self._s[938]! } - public var BlockedUsers_BlockUser: String { return self._s[941]! } - public var Login_CancelPhoneVerificationContinue: String { return self._s[942]! } + public var Notification_CallBack: String { return self._s[912]! } + public var Appearance_Title: String { return self._s[914]! } + public var NotificationsSound_Glass: String { return self._s[916]! } + public var AutoDownloadSettings_CellularTitle: String { return self._s[918]! } + public var Notifications_PermissionsSuppressWarningTitle: String { return self._s[920]! } + public var ChatSearch_SearchPlaceholder: String { return self._s[921]! } + public var Passport_Identity_AddPassport: String { return self._s[922]! } + public var GroupPermission_NoAddMembers: String { return self._s[924]! } + public var ContactList_Context_SendMessage: String { return self._s[925]! } + public var PhotoEditor_GrainTool: String { return self._s[926]! } + public var Settings_CopyPhoneNumber: String { return self._s[927]! } + public var Passport_Address_City: String { return self._s[928]! } + public var ChannelRemoved_RemoveInfo: String { return self._s[929]! } + public var SocksProxySetup_Password: String { return self._s[931]! } + public var Settings_Passport: String { return self._s[932]! } + public var Channel_MessagePhotoUpdated: String { return self._s[934]! } + public var Stats_LanguagesTitle: String { return self._s[935]! } + public var ChatList_PeerTypeGroup: String { return self._s[936]! } + public var Privacy_Calls_P2PHelp: String { return self._s[937]! } + public var VoiceOver_Chat_PollNoVotes: String { return self._s[938]! } + public var Embed_PlayingInPIP: String { return self._s[939]! } + public var BlockedUsers_BlockUser: String { return self._s[942]! } + public var Login_CancelPhoneVerificationContinue: String { return self._s[943]! } public func PUSH_CHANNEL_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[943]!, self._r[943]!, [_1]) + return formatWithArgumentRanges(self._s[944]!, self._r[944]!, [_1]) } - public var AuthSessions_LoggedIn: String { return self._s[944]! } - public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[945]! } - public var Activity_UploadingDocument: String { return self._s[946]! } - public var PeopleNearby_NoMembers: String { return self._s[947]! } - public var SettingsSearch_Synonyms_Stickers_Masks: String { return self._s[950]! } - public var ChatSettings_AutoPlayVideos: String { return self._s[951]! } - public var VoiceOver_Chat_OpenLinkHint: String { return self._s[952]! } - public var Settings_ViewVideo: String { return self._s[953]! } - public var Map_ShowPlaces: String { return self._s[955]! } - public var Passport_Phone_UseTelegramNumberHelp: String { return self._s[956]! } - public var InviteLink_Create_Title: String { return self._s[957]! } - public var SettingsSearch_Synonyms_Appearance_ChatBackground_Custom: String { return self._s[958]! } + public var AuthSessions_LoggedIn: String { return self._s[945]! } + public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[946]! } + public var Activity_UploadingDocument: String { return self._s[947]! } + public var PeopleNearby_NoMembers: String { return self._s[948]! } + public var SettingsSearch_Synonyms_Stickers_Masks: String { return self._s[951]! } + public var ChatSettings_AutoPlayVideos: String { return self._s[952]! } + public var VoiceOver_Chat_OpenLinkHint: String { return self._s[953]! } + public var Settings_ViewVideo: String { return self._s[954]! } + public var Map_ShowPlaces: String { return self._s[956]! } + public var Passport_Phone_UseTelegramNumberHelp: String { return self._s[957]! } + public var InviteLink_Create_Title: String { return self._s[958]! } + public var SettingsSearch_Synonyms_Appearance_ChatBackground_Custom: String { return self._s[959]! } public func PrivacySettings_LastSeenContactsPlus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[959]!, self._r[959]!, [_0]) + return formatWithArgumentRanges(self._s[960]!, self._r[960]!, [_0]) } - public var Conversation_StatusLeftGroup: String { return self._s[960]! } - public var Theme_Colors_Messages: String { return self._s[961]! } - public var AuthSessions_EmptyText: String { return self._s[962]! } + public var Conversation_StatusLeftGroup: String { return self._s[961]! } + public var Theme_Colors_Messages: String { return self._s[962]! } + public var AuthSessions_EmptyText: String { return self._s[963]! } public func PUSH_MESSAGE_CONTACT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[963]!, self._r[963]!, [_1]) + return formatWithArgumentRanges(self._s[964]!, self._r[964]!, [_1]) } - public var UserInfo_StartSecretChat: String { return self._s[964]! } - public var ChatListFolderSettings_EditFoldersInfo: String { return self._s[965]! } - public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[966]! } - public var Conversation_ReportSpamGroupConfirmation: String { return self._s[967]! } - public var Conversation_PrivateMessageLinkCopied: String { return self._s[969]! } - public var PeerInfo_PaneFiles: String { return self._s[970]! } - public var PrivacySettings_AutoArchive: String { return self._s[971]! } - public var Camera_VideoMode: String { return self._s[972]! } - public var NotificationsSound_Alert: String { return self._s[973]! } - public var Privacy_Forwards_NeverAllow_Title: String { return self._s[974]! } - public var Appearance_AutoNightTheme: String { return self._s[975]! } - public var Passport_Language_he: String { return self._s[976]! } - public var Passport_InvalidPasswordError: String { return self._s[977]! } - public var Conversation_PinMessageAlert_OnlyPin: String { return self._s[978]! } - public var UserInfo_InviteBotToGroup: String { return self._s[979]! } - public var Conversation_SilentBroadcastTooltipOff: String { return self._s[980]! } - public var Common_TakePhoto: String { return self._s[981]! } - public var Passport_Email_UseTelegramEmailHelp: String { return self._s[982]! } - public var ChatList_Context_JoinChannel: String { return self._s[983]! } - public var MediaPlayer_UnknownArtist: String { return self._s[984]! } - public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[987]! } - public var Channel_OwnershipTransfer_Title: String { return self._s[988]! } - public var EditTheme_UploadEditedTheme: String { return self._s[989]! } - public var Settings_SetProfilePhotoOrVideo: String { return self._s[991]! } - public var Passport_FieldOneOf_Delimeter: String { return self._s[992]! } - public var MessagePoll_ViewResults: String { return self._s[993]! } - public var Group_Setup_TypePrivateHelp: String { return self._s[994]! } - public var Passport_Address_OneOfTypeUtilityBill: String { return self._s[995]! } - public var ChatList_Search_ShowLess: String { return self._s[996]! } - public var InviteLink_Create_UsersLimitNoLimit: String { return self._s[997]! } - public var UserInfo_ShareBot: String { return self._s[998]! } - public var Privacy_Calls_P2P: String { return self._s[1000]! } - public var WebBrowser_InAppSafari: String { return self._s[1001]! } - public var SharedMedia_EmptyFilesText: String { return self._s[1004]! } - public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[1005]! } - public var GroupInfo_SetSound: String { return self._s[1006]! } - public var Permissions_PeopleNearbyAllowInSettings_v0: String { return self._s[1007]! } - public var Channel_AdminLog_MessagePreviousDescription: String { return self._s[1008]! } - public var Channel_AdminLogFilter_EventsAll: String { return self._s[1009]! } - public var CallSettings_UseLessData: String { return self._s[1010]! } - public var InfoPlist_NSCameraUsageDescription: String { return self._s[1011]! } - public var NotificationsSound_Chord: String { return self._s[1012]! } - public var PhotoEditor_CurvesTool: String { return self._s[1013]! } - public var Appearance_ThemePreview_Chat_2_Text: String { return self._s[1014]! } - public var Resolve_ErrorNotFound: String { return self._s[1015]! } - public var Activity_PlayingGame: String { return self._s[1016]! } + public var UserInfo_StartSecretChat: String { return self._s[965]! } + public var ChatListFolderSettings_EditFoldersInfo: String { return self._s[966]! } + public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[967]! } + public var Conversation_ReportSpamGroupConfirmation: String { return self._s[968]! } + public var Conversation_PrivateMessageLinkCopied: String { return self._s[970]! } + public var PeerInfo_PaneFiles: String { return self._s[971]! } + public var PrivacySettings_AutoArchive: String { return self._s[972]! } + public var Camera_VideoMode: String { return self._s[973]! } + public var NotificationsSound_Alert: String { return self._s[974]! } + public var Privacy_Forwards_NeverAllow_Title: String { return self._s[975]! } + public var Appearance_AutoNightTheme: String { return self._s[976]! } + public var Passport_Language_he: String { return self._s[977]! } + public var Passport_InvalidPasswordError: String { return self._s[978]! } + public var Conversation_PinMessageAlert_OnlyPin: String { return self._s[979]! } + public var UserInfo_InviteBotToGroup: String { return self._s[980]! } + public var Conversation_SilentBroadcastTooltipOff: String { return self._s[981]! } + public var Common_TakePhoto: String { return self._s[982]! } + public var Passport_Email_UseTelegramEmailHelp: String { return self._s[983]! } + public var ChatList_Context_JoinChannel: String { return self._s[984]! } + public var MediaPlayer_UnknownArtist: String { return self._s[985]! } + public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[988]! } + public var Channel_OwnershipTransfer_Title: String { return self._s[989]! } + public var EditTheme_UploadEditedTheme: String { return self._s[990]! } + public var Settings_SetProfilePhotoOrVideo: String { return self._s[992]! } + public var Passport_FieldOneOf_Delimeter: String { return self._s[993]! } + public var MessagePoll_ViewResults: String { return self._s[994]! } + public var Group_Setup_TypePrivateHelp: String { return self._s[995]! } + public var Passport_Address_OneOfTypeUtilityBill: String { return self._s[996]! } + public var ChatList_Search_ShowLess: String { return self._s[997]! } + public var InviteLink_Create_UsersLimitNoLimit: String { return self._s[998]! } + public var UserInfo_ShareBot: String { return self._s[999]! } + public var Privacy_Calls_P2P: String { return self._s[1001]! } + public var WebBrowser_InAppSafari: String { return self._s[1002]! } + public var SharedMedia_EmptyFilesText: String { return self._s[1005]! } + public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[1006]! } + public var GroupInfo_SetSound: String { return self._s[1007]! } + public var Permissions_PeopleNearbyAllowInSettings_v0: String { return self._s[1008]! } + public var Channel_AdminLog_MessagePreviousDescription: String { return self._s[1009]! } + public var Channel_AdminLogFilter_EventsAll: String { return self._s[1010]! } + public var CallSettings_UseLessData: String { return self._s[1011]! } + public var InfoPlist_NSCameraUsageDescription: String { return self._s[1012]! } + public var NotificationsSound_Chord: String { return self._s[1013]! } + public var PhotoEditor_CurvesTool: String { return self._s[1014]! } + public var Appearance_ThemePreview_Chat_2_Text: String { return self._s[1015]! } + public var Resolve_ErrorNotFound: String { return self._s[1016]! } + public var Activity_PlayingGame: String { return self._s[1017]! } public func VoiceChat_InvitedPeerText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1019]!, self._r[1019]!, [_0]) + return formatWithArgumentRanges(self._s[1020]!, self._r[1020]!, [_0]) } - public var StickerPacksSettings_AnimatedStickersInfo: String { return self._s[1020]! } + public var StickerPacksSettings_AnimatedStickersInfo: String { return self._s[1021]! } public func PUSH_CHANNEL_MESSAGE_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1021]!, self._r[1021]!, [_1]) + return formatWithArgumentRanges(self._s[1022]!, self._r[1022]!, [_1]) } - public var Conversation_ShareBotContactConfirmationTitle: String { return self._s[1022]! } - public var Notification_CallIncoming: String { return self._s[1023]! } - public var Stats_EnabledNotifications: String { return self._s[1024]! } - public var Notifications_PermissionsOpenSettings: String { return self._s[1025]! } - public var Checkout_ErrorProviderAccountTimeout: String { return self._s[1026]! } + public var Conversation_ShareBotContactConfirmationTitle: String { return self._s[1023]! } + public var Notification_CallIncoming: String { return self._s[1024]! } + public var Stats_EnabledNotifications: String { return self._s[1025]! } + public var Notifications_PermissionsOpenSettings: String { return self._s[1026]! } + public var Checkout_ErrorProviderAccountTimeout: String { return self._s[1027]! } public func Activity_RemindAboutChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1027]!, self._r[1027]!, [_0]) + return formatWithArgumentRanges(self._s[1028]!, self._r[1028]!, [_0]) } - public var VoiceChat_StatusMutedYou: String { return self._s[1028]! } - public var VoiceOver_Chat_ReplyToYourMessage: String { return self._s[1029]! } - public var Channel_DiscussionGroup_MakeHistoryPublic: String { return self._s[1030]! } - public var StickerPacksSettings_Title: String { return self._s[1031]! } + public var VoiceChat_StatusMutedYou: String { return self._s[1029]! } + public var VoiceOver_Chat_ReplyToYourMessage: String { return self._s[1030]! } + public var Channel_DiscussionGroup_MakeHistoryPublic: String { return self._s[1031]! } + public var StickerPacksSettings_Title: String { return self._s[1032]! } public func Channel_AdminLog_MessageGroupPreHistoryVisible(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1032]!, self._r[1032]!, [_0]) + return formatWithArgumentRanges(self._s[1033]!, self._r[1033]!, [_0]) } - public var Watch_NoConnection: String { return self._s[1033]! } - public var EncryptionKey_Title: String { return self._s[1034]! } - public var Widget_AuthRequired: String { return self._s[1035]! } + public var Watch_NoConnection: String { return self._s[1034]! } + public var EncryptionKey_Title: String { return self._s[1035]! } + public var Widget_AuthRequired: String { return self._s[1036]! } public func PUSH_MESSAGE_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1036]!, self._r[1036]!, [_1]) + return formatWithArgumentRanges(self._s[1037]!, self._r[1037]!, [_1]) } - public var Notifications_ExceptionsTitle: String { return self._s[1037]! } - public var EditTheme_Expand_TopInfo: String { return self._s[1038]! } + public var Notifications_ExceptionsTitle: String { return self._s[1038]! } + public var EditTheme_Expand_TopInfo: String { return self._s[1039]! } public func Contacts_AddPhoneNumber(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1039]!, self._r[1039]!, [_0]) + return formatWithArgumentRanges(self._s[1040]!, self._r[1040]!, [_0]) } - public var Channel_AdminLogFilter_EventsRestrictions: String { return self._s[1041]! } - public var Notifications_GroupNotificationsSound: String { return self._s[1042]! } - public var VoiceChat_SpeakPermissionAdmin: String { return self._s[1043]! } - public var Passport_Email_EnterOtherEmail: String { return self._s[1044]! } + public var Channel_AdminLogFilter_EventsRestrictions: String { return self._s[1042]! } + public var Notifications_GroupNotificationsSound: String { return self._s[1043]! } + public var VoiceChat_SpeakPermissionAdmin: String { return self._s[1044]! } + public var Passport_Email_EnterOtherEmail: String { return self._s[1045]! } public func VoiceChat_RemovePeerConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1047]!, self._r[1047]!, [_0]) + return formatWithArgumentRanges(self._s[1048]!, self._r[1048]!, [_0]) } - public var Conversation_AddToContacts: String { return self._s[1048]! } - public var AutoDownloadSettings_DataUsageMedium: String { return self._s[1049]! } - public var AuthSessions_LogOutApplications: String { return self._s[1051]! } - public var ChatList_Context_Unpin: String { return self._s[1052]! } - public var PeopleNearby_DiscoverDescription: String { return self._s[1053]! } - public var Notification_MessageLifetime1d: String { return self._s[1054]! } - public var PrivacyLastSeenSettings_NeverShareWith_Title: String { return self._s[1055]! } - public var ChatListFolder_CategoryChannels: String { return self._s[1056]! } - public var VoiceOver_Chat_SeenByRecipient: String { return self._s[1057]! } - public var Notifications_PermissionsAllow: String { return self._s[1058]! } - public var Undo_ScheduledMessagesCleared: String { return self._s[1059]! } - public var AutoDownloadSettings_PrivateChats: String { return self._s[1061]! } - public var ApplyLanguage_ChangeLanguageAction: String { return self._s[1062]! } + public var Conversation_AddToContacts: String { return self._s[1049]! } + public var AutoDownloadSettings_DataUsageMedium: String { return self._s[1050]! } + public var AuthSessions_LogOutApplications: String { return self._s[1052]! } + public var ChatList_Context_Unpin: String { return self._s[1053]! } + public var PeopleNearby_DiscoverDescription: String { return self._s[1054]! } + public var Notification_MessageLifetime1d: String { return self._s[1055]! } + public var PrivacyLastSeenSettings_NeverShareWith_Title: String { return self._s[1056]! } + public var ChatListFolder_CategoryChannels: String { return self._s[1057]! } + public var VoiceOver_Chat_SeenByRecipient: String { return self._s[1058]! } + public var Notifications_PermissionsAllow: String { return self._s[1059]! } + public var Undo_ScheduledMessagesCleared: String { return self._s[1060]! } + public var AutoDownloadSettings_PrivateChats: String { return self._s[1062]! } + public var ApplyLanguage_ChangeLanguageAction: String { return self._s[1063]! } public func PrivacySettings_LastSeenNobodyPlus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1063]!, self._r[1063]!, [_0]) + return formatWithArgumentRanges(self._s[1064]!, self._r[1064]!, [_0]) } - public var Notifications_MessageNotificationsHelp: String { return self._s[1066]! } - public var WallpaperSearch_ColorPink: String { return self._s[1067]! } - public var ContactInfo_PhoneNumberHidden: String { return self._s[1068]! } - public var Passport_Identity_IssueDate: String { return self._s[1070]! } + public var Notifications_MessageNotificationsHelp: String { return self._s[1067]! } + public var WallpaperSearch_ColorPink: String { return self._s[1068]! } + public var ContactInfo_PhoneNumberHidden: String { return self._s[1069]! } + public var Passport_Identity_IssueDate: String { return self._s[1071]! } public func PUSH_CHAT_MESSAGE_GIF(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1071]!, self._r[1071]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1072]!, self._r[1072]!, [_1, _2]) } - public var PrivacySettings_DeleteAccountIfAwayFor: String { return self._s[1072]! } - public var Channel_Info_Description: String { return self._s[1073]! } - public var Common_Back: String { return self._s[1074]! } - public var Weekday_ShortTuesday: String { return self._s[1075]! } - public var Chat_PinnedMessagesHiddenTitle: String { return self._s[1077]! } - public var ChatListFolder_AddChats: String { return self._s[1078]! } - public var Common_Close: String { return self._s[1080]! } - public var Map_OpenIn: String { return self._s[1081]! } - public var Group_Setup_HistoryTitle: String { return self._s[1082]! } - public var SettingsSearch_Synonyms_Data_AutoDownloadUsingWifi: String { return self._s[1083]! } - public var Notification_MessageLifetime1h: String { return self._s[1084]! } + public var PrivacySettings_DeleteAccountIfAwayFor: String { return self._s[1073]! } + public var Channel_Info_Description: String { return self._s[1074]! } + public var Common_Back: String { return self._s[1075]! } + public var Weekday_ShortTuesday: String { return self._s[1076]! } + public var Chat_PinnedMessagesHiddenTitle: String { return self._s[1078]! } + public var ChatListFolder_AddChats: String { return self._s[1079]! } + public var Common_Close: String { return self._s[1081]! } + public var Map_OpenIn: String { return self._s[1082]! } + public var Group_Setup_HistoryTitle: String { return self._s[1083]! } + public var SettingsSearch_Synonyms_Data_AutoDownloadUsingWifi: String { return self._s[1084]! } + public var Notification_MessageLifetime1h: String { return self._s[1085]! } public func CancelResetAccount_Success(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1085]!, self._r[1085]!, [_0]) + return formatWithArgumentRanges(self._s[1086]!, self._r[1086]!, [_0]) } - public var Watch_Contacts_NoResults: String { return self._s[1087]! } - public var TwoStepAuth_SetupResendEmailCode: String { return self._s[1088]! } - public var Checkout_Phone: String { return self._s[1089]! } - public var OwnershipTransfer_ComeBackLater: String { return self._s[1090]! } + public var Watch_Contacts_NoResults: String { return self._s[1088]! } + public var TwoStepAuth_SetupResendEmailCode: String { return self._s[1089]! } + public var Checkout_Phone: String { return self._s[1090]! } + public var OwnershipTransfer_ComeBackLater: String { return self._s[1091]! } public func Channel_CommentsGroup_HeaderGroupSet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1091]!, self._r[1091]!, [_0]) + return formatWithArgumentRanges(self._s[1092]!, self._r[1092]!, [_0]) } public func DialogList_MultipleTypingSuffix(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1092]!, self._r[1092]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[1093]!, self._r[1093]!, ["\(_0)"]) } - public var ChatAdmins_Title: String { return self._s[1093]! } - public var Appearance_ThemePreview_Chat_7_Text: String { return self._s[1094]! } + public var ChatAdmins_Title: String { return self._s[1094]! } + public var Appearance_ThemePreview_Chat_7_Text: String { return self._s[1095]! } public func PUSH_CHANNEL_MESSAGE_POLL(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1095]!, self._r[1095]!, [_1]) + return formatWithArgumentRanges(self._s[1096]!, self._r[1096]!, [_1]) } - public var Common_Done: String { return self._s[1096]! } - public var Appearance_ThemeCarouselNight: String { return self._s[1099]! } + public var Common_Done: String { return self._s[1097]! } + public var Appearance_ThemeCarouselNight: String { return self._s[1100]! } public func PUSH_PINNED_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1101]!, self._r[1101]!, [_1]) + return formatWithArgumentRanges(self._s[1102]!, self._r[1102]!, [_1]) } - public var InviteLink_Expired: String { return self._s[1103]! } - public var Preview_OpenInInstagram: String { return self._s[1104]! } - public var VoiceChat_StartRecordingStop: String { return self._s[1108]! } - public var Wallpaper_SetColor: String { return self._s[1109]! } - public var VoiceOver_Media_PlaybackRate: String { return self._s[1110]! } - public var ChatSettings_Groups: String { return self._s[1111]! } + public var InviteLink_Expired: String { return self._s[1104]! } + public var Preview_OpenInInstagram: String { return self._s[1105]! } + public var VoiceChat_StartRecordingStop: String { return self._s[1109]! } + public var Wallpaper_SetColor: String { return self._s[1110]! } + public var VoiceOver_Media_PlaybackRate: String { return self._s[1111]! } + public var ChatSettings_Groups: String { return self._s[1112]! } public func VoiceOver_Chat_VoiceMessageFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1112]!, self._r[1112]!, [_0]) + return formatWithArgumentRanges(self._s[1113]!, self._r[1113]!, [_0]) } - public var Contacts_SortedByName: String { return self._s[1113]! } - public var SettingsSearch_Synonyms_Notifications_ContactJoined: String { return self._s[1114]! } - public var Channel_Management_LabelCreator: String { return self._s[1115]! } - public var Contacts_PermissionsSuppressWarningTitle: String { return self._s[1116]! } + public var Contacts_SortedByName: String { return self._s[1114]! } + public var SettingsSearch_Synonyms_Notifications_ContactJoined: String { return self._s[1115]! } + public var Channel_Management_LabelCreator: String { return self._s[1116]! } + public var Contacts_PermissionsSuppressWarningTitle: String { return self._s[1117]! } public func PrivacySettings_LastSeenContactsMinusPlus(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1117]!, self._r[1117]!, [_0, _1]) + return formatWithArgumentRanges(self._s[1118]!, self._r[1118]!, [_0, _1]) } - public var Group_GroupMembersHeader: String { return self._s[1118]! } - public var Group_PublicLink_Title: String { return self._s[1119]! } - public var Channel_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[1120]! } - public var VoiceOver_Chat_Photo: String { return self._s[1121]! } - public var TwoFactorSetup_EmailVerification_Placeholder: String { return self._s[1122]! } - public var IntentsSettings_SuggestBy: String { return self._s[1123]! } - public var Privacy_Calls_AlwaysAllow_Placeholder: String { return self._s[1124]! } - public var Appearance_ThemePreview_ChatList_1_Name: String { return self._s[1125]! } - public var PhoneNumberHelp_ChangeNumber: String { return self._s[1126]! } - public var LogoutOptions_SetPasscodeText: String { return self._s[1127]! } - public var Map_OpenInMaps: String { return self._s[1128]! } - public var ContactInfo_PhoneLabelWorkFax: String { return self._s[1129]! } - public var BlockedUsers_Unblock: String { return self._s[1130]! } + public var Group_GroupMembersHeader: String { return self._s[1119]! } + public var Group_PublicLink_Title: String { return self._s[1120]! } + public var Channel_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[1121]! } + public var VoiceOver_Chat_Photo: String { return self._s[1122]! } + public var TwoFactorSetup_EmailVerification_Placeholder: String { return self._s[1123]! } + public var IntentsSettings_SuggestBy: String { return self._s[1124]! } + public var Privacy_Calls_AlwaysAllow_Placeholder: String { return self._s[1125]! } + public var Appearance_ThemePreview_ChatList_1_Name: String { return self._s[1126]! } + public var PhoneNumberHelp_ChangeNumber: String { return self._s[1127]! } + public var LogoutOptions_SetPasscodeText: String { return self._s[1128]! } + public var Map_OpenInMaps: String { return self._s[1129]! } + public var ContactInfo_PhoneLabelWorkFax: String { return self._s[1130]! } + public var BlockedUsers_Unblock: String { return self._s[1131]! } public func Settings_ApplyProxyAlert(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1131]!, self._r[1131]!, [_1, _2]) - } - public func Channel_AdminLog_MessageRestrictedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1132]!, self._r[1132]!, [_1, _2]) } - public var Conversation_Block: String { return self._s[1134]! } - public var Passport_Scans_UploadNew: String { return self._s[1135]! } - public var Share_Title: String { return self._s[1136]! } - public var Conversation_ApplyLocalization: String { return self._s[1137]! } - public var SharedMedia_EmptyLinksText: String { return self._s[1138]! } - public var Settings_NotificationsAndSounds: String { return self._s[1139]! } - public var Stats_ViewsByHoursTitle: String { return self._s[1140]! } - public var PhotoEditor_QualityMedium: String { return self._s[1141]! } - public var Conversation_ContextMenuCancelSending: String { return self._s[1142]! } + public func Channel_AdminLog_MessageRestrictedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1133]!, self._r[1133]!, [_1, _2]) + } + public var Conversation_Block: String { return self._s[1135]! } + public var Passport_Scans_UploadNew: String { return self._s[1136]! } + public var Share_Title: String { return self._s[1137]! } + public var Conversation_ApplyLocalization: String { return self._s[1138]! } + public var SharedMedia_EmptyLinksText: String { return self._s[1139]! } + public var Settings_NotificationsAndSounds: String { return self._s[1140]! } + public var Stats_ViewsByHoursTitle: String { return self._s[1141]! } + public var PhotoEditor_QualityMedium: String { return self._s[1142]! } + public var Conversation_ContextMenuCancelSending: String { return self._s[1143]! } public func PUSH_CHANNEL_MESSAGE_GAME(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1143]!, self._r[1143]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1144]!, self._r[1144]!, [_1, _2]) } - public var Conversation_RestrictedInline: String { return self._s[1144]! } - public var Passport_Language_tr: String { return self._s[1145]! } - public var Call_Mute: String { return self._s[1146]! } + public var Conversation_RestrictedInline: String { return self._s[1145]! } + public var Passport_Language_tr: String { return self._s[1146]! } + public var Call_Mute: String { return self._s[1147]! } public func Conversation_NoticeInvitedByInGroup(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1147]!, self._r[1147]!, [_0]) + return formatWithArgumentRanges(self._s[1148]!, self._r[1148]!, [_0]) } - public var Passport_Language_bn: String { return self._s[1148]! } - public var AccessDenied_LocationTracking: String { return self._s[1151]! } - public var Month_ShortOctober: String { return self._s[1152]! } - public var AutoDownloadSettings_WiFi: String { return self._s[1153]! } - public var ProfilePhoto_SetMainPhoto: String { return self._s[1155]! } - public var ChangePhoneNumberNumber_NewNumber: String { return self._s[1156]! } + public var Passport_Language_bn: String { return self._s[1149]! } + public var AccessDenied_LocationTracking: String { return self._s[1152]! } + public var Month_ShortOctober: String { return self._s[1153]! } + public var AutoDownloadSettings_WiFi: String { return self._s[1154]! } + public var ProfilePhoto_SetMainPhoto: String { return self._s[1156]! } + public var ChangePhoneNumberNumber_NewNumber: String { return self._s[1157]! } public func Time_MonthOfYear_m3(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1157]!, self._r[1157]!, [_0]) + return formatWithArgumentRanges(self._s[1158]!, self._r[1158]!, [_0]) } - public var Watch_ChannelInfo_Title: String { return self._s[1158]! } - public var State_Updating: String { return self._s[1159]! } - public var Conversation_UnblockUser: String { return self._s[1160]! } - public var Notifications_ChannelNotificationsSound: String { return self._s[1161]! } - public var Map_GetDirections: String { return self._s[1162]! } - public var Watch_Compose_AddContact: String { return self._s[1164]! } - public var Conversation_Dice_u26BD: String { return self._s[1165]! } - public var AccessDenied_PhotosRestricted: String { return self._s[1166]! } + public var Watch_ChannelInfo_Title: String { return self._s[1159]! } + public var State_Updating: String { return self._s[1160]! } + public var Conversation_UnblockUser: String { return self._s[1161]! } + public var Notifications_ChannelNotificationsSound: String { return self._s[1162]! } + public var Map_GetDirections: String { return self._s[1163]! } + public var Watch_Compose_AddContact: String { return self._s[1165]! } + public var Conversation_Dice_u26BD: String { return self._s[1166]! } + public var AccessDenied_PhotosRestricted: String { return self._s[1167]! } public func Channel_AdminLog_MessageRank(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1167]!, self._r[1167]!, [_1]) + return formatWithArgumentRanges(self._s[1168]!, self._r[1168]!, [_1]) } - public var Map_LoadError: String { return self._s[1169]! } - public var SettingsSearch_Synonyms_Privacy_Calls: String { return self._s[1170]! } - public var PhotoEditor_CropAuto: String { return self._s[1171]! } + public var Map_LoadError: String { return self._s[1170]! } + public var SettingsSearch_Synonyms_Privacy_Calls: String { return self._s[1171]! } + public var PhotoEditor_CropAuto: String { return self._s[1172]! } public func Target_ShareGameConfirmationPrivate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1174]!, self._r[1174]!, [_0]) + return formatWithArgumentRanges(self._s[1175]!, self._r[1175]!, [_0]) } - public var Username_TooManyPublicUsernamesError: String { return self._s[1176]! } + public var Username_TooManyPublicUsernamesError: String { return self._s[1177]! } public func PUSH_PINNED_GAME(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1177]!, self._r[1177]!, [_1]) + return formatWithArgumentRanges(self._s[1178]!, self._r[1178]!, [_1]) } - public var Settings_PhoneNumber: String { return self._s[1178]! } + public var Settings_PhoneNumber: String { return self._s[1179]! } public func Channel_AdminLog_MessageTransferedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1179]!, self._r[1179]!, [_1]) + return formatWithArgumentRanges(self._s[1180]!, self._r[1180]!, [_1]) } - public var Month_GenJune: String { return self._s[1181]! } - public var Notifications_ExceptionsGroupPlaceholder: String { return self._s[1182]! } - public var ChatListFolder_CategoryRead: String { return self._s[1183]! } - public var LoginPassword_ResetAccount: String { return self._s[1184]! } + public var Month_GenJune: String { return self._s[1182]! } + public var Notifications_ExceptionsGroupPlaceholder: String { return self._s[1183]! } + public var ChatListFolder_CategoryRead: String { return self._s[1184]! } + public var LoginPassword_ResetAccount: String { return self._s[1185]! } public func DialogList_SingleUploadingFileSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1185]!, self._r[1185]!, [_0]) + return formatWithArgumentRanges(self._s[1186]!, self._r[1186]!, [_0]) } - public var Call_CameraConfirmationConfirm: String { return self._s[1186]! } - public var Notification_RenamedChannel: String { return self._s[1187]! } + public var Call_CameraConfirmationConfirm: String { return self._s[1187]! } + public var Notification_RenamedChannel: String { return self._s[1188]! } public func Channel_AdminLog_MessageUnpinned(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1188]!, self._r[1188]!, [_0]) + return formatWithArgumentRanges(self._s[1189]!, self._r[1189]!, [_0]) } - public var Channel_AdminLogFilter_EventsAdmins: String { return self._s[1189]! } - public var IntentsSettings_Title: String { return self._s[1191]! } - public var Settings_AppleWatch: String { return self._s[1192]! } - public var DialogList_NoMessagesText: String { return self._s[1193]! } - public var GroupPermission_NoChangeInfo: String { return self._s[1194]! } - public var Channel_ErrorAccessDenied: String { return self._s[1196]! } - public var ScheduledMessages_EmptyPlaceholder: String { return self._s[1197]! } + public var Channel_AdminLogFilter_EventsAdmins: String { return self._s[1190]! } + public var IntentsSettings_Title: String { return self._s[1192]! } + public var Settings_AppleWatch: String { return self._s[1193]! } + public var DialogList_NoMessagesText: String { return self._s[1194]! } + public var GroupPermission_NoChangeInfo: String { return self._s[1195]! } + public var Channel_ErrorAccessDenied: String { return self._s[1197]! } + public var ScheduledMessages_EmptyPlaceholder: String { return self._s[1198]! } public func Message_StickerText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1198]!, self._r[1198]!, [_0]) + return formatWithArgumentRanges(self._s[1199]!, self._r[1199]!, [_0]) } - public var AuthSessions_TerminateOtherSessionsHelp: String { return self._s[1199]! } - public var StickerPacksSettings_AnimatedStickers: String { return self._s[1200]! } - public var Month_ShortJanuary: String { return self._s[1201]! } - public var Conversation_UnreadMessages: String { return self._s[1202]! } - public var Call_VoiceOver_VideoCallCanceled: String { return self._s[1204]! } + public var AuthSessions_TerminateOtherSessionsHelp: String { return self._s[1200]! } + public var StickerPacksSettings_AnimatedStickers: String { return self._s[1201]! } + public var Month_ShortJanuary: String { return self._s[1202]! } + public var Conversation_UnreadMessages: String { return self._s[1203]! } public var Conversation_PrivateChannelTooltip: String { return self._s[1205]! } - public var PrivacySettings_DeleteAccountTitle: String { return self._s[1207]! } - public var Channel_Members_AddBannedErrorAdmin: String { return self._s[1208]! } + public var Call_VoiceOver_VideoCallCanceled: String { return self._s[1206]! } + public var PrivacySettings_DeleteAccountTitle: String { return self._s[1208]! } + public var Channel_Members_AddBannedErrorAdmin: String { return self._s[1209]! } public func Conversation_ShareMyPhoneNumberConfirmation(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1212]!, self._r[1212]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1213]!, self._r[1213]!, [_1, _2]) } - public var Widget_ApplicationLocked: String { return self._s[1213]! } + public var Widget_ApplicationLocked: String { return self._s[1214]! } public func TextFormat_AddLinkText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1214]!, self._r[1214]!, [_0]) + return formatWithArgumentRanges(self._s[1215]!, self._r[1215]!, [_0]) } - public var Common_TakePhotoOrVideo: String { return self._s[1215]! } - public var Passport_Language_ru: String { return self._s[1216]! } - public var MediaPicker_VideoMuteDescription: String { return self._s[1217]! } - public var EditTheme_ErrorLinkTaken: String { return self._s[1218]! } + public var Common_TakePhotoOrVideo: String { return self._s[1216]! } + public var Passport_Language_ru: String { return self._s[1217]! } + public var MediaPicker_VideoMuteDescription: String { return self._s[1218]! } + public var EditTheme_ErrorLinkTaken: String { return self._s[1219]! } public func Group_EditAdmin_RankInfo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1220]!, self._r[1220]!, [_0]) + return formatWithArgumentRanges(self._s[1221]!, self._r[1221]!, [_0]) } - public var Channel_Members_AddAdminErrorBlacklisted: String { return self._s[1221]! } - public var Conversation_Owner: String { return self._s[1223]! } - public var Settings_FAQ_Intro: String { return self._s[1224]! } - public var PhotoEditor_QualityLow: String { return self._s[1226]! } - public var Widget_GalleryTitle: String { return self._s[1227]! } - public var Call_End: String { return self._s[1228]! } - public var StickerPacksSettings_FeaturedPacks: String { return self._s[1230]! } - public var Privacy_ContactsSyncHelp: String { return self._s[1231]! } - public var OldChannels_NoticeUpgradeText: String { return self._s[1235]! } - public var Conversation_Call: String { return self._s[1237]! } - public var Watch_MessageView_Title: String { return self._s[1238]! } + public var Channel_Members_AddAdminErrorBlacklisted: String { return self._s[1222]! } + public var Conversation_Owner: String { return self._s[1224]! } + public var Settings_FAQ_Intro: String { return self._s[1225]! } + public var PhotoEditor_QualityLow: String { return self._s[1227]! } + public var Widget_GalleryTitle: String { return self._s[1228]! } + public var Call_End: String { return self._s[1229]! } + public var StickerPacksSettings_FeaturedPacks: String { return self._s[1231]! } + public var Privacy_ContactsSyncHelp: String { return self._s[1232]! } + public var OldChannels_NoticeUpgradeText: String { return self._s[1236]! } + public var Conversation_Call: String { return self._s[1238]! } + public var Watch_MessageView_Title: String { return self._s[1239]! } public func Notification_RenamedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1239]!, self._r[1239]!, [_0]) + return formatWithArgumentRanges(self._s[1240]!, self._r[1240]!, [_0]) } - public var Passport_PasswordCompleteSetup: String { return self._s[1240]! } + public var Passport_PasswordCompleteSetup: String { return self._s[1241]! } public func Notification_ChangedGroupVideo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1241]!, self._r[1241]!, [_0]) + return formatWithArgumentRanges(self._s[1242]!, self._r[1242]!, [_0]) } public func TwoFactorSetup_EmailVerification_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1243]!, self._r[1243]!, [_0]) + return formatWithArgumentRanges(self._s[1244]!, self._r[1244]!, [_0]) } - public var Map_Location: String { return self._s[1244]! } - public var Watch_MessageView_ViewOnPhone: String { return self._s[1245]! } - public var Login_CountryCode: String { return self._s[1246]! } - public var Channel_DiscussionGroup_PrivateGroup: String { return self._s[1248]! } - public var ChatState_ConnectingToProxy: String { return self._s[1249]! } - public var Login_CallRequestState3: String { return self._s[1250]! } - public var NetworkUsageSettings_MediaAudioDataSection: String { return self._s[1252]! } - public var SocksProxySetup_ProxyStatusConnecting: String { return self._s[1253]! } - public var PrivacyLastSeenSettings_NeverShareWith_Placeholder: String { return self._s[1256]! } - public var Call_StatusEnded: String { return self._s[1257]! } - public var MusicPlayer_VoiceNote: String { return self._s[1260]! } + public var Map_Location: String { return self._s[1245]! } + public var Watch_MessageView_ViewOnPhone: String { return self._s[1246]! } + public var Login_CountryCode: String { return self._s[1247]! } + public var Channel_DiscussionGroup_PrivateGroup: String { return self._s[1249]! } + public var ChatState_ConnectingToProxy: String { return self._s[1250]! } + public var Login_CallRequestState3: String { return self._s[1251]! } + public var NetworkUsageSettings_MediaAudioDataSection: String { return self._s[1253]! } + public var SocksProxySetup_ProxyStatusConnecting: String { return self._s[1254]! } + public var PrivacyLastSeenSettings_NeverShareWith_Placeholder: String { return self._s[1257]! } + public var Call_StatusEnded: String { return self._s[1258]! } + public var MusicPlayer_VoiceNote: String { return self._s[1261]! } public func PUSH_CHANNEL_MESSAGE_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1261]!, self._r[1261]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1262]!, self._r[1262]!, [_1, _2]) } - public var VoiceOver_MessageContextShare: String { return self._s[1262]! } - public var ProfilePhoto_SearchWeb: String { return self._s[1263]! } - public var EditProfile_Title: String { return self._s[1264]! } + public var VoiceOver_MessageContextShare: String { return self._s[1263]! } + public var ProfilePhoto_SearchWeb: String { return self._s[1264]! } + public var EditProfile_Title: String { return self._s[1265]! } public func Notification_PinnedQuizMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1265]!, self._r[1265]!, [_0]) + return formatWithArgumentRanges(self._s[1266]!, self._r[1266]!, [_0]) } - public var VoiceChat_Unmute: String { return self._s[1266]! } - public var ChangePhoneNumberCode_CodePlaceholder: String { return self._s[1267]! } - public var NetworkUsageSettings_ResetStats: String { return self._s[1269]! } - public var NetworkUsageSettings_GeneralDataSection: String { return self._s[1270]! } - public var StickerPackActionInfo_AddedTitle: String { return self._s[1271]! } - public var Channel_BanUser_PermissionSendStickersAndGifs: String { return self._s[1272]! } + public var VoiceChat_Unmute: String { return self._s[1267]! } + public var ChangePhoneNumberCode_CodePlaceholder: String { return self._s[1268]! } + public var NetworkUsageSettings_ResetStats: String { return self._s[1270]! } + public var NetworkUsageSettings_GeneralDataSection: String { return self._s[1271]! } + public var StickerPackActionInfo_AddedTitle: String { return self._s[1272]! } + public var Channel_BanUser_PermissionSendStickersAndGifs: String { return self._s[1273]! } public func Call_ParticipantVideoVersionOutdatedError(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1273]!, self._r[1273]!, [_0]) + return formatWithArgumentRanges(self._s[1274]!, self._r[1274]!, [_0]) } - public var Location_ProximityNotification_Title: String { return self._s[1274]! } - public var AuthSessions_AddDeviceIntro_Text1: String { return self._s[1275]! } - public var Passport_Identity_LatinNameHelp: String { return self._s[1278]! } - public var AuthSessions_AddDeviceIntro_Text2: String { return self._s[1279]! } - public var Stats_GroupMembersTitle: String { return self._s[1280]! } - public var AuthSessions_AddDeviceIntro_Text3: String { return self._s[1281]! } - public var Contacts_PermissionsSuppressWarningText: String { return self._s[1282]! } - public var OpenFile_PotentiallyDangerousContentAlert: String { return self._s[1283]! } - public var Settings_SetUsername: String { return self._s[1284]! } - public var GroupInfo_ActionRestrict: String { return self._s[1285]! } - public var SettingsSearch_Synonyms_SavedMessages: String { return self._s[1286]! } + public var Location_ProximityNotification_Title: String { return self._s[1275]! } + public var AuthSessions_AddDeviceIntro_Text1: String { return self._s[1276]! } + public var Passport_Identity_LatinNameHelp: String { return self._s[1279]! } + public var AuthSessions_AddDeviceIntro_Text2: String { return self._s[1280]! } + public var Stats_GroupMembersTitle: String { return self._s[1281]! } + public var AuthSessions_AddDeviceIntro_Text3: String { return self._s[1282]! } + public var Contacts_PermissionsSuppressWarningText: String { return self._s[1283]! } + public var OpenFile_PotentiallyDangerousContentAlert: String { return self._s[1284]! } + public var Settings_SetUsername: String { return self._s[1285]! } + public var GroupInfo_ActionRestrict: String { return self._s[1286]! } + public var SettingsSearch_Synonyms_SavedMessages: String { return self._s[1287]! } public func Time_PreciseDate_m2(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1287]!, self._r[1287]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1288]!, self._r[1288]!, [_1, _2, _3]) } - public var Notifications_DisplayNamesOnLockScreenInfoWithLink: String { return self._s[1288]! } - public var Notification_Exceptions_AlwaysOff: String { return self._s[1289]! } - public var Conversation_ContextMenuDelete: String { return self._s[1290]! } - public var Privacy_Calls_WhoCanCallMe: String { return self._s[1291]! } - public var ChatList_PsaAlert_covid: String { return self._s[1294]! } - public var DialogList_Pin: String { return self._s[1295]! } - public var PrivacySettings_SecurityTitle: String { return self._s[1296]! } - public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[1297]! } - public var PeopleNearby_Groups: String { return self._s[1298]! } - public var Message_File: String { return self._s[1299]! } - public var Calls_NoCallsPlaceholder: String { return self._s[1300]! } - public var ChatList_GenericPsaLabel: String { return self._s[1302]! } - public var UserInfo_LastNamePlaceholder: String { return self._s[1303]! } - public var IntentsSettings_Reset: String { return self._s[1305]! } - public var Call_ConnectionErrorTitle: String { return self._s[1306]! } - public var PhotoEditor_SaturationTool: String { return self._s[1307]! } - public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[1308]! } - public var SettingsSearch_Synonyms_Stickers_ArchivedPacks: String { return self._s[1309]! } - public var Conversation_SearchNoResults: String { return self._s[1310]! } - public var Channel_DiscussionGroup_PrivateChannel: String { return self._s[1311]! } - public var Map_OpenInWaze: String { return self._s[1312]! } - public var InviteLink_PeopleJoinedNone: String { return self._s[1313]! } - public var WallpaperPreview_Title: String { return self._s[1314]! } + public var Notifications_DisplayNamesOnLockScreenInfoWithLink: String { return self._s[1289]! } + public var Notification_Exceptions_AlwaysOff: String { return self._s[1290]! } + public var Conversation_ContextMenuDelete: String { return self._s[1291]! } + public var Privacy_Calls_WhoCanCallMe: String { return self._s[1292]! } + public var ChatList_PsaAlert_covid: String { return self._s[1295]! } + public var DialogList_Pin: String { return self._s[1296]! } + public var PrivacySettings_SecurityTitle: String { return self._s[1297]! } + public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[1298]! } + public var PeopleNearby_Groups: String { return self._s[1299]! } + public var Message_File: String { return self._s[1300]! } + public var Calls_NoCallsPlaceholder: String { return self._s[1301]! } + public var ChatList_GenericPsaLabel: String { return self._s[1303]! } + public var UserInfo_LastNamePlaceholder: String { return self._s[1304]! } + public var IntentsSettings_Reset: String { return self._s[1306]! } + public var Call_ConnectionErrorTitle: String { return self._s[1307]! } + public var PhotoEditor_SaturationTool: String { return self._s[1308]! } + public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[1309]! } + public var SettingsSearch_Synonyms_Stickers_ArchivedPacks: String { return self._s[1310]! } + public var Conversation_SearchNoResults: String { return self._s[1311]! } + public var Channel_DiscussionGroup_PrivateChannel: String { return self._s[1312]! } + public var Map_OpenInWaze: String { return self._s[1313]! } + public var InviteLink_PeopleJoinedNone: String { return self._s[1314]! } + public var WallpaperPreview_Title: String { return self._s[1315]! } public func Passport_AcceptHelp(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1316]!, self._r[1316]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1317]!, self._r[1317]!, [_1, _2]) } - public var AuthSessions_AddDeviceIntro_Title: String { return self._s[1317]! } - public var VoiceOver_Chat_RecordModeVideoMessageInfo: String { return self._s[1318]! } - public var Passport_Identity_OneOfTypeInternalPassport: String { return self._s[1319]! } - public var Notifications_PermissionsUnreachableTitle: String { return self._s[1321]! } - public var Stats_Total: String { return self._s[1324]! } - public var Stats_GroupMessages: String { return self._s[1325]! } - public var TwoFactorSetup_Email_SkipAction: String { return self._s[1326]! } - public var CheckoutInfo_ErrorPhoneInvalid: String { return self._s[1327]! } - public var Passport_Identity_Translation: String { return self._s[1328]! } - public var Notifications_TextTone: String { return self._s[1331]! } - public var Settings_RemoveConfirmation: String { return self._s[1333]! } - public var ScheduledMessages_Delete: String { return self._s[1334]! } - public var Channel_AdminLog_BanEmbedLinks: String { return self._s[1335]! } - public var Passport_PasswordNext: String { return self._s[1336]! } + public var AuthSessions_AddDeviceIntro_Title: String { return self._s[1318]! } + public var VoiceOver_Chat_RecordModeVideoMessageInfo: String { return self._s[1319]! } + public var Passport_Identity_OneOfTypeInternalPassport: String { return self._s[1320]! } + public var Notifications_PermissionsUnreachableTitle: String { return self._s[1322]! } + public var Stats_Total: String { return self._s[1325]! } + public var Stats_GroupMessages: String { return self._s[1326]! } + public var TwoFactorSetup_Email_SkipAction: String { return self._s[1327]! } + public var CheckoutInfo_ErrorPhoneInvalid: String { return self._s[1328]! } + public var Passport_Identity_Translation: String { return self._s[1329]! } + public var Notifications_TextTone: String { return self._s[1332]! } + public var Settings_RemoveConfirmation: String { return self._s[1334]! } + public var ScheduledMessages_Delete: String { return self._s[1335]! } + public var Channel_AdminLog_BanEmbedLinks: String { return self._s[1336]! } + public var Passport_PasswordNext: String { return self._s[1337]! } public func PUSH_ENCRYPTED_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1337]!, self._r[1337]!, [_1]) + return formatWithArgumentRanges(self._s[1338]!, self._r[1338]!, [_1]) } - public var Passport_Address_EditBankStatement: String { return self._s[1338]! } - public var PhotoEditor_ShadowsTool: String { return self._s[1339]! } - public var Notification_VideoCallMissed: String { return self._s[1340]! } - public var AccessDenied_CameraDisabled: String { return self._s[1341]! } - public var AuthSessions_AddDevice_ScanInfo: String { return self._s[1342]! } - public var Notifications_ExceptionsMuted: String { return self._s[1343]! } - public var Conversation_ScheduleMessage_SendWhenOnline: String { return self._s[1344]! } - public var Channel_BlackList_Title: String { return self._s[1345]! } - public var PasscodeSettings_4DigitCode: String { return self._s[1346]! } - public var NotificationsSound_Bamboo: String { return self._s[1347]! } - public var PrivacySettings_LastSeenContacts: String { return self._s[1348]! } - public var Passport_Address_TypeUtilityBill: String { return self._s[1349]! } - public var Passport_Address_CountryPlaceholder: String { return self._s[1350]! } - public var GroupPermission_SectionTitle: String { return self._s[1351]! } - public var InviteLink_ContextRevoke: String { return self._s[1352]! } + public var Passport_Address_EditBankStatement: String { return self._s[1339]! } + public var PhotoEditor_ShadowsTool: String { return self._s[1340]! } + public var Notification_VideoCallMissed: String { return self._s[1341]! } + public var AccessDenied_CameraDisabled: String { return self._s[1342]! } + public var AuthSessions_AddDevice_ScanInfo: String { return self._s[1343]! } + public var Notifications_ExceptionsMuted: String { return self._s[1344]! } + public var Conversation_ScheduleMessage_SendWhenOnline: String { return self._s[1345]! } + public var Channel_BlackList_Title: String { return self._s[1346]! } + public var PasscodeSettings_4DigitCode: String { return self._s[1347]! } + public var NotificationsSound_Bamboo: String { return self._s[1348]! } + public var PrivacySettings_LastSeenContacts: String { return self._s[1349]! } + public var Passport_Address_TypeUtilityBill: String { return self._s[1350]! } + public var Passport_Address_CountryPlaceholder: String { return self._s[1351]! } + public var GroupPermission_SectionTitle: String { return self._s[1352]! } + public var InviteLink_ContextRevoke: String { return self._s[1353]! } public func Notification_InvitedMultiple(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1353]!, self._r[1353]!, [_0, _1]) + return formatWithArgumentRanges(self._s[1354]!, self._r[1354]!, [_0, _1]) } - public var CheckoutInfo_ShippingInfoStatePlaceholder: String { return self._s[1354]! } - public var Channel_LeaveChannel: String { return self._s[1355]! } - public var Watch_Notification_Joined: String { return self._s[1356]! } - public var PeerInfo_ButtonMore: String { return self._s[1357]! } - public var Passport_FieldEmailHelp: String { return self._s[1358]! } - public var ChatList_Context_Pin: String { return self._s[1359]! } + public var CheckoutInfo_ShippingInfoStatePlaceholder: String { return self._s[1355]! } + public var Channel_LeaveChannel: String { return self._s[1356]! } + public var Watch_Notification_Joined: String { return self._s[1357]! } + public var PeerInfo_ButtonMore: String { return self._s[1358]! } + public var Passport_FieldEmailHelp: String { return self._s[1359]! } + public var ChatList_Context_Pin: String { return self._s[1360]! } public func Time_MonthOfYear_m9(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1360]!, self._r[1360]!, [_0]) + return formatWithArgumentRanges(self._s[1361]!, self._r[1361]!, [_0]) } - public var Group_Location_CreateInThisPlace: String { return self._s[1361]! } - public var PhotoEditor_QualityVeryHigh: String { return self._s[1362]! } - public var Tour_Title5: String { return self._s[1363]! } + public var Group_Location_CreateInThisPlace: String { return self._s[1362]! } + public var PhotoEditor_QualityVeryHigh: String { return self._s[1363]! } + public var Tour_Title5: String { return self._s[1364]! } public func PUSH_CHAT_MESSAGE_FWD(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1364]!, self._r[1364]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1365]!, self._r[1365]!, [_1, _2]) } - public var Passport_Language_en: String { return self._s[1365]! } - public var Checkout_Name: String { return self._s[1366]! } + public var Passport_Language_en: String { return self._s[1366]! } + public var Checkout_Name: String { return self._s[1367]! } public func NetworkUsageSettings_WifiUsageSince(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1367]!, self._r[1367]!, [_0]) + return formatWithArgumentRanges(self._s[1368]!, self._r[1368]!, [_0]) } - public var PhotoEditor_EnhanceTool: String { return self._s[1368]! } + public var PhotoEditor_EnhanceTool: String { return self._s[1369]! } public func PUSH_CHAT_DELETE_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1369]!, self._r[1369]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1370]!, self._r[1370]!, [_1, _2]) } public func Login_TermsOfService_ProceedBot(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1370]!, self._r[1370]!, [_0]) + return formatWithArgumentRanges(self._s[1371]!, self._r[1371]!, [_0]) } - public var Group_ErrorSendRestrictedMedia: String { return self._s[1371]! } + public var Group_ErrorSendRestrictedMedia: String { return self._s[1372]! } public func UserInfo_NotificationsDefaultSound(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1372]!, self._r[1372]!, [_0]) + return formatWithArgumentRanges(self._s[1373]!, self._r[1373]!, [_0]) } - public var Login_UnknownError: String { return self._s[1373]! } - public var Passport_Identity_TypeDriversLicense: String { return self._s[1376]! } - public var ChatList_AutoarchiveSuggestion_Title: String { return self._s[1377]! } - public var Watch_PhotoView_Title: String { return self._s[1378]! } - public var Appearance_ThemePreview_ChatList_3_Text: String { return self._s[1379]! } - public var Checkout_TotalAmount: String { return self._s[1380]! } - public var ChatList_RemoveFolderAction: String { return self._s[1381]! } - public var GroupInfo_SetGroupPhoto: String { return self._s[1382]! } - public var Watch_AppName: String { return self._s[1383]! } + public var Login_UnknownError: String { return self._s[1374]! } + public var Passport_Identity_TypeDriversLicense: String { return self._s[1377]! } + public var ChatList_AutoarchiveSuggestion_Title: String { return self._s[1378]! } + public var Watch_PhotoView_Title: String { return self._s[1379]! } + public var Appearance_ThemePreview_ChatList_3_Text: String { return self._s[1380]! } + public var Checkout_TotalAmount: String { return self._s[1381]! } + public var ChatList_RemoveFolderAction: String { return self._s[1382]! } + public var GroupInfo_SetGroupPhoto: String { return self._s[1383]! } + public var Watch_AppName: String { return self._s[1384]! } public func PUSH_PINNED_GAME_SCORE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1384]!, self._r[1384]!, [_1]) + return formatWithArgumentRanges(self._s[1385]!, self._r[1385]!, [_1]) } - public var Channel_Username_CheckingUsername: String { return self._s[1385]! } - public var ContactList_Context_Call: String { return self._s[1386]! } - public var ChatList_ReorderTabs: String { return self._s[1387]! } - public var Watch_ChatList_Compose: String { return self._s[1388]! } + public var Channel_Username_CheckingUsername: String { return self._s[1386]! } + public var ContactList_Context_Call: String { return self._s[1387]! } + public var ChatList_ReorderTabs: String { return self._s[1388]! } + public var Watch_ChatList_Compose: String { return self._s[1389]! } public func Conversation_LiveLocationYouAnd(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1389]!, self._r[1389]!, [_0]) + return formatWithArgumentRanges(self._s[1390]!, self._r[1390]!, [_0]) } - public var Channel_AdminLog_EmptyFilterTitle: String { return self._s[1390]! } - public var ArchivedChats_IntroTitle1: String { return self._s[1391]! } + public var Channel_AdminLog_EmptyFilterTitle: String { return self._s[1391]! } + public var ArchivedChats_IntroTitle1: String { return self._s[1392]! } public func PUSH_ENCRYPTION_ACCEPT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1392]!, self._r[1392]!, [_1]) + return formatWithArgumentRanges(self._s[1393]!, self._r[1393]!, [_1]) } - public var Call_StatusRequesting: String { return self._s[1394]! } - public var Checkout_TotalPaidAmount: String { return self._s[1395]! } - public var Weekday_Friday: String { return self._s[1397]! } - public var CreateGroup_ChannelsTooMuch: String { return self._s[1398]! } - public var Watch_ChatList_NoConversationsText: String { return self._s[1399]! } + public var Call_StatusRequesting: String { return self._s[1395]! } + public var Checkout_TotalPaidAmount: String { return self._s[1396]! } + public var Weekday_Friday: String { return self._s[1398]! } + public var CreateGroup_ChannelsTooMuch: String { return self._s[1399]! } + public var Watch_ChatList_NoConversationsText: String { return self._s[1400]! } public func Channel_AdminLog_MessageChangedGroupStickerPack(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1400]!, self._r[1400]!, [_0]) + return formatWithArgumentRanges(self._s[1401]!, self._r[1401]!, [_0]) } - public var SecretVideo_Title: String { return self._s[1401]! } + public var SecretVideo_Title: String { return self._s[1402]! } public func Notification_PinnedStickerMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1404]!, self._r[1404]!, [_0]) + return formatWithArgumentRanges(self._s[1405]!, self._r[1405]!, [_0]) } - public var Undo_Undo: String { return self._s[1405]! } - public var Watch_Microphone_Access: String { return self._s[1406]! } + public var Undo_Undo: String { return self._s[1406]! } + public var Watch_Microphone_Access: String { return self._s[1407]! } public func PUSH_CHAT_MESSAGE_PHOTO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1407]!, self._r[1407]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1408]!, self._r[1408]!, [_1, _2]) } public func ChatList_Search_NoResultsQueryDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1408]!, self._r[1408]!, [_0]) + return formatWithArgumentRanges(self._s[1409]!, self._r[1409]!, [_0]) } - public var Checkout_NewCard_PostcodeTitle: String { return self._s[1410]! } - public var TwoFactorSetup_Intro_Action: String { return self._s[1411]! } - public var Passport_Language_ne: String { return self._s[1412]! } - public var TwoStepAuth_EmailHelp: String { return self._s[1414]! } - public var Profile_MessageLifetime2s: String { return self._s[1415]! } + public var Checkout_NewCard_PostcodeTitle: String { return self._s[1411]! } + public var TwoFactorSetup_Intro_Action: String { return self._s[1412]! } + public var Passport_Language_ne: String { return self._s[1413]! } + public var TwoStepAuth_EmailHelp: String { return self._s[1415]! } + public var Profile_MessageLifetime2s: String { return self._s[1416]! } public func Conversation_MessageDialogRetryAll(_ _1: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1416]!, self._r[1416]!, ["\(_1)"]) + return formatWithArgumentRanges(self._s[1417]!, self._r[1417]!, ["\(_1)"]) } public func Items_NOfM(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1417]!, self._r[1417]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1418]!, self._r[1418]!, [_1, _2]) } - public var Media_LimitedAccessText: String { return self._s[1418]! } + public var Media_LimitedAccessText: String { return self._s[1419]! } public func PUSH_CHAT_TITLE_EDITED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1419]!, self._r[1419]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1420]!, self._r[1420]!, [_1, _2]) } - public var GroupPermission_NoPinMessages: String { return self._s[1420]! } + public var GroupPermission_NoPinMessages: String { return self._s[1421]! } public func Notification_VoiceChatStarted(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1421]!, self._r[1421]!, [_1]) + return formatWithArgumentRanges(self._s[1422]!, self._r[1422]!, [_1]) } public func Notification_CreatedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1422]!, self._r[1422]!, [_0]) + return formatWithArgumentRanges(self._s[1423]!, self._r[1423]!, [_0]) } - public var FastTwoStepSetup_HintHelp: String { return self._s[1423]! } - public var WallpaperSearch_ColorRed: String { return self._s[1424]! } - public var Watch_ConnectionDescription: String { return self._s[1425]! } - public var Notification_Exceptions_AddException: String { return self._s[1426]! } - public var LocalGroup_IrrelevantWarning: String { return self._s[1427]! } - public var VoiceOver_MessageContextDelete: String { return self._s[1428]! } - public var LogoutOptions_AlternativeOptionsSection: String { return self._s[1429]! } - public var Passport_PasswordPlaceholder: String { return self._s[1430]! } - public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[1431]! } - public var Stats_MessageInteractionsTitle: String { return self._s[1432]! } - public var Appearance_ThemeCarouselClassic: String { return self._s[1433]! } - public var TwoFactorSetup_Email_SkipConfirmationText: String { return self._s[1435]! } - public var Channel_AdminLog_PinMessages: String { return self._s[1436]! } - public var Passport_Address_AddRentalAgreement: String { return self._s[1437]! } - public var Watch_Message_Game: String { return self._s[1438]! } - public var PrivacyLastSeenSettings_NeverShareWith: String { return self._s[1439]! } - public var PrivacyPolicy_DeclineLastWarning: String { return self._s[1440]! } - public var EditTheme_FileReadError: String { return self._s[1441]! } - public var Group_ErrorAddBlocked: String { return self._s[1442]! } - public var CallSettings_UseLessDataLongDescription: String { return self._s[1443]! } + public var FastTwoStepSetup_HintHelp: String { return self._s[1424]! } + public var WallpaperSearch_ColorRed: String { return self._s[1425]! } + public var Watch_ConnectionDescription: String { return self._s[1426]! } + public var Notification_Exceptions_AddException: String { return self._s[1427]! } + public var LocalGroup_IrrelevantWarning: String { return self._s[1428]! } + public var VoiceOver_MessageContextDelete: String { return self._s[1429]! } + public var LogoutOptions_AlternativeOptionsSection: String { return self._s[1430]! } + public var Passport_PasswordPlaceholder: String { return self._s[1431]! } + public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[1432]! } + public var Stats_MessageInteractionsTitle: String { return self._s[1433]! } + public var Appearance_ThemeCarouselClassic: String { return self._s[1434]! } + public var TwoFactorSetup_Email_SkipConfirmationText: String { return self._s[1436]! } + public var Channel_AdminLog_PinMessages: String { return self._s[1437]! } + public var Passport_Address_AddRentalAgreement: String { return self._s[1438]! } + public var Watch_Message_Game: String { return self._s[1439]! } + public var PrivacyLastSeenSettings_NeverShareWith: String { return self._s[1440]! } + public var PrivacyPolicy_DeclineLastWarning: String { return self._s[1441]! } + public var EditTheme_FileReadError: String { return self._s[1442]! } + public var Group_ErrorAddBlocked: String { return self._s[1443]! } + public var CallSettings_UseLessDataLongDescription: String { return self._s[1444]! } public func PUSH_MESSAGE_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1445]!, self._r[1445]!, [_1]) + return formatWithArgumentRanges(self._s[1446]!, self._r[1446]!, [_1]) } public func UserInfo_BlockConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1446]!, self._r[1446]!, [_0]) + return formatWithArgumentRanges(self._s[1447]!, self._r[1447]!, [_0]) } - public var CheckoutInfo_ShippingInfoAddress2Placeholder: String { return self._s[1447]! } - public var TwoFactorSetup_EmailVerification_Action: String { return self._s[1448]! } + public var CheckoutInfo_ShippingInfoAddress2Placeholder: String { return self._s[1448]! } + public var TwoFactorSetup_EmailVerification_Action: String { return self._s[1449]! } public func Username_LinkHint(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1449]!, self._r[1449]!, [_0]) + return formatWithArgumentRanges(self._s[1450]!, self._r[1450]!, [_0]) } - public var ConversationProfile_ErrorCreatingConversation: String { return self._s[1450]! } - public var Bot_GroupStatusReadsHistory: String { return self._s[1451]! } - public var PhotoEditor_CurvesRed: String { return self._s[1452]! } - public var InstantPage_TapToOpenLink: String { return self._s[1453]! } - public var InviteLink_PeopleJoinedShortNoneExpired: String { return self._s[1454]! } - public var FastTwoStepSetup_PasswordHelp: String { return self._s[1455]! } - public var Conversation_DiscussionNotStarted: String { return self._s[1456]! } - public var Notification_CallMissedShort: String { return self._s[1457]! } + public var ConversationProfile_ErrorCreatingConversation: String { return self._s[1451]! } + public var Bot_GroupStatusReadsHistory: String { return self._s[1452]! } + public var PhotoEditor_CurvesRed: String { return self._s[1453]! } + public var InstantPage_TapToOpenLink: String { return self._s[1454]! } + public var InviteLink_PeopleJoinedShortNoneExpired: String { return self._s[1455]! } + public var FastTwoStepSetup_PasswordHelp: String { return self._s[1456]! } + public var Conversation_DiscussionNotStarted: String { return self._s[1457]! } + public var Notification_CallMissedShort: String { return self._s[1458]! } public func Notification_JoinedGroupByLink(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1458]!, self._r[1458]!, [_0]) + return formatWithArgumentRanges(self._s[1459]!, self._r[1459]!, [_0]) } - public var Conversation_DeleteMessagesForEveryone: String { return self._s[1459]! } - public var Permissions_SiriTitle_v0: String { return self._s[1460]! } - public var GroupInfo_AddUserLeftError: String { return self._s[1461]! } - public var Conversation_SendMessage_SendSilently: String { return self._s[1462]! } - public var Paint_Duplicate: String { return self._s[1463]! } - public var AttachmentMenu_WebSearch: String { return self._s[1464]! } - public var Bot_Stop: String { return self._s[1466]! } - public var Conversation_PrivateChannelTimeLimitedAlertTitle: String { return self._s[1467]! } - public var ReportGroupLocation_Report: String { return self._s[1468]! } - public var Compose_Create: String { return self._s[1469]! } - public var Stats_GroupViewers: String { return self._s[1470]! } - public var AutoDownloadSettings_Channels: String { return self._s[1471]! } - public var PhotoEditor_QualityHigh: String { return self._s[1472]! } - public var VoiceChat_Leave: String { return self._s[1473]! } - public var Call_Speaker: String { return self._s[1474]! } + public var Conversation_DeleteMessagesForEveryone: String { return self._s[1460]! } + public var Permissions_SiriTitle_v0: String { return self._s[1461]! } + public var GroupInfo_AddUserLeftError: String { return self._s[1462]! } + public var Conversation_SendMessage_SendSilently: String { return self._s[1463]! } + public var Paint_Duplicate: String { return self._s[1464]! } + public var AttachmentMenu_WebSearch: String { return self._s[1465]! } + public var Bot_Stop: String { return self._s[1467]! } + public var Conversation_PrivateChannelTimeLimitedAlertTitle: String { return self._s[1468]! } + public var ReportGroupLocation_Report: String { return self._s[1469]! } + public var Compose_Create: String { return self._s[1470]! } + public var Stats_GroupViewers: String { return self._s[1471]! } + public var AutoDownloadSettings_Channels: String { return self._s[1472]! } + public var PhotoEditor_QualityHigh: String { return self._s[1473]! } + public var VoiceChat_Leave: String { return self._s[1474]! } + public var Call_Speaker: String { return self._s[1475]! } public func ChatList_LeaveGroupConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1475]!, self._r[1475]!, [_0]) + return formatWithArgumentRanges(self._s[1476]!, self._r[1476]!, [_0]) } - public var Conversation_CloudStorage_ChatStatus: String { return self._s[1476]! } - public var Chat_AttachmentMultipleFilesDisabled: String { return self._s[1477]! } - public var ChatList_Context_AddToFolder: String { return self._s[1478]! } - public var InviteLink_QRCode_Info: String { return self._s[1479]! } - public var Conversation_Unblock: String { return self._s[1480]! } - public var SettingsSearch_Synonyms_Proxy_UseForCalls: String { return self._s[1481]! } + public var Conversation_CloudStorage_ChatStatus: String { return self._s[1477]! } + public var Chat_AttachmentMultipleFilesDisabled: String { return self._s[1478]! } + public var ChatList_Context_AddToFolder: String { return self._s[1479]! } + public var InviteLink_QRCode_Info: String { return self._s[1480]! } + public var ChatList_DeleteForAllMembersConfirmationText: String { return self._s[1481]! } + public var Conversation_Unblock: String { return self._s[1482]! } + public var SettingsSearch_Synonyms_Proxy_UseForCalls: String { return self._s[1483]! } public func Time_PreciseDate_m8(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1482]!, self._r[1482]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1484]!, self._r[1484]!, [_1, _2, _3]) } - public var Conversation_ContextMenuReply: String { return self._s[1483]! } - public var Contacts_SearchLabel: String { return self._s[1484]! } - public var Forward_ErrorPublicQuizDisabledInChannels: String { return self._s[1485]! } - public var Stats_GroupMessagesTitle: String { return self._s[1487]! } - public var Notification_CallCanceled: String { return self._s[1488]! } - public var VoiceOver_Chat_Selected: String { return self._s[1489]! } - public var NotificationsSound_Tremolo: String { return self._s[1491]! } - public var ChatList_Search_NoResultsDescription: String { return self._s[1492]! } - public var AccessDenied_PhotosAndVideos: String { return self._s[1493]! } - public var LogoutOptions_ClearCacheText: String { return self._s[1494]! } - public var ChatListFolder_NameUnread: String { return self._s[1496]! } - public var PeerInfo_ButtonMessage: String { return self._s[1498]! } - public var InfoPlist_NSPhotoLibraryAddUsageDescription: String { return self._s[1499]! } - public var BlockedUsers_SelectUserTitle: String { return self._s[1500]! } - public var ChatSettings_Other: String { return self._s[1501]! } - public var UserInfo_NotificationsEnabled: String { return self._s[1502]! } - public var CreatePoll_OptionsHeader: String { return self._s[1503]! } - public var Appearance_RemoveThemeColorConfirmation: String { return self._s[1506]! } - public var Channel_Moderator_Title: String { return self._s[1507]! } - public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[1508]! } - public var WallpaperColors_Title: String { return self._s[1509]! } - public var InviteLink_InviteLink: String { return self._s[1511]! } - public var PrivacyPolicy_DeclineMessage: String { return self._s[1512]! } - public var AutoDownloadSettings_VoiceMessagesTitle: String { return self._s[1513]! } - public var Your_card_was_declined: String { return self._s[1514]! } - public var SettingsSearch_FAQ: String { return self._s[1516]! } - public var EditTheme_Expand_Preview_IncomingReplyName: String { return self._s[1517]! } - public var Conversation_ReportSpamConfirmation: String { return self._s[1518]! } - public var OwnershipTransfer_SecurityCheck: String { return self._s[1520]! } - public var PrivacySettings_DataSettingsHelp: String { return self._s[1521]! } - public var Settings_About_Help: String { return self._s[1522]! } + public var Conversation_ContextMenuReply: String { return self._s[1485]! } + public var Contacts_SearchLabel: String { return self._s[1486]! } + public var Forward_ErrorPublicQuizDisabledInChannels: String { return self._s[1487]! } + public var Stats_GroupMessagesTitle: String { return self._s[1489]! } + public var Notification_CallCanceled: String { return self._s[1490]! } + public var VoiceOver_Chat_Selected: String { return self._s[1491]! } + public var NotificationsSound_Tremolo: String { return self._s[1493]! } + public var ChatList_Search_NoResultsDescription: String { return self._s[1494]! } + public var AccessDenied_PhotosAndVideos: String { return self._s[1495]! } + public var LogoutOptions_ClearCacheText: String { return self._s[1496]! } + public var ChatListFolder_NameUnread: String { return self._s[1498]! } + public var PeerInfo_ButtonMessage: String { return self._s[1500]! } + public var InfoPlist_NSPhotoLibraryAddUsageDescription: String { return self._s[1501]! } + public var BlockedUsers_SelectUserTitle: String { return self._s[1502]! } + public var ChatSettings_Other: String { return self._s[1503]! } + public var UserInfo_NotificationsEnabled: String { return self._s[1504]! } + public var CreatePoll_OptionsHeader: String { return self._s[1505]! } + public var Appearance_RemoveThemeColorConfirmation: String { return self._s[1508]! } + public var Channel_Moderator_Title: String { return self._s[1509]! } + public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[1510]! } + public var WallpaperColors_Title: String { return self._s[1511]! } + public var InviteLink_InviteLink: String { return self._s[1513]! } + public var PrivacyPolicy_DeclineMessage: String { return self._s[1514]! } + public var AutoDownloadSettings_VoiceMessagesTitle: String { return self._s[1515]! } + public var Your_card_was_declined: String { return self._s[1516]! } + public var SettingsSearch_FAQ: String { return self._s[1518]! } + public var EditTheme_Expand_Preview_IncomingReplyName: String { return self._s[1519]! } + public var Conversation_ReportSpamConfirmation: String { return self._s[1520]! } + public var OwnershipTransfer_SecurityCheck: String { return self._s[1522]! } + public var PrivacySettings_DataSettingsHelp: String { return self._s[1523]! } + public var Settings_About_Help: String { return self._s[1524]! } public func Channel_DiscussionGroup_HeaderGroupSet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1523]!, self._r[1523]!, [_0]) + return formatWithArgumentRanges(self._s[1525]!, self._r[1525]!, [_0]) } - public var Settings_Proxy: String { return self._s[1524]! } - public var TwoStepAuth_ResetAccountConfirmation: String { return self._s[1525]! } - public var Passport_Identity_TypePassportUploadScan: String { return self._s[1527]! } - public var NotificationsSound_Bell: String { return self._s[1528]! } - public var PrivacySettings_Title: String { return self._s[1530]! } - public var PrivacySettings_DataSettings: String { return self._s[1531]! } - public var ConversationMedia_Title: String { return self._s[1532]! } + public var Settings_Proxy: String { return self._s[1526]! } + public var TwoStepAuth_ResetAccountConfirmation: String { return self._s[1527]! } + public var Passport_Identity_TypePassportUploadScan: String { return self._s[1529]! } + public var NotificationsSound_Bell: String { return self._s[1530]! } + public var PrivacySettings_Title: String { return self._s[1532]! } + public var PrivacySettings_DataSettings: String { return self._s[1533]! } + public var ConversationMedia_Title: String { return self._s[1534]! } public func Conversation_EncryptedPlaceholderTitleIncoming(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1533]!, self._r[1533]!, [_0]) + return formatWithArgumentRanges(self._s[1535]!, self._r[1535]!, [_0]) } - public var PrivacySettings_BlockedPeersEmpty: String { return self._s[1534]! } - public var ReportPeer_ReasonPornography: String { return self._s[1536]! } - public var Privacy_Calls: String { return self._s[1537]! } - public var TwoFactorSetup_Email_Text: String { return self._s[1538]! } - public var Conversation_EncryptedDescriptionTitle: String { return self._s[1539]! } + public var PrivacySettings_BlockedPeersEmpty: String { return self._s[1536]! } + public var ReportPeer_ReasonPornography: String { return self._s[1538]! } + public var Privacy_Calls: String { return self._s[1539]! } + public var TwoFactorSetup_Email_Text: String { return self._s[1540]! } + public var Conversation_EncryptedDescriptionTitle: String { return self._s[1541]! } public func VoiceOver_Chat_MusicTitle(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1540]!, self._r[1540]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1542]!, self._r[1542]!, [_1, _2]) } - public var Passport_Identity_FrontSideHelp: String { return self._s[1541]! } - public var GroupInfo_Permissions_SlowmodeHeader: String { return self._s[1543]! } - public var ContactList_Context_VideoCall: String { return self._s[1544]! } - public var Settings_SaveIncomingPhotos: String { return self._s[1545]! } - public var Passport_Identity_MiddleName: String { return self._s[1546]! } - public var MessagePoll_QuizNoUsers: String { return self._s[1547]! } + public var Passport_Identity_FrontSideHelp: String { return self._s[1543]! } + public var GroupInfo_Permissions_SlowmodeHeader: String { return self._s[1545]! } + public var ContactList_Context_VideoCall: String { return self._s[1546]! } + public var Settings_SaveIncomingPhotos: String { return self._s[1547]! } + public var Passport_Identity_MiddleName: String { return self._s[1548]! } + public var MessagePoll_QuizNoUsers: String { return self._s[1549]! } public func Channel_AdminLog_MutedParticipant(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1548]!, self._r[1548]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1550]!, self._r[1550]!, [_1, _2]) } - public var OldChannels_ChannelFormat: String { return self._s[1549]! } - public var Watch_Message_Call: String { return self._s[1550]! } - public var Wallpaper_Title: String { return self._s[1551]! } - public var PasscodeSettings_TurnPasscodeOff: String { return self._s[1552]! } - public var IntentsSettings_SuggestedChatsSavedMessages: String { return self._s[1553]! } - public var ReportGroupLocation_Text: String { return self._s[1554]! } - public var InviteText_URL: String { return self._s[1555]! } - public var ClearCache_StorageServiceFiles: String { return self._s[1556]! } - public var MessageTimer_Custom: String { return self._s[1557]! } - public var Message_PinnedLocationMessage: String { return self._s[1558]! } + public var OldChannels_ChannelFormat: String { return self._s[1551]! } + public var Watch_Message_Call: String { return self._s[1552]! } + public var Wallpaper_Title: String { return self._s[1553]! } + public var PasscodeSettings_TurnPasscodeOff: String { return self._s[1554]! } + public var IntentsSettings_SuggestedChatsSavedMessages: String { return self._s[1555]! } + public var ReportGroupLocation_Text: String { return self._s[1556]! } + public var InviteText_URL: String { return self._s[1557]! } + public var ClearCache_StorageServiceFiles: String { return self._s[1558]! } + public var MessageTimer_Custom: String { return self._s[1559]! } + public var Message_PinnedLocationMessage: String { return self._s[1560]! } public func VoiceOver_Chat_ContactOrganization(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1559]!, self._r[1559]!, [_0]) + return formatWithArgumentRanges(self._s[1561]!, self._r[1561]!, [_0]) } - public var EditTheme_UploadNewTheme: String { return self._s[1560]! } + public var EditTheme_UploadNewTheme: String { return self._s[1562]! } public func AutoDownloadSettings_UpToForAll(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1563]!, self._r[1563]!, [_0]) + return formatWithArgumentRanges(self._s[1565]!, self._r[1565]!, [_0]) } - public var Login_CodeSentCall: String { return self._s[1565]! } - public var Conversation_Report: String { return self._s[1566]! } - public var NotificationSettings_ContactJoined: String { return self._s[1567]! } + public var Login_CodeSentCall: String { return self._s[1567]! } + public var Conversation_Report: String { return self._s[1568]! } + public var NotificationSettings_ContactJoined: String { return self._s[1569]! } public func PUSH_MESSAGE_SCREENSHOT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1568]!, self._r[1568]!, [_1]) + return formatWithArgumentRanges(self._s[1570]!, self._r[1570]!, [_1]) } - public var StickerPacksSettings_ShowStickersButtonHelp: String { return self._s[1569]! } - public var IntentsSettings_SuggestByAll: String { return self._s[1570]! } - public var StickerPacksSettings_ShowStickersButton: String { return self._s[1571]! } - public var AuthSessions_Title: String { return self._s[1572]! } + public var StickerPacksSettings_ShowStickersButtonHelp: String { return self._s[1571]! } + public var IntentsSettings_SuggestByAll: String { return self._s[1572]! } + public var StickerPacksSettings_ShowStickersButton: String { return self._s[1573]! } + public var AuthSessions_Title: String { return self._s[1574]! } public func Notification_VoiceChatEnded(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1573]!, self._r[1573]!, [_0]) + return formatWithArgumentRanges(self._s[1575]!, self._r[1575]!, [_0]) } - public var Channel_AdminLog_TitleAllEvents: String { return self._s[1574]! } - public var KeyCommand_JumpToNextUnreadChat: String { return self._s[1575]! } - public var Passport_Address_AddPassportRegistration: String { return self._s[1579]! } - public var AutoDownloadSettings_MaxVideoSize: String { return self._s[1580]! } - public var ExplicitContent_AlertTitle: String { return self._s[1581]! } - public var Channel_UpdatePhotoItem: String { return self._s[1582]! } - public var ChatList_AutoarchiveSuggestion_Text: String { return self._s[1584]! } - public var Channel_DiscussionGroup_LinkGroup: String { return self._s[1585]! } + public var Channel_AdminLog_TitleAllEvents: String { return self._s[1576]! } + public var KeyCommand_JumpToNextUnreadChat: String { return self._s[1577]! } + public var Passport_Address_AddPassportRegistration: String { return self._s[1581]! } + public var AutoDownloadSettings_MaxVideoSize: String { return self._s[1582]! } + public var ExplicitContent_AlertTitle: String { return self._s[1583]! } + public var Channel_UpdatePhotoItem: String { return self._s[1584]! } + public var ChatList_AutoarchiveSuggestion_Text: String { return self._s[1586]! } + public var Channel_DiscussionGroup_LinkGroup: String { return self._s[1587]! } public func Call_BatteryLow(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1586]!, self._r[1586]!, [_0]) + return formatWithArgumentRanges(self._s[1588]!, self._r[1588]!, [_0]) } - public var Login_HaveNotReceivedCodeInternal: String { return self._s[1587]! } - public var WallpaperPreview_PatternPaternApply: String { return self._s[1588]! } - public var Notifications_MessageNotificationsSound: String { return self._s[1589]! } - public var CommentsGroup_ErrorAccessDenied: String { return self._s[1590]! } - public var Appearance_AccentColor: String { return self._s[1592]! } - public var GroupInfo_SharedMedia: String { return self._s[1593]! } - public var Login_PhonePlaceholder: String { return self._s[1594]! } - public var Appearance_TextSize_Automatic: String { return self._s[1595]! } - public var EmptyGroupInfo_Line2: String { return self._s[1596]! } + public var Login_HaveNotReceivedCodeInternal: String { return self._s[1589]! } + public var WallpaperPreview_PatternPaternApply: String { return self._s[1590]! } + public var Notifications_MessageNotificationsSound: String { return self._s[1591]! } + public var CommentsGroup_ErrorAccessDenied: String { return self._s[1592]! } + public var Appearance_AccentColor: String { return self._s[1594]! } + public var GroupInfo_SharedMedia: String { return self._s[1595]! } + public var Login_PhonePlaceholder: String { return self._s[1596]! } + public var Appearance_TextSize_Automatic: String { return self._s[1597]! } + public var EmptyGroupInfo_Line2: String { return self._s[1598]! } public func PUSH_CHAT_CREATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1597]!, self._r[1597]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1599]!, self._r[1599]!, [_1, _2]) } - public var Appearance_AppIconDefaultX: String { return self._s[1599]! } - public var EditProfile_NameAndPhotoOrVideoHelp: String { return self._s[1600]! } - public var CheckoutInfo_ShippingInfoPostcodePlaceholder: String { return self._s[1601]! } - public var Notifications_GroupNotificationsHelp: String { return self._s[1602]! } + public var Appearance_AppIconDefaultX: String { return self._s[1601]! } + public var EditProfile_NameAndPhotoOrVideoHelp: String { return self._s[1602]! } + public var CheckoutInfo_ShippingInfoPostcodePlaceholder: String { return self._s[1603]! } + public var Notifications_GroupNotificationsHelp: String { return self._s[1604]! } public func PUSH_CHAT_MESSAGE_NOTEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1603]!, self._r[1603]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1605]!, self._r[1605]!, [_1, _2]) } - public var ChatList_EmptyChatListEditFilter: String { return self._s[1604]! } - public var ChatSettings_ConnectionType_UseProxy: String { return self._s[1607]! } - public var Chat_PinnedMessagesHiddenText: String { return self._s[1608]! } + public var ChatList_EmptyChatListEditFilter: String { return self._s[1606]! } + public var ChatSettings_ConnectionType_UseProxy: String { return self._s[1609]! } + public var Chat_PinnedMessagesHiddenText: String { return self._s[1610]! } public func Message_PinnedGenericMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1609]!, self._r[1609]!, [_0]) + return formatWithArgumentRanges(self._s[1611]!, self._r[1611]!, [_0]) } public func Location_ProximityTip(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1610]!, self._r[1610]!, [_0]) + return formatWithArgumentRanges(self._s[1612]!, self._r[1612]!, [_0]) } - public var UserInfo_NotificationsEnable: String { return self._s[1611]! } - public var Checkout_PayWithTouchId: String { return self._s[1612]! } - public var SharedMedia_ViewInChat: String { return self._s[1613]! } + public var UserInfo_NotificationsEnable: String { return self._s[1613]! } + public var Checkout_PayWithTouchId: String { return self._s[1614]! } + public var SharedMedia_ViewInChat: String { return self._s[1615]! } public func Notification_CreatedChatWithTitle(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1614]!, self._r[1614]!, [_0, _1]) + return formatWithArgumentRanges(self._s[1616]!, self._r[1616]!, [_0, _1]) } - public var ChatSettings_AutoDownloadSettings_OffForAll: String { return self._s[1615]! } + public var ChatSettings_AutoDownloadSettings_OffForAll: String { return self._s[1617]! } public func Channel_DiscussionGroup_PublicChannelLink(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1616]!, self._r[1616]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1618]!, self._r[1618]!, [_1, _2]) } public func Cache_Clear(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1618]!, self._r[1618]!, [_0]) + return formatWithArgumentRanges(self._s[1620]!, self._r[1620]!, [_0]) } - public var Conversation_PeerNearbyText: String { return self._s[1620]! } - public var Conversation_StopPollConfirmationTitle: String { return self._s[1621]! } - public var PhotoEditor_Skip: String { return self._s[1622]! } - public var SettingsSearch_Synonyms_Appearance_ChatBackground_SetColor: String { return self._s[1623]! } - public var ChatList_EmptyChatList: String { return self._s[1624]! } - public var Channel_BanUser_Unban: String { return self._s[1625]! } + public var Conversation_PeerNearbyText: String { return self._s[1622]! } + public var Conversation_StopPollConfirmationTitle: String { return self._s[1623]! } + public var PhotoEditor_Skip: String { return self._s[1624]! } + public var SettingsSearch_Synonyms_Appearance_ChatBackground_SetColor: String { return self._s[1625]! } + public var ChatList_EmptyChatList: String { return self._s[1626]! } + public var Channel_BanUser_Unban: String { return self._s[1627]! } public func Message_GenericForwardedPsa(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1626]!, self._r[1626]!, [_0]) + return formatWithArgumentRanges(self._s[1628]!, self._r[1628]!, [_0]) } - public var Appearance_TextSize_Apply: String { return self._s[1627]! } + public var Appearance_TextSize_Apply: String { return self._s[1629]! } public func Conversation_MessageViewCommentsFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1628]!, self._r[1628]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1630]!, self._r[1630]!, [_1, _2]) } - public var Login_InfoFirstNamePlaceholder: String { return self._s[1629]! } - public var TwoStepAuth_HintPlaceholder: String { return self._s[1630]! } - public var TwoStepAuth_EmailSkip: String { return self._s[1632]! } - public var ChatList_UndoArchiveMultipleTitle: String { return self._s[1633]! } - public var TwoFactorSetup_Email_SkipConfirmationTitle: String { return self._s[1634]! } + public var Login_InfoFirstNamePlaceholder: String { return self._s[1631]! } + public var TwoStepAuth_HintPlaceholder: String { return self._s[1632]! } + public var TwoStepAuth_EmailSkip: String { return self._s[1634]! } + public var ChatList_UndoArchiveMultipleTitle: String { return self._s[1635]! } + public var TwoFactorSetup_Email_SkipConfirmationTitle: String { return self._s[1636]! } public func PUSH_MESSAGE_QUIZ(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1635]!, self._r[1635]!, [_1]) + return formatWithArgumentRanges(self._s[1637]!, self._r[1637]!, [_1]) } - public var State_WaitingForNetwork: String { return self._s[1637]! } - public var AccessDenied_CameraRestricted: String { return self._s[1638]! } - public var ChatSettings_Appearance: String { return self._s[1639]! } - public var ScheduledMessages_BotActionUnavailable: String { return self._s[1640]! } - public var GroupInfo_InviteLink_CopyAlert_Success: String { return self._s[1641]! } - public var Channel_DiscussionGroupAdd: String { return self._s[1642]! } - public var Map_NoPlacesNearby: String { return self._s[1644]! } - public var AuthSessions_IncompleteAttemptsInfo: String { return self._s[1645]! } - public var GroupRemoved_Title: String { return self._s[1646]! } - public var TwoStepAuth_EnterPasswordHelp: String { return self._s[1648]! } - public var VoiceChat_Mute: String { return self._s[1649]! } - public var Paint_Marker: String { return self._s[1650]! } + public var State_WaitingForNetwork: String { return self._s[1639]! } + public var AccessDenied_CameraRestricted: String { return self._s[1640]! } + public var ChatSettings_Appearance: String { return self._s[1641]! } + public var ScheduledMessages_BotActionUnavailable: String { return self._s[1642]! } + public var GroupInfo_InviteLink_CopyAlert_Success: String { return self._s[1643]! } + public var Channel_DiscussionGroupAdd: String { return self._s[1644]! } + public var Map_NoPlacesNearby: String { return self._s[1646]! } + public var AuthSessions_IncompleteAttemptsInfo: String { return self._s[1647]! } + public var GroupRemoved_Title: String { return self._s[1648]! } + public var TwoStepAuth_EnterPasswordHelp: String { return self._s[1650]! } + public var VoiceChat_Mute: String { return self._s[1651]! } + public var Paint_Marker: String { return self._s[1652]! } public func AddContact_ContactWillBeSharedAfterMutual(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1651]!, self._r[1651]!, [_1]) + return formatWithArgumentRanges(self._s[1653]!, self._r[1653]!, [_1]) } - public var SocksProxySetup_ShareProxyList: String { return self._s[1652]! } - public var GroupInfo_InvitationLinkDoesNotExist: String { return self._s[1653]! } + public var SocksProxySetup_ShareProxyList: String { return self._s[1654]! } + public var GroupInfo_InvitationLinkDoesNotExist: String { return self._s[1655]! } public func VoiceOver_Chat_Size(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1654]!, self._r[1654]!, [_0]) + return formatWithArgumentRanges(self._s[1656]!, self._r[1656]!, [_0]) } - public var EditTheme_ErrorInvalidCharacters: String { return self._s[1655]! } - public var Appearance_ThemePreview_ChatList_7_Name: String { return self._s[1656]! } - public var Notifications_GroupNotificationsAlert: String { return self._s[1657]! } - public var SocksProxySetup_ShareQRCode: String { return self._s[1658]! } - public var Compose_NewGroup: String { return self._s[1659]! } + public var EditTheme_ErrorInvalidCharacters: String { return self._s[1657]! } + public var Appearance_ThemePreview_ChatList_7_Name: String { return self._s[1658]! } + public var Notifications_GroupNotificationsAlert: String { return self._s[1659]! } + public var SocksProxySetup_ShareQRCode: String { return self._s[1660]! } + public var Compose_NewGroup: String { return self._s[1661]! } public func Passport_Address_UploadOneOfScan(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1660]!, self._r[1660]!, [_0]) + return formatWithArgumentRanges(self._s[1662]!, self._r[1662]!, [_0]) } - public var Location_LiveLocationRequired_Description: String { return self._s[1662]! } - public var Conversation_ClearGroupHistory: String { return self._s[1663]! } - public var GroupInfo_InviteLink_Help: String { return self._s[1666]! } - public var Channel_BanUser_BlockFor: String { return self._s[1667]! } - public var Bot_Start: String { return self._s[1668]! } - public var Your_card_has_expired: String { return self._s[1669]! } - public var Channel_About_Title: String { return self._s[1670]! } - public var Passport_Identity_ExpiryDatePlaceholder: String { return self._s[1671]! } - public var SettingsSearch_Synonyms_Notifications_MessageNotificationsExceptions: String { return self._s[1673]! } - public var Conversation_FileDropbox: String { return self._s[1674]! } - public var ChatList_Search_NoResultsFitlerMusic: String { return self._s[1675]! } - public var Month_GenNovember: String { return self._s[1676]! } - public var IntentsSettings_SuggestByShare: String { return self._s[1677]! } + public var Location_LiveLocationRequired_Description: String { return self._s[1664]! } + public var Conversation_ClearGroupHistory: String { return self._s[1665]! } + public var GroupInfo_InviteLink_Help: String { return self._s[1668]! } + public var Channel_BanUser_BlockFor: String { return self._s[1669]! } + public var Bot_Start: String { return self._s[1670]! } + public var Your_card_has_expired: String { return self._s[1671]! } + public var Channel_About_Title: String { return self._s[1672]! } + public var Passport_Identity_ExpiryDatePlaceholder: String { return self._s[1673]! } + public var SettingsSearch_Synonyms_Notifications_MessageNotificationsExceptions: String { return self._s[1675]! } + public var Conversation_FileDropbox: String { return self._s[1676]! } + public var ChatList_Search_NoResultsFitlerMusic: String { return self._s[1677]! } + public var Month_GenNovember: String { return self._s[1678]! } + public var IntentsSettings_SuggestByShare: String { return self._s[1679]! } public func Call_PrivacyErrorMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1678]!, self._r[1678]!, [_0]) + return formatWithArgumentRanges(self._s[1680]!, self._r[1680]!, [_0]) } - public var StickerPack_Add: String { return self._s[1679]! } - public var Theme_ErrorNotFound: String { return self._s[1680]! } - public var Wallpaper_SearchShort: String { return self._s[1682]! } - public var Channel_BanUser_PermissionsHeader: String { return self._s[1683]! } - public var ConversationProfile_UsersTooMuchError: String { return self._s[1684]! } - public var ChatList_FolderAllChats: String { return self._s[1685]! } - public var VoiceChat_EndConfirmationEnd: String { return self._s[1686]! } - public var Passport_Authorize: String { return self._s[1687]! } + public var StickerPack_Add: String { return self._s[1681]! } + public var Theme_ErrorNotFound: String { return self._s[1682]! } + public var Wallpaper_SearchShort: String { return self._s[1684]! } + public var Channel_BanUser_PermissionsHeader: String { return self._s[1685]! } + public var ConversationProfile_UsersTooMuchError: String { return self._s[1686]! } + public var ChatList_FolderAllChats: String { return self._s[1687]! } + public var VoiceChat_EndConfirmationEnd: String { return self._s[1688]! } + public var Passport_Authorize: String { return self._s[1689]! } public func Channel_AdminLog_MessageChangedLinkedChannel(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1688]!, self._r[1688]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1690]!, self._r[1690]!, [_1, _2]) } - public var GroupInfo_GroupHistoryVisible: String { return self._s[1689]! } + public var GroupInfo_GroupHistoryVisible: String { return self._s[1691]! } public func PUSH_MESSAGE_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1690]!, self._r[1690]!, [_1]) + return formatWithArgumentRanges(self._s[1692]!, self._r[1692]!, [_1]) } - public var LocalGroup_ButtonTitle: String { return self._s[1691]! } - public var UserInfo_GroupsInCommon: String { return self._s[1693]! } - public var LoginPassword_Title: String { return self._s[1695]! } - public var Wallpaper_Set: String { return self._s[1696]! } - public var Stats_InteractionsTitle: String { return self._s[1697]! } + public var LocalGroup_ButtonTitle: String { return self._s[1693]! } + public var UserInfo_GroupsInCommon: String { return self._s[1695]! } + public var LoginPassword_Title: String { return self._s[1697]! } + public var Wallpaper_Set: String { return self._s[1698]! } + public var Stats_InteractionsTitle: String { return self._s[1699]! } public func SecretGIF_NotViewedYet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1699]!, self._r[1699]!, [_0]) + return formatWithArgumentRanges(self._s[1701]!, self._r[1701]!, [_0]) } - public var Conversation_MessageDialogEdit: String { return self._s[1700]! } - public var Paint_Outlined: String { return self._s[1701]! } - public var VoiceChat_Rec: String { return self._s[1702]! } + public var Conversation_MessageDialogEdit: String { return self._s[1702]! } + public var Paint_Outlined: String { return self._s[1703]! } + public var VoiceChat_Rec: String { return self._s[1704]! } public func Login_ResetAccountProtected_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1703]!, self._r[1703]!, [_0]) + return formatWithArgumentRanges(self._s[1705]!, self._r[1705]!, [_0]) } public func Conversation_SetReminder_RemindTomorrow(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1704]!, self._r[1704]!, [_0]) + return formatWithArgumentRanges(self._s[1706]!, self._r[1706]!, [_0]) } - public var Invite_LargeRecipientsCountWarning: String { return self._s[1705]! } - public var Passport_Address_Street1Placeholder: String { return self._s[1706]! } - public var Appearance_ColorThemeNight: String { return self._s[1707]! } - public var ChannelInfo_Stats: String { return self._s[1708]! } - public var TwoStepAuth_RecoveryTitle: String { return self._s[1709]! } - public var MediaPicker_TimerTooltip: String { return self._s[1710]! } - public var Common_ChoosePhoto: String { return self._s[1711]! } - public var Media_LimitedAccessTitle: String { return self._s[1712]! } - public var ChatSettings_AutoDownloadVideos: String { return self._s[1713]! } - public var PeerInfo_PaneGroups: String { return self._s[1714]! } - public var SocksProxySetup_UsernamePlaceholder: String { return self._s[1716]! } - public var ChangePhoneNumberNumber_Title: String { return self._s[1717]! } - public var ContactInfo_PhoneLabelMobile: String { return self._s[1718]! } - public var OldChannels_ChannelsHeader: String { return self._s[1719]! } - public var MuteFor_Forever: String { return self._s[1720]! } - public var Passport_Address_PostcodePlaceholder: String { return self._s[1721]! } - public var SettingsSearch_Synonyms_Appearance_ChatBackground: String { return self._s[1722]! } - public var MessagePoll_LabelAnonymous: String { return self._s[1723]! } - public var ContactInfo_Job: String { return self._s[1724]! } - public var Passport_Language_mk: String { return self._s[1725]! } - public var EditTheme_ShortLink: String { return self._s[1726]! } - public var AutoDownloadSettings_PhotosTitle: String { return self._s[1728]! } - public var Month_GenApril: String { return self._s[1730]! } - public var Channel_DiscussionGroup_HeaderLabel: String { return self._s[1732]! } - public var NetworkUsageSettings_TotalSection: String { return self._s[1733]! } - public var EditTheme_Create_Preview_OutgoingText: String { return self._s[1734]! } - public var EditTheme_Title: String { return self._s[1735]! } - public var Conversation_LinkDialogCopy: String { return self._s[1736]! } + public var Invite_LargeRecipientsCountWarning: String { return self._s[1707]! } + public var Passport_Address_Street1Placeholder: String { return self._s[1708]! } + public var Appearance_ColorThemeNight: String { return self._s[1709]! } + public var ChannelInfo_Stats: String { return self._s[1710]! } + public var TwoStepAuth_RecoveryTitle: String { return self._s[1711]! } + public var MediaPicker_TimerTooltip: String { return self._s[1712]! } + public var Common_ChoosePhoto: String { return self._s[1713]! } + public var Media_LimitedAccessTitle: String { return self._s[1714]! } + public var ChatSettings_AutoDownloadVideos: String { return self._s[1715]! } + public var PeerInfo_PaneGroups: String { return self._s[1716]! } + public var SocksProxySetup_UsernamePlaceholder: String { return self._s[1718]! } + public var ChangePhoneNumberNumber_Title: String { return self._s[1719]! } + public var ContactInfo_PhoneLabelMobile: String { return self._s[1720]! } + public var OldChannels_ChannelsHeader: String { return self._s[1721]! } + public var MuteFor_Forever: String { return self._s[1722]! } + public var Passport_Address_PostcodePlaceholder: String { return self._s[1723]! } + public var SettingsSearch_Synonyms_Appearance_ChatBackground: String { return self._s[1724]! } + public var MessagePoll_LabelAnonymous: String { return self._s[1725]! } + public var ContactInfo_Job: String { return self._s[1726]! } + public var Passport_Language_mk: String { return self._s[1727]! } + public var EditTheme_ShortLink: String { return self._s[1728]! } + public var AutoDownloadSettings_PhotosTitle: String { return self._s[1730]! } + public var Month_GenApril: String { return self._s[1732]! } + public var Channel_DiscussionGroup_HeaderLabel: String { return self._s[1734]! } + public var NetworkUsageSettings_TotalSection: String { return self._s[1735]! } + public var EditTheme_Create_Preview_OutgoingText: String { return self._s[1736]! } + public var EditTheme_Title: String { return self._s[1737]! } + public var Conversation_LinkDialogCopy: String { return self._s[1738]! } public func Channel_AdminLog_MessageInvitedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1737]!, self._r[1737]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1739]!, self._r[1739]!, [_1, _2]) } - public var Passport_ForgottenPassword: String { return self._s[1738]! } - public var WallpaperSearch_Recent: String { return self._s[1739]! } - public var ChatSettings_Title: String { return self._s[1744]! } - public var Appearance_ReduceMotionInfo: String { return self._s[1745]! } + public var Passport_ForgottenPassword: String { return self._s[1740]! } + public var WallpaperSearch_Recent: String { return self._s[1741]! } + public var ChatSettings_Title: String { return self._s[1746]! } + public var Appearance_ReduceMotionInfo: String { return self._s[1747]! } public func StickerPackActionInfo_AddedText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1746]!, self._r[1746]!, [_0]) + return formatWithArgumentRanges(self._s[1748]!, self._r[1748]!, [_0]) } - public var SocksProxySetup_UseForCallsHelp: String { return self._s[1747]! } - public var LastSeen_WithinAMonth: String { return self._s[1748]! } - public var VoiceChat_Live: String { return self._s[1749]! } - public var PeerInfo_ButtonCall: String { return self._s[1750]! } - public var SettingsSearch_Synonyms_Appearance_Title: String { return self._s[1751]! } - public var Group_Username_InvalidStartsWithNumber: String { return self._s[1752]! } - public var Call_AudioRouteHide: String { return self._s[1753]! } - public var DialogList_SavedMessages: String { return self._s[1754]! } - public var ChatList_Context_Mute: String { return self._s[1755]! } - public var Conversation_StatusKickedFromChannel: String { return self._s[1756]! } + public var SocksProxySetup_UseForCallsHelp: String { return self._s[1749]! } + public var LastSeen_WithinAMonth: String { return self._s[1750]! } + public var VoiceChat_Live: String { return self._s[1751]! } + public var PeerInfo_ButtonCall: String { return self._s[1752]! } + public var SettingsSearch_Synonyms_Appearance_Title: String { return self._s[1753]! } + public var Group_Username_InvalidStartsWithNumber: String { return self._s[1754]! } + public var Call_AudioRouteHide: String { return self._s[1755]! } + public var DialogList_SavedMessages: String { return self._s[1756]! } + public var ChatList_Context_Mute: String { return self._s[1757]! } + public var Conversation_StatusKickedFromChannel: String { return self._s[1758]! } public func Notification_Exceptions_MutedUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1757]!, self._r[1757]!, [_0]) + return formatWithArgumentRanges(self._s[1759]!, self._r[1759]!, [_0]) } - public var VoiceChat_StatusMutedForYou: String { return self._s[1758]! } - public var Passport_Language_et: String { return self._s[1759]! } - public var Conversation_MessageLeaveCommentShort: String { return self._s[1760]! } - public var PhotoEditor_CropReset: String { return self._s[1761]! } - public var Privacy_GroupsAndChannels_AlwaysAllow: String { return self._s[1762]! } - public var SocksProxySetup_HostnamePlaceholder: String { return self._s[1763]! } - public var CreateGroup_ErrorLocatedGroupsTooMuch: String { return self._s[1764]! } - public var WallpaperSearch_ColorWhite: String { return self._s[1767]! } - public var Channel_AdminLog_CanEditMessages: String { return self._s[1769]! } - public var Privacy_PaymentsClearInfoDoneHelp: String { return self._s[1770]! } - public var Channel_Username_InvalidStartsWithNumber: String { return self._s[1772]! } - public var CheckoutInfo_ReceiverInfoName: String { return self._s[1774]! } - public var Map_YouAreHere: String { return self._s[1776]! } - public var Core_ServiceUserStatus: String { return self._s[1777]! } - public var Channel_Setup_TypePrivateHelp: String { return self._s[1780]! } - public var VoiceChat_StartRecording: String { return self._s[1781]! } - public var SettingsSearch_Synonyms_Notifications_BadgeCountUnreadMessages: String { return self._s[1782]! } - public var MediaPicker_Videos: String { return self._s[1784]! } - public var Map_LiveLocationFor15Minutes: String { return self._s[1786]! } - public var Passport_Identity_TranslationsHelp: String { return self._s[1787]! } - public var SharedMedia_CategoryMedia: String { return self._s[1788]! } + public var VoiceChat_StatusMutedForYou: String { return self._s[1760]! } + public var Passport_Language_et: String { return self._s[1761]! } + public var Conversation_MessageLeaveCommentShort: String { return self._s[1762]! } + public var PhotoEditor_CropReset: String { return self._s[1763]! } + public var Privacy_GroupsAndChannels_AlwaysAllow: String { return self._s[1764]! } + public var SocksProxySetup_HostnamePlaceholder: String { return self._s[1765]! } + public var CreateGroup_ErrorLocatedGroupsTooMuch: String { return self._s[1766]! } + public var WallpaperSearch_ColorWhite: String { return self._s[1769]! } + public var Channel_AdminLog_CanEditMessages: String { return self._s[1771]! } + public var Privacy_PaymentsClearInfoDoneHelp: String { return self._s[1772]! } + public var Channel_Username_InvalidStartsWithNumber: String { return self._s[1774]! } + public var CheckoutInfo_ReceiverInfoName: String { return self._s[1776]! } + public var Map_YouAreHere: String { return self._s[1778]! } + public var Core_ServiceUserStatus: String { return self._s[1779]! } + public var Channel_Setup_TypePrivateHelp: String { return self._s[1782]! } + public var VoiceChat_StartRecording: String { return self._s[1783]! } + public var SettingsSearch_Synonyms_Notifications_BadgeCountUnreadMessages: String { return self._s[1784]! } + public var MediaPicker_Videos: String { return self._s[1786]! } + public var Map_LiveLocationFor15Minutes: String { return self._s[1788]! } + public var Passport_Identity_TranslationsHelp: String { return self._s[1789]! } + public var SharedMedia_CategoryMedia: String { return self._s[1790]! } public func MediaPicker_Nof(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1789]!, self._r[1789]!, [_0]) + return formatWithArgumentRanges(self._s[1791]!, self._r[1791]!, [_0]) } - public var ChatSettings_AutoPlayGifs: String { return self._s[1790]! } - public var Passport_Identity_CountryPlaceholder: String { return self._s[1791]! } - public var Bot_GroupStatusDoesNotReadHistory: String { return self._s[1792]! } - public var Notification_Exceptions_RemoveFromExceptions: String { return self._s[1793]! } + public var ChatSettings_AutoPlayGifs: String { return self._s[1792]! } + public var Passport_Identity_CountryPlaceholder: String { return self._s[1793]! } + public var Bot_GroupStatusDoesNotReadHistory: String { return self._s[1794]! } + public var Notification_Exceptions_RemoveFromExceptions: String { return self._s[1795]! } public func Chat_SlowmodeTooltip(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1794]!, self._r[1794]!, [_0]) + return formatWithArgumentRanges(self._s[1796]!, self._r[1796]!, [_0]) } - public var Web_Error: String { return self._s[1795]! } - public var PhotoEditor_SkinTool: String { return self._s[1796]! } - public var ApplyLanguage_UnsufficientDataTitle: String { return self._s[1797]! } - public var ChatSettings_ConnectionType_UseSocks5: String { return self._s[1799]! } - public var PasscodeSettings_Help: String { return self._s[1800]! } - public var Appearance_ColorTheme: String { return self._s[1801]! } + public var Web_Error: String { return self._s[1797]! } + public var PhotoEditor_SkinTool: String { return self._s[1798]! } + public var ApplyLanguage_UnsufficientDataTitle: String { return self._s[1799]! } + public var ChatSettings_ConnectionType_UseSocks5: String { return self._s[1801]! } + public var PasscodeSettings_Help: String { return self._s[1802]! } + public var Appearance_ColorTheme: String { return self._s[1803]! } public func Channel_AdminLog_MessageRestrictedNewSetting(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1802]!, self._r[1802]!, [_0]) + return formatWithArgumentRanges(self._s[1804]!, self._r[1804]!, [_0]) } - public var InviteLink_DeleteAllRevokedLinks: String { return self._s[1803]! } + public var InviteLink_DeleteAllRevokedLinks: String { return self._s[1805]! } public func PUSH_PINNED_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1804]!, self._r[1804]!, [_1]) + return formatWithArgumentRanges(self._s[1806]!, self._r[1806]!, [_1]) } - public var InviteLink_QRCode_Title: String { return self._s[1805]! } - public var GroupInfo_LeftStatus: String { return self._s[1806]! } - public var EditTheme_Preview: String { return self._s[1807]! } - public var Watch_Suggestion_WhatsUp: String { return self._s[1808]! } + public var InviteLink_QRCode_Title: String { return self._s[1807]! } + public var GroupInfo_LeftStatus: String { return self._s[1808]! } + public var EditTheme_Preview: String { return self._s[1809]! } + public var Watch_Suggestion_WhatsUp: String { return self._s[1810]! } public func AutoDownloadSettings_PreloadVideoInfo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1809]!, self._r[1809]!, [_0]) + return formatWithArgumentRanges(self._s[1811]!, self._r[1811]!, [_0]) } - public var NotificationsSound_Keys: String { return self._s[1810]! } - public var PasscodeSettings_UnlockWithTouchId: String { return self._s[1811]! } - public var ChatList_Context_MarkAsUnread: String { return self._s[1812]! } - public var DialogList_AdNoticeAlert: String { return self._s[1813]! } - public var UserInfo_Invite: String { return self._s[1814]! } - public var Checkout_Email: String { return self._s[1815]! } - public var Stats_GroupActionsTitle: String { return self._s[1816]! } - public var Coub_TapForSound: String { return self._s[1817]! } - public var Theme_ThemeChangedText: String { return self._s[1818]! } - public var Call_ExternalCallInProgressMessage: String { return self._s[1819]! } - public var Settings_ApplyProxyAlertEnable: String { return self._s[1820]! } - public var ScheduledMessages_ScheduledToday: String { return self._s[1821]! } - public var Channel_AdminLog_DefaultRestrictionsUpdated: String { return self._s[1822]! } - public var Call_ReportIncludeLogDescription: String { return self._s[1823]! } - public var Settings_FrequentlyAskedQuestions: String { return self._s[1825]! } - public var Call_VoiceOver_VoiceCallMissed: String { return self._s[1826]! } - public var Channel_MessagePhotoRemoved: String { return self._s[1827]! } - public var Passport_Email_Delete: String { return self._s[1828]! } + public var NotificationsSound_Keys: String { return self._s[1812]! } + public var PasscodeSettings_UnlockWithTouchId: String { return self._s[1813]! } + public var ChatList_Context_MarkAsUnread: String { return self._s[1814]! } + public var DialogList_AdNoticeAlert: String { return self._s[1815]! } + public var UserInfo_Invite: String { return self._s[1816]! } + public var Checkout_Email: String { return self._s[1817]! } + public var Stats_GroupActionsTitle: String { return self._s[1818]! } + public var Coub_TapForSound: String { return self._s[1819]! } + public var Theme_ThemeChangedText: String { return self._s[1820]! } + public var Call_ExternalCallInProgressMessage: String { return self._s[1821]! } + public var Settings_ApplyProxyAlertEnable: String { return self._s[1822]! } + public var ScheduledMessages_ScheduledToday: String { return self._s[1823]! } + public var Channel_AdminLog_DefaultRestrictionsUpdated: String { return self._s[1824]! } + public var Call_ReportIncludeLogDescription: String { return self._s[1825]! } + public var Settings_FrequentlyAskedQuestions: String { return self._s[1827]! } + public var Call_VoiceOver_VoiceCallMissed: String { return self._s[1828]! } + public var Channel_MessagePhotoRemoved: String { return self._s[1829]! } + public var Passport_Email_Delete: String { return self._s[1830]! } public func PUSH_PINNED_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1829]!, self._r[1829]!, [_1]) + return formatWithArgumentRanges(self._s[1831]!, self._r[1831]!, [_1]) } - public var NotificationSettings_ShowNotificationsAllAccountsInfoOn: String { return self._s[1830]! } - public var Channel_AdminLog_CanAddAdmins: String { return self._s[1831]! } - public var SocksProxySetup_FailedToConnect: String { return self._s[1833]! } - public var SettingsSearch_Synonyms_Data_NetworkUsage: String { return self._s[1834]! } - public var Common_of: String { return self._s[1835]! } - public var VoiceChat_StartRecordingStart: String { return self._s[1836]! } - public var VoiceChat_CreateNewVoiceChatText: String { return self._s[1837]! } - public var PeerInfo_ButtonUnmute: String { return self._s[1840]! } + public var NotificationSettings_ShowNotificationsAllAccountsInfoOn: String { return self._s[1832]! } + public var Channel_AdminLog_CanAddAdmins: String { return self._s[1833]! } + public var SocksProxySetup_FailedToConnect: String { return self._s[1835]! } + public var SettingsSearch_Synonyms_Data_NetworkUsage: String { return self._s[1836]! } + public var Common_of: String { return self._s[1837]! } + public var VoiceChat_StartRecordingStart: String { return self._s[1838]! } + public var VoiceChat_CreateNewVoiceChatText: String { return self._s[1839]! } + public var PeerInfo_ButtonUnmute: String { return self._s[1842]! } public func ChatSettings_AutoDownloadSettings_TypeFile(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1841]!, self._r[1841]!, [_0]) + return formatWithArgumentRanges(self._s[1843]!, self._r[1843]!, [_0]) } - public var ChatList_AddChatsToFolder: String { return self._s[1842]! } - public var Login_ResetAccountProtected_LimitExceeded: String { return self._s[1843]! } - public var Settings_Title: String { return self._s[1845]! } - public var AutoDownloadSettings_Contacts: String { return self._s[1847]! } - public var Appearance_BubbleCornersSetting: String { return self._s[1848]! } - public var Privacy_Calls_AlwaysAllow: String { return self._s[1849]! } - public var Privacy_Forwards_AlwaysAllow_Title: String { return self._s[1851]! } - public var WallpaperPreview_CropBottomText: String { return self._s[1852]! } - public var SecretTimer_VideoDescription: String { return self._s[1853]! } - public var WallpaperPreview_Blurred: String { return self._s[1854]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsExceptions: String { return self._s[1855]! } - public var ChatListFolder_ExcludedSectionHeader: String { return self._s[1857]! } - public var DialogList_PasscodeLockHelp: String { return self._s[1858]! } - public var SocksProxySetup_SecretPlaceholder: String { return self._s[1859]! } - public var NetworkUsageSettings_CallDataSection: String { return self._s[1860]! } - public var TwoStepAuth_PasswordRemovePassportConfirmation: String { return self._s[1861]! } - public var Passport_FieldAddressTranslationHelp: String { return self._s[1862]! } - public var SocksProxySetup_Connection: String { return self._s[1863]! } - public var Passport_Address_TypePassportRegistration: String { return self._s[1864]! } - public var Contacts_PermissionsAllowInSettings: String { return self._s[1865]! } - public var Conversation_Unpin: String { return self._s[1866]! } - public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[1867]! } - public var TwoFactorSetup_Hint_Placeholder: String { return self._s[1868]! } - public var Call_ReportSkip: String { return self._s[1869]! } + public var ChatList_AddChatsToFolder: String { return self._s[1844]! } + public var Login_ResetAccountProtected_LimitExceeded: String { return self._s[1845]! } + public var Settings_Title: String { return self._s[1847]! } + public var AutoDownloadSettings_Contacts: String { return self._s[1849]! } + public var Appearance_BubbleCornersSetting: String { return self._s[1850]! } + public var Privacy_Calls_AlwaysAllow: String { return self._s[1851]! } + public var Privacy_Forwards_AlwaysAllow_Title: String { return self._s[1853]! } + public var WallpaperPreview_CropBottomText: String { return self._s[1854]! } + public var SecretTimer_VideoDescription: String { return self._s[1855]! } + public var WallpaperPreview_Blurred: String { return self._s[1856]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsExceptions: String { return self._s[1857]! } + public var ChatListFolder_ExcludedSectionHeader: String { return self._s[1859]! } + public var DialogList_PasscodeLockHelp: String { return self._s[1860]! } + public var SocksProxySetup_SecretPlaceholder: String { return self._s[1861]! } + public var NetworkUsageSettings_CallDataSection: String { return self._s[1862]! } + public var TwoStepAuth_PasswordRemovePassportConfirmation: String { return self._s[1863]! } + public var Passport_FieldAddressTranslationHelp: String { return self._s[1864]! } + public var SocksProxySetup_Connection: String { return self._s[1865]! } + public var Passport_Address_TypePassportRegistration: String { return self._s[1866]! } + public var Contacts_PermissionsAllowInSettings: String { return self._s[1867]! } + public var Conversation_Unpin: String { return self._s[1868]! } + public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[1869]! } + public var TwoFactorSetup_Hint_Placeholder: String { return self._s[1870]! } + public var Call_ReportSkip: String { return self._s[1871]! } public func VoiceOver_Chat_PhotoFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1870]!, self._r[1870]!, [_0]) - } - public func VoiceOver_Chat_Caption(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1872]!, self._r[1872]!, [_0]) } - public var AutoNightTheme_Automatic: String { return self._s[1873]! } - public var Passport_Language_az: String { return self._s[1874]! } - public var SettingsSearch_Synonyms_Data_Storage_ClearCache: String { return self._s[1875]! } - public var Watch_UserInfo_Unmute: String { return self._s[1876]! } - public var Channel_Stickers_YourStickers: String { return self._s[1877]! } - public var Channel_DiscussionGroup_UnlinkChannel: String { return self._s[1878]! } - public var Tour_Text1: String { return self._s[1879]! } - public var Common_Delete: String { return self._s[1880]! } - public var Settings_EditPhoto: String { return self._s[1881]! } - public var Common_Edit: String { return self._s[1882]! } - public func Channel_AdminLog_MutedNewMembers(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1884]!, self._r[1884]!, [_1]) + public func VoiceOver_Chat_Caption(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1874]!, self._r[1874]!, [_0]) } - public var Passport_Identity_ExpiryDate: String { return self._s[1885]! } - public var ShareMenu_ShareTo: String { return self._s[1886]! } - public var Preview_DeleteGif: String { return self._s[1887]! } - public var WallpaperPreview_PatternPaternDiscard: String { return self._s[1888]! } - public var ChatSettings_AutoDownloadUsingCellular: String { return self._s[1889]! } - public var Conversation_ViewReply: String { return self._s[1890]! } - public var Stats_LoadingText: String { return self._s[1891]! } - public var Channel_EditAdmin_PermissinAddAdminOn: String { return self._s[1892]! } - public var CheckoutInfo_ReceiverInfoEmailPlaceholder: String { return self._s[1893]! } - public var Channel_AdminLog_CanChangeInfo: String { return self._s[1894]! } + public var AutoNightTheme_Automatic: String { return self._s[1875]! } + public var Passport_Language_az: String { return self._s[1876]! } + public var SettingsSearch_Synonyms_Data_Storage_ClearCache: String { return self._s[1877]! } + public var Watch_UserInfo_Unmute: String { return self._s[1878]! } + public var Channel_Stickers_YourStickers: String { return self._s[1879]! } + public var Channel_DiscussionGroup_UnlinkChannel: String { return self._s[1880]! } + public var Tour_Text1: String { return self._s[1881]! } + public var Common_Delete: String { return self._s[1882]! } + public var Settings_EditPhoto: String { return self._s[1883]! } + public var Common_Edit: String { return self._s[1884]! } + public func Channel_AdminLog_MutedNewMembers(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1886]!, self._r[1886]!, [_1]) + } + public var Passport_Identity_ExpiryDate: String { return self._s[1887]! } + public var ShareMenu_ShareTo: String { return self._s[1888]! } + public var Preview_DeleteGif: String { return self._s[1889]! } + public var WallpaperPreview_PatternPaternDiscard: String { return self._s[1890]! } + public var ChatSettings_AutoDownloadUsingCellular: String { return self._s[1891]! } + public var Conversation_ViewReply: String { return self._s[1892]! } + public var Stats_LoadingText: String { return self._s[1893]! } + public var Channel_EditAdmin_PermissinAddAdminOn: String { return self._s[1894]! } + public var CheckoutInfo_ReceiverInfoEmailPlaceholder: String { return self._s[1895]! } + public var Channel_AdminLog_CanChangeInfo: String { return self._s[1896]! } public func Passport_Phone_UseTelegramNumber(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1895]!, self._r[1895]!, [_0]) + return formatWithArgumentRanges(self._s[1897]!, self._r[1897]!, [_0]) } public func Time_MonthOfYear_m2(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1896]!, self._r[1896]!, [_0]) - } - public func VoiceOver_Chat_VideoMessageFrom(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1898]!, self._r[1898]!, [_0]) } - public var Passport_Address_OneOfTypeRentalAgreement: String { return self._s[1899]! } - public var InviteLink_Share: String { return self._s[1901]! } - public var IntentsSettings_MainAccount: String { return self._s[1903]! } - public var Group_MessagePhotoRemoved: String { return self._s[1906]! } - public var Conversation_ContextMenuSelect: String { return self._s[1907]! } - public var GroupInfo_Permissions_Exceptions: String { return self._s[1909]! } - public var GroupRemoved_UsersSectionTitle: String { return self._s[1910]! } - public var Contacts_PermissionsEnable: String { return self._s[1911]! } - public var Channel_EditAdmin_PermissionDeleteMessagesOfOthers: String { return self._s[1912]! } - public var Common_NotNow: String { return self._s[1913]! } - public var Notification_CreatedChannel: String { return self._s[1914]! } - public var Stats_ViewsBySourceTitle: String { return self._s[1916]! } - public var InviteLink_ContextShare: String { return self._s[1917]! } - public var Appearance_AppIconClassic: String { return self._s[1918]! } - public var PhotoEditor_QualityTool: String { return self._s[1919]! } - public var ClearCache_ClearCache: String { return self._s[1920]! } - public var TwoFactorSetup_Password_PlaceholderConfirmPassword: String { return self._s[1921]! } - public var AutoDownloadSettings_Videos: String { return self._s[1922]! } - public var GroupPermission_Duration: String { return self._s[1923]! } - public var ChatList_Read: String { return self._s[1924]! } + public func VoiceOver_Chat_VideoMessageFrom(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1900]!, self._r[1900]!, [_0]) + } + public var Passport_Address_OneOfTypeRentalAgreement: String { return self._s[1901]! } + public var InviteLink_Share: String { return self._s[1903]! } + public var IntentsSettings_MainAccount: String { return self._s[1905]! } + public var Group_MessagePhotoRemoved: String { return self._s[1908]! } + public var Conversation_ContextMenuSelect: String { return self._s[1909]! } + public var GroupInfo_Permissions_Exceptions: String { return self._s[1911]! } + public var GroupRemoved_UsersSectionTitle: String { return self._s[1912]! } + public var Contacts_PermissionsEnable: String { return self._s[1913]! } + public var Channel_EditAdmin_PermissionDeleteMessagesOfOthers: String { return self._s[1914]! } + public var Common_NotNow: String { return self._s[1915]! } + public var Notification_CreatedChannel: String { return self._s[1916]! } + public var Stats_ViewsBySourceTitle: String { return self._s[1918]! } + public var InviteLink_ContextShare: String { return self._s[1919]! } + public var Appearance_AppIconClassic: String { return self._s[1920]! } + public var PhotoEditor_QualityTool: String { return self._s[1921]! } + public var ClearCache_ClearCache: String { return self._s[1922]! } + public var TwoFactorSetup_Password_PlaceholderConfirmPassword: String { return self._s[1923]! } + public var AutoDownloadSettings_Videos: String { return self._s[1924]! } + public var GroupPermission_Duration: String { return self._s[1925]! } + public var ChatList_Read: String { return self._s[1926]! } public func Group_OwnershipTransfer_DescriptionInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1925]!, self._r[1925]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1927]!, self._r[1927]!, [_1, _2]) } - public var CallFeedback_Send: String { return self._s[1926]! } - public var Channel_Stickers_Searching: String { return self._s[1927]! } - public var ScheduledMessages_ReminderNotification: String { return self._s[1928]! } - public var FastTwoStepSetup_HintSection: String { return self._s[1929]! } - public var ChatSettings_AutoDownloadVideoMessages: String { return self._s[1930]! } - public var EditTheme_CreateTitle: String { return self._s[1931]! } - public var Application_Name: String { return self._s[1932]! } - public var Paint_Stickers: String { return self._s[1933]! } - public var Appearance_ThemePreview_Chat_1_Text: String { return self._s[1934]! } - public var Call_StatusFailed: String { return self._s[1935]! } - public var Stickers_FavoriteStickers: String { return self._s[1936]! } - public var ClearCache_Clear: String { return self._s[1937]! } - public var Passport_Language_mn: String { return self._s[1938]! } - public var WallpaperPreview_PreviewTopText: String { return self._s[1939]! } - public var LogoutOptions_ClearCacheTitle: String { return self._s[1940]! } - public var Call_VoiceOver_VideoCallOutgoing: String { return self._s[1942]! } - public var TwoFactorSetup_Hint_Text: String { return self._s[1944]! } - public var WallpaperPreview_PatternIntensity: String { return self._s[1945]! } - public var CheckoutInfo_ErrorShippingNotAvailable: String { return self._s[1946]! } - public var Passport_Address_AddBankStatement: String { return self._s[1947]! } + public var CallFeedback_Send: String { return self._s[1928]! } + public var Channel_Stickers_Searching: String { return self._s[1929]! } + public var ScheduledMessages_ReminderNotification: String { return self._s[1930]! } + public var FastTwoStepSetup_HintSection: String { return self._s[1931]! } + public var ChatSettings_AutoDownloadVideoMessages: String { return self._s[1932]! } + public var EditTheme_CreateTitle: String { return self._s[1933]! } + public var Application_Name: String { return self._s[1934]! } + public var Paint_Stickers: String { return self._s[1935]! } + public var Appearance_ThemePreview_Chat_1_Text: String { return self._s[1936]! } + public var Call_StatusFailed: String { return self._s[1937]! } + public var Stickers_FavoriteStickers: String { return self._s[1938]! } + public var ClearCache_Clear: String { return self._s[1939]! } + public var Passport_Language_mn: String { return self._s[1940]! } + public var WallpaperPreview_PreviewTopText: String { return self._s[1941]! } + public var LogoutOptions_ClearCacheTitle: String { return self._s[1942]! } + public var Call_VoiceOver_VideoCallOutgoing: String { return self._s[1944]! } + public var TwoFactorSetup_Hint_Text: String { return self._s[1946]! } + public var WallpaperPreview_PatternIntensity: String { return self._s[1947]! } + public var CheckoutInfo_ErrorShippingNotAvailable: String { return self._s[1948]! } + public var Passport_Address_AddBankStatement: String { return self._s[1949]! } public func Conversation_TitleRepliesFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1949]!, self._r[1949]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1951]!, self._r[1951]!, [_1, _2]) } - public var ChatListFolderSettings_RecommendedNewFolder: String { return self._s[1950]! } - public var UserInfo_ShareContact: String { return self._s[1951]! } - public var Passport_Identity_NamePlaceholder: String { return self._s[1952]! } - public var Call_RateCall: String { return self._s[1954]! } - public var Contacts_AccessDeniedError: String { return self._s[1955]! } - public var Invite_ChannelsTooMuch: String { return self._s[1956]! } - public var CheckoutInfo_ShippingInfoPostcode: String { return self._s[1957]! } - public var Channel_BanUser_PermissionReadMessages: String { return self._s[1958]! } - public var InviteLink_Create_TimeLimitInfo: String { return self._s[1959]! } - public var Cache_NoLimit: String { return self._s[1961]! } - public var Conversation_EmptyPlaceholder: String { return self._s[1965]! } - public var Privacy_GroupsAndChannels_AlwaysAllow_Placeholder: String { return self._s[1966]! } - public var GroupRemoved_RemoveInfo: String { return self._s[1968]! } - public var Privacy_Calls_IntegrationHelp: String { return self._s[1969]! } + public var ChatListFolderSettings_RecommendedNewFolder: String { return self._s[1952]! } + public var UserInfo_ShareContact: String { return self._s[1953]! } + public var Passport_Identity_NamePlaceholder: String { return self._s[1954]! } + public var Call_RateCall: String { return self._s[1956]! } + public var Contacts_AccessDeniedError: String { return self._s[1957]! } + public var Invite_ChannelsTooMuch: String { return self._s[1958]! } + public var CheckoutInfo_ShippingInfoPostcode: String { return self._s[1959]! } + public var Channel_BanUser_PermissionReadMessages: String { return self._s[1960]! } + public var InviteLink_Create_TimeLimitInfo: String { return self._s[1961]! } + public var Cache_NoLimit: String { return self._s[1963]! } + public var Conversation_EmptyPlaceholder: String { return self._s[1967]! } + public var Privacy_GroupsAndChannels_AlwaysAllow_Placeholder: String { return self._s[1968]! } + public var GroupRemoved_RemoveInfo: String { return self._s[1970]! } + public var Privacy_Calls_IntegrationHelp: String { return self._s[1971]! } public func PUSH_VIDEO_CALL_MISSED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1970]!, self._r[1970]!, [_1]) + return formatWithArgumentRanges(self._s[1972]!, self._r[1972]!, [_1]) } - public var VoiceOver_Media_PlaybackRateFast: String { return self._s[1971]! } - public var Theme_ThemeChanged: String { return self._s[1972]! } - public var Privacy_GroupsAndChannels_NeverAllow: String { return self._s[1974]! } - public var AutoDownloadSettings_MediaTypes: String { return self._s[1975]! } + public var VoiceOver_Media_PlaybackRateFast: String { return self._s[1973]! } + public var Theme_ThemeChanged: String { return self._s[1974]! } + public var Privacy_GroupsAndChannels_NeverAllow: String { return self._s[1976]! } + public var AutoDownloadSettings_MediaTypes: String { return self._s[1977]! } public func Notification_PinnedDocumentMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1976]!, self._r[1976]!, [_0]) + return formatWithArgumentRanges(self._s[1978]!, self._r[1978]!, [_0]) } - public var Channel_AdminLog_InfoPanelTitle: String { return self._s[1977]! } - public var Passport_Language_da: String { return self._s[1979]! } - public var Chat_SlowmodeSendError: String { return self._s[1980]! } - public var Application_Update: String { return self._s[1982]! } - public var SocksProxySetup_SaveProxy: String { return self._s[1983]! } + public var Channel_AdminLog_InfoPanelTitle: String { return self._s[1979]! } + public var Passport_Language_da: String { return self._s[1981]! } + public var Chat_SlowmodeSendError: String { return self._s[1982]! } + public var Application_Update: String { return self._s[1984]! } + public var SocksProxySetup_SaveProxy: String { return self._s[1985]! } public func PUSH_AUTH_REGION(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1984]!, self._r[1984]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1986]!, self._r[1986]!, [_1, _2]) } - public var Privacy_AddNewPeer: String { return self._s[1986]! } - public var Channel_DiscussionGroup_MakeHistoryPublicProceed: String { return self._s[1988]! } - public var Channel_Members_Title: String { return self._s[1989]! } - public var Settings_LogoutConfirmationText: String { return self._s[1990]! } - public var Chat_UnsendMyMessages: String { return self._s[1991]! } - public var Conversation_EditingMessageMediaEditCurrentVideo: String { return self._s[1993]! } - public var ChatListFilter_AddChatsTitle: String { return self._s[1994]! } - public var Passport_FloodError: String { return self._s[1995]! } - public var NotificationSettings_ContactJoinedInfo: String { return self._s[1996]! } - public var SettingsSearch_Synonyms_Privacy_Data_SecretChatLinkPreview: String { return self._s[1997]! } - public var CallSettings_TabIconDescription: String { return self._s[1998]! } - public var Group_Setup_HistoryHeader: String { return self._s[2000]! } + public var Privacy_AddNewPeer: String { return self._s[1988]! } + public var Channel_DiscussionGroup_MakeHistoryPublicProceed: String { return self._s[1990]! } + public var Channel_Members_Title: String { return self._s[1991]! } + public var Settings_LogoutConfirmationText: String { return self._s[1992]! } + public var Chat_UnsendMyMessages: String { return self._s[1993]! } + public var Conversation_EditingMessageMediaEditCurrentVideo: String { return self._s[1995]! } + public var ChatListFilter_AddChatsTitle: String { return self._s[1996]! } + public var Passport_FloodError: String { return self._s[1997]! } + public var NotificationSettings_ContactJoinedInfo: String { return self._s[1998]! } + public var SettingsSearch_Synonyms_Privacy_Data_SecretChatLinkPreview: String { return self._s[1999]! } + public var CallSettings_TabIconDescription: String { return self._s[2000]! } + public var Group_Setup_HistoryHeader: String { return self._s[2002]! } public func Channel_AdminLog_AllowedNewMembersToSpeak(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2001]!, self._r[2001]!, [_1]) + return formatWithArgumentRanges(self._s[2003]!, self._r[2003]!, [_1]) } - public var TwoStepAuth_EmailTitle: String { return self._s[2002]! } - public var GroupInfo_Permissions_Removed: String { return self._s[2003]! } - public var DialogList_ClearHistoryConfirmation: String { return self._s[2004]! } - public var Contacts_Title: String { return self._s[2006]! } + public var TwoStepAuth_EmailTitle: String { return self._s[2004]! } + public var GroupInfo_Permissions_Removed: String { return self._s[2005]! } + public var DialogList_ClearHistoryConfirmation: String { return self._s[2006]! } + public var Contacts_Title: String { return self._s[2008]! } public func Notification_Invited(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2007]!, self._r[2007]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2009]!, self._r[2009]!, [_0, _1]) } - public var ChatList_PeerTypeBot: String { return self._s[2010]! } + public var ChatList_PeerTypeBot: String { return self._s[2012]! } public func Channel_AdminLog_SetSlowmode(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2011]!, self._r[2011]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2013]!, self._r[2013]!, [_1, _2]) } - public var Appearance_ThemePreview_Chat_6_Text: String { return self._s[2012]! } + public var Appearance_ThemePreview_Chat_6_Text: String { return self._s[2014]! } public func Time_PreciseDate_m1(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2013]!, self._r[2013]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2015]!, self._r[2015]!, [_1, _2, _3]) } - public var Camera_PhotoMode: String { return self._s[2015]! } + public var Camera_PhotoMode: String { return self._s[2017]! } public func PUSH_MESSAGE_GAME_SCORE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2016]!, self._r[2016]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2018]!, self._r[2018]!, [_1, _2, _3]) } - public var ContactInfo_PhoneLabelPager: String { return self._s[2017]! } - public var SettingsSearch_Synonyms_FAQ: String { return self._s[2018]! } - public var Call_CallAgain: String { return self._s[2019]! } - public var TwoStepAuth_PasswordSet: String { return self._s[2020]! } + public var ContactInfo_PhoneLabelPager: String { return self._s[2019]! } + public var SettingsSearch_Synonyms_FAQ: String { return self._s[2020]! } + public var Call_CallAgain: String { return self._s[2021]! } + public var TwoStepAuth_PasswordSet: String { return self._s[2022]! } public func Channel_Management_RestrictedBy(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2021]!, self._r[2021]!, [_0]) + return formatWithArgumentRanges(self._s[2023]!, self._r[2023]!, [_0]) } - public var GroupInfo_InviteLink_RevokeAlert_Success: String { return self._s[2022]! } - public var ClearCache_FreeSpaceDescription: String { return self._s[2023]! } - public var Permissions_ContactsAllowInSettings_v0: String { return self._s[2024]! } - public var Group_LeaveGroup: String { return self._s[2025]! } - public var GroupInfo_LabelAdmin: String { return self._s[2028]! } - public var CheckoutInfo_ErrorStateInvalid: String { return self._s[2030]! } - public var Notification_PassportValuePersonalDetails: String { return self._s[2031]! } + public var GroupInfo_InviteLink_RevokeAlert_Success: String { return self._s[2024]! } + public var ClearCache_FreeSpaceDescription: String { return self._s[2025]! } + public var Permissions_ContactsAllowInSettings_v0: String { return self._s[2026]! } + public var Group_LeaveGroup: String { return self._s[2027]! } + public var GroupInfo_LabelAdmin: String { return self._s[2030]! } + public var CheckoutInfo_ErrorStateInvalid: String { return self._s[2032]! } + public var Notification_PassportValuePersonalDetails: String { return self._s[2033]! } public func WebSearch_SearchNoResultsDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2032]!, self._r[2032]!, [_0]) + return formatWithArgumentRanges(self._s[2034]!, self._r[2034]!, [_0]) } - public var Stats_GroupNewMembersBySourceTitle: String { return self._s[2033]! } - public var Appearance_Preview: String { return self._s[2034]! } - public var VoiceOver_Chat_Contact: String { return self._s[2035]! } - public var Passport_Language_th: String { return self._s[2036]! } - public var PhotoEditor_CropAspectRatioOriginal: String { return self._s[2038]! } - public var LastSeen_Offline: String { return self._s[2041]! } - public var Map_OpenInHereMaps: String { return self._s[2042]! } - public var SettingsSearch_Synonyms_Data_AutoplayVideos: String { return self._s[2043]! } - public var InviteLink_ContextEdit: String { return self._s[2045]! } - public var AutoDownloadSettings_Reset: String { return self._s[2046]! } - public var Conversation_SendMessage_SetReminder: String { return self._s[2047]! } - public var Channel_AdminLog_EmptyMessageText: String { return self._s[2048]! } + public var Stats_GroupNewMembersBySourceTitle: String { return self._s[2035]! } + public var Appearance_Preview: String { return self._s[2036]! } + public var VoiceOver_Chat_Contact: String { return self._s[2037]! } + public var Passport_Language_th: String { return self._s[2038]! } + public var PhotoEditor_CropAspectRatioOriginal: String { return self._s[2040]! } + public var LastSeen_Offline: String { return self._s[2043]! } + public var Map_OpenInHereMaps: String { return self._s[2044]! } + public var SettingsSearch_Synonyms_Data_AutoplayVideos: String { return self._s[2045]! } + public var InviteLink_ContextEdit: String { return self._s[2047]! } + public var AutoDownloadSettings_Reset: String { return self._s[2048]! } + public var Conversation_SendMessage_SetReminder: String { return self._s[2049]! } + public var Channel_AdminLog_EmptyMessageText: String { return self._s[2050]! } public func AddContact_StatusSuccess(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2049]!, self._r[2049]!, [_0]) + return formatWithArgumentRanges(self._s[2051]!, self._r[2051]!, [_0]) } public func AuthCode_Alert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2050]!, self._r[2050]!, [_0]) + return formatWithArgumentRanges(self._s[2052]!, self._r[2052]!, [_0]) } - public var Passport_Identity_EditDriversLicense: String { return self._s[2051]! } - public var ChatListFolder_NameNonMuted: String { return self._s[2052]! } - public var Username_Placeholder: String { return self._s[2053]! } + public var Passport_Identity_EditDriversLicense: String { return self._s[2053]! } + public var ChatListFolder_NameNonMuted: String { return self._s[2054]! } + public var Username_Placeholder: String { return self._s[2055]! } public func PUSH_ALBUM(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2054]!, self._r[2054]!, [_1]) + return formatWithArgumentRanges(self._s[2056]!, self._r[2056]!, [_1]) } - public var Passport_Language_it: String { return self._s[2055]! } - public var Checkout_NewCard_SaveInfo: String { return self._s[2056]! } + public var Passport_Language_it: String { return self._s[2057]! } + public var Checkout_NewCard_SaveInfo: String { return self._s[2058]! } public func Channel_OwnershipTransfer_DescriptionInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2057]!, self._r[2057]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2059]!, self._r[2059]!, [_1, _2]) } - public var NotificationsSound_Pulse: String { return self._s[2058]! } - public var VoiceOver_DismissContextMenu: String { return self._s[2060]! } - public var MessagePoll_NoVotes: String { return self._s[2063]! } - public var Message_Wallpaper: String { return self._s[2064]! } - public var Appearance_Other: String { return self._s[2065]! } - public var Passport_Identity_NativeNameHelp: String { return self._s[2067]! } - public var Group_PublicLink_Placeholder: String { return self._s[2070]! } - public var Appearance_ThemePreview_ChatList_2_Text: String { return self._s[2071]! } - public var VoiceOver_Recording_StopAndPreview: String { return self._s[2072]! } - public var ChatListFolder_NameBots: String { return self._s[2073]! } - public var Conversation_StopPollConfirmation: String { return self._s[2074]! } - public var UserInfo_DeleteContact: String { return self._s[2075]! } + public var NotificationsSound_Pulse: String { return self._s[2060]! } + public var VoiceOver_DismissContextMenu: String { return self._s[2062]! } + public var MessagePoll_NoVotes: String { return self._s[2065]! } + public var Message_Wallpaper: String { return self._s[2066]! } + public var Appearance_Other: String { return self._s[2067]! } + public var Passport_Identity_NativeNameHelp: String { return self._s[2069]! } + public var Group_PublicLink_Placeholder: String { return self._s[2072]! } + public var Appearance_ThemePreview_ChatList_2_Text: String { return self._s[2073]! } + public var VoiceOver_Recording_StopAndPreview: String { return self._s[2074]! } + public var ChatListFolder_NameBots: String { return self._s[2075]! } + public var Conversation_StopPollConfirmation: String { return self._s[2076]! } + public var UserInfo_DeleteContact: String { return self._s[2077]! } public func Time_MonthOfYear_m11(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2076]!, self._r[2076]!, [_0]) + return formatWithArgumentRanges(self._s[2078]!, self._r[2078]!, [_0]) } - public var Wallpaper_Wallpaper: String { return self._s[2078]! } + public var Wallpaper_Wallpaper: String { return self._s[2080]! } public func PUSH_MESSAGE_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2079]!, self._r[2079]!, [_1]) + return formatWithArgumentRanges(self._s[2081]!, self._r[2081]!, [_1]) } - public var LoginPassword_ForgotPassword: String { return self._s[2080]! } - public var FeaturedStickerPacks_Title: String { return self._s[2081]! } - public var Paint_Pen: String { return self._s[2082]! } - public var Channel_AdminLogFilter_EventsInfo: String { return self._s[2083]! } - public var ChatListFolderSettings_Info: String { return self._s[2084]! } - public var FastTwoStepSetup_HintPlaceholder: String { return self._s[2085]! } - public var PhotoEditor_CurvesAll: String { return self._s[2087]! } + public var LoginPassword_ForgotPassword: String { return self._s[2082]! } + public var FeaturedStickerPacks_Title: String { return self._s[2083]! } + public var Paint_Pen: String { return self._s[2084]! } + public var Channel_AdminLogFilter_EventsInfo: String { return self._s[2085]! } + public var ChatListFolderSettings_Info: String { return self._s[2086]! } + public var FastTwoStepSetup_HintPlaceholder: String { return self._s[2087]! } + public var PhotoEditor_CurvesAll: String { return self._s[2089]! } public func Time_PreciseDate_m12(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2089]!, self._r[2089]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2091]!, self._r[2091]!, [_1, _2, _3]) } - public var Passport_Address_TypeRentalAgreement: String { return self._s[2091]! } - public var Message_ImageExpired: String { return self._s[2092]! } - public var Call_ConnectionErrorMessage: String { return self._s[2093]! } - public var SearchImages_NoImagesFound: String { return self._s[2095]! } - public var PeerInfo_PaneGifs: String { return self._s[2096]! } - public var Passport_DeletePersonalDetailsConfirmation: String { return self._s[2097]! } - public var EnterPasscode_RepeatNewPasscode: String { return self._s[2098]! } - public var PhotoEditor_VignetteTool: String { return self._s[2099]! } - public var Passport_Language_dz: String { return self._s[2100]! } - public var Notifications_ChannelNotificationsHelp: String { return self._s[2101]! } - public var Conversation_BlockUser: String { return self._s[2102]! } - public var GroupPermission_PermissionDisabledByDefault: String { return self._s[2105]! } - public var Group_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[2107]! } + public var Passport_Address_TypeRentalAgreement: String { return self._s[2093]! } + public var Message_ImageExpired: String { return self._s[2094]! } + public var Call_ConnectionErrorMessage: String { return self._s[2095]! } + public var SearchImages_NoImagesFound: String { return self._s[2097]! } + public var PeerInfo_PaneGifs: String { return self._s[2098]! } + public var Passport_DeletePersonalDetailsConfirmation: String { return self._s[2099]! } + public var EnterPasscode_RepeatNewPasscode: String { return self._s[2100]! } + public var PhotoEditor_VignetteTool: String { return self._s[2101]! } + public var Passport_Language_dz: String { return self._s[2102]! } + public var Notifications_ChannelNotificationsHelp: String { return self._s[2103]! } + public var Conversation_BlockUser: String { return self._s[2104]! } + public var GroupPermission_PermissionDisabledByDefault: String { return self._s[2107]! } + public var Group_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[2109]! } public func Time_MonthOfYear_m8(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2108]!, self._r[2108]!, [_0]) + return formatWithArgumentRanges(self._s[2110]!, self._r[2110]!, [_0]) } - public var KeyCommand_NewMessage: String { return self._s[2109]! } - public var EditTheme_Edit_Preview_IncomingReplyText: String { return self._s[2111]! } + public var KeyCommand_NewMessage: String { return self._s[2111]! } + public var EditTheme_Edit_Preview_IncomingReplyText: String { return self._s[2113]! } public func PUSH_CHAT_MESSAGE_GEO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2113]!, self._r[2113]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2115]!, self._r[2115]!, [_1, _2]) } - public var ContactList_Context_StartSecretChat: String { return self._s[2114]! } - public var VoiceOver_Chat_File: String { return self._s[2115]! } - public var ChatList_EditFolder: String { return self._s[2117]! } - public var Appearance_BubbleCorners_Title: String { return self._s[2118]! } - public var PeerInfo_PaneAudio: String { return self._s[2119]! } - public var ChatListFolder_CategoryContacts: String { return self._s[2121]! } + public var ContactList_Context_StartSecretChat: String { return self._s[2116]! } + public var VoiceOver_Chat_File: String { return self._s[2117]! } + public var ChatList_EditFolder: String { return self._s[2119]! } + public var Appearance_BubbleCorners_Title: String { return self._s[2120]! } + public var PeerInfo_PaneAudio: String { return self._s[2121]! } + public var ChatListFolder_CategoryContacts: String { return self._s[2123]! } public func Login_InvalidPhoneEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2122]!, self._r[2122]!, [_1, _2, _3, _4, _5]) + return formatWithArgumentRanges(self._s[2124]!, self._r[2124]!, [_1, _2, _3, _4, _5]) } - public var ChatList_PeerTypeChannel: String { return self._s[2123]! } - public var VoiceOver_Navigation_Search: String { return self._s[2124]! } - public var Settings_Search: String { return self._s[2125]! } - public var WallpaperSearch_ColorYellow: String { return self._s[2126]! } - public var Login_PhoneBannedError: String { return self._s[2127]! } - public var KeyCommand_JumpToNextChat: String { return self._s[2128]! } - public var Passport_Language_fa: String { return self._s[2129]! } - public var Settings_About: String { return self._s[2130]! } - public var AutoDownloadSettings_MaxFileSize: String { return self._s[2131]! } - public var Channel_AdminLog_InfoPanelChannelAlertText: String { return self._s[2132]! } - public var AutoDownloadSettings_DataUsageHigh: String { return self._s[2133]! } + public var ChatList_PeerTypeChannel: String { return self._s[2125]! } + public var VoiceOver_Navigation_Search: String { return self._s[2126]! } + public var Settings_Search: String { return self._s[2127]! } + public var WallpaperSearch_ColorYellow: String { return self._s[2128]! } + public var Login_PhoneBannedError: String { return self._s[2129]! } + public var KeyCommand_JumpToNextChat: String { return self._s[2130]! } + public var Passport_Language_fa: String { return self._s[2131]! } + public var Settings_About: String { return self._s[2132]! } + public var AutoDownloadSettings_MaxFileSize: String { return self._s[2133]! } + public var Channel_AdminLog_InfoPanelChannelAlertText: String { return self._s[2134]! } + public var AutoDownloadSettings_DataUsageHigh: String { return self._s[2135]! } public func PUSH_CHAT_MESSAGE_TEXT(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2134]!, self._r[2134]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2136]!, self._r[2136]!, [_1, _2, _3]) } - public var Common_OK: String { return self._s[2135]! } - public var Contacts_SortBy: String { return self._s[2136]! } - public var AutoNightTheme_PreferredTheme: String { return self._s[2137]! } + public var Common_OK: String { return self._s[2137]! } + public var Contacts_SortBy: String { return self._s[2138]! } + public var AutoNightTheme_PreferredTheme: String { return self._s[2139]! } public func AutoDownloadSettings_OnFor(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2139]!, self._r[2139]!, [_0]) + return formatWithArgumentRanges(self._s[2141]!, self._r[2141]!, [_0]) } - public var CallFeedback_IncludeLogs: String { return self._s[2142]! } + public var CallFeedback_IncludeLogs: String { return self._s[2144]! } public func External_OpenIn(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2143]!, self._r[2143]!, [_0]) + return formatWithArgumentRanges(self._s[2145]!, self._r[2145]!, [_0]) } - public var Passcode_AppLockedAlert: String { return self._s[2145]! } - public var TwoStepAuth_SetupPasswordTitle: String { return self._s[2146]! } - public var Channel_NotificationLoading: String { return self._s[2148]! } - public var Passport_Identity_DocumentNumber: String { return self._s[2149]! } - public var VoiceOver_Chat_PagePreview: String { return self._s[2150]! } - public var VoiceOver_Chat_OpenHint: String { return self._s[2151]! } - public var Weekday_ShortFriday: String { return self._s[2152]! } - public var Conversation_TitleMute: String { return self._s[2153]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsSound: String { return self._s[2154]! } - public var ScheduledMessages_PollUnavailable: String { return self._s[2155]! } - public var DialogList_LanguageTooltip: String { return self._s[2157]! } - public var Channel_AdminLogFilter_EventsPinned: String { return self._s[2158]! } + public var Passcode_AppLockedAlert: String { return self._s[2147]! } + public var TwoStepAuth_SetupPasswordTitle: String { return self._s[2148]! } + public var Channel_NotificationLoading: String { return self._s[2150]! } + public var Passport_Identity_DocumentNumber: String { return self._s[2151]! } + public var VoiceOver_Chat_PagePreview: String { return self._s[2152]! } + public var VoiceOver_Chat_OpenHint: String { return self._s[2153]! } + public var Weekday_ShortFriday: String { return self._s[2154]! } + public var Conversation_TitleMute: String { return self._s[2155]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsSound: String { return self._s[2156]! } + public var ScheduledMessages_PollUnavailable: String { return self._s[2157]! } + public var DialogList_LanguageTooltip: String { return self._s[2159]! } + public var Channel_AdminLogFilter_EventsPinned: String { return self._s[2160]! } public func DialogList_SingleUploadingVideoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2159]!, self._r[2159]!, [_0]) + return formatWithArgumentRanges(self._s[2161]!, self._r[2161]!, [_0]) } - public var TwoStepAuth_SetupResendEmailCodeAlert: String { return self._s[2161]! } - public var Privacy_Calls_AlwaysAllow_Title: String { return self._s[2162]! } - public var Settings_EditVideo: String { return self._s[2163]! } - public var VoiceOver_Common_Off: String { return self._s[2164]! } - public var Stickers_FrequentlyUsed: String { return self._s[2165]! } - public var GroupPermission_Title: String { return self._s[2166]! } - public var AccessDenied_VideoMessageCamera: String { return self._s[2167]! } - public var Appearance_ThemeCarouselDay: String { return self._s[2168]! } + public var TwoStepAuth_SetupResendEmailCodeAlert: String { return self._s[2163]! } + public var Privacy_Calls_AlwaysAllow_Title: String { return self._s[2164]! } + public var Settings_EditVideo: String { return self._s[2165]! } + public var VoiceOver_Common_Off: String { return self._s[2166]! } + public var Stickers_FrequentlyUsed: String { return self._s[2167]! } + public var GroupPermission_Title: String { return self._s[2168]! } + public var AccessDenied_VideoMessageCamera: String { return self._s[2169]! } + public var Appearance_ThemeCarouselDay: String { return self._s[2170]! } public func PUSH_CHAT_MESSAGE_AUDIO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2169]!, self._r[2169]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2171]!, self._r[2171]!, [_1, _2]) } - public var Passport_Identity_DocumentNumberPlaceholder: String { return self._s[2170]! } - public var Tour_Title6: String { return self._s[2171]! } - public var EmptyGroupInfo_Title: String { return self._s[2172]! } + public var Passport_Identity_DocumentNumberPlaceholder: String { return self._s[2172]! } + public var Tour_Title6: String { return self._s[2173]! } + public var EmptyGroupInfo_Title: String { return self._s[2174]! } public func Channel_AdminLog_MessageToggleSignaturesOn(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2173]!, self._r[2173]!, [_0]) + return formatWithArgumentRanges(self._s[2175]!, self._r[2175]!, [_0]) } - public var Passport_Language_sk: String { return self._s[2174]! } - public var VoiceOver_Chat_YourAnonymousPoll: String { return self._s[2175]! } - public var Preview_SaveToCameraRoll: String { return self._s[2176]! } - public var LogoutOptions_SetPasscodeTitle: String { return self._s[2177]! } - public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[2178]! } - public var Conversation_ContextMenuMore: String { return self._s[2179]! } - public var Conversation_ForwardAuthorHiddenTooltip: String { return self._s[2180]! } - public var Channel_AdminLog_CanBeAnonymous: String { return self._s[2181]! } - public var CallFeedback_ReasonSilentLocal: String { return self._s[2183]! } + public var Passport_Language_sk: String { return self._s[2176]! } + public var VoiceOver_Chat_YourAnonymousPoll: String { return self._s[2177]! } + public var Preview_SaveToCameraRoll: String { return self._s[2178]! } + public var LogoutOptions_SetPasscodeTitle: String { return self._s[2179]! } + public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[2180]! } + public var Conversation_ContextMenuMore: String { return self._s[2181]! } + public var Conversation_ForwardAuthorHiddenTooltip: String { return self._s[2182]! } + public var Channel_AdminLog_CanBeAnonymous: String { return self._s[2183]! } + public var CallFeedback_ReasonSilentLocal: String { return self._s[2185]! } public func Channel_AdminLog_UnmutedMutedParticipant(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2184]!, self._r[2184]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2186]!, self._r[2186]!, [_1, _2]) } - public var UserInfo_NotificationsDisable: String { return self._s[2185]! } + public var UserInfo_NotificationsDisable: String { return self._s[2187]! } public func Channel_AdminLog_EmptyFilterQueryText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2187]!, self._r[2187]!, [_0]) + return formatWithArgumentRanges(self._s[2189]!, self._r[2189]!, [_0]) } - public var SettingsSearch_Synonyms_EditProfile_Bio: String { return self._s[2188]! } + public var SettingsSearch_Synonyms_EditProfile_Bio: String { return self._s[2190]! } public func Date_ChatDateHeader(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2190]!, self._r[2190]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2192]!, self._r[2192]!, [_1, _2]) } - public var WallpaperSearch_ColorPrefix: String { return self._s[2191]! } + public var WallpaperSearch_ColorPrefix: String { return self._s[2193]! } public func Message_ForwardedPsa_covid(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2192]!, self._r[2192]!, [_0]) + return formatWithArgumentRanges(self._s[2194]!, self._r[2194]!, [_0]) } - public var Conversation_RestrictedMedia: String { return self._s[2194]! } - public var Group_MessageVideoUpdated: String { return self._s[2195]! } - public var NetworkUsageSettings_ResetStatsConfirmation: String { return self._s[2196]! } - public var GroupInfo_DeleteAndExit: String { return self._s[2197]! } - public var TwoFactorSetup_Email_Action: String { return self._s[2198]! } - public var Media_ShareThisVideo: String { return self._s[2200]! } - public var DialogList_Replies: String { return self._s[2201]! } + public var Conversation_RestrictedMedia: String { return self._s[2196]! } + public var Group_MessageVideoUpdated: String { return self._s[2197]! } + public var NetworkUsageSettings_ResetStatsConfirmation: String { return self._s[2198]! } + public var GroupInfo_DeleteAndExit: String { return self._s[2199]! } + public var TwoFactorSetup_Email_Action: String { return self._s[2200]! } + public var Media_ShareThisVideo: String { return self._s[2202]! } + public var DialogList_Replies: String { return self._s[2203]! } public func Conversation_Moderate_DeleteAllMessages(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2202]!, self._r[2202]!, [_0]) + return formatWithArgumentRanges(self._s[2204]!, self._r[2204]!, [_0]) } - public var CheckoutInfo_ShippingInfoAddress1: String { return self._s[2203]! } - public var Watch_Suggestion_OnMyWay: String { return self._s[2204]! } - public var CheckoutInfo_ShippingInfoAddress2: String { return self._s[2205]! } + public var CheckoutInfo_ShippingInfoAddress1: String { return self._s[2205]! } + public var Watch_Suggestion_OnMyWay: String { return self._s[2206]! } + public var CheckoutInfo_ShippingInfoAddress2: String { return self._s[2207]! } public func PUSH_PINNED_POLL(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2206]!, self._r[2206]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2208]!, self._r[2208]!, [_1, _2]) } public func GroupInfo_InvitationLinkAcceptChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2207]!, self._r[2207]!, [_0]) + return formatWithArgumentRanges(self._s[2209]!, self._r[2209]!, [_0]) } - public var Channel_EditAdmin_PermissinAddAdminOff: String { return self._s[2208]! } - public var ChatAdmins_AllMembersAreAdminsOnHelp: String { return self._s[2209]! } - public var ChatList_Search_NoResultsFitlerMedia: String { return self._s[2210]! } - public var Channel_Members_InviteLink: String { return self._s[2211]! } - public var Conversation_TapAndHoldToRecord: String { return self._s[2212]! } - public var WatchRemote_AlertText: String { return self._s[2213]! } + public var Channel_EditAdmin_PermissinAddAdminOff: String { return self._s[2210]! } + public var ChatAdmins_AllMembersAreAdminsOnHelp: String { return self._s[2211]! } + public var ChatList_Search_NoResultsFitlerMedia: String { return self._s[2212]! } + public var Channel_Members_InviteLink: String { return self._s[2213]! } + public var Conversation_TapAndHoldToRecord: String { return self._s[2214]! } + public var WatchRemote_AlertText: String { return self._s[2215]! } public func Channel_DiscussionGroup_PrivateChannelLink(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2214]!, self._r[2214]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2216]!, self._r[2216]!, [_1, _2]) } - public var Conversation_Pin: String { return self._s[2215]! } - public var InfoPlist_NSMicrophoneUsageDescription: String { return self._s[2216]! } - public var Stickers_RemoveFromFavorites: String { return self._s[2217]! } + public var Conversation_Pin: String { return self._s[2217]! } + public var InfoPlist_NSMicrophoneUsageDescription: String { return self._s[2218]! } + public var Stickers_RemoveFromFavorites: String { return self._s[2219]! } public func Notification_PinnedPollMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2218]!, self._r[2218]!, [_0]) + return formatWithArgumentRanges(self._s[2220]!, self._r[2220]!, [_0]) } - public var Appearance_AppIconFilled: String { return self._s[2219]! } - public var StickerPack_ErrorNotFound: String { return self._s[2220]! } + public var Appearance_AppIconFilled: String { return self._s[2221]! } + public var StickerPack_ErrorNotFound: String { return self._s[2222]! } public func Channel_AdminLog_MessageRestrictedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2221]!, self._r[2221]!, [_1]) + return formatWithArgumentRanges(self._s[2223]!, self._r[2223]!, [_1]) } - public var Passport_Identity_AddIdentityCard: String { return self._s[2222]! } + public var Passport_Identity_AddIdentityCard: String { return self._s[2224]! } public func PUSH_CHANNEL_MESSAGE_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2224]!, self._r[2224]!, [_1]) + return formatWithArgumentRanges(self._s[2226]!, self._r[2226]!, [_1]) } - public var Call_Camera: String { return self._s[2225]! } - public var GroupInfo_InviteLink_RevokeAlert_Text: String { return self._s[2226]! } - public var Group_Location_Info: String { return self._s[2227]! } - public var Watch_LastSeen_WithinAMonth: String { return self._s[2228]! } - public var UserInfo_NotificationsDefaultEnabled: String { return self._s[2229]! } + public var Call_Camera: String { return self._s[2227]! } + public var GroupInfo_InviteLink_RevokeAlert_Text: String { return self._s[2228]! } + public var Group_Location_Info: String { return self._s[2229]! } + public var Watch_LastSeen_WithinAMonth: String { return self._s[2230]! } + public var UserInfo_NotificationsDefaultEnabled: String { return self._s[2231]! } public func DialogList_PinLimitError(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2230]!, self._r[2230]!, [_0]) + return formatWithArgumentRanges(self._s[2232]!, self._r[2232]!, [_0]) } - public var Weekday_Yesterday: String { return self._s[2231]! } - public var TwoStepAuth_SetupPasswordEnterPasswordNew: String { return self._s[2232]! } - public var InviteLink_Create_UsersLimit: String { return self._s[2233]! } - public var ArchivedPacksAlert_Title: String { return self._s[2234]! } - public var PeerInfo_PaneMembers: String { return self._s[2235]! } - public var PhotoEditor_SelectCoverFrame: String { return self._s[2236]! } + public var Weekday_Yesterday: String { return self._s[2233]! } + public var TwoStepAuth_SetupPasswordEnterPasswordNew: String { return self._s[2234]! } + public var InviteLink_Create_UsersLimit: String { return self._s[2235]! } + public var ArchivedPacksAlert_Title: String { return self._s[2236]! } + public var PeerInfo_PaneMembers: String { return self._s[2237]! } + public var PhotoEditor_SelectCoverFrame: String { return self._s[2238]! } public func Location_ProximityAlertSetTextGroup(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2237]!, self._r[2237]!, [_0]) + return formatWithArgumentRanges(self._s[2239]!, self._r[2239]!, [_0]) } - public var ContactInfo_PhoneLabelMain: String { return self._s[2238]! } + public var ContactInfo_PhoneLabelMain: String { return self._s[2240]! } public func Time_PreciseDate_m7(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2239]!, self._r[2239]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2241]!, self._r[2241]!, [_1, _2, _3]) } - public var TwoFactorSetup_EmailVerification_ChangeAction: String { return self._s[2240]! } - public var Channel_DiscussionGroup: String { return self._s[2241]! } - public var EditTheme_Edit_Preview_IncomingReplyName: String { return self._s[2242]! } - public var InviteLink_Create_TimeLimit: String { return self._s[2244]! } - public var Channel_EditAdmin_PermissionsHeader: String { return self._s[2245]! } - public var VoiceOver_MessageContextForward: String { return self._s[2246]! } - public var SocksProxySetup_TypeNone: String { return self._s[2247]! } - public var CreatePoll_MultipleChoiceQuizAlert: String { return self._s[2249]! } - public var ProfilePhoto_OpenInEditor: String { return self._s[2251]! } - public var WallpaperSearch_ColorPurple: String { return self._s[2252]! } - public var ChatListFolder_IncludeChatsTitle: String { return self._s[2253]! } - public var Group_Username_InvalidTooShort: String { return self._s[2254]! } - public var Location_ProximityNotification_DistanceM: String { return self._s[2255]! } + public var TwoFactorSetup_EmailVerification_ChangeAction: String { return self._s[2242]! } + public var Channel_DiscussionGroup: String { return self._s[2243]! } + public var EditTheme_Edit_Preview_IncomingReplyName: String { return self._s[2244]! } + public var InviteLink_Create_TimeLimit: String { return self._s[2246]! } + public var Channel_EditAdmin_PermissionsHeader: String { return self._s[2247]! } + public var VoiceOver_MessageContextForward: String { return self._s[2248]! } + public var SocksProxySetup_TypeNone: String { return self._s[2249]! } + public var CreatePoll_MultipleChoiceQuizAlert: String { return self._s[2251]! } + public var ProfilePhoto_OpenInEditor: String { return self._s[2253]! } + public var WallpaperSearch_ColorPurple: String { return self._s[2254]! } + public var ChatListFolder_IncludeChatsTitle: String { return self._s[2255]! } + public var Group_Username_InvalidTooShort: String { return self._s[2256]! } + public var Location_ProximityNotification_DistanceM: String { return self._s[2257]! } public func Login_EmailPhoneBody(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2256]!, self._r[2256]!, [_0, _1, _2]) + return formatWithArgumentRanges(self._s[2258]!, self._r[2258]!, [_0, _1, _2]) } - public var Passport_Language_tk: String { return self._s[2257]! } - public var ConvertToSupergroup_Title: String { return self._s[2258]! } - public var Channel_BanUser_PermissionEmbedLinks: String { return self._s[2259]! } - public var Cache_KeepMediaHelp: String { return self._s[2260]! } - public var Channel_Management_Title: String { return self._s[2261]! } + public var Passport_Language_tk: String { return self._s[2259]! } + public var ConvertToSupergroup_Title: String { return self._s[2260]! } + public var Channel_BanUser_PermissionEmbedLinks: String { return self._s[2261]! } + public var Cache_KeepMediaHelp: String { return self._s[2262]! } + public var Channel_Management_Title: String { return self._s[2263]! } public func PUSH_MESSAGE_PHOTO_SECRET(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2262]!, self._r[2262]!, [_1]) + return formatWithArgumentRanges(self._s[2264]!, self._r[2264]!, [_1]) } - public var Conversation_ForwardChats: String { return self._s[2263]! } - public var Passport_Language_bg: String { return self._s[2264]! } - public var SocksProxySetup_TypeSocks: String { return self._s[2265]! } - public var Permissions_PrivacyPolicy: String { return self._s[2266]! } - public var VoiceOver_Chat_YourMusic: String { return self._s[2267]! } - public var SettingsSearch_Synonyms_Notifications_ResetAllNotifications: String { return self._s[2268]! } - public var Conversation_EmptyGifPanelPlaceholder: String { return self._s[2269]! } - public var Conversation_ContextMenuOpenChannel: String { return self._s[2270]! } - public var Activity_UploadingVideo: String { return self._s[2271]! } - public var PrivacyPolicy_AgeVerificationAgree: String { return self._s[2273]! } - public var SocksProxySetup_Credentials: String { return self._s[2275]! } - public var Preview_SaveGif: String { return self._s[2276]! } - public var Cache_Photos: String { return self._s[2277]! } - public var Channel_AdminLogFilter_EventsCalls: String { return self._s[2278]! } - public var Conversation_ContextMenuCancelEditing: String { return self._s[2279]! } - public var Contacts_FailedToSendInvitesMessage: String { return self._s[2280]! } - public var Passport_Language_lt: String { return self._s[2281]! } - public var Passport_DeleteDocument: String { return self._s[2283]! } - public var GroupInfo_SetGroupPhotoStop: String { return self._s[2284]! } + public var Conversation_ForwardChats: String { return self._s[2265]! } + public var Passport_Language_bg: String { return self._s[2266]! } + public var SocksProxySetup_TypeSocks: String { return self._s[2267]! } + public var Permissions_PrivacyPolicy: String { return self._s[2268]! } + public var VoiceOver_Chat_YourMusic: String { return self._s[2269]! } + public var SettingsSearch_Synonyms_Notifications_ResetAllNotifications: String { return self._s[2270]! } + public var Conversation_EmptyGifPanelPlaceholder: String { return self._s[2271]! } + public var Conversation_ContextMenuOpenChannel: String { return self._s[2272]! } + public var Activity_UploadingVideo: String { return self._s[2273]! } + public var PrivacyPolicy_AgeVerificationAgree: String { return self._s[2275]! } + public var SocksProxySetup_Credentials: String { return self._s[2277]! } + public var Preview_SaveGif: String { return self._s[2278]! } + public var Cache_Photos: String { return self._s[2279]! } + public var Channel_AdminLogFilter_EventsCalls: String { return self._s[2280]! } + public var Conversation_ContextMenuCancelEditing: String { return self._s[2281]! } + public var Contacts_FailedToSendInvitesMessage: String { return self._s[2282]! } + public var Passport_Language_lt: String { return self._s[2283]! } + public var Passport_DeleteDocument: String { return self._s[2285]! } + public var GroupInfo_SetGroupPhotoStop: String { return self._s[2286]! } public func Location_ProximityNotification_NotifyLong(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2285]!, self._r[2285]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2287]!, self._r[2287]!, [_1, _2]) } - public var AccessDenied_VideoMessageMicrophone: String { return self._s[2286]! } + public var AccessDenied_VideoMessageMicrophone: String { return self._s[2288]! } public func PeopleNearby_VisibleUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2287]!, self._r[2287]!, [_0]) - } - public var AccessDenied_VideoCallCamera: String { return self._s[2288]! } - public func Channel_AdminLog_MessageDeleted(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2289]!, self._r[2289]!, [_0]) } - public var PhotoEditor_SharpenTool: String { return self._s[2290]! } - public func PUSH_CHANNEL_MESSAGE_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2291]!, self._r[2291]!, [_1]) + public var AccessDenied_VideoCallCamera: String { return self._s[2290]! } + public func Channel_AdminLog_MessageDeleted(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2291]!, self._r[2291]!, [_0]) } - public var DialogList_Unpin: String { return self._s[2292]! } - public var Stickers_NoStickersFound: String { return self._s[2293]! } - public var UserInfo_AddContact: String { return self._s[2295]! } + public var PhotoEditor_SharpenTool: String { return self._s[2292]! } + public func PUSH_CHANNEL_MESSAGE_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2293]!, self._r[2293]!, [_1]) + } + public var DialogList_Unpin: String { return self._s[2294]! } + public var Stickers_NoStickersFound: String { return self._s[2295]! } + public var UserInfo_AddContact: String { return self._s[2297]! } public func AddContact_SharedContactExceptionInfo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2297]!, self._r[2297]!, [_0]) + return formatWithArgumentRanges(self._s[2299]!, self._r[2299]!, [_0]) } public func Notification_PinnedLocationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2298]!, self._r[2298]!, [_0]) + return formatWithArgumentRanges(self._s[2300]!, self._r[2300]!, [_0]) } - public var CallFeedback_VideoReasonDistorted: String { return self._s[2299]! } - public var Tour_Text2: String { return self._s[2300]! } + public var CallFeedback_VideoReasonDistorted: String { return self._s[2301]! } + public var Tour_Text2: String { return self._s[2302]! } public func Conversation_TitleCommentsFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2302]!, self._r[2302]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2304]!, self._r[2304]!, [_1, _2]) } - public var InviteLink_DeleteAllRevokedLinksAlert_Text: String { return self._s[2304]! } - public var Paint_Delete: String { return self._s[2305]! } + public var InviteLink_DeleteAllRevokedLinksAlert_Text: String { return self._s[2306]! } + public var Paint_Delete: String { return self._s[2307]! } public func Call_VoiceChatInProgressMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2306]!, self._r[2306]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2308]!, self._r[2308]!, [_1, _2]) } - public var SettingsSearch_Synonyms_Notifications_InAppNotificationsVibrate: String { return self._s[2307]! } + public var SettingsSearch_Synonyms_Notifications_InAppNotificationsVibrate: String { return self._s[2309]! } public func PrivacySettings_LastSeenEverybodyMinus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2309]!, self._r[2309]!, [_0]) + return formatWithArgumentRanges(self._s[2311]!, self._r[2311]!, [_0]) } - public var Privacy_Calls_NeverAllow_Title: String { return self._s[2310]! } - public var Notification_CallOutgoingShort: String { return self._s[2311]! } - public var Checkout_PasswordEntry_Title: String { return self._s[2312]! } - public var Channel_AdminLogFilter_AdminsAll: String { return self._s[2313]! } - public var Notification_MessageLifetime1m: String { return self._s[2314]! } - public var BlockedUsers_AddNew: String { return self._s[2316]! } - public var FastTwoStepSetup_EmailSection: String { return self._s[2317]! } - public var Settings_SaveEditedPhotos: String { return self._s[2318]! } - public var GroupInfo_GroupNamePlaceholder: String { return self._s[2319]! } - public var Channel_AboutItem: String { return self._s[2320]! } - public var GroupInfo_InviteLink_RevokeLink: String { return self._s[2321]! } - public var Privacy_Calls_P2PNever: String { return self._s[2323]! } - public var Passport_Language_uk: String { return self._s[2324]! } - public var NetworkUsageSettings_Wifi: String { return self._s[2325]! } - public var Conversation_Moderate_Report: String { return self._s[2326]! } - public var Wallpaper_ResetWallpapersConfirmation: String { return self._s[2327]! } - public var VoiceOver_Chat_SeenByRecipients: String { return self._s[2328]! } - public var Permissions_SiriText_v0: String { return self._s[2329]! } - public var Theme_Colors_Background: String { return self._s[2330]! } - public var Notification_CallMissed: String { return self._s[2331]! } - public var Stats_ZoomOut: String { return self._s[2332]! } - public var Profile_AddToExisting: String { return self._s[2333]! } - public var Passport_FieldAddressUploadHelp: String { return self._s[2336]! } - public var VoiceChat_RemovePeerRemove: String { return self._s[2337]! } - public var Undo_DeletedChannel: String { return self._s[2338]! } + public var Privacy_Calls_NeverAllow_Title: String { return self._s[2312]! } + public var Notification_CallOutgoingShort: String { return self._s[2313]! } + public var Checkout_PasswordEntry_Title: String { return self._s[2314]! } + public var Channel_AdminLogFilter_AdminsAll: String { return self._s[2315]! } + public var Notification_MessageLifetime1m: String { return self._s[2316]! } + public var BlockedUsers_AddNew: String { return self._s[2318]! } + public var FastTwoStepSetup_EmailSection: String { return self._s[2319]! } + public var Settings_SaveEditedPhotos: String { return self._s[2320]! } + public var GroupInfo_GroupNamePlaceholder: String { return self._s[2321]! } + public var Channel_AboutItem: String { return self._s[2322]! } + public var GroupInfo_InviteLink_RevokeLink: String { return self._s[2323]! } + public var Privacy_Calls_P2PNever: String { return self._s[2325]! } + public var Passport_Language_uk: String { return self._s[2326]! } + public var NetworkUsageSettings_Wifi: String { return self._s[2327]! } + public var Conversation_Moderate_Report: String { return self._s[2328]! } + public var Wallpaper_ResetWallpapersConfirmation: String { return self._s[2329]! } + public var VoiceOver_Chat_SeenByRecipients: String { return self._s[2330]! } + public var Permissions_SiriText_v0: String { return self._s[2331]! } + public var Theme_Colors_Background: String { return self._s[2332]! } + public var Notification_CallMissed: String { return self._s[2333]! } + public var Stats_ZoomOut: String { return self._s[2334]! } + public var Profile_AddToExisting: String { return self._s[2335]! } + public var Passport_FieldAddressUploadHelp: String { return self._s[2338]! } + public var VoiceChat_RemovePeerRemove: String { return self._s[2339]! } + public var Undo_DeletedChannel: String { return self._s[2340]! } public func Channel_AdminLog_MessagePinned(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2339]!, self._r[2339]!, [_0]) + return formatWithArgumentRanges(self._s[2341]!, self._r[2341]!, [_0]) } - public var Login_ResetAccountProtected_TimerTitle: String { return self._s[2340]! } - public var Map_LiveLocationGroupDescription: String { return self._s[2341]! } - public var Passport_InfoFAQ_URL: String { return self._s[2342]! } - public var IntentsSettings_SuggestedChats: String { return self._s[2344]! } + public var Login_ResetAccountProtected_TimerTitle: String { return self._s[2342]! } + public var Map_LiveLocationGroupDescription: String { return self._s[2343]! } + public var Passport_InfoFAQ_URL: String { return self._s[2344]! } + public var IntentsSettings_SuggestedChats: String { return self._s[2346]! } public func PUSH_MESSAGE_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2345]!, self._r[2345]!, [_1]) + return formatWithArgumentRanges(self._s[2347]!, self._r[2347]!, [_1]) } - public var State_connecting: String { return self._s[2346]! } - public var Passport_Identity_Country: String { return self._s[2347]! } - public var Passport_PasswordDescription: String { return self._s[2348]! } - public var ChatList_PsaLabel_covid: String { return self._s[2349]! } + public var State_connecting: String { return self._s[2348]! } + public var Passport_Identity_Country: String { return self._s[2349]! } + public var Passport_PasswordDescription: String { return self._s[2350]! } + public var ChatList_PsaLabel_covid: String { return self._s[2351]! } public func PUSH_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2350]!, self._r[2350]!, [_1]) + return formatWithArgumentRanges(self._s[2352]!, self._r[2352]!, [_1]) } - public var Contacts_AddPeopleNearby: String { return self._s[2351]! } - public var OwnershipTransfer_SetupTwoStepAuth: String { return self._s[2352]! } - public var ClearCache_Description: String { return self._s[2353]! } - public var Localization_LanguageName: String { return self._s[2354]! } + public var Contacts_AddPeopleNearby: String { return self._s[2353]! } + public var OwnershipTransfer_SetupTwoStepAuth: String { return self._s[2354]! } + public var ClearCache_Description: String { return self._s[2355]! } + public var Localization_LanguageName: String { return self._s[2356]! } public func UserInfo_UnblockConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2355]!, self._r[2355]!, [_0]) + return formatWithArgumentRanges(self._s[2357]!, self._r[2357]!, [_0]) } - public var ChatList_TabIconFoldersTooltipEmptyFolders: String { return self._s[2356]! } - public var UserInfo_CreateNewContact: String { return self._s[2357]! } - public var Channel_Stickers_NotFound: String { return self._s[2359]! } - public var Watch_Message_Poll: String { return self._s[2360]! } - public var Privacy_Forwards_WhoCanForward: String { return self._s[2361]! } + public var ChatList_TabIconFoldersTooltipEmptyFolders: String { return self._s[2358]! } + public var UserInfo_CreateNewContact: String { return self._s[2359]! } + public var Channel_Stickers_NotFound: String { return self._s[2361]! } + public var Watch_Message_Poll: String { return self._s[2362]! } + public var Privacy_Forwards_WhoCanForward: String { return self._s[2363]! } public func Notification_Kicked(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2362]!, self._r[2362]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2364]!, self._r[2364]!, [_0, _1]) } - public var Login_InfoDeletePhoto: String { return self._s[2363]! } - public var Appearance_ThemePreview_ChatList_6_Name: String { return self._s[2364]! } - public var InstantPage_FeedbackButton: String { return self._s[2365]! } - public var Appearance_PreviewReplyText: String { return self._s[2366]! } - public var Passport_FieldPhoneHelp: String { return self._s[2367]! } - public var Group_ErrorAddTooMuchBots: String { return self._s[2368]! } - public var Media_SendingOptionsTooltip: String { return self._s[2369]! } - public var ScheduledMessages_ScheduledOnline: String { return self._s[2370]! } - public var Notifications_Badge: String { return self._s[2371]! } - public var VoiceOver_Chat_VideoMessage: String { return self._s[2372]! } - public var TwoStepAuth_RecoveryCodeExpired: String { return self._s[2373]! } + public var Login_InfoDeletePhoto: String { return self._s[2365]! } + public var Appearance_ThemePreview_ChatList_6_Name: String { return self._s[2366]! } + public var InstantPage_FeedbackButton: String { return self._s[2367]! } + public var Appearance_PreviewReplyText: String { return self._s[2368]! } + public var Passport_FieldPhoneHelp: String { return self._s[2369]! } + public var Group_ErrorAddTooMuchBots: String { return self._s[2370]! } + public var Media_SendingOptionsTooltip: String { return self._s[2371]! } + public var ScheduledMessages_ScheduledOnline: String { return self._s[2372]! } + public var Notifications_Badge: String { return self._s[2373]! } + public var VoiceOver_Chat_VideoMessage: String { return self._s[2374]! } + public var TwoStepAuth_RecoveryCodeExpired: String { return self._s[2375]! } public func Notification_PinnedPhotoMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2375]!, self._r[2375]!, [_0]) + return formatWithArgumentRanges(self._s[2377]!, self._r[2377]!, [_0]) } - public var Passport_InfoLearnMore: String { return self._s[2376]! } - public var EnterPasscode_EnterTitle: String { return self._s[2377]! } - public var Appearance_EditTheme: String { return self._s[2378]! } - public var EditTheme_Expand_BottomInfo: String { return self._s[2379]! } - public var Stats_FollowersTitle: String { return self._s[2380]! } - public var Passport_Identity_SurnamePlaceholder: String { return self._s[2381]! } - public var Channel_Subscribers_Title: String { return self._s[2382]! } - public var Group_ErrorSupergroupConversionNotPossible: String { return self._s[2383]! } - public var EditTheme_ThemeTemplateAlertTitle: String { return self._s[2384]! } - public var EditTheme_Create_Preview_IncomingText: String { return self._s[2385]! } - public var Conversation_AddToReadingList: String { return self._s[2386]! } + public var Passport_InfoLearnMore: String { return self._s[2378]! } + public var EnterPasscode_EnterTitle: String { return self._s[2379]! } + public var Appearance_EditTheme: String { return self._s[2380]! } + public var EditTheme_Expand_BottomInfo: String { return self._s[2381]! } + public var Stats_FollowersTitle: String { return self._s[2382]! } + public var Passport_Identity_SurnamePlaceholder: String { return self._s[2383]! } + public var Channel_Subscribers_Title: String { return self._s[2384]! } + public var Group_ErrorSupergroupConversionNotPossible: String { return self._s[2385]! } + public var EditTheme_ThemeTemplateAlertTitle: String { return self._s[2386]! } + public var EditTheme_Create_Preview_IncomingText: String { return self._s[2387]! } + public var Conversation_AddToReadingList: String { return self._s[2388]! } public func Notifications_ExceptionsChangeSound(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2387]!, self._r[2387]!, [_0]) + return formatWithArgumentRanges(self._s[2389]!, self._r[2389]!, [_0]) } - public var Group_AdminLog_EmptyText: String { return self._s[2388]! } - public var Passport_Identity_EditInternalPassport: String { return self._s[2389]! } - public var Watch_Location_Current: String { return self._s[2390]! } - public var PrivacyPolicy_Title: String { return self._s[2391]! } - public var Privacy_GroupsAndChannels_CustomHelp: String { return self._s[2398]! } - public var Channel_TypeSetup_Title: String { return self._s[2402]! } - public var Appearance_PreviewReplyAuthor: String { return self._s[2403]! } - public var Passport_Language_ja: String { return self._s[2404]! } - public var ReportPeer_ReasonSpam: String { return self._s[2405]! } - public var Widget_GalleryDescription: String { return self._s[2406]! } - public var Privacy_PaymentsClearInfoHelp: String { return self._s[2407]! } - public var Conversation_EditingMessageMediaEditCurrentPhoto: String { return self._s[2409]! } - public var Channel_AdminLog_ChangeInfo: String { return self._s[2410]! } - public var ChatListFolder_NameNonContacts: String { return self._s[2411]! } - public var Call_Audio: String { return self._s[2412]! } - public var PhotoEditor_CurvesGreen: String { return self._s[2413]! } - public var ChatList_Search_NoResultsFitlerFiles: String { return self._s[2414]! } - public var Settings_PrivacySettings: String { return self._s[2415]! } - public var InviteLink_UsageLimitReached: String { return self._s[2416]! } - public var Stats_Followers: String { return self._s[2417]! } - public var Notifications_AddExceptionTitle: String { return self._s[2418]! } - public var TwoFactorSetup_Password_Title: String { return self._s[2419]! } - public var ChannelMembers_WhoCanAddMembersAllHelp: String { return self._s[2420]! } - public var OldChannels_NoticeText: String { return self._s[2421]! } - public var Conversation_SavedMessages: String { return self._s[2422]! } + public var Group_AdminLog_EmptyText: String { return self._s[2390]! } + public var Passport_Identity_EditInternalPassport: String { return self._s[2391]! } + public var Watch_Location_Current: String { return self._s[2392]! } + public var PrivacyPolicy_Title: String { return self._s[2393]! } + public var Privacy_GroupsAndChannels_CustomHelp: String { return self._s[2400]! } + public var Channel_TypeSetup_Title: String { return self._s[2404]! } + public var Appearance_PreviewReplyAuthor: String { return self._s[2405]! } + public var Passport_Language_ja: String { return self._s[2406]! } + public var ReportPeer_ReasonSpam: String { return self._s[2407]! } + public var Widget_GalleryDescription: String { return self._s[2408]! } + public var Privacy_PaymentsClearInfoHelp: String { return self._s[2409]! } + public var Conversation_EditingMessageMediaEditCurrentPhoto: String { return self._s[2411]! } + public var Channel_AdminLog_ChangeInfo: String { return self._s[2412]! } + public var ChatListFolder_NameNonContacts: String { return self._s[2413]! } + public var Call_Audio: String { return self._s[2414]! } + public var PhotoEditor_CurvesGreen: String { return self._s[2415]! } + public var ChatList_Search_NoResultsFitlerFiles: String { return self._s[2416]! } + public var Settings_PrivacySettings: String { return self._s[2417]! } + public var InviteLink_UsageLimitReached: String { return self._s[2418]! } + public var Stats_Followers: String { return self._s[2419]! } + public var Notifications_AddExceptionTitle: String { return self._s[2420]! } + public var TwoFactorSetup_Password_Title: String { return self._s[2421]! } + public var ChannelMembers_WhoCanAddMembersAllHelp: String { return self._s[2422]! } + public var OldChannels_NoticeText: String { return self._s[2423]! } + public var Conversation_SavedMessages: String { return self._s[2424]! } public func Conversation_PeerNearbyTitle(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2424]!, self._r[2424]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2426]!, self._r[2426]!, [_1, _2]) } - public var Passport_Address_TypeResidentialAddress: String { return self._s[2425]! } - public var Appearance_ThemeNightBlue: String { return self._s[2426]! } - public var Notification_ChannelInviterSelf: String { return self._s[2427]! } - public var InviteLink_Create_TimeLimitExpiryDateNever: String { return self._s[2429]! } - public var Watch_UserInfo_Service: String { return self._s[2430]! } - public var ChatList_Context_Back: String { return self._s[2431]! } - public var Passport_Email_Title: String { return self._s[2432]! } - public var Stats_GroupTopAdmin_Promote: String { return self._s[2433]! } + public var Passport_Address_TypeResidentialAddress: String { return self._s[2427]! } + public var Appearance_ThemeNightBlue: String { return self._s[2428]! } + public var Notification_ChannelInviterSelf: String { return self._s[2429]! } + public var InviteLink_Create_TimeLimitExpiryDateNever: String { return self._s[2431]! } + public var Watch_UserInfo_Service: String { return self._s[2432]! } + public var ChatList_Context_Back: String { return self._s[2433]! } + public var Passport_Email_Title: String { return self._s[2434]! } + public var Stats_GroupTopAdmin_Promote: String { return self._s[2435]! } public func PUSH_PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2434]!, self._r[2434]!, [_1]) + return formatWithArgumentRanges(self._s[2436]!, self._r[2436]!, [_1]) } - public var Conversation_UnsupportedMedia: String { return self._s[2435]! } - public var Passport_Address_OneOfTypePassportRegistration: String { return self._s[2436]! } - public var Privacy_TopPeersHelp: String { return self._s[2438]! } - public var Privacy_Forwards_AlwaysLink: String { return self._s[2439]! } - public var Notifications_Badge_CountUnreadMessages_InfoOn: String { return self._s[2440]! } - public var Permissions_NotificationsTitle_v0: String { return self._s[2441]! } + public var Conversation_UnsupportedMedia: String { return self._s[2437]! } + public var Passport_Address_OneOfTypePassportRegistration: String { return self._s[2438]! } + public var Privacy_TopPeersHelp: String { return self._s[2440]! } + public var Privacy_Forwards_AlwaysLink: String { return self._s[2441]! } + public var Notifications_Badge_CountUnreadMessages_InfoOn: String { return self._s[2442]! } + public var Permissions_NotificationsTitle_v0: String { return self._s[2443]! } public func Location_ProximityNotification_AlreadyClose(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2442]!, self._r[2442]!, [_0]) + return formatWithArgumentRanges(self._s[2444]!, self._r[2444]!, [_0]) } - public var Notification_PassportValueProofOfAddress: String { return self._s[2443]! } - public var Map_Map: String { return self._s[2444]! } - public var WallpaperSearch_ColorBlue: String { return self._s[2445]! } - public var Privacy_Calls_CustomShareHelp: String { return self._s[2446]! } - public var PhotoEditor_BlurToolRadial: String { return self._s[2447]! } - public var ChatList_Search_FilterMusic: String { return self._s[2448]! } - public var SettingsSearch_Synonyms_Data_AutoplayGifs: String { return self._s[2449]! } - public var Privacy_PaymentsClear_ShippingInfo: String { return self._s[2450]! } - public var Settings_LogoutConfirmationTitle: String { return self._s[2452]! } + public var Notification_PassportValueProofOfAddress: String { return self._s[2445]! } + public var Map_Map: String { return self._s[2446]! } + public var WallpaperSearch_ColorBlue: String { return self._s[2447]! } + public var Privacy_Calls_CustomShareHelp: String { return self._s[2448]! } + public var PhotoEditor_BlurToolRadial: String { return self._s[2449]! } + public var ChatList_Search_FilterMusic: String { return self._s[2450]! } + public var SettingsSearch_Synonyms_Data_AutoplayGifs: String { return self._s[2451]! } + public var Privacy_PaymentsClear_ShippingInfo: String { return self._s[2452]! } + public var Settings_LogoutConfirmationTitle: String { return self._s[2454]! } public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2453]!, self._r[2453]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2455]!, self._r[2455]!, [_1, _2]) } public func Notification_ChangedGroupPhoto(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2454]!, self._r[2454]!, [_0]) + return formatWithArgumentRanges(self._s[2456]!, self._r[2456]!, [_0]) } - public var Channel_Username_RevokeExistingUsernamesInfo: String { return self._s[2455]! } - public var Group_Username_CreatePublicLinkHelp: String { return self._s[2456]! } - public var GroupInfo_Location: String { return self._s[2459]! } - public var Passport_Language_ka: String { return self._s[2460]! } + public var Channel_Username_RevokeExistingUsernamesInfo: String { return self._s[2457]! } + public var Group_Username_CreatePublicLinkHelp: String { return self._s[2458]! } + public var GroupInfo_Location: String { return self._s[2461]! } + public var Passport_Language_ka: String { return self._s[2462]! } public func TwoStepAuth_SetupPendingEmail(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2461]!, self._r[2461]!, [_0]) + return formatWithArgumentRanges(self._s[2463]!, self._r[2463]!, [_0]) } - public var Conversation_ContextMenuOpenChannelProfile: String { return self._s[2462]! } - public var ScheduledMessages_ClearAllConfirmation: String { return self._s[2465]! } - public var DialogList_SearchSectionRecent: String { return self._s[2466]! } - public var Passport_Address_OneOfTypeTemporaryRegistration: String { return self._s[2467]! } - public var Conversation_Timer_Send: String { return self._s[2468]! } - public var ChatState_Updating: String { return self._s[2470]! } - public var ChannelMembers_WhoCanAddMembers: String { return self._s[2471]! } - public var ChannelInfo_DeleteGroup: String { return self._s[2472]! } - public var TwoStepAuth_RecoveryFailed: String { return self._s[2473]! } - public var Channel_OwnershipTransfer_EnterPassword: String { return self._s[2474]! } - public var InviteLink_Create_TimeLimitExpiryTime: String { return self._s[2475]! } - public var ChatList_Search_NoResults: String { return self._s[2476]! } - public var ChatListFolderSettings_AddRecommended: String { return self._s[2478]! } - public var ChangePhoneNumberCode_Called: String { return self._s[2479]! } - public var PeerInfo_GroupAboutItem: String { return self._s[2480]! } + public var Conversation_ContextMenuOpenChannelProfile: String { return self._s[2464]! } + public var ScheduledMessages_ClearAllConfirmation: String { return self._s[2467]! } + public var DialogList_SearchSectionRecent: String { return self._s[2468]! } + public var Passport_Address_OneOfTypeTemporaryRegistration: String { return self._s[2469]! } + public var Conversation_Timer_Send: String { return self._s[2470]! } + public var ChatState_Updating: String { return self._s[2472]! } + public var ChannelMembers_WhoCanAddMembers: String { return self._s[2473]! } + public var ChannelInfo_DeleteGroup: String { return self._s[2474]! } + public var TwoStepAuth_RecoveryFailed: String { return self._s[2475]! } + public var Channel_OwnershipTransfer_EnterPassword: String { return self._s[2476]! } + public var InviteLink_Create_TimeLimitExpiryTime: String { return self._s[2477]! } + public var ChatList_Search_NoResults: String { return self._s[2478]! } + public var ChatListFolderSettings_AddRecommended: String { return self._s[2480]! } + public var ChangePhoneNumberCode_Called: String { return self._s[2481]! } + public var PeerInfo_GroupAboutItem: String { return self._s[2482]! } public func LiveLocationUpdated_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2482]!, self._r[2482]!, [_0]) + return formatWithArgumentRanges(self._s[2484]!, self._r[2484]!, [_0]) } - public var PrivacySettings_AuthSessions: String { return self._s[2483]! } - public var Passport_Address_Postcode: String { return self._s[2484]! } - public var VoiceOver_Chat_YourVideoMessage: String { return self._s[2485]! } - public var Passport_Address_Street2Placeholder: String { return self._s[2486]! } - public var Group_Location_Title: String { return self._s[2487]! } - public var SettingsSearch_Synonyms_Data_AutoDownloadReset: String { return self._s[2488]! } - public var PeopleNearby_UsersEmpty: String { return self._s[2489]! } - public var SettingsSearch_Synonyms_Data_Title: String { return self._s[2491]! } + public var PrivacySettings_AuthSessions: String { return self._s[2485]! } + public var Passport_Address_Postcode: String { return self._s[2486]! } + public var VoiceOver_Chat_YourVideoMessage: String { return self._s[2487]! } + public var Passport_Address_Street2Placeholder: String { return self._s[2488]! } + public var Group_Location_Title: String { return self._s[2489]! } + public var SettingsSearch_Synonyms_Data_AutoDownloadReset: String { return self._s[2490]! } + public var PeopleNearby_UsersEmpty: String { return self._s[2491]! } + public var SettingsSearch_Synonyms_Data_Title: String { return self._s[2493]! } public func Checkout_PasswordEntry_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2493]!, self._r[2493]!, [_0]) + return formatWithArgumentRanges(self._s[2495]!, self._r[2495]!, [_0]) } - public var Proxy_TooltipUnavailable: String { return self._s[2494]! } - public var Map_Search: String { return self._s[2495]! } - public var AutoDownloadSettings_TypeContacts: String { return self._s[2496]! } - public var Conversation_SearchByName_Prefix: String { return self._s[2497]! } + public var Proxy_TooltipUnavailable: String { return self._s[2496]! } + public var Map_Search: String { return self._s[2497]! } + public var AutoDownloadSettings_TypeContacts: String { return self._s[2498]! } + public var Conversation_SearchByName_Prefix: String { return self._s[2499]! } public func Channel_AdminLog_MessageToggleSignaturesOff(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2498]!, self._r[2498]!, [_0]) + return formatWithArgumentRanges(self._s[2500]!, self._r[2500]!, [_0]) } - public var TwoStepAuth_EmailAddSuccess: String { return self._s[2499]! } - public var ProfilePhoto_MainPhoto: String { return self._s[2500]! } - public var SettingsSearch_Synonyms_Notifications_InAppNotificationsSound: String { return self._s[2501]! } - public var SharedMedia_EmptyMusicText: String { return self._s[2502]! } - public var ChatSettings_AutoDownloadPhotos: String { return self._s[2503]! } - public var NetworkUsageSettings_BytesReceived: String { return self._s[2504]! } - public var Channel_AdminLog_EmptyText: String { return self._s[2505]! } - public var Channel_BanUser_PermissionSendMessages: String { return self._s[2506]! } - public var Undo_ChatDeletedForBothSides: String { return self._s[2507]! } - public var Notifications_GroupNotifications: String { return self._s[2508]! } - public var AccessDenied_SaveMedia: String { return self._s[2509]! } - public var InviteLink_Create_Revoke: String { return self._s[2510]! } - public var GroupInfo_LabelOwner: String { return self._s[2511]! } - public var Passport_Language_id: String { return self._s[2512]! } - public var ChatSettings_AutoDownloadTitle: String { return self._s[2513]! } - public var Conversation_UnpinMessageAlert: String { return self._s[2514]! } + public var TwoStepAuth_EmailAddSuccess: String { return self._s[2501]! } + public var ProfilePhoto_MainPhoto: String { return self._s[2502]! } + public var SettingsSearch_Synonyms_Notifications_InAppNotificationsSound: String { return self._s[2503]! } + public var SharedMedia_EmptyMusicText: String { return self._s[2504]! } + public var ChatSettings_AutoDownloadPhotos: String { return self._s[2505]! } + public var NetworkUsageSettings_BytesReceived: String { return self._s[2506]! } + public var Channel_AdminLog_EmptyText: String { return self._s[2507]! } + public var Channel_BanUser_PermissionSendMessages: String { return self._s[2508]! } + public var Undo_ChatDeletedForBothSides: String { return self._s[2509]! } + public var Notifications_GroupNotifications: String { return self._s[2510]! } + public var AccessDenied_SaveMedia: String { return self._s[2511]! } + public var InviteLink_Create_Revoke: String { return self._s[2512]! } + public var GroupInfo_LabelOwner: String { return self._s[2513]! } + public var Passport_Language_id: String { return self._s[2514]! } + public var ChatSettings_AutoDownloadTitle: String { return self._s[2515]! } + public var Conversation_UnpinMessageAlert: String { return self._s[2516]! } public func LiveLocationUpdated_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2515]!, self._r[2515]!, [_0]) + return formatWithArgumentRanges(self._s[2517]!, self._r[2517]!, [_0]) } public func Call_RemoteVideoPaused(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2516]!, self._r[2516]!, [_0]) - } - public var TwoFactorSetup_Done_Text: String { return self._s[2517]! } - public func LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2518]!, self._r[2518]!, [_0]) } - public var NetworkUsageSettings_BytesSent: String { return self._s[2519]! } - public var OwnershipTransfer_Transfer: String { return self._s[2520]! } + public var TwoFactorSetup_Done_Text: String { return self._s[2519]! } + public func LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2520]!, self._r[2520]!, [_0]) + } + public var NetworkUsageSettings_BytesSent: String { return self._s[2521]! } + public var OwnershipTransfer_Transfer: String { return self._s[2522]! } public func Notification_Exceptions_Sound(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2521]!, self._r[2521]!, [_0]) + return formatWithArgumentRanges(self._s[2523]!, self._r[2523]!, [_0]) } - public var Passport_Language_pt: String { return self._s[2522]! } - public var PrivacySettings_WebSessions: String { return self._s[2523]! } - public var PrivacyPolicy_DeclineDeleteNow: String { return self._s[2525]! } - public var TwoFactorSetup_Hint_Title: String { return self._s[2526]! } + public var Passport_Language_pt: String { return self._s[2524]! } + public var PrivacySettings_WebSessions: String { return self._s[2525]! } + public var PrivacyPolicy_DeclineDeleteNow: String { return self._s[2527]! } + public var TwoFactorSetup_Hint_Title: String { return self._s[2528]! } public func Notification_Joined(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2527]!, self._r[2527]!, [_0]) + return formatWithArgumentRanges(self._s[2529]!, self._r[2529]!, [_0]) } - public var Group_Username_RemoveExistingUsernamesInfo: String { return self._s[2528]! } - public var PrivacyLastSeenSettings_CustomShareSettings_Delete: String { return self._s[2529]! } - public var AutoNightTheme_Scheduled: String { return self._s[2530]! } - public var CreatePoll_ExplanationHeader: String { return self._s[2531]! } - public var Calls_TabTitle: String { return self._s[2532]! } - public var VoiceChat_RecordingInProgress: String { return self._s[2533]! } - public var ChatList_UndoArchiveHiddenText: String { return self._s[2534]! } - public var Notification_VideoCallCanceled: String { return self._s[2535]! } - public var Login_CodeSentInternal: String { return self._s[2536]! } - public var SettingsSearch_Synonyms_Proxy_AddProxy: String { return self._s[2537]! } - public var Call_RecordingDisabledMessage: String { return self._s[2539]! } + public var Group_Username_RemoveExistingUsernamesInfo: String { return self._s[2530]! } + public var PrivacyLastSeenSettings_CustomShareSettings_Delete: String { return self._s[2531]! } + public var AutoNightTheme_Scheduled: String { return self._s[2532]! } + public var CreatePoll_ExplanationHeader: String { return self._s[2533]! } + public var Calls_TabTitle: String { return self._s[2534]! } + public var VoiceChat_RecordingInProgress: String { return self._s[2535]! } + public var ChatList_UndoArchiveHiddenText: String { return self._s[2536]! } + public var Notification_VideoCallCanceled: String { return self._s[2537]! } + public var Login_CodeSentInternal: String { return self._s[2538]! } + public var SettingsSearch_Synonyms_Proxy_AddProxy: String { return self._s[2539]! } + public var Call_RecordingDisabledMessage: String { return self._s[2541]! } public func VoiceChat_RemovedPeerText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2540]!, self._r[2540]!, [_0]) + return formatWithArgumentRanges(self._s[2542]!, self._r[2542]!, [_0]) } - public var AutoDownloadSettings_TypeChannels: String { return self._s[2542]! } - public var Channel_Info_Stickers: String { return self._s[2543]! } - public var Passport_DeleteAddressConfirmation: String { return self._s[2544]! } + public var AutoDownloadSettings_TypeChannels: String { return self._s[2544]! } + public var Channel_Info_Stickers: String { return self._s[2545]! } + public var Passport_DeleteAddressConfirmation: String { return self._s[2546]! } public func Conversation_PeerNearbyDistance(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2545]!, self._r[2545]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2547]!, self._r[2547]!, [_1, _2]) } - public var ChannelMembers_WhoCanAddMembers_Admins: String { return self._s[2546]! } + public var ChannelMembers_WhoCanAddMembers_Admins: String { return self._s[2548]! } public func Call_StatusOngoing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2547]!, self._r[2547]!, [_0]) + return formatWithArgumentRanges(self._s[2549]!, self._r[2549]!, [_0]) } - public var Passport_DiscardMessageTitle: String { return self._s[2548]! } - public var Call_VoiceOver_VideoCallIncoming: String { return self._s[2549]! } - public var Localization_LanguageOther: String { return self._s[2550]! } - public var Conversation_EncryptionCanceled: String { return self._s[2551]! } - public var ChatSettings_AutomaticPhotoDownload: String { return self._s[2552]! } + public var Passport_DiscardMessageTitle: String { return self._s[2550]! } + public var Call_VoiceOver_VideoCallIncoming: String { return self._s[2551]! } + public var Localization_LanguageOther: String { return self._s[2552]! } + public var Conversation_EncryptionCanceled: String { return self._s[2553]! } + public var ChatSettings_AutomaticPhotoDownload: String { return self._s[2554]! } public func Notification_SecretChatMessageScreenshot(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2554]!, self._r[2554]!, [_0]) + return formatWithArgumentRanges(self._s[2556]!, self._r[2556]!, [_0]) } - public var Target_InviteToGroupErrorAlreadyInvited: String { return self._s[2556]! } - public var SocksProxySetup_SavedProxies: String { return self._s[2557]! } - public var InviteLink_Create_UsersLimitNumberOfUsers: String { return self._s[2558]! } + public var Target_InviteToGroupErrorAlreadyInvited: String { return self._s[2558]! } + public var SocksProxySetup_SavedProxies: String { return self._s[2559]! } + public var InviteLink_Create_UsersLimitNumberOfUsers: String { return self._s[2560]! } public func ApplyLanguage_ChangeLanguageAlreadyActive(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2559]!, self._r[2559]!, [_1]) + return formatWithArgumentRanges(self._s[2561]!, self._r[2561]!, [_1]) } - public var Conversation_ScamWarning: String { return self._s[2561]! } - public var Channel_AdminLog_InfoPanelAlertTitle: String { return self._s[2562]! } - public var LocalGroup_Title: String { return self._s[2563]! } - public var SettingsSearch_Synonyms_Notifications_MessageNotificationsAlert: String { return self._s[2565]! } - public var SettingsSearch_Synonyms_Privacy_PasscodeAndFaceId: String { return self._s[2566]! } - public var Login_PhoneFloodError: String { return self._s[2567]! } - public var Conversation_PinMessageAlert_PinAndNotifyMembers: String { return self._s[2568]! } - public var Username_InvalidTaken: String { return self._s[2570]! } - public var SocksProxySetup_AddProxy: String { return self._s[2572]! } - public var PrivacyLastSeenSettings_WhoCanSeeMyTimestamp: String { return self._s[2573]! } - public var MediaPicker_UngroupDescription: String { return self._s[2574]! } - public var Login_CodeExpired: String { return self._s[2575]! } - public var Localization_ChooseLanguage: String { return self._s[2576]! } - public var Checkout_NewCard_PostcodePlaceholder: String { return self._s[2577]! } + public var Conversation_ScamWarning: String { return self._s[2563]! } + public var Channel_AdminLog_InfoPanelAlertTitle: String { return self._s[2564]! } + public var LocalGroup_Title: String { return self._s[2565]! } + public var SettingsSearch_Synonyms_Notifications_MessageNotificationsAlert: String { return self._s[2567]! } + public var SettingsSearch_Synonyms_Privacy_PasscodeAndFaceId: String { return self._s[2568]! } + public var Login_PhoneFloodError: String { return self._s[2569]! } + public var Conversation_PinMessageAlert_PinAndNotifyMembers: String { return self._s[2570]! } + public var Username_InvalidTaken: String { return self._s[2572]! } + public var SocksProxySetup_AddProxy: String { return self._s[2574]! } + public var PrivacyLastSeenSettings_WhoCanSeeMyTimestamp: String { return self._s[2575]! } + public var MediaPicker_UngroupDescription: String { return self._s[2576]! } + public var Login_CodeExpired: String { return self._s[2577]! } + public var Localization_ChooseLanguage: String { return self._s[2578]! } + public var Checkout_NewCard_PostcodePlaceholder: String { return self._s[2579]! } public func ChangePhone_ErrorOccupied(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2578]!, self._r[2578]!, [_0]) + return formatWithArgumentRanges(self._s[2580]!, self._r[2580]!, [_0]) } public func Channel_DiscussionGroup_HeaderSet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2579]!, self._r[2579]!, [_0]) + return formatWithArgumentRanges(self._s[2581]!, self._r[2581]!, [_0]) } - public var ReportPeer_ReasonOther_Title: String { return self._s[2581]! } - public var Conversation_ScheduleMessage_Title: String { return self._s[2582]! } + public var ReportPeer_ReasonOther_Title: String { return self._s[2583]! } + public var Conversation_ScheduleMessage_Title: String { return self._s[2584]! } public func VoiceChat_UserInvited(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2583]!, self._r[2583]!, [_0]) + return formatWithArgumentRanges(self._s[2585]!, self._r[2585]!, [_0]) } - public var PeerInfo_ButtonDiscuss: String { return self._s[2584]! } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedPublicGroups: String { return self._s[2585]! } - public var Call_StatusNoAnswer: String { return self._s[2586]! } - public var ScheduledMessages_DeleteMany: String { return self._s[2588]! } - public var Channel_DiscussionGroupInfo: String { return self._s[2589]! } - public var Conversation_UnarchiveDone: String { return self._s[2590]! } - public var LogoutOptions_AddAccountText: String { return self._s[2591]! } - public var Message_PinnedContactMessage: String { return self._s[2592]! } + public var PeerInfo_ButtonDiscuss: String { return self._s[2586]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedPublicGroups: String { return self._s[2587]! } + public var Call_StatusNoAnswer: String { return self._s[2588]! } + public var ScheduledMessages_DeleteMany: String { return self._s[2590]! } + public var Channel_DiscussionGroupInfo: String { return self._s[2591]! } + public var Conversation_UnarchiveDone: String { return self._s[2592]! } + public var LogoutOptions_AddAccountText: String { return self._s[2593]! } + public var Message_PinnedContactMessage: String { return self._s[2594]! } public func FileSize_GB(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2594]!, self._r[2594]!, [_0]) + return formatWithArgumentRanges(self._s[2596]!, self._r[2596]!, [_0]) } - public var Stats_GroupLanguagesTitle: String { return self._s[2595]! } - public var Passport_FieldAddressHelp: String { return self._s[2596]! } + public var Stats_GroupLanguagesTitle: String { return self._s[2597]! } + public var Passport_FieldAddressHelp: String { return self._s[2598]! } public func Passport_FieldOneOf_Or(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2597]!, self._r[2597]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2599]!, self._r[2599]!, [_1, _2]) } - public var ChatSettings_OpenLinksIn: String { return self._s[2599]! } - public var TwoFactorSetup_Hint_SkipAction: String { return self._s[2600]! } - public var Message_Photo: String { return self._s[2601]! } - public var Media_LimitedAccessManage: String { return self._s[2603]! } - public var MediaPicker_AddCaption: String { return self._s[2604]! } - public var LogoutOptions_Title: String { return self._s[2605]! } + public var ChatSettings_OpenLinksIn: String { return self._s[2601]! } + public var TwoFactorSetup_Hint_SkipAction: String { return self._s[2602]! } + public var Message_Photo: String { return self._s[2603]! } + public var Media_LimitedAccessManage: String { return self._s[2605]! } + public var MediaPicker_AddCaption: String { return self._s[2606]! } + public var LogoutOptions_Title: String { return self._s[2607]! } public func PUSH_PINNED_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2606]!, self._r[2606]!, [_1]) + return formatWithArgumentRanges(self._s[2608]!, self._r[2608]!, [_1]) } - public var Conversation_StatusKickedFromGroup: String { return self._s[2607]! } - public var Channel_AdminLogFilter_AdminsTitle: String { return self._s[2608]! } - public var ChatList_DeleteSavedMessagesConfirmationTitle: String { return self._s[2609]! } - public var Channel_AdminLogFilter_Title: String { return self._s[2610]! } - public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[2611]! } - public var Compose_GroupTokenListPlaceholder: String { return self._s[2612]! } - public var Notifications_MessageNotificationsExceptions: String { return self._s[2613]! } - public var ChannelIntro_Title: String { return self._s[2614]! } - public var Stats_Message_Views: String { return self._s[2615]! } - public var Stickers_Install: String { return self._s[2616]! } + public var Conversation_StatusKickedFromGroup: String { return self._s[2609]! } + public var Channel_AdminLogFilter_AdminsTitle: String { return self._s[2610]! } + public var ChatList_DeleteSavedMessagesConfirmationTitle: String { return self._s[2611]! } + public var Channel_AdminLogFilter_Title: String { return self._s[2612]! } + public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[2613]! } + public var Compose_GroupTokenListPlaceholder: String { return self._s[2614]! } + public var Notifications_MessageNotificationsExceptions: String { return self._s[2615]! } + public var ChannelIntro_Title: String { return self._s[2616]! } + public var Stats_Message_Views: String { return self._s[2617]! } + public var Stickers_Install: String { return self._s[2618]! } public func VoiceOver_Chat_FileFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2617]!, self._r[2617]!, [_0]) + return formatWithArgumentRanges(self._s[2619]!, self._r[2619]!, [_0]) } - public var EditTheme_Create_Preview_IncomingReplyText: String { return self._s[2618]! } - public var Conversation_SwipeToReplyHintTitle: String { return self._s[2620]! } - public var Settings_Username: String { return self._s[2623]! } - public var FastTwoStepSetup_Title: String { return self._s[2624]! } - public var Notifications_Badge_CountUnreadMessages_InfoOff: String { return self._s[2625]! } - public var SettingsSearch_Synonyms_Privacy_Title: String { return self._s[2626]! } - public var Passport_Identity_IssueDatePlaceholder: String { return self._s[2627]! } - public var CallFeedback_ReasonEcho: String { return self._s[2628]! } + public var EditTheme_Create_Preview_IncomingReplyText: String { return self._s[2620]! } + public var Conversation_SwipeToReplyHintTitle: String { return self._s[2622]! } + public var Settings_Username: String { return self._s[2625]! } + public var FastTwoStepSetup_Title: String { return self._s[2626]! } + public var Notifications_Badge_CountUnreadMessages_InfoOff: String { return self._s[2627]! } + public var SettingsSearch_Synonyms_Privacy_Title: String { return self._s[2628]! } + public var Passport_Identity_IssueDatePlaceholder: String { return self._s[2629]! } + public var CallFeedback_ReasonEcho: String { return self._s[2630]! } public func Time_MonthOfYear_m1(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2629]!, self._r[2629]!, [_0]) + return formatWithArgumentRanges(self._s[2631]!, self._r[2631]!, [_0]) } - public var Conversation_OpenBotLinkTitle: String { return self._s[2630]! } - public var SocksProxySetup_Title: String { return self._s[2631]! } - public var CallFeedback_Success: String { return self._s[2632]! } - public var WallpaperPreview_SwipeTopText: String { return self._s[2634]! } - public var InstantPage_AutoNightTheme: String { return self._s[2636]! } - public var Watch_Conversation_Reply: String { return self._s[2637]! } - public var VoiceChat_Share: String { return self._s[2639]! } - public var Chat_PanelUnpinAllMessages: String { return self._s[2640]! } - public var WallpaperPreview_Pattern: String { return self._s[2641]! } - public var CheckoutInfo_ReceiverInfoEmail: String { return self._s[2642]! } + public var Conversation_OpenBotLinkTitle: String { return self._s[2632]! } + public var SocksProxySetup_Title: String { return self._s[2633]! } + public var CallFeedback_Success: String { return self._s[2634]! } + public var WallpaperPreview_SwipeTopText: String { return self._s[2636]! } + public var InstantPage_AutoNightTheme: String { return self._s[2638]! } + public var Watch_Conversation_Reply: String { return self._s[2639]! } + public var VoiceChat_Share: String { return self._s[2641]! } + public var Chat_PanelUnpinAllMessages: String { return self._s[2642]! } + public var WallpaperPreview_Pattern: String { return self._s[2643]! } + public var CheckoutInfo_ReceiverInfoEmail: String { return self._s[2644]! } public func Conversation_DeleteMessagesFor(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2643]!, self._r[2643]!, [_0]) + return formatWithArgumentRanges(self._s[2645]!, self._r[2645]!, [_0]) } - public var AutoDownloadSettings_TypeGroupChats: String { return self._s[2644]! } - public var DialogList_SavedMessagesTooltip: String { return self._s[2646]! } - public var Update_Title: String { return self._s[2647]! } - public var Conversation_ShareMyPhoneNumber: String { return self._s[2648]! } - public var WallpaperPreview_CropTopText: String { return self._s[2650]! } - public var Channel_EditMessageErrorGeneric: String { return self._s[2651]! } - public var AccessDenied_LocationAlwaysDenied: String { return self._s[2652]! } - public var ChatListFolder_DiscardCancel: String { return self._s[2653]! } - public var Message_PinnedPhotoMessage: String { return self._s[2654]! } - public var Appearance_ThemeDayClassic: String { return self._s[2655]! } - public var SocksProxySetup_ProxySocks5: String { return self._s[2656]! } - public var AccessDenied_Wallpapers: String { return self._s[2662]! } + public var AutoDownloadSettings_TypeGroupChats: String { return self._s[2646]! } + public var DialogList_SavedMessagesTooltip: String { return self._s[2648]! } + public var Update_Title: String { return self._s[2649]! } + public var Conversation_ShareMyPhoneNumber: String { return self._s[2650]! } + public var WallpaperPreview_CropTopText: String { return self._s[2652]! } + public var Channel_EditMessageErrorGeneric: String { return self._s[2653]! } + public var AccessDenied_LocationAlwaysDenied: String { return self._s[2654]! } + public var ChatListFolder_DiscardCancel: String { return self._s[2655]! } + public var Message_PinnedPhotoMessage: String { return self._s[2656]! } + public var Appearance_ThemeDayClassic: String { return self._s[2657]! } + public var SocksProxySetup_ProxySocks5: String { return self._s[2658]! } + public var AccessDenied_Wallpapers: String { return self._s[2664]! } public func Channel_AdminLog_MessageChangedGroupAbout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2663]!, self._r[2663]!, [_0]) + return formatWithArgumentRanges(self._s[2665]!, self._r[2665]!, [_0]) } - public var Weekday_Sunday: String { return self._s[2664]! } - public var SettingsSearch_Synonyms_Privacy_GroupsAndChannels: String { return self._s[2666]! } - public var PeopleNearby_MakeVisibleDescription: String { return self._s[2667]! } - public var AccessDenied_LocationDisabled: String { return self._s[2668]! } - public var Tour_Text3: String { return self._s[2669]! } - public var AuthSessions_AddDevice_ScanTitle: String { return self._s[2670]! } + public var Weekday_Sunday: String { return self._s[2666]! } + public var SettingsSearch_Synonyms_Privacy_GroupsAndChannels: String { return self._s[2668]! } + public var PeopleNearby_MakeVisibleDescription: String { return self._s[2669]! } + public var AccessDenied_LocationDisabled: String { return self._s[2670]! } + public var Tour_Text3: String { return self._s[2671]! } + public var AuthSessions_AddDevice_ScanTitle: String { return self._s[2672]! } public func Time_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2671]!, self._r[2671]!, [_0]) + return formatWithArgumentRanges(self._s[2673]!, self._r[2673]!, [_0]) } - public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[2672]! } - public var Conversation_ClearCache: String { return self._s[2673]! } - public var StickerPacksSettings_ArchivedMasks_Info: String { return self._s[2674]! } - public var ChatList_Tabs_AllChats: String { return self._s[2675]! } - public var DialogList_RecentTitlePeople: String { return self._s[2676]! } - public var Stickers_AddToFavorites: String { return self._s[2677]! } - public var ChatList_Context_RemoveFromFolder: String { return self._s[2678]! } - public var Settings_RemoveVideo: String { return self._s[2679]! } - public var PhotoEditor_CropAspectRatioSquare: String { return self._s[2680]! } - public var ConversationProfile_LeaveDeleteAndExit: String { return self._s[2681]! } - public var VoiceOver_Chat_YourFile: String { return self._s[2682]! } - public var SettingsSearch_Synonyms_Privacy_Forwards: String { return self._s[2684]! } - public var Group_OwnershipTransfer_ErrorPrivacyRestricted: String { return self._s[2685]! } - public var Channel_AdminLog_AddMembers: String { return self._s[2686]! } - public var Map_SendThisLocation: String { return self._s[2688]! } - public var TwoStepAuth_EmailSkipAlert: String { return self._s[2690]! } - public var IntentsSettings_SuggestedChatsPrivateChats: String { return self._s[2691]! } - public var CloudStorage_Title: String { return self._s[2692]! } - public var TwoFactorSetup_Password_Action: String { return self._s[2693]! } - public var TwoStepAuth_ConfirmationText: String { return self._s[2694]! } - public var Passport_Address_EditTemporaryRegistration: String { return self._s[2696]! } - public var Undo_LeftGroup: String { return self._s[2697]! } - public var Conversation_StopLiveLocation: String { return self._s[2698]! } - public var NotificationSettings_ShowNotificationsFromAccountsSection: String { return self._s[2699]! } - public var Message_PinnedInvoice: String { return self._s[2700]! } - public var ApplyLanguage_LanguageNotSupportedError: String { return self._s[2701]! } + public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[2674]! } + public var Conversation_ClearCache: String { return self._s[2675]! } + public var StickerPacksSettings_ArchivedMasks_Info: String { return self._s[2676]! } + public var ChatList_Tabs_AllChats: String { return self._s[2677]! } + public var DialogList_RecentTitlePeople: String { return self._s[2678]! } + public var Stickers_AddToFavorites: String { return self._s[2679]! } + public var ChatList_Context_RemoveFromFolder: String { return self._s[2680]! } + public var Settings_RemoveVideo: String { return self._s[2681]! } + public var PhotoEditor_CropAspectRatioSquare: String { return self._s[2682]! } + public var ConversationProfile_LeaveDeleteAndExit: String { return self._s[2683]! } + public var VoiceOver_Chat_YourFile: String { return self._s[2684]! } + public var SettingsSearch_Synonyms_Privacy_Forwards: String { return self._s[2686]! } + public var Group_OwnershipTransfer_ErrorPrivacyRestricted: String { return self._s[2687]! } + public var Channel_AdminLog_AddMembers: String { return self._s[2688]! } + public var Map_SendThisLocation: String { return self._s[2690]! } + public var TwoStepAuth_EmailSkipAlert: String { return self._s[2692]! } + public var IntentsSettings_SuggestedChatsPrivateChats: String { return self._s[2693]! } + public var CloudStorage_Title: String { return self._s[2694]! } + public var TwoFactorSetup_Password_Action: String { return self._s[2695]! } + public var TwoStepAuth_ConfirmationText: String { return self._s[2696]! } + public var Passport_Address_EditTemporaryRegistration: String { return self._s[2698]! } + public var Undo_LeftGroup: String { return self._s[2699]! } + public var Conversation_StopLiveLocation: String { return self._s[2700]! } + public var NotificationSettings_ShowNotificationsFromAccountsSection: String { return self._s[2701]! } + public var Message_PinnedInvoice: String { return self._s[2702]! } + public var ApplyLanguage_LanguageNotSupportedError: String { return self._s[2703]! } public func PUSH_CHAT_MESSAGE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2702]!, self._r[2702]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2704]!, self._r[2704]!, [_1, _2]) } public func Notification_PinnedAudioMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2703]!, self._r[2703]!, [_0]) + return formatWithArgumentRanges(self._s[2705]!, self._r[2705]!, [_0]) } - public var Weekday_Tuesday: String { return self._s[2704]! } - public var ChangePhoneNumberCode_Code: String { return self._s[2705]! } - public var VoiceOver_Chat_YourMessage: String { return self._s[2706]! } - public var Calls_CallTabDescription: String { return self._s[2707]! } - public var SocksProxySetup_UseProxy: String { return self._s[2709]! } - public var SettingsSearch_Synonyms_Stickers_Title: String { return self._s[2710]! } - public var PasscodeSettings_AlphanumericCode: String { return self._s[2711]! } - public var VoiceOver_Chat_YourVideo: String { return self._s[2712]! } - public var ChannelMembers_WhoCanAddMembersAdminsHelp: String { return self._s[2714]! } - public var SettingsSearch_Synonyms_Privacy_DeleteAccountIfAwayFor: String { return self._s[2715]! } - public var Exceptions_AddToExceptions: String { return self._s[2716]! } - public var UserInfo_Title: String { return self._s[2717]! } - public var Passport_DeleteDocumentConfirmation: String { return self._s[2719]! } - public var ChatList_Unmute: String { return self._s[2721]! } - public var SettingsSearch_Synonyms_Privacy_Data_ContactsSync: String { return self._s[2722]! } - public var Stats_GroupTopPostersTitle: String { return self._s[2723]! } - public var Username_CheckingUsername: String { return self._s[2724]! } - public var WallpaperColors_SetCustomColor: String { return self._s[2725]! } - public var Location_ProximityAlertSetTitle: String { return self._s[2729]! } - public var AuthSessions_AddedDeviceTerminate: String { return self._s[2730]! } - public var Privacy_ProfilePhoto_CustomHelp: String { return self._s[2731]! } - public var Settings_ChangePhoneNumber: String { return self._s[2732]! } - public var PeerInfo_PaneLinks: String { return self._s[2733]! } - public var Appearance_ThemePreview_ChatList_1_Text: String { return self._s[2736]! } - public var Channel_EditAdmin_PermissionInviteSubscribers: String { return self._s[2738]! } + public var Weekday_Tuesday: String { return self._s[2706]! } + public var ChangePhoneNumberCode_Code: String { return self._s[2707]! } + public var VoiceOver_Chat_YourMessage: String { return self._s[2708]! } + public var Calls_CallTabDescription: String { return self._s[2709]! } + public var SocksProxySetup_UseProxy: String { return self._s[2711]! } + public var SettingsSearch_Synonyms_Stickers_Title: String { return self._s[2712]! } + public var PasscodeSettings_AlphanumericCode: String { return self._s[2713]! } + public var VoiceOver_Chat_YourVideo: String { return self._s[2714]! } + public var ChannelMembers_WhoCanAddMembersAdminsHelp: String { return self._s[2716]! } + public var SettingsSearch_Synonyms_Privacy_DeleteAccountIfAwayFor: String { return self._s[2717]! } + public var Exceptions_AddToExceptions: String { return self._s[2718]! } + public var UserInfo_Title: String { return self._s[2719]! } + public var Passport_DeleteDocumentConfirmation: String { return self._s[2721]! } + public var ChatList_Unmute: String { return self._s[2723]! } + public var SettingsSearch_Synonyms_Privacy_Data_ContactsSync: String { return self._s[2724]! } + public var Stats_GroupTopPostersTitle: String { return self._s[2725]! } + public var Username_CheckingUsername: String { return self._s[2726]! } + public var WallpaperColors_SetCustomColor: String { return self._s[2727]! } + public var Location_ProximityAlertSetTitle: String { return self._s[2731]! } + public var AuthSessions_AddedDeviceTerminate: String { return self._s[2732]! } + public var Privacy_ProfilePhoto_CustomHelp: String { return self._s[2733]! } + public var Settings_ChangePhoneNumber: String { return self._s[2734]! } + public var PeerInfo_PaneLinks: String { return self._s[2735]! } + public var Appearance_ThemePreview_ChatList_1_Text: String { return self._s[2738]! } + public var Channel_EditAdmin_PermissionInviteSubscribers: String { return self._s[2740]! } public func PUSH_CHAT_VOICECHAT_INVITE_YOU(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2739]!, self._r[2739]!, [_1]) + return formatWithArgumentRanges(self._s[2741]!, self._r[2741]!, [_1]) } - public var LogoutOptions_ChangePhoneNumberText: String { return self._s[2740]! } - public var VoiceOver_Media_PlaybackPause: String { return self._s[2741]! } - public var Stats_FollowersBySourceTitle: String { return self._s[2743]! } + public var LogoutOptions_ChangePhoneNumberText: String { return self._s[2742]! } + public var VoiceOver_Media_PlaybackPause: String { return self._s[2743]! } + public var Stats_FollowersBySourceTitle: String { return self._s[2745]! } public func Conversation_ScheduleMessage_SendOn(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2744]!, self._r[2744]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2746]!, self._r[2746]!, [_0, _1]) } - public var Compose_NewEncryptedChatTitle: String { return self._s[2745]! } - public var Channel_CommentsGroup_Header: String { return self._s[2747]! } + public var Compose_NewEncryptedChatTitle: String { return self._s[2747]! } + public var Channel_CommentsGroup_Header: String { return self._s[2749]! } public func ShareFileTip_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2751]!, self._r[2751]!, [_0]) + return formatWithArgumentRanges(self._s[2753]!, self._r[2753]!, [_0]) } public func PUSH_MESSAGE_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2752]!, self._r[2752]!, [_1]) + return formatWithArgumentRanges(self._s[2754]!, self._r[2754]!, [_1]) } - public var Group_Setup_BasicHistoryHiddenHelp: String { return self._s[2754]! } + public var Group_Setup_BasicHistoryHiddenHelp: String { return self._s[2756]! } public func TwoStepAuth_RecoveryEmailUnavailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2755]!, self._r[2755]!, [_0]) + return formatWithArgumentRanges(self._s[2757]!, self._r[2757]!, [_0]) } - public var Conversation_OpenBotLinkOpen: String { return self._s[2756]! } - public var VoiceOver_Chat_RecordModeVoiceMessage: String { return self._s[2757]! } - public var PrivacySettings_LastSeen: String { return self._s[2759]! } - public var SettingsSearch_Synonyms_Privacy_Passcode: String { return self._s[2760]! } - public var Theme_Colors_Proceed: String { return self._s[2761]! } - public var UserInfo_ScamBotWarning: String { return self._s[2762]! } - public var LogoutOptions_LogOut: String { return self._s[2764]! } - public var Conversation_SendMessage: String { return self._s[2765]! } - public var Passport_Address_Region: String { return self._s[2767]! } - public var MediaPicker_CameraRoll: String { return self._s[2769]! } + public var Conversation_OpenBotLinkOpen: String { return self._s[2758]! } + public var VoiceOver_Chat_RecordModeVoiceMessage: String { return self._s[2759]! } + public var PrivacySettings_LastSeen: String { return self._s[2761]! } + public var SettingsSearch_Synonyms_Privacy_Passcode: String { return self._s[2762]! } + public var Theme_Colors_Proceed: String { return self._s[2763]! } + public var UserInfo_ScamBotWarning: String { return self._s[2764]! } + public var LogoutOptions_LogOut: String { return self._s[2766]! } + public var Conversation_SendMessage: String { return self._s[2767]! } + public var Passport_Address_Region: String { return self._s[2769]! } + public var MediaPicker_CameraRoll: String { return self._s[2771]! } public func VoiceOver_Chat_ForwardedFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2771]!, self._r[2771]!, [_0]) + return formatWithArgumentRanges(self._s[2773]!, self._r[2773]!, [_0]) } - public var Call_ReportSend: String { return self._s[2773]! } - public var Month_ShortJune: String { return self._s[2774]! } - public var AutoDownloadSettings_GroupChats: String { return self._s[2775]! } + public var Call_ReportSend: String { return self._s[2775]! } + public var Month_ShortJune: String { return self._s[2776]! } + public var AutoDownloadSettings_GroupChats: String { return self._s[2777]! } public func Channel_AdminLog_CaptionEdited(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2778]!, self._r[2778]!, [_0]) + return formatWithArgumentRanges(self._s[2780]!, self._r[2780]!, [_0]) } - public var TwoStepAuth_DisableSuccess: String { return self._s[2779]! } - public var Cache_KeepMedia: String { return self._s[2780]! } + public var TwoStepAuth_DisableSuccess: String { return self._s[2781]! } + public var Cache_KeepMedia: String { return self._s[2782]! } public func Date_ChatDateHeaderYear(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2781]!, self._r[2781]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2783]!, self._r[2783]!, [_1, _2, _3]) } - public var Appearance_LargeEmoji: String { return self._s[2782]! } + public var Appearance_LargeEmoji: String { return self._s[2784]! } public func Notification_NewAuthDetected(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String, _ _6: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2783]!, self._r[2783]!, [_1, _2, _3, _4, _5, _6]) + return formatWithArgumentRanges(self._s[2785]!, self._r[2785]!, [_1, _2, _3, _4, _5, _6]) } - public var Chat_AttachmentMultipleForwardDisabled: String { return self._s[2784]! } - public var Call_CameraConfirmationText: String { return self._s[2785]! } + public var Chat_AttachmentMultipleForwardDisabled: String { return self._s[2786]! } + public var Call_CameraConfirmationText: String { return self._s[2787]! } public func AuthSessions_AppUnofficial(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2787]!, self._r[2787]!, [_0]) + return formatWithArgumentRanges(self._s[2789]!, self._r[2789]!, [_0]) } - public var VoiceOver_MessageContextReport: String { return self._s[2789]! } - public var VoiceChat_RemovePeer: String { return self._s[2790]! } - public var ChatListFolder_ExcludeChatsTitle: String { return self._s[2791]! } - public var InviteLink_ContextCopy: String { return self._s[2792]! } - public var NotificationsSound_Tritone: String { return self._s[2794]! } - public var Notifications_InAppNotificationsPreview: String { return self._s[2797]! } - public var Stats_GroupTopAdmin_Actions: String { return self._s[2798]! } - public var PeerInfo_AddToContacts: String { return self._s[2799]! } - public var VoiceChat_OpenChat: String { return self._s[2800]! } - public var AccessDenied_Title: String { return self._s[2801]! } - public var Tour_Title1: String { return self._s[2802]! } - public var VoiceOver_AttachMedia: String { return self._s[2803]! } + public var VoiceOver_MessageContextReport: String { return self._s[2791]! } + public var VoiceChat_RemovePeer: String { return self._s[2792]! } + public var ChatListFolder_ExcludeChatsTitle: String { return self._s[2793]! } + public var InviteLink_ContextCopy: String { return self._s[2794]! } + public var NotificationsSound_Tritone: String { return self._s[2796]! } + public var Notifications_InAppNotificationsPreview: String { return self._s[2799]! } + public var Stats_GroupTopAdmin_Actions: String { return self._s[2800]! } + public var PeerInfo_AddToContacts: String { return self._s[2801]! } + public var VoiceChat_OpenChat: String { return self._s[2802]! } + public var AccessDenied_Title: String { return self._s[2803]! } + public var Tour_Title1: String { return self._s[2804]! } + public var VoiceOver_AttachMedia: String { return self._s[2805]! } public func SharedMedia_SearchNoResultsDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2805]!, self._r[2805]!, [_0]) + return formatWithArgumentRanges(self._s[2807]!, self._r[2807]!, [_0]) } - public var Chat_Gifs_SavedSectionHeader: String { return self._s[2806]! } - public var LogoutOptions_ChangePhoneNumberTitle: String { return self._s[2807]! } + public var Chat_Gifs_SavedSectionHeader: String { return self._s[2808]! } + public var LogoutOptions_ChangePhoneNumberTitle: String { return self._s[2809]! } public func Passport_Scans_ScanIndex(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2808]!, self._r[2808]!, [_0]) + return formatWithArgumentRanges(self._s[2810]!, self._r[2810]!, [_0]) } - public var Channel_AdminLog_MessagePreviousLink: String { return self._s[2809]! } - public var OldChannels_Title: String { return self._s[2810]! } - public var LoginPassword_FloodError: String { return self._s[2811]! } - public var Checkout_ErrorPaymentFailed: String { return self._s[2813]! } + public var Channel_AdminLog_MessagePreviousLink: String { return self._s[2811]! } + public var OldChannels_Title: String { return self._s[2812]! } + public var LoginPassword_FloodError: String { return self._s[2813]! } + public var Checkout_ErrorPaymentFailed: String { return self._s[2815]! } public func Time_MonthOfYear_m7(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2814]!, self._r[2814]!, [_0]) + return formatWithArgumentRanges(self._s[2816]!, self._r[2816]!, [_0]) } - public var VoiceOver_Media_PlaybackPlay: String { return self._s[2817]! } - public var Passport_CorrectErrors: String { return self._s[2819]! } + public var VoiceOver_Media_PlaybackPlay: String { return self._s[2819]! } + public var Passport_CorrectErrors: String { return self._s[2821]! } public func PUSH_CHAT_PHOTO_EDITED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2820]!, self._r[2820]!, [_1, _2]) - } - public var ChatListFolderSettings_Title: String { return self._s[2821]! } - public func AutoDownloadSettings_UpToFor(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2822]!, self._r[2822]!, [_1, _2]) } - public var PhotoEditor_HighlightsTool: String { return self._s[2823]! } - public var Contacts_NotRegisteredSection: String { return self._s[2826]! } + public var ChatListFolderSettings_Title: String { return self._s[2823]! } + public func AutoDownloadSettings_UpToFor(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2824]!, self._r[2824]!, [_1, _2]) + } + public var PhotoEditor_HighlightsTool: String { return self._s[2825]! } + public var Contacts_NotRegisteredSection: String { return self._s[2828]! } public func Call_VoiceChatInProgressCallMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2827]!, self._r[2827]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2829]!, self._r[2829]!, [_1, _2]) } public func PUSH_PINNED_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2828]!, self._r[2828]!, [_1]) + return formatWithArgumentRanges(self._s[2830]!, self._r[2830]!, [_1]) } - public var InviteLink_Create_UsersLimitInfo: String { return self._s[2829]! } - public var User_DeletedAccount: String { return self._s[2830]! } - public var Conversation_ViewContactDetails: String { return self._s[2831]! } - public var Conversation_Dice_u1F3B3: String { return self._s[2832]! } - public var WebSearch_GIFs: String { return self._s[2833]! } - public var ChatList_DeleteSavedMessagesConfirmationAction: String { return self._s[2834]! } - public var Appearance_PreviewOutgoingText: String { return self._s[2835]! } - public var Calls_CallTabTitle: String { return self._s[2836]! } - public var Call_VoiceChatInProgressTitle: String { return self._s[2837]! } + public var InviteLink_Create_UsersLimitInfo: String { return self._s[2831]! } + public var User_DeletedAccount: String { return self._s[2832]! } + public var Conversation_ViewContactDetails: String { return self._s[2833]! } + public var Conversation_Dice_u1F3B3: String { return self._s[2834]! } + public var WebSearch_GIFs: String { return self._s[2835]! } + public var ChatList_DeleteSavedMessagesConfirmationAction: String { return self._s[2836]! } + public var Appearance_PreviewOutgoingText: String { return self._s[2837]! } + public var Calls_CallTabTitle: String { return self._s[2838]! } + public var Call_VoiceChatInProgressTitle: String { return self._s[2839]! } public func LastSeen_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2838]!, self._r[2838]!, [_0]) + return formatWithArgumentRanges(self._s[2840]!, self._r[2840]!, [_0]) } - public var Channel_Status: String { return self._s[2839]! } - public var Conversation_SendMessageErrorGroupRestricted: String { return self._s[2841]! } - public var VoiceOver_Chat_OptionSelected: String { return self._s[2842]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsAlert: String { return self._s[2843]! } + public var Channel_Status: String { return self._s[2841]! } + public var Conversation_SendMessageErrorGroupRestricted: String { return self._s[2843]! } + public var VoiceOver_Chat_OptionSelected: String { return self._s[2844]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsAlert: String { return self._s[2845]! } public func ClearCache_Success(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2844]!, self._r[2844]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2846]!, self._r[2846]!, [_0, _1]) } - public var Passport_Identity_ExpiryDateNone: String { return self._s[2846]! } - public var Your_cards_expiration_month_is_invalid: String { return self._s[2848]! } - public var Month_ShortDecember: String { return self._s[2849]! } - public var Username_Help: String { return self._s[2850]! } - public var Login_InfoAvatarAdd: String { return self._s[2851]! } - public var Month_ShortMay: String { return self._s[2852]! } - public var DialogList_UnknownPinLimitError: String { return self._s[2853]! } - public var PasscodeSettings_AutoLock_IfAwayFor_5hours: String { return self._s[2854]! } - public var TwoStepAuth_EnabledSuccess: String { return self._s[2855]! } - public var Weekday_ShortSunday: String { return self._s[2856]! } - public var Channel_Username_InvalidTooShort: String { return self._s[2857]! } - public var AuthSessions_TerminateSession: String { return self._s[2858]! } - public var Passport_Identity_FilesTitle: String { return self._s[2859]! } + public var Passport_Identity_ExpiryDateNone: String { return self._s[2848]! } + public var Your_cards_expiration_month_is_invalid: String { return self._s[2850]! } + public var Month_ShortDecember: String { return self._s[2851]! } + public var Username_Help: String { return self._s[2852]! } + public var Login_InfoAvatarAdd: String { return self._s[2853]! } + public var Month_ShortMay: String { return self._s[2854]! } + public var DialogList_UnknownPinLimitError: String { return self._s[2855]! } + public var PasscodeSettings_AutoLock_IfAwayFor_5hours: String { return self._s[2856]! } + public var TwoStepAuth_EnabledSuccess: String { return self._s[2857]! } + public var Weekday_ShortSunday: String { return self._s[2858]! } + public var Channel_Username_InvalidTooShort: String { return self._s[2859]! } + public var AuthSessions_TerminateSession: String { return self._s[2860]! } + public var Passport_Identity_FilesTitle: String { return self._s[2861]! } public func Notification_PinnedRoundMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2860]!, self._r[2860]!, [_0]) + return formatWithArgumentRanges(self._s[2862]!, self._r[2862]!, [_0]) } - public var PeopleNearby_MakeVisible: String { return self._s[2862]! } + public var PeopleNearby_MakeVisible: String { return self._s[2864]! } public func Conversation_RestrictedMediaTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2863]!, self._r[2863]!, [_0]) - } - public func Notification_MessageLifetimeChanged(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2864]!, self._r[2864]!, [_1, _2]) - } - public func GroupInfo_AddParticipantConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2865]!, self._r[2865]!, [_0]) } - public var PrivacyPolicy_DeclineDeclineAndDelete: String { return self._s[2866]! } - public var Conversation_ContextMenuForward: String { return self._s[2867]! } - public var Channel_AdminLog_CanManageCalls: String { return self._s[2868]! } + public func Notification_MessageLifetimeChanged(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2866]!, self._r[2866]!, [_1, _2]) + } + public func GroupInfo_AddParticipantConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2867]!, self._r[2867]!, [_0]) + } + public var PrivacyPolicy_DeclineDeclineAndDelete: String { return self._s[2868]! } + public var Conversation_ContextMenuForward: String { return self._s[2869]! } + public var Channel_AdminLog_CanManageCalls: String { return self._s[2870]! } public func PUSH_CHAT_MESSAGE_QUIZ(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2870]!, self._r[2870]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2872]!, self._r[2872]!, [_1, _2, _3]) } - public var Notification_GroupInviterSelf: String { return self._s[2872]! } - public var Privacy_Forwards_NeverLink: String { return self._s[2873]! } - public var AuthSessions_CurrentSession: String { return self._s[2874]! } - public var Passport_Address_EditPassportRegistration: String { return self._s[2875]! } - public var ChannelInfo_DeleteChannelConfirmation: String { return self._s[2876]! } - public var ChatSearch_ResultsTooltip: String { return self._s[2878]! } - public var CheckoutInfo_Pay: String { return self._s[2879]! } + public var Notification_GroupInviterSelf: String { return self._s[2874]! } + public var Privacy_Forwards_NeverLink: String { return self._s[2875]! } + public var AuthSessions_CurrentSession: String { return self._s[2876]! } + public var Passport_Address_EditPassportRegistration: String { return self._s[2877]! } + public var ChannelInfo_DeleteChannelConfirmation: String { return self._s[2878]! } + public var ChatSearch_ResultsTooltip: String { return self._s[2880]! } + public var CheckoutInfo_Pay: String { return self._s[2881]! } public func Conversation_PinMessagesFor(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2881]!, self._r[2881]!, [_0]) + return formatWithArgumentRanges(self._s[2883]!, self._r[2883]!, [_0]) } - public var GroupInfo_AddParticipant: String { return self._s[2882]! } - public var GroupPermission_ApplyAlertAction: String { return self._s[2883]! } + public var GroupInfo_AddParticipant: String { return self._s[2884]! } + public var GroupPermission_ApplyAlertAction: String { return self._s[2885]! } public func Channel_AdminLog_MessageChangedChannelUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2884]!, self._r[2884]!, [_0]) + return formatWithArgumentRanges(self._s[2886]!, self._r[2886]!, [_0]) } - public var Localization_LanguageCustom: String { return self._s[2885]! } - public var SettingsSearch_Synonyms_Passport: String { return self._s[2886]! } - public var Settings_UsernameEmpty: String { return self._s[2887]! } - public var Settings_FAQ_URL: String { return self._s[2888]! } - public var ChatList_UndoArchiveText1: String { return self._s[2889]! } - public var Common_Select: String { return self._s[2891]! } - public var Notification_MessageLifetimeRemovedOutgoing: String { return self._s[2892]! } - public var Notification_PassportValueAddress: String { return self._s[2893]! } - public var Conversation_MessageDialogDelete: String { return self._s[2894]! } - public var Map_OpenInYandexNavigator: String { return self._s[2896]! } - public var DialogList_SearchSectionDialogs: String { return self._s[2897]! } - public var AccessDenied_Contacts: String { return self._s[2898]! } - public var SettingsSearch_Synonyms_Privacy_Data_DeleteDrafts: String { return self._s[2900]! } - public var Passport_ScanPassportHelp: String { return self._s[2901]! } - public var Chat_PinnedListPreview_HidePinnedMessages: String { return self._s[2902]! } - public var ChatListFolder_NameChannels: String { return self._s[2903]! } - public var Appearance_ThemePreview_Chat_5_Text: String { return self._s[2904]! } + public var Localization_LanguageCustom: String { return self._s[2887]! } + public var SettingsSearch_Synonyms_Passport: String { return self._s[2888]! } + public var Settings_UsernameEmpty: String { return self._s[2889]! } + public var Settings_FAQ_URL: String { return self._s[2890]! } + public var ChatList_UndoArchiveText1: String { return self._s[2891]! } + public var Common_Select: String { return self._s[2893]! } + public var Notification_MessageLifetimeRemovedOutgoing: String { return self._s[2894]! } + public var Notification_PassportValueAddress: String { return self._s[2895]! } + public var Conversation_MessageDialogDelete: String { return self._s[2896]! } + public var Map_OpenInYandexNavigator: String { return self._s[2898]! } + public var DialogList_SearchSectionDialogs: String { return self._s[2899]! } + public var AccessDenied_Contacts: String { return self._s[2900]! } + public var SettingsSearch_Synonyms_Privacy_Data_DeleteDrafts: String { return self._s[2902]! } + public var Passport_ScanPassportHelp: String { return self._s[2903]! } + public var Chat_PinnedListPreview_HidePinnedMessages: String { return self._s[2904]! } + public var ChatListFolder_NameChannels: String { return self._s[2905]! } + public var Appearance_ThemePreview_Chat_5_Text: String { return self._s[2906]! } public func Channel_OwnershipTransfer_TransferCompleted(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2905]!, self._r[2905]!, [_1, _2]) - } - public var Checkout_ErrorInvoiceAlreadyPaid: String { return self._s[2906]! } - public func VoiceChat_InviteMemberToGroupFirstText(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2907]!, self._r[2907]!, [_1, _2]) } - public var Conversation_GifTooltip: String { return self._s[2908]! } - public var Passport_Identity_TypeDriversLicenseUploadScan: String { return self._s[2910]! } - public var VoiceChat_Connecting: String { return self._s[2911]! } - public var AutoDownloadSettings_OffForAll: String { return self._s[2912]! } - public var Privacy_GroupsAndChannels_InviteToChannelMultipleError: String { return self._s[2913]! } - public var AutoDownloadSettings_PreloadVideo: String { return self._s[2914]! } - public var CreatePoll_Quiz: String { return self._s[2915]! } - public var TwoFactorSetup_Email_Placeholder: String { return self._s[2917]! } - public var Watch_Message_Invoice: String { return self._s[2918]! } - public var Settings_AddAnotherAccount_Help: String { return self._s[2919]! } - public var Watch_Message_Unsupported: String { return self._s[2920]! } + public var Checkout_ErrorInvoiceAlreadyPaid: String { return self._s[2908]! } + public func VoiceChat_InviteMemberToGroupFirstText(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2909]!, self._r[2909]!, [_1, _2]) + } + public var Conversation_GifTooltip: String { return self._s[2910]! } + public var Passport_Identity_TypeDriversLicenseUploadScan: String { return self._s[2912]! } + public var VoiceChat_Connecting: String { return self._s[2913]! } + public var AutoDownloadSettings_OffForAll: String { return self._s[2914]! } + public var Privacy_GroupsAndChannels_InviteToChannelMultipleError: String { return self._s[2915]! } + public var AutoDownloadSettings_PreloadVideo: String { return self._s[2916]! } + public var CreatePoll_Quiz: String { return self._s[2917]! } + public var TwoFactorSetup_Email_Placeholder: String { return self._s[2919]! } + public var Watch_Message_Invoice: String { return self._s[2920]! } + public var Settings_AddAnotherAccount_Help: String { return self._s[2921]! } + public var Watch_Message_Unsupported: String { return self._s[2922]! } public func Call_CameraOff(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2922]!, self._r[2922]!, [_0]) + return formatWithArgumentRanges(self._s[2924]!, self._r[2924]!, [_0]) } - public var AuthSessions_TerminateOtherSessions: String { return self._s[2923]! } - public var CreatePoll_AllOptionsAdded: String { return self._s[2925]! } - public var TwoStepAuth_RecoveryEmailTitle: String { return self._s[2926]! } - public var Call_IncomingVoiceCall: String { return self._s[2927]! } + public var AuthSessions_TerminateOtherSessions: String { return self._s[2925]! } + public var CreatePoll_AllOptionsAdded: String { return self._s[2927]! } + public var TwoStepAuth_RecoveryEmailTitle: String { return self._s[2928]! } + public var Call_IncomingVoiceCall: String { return self._s[2929]! } public func Channel_AdminLog_MessageTransferedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2928]!, self._r[2928]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2930]!, self._r[2930]!, [_1, _2]) } - public var PrivacySettings_DeleteAccountHelp: String { return self._s[2929]! } - public var Passport_Address_TypePassportRegistrationUploadScan: String { return self._s[2930]! } - public var Group_EditAdmin_RankOwnerPlaceholder: String { return self._s[2931]! } - public var Group_ErrorAccessDenied: String { return self._s[2932]! } - public var PasscodeSettings_HelpTop: String { return self._s[2933]! } - public var Watch_ChatList_NoConversationsTitle: String { return self._s[2934]! } - public var AddContact_SharedContactException: String { return self._s[2935]! } - public var AccessDenied_MicrophoneRestricted: String { return self._s[2936]! } - public var Privacy_TopPeers: String { return self._s[2937]! } - public var Web_OpenExternal: String { return self._s[2938]! } - public var Group_ErrorSendRestrictedStickers: String { return self._s[2939]! } - public var Channel_Management_LabelAdministrator: String { return self._s[2940]! } + public var PrivacySettings_DeleteAccountHelp: String { return self._s[2931]! } + public var Passport_Address_TypePassportRegistrationUploadScan: String { return self._s[2932]! } + public var Group_EditAdmin_RankOwnerPlaceholder: String { return self._s[2933]! } + public var Group_ErrorAccessDenied: String { return self._s[2934]! } + public var PasscodeSettings_HelpTop: String { return self._s[2935]! } + public var Watch_ChatList_NoConversationsTitle: String { return self._s[2936]! } + public var AddContact_SharedContactException: String { return self._s[2937]! } + public var AccessDenied_MicrophoneRestricted: String { return self._s[2938]! } + public var Privacy_TopPeers: String { return self._s[2939]! } + public var Web_OpenExternal: String { return self._s[2940]! } + public var Group_ErrorSendRestrictedStickers: String { return self._s[2941]! } + public var Channel_Management_LabelAdministrator: String { return self._s[2942]! } public func ChangePhoneNumberCode_CallTimer(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2941]!, self._r[2941]!, [_0]) + return formatWithArgumentRanges(self._s[2943]!, self._r[2943]!, [_0]) } - public var Permissions_Skip: String { return self._s[2942]! } - public var Notifications_GroupNotificationsExceptions: String { return self._s[2943]! } - public var PeopleNearby_Title: String { return self._s[2944]! } - public var GroupInfo_SharedMediaNone: String { return self._s[2945]! } + public var Permissions_Skip: String { return self._s[2944]! } + public var Notifications_GroupNotificationsExceptions: String { return self._s[2945]! } + public var PeopleNearby_Title: String { return self._s[2946]! } + public var GroupInfo_SharedMediaNone: String { return self._s[2947]! } public func PUSH_MESSAGE_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2947]!, self._r[2947]!, [_1]) + return formatWithArgumentRanges(self._s[2949]!, self._r[2949]!, [_1]) } - public var Profile_MessageLifetime1w: String { return self._s[2948]! } + public var Profile_MessageLifetime1w: String { return self._s[2950]! } public func Time_PreciseDate_m6(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2949]!, self._r[2949]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2951]!, self._r[2951]!, [_1, _2, _3]) } - public var WebBrowser_DefaultBrowser: String { return self._s[2950]! } - public var Conversation_PinOlderMessageAlertTitle: String { return self._s[2952]! } - public var EditTheme_Edit_BottomInfo: String { return self._s[2953]! } - public var Privacy_Forwards_Preview: String { return self._s[2954]! } - public var Settings_EditAccount: String { return self._s[2955]! } + public var WebBrowser_DefaultBrowser: String { return self._s[2952]! } + public var Conversation_PinOlderMessageAlertTitle: String { return self._s[2954]! } + public var EditTheme_Edit_BottomInfo: String { return self._s[2955]! } + public var Privacy_Forwards_Preview: String { return self._s[2956]! } + public var Settings_EditAccount: String { return self._s[2957]! } public func Conversation_RestrictedInlineTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2956]!, self._r[2956]!, [_0]) + return formatWithArgumentRanges(self._s[2958]!, self._r[2958]!, [_0]) } - public var TwoFactorSetup_Intro_Title: String { return self._s[2957]! } + public var TwoFactorSetup_Intro_Title: String { return self._s[2959]! } public func Channel_AdminLog_MessagePromotedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2959]!, self._r[2959]!, [_1]) + return formatWithArgumentRanges(self._s[2961]!, self._r[2961]!, [_1]) } - public var PeerInfo_ButtonVideoCall: String { return self._s[2960]! } + public var PeerInfo_ButtonVideoCall: String { return self._s[2962]! } public func DialogList_SingleUploadingPhotoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2961]!, self._r[2961]!, [_0]) + return formatWithArgumentRanges(self._s[2963]!, self._r[2963]!, [_0]) } - public var Login_InfoHelp: String { return self._s[2962]! } - public var Notification_SecretChatMessageScreenshotSelf: String { return self._s[2963]! } - public var VoiceChat_SpeakPermissionEveryone: String { return self._s[2964]! } - public var Profile_MessageLifetime1d: String { return self._s[2965]! } - public var Group_UpgradeConfirmation: String { return self._s[2966]! } + public var Login_InfoHelp: String { return self._s[2964]! } + public var Notification_SecretChatMessageScreenshotSelf: String { return self._s[2965]! } + public var VoiceChat_SpeakPermissionEveryone: String { return self._s[2966]! } + public var Profile_MessageLifetime1d: String { return self._s[2967]! } + public var Group_UpgradeConfirmation: String { return self._s[2968]! } public func PUSH_PINNED_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2967]!, self._r[2967]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2969]!, self._r[2969]!, [_1, _2]) } - public var Appearance_RemoveThemeColor: String { return self._s[2968]! } - public var Channel_AdminLog_TitleSelectedEvents: String { return self._s[2969]! } + public var Appearance_RemoveThemeColor: String { return self._s[2970]! } + public var Channel_AdminLog_TitleSelectedEvents: String { return self._s[2971]! } public func Call_AnsweringWithAccount(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2970]!, self._r[2970]!, [_0]) + return formatWithArgumentRanges(self._s[2972]!, self._r[2972]!, [_0]) } - public var UserInfo_BotSettings: String { return self._s[2971]! } + public var UserInfo_BotSettings: String { return self._s[2973]! } public func Notification_ChannelInviter(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2973]!, self._r[2973]!, [_0]) + return formatWithArgumentRanges(self._s[2975]!, self._r[2975]!, [_0]) } - public var Permissions_ContactsText_v0: String { return self._s[2974]! } - public var Conversation_PinMessagesForMe: String { return self._s[2975]! } - public var VoiceChat_PanelJoin: String { return self._s[2976]! } - public var Conversation_DiscussionStarted: String { return self._s[2978]! } - public var SettingsSearch_Synonyms_Privacy_TwoStepAuth: String { return self._s[2979]! } - public var SharedMedia_SearchNoResults: String { return self._s[2981]! } + public var Permissions_ContactsText_v0: String { return self._s[2976]! } + public var Conversation_PinMessagesForMe: String { return self._s[2977]! } + public var VoiceChat_PanelJoin: String { return self._s[2978]! } + public var Conversation_DiscussionStarted: String { return self._s[2980]! } + public var SettingsSearch_Synonyms_Privacy_TwoStepAuth: String { return self._s[2981]! } + public var SharedMedia_SearchNoResults: String { return self._s[2983]! } public func Login_EmailPhoneSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2983]!, self._r[2983]!, [_0]) - } - public func Conversation_ShareMyPhoneNumber_StatusSuccess(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2985]!, self._r[2985]!, [_0]) } - public var ReportPeer_ReasonOther_Placeholder: String { return self._s[2986]! } - public var ContactInfo_PhoneLabelHomeFax: String { return self._s[2987]! } - public var Call_AudioRouteHeadphones: String { return self._s[2988]! } + public func Conversation_ShareMyPhoneNumber_StatusSuccess(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2987]!, self._r[2987]!, [_0]) + } + public var ReportPeer_ReasonOther_Placeholder: String { return self._s[2988]! } + public var ContactInfo_PhoneLabelHomeFax: String { return self._s[2989]! } + public var Call_AudioRouteHeadphones: String { return self._s[2990]! } public func PUSH_AUTH_UNKNOWN(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2990]!, self._r[2990]!, [_1]) + return formatWithArgumentRanges(self._s[2992]!, self._r[2992]!, [_1]) } - public var Passport_Identity_FilesView: String { return self._s[2991]! } - public var TwoStepAuth_SetupEmail: String { return self._s[2992]! } - public var Widget_ApplicationStartRequired: String { return self._s[2993]! } - public var PhotoEditor_Original: String { return self._s[2994]! } - public var Call_YourMicrophoneOff: String { return self._s[2995]! } - public var Permissions_ContactsAllow_v0: String { return self._s[2996]! } - public var Notification_Exceptions_PreviewAlwaysOn: String { return self._s[2997]! } - public var PrivacyPolicy_Decline: String { return self._s[2998]! } - public var SettingsSearch_Synonyms_ChatFolders: String { return self._s[2999]! } - public var TwoStepAuth_PasswordRemoveConfirmation: String { return self._s[3000]! } - public var ChatListFolder_IncludeSectionInfo: String { return self._s[3001]! } + public var Passport_Identity_FilesView: String { return self._s[2993]! } + public var TwoStepAuth_SetupEmail: String { return self._s[2994]! } + public var Widget_ApplicationStartRequired: String { return self._s[2995]! } + public var PhotoEditor_Original: String { return self._s[2996]! } + public var Call_YourMicrophoneOff: String { return self._s[2997]! } + public var Permissions_ContactsAllow_v0: String { return self._s[2998]! } + public var Notification_Exceptions_PreviewAlwaysOn: String { return self._s[2999]! } + public var PrivacyPolicy_Decline: String { return self._s[3000]! } + public var SettingsSearch_Synonyms_ChatFolders: String { return self._s[3001]! } + public var TwoStepAuth_PasswordRemoveConfirmation: String { return self._s[3002]! } + public var ChatListFolder_IncludeSectionInfo: String { return self._s[3003]! } public func Map_DirectionsDriveEta(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3002]!, self._r[3002]!, [_0]) + return formatWithArgumentRanges(self._s[3004]!, self._r[3004]!, [_0]) } - public var Passport_Identity_Name: String { return self._s[3003]! } - public var WallpaperPreview_PatternTitle: String { return self._s[3005]! } - public var VoiceOver_Chat_RecordModeVideoMessage: String { return self._s[3006]! } - public var WallpaperSearch_ColorOrange: String { return self._s[3008]! } - public var Appearance_ThemePreview_ChatList_5_Name: String { return self._s[3009]! } - public var GroupInfo_Permissions_SlowmodeInfo: String { return self._s[3010]! } - public var Your_cards_security_code_is_invalid: String { return self._s[3011]! } - public var IntentsSettings_ResetAll: String { return self._s[3012]! } - public var SettingsSearch_Synonyms_Calls_CallTab: String { return self._s[3014]! } - public var Group_EditAdmin_TransferOwnership: String { return self._s[3015]! } - public var Notification_Exceptions_Add: String { return self._s[3016]! } - public var Cache_Help: String { return self._s[3017]! } - public var Call_AudioRouteMute: String { return self._s[3018]! } - public var VoiceOver_Chat_YourVoiceMessage: String { return self._s[3019]! } - public var SocksProxySetup_ProxyEnabled: String { return self._s[3020]! } + public var Passport_Identity_Name: String { return self._s[3005]! } + public var WallpaperPreview_PatternTitle: String { return self._s[3007]! } + public var VoiceOver_Chat_RecordModeVideoMessage: String { return self._s[3008]! } + public var WallpaperSearch_ColorOrange: String { return self._s[3010]! } + public var Appearance_ThemePreview_ChatList_5_Name: String { return self._s[3011]! } + public var GroupInfo_Permissions_SlowmodeInfo: String { return self._s[3012]! } + public var Your_cards_security_code_is_invalid: String { return self._s[3013]! } + public var IntentsSettings_ResetAll: String { return self._s[3014]! } + public var SettingsSearch_Synonyms_Calls_CallTab: String { return self._s[3016]! } + public var Group_EditAdmin_TransferOwnership: String { return self._s[3017]! } + public var Notification_Exceptions_Add: String { return self._s[3018]! } + public var Group_DeleteGroup: String { return self._s[3019]! } + public var Cache_Help: String { return self._s[3020]! } + public var Call_AudioRouteMute: String { return self._s[3021]! } + public var VoiceOver_Chat_YourVoiceMessage: String { return self._s[3022]! } + public var SocksProxySetup_ProxyEnabled: String { return self._s[3023]! } public func VoiceChat_Status_MembersFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3021]!, self._r[3021]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3024]!, self._r[3024]!, [_1, _2]) } public func ApplyLanguage_UnsufficientDataText(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3022]!, self._r[3022]!, [_1]) + return formatWithArgumentRanges(self._s[3025]!, self._r[3025]!, [_1]) } public func Call_CallInProgressMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3023]!, self._r[3023]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3026]!, self._r[3026]!, [_1, _2]) } - public var AutoDownloadSettings_VideoMessagesTitle: String { return self._s[3024]! } - public var Channel_BanUser_PermissionAddMembers: String { return self._s[3025]! } + public var AutoDownloadSettings_VideoMessagesTitle: String { return self._s[3027]! } + public var Channel_BanUser_PermissionAddMembers: String { return self._s[3028]! } public func PUSH_CHAT_VOICECHAT_INVITE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3026]!, self._r[3026]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3029]!, self._r[3029]!, [_1, _2, _3]) } - public var Contacts_MemberSearchSectionTitleGroup: String { return self._s[3027]! } - public var TwoStepAuth_RecoveryCodeHelp: String { return self._s[3028]! } - public var ClearCache_StorageFree: String { return self._s[3029]! } + public var Contacts_MemberSearchSectionTitleGroup: String { return self._s[3030]! } + public var TwoStepAuth_RecoveryCodeHelp: String { return self._s[3031]! } + public var ClearCache_StorageFree: String { return self._s[3032]! } public func DialogList_SingleRecordingVideoMessageSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3030]!, self._r[3030]!, [_0]) + return formatWithArgumentRanges(self._s[3033]!, self._r[3033]!, [_0]) } - public var Privacy_Forwards_CustomHelp: String { return self._s[3031]! } - public var Group_ErrorAddTooMuchAdmins: String { return self._s[3033]! } - public var DialogList_Typing: String { return self._s[3034]! } + public var Privacy_Forwards_CustomHelp: String { return self._s[3034]! } + public var Group_ErrorAddTooMuchAdmins: String { return self._s[3036]! } + public var DialogList_Typing: String { return self._s[3037]! } public func Login_EmailCodeSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3035]!, self._r[3035]!, [_0]) + return formatWithArgumentRanges(self._s[3038]!, self._r[3038]!, [_0]) } - public var Target_SelectGroup: String { return self._s[3036]! } - public var AuthSessions_IncompleteAttempts: String { return self._s[3037]! } + public var Target_SelectGroup: String { return self._s[3039]! } + public var AuthSessions_IncompleteAttempts: String { return self._s[3040]! } public func Notification_ProximityReached(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3038]!, self._r[3038]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3041]!, self._r[3041]!, [_1, _2, _3]) } - public var Chat_PinnedListPreview_ShowAllMessages: String { return self._s[3039]! } - public var TwoStepAuth_EmailChangeSuccess: String { return self._s[3040]! } + public var Chat_PinnedListPreview_ShowAllMessages: String { return self._s[3042]! } + public var TwoStepAuth_EmailChangeSuccess: String { return self._s[3043]! } public func Settings_CheckPhoneNumberTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3041]!, self._r[3041]!, [_0]) + return formatWithArgumentRanges(self._s[3044]!, self._r[3044]!, [_0]) } - public var Channel_AdminLog_CanSendMessages: String { return self._s[3042]! } - public var TwoFactorSetup_EmailVerification_Title: String { return self._s[3043]! } - public var ChatSettings_TextSize: String { return self._s[3044]! } - public var Channel_AdminLogFilter_EventsEditedMessages: String { return self._s[3046]! } - public var Map_SendThisPlace: String { return self._s[3047]! } - public var Conversation_TextCopied: String { return self._s[3048]! } - public var Login_PhoneNumberAlreadyAuthorized: String { return self._s[3049]! } - public var ContactInfo_BirthdayLabel: String { return self._s[3050]! } - public var Call_ShareStats: String { return self._s[3051]! } - public var ChatList_UndoArchiveRevealedText: String { return self._s[3053]! } - public var Notifications_GroupNotificationsPreview: String { return self._s[3054]! } - public var Settings_Support: String { return self._s[3055]! } - public var GroupInfo_ChannelListNamePlaceholder: String { return self._s[3056]! } + public var Channel_AdminLog_CanSendMessages: String { return self._s[3045]! } + public var TwoFactorSetup_EmailVerification_Title: String { return self._s[3046]! } + public var ChatSettings_TextSize: String { return self._s[3047]! } + public var Channel_AdminLogFilter_EventsEditedMessages: String { return self._s[3049]! } + public var Map_SendThisPlace: String { return self._s[3050]! } + public var Conversation_TextCopied: String { return self._s[3051]! } + public var Login_PhoneNumberAlreadyAuthorized: String { return self._s[3052]! } + public var ContactInfo_BirthdayLabel: String { return self._s[3053]! } + public var Call_ShareStats: String { return self._s[3054]! } + public var ChatList_UndoArchiveRevealedText: String { return self._s[3056]! } + public var Notifications_GroupNotificationsPreview: String { return self._s[3057]! } + public var Settings_Support: String { return self._s[3058]! } + public var GroupInfo_ChannelListNamePlaceholder: String { return self._s[3059]! } public func EmptyGroupInfo_Line1(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3058]!, self._r[3058]!, [_0]) + return formatWithArgumentRanges(self._s[3061]!, self._r[3061]!, [_0]) } - public var Watch_Conversation_GroupInfo: String { return self._s[3059]! } - public var Tour_Text4: String { return self._s[3060]! } - public var PasscodeSettings_AutoLock: String { return self._s[3062]! } - public var Channel_BanList_BlockedTitle: String { return self._s[3063]! } - public var Bot_DescriptionTitle: String { return self._s[3064]! } - public var Map_LocationTitle: String { return self._s[3065]! } - public var ChatListFolder_ExcludeSectionInfo: String { return self._s[3066]! } + public var Watch_Conversation_GroupInfo: String { return self._s[3062]! } + public var Tour_Text4: String { return self._s[3063]! } + public var PasscodeSettings_AutoLock: String { return self._s[3065]! } + public var Channel_BanList_BlockedTitle: String { return self._s[3066]! } + public var Bot_DescriptionTitle: String { return self._s[3067]! } + public var Map_LocationTitle: String { return self._s[3068]! } + public var ChatListFolder_ExcludeSectionInfo: String { return self._s[3069]! } public func Notification_MessageLifetimeChangedOutgoing(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3067]!, self._r[3067]!, [_1]) + return formatWithArgumentRanges(self._s[3070]!, self._r[3070]!, [_1]) } - public var Login_EmailNotConfiguredError: String { return self._s[3068]! } - public var AutoDownloadSettings_LimitBySize: String { return self._s[3069]! } - public var PrivacySettings_LastSeenNobody: String { return self._s[3070]! } - public var Permissions_CellularDataText_v0: String { return self._s[3071]! } - public var Conversation_EncryptionProcessing: String { return self._s[3072]! } - public var GroupPermission_Delete: String { return self._s[3073]! } - public var Contacts_SortByName: String { return self._s[3074]! } - public var TwoStepAuth_RecoveryUnavailable: String { return self._s[3075]! } - public var Compose_ChannelTokenListPlaceholder: String { return self._s[3076]! } - public var Group_Management_AddModeratorHelp: String { return self._s[3078]! } - public var SettingsSearch_Synonyms_EditProfile_Logout: String { return self._s[3079]! } - public var Forward_ErrorPublicPollDisabledInChannels: String { return self._s[3080]! } - public var CallFeedback_IncludeLogsInfo: String { return self._s[3082]! } + public var Login_EmailNotConfiguredError: String { return self._s[3071]! } + public var AutoDownloadSettings_LimitBySize: String { return self._s[3072]! } + public var PrivacySettings_LastSeenNobody: String { return self._s[3073]! } + public var Permissions_CellularDataText_v0: String { return self._s[3074]! } + public var Conversation_EncryptionProcessing: String { return self._s[3075]! } + public var GroupPermission_Delete: String { return self._s[3076]! } + public var Contacts_SortByName: String { return self._s[3077]! } + public var TwoStepAuth_RecoveryUnavailable: String { return self._s[3078]! } + public var Compose_ChannelTokenListPlaceholder: String { return self._s[3079]! } + public var Group_Management_AddModeratorHelp: String { return self._s[3081]! } + public var SettingsSearch_Synonyms_EditProfile_Logout: String { return self._s[3082]! } + public var Forward_ErrorPublicPollDisabledInChannels: String { return self._s[3083]! } + public var CallFeedback_IncludeLogsInfo: String { return self._s[3085]! } public func PUSH_CHANNEL_MESSAGE_QUIZ(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3083]!, self._r[3083]!, [_1]) + return formatWithArgumentRanges(self._s[3086]!, self._r[3086]!, [_1]) } public func SecretVideo_NotViewedYet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3084]!, self._r[3084]!, [_0]) + return formatWithArgumentRanges(self._s[3087]!, self._r[3087]!, [_0]) } - public var ChatList_Context_Delete: String { return self._s[3085]! } - public var VoiceChat_InviteMember: String { return self._s[3086]! } - public var PrivacyPhoneNumberSettings_CustomDisabledHelp: String { return self._s[3087]! } - public var Conversation_Processing: String { return self._s[3088]! } - public var TwoStepAuth_EmailCodeExpired: String { return self._s[3089]! } - public var ChatSettings_Stickers: String { return self._s[3090]! } - public var AppleWatch_ReplyPresetsHelp: String { return self._s[3091]! } - public var Passport_Language_cs: String { return self._s[3092]! } - public var GroupInfo_InvitationLinkGroupFull: String { return self._s[3094]! } - public var Conversation_Contact: String { return self._s[3095]! } - public var Passport_Identity_ReverseSideHelp: String { return self._s[3096]! } - public var SocksProxySetup_PasteFromClipboard: String { return self._s[3097]! } - public var Theme_Unsupported: String { return self._s[3098]! } - public var Privacy_TopPeersWarning: String { return self._s[3099]! } - public var InviteLink_Title: String { return self._s[3101]! } + public var ChatList_Context_Delete: String { return self._s[3088]! } + public var VoiceChat_InviteMember: String { return self._s[3089]! } + public var PrivacyPhoneNumberSettings_CustomDisabledHelp: String { return self._s[3090]! } + public var Conversation_Processing: String { return self._s[3091]! } + public var TwoStepAuth_EmailCodeExpired: String { return self._s[3092]! } + public var ChatSettings_Stickers: String { return self._s[3093]! } + public var AppleWatch_ReplyPresetsHelp: String { return self._s[3094]! } + public var Passport_Language_cs: String { return self._s[3095]! } + public var GroupInfo_InvitationLinkGroupFull: String { return self._s[3097]! } + public var Conversation_Contact: String { return self._s[3098]! } + public var Passport_Identity_ReverseSideHelp: String { return self._s[3099]! } + public var SocksProxySetup_PasteFromClipboard: String { return self._s[3100]! } + public var Theme_Unsupported: String { return self._s[3101]! } + public var Privacy_TopPeersWarning: String { return self._s[3102]! } + public var InviteLink_Title: String { return self._s[3104]! } public func UserInfo_BlockConfirmationTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3102]!, self._r[3102]!, [_0]) + return formatWithArgumentRanges(self._s[3105]!, self._r[3105]!, [_0]) } - public var Conversation_SilentBroadcastTooltipOn: String { return self._s[3103]! } - public var TwoStepAuth_RemovePassword: String { return self._s[3104]! } - public var Settings_CheckPhoneNumberText: String { return self._s[3105]! } - public var PeopleNearby_Users: String { return self._s[3106]! } - public var Appearance_TextSize_UseSystem: String { return self._s[3107]! } - public var Settings_SetProfilePhoto: String { return self._s[3108]! } - public var Conversation_ContextMenuBan: String { return self._s[3109]! } - public var KeyCommand_ScrollUp: String { return self._s[3110]! } - public var Settings_ChatSettings: String { return self._s[3112]! } - public var CallList_RecentCallsHeader: String { return self._s[3113]! } + public var Conversation_SilentBroadcastTooltipOn: String { return self._s[3106]! } + public var TwoStepAuth_RemovePassword: String { return self._s[3107]! } + public var Settings_CheckPhoneNumberText: String { return self._s[3108]! } + public var PeopleNearby_Users: String { return self._s[3109]! } + public var Appearance_TextSize_UseSystem: String { return self._s[3110]! } + public var Settings_SetProfilePhoto: String { return self._s[3111]! } + public var Conversation_ContextMenuBan: String { return self._s[3112]! } + public var KeyCommand_ScrollUp: String { return self._s[3113]! } + public var Settings_ChatSettings: String { return self._s[3115]! } + public var CallList_RecentCallsHeader: String { return self._s[3116]! } public func PUSH_CHAT_MESSAGE_VIDEO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3114]!, self._r[3114]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3117]!, self._r[3117]!, [_1, _2]) } - public var Stats_GroupTopInvitersTitle: String { return self._s[3115]! } - public var Passport_Phone_EnterOtherNumber: String { return self._s[3116]! } - public var VoiceChat_StartRecordingTitle: String { return self._s[3117]! } - public var Passport_Identity_MiddleNamePlaceholder: String { return self._s[3119]! } - public var Passport_Address_OneOfTypeBankStatement: String { return self._s[3120]! } - public var Stats_GroupTopPoster_Promote: String { return self._s[3121]! } - public var Cache_Title: String { return self._s[3122]! } - public var Clipboard_SendPhoto: String { return self._s[3123]! } - public var Notifications_ExceptionsMessagePlaceholder: String { return self._s[3125]! } - public var TwoStepAuth_EnterPasswordForgot: String { return self._s[3126]! } - public var WatchRemote_AlertTitle: String { return self._s[3127]! } - public var Appearance_ReduceMotion: String { return self._s[3128]! } + public var Stats_GroupTopInvitersTitle: String { return self._s[3118]! } + public var Passport_Phone_EnterOtherNumber: String { return self._s[3119]! } + public var VoiceChat_StartRecordingTitle: String { return self._s[3120]! } + public var Passport_Identity_MiddleNamePlaceholder: String { return self._s[3122]! } + public var Passport_Address_OneOfTypeBankStatement: String { return self._s[3123]! } + public var Stats_GroupTopPoster_Promote: String { return self._s[3124]! } + public var Cache_Title: String { return self._s[3125]! } + public var Clipboard_SendPhoto: String { return self._s[3126]! } + public var Notifications_ExceptionsMessagePlaceholder: String { return self._s[3128]! } + public var TwoStepAuth_EnterPasswordForgot: String { return self._s[3129]! } + public var WatchRemote_AlertTitle: String { return self._s[3130]! } + public var Appearance_ReduceMotion: String { return self._s[3131]! } public func PUSH_CHAT_MESSAGE_ROUND(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3131]!, self._r[3131]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3134]!, self._r[3134]!, [_1, _2]) } - public var Notifications_PermissionsSuppressWarningText: String { return self._s[3132]! } - public var ChatList_UndoArchiveHiddenTitle: String { return self._s[3133]! } - public var Passport_Identity_TypePersonalDetails: String { return self._s[3134]! } + public var Notifications_PermissionsSuppressWarningText: String { return self._s[3135]! } + public var ChatList_UndoArchiveHiddenTitle: String { return self._s[3136]! } + public var Passport_Identity_TypePersonalDetails: String { return self._s[3137]! } public func Call_CallInProgressVoiceChatMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3135]!, self._r[3135]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3138]!, self._r[3138]!, [_1, _2]) } public func Passport_Identity_UploadOneOfScan(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3137]!, self._r[3137]!, [_0]) + return formatWithArgumentRanges(self._s[3140]!, self._r[3140]!, [_0]) } - public var ChatListFolder_DiscardConfirmation: String { return self._s[3138]! } + public var ChatListFolder_DiscardConfirmation: String { return self._s[3141]! } public func Conversation_RestrictedStickersTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3139]!, self._r[3139]!, [_0]) + return formatWithArgumentRanges(self._s[3142]!, self._r[3142]!, [_0]) } - public var ChatState_WaitingForNetwork: String { return self._s[3140]! } - public var GroupInfo_Sound: String { return self._s[3141]! } - public var NotificationsSound_Telegraph: String { return self._s[3142]! } - public var NotificationsSound_Hello: String { return self._s[3143]! } - public var Passport_FieldIdentityDetailsHelp: String { return self._s[3144]! } - public var Group_Members_AddMemberBotErrorNotAllowed: String { return self._s[3145]! } - public var Conversation_HoldForVideo: String { return self._s[3146]! } - public var Conversation_PinOlderMessageAlertText: String { return self._s[3147]! } - public var Appearance_ShareTheme: String { return self._s[3148]! } - public var TwoStepAuth_SetupHint: String { return self._s[3149]! } - public var Stats_GrowthTitle: String { return self._s[3152]! } - public var GroupInfo_InviteLink_ShareLink: String { return self._s[3153]! } - public var Conversation_DefaultRestrictedMedia: String { return self._s[3154]! } - public var Channel_EditAdmin_PermissionPostMessages: String { return self._s[3155]! } - public var GroupPermission_NoSendMessages: String { return self._s[3158]! } - public var Conversation_SetReminder_Title: String { return self._s[3159]! } - public var Privacy_Calls_CustomHelp: String { return self._s[3160]! } - public var CheckoutInfo_ErrorPostcodeInvalid: String { return self._s[3161]! } + public var ChatState_WaitingForNetwork: String { return self._s[3143]! } + public var GroupInfo_Sound: String { return self._s[3144]! } + public var NotificationsSound_Telegraph: String { return self._s[3145]! } + public var NotificationsSound_Hello: String { return self._s[3146]! } + public var Passport_FieldIdentityDetailsHelp: String { return self._s[3147]! } + public var Group_Members_AddMemberBotErrorNotAllowed: String { return self._s[3148]! } + public var Conversation_HoldForVideo: String { return self._s[3149]! } + public var Conversation_PinOlderMessageAlertText: String { return self._s[3150]! } + public var Appearance_ShareTheme: String { return self._s[3151]! } + public var TwoStepAuth_SetupHint: String { return self._s[3152]! } + public var Stats_GrowthTitle: String { return self._s[3155]! } + public var GroupInfo_InviteLink_ShareLink: String { return self._s[3156]! } + public var Conversation_DefaultRestrictedMedia: String { return self._s[3157]! } + public var Channel_EditAdmin_PermissionPostMessages: String { return self._s[3158]! } + public var GroupPermission_NoSendMessages: String { return self._s[3161]! } + public var Conversation_SetReminder_Title: String { return self._s[3162]! } + public var Privacy_Calls_CustomHelp: String { return self._s[3163]! } + public var CheckoutInfo_ErrorPostcodeInvalid: String { return self._s[3164]! } public func ClearCache_StorageTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3162]!, self._r[3162]!, [_0]) + return formatWithArgumentRanges(self._s[3165]!, self._r[3165]!, [_0]) } - public var Undo_SecretChatDeleted: String { return self._s[3164]! } - public var PhotoEditor_ContrastTool: String { return self._s[3165]! } - public var Privacy_Forwards: String { return self._s[3166]! } - public var AuthSessions_LoggedInWithTelegram: String { return self._s[3167]! } - public var KeyCommand_SendMessage: String { return self._s[3169]! } + public var Undo_SecretChatDeleted: String { return self._s[3167]! } + public var PhotoEditor_ContrastTool: String { return self._s[3168]! } + public var Privacy_Forwards: String { return self._s[3169]! } + public var AuthSessions_LoggedInWithTelegram: String { return self._s[3170]! } + public var KeyCommand_SendMessage: String { return self._s[3172]! } public func InstantPage_RelatedArticleAuthorAndDateTitle(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3170]!, self._r[3170]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3173]!, self._r[3173]!, [_1, _2]) } - public var GroupPermission_NoSendGifs: String { return self._s[3171]! } - public var Notification_MessageLifetime2s: String { return self._s[3172]! } - public var Message_Theme: String { return self._s[3173]! } - public var Conversation_Dice_u1F3AF: String { return self._s[3176]! } + public var GroupPermission_NoSendGifs: String { return self._s[3174]! } + public var Notification_MessageLifetime2s: String { return self._s[3175]! } + public var Message_Theme: String { return self._s[3176]! } + public var Conversation_Dice_u1F3AF: String { return self._s[3179]! } public func DialogList_SinglePlayingGameSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3177]!, self._r[3177]!, [_0]) + return formatWithArgumentRanges(self._s[3180]!, self._r[3180]!, [_0]) } - public var Group_UpgradeNoticeHeader: String { return self._s[3179]! } - public var PeerInfo_BioExpand: String { return self._s[3180]! } - public var Passport_DeletePersonalDetails: String { return self._s[3181]! } - public var Widget_NoUsers: String { return self._s[3182]! } - public var TwoStepAuth_AddHintTitle: String { return self._s[3183]! } - public var Login_TermsOfServiceDecline: String { return self._s[3184]! } - public var CreatePoll_QuizTip: String { return self._s[3186]! } - public var Watch_LastSeen_WithinAWeek: String { return self._s[3187]! } - public var MessagePoll_SubmitVote: String { return self._s[3189]! } - public var ChatSettings_AutoDownloadEnabled: String { return self._s[3190]! } - public var Passport_Address_EditRentalAgreement: String { return self._s[3191]! } - public var Conversation_SearchByName_Placeholder: String { return self._s[3192]! } - public var Conversation_UpdateTelegram: String { return self._s[3193]! } + public var Group_UpgradeNoticeHeader: String { return self._s[3182]! } + public var PeerInfo_BioExpand: String { return self._s[3183]! } + public var Passport_DeletePersonalDetails: String { return self._s[3184]! } + public var Widget_NoUsers: String { return self._s[3185]! } + public var TwoStepAuth_AddHintTitle: String { return self._s[3186]! } + public var Login_TermsOfServiceDecline: String { return self._s[3187]! } + public var CreatePoll_QuizTip: String { return self._s[3189]! } + public var Watch_LastSeen_WithinAWeek: String { return self._s[3190]! } + public var MessagePoll_SubmitVote: String { return self._s[3192]! } + public var ChatSettings_AutoDownloadEnabled: String { return self._s[3193]! } + public var Passport_Address_EditRentalAgreement: String { return self._s[3194]! } + public var Conversation_SearchByName_Placeholder: String { return self._s[3195]! } + public var Conversation_UpdateTelegram: String { return self._s[3196]! } public func FileSize_KB(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3194]!, self._r[3194]!, [_0]) + return formatWithArgumentRanges(self._s[3197]!, self._r[3197]!, [_0]) } - public var UserInfo_About_Placeholder: String { return self._s[3195]! } - public var CallSettings_Always: String { return self._s[3196]! } - public var ChannelInfo_ScamChannelWarning: String { return self._s[3197]! } - public var Login_TermsOfServiceHeader: String { return self._s[3198]! } - public var KeyCommand_ChatInfo: String { return self._s[3199]! } - public var MessagePoll_LabelPoll: String { return self._s[3200]! } - public var Paint_Clear: String { return self._s[3201]! } - public var PeerInfo_ButtonMute: String { return self._s[3202]! } - public var LastSeen_WithinAWeek: String { return self._s[3203]! } - public var Passport_Identity_FrontSide: String { return self._s[3204]! } - public var Stickers_GroupStickers: String { return self._s[3205]! } - public var ChangePhoneNumberNumber_NumberPlaceholder: String { return self._s[3206]! } + public var UserInfo_About_Placeholder: String { return self._s[3198]! } + public var CallSettings_Always: String { return self._s[3199]! } + public var ChannelInfo_ScamChannelWarning: String { return self._s[3200]! } + public var Login_TermsOfServiceHeader: String { return self._s[3201]! } + public var KeyCommand_ChatInfo: String { return self._s[3202]! } + public var MessagePoll_LabelPoll: String { return self._s[3203]! } + public var Paint_Clear: String { return self._s[3204]! } + public var PeerInfo_ButtonMute: String { return self._s[3205]! } + public var LastSeen_WithinAWeek: String { return self._s[3206]! } + public var Passport_Identity_FrontSide: String { return self._s[3207]! } + public var Stickers_GroupStickers: String { return self._s[3208]! } + public var ChangePhoneNumberNumber_NumberPlaceholder: String { return self._s[3209]! } public func Map_SearchNoResultsDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3207]!, self._r[3207]!, [_0]) + return formatWithArgumentRanges(self._s[3210]!, self._r[3210]!, [_0]) } public func PUSH_MESSAGE_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3210]!, self._r[3210]!, [_1]) + return formatWithArgumentRanges(self._s[3213]!, self._r[3213]!, [_1]) } - public var SocksProxySetup_ProxyStatusConnected: String { return self._s[3211]! } - public var Chat_MultipleTextMessagesDisabled: String { return self._s[3212]! } - public var InviteLink_ContextDelete: String { return self._s[3213]! } + public var SocksProxySetup_ProxyStatusConnected: String { return self._s[3214]! } + public var Chat_MultipleTextMessagesDisabled: String { return self._s[3215]! } + public var InviteLink_ContextDelete: String { return self._s[3216]! } public func Notification_LeftChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3214]!, self._r[3214]!, [_0]) + return formatWithArgumentRanges(self._s[3217]!, self._r[3217]!, [_0]) } - public var WebSearch_SearchNoResults: String { return self._s[3216]! } - public var Channel_DiscussionGroup_Create: String { return self._s[3217]! } - public var Passport_Language_es: String { return self._s[3218]! } - public var EnterPasscode_EnterCurrentPasscode: String { return self._s[3219]! } - public var Map_LiveLocationShowAll: String { return self._s[3220]! } - public var Cache_MaximumCacheSizeHelp: String { return self._s[3222]! } - public var Map_OpenInGoogleMaps: String { return self._s[3223]! } - public var CheckoutInfo_ErrorNameInvalid: String { return self._s[3225]! } - public var EditTheme_Create_BottomInfo: String { return self._s[3226]! } - public var PhotoEditor_BlurToolLinear: String { return self._s[3227]! } + public var WebSearch_SearchNoResults: String { return self._s[3219]! } + public var Channel_DiscussionGroup_Create: String { return self._s[3220]! } + public var Passport_Language_es: String { return self._s[3221]! } + public var EnterPasscode_EnterCurrentPasscode: String { return self._s[3222]! } + public var Map_LiveLocationShowAll: String { return self._s[3223]! } + public var Cache_MaximumCacheSizeHelp: String { return self._s[3225]! } + public var Map_OpenInGoogleMaps: String { return self._s[3226]! } + public var CheckoutInfo_ErrorNameInvalid: String { return self._s[3228]! } + public var EditTheme_Create_BottomInfo: String { return self._s[3229]! } + public var PhotoEditor_BlurToolLinear: String { return self._s[3230]! } public func Channel_AdminLog_MessageEdited(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3228]!, self._r[3228]!, [_0]) + return formatWithArgumentRanges(self._s[3231]!, self._r[3231]!, [_0]) } - public var Passport_Phone_Delete: String { return self._s[3229]! } - public var Channel_Username_CreatePrivateLinkHelp: String { return self._s[3230]! } - public var PrivacySettings_PrivacyTitle: String { return self._s[3231]! } - public var CheckoutInfo_ReceiverInfoNamePlaceholder: String { return self._s[3232]! } + public var Passport_Phone_Delete: String { return self._s[3232]! } + public var Channel_Username_CreatePrivateLinkHelp: String { return self._s[3233]! } + public var PrivacySettings_PrivacyTitle: String { return self._s[3234]! } + public var CheckoutInfo_ReceiverInfoNamePlaceholder: String { return self._s[3235]! } public func EncryptionKey_Description(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3233]!, self._r[3233]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3236]!, self._r[3236]!, [_1, _2]) } - public var LogoutOptions_LogOutInfo: String { return self._s[3234]! } - public var Cache_ByPeerHeader: String { return self._s[3236]! } - public var Username_InvalidCharacters: String { return self._s[3237]! } - public var Checkout_ShippingAddress: String { return self._s[3238]! } + public var LogoutOptions_LogOutInfo: String { return self._s[3237]! } + public var Cache_ByPeerHeader: String { return self._s[3239]! } + public var Username_InvalidCharacters: String { return self._s[3240]! } + public var Checkout_ShippingAddress: String { return self._s[3241]! } public func PUSH_CHAT_MESSAGE_GAME_SCORE(_ _1: String, _ _2: String, _ _3: String, _ _4: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3239]!, self._r[3239]!, [_1, _2, _3, _4]) + return formatWithArgumentRanges(self._s[3242]!, self._r[3242]!, [_1, _2, _3, _4]) } - public var Conversation_AddContact: String { return self._s[3241]! } - public var Passport_Address_EditUtilityBill: String { return self._s[3242]! } - public var InviteLink_ContextGetQRCode: String { return self._s[3243]! } - public var Conversation_ChecksTooltip_Delivered: String { return self._s[3244]! } - public var Message_Video: String { return self._s[3245]! } + public var Conversation_AddContact: String { return self._s[3244]! } + public var Passport_Address_EditUtilityBill: String { return self._s[3245]! } + public var InviteLink_ContextGetQRCode: String { return self._s[3246]! } + public var Conversation_ChecksTooltip_Delivered: String { return self._s[3247]! } + public var Message_Video: String { return self._s[3248]! } public func Watch_Time_ShortYesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3246]!, self._r[3246]!, [_0]) + return formatWithArgumentRanges(self._s[3249]!, self._r[3249]!, [_0]) } public func Conversation_Megabytes(_ _0: Float) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3247]!, self._r[3247]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[3250]!, self._r[3250]!, ["\(_0)"]) } - public var Passport_Language_km: String { return self._s[3248]! } + public var Passport_Language_km: String { return self._s[3251]! } public func PUSH_MESSAGE_CHANNEL_MESSAGE_GAME_SCORE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3249]!, self._r[3249]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3252]!, self._r[3252]!, [_1, _2, _3]) } - public var EmptyGroupInfo_Line4: String { return self._s[3250]! } - public var Conversation_SendMessageErrorTooMuchScheduled: String { return self._s[3252]! } - public var Notification_CallCanceledShort: String { return self._s[3253]! } - public var PhotoEditor_FadeTool: String { return self._s[3254]! } - public var Group_PublicLink_Info: String { return self._s[3255]! } - public var Contacts_DeselectAll: String { return self._s[3256]! } - public var Conversation_Moderate_Delete: String { return self._s[3257]! } - public var TwoStepAuth_RecoveryCodeInvalid: String { return self._s[3258]! } - public var NotificationsSound_Note: String { return self._s[3261]! } + public var EmptyGroupInfo_Line4: String { return self._s[3253]! } + public var Conversation_SendMessageErrorTooMuchScheduled: String { return self._s[3255]! } + public var Notification_CallCanceledShort: String { return self._s[3256]! } + public var PhotoEditor_FadeTool: String { return self._s[3257]! } + public var Group_PublicLink_Info: String { return self._s[3258]! } + public var Contacts_DeselectAll: String { return self._s[3259]! } + public var Conversation_Moderate_Delete: String { return self._s[3260]! } + public var TwoStepAuth_RecoveryCodeInvalid: String { return self._s[3261]! } + public var NotificationsSound_Note: String { return self._s[3264]! } public func Message_PaymentSent(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3262]!, self._r[3262]!, [_0]) + return formatWithArgumentRanges(self._s[3265]!, self._r[3265]!, [_0]) } - public var Appearance_ThemePreview_ChatList_7_Text: String { return self._s[3263]! } - public var Channel_EditAdmin_PermissionInviteViaLink: String { return self._s[3265]! } - public var DialogList_SearchSectionGlobal: String { return self._s[3266]! } - public var AccessDenied_Settings: String { return self._s[3267]! } - public var Passport_Identity_TypeIdentityCardUploadScan: String { return self._s[3268]! } - public var AuthSessions_EmptyTitle: String { return self._s[3269]! } - public var TwoStepAuth_PasswordChangeSuccess: String { return self._s[3270]! } - public var GroupInfo_GroupType: String { return self._s[3271]! } - public var Calls_Missed: String { return self._s[3272]! } - public var UserInfo_GenericPhoneLabel: String { return self._s[3273]! } - public var Passport_Language_uz: String { return self._s[3274]! } - public var Conversation_StopQuizConfirmationTitle: String { return self._s[3275]! } - public var PhotoEditor_BlurToolPortrait: String { return self._s[3276]! } - public var Map_ChooseLocationTitle: String { return self._s[3277]! } - public var Checkout_EnterPassword: String { return self._s[3278]! } - public var GroupInfo_ConvertToSupergroup: String { return self._s[3279]! } - public var AutoNightTheme_UpdateLocation: String { return self._s[3280]! } - public var NetworkUsageSettings_Title: String { return self._s[3281]! } - public var Location_ProximityAlertCancelled: String { return self._s[3282]! } - public var SettingsSearch_Synonyms_ChatSettings_IntentsSettings: String { return self._s[3283]! } - public var Message_PinnedLiveLocationMessage: String { return self._s[3284]! } - public var Compose_NewChannel: String { return self._s[3285]! } - public var Privacy_PaymentsClearInfo: String { return self._s[3287]! } + public var Appearance_ThemePreview_ChatList_7_Text: String { return self._s[3266]! } + public var Channel_EditAdmin_PermissionInviteViaLink: String { return self._s[3268]! } + public var DialogList_SearchSectionGlobal: String { return self._s[3269]! } + public var AccessDenied_Settings: String { return self._s[3270]! } + public var Passport_Identity_TypeIdentityCardUploadScan: String { return self._s[3271]! } + public var AuthSessions_EmptyTitle: String { return self._s[3272]! } + public var TwoStepAuth_PasswordChangeSuccess: String { return self._s[3273]! } + public var GroupInfo_GroupType: String { return self._s[3274]! } + public var Calls_Missed: String { return self._s[3275]! } + public var UserInfo_GenericPhoneLabel: String { return self._s[3276]! } + public var Passport_Language_uz: String { return self._s[3277]! } + public var Conversation_StopQuizConfirmationTitle: String { return self._s[3278]! } + public var PhotoEditor_BlurToolPortrait: String { return self._s[3279]! } + public var Map_ChooseLocationTitle: String { return self._s[3280]! } + public var Checkout_EnterPassword: String { return self._s[3281]! } + public var GroupInfo_ConvertToSupergroup: String { return self._s[3282]! } + public var AutoNightTheme_UpdateLocation: String { return self._s[3283]! } + public var NetworkUsageSettings_Title: String { return self._s[3284]! } + public var Location_ProximityAlertCancelled: String { return self._s[3285]! } + public var SettingsSearch_Synonyms_ChatSettings_IntentsSettings: String { return self._s[3286]! } + public var Message_PinnedLiveLocationMessage: String { return self._s[3287]! } + public var Compose_NewChannel: String { return self._s[3288]! } + public var Privacy_PaymentsClearInfo: String { return self._s[3290]! } public func PUSH_MESSAGE_POLL(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3288]!, self._r[3288]!, [_1]) + return formatWithArgumentRanges(self._s[3291]!, self._r[3291]!, [_1]) } - public var Notification_Exceptions_AlwaysOn: String { return self._s[3289]! } - public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[3290]! } - public var AutoNightTheme_AutomaticSection: String { return self._s[3293]! } - public var WallpaperSearch_ColorBrown: String { return self._s[3294]! } - public var Appearance_AppIconDefault: String { return self._s[3295]! } - public var StickerSettings_ContextInfo: String { return self._s[3298]! } - public var Channel_AddBotErrorNoRights: String { return self._s[3299]! } - public var Passport_FieldPhone: String { return self._s[3301]! } - public var Contacts_PermissionsTitle: String { return self._s[3302]! } - public var TwoFactorSetup_Email_SkipConfirmationSkip: String { return self._s[3303]! } + public var Notification_Exceptions_AlwaysOn: String { return self._s[3292]! } + public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[3293]! } + public var AutoNightTheme_AutomaticSection: String { return self._s[3296]! } + public var WallpaperSearch_ColorBrown: String { return self._s[3297]! } + public var Appearance_AppIconDefault: String { return self._s[3298]! } + public var StickerSettings_ContextInfo: String { return self._s[3301]! } + public var Channel_AddBotErrorNoRights: String { return self._s[3302]! } + public var Passport_FieldPhone: String { return self._s[3304]! } + public var Contacts_PermissionsTitle: String { return self._s[3305]! } + public var TwoFactorSetup_Email_SkipConfirmationSkip: String { return self._s[3306]! } public func Notification_JoinedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3304]!, self._r[3304]!, [_0]) + return formatWithArgumentRanges(self._s[3307]!, self._r[3307]!, [_0]) } - public var Bot_Unblock: String { return self._s[3305]! } - public var PasscodeSettings_SimplePasscode: String { return self._s[3306]! } - public var Passport_PasswordHelp: String { return self._s[3307]! } - public var Watch_Conversation_UserInfo: String { return self._s[3308]! } + public var Bot_Unblock: String { return self._s[3308]! } + public var PasscodeSettings_SimplePasscode: String { return self._s[3309]! } + public var Passport_PasswordHelp: String { return self._s[3310]! } + public var Watch_Conversation_UserInfo: String { return self._s[3311]! } public func Channel_AdminLog_MessageChangedGroupGeoLocation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3312]!, self._r[3312]!, [_0]) + return formatWithArgumentRanges(self._s[3315]!, self._r[3315]!, [_0]) } - public var State_Connecting: String { return self._s[3314]! } - public var Passport_Address_TypeTemporaryRegistration: String { return self._s[3315]! } - public var TextFormat_AddLinkPlaceholder: String { return self._s[3316]! } - public var Conversation_Dice_u1F3B2: String { return self._s[3317]! } + public var State_Connecting: String { return self._s[3317]! } + public var Passport_Address_TypeTemporaryRegistration: String { return self._s[3318]! } + public var TextFormat_AddLinkPlaceholder: String { return self._s[3319]! } + public var Conversation_Dice_u1F3B2: String { return self._s[3320]! } public func Call_StatusBar(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3318]!, self._r[3318]!, [_0]) + return formatWithArgumentRanges(self._s[3321]!, self._r[3321]!, [_0]) } - public var Conversation_SendingOptionsTooltip: String { return self._s[3319]! } - public var ChatList_UndoArchiveTitle: String { return self._s[3320]! } - public var ChatList_EmptyChatListNewMessage: String { return self._s[3321]! } - public var WallpaperSearch_ColorGreen: String { return self._s[3323]! } - public var PhotoEditor_BlurToolOff: String { return self._s[3324]! } - public var SocksProxySetup_PortPlaceholder: String { return self._s[3325]! } - public var Weekday_Saturday: String { return self._s[3326]! } - public var DialogList_Unread: String { return self._s[3327]! } - public var Watch_LastSeen_ALongTimeAgo: String { return self._s[3328]! } - public var Stats_GroupPosters: String { return self._s[3329]! } + public var Conversation_SendingOptionsTooltip: String { return self._s[3322]! } + public var ChatList_UndoArchiveTitle: String { return self._s[3323]! } + public var ChatList_EmptyChatListNewMessage: String { return self._s[3324]! } + public var WallpaperSearch_ColorGreen: String { return self._s[3326]! } + public var PhotoEditor_BlurToolOff: String { return self._s[3327]! } + public var SocksProxySetup_PortPlaceholder: String { return self._s[3328]! } + public var Weekday_Saturday: String { return self._s[3329]! } + public var DialogList_Unread: String { return self._s[3330]! } + public var Watch_LastSeen_ALongTimeAgo: String { return self._s[3331]! } + public var Stats_GroupPosters: String { return self._s[3332]! } public func PUSH_ENCRYPTION_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3330]!, self._r[3330]!, [_1]) + return formatWithArgumentRanges(self._s[3333]!, self._r[3333]!, [_1]) } public func Target_ShareGameConfirmationGroup(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3333]!, self._r[3333]!, [_0]) + return formatWithArgumentRanges(self._s[3336]!, self._r[3336]!, [_0]) } - public var ReportPeer_ReasonChildAbuse: String { return self._s[3334]! } + public var ReportPeer_ReasonChildAbuse: String { return self._s[3337]! } public func Channel_AdminLog_MessageUnkickedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3335]!, self._r[3335]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3338]!, self._r[3338]!, [_1, _2]) } - public var InfoPlist_NSContactsUsageDescription: String { return self._s[3336]! } - public var AutoNightTheme_UseSunsetSunrise: String { return self._s[3338]! } - public var Channel_OwnershipTransfer_ChangeOwner: String { return self._s[3339]! } - public var Call_VoiceOver_VoiceCallCanceled: String { return self._s[3340]! } - public var Passport_Language_dv: String { return self._s[3341]! } - public var GroupPermission_AddSuccess: String { return self._s[3343]! } - public var Passport_Email_Help: String { return self._s[3344]! } - public var Call_ReportPlaceholder: String { return self._s[3345]! } - public var CreatePoll_AddOption: String { return self._s[3346]! } - public var MessagePoll_LabelAnonymousQuiz: String { return self._s[3348]! } - public var PeerInfo_ButtonLeave: String { return self._s[3349]! } - public var PhotoEditor_TiltShift: String { return self._s[3352]! } - public var SecretGif_Title: String { return self._s[3354]! } - public var GroupInfo_InviteLinks: String { return self._s[3355]! } - public var PhotoEditor_QualityVeryLow: String { return self._s[3356]! } - public var SocksProxySetup_Connecting: String { return self._s[3357]! } - public var PrivacySettings_PasscodeAndFaceId: String { return self._s[3358]! } - public var ContactInfo_PhoneLabelWork: String { return self._s[3359]! } - public var Stats_GroupTopHoursTitle: String { return self._s[3360]! } - public var Compose_NewMessage: String { return self._s[3361]! } - public var VoiceOver_Common_SwitchHint: String { return self._s[3362]! } - public var NotificationsSound_Synth: String { return self._s[3363]! } - public var Conversation_FileOpenIn: String { return self._s[3364]! } - public var AutoDownloadSettings_WifiTitle: String { return self._s[3365]! } - public var UserInfo_SendMessage: String { return self._s[3366]! } - public var Checkout_PayWithFaceId: String { return self._s[3367]! } + public var InfoPlist_NSContactsUsageDescription: String { return self._s[3339]! } + public var AutoNightTheme_UseSunsetSunrise: String { return self._s[3341]! } + public var Channel_OwnershipTransfer_ChangeOwner: String { return self._s[3342]! } + public var Call_VoiceOver_VoiceCallCanceled: String { return self._s[3343]! } + public var Passport_Language_dv: String { return self._s[3344]! } + public var GroupPermission_AddSuccess: String { return self._s[3346]! } + public var Passport_Email_Help: String { return self._s[3347]! } + public var Call_ReportPlaceholder: String { return self._s[3348]! } + public var CreatePoll_AddOption: String { return self._s[3349]! } + public var MessagePoll_LabelAnonymousQuiz: String { return self._s[3351]! } + public var PeerInfo_ButtonLeave: String { return self._s[3352]! } + public var PhotoEditor_TiltShift: String { return self._s[3355]! } + public var SecretGif_Title: String { return self._s[3357]! } + public var GroupInfo_InviteLinks: String { return self._s[3358]! } + public var PhotoEditor_QualityVeryLow: String { return self._s[3359]! } + public var SocksProxySetup_Connecting: String { return self._s[3360]! } + public var PrivacySettings_PasscodeAndFaceId: String { return self._s[3361]! } + public var ContactInfo_PhoneLabelWork: String { return self._s[3362]! } + public var Stats_GroupTopHoursTitle: String { return self._s[3363]! } + public var Compose_NewMessage: String { return self._s[3364]! } + public var VoiceOver_Common_SwitchHint: String { return self._s[3365]! } + public var NotificationsSound_Synth: String { return self._s[3366]! } + public var Conversation_FileOpenIn: String { return self._s[3367]! } + public var AutoDownloadSettings_WifiTitle: String { return self._s[3368]! } + public var UserInfo_SendMessage: String { return self._s[3369]! } + public var Checkout_PayWithFaceId: String { return self._s[3370]! } public func Map_LiveLocationShortHour(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3368]!, self._r[3368]!, [_0]) + return formatWithArgumentRanges(self._s[3371]!, self._r[3371]!, [_0]) } - public var TextFormat_Strikethrough: String { return self._s[3369]! } - public var SettingsSearch_Synonyms_Notifications_DisplayNamesOnLockScreen: String { return self._s[3370]! } - public var Conversation_ViewChannel: String { return self._s[3371]! } + public var TextFormat_Strikethrough: String { return self._s[3372]! } + public var SettingsSearch_Synonyms_Notifications_DisplayNamesOnLockScreen: String { return self._s[3373]! } + public var Conversation_ViewChannel: String { return self._s[3374]! } public func Message_ForwardedMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3372]!, self._r[3372]!, [_0]) + return formatWithArgumentRanges(self._s[3375]!, self._r[3375]!, [_0]) } - public var Channel_Stickers_Placeholder: String { return self._s[3373]! } - public var Channel_OwnershipTransfer_PasswordPlaceholder: String { return self._s[3374]! } - public var Camera_FlashAuto: String { return self._s[3375]! } - public var Conversation_EncryptedDescription1: String { return self._s[3376]! } - public var LocalGroup_Text: String { return self._s[3377]! } - public var SettingsSearch_Synonyms_Data_Storage_KeepMedia: String { return self._s[3378]! } - public var UserInfo_FirstNamePlaceholder: String { return self._s[3379]! } - public var Conversation_SendMessageErrorFlood: String { return self._s[3380]! } - public var Conversation_EncryptedDescription2: String { return self._s[3381]! } - public var Notification_GroupActivated: String { return self._s[3382]! } - public var LastSeen_Lately: String { return self._s[3383]! } - public var Conversation_EncryptedDescription3: String { return self._s[3384]! } - public var SettingsSearch_Synonyms_Privacy_ProfilePhoto: String { return self._s[3385]! } - public var Conversation_SwipeToReplyHintText: String { return self._s[3386]! } - public var Conversation_EncryptedDescription4: String { return self._s[3387]! } - public var SharedMedia_EmptyTitle: String { return self._s[3388]! } - public var Appearance_CreateTheme: String { return self._s[3389]! } - public var Stats_SharesPerPost: String { return self._s[3390]! } - public var Contacts_TabTitle: String { return self._s[3391]! } - public var Weekday_ShortThursday: String { return self._s[3392]! } - public var MessageTimer_Forever: String { return self._s[3393]! } - public var ChatListFolder_CategoryArchived: String { return self._s[3394]! } - public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[3395]! } - public var EditTheme_Create_TopInfo: String { return self._s[3397]! } - public var Month_GenDecember: String { return self._s[3398]! } - public var EnterPasscode_EnterPasscode: String { return self._s[3399]! } - public var SettingsSearch_Synonyms_Appearance_LargeEmoji: String { return self._s[3400]! } - public var PeopleNearby_CreateGroup: String { return self._s[3402]! } - public var Group_EditAdmin_PermissionChangeInfo: String { return self._s[3403]! } - public var Paint_ClearConfirm: String { return self._s[3404]! } - public var ChatList_ReadAll: String { return self._s[3405]! } - public var ChatSettings_IntentsSettings: String { return self._s[3406]! } - public var Passport_PassportInformation: String { return self._s[3408]! } - public var Login_CheckOtherSessionMessages: String { return self._s[3410]! } - public var Location_ProximityNotification_DistanceMI: String { return self._s[3413]! } - public var PhotoEditor_ExposureTool: String { return self._s[3414]! } - public var Group_Username_CreatePrivateLinkHelp: String { return self._s[3415]! } - public var SettingsSearch_Synonyms_Watch: String { return self._s[3416]! } - public var Stats_GroupTopPoster_History: String { return self._s[3417]! } - public var UserInfo_AddPhone: String { return self._s[3418]! } - public var Media_SendWithTimer: String { return self._s[3420]! } - public var SettingsSearch_Synonyms_Notifications_Title: String { return self._s[3421]! } - public var Channel_EditAdmin_PermissionEnabledByDefault: String { return self._s[3422]! } - public var PasscodeSettings_AutoLock_Disabled: String { return self._s[3423]! } - public var ChatList_Context_Unarchive: String { return self._s[3425]! } + public var Channel_Stickers_Placeholder: String { return self._s[3376]! } + public var Channel_OwnershipTransfer_PasswordPlaceholder: String { return self._s[3377]! } + public var Camera_FlashAuto: String { return self._s[3378]! } + public var Conversation_EncryptedDescription1: String { return self._s[3379]! } + public var LocalGroup_Text: String { return self._s[3380]! } + public var SettingsSearch_Synonyms_Data_Storage_KeepMedia: String { return self._s[3381]! } + public var UserInfo_FirstNamePlaceholder: String { return self._s[3382]! } + public var Conversation_SendMessageErrorFlood: String { return self._s[3383]! } + public var Conversation_EncryptedDescription2: String { return self._s[3384]! } + public var Notification_GroupActivated: String { return self._s[3385]! } + public var LastSeen_Lately: String { return self._s[3386]! } + public var Conversation_EncryptedDescription3: String { return self._s[3387]! } + public var SettingsSearch_Synonyms_Privacy_ProfilePhoto: String { return self._s[3388]! } + public var Conversation_SwipeToReplyHintText: String { return self._s[3389]! } + public var Conversation_EncryptedDescription4: String { return self._s[3390]! } + public var SharedMedia_EmptyTitle: String { return self._s[3391]! } + public var Appearance_CreateTheme: String { return self._s[3392]! } + public var Stats_SharesPerPost: String { return self._s[3393]! } + public var Contacts_TabTitle: String { return self._s[3394]! } + public var Weekday_ShortThursday: String { return self._s[3395]! } + public var MessageTimer_Forever: String { return self._s[3396]! } + public var ChatListFolder_CategoryArchived: String { return self._s[3397]! } + public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[3398]! } + public var EditTheme_Create_TopInfo: String { return self._s[3400]! } + public var Month_GenDecember: String { return self._s[3401]! } + public var EnterPasscode_EnterPasscode: String { return self._s[3402]! } + public var SettingsSearch_Synonyms_Appearance_LargeEmoji: String { return self._s[3403]! } + public var PeopleNearby_CreateGroup: String { return self._s[3405]! } + public var Group_EditAdmin_PermissionChangeInfo: String { return self._s[3406]! } + public var Paint_ClearConfirm: String { return self._s[3407]! } + public var ChatList_ReadAll: String { return self._s[3408]! } + public var ChatSettings_IntentsSettings: String { return self._s[3409]! } + public var Passport_PassportInformation: String { return self._s[3411]! } + public var Login_CheckOtherSessionMessages: String { return self._s[3413]! } + public var Location_ProximityNotification_DistanceMI: String { return self._s[3416]! } + public var PhotoEditor_ExposureTool: String { return self._s[3417]! } + public var Group_Username_CreatePrivateLinkHelp: String { return self._s[3418]! } + public var SettingsSearch_Synonyms_Watch: String { return self._s[3419]! } + public var Stats_GroupTopPoster_History: String { return self._s[3420]! } + public var UserInfo_AddPhone: String { return self._s[3421]! } + public var Media_SendWithTimer: String { return self._s[3423]! } + public var SettingsSearch_Synonyms_Notifications_Title: String { return self._s[3424]! } + public var Channel_EditAdmin_PermissionEnabledByDefault: String { return self._s[3425]! } + public var PasscodeSettings_AutoLock_Disabled: String { return self._s[3426]! } + public var ChatList_Context_Unarchive: String { return self._s[3428]! } public func DialogList_LiveLocationSharingTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3426]!, self._r[3426]!, [_0]) + return formatWithArgumentRanges(self._s[3429]!, self._r[3429]!, [_0]) } - public var BlockedUsers_Title: String { return self._s[3428]! } - public var TwoStepAuth_EmailPlaceholder: String { return self._s[3429]! } - public var Media_ShareThisPhoto: String { return self._s[3430]! } - public var Notifications_DisplayNamesOnLockScreen: String { return self._s[3431]! } - public var Conversation_FilePhotoOrVideo: String { return self._s[3432]! } - public var Appearance_ThemePreview_Chat_2_ReplyName: String { return self._s[3436]! } - public var CallFeedback_ReasonNoise: String { return self._s[3438]! } - public var WebBrowser_Title: String { return self._s[3439]! } + public var BlockedUsers_Title: String { return self._s[3431]! } + public var TwoStepAuth_EmailPlaceholder: String { return self._s[3432]! } + public var Media_ShareThisPhoto: String { return self._s[3433]! } + public var Notifications_DisplayNamesOnLockScreen: String { return self._s[3434]! } + public var Conversation_FilePhotoOrVideo: String { return self._s[3435]! } + public var Appearance_ThemePreview_Chat_2_ReplyName: String { return self._s[3439]! } + public var CallFeedback_ReasonNoise: String { return self._s[3441]! } + public var WebBrowser_Title: String { return self._s[3442]! } public func Checkout_SavePasswordTimeoutAndTouchId(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3440]!, self._r[3440]!, [_0]) + return formatWithArgumentRanges(self._s[3443]!, self._r[3443]!, [_0]) } - public var Notification_MessageLifetime5s: String { return self._s[3442]! } - public var Passport_Address_AddResidentialAddress: String { return self._s[3443]! } - public var Profile_MessageLifetime1m: String { return self._s[3445]! } - public var Passport_ScanPassport: String { return self._s[3446]! } - public var Stats_LoadingTitle: String { return self._s[3447]! } - public var Passport_Address_AddTemporaryRegistration: String { return self._s[3449]! } - public var Permissions_NotificationsAllow_v0: String { return self._s[3450]! } - public var Login_InvalidFirstNameError: String { return self._s[3451]! } - public var Undo_ChatCleared: String { return self._s[3453]! } + public var Notification_MessageLifetime5s: String { return self._s[3445]! } + public var Passport_Address_AddResidentialAddress: String { return self._s[3446]! } + public var Profile_MessageLifetime1m: String { return self._s[3448]! } + public var Passport_ScanPassport: String { return self._s[3449]! } + public var Stats_LoadingTitle: String { return self._s[3450]! } + public var Passport_Address_AddTemporaryRegistration: String { return self._s[3452]! } + public var Permissions_NotificationsAllow_v0: String { return self._s[3453]! } + public var Login_InvalidFirstNameError: String { return self._s[3454]! } + public var Undo_ChatCleared: String { return self._s[3456]! } public func ApplyLanguage_ChangeLanguageUnofficialText(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3455]!, self._r[3455]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3458]!, self._r[3458]!, [_1, _2]) } - public var Conversation_PinMessageAlertPin: String { return self._s[3456]! } + public var Conversation_PinMessageAlertPin: String { return self._s[3459]! } public func Login_PhoneBannedEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3457]!, self._r[3457]!, [_1, _2, _3, _4, _5]) + return formatWithArgumentRanges(self._s[3460]!, self._r[3460]!, [_1, _2, _3, _4, _5]) } public func PUSH_MESSAGE_FWD(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3458]!, self._r[3458]!, [_1]) + return formatWithArgumentRanges(self._s[3461]!, self._r[3461]!, [_1]) } - public var Share_MultipleMessagesDisabled: String { return self._s[3459]! } - public var TwoStepAuth_EmailInvalid: String { return self._s[3460]! } - public var EnterPasscode_ChangeTitle: String { return self._s[3462]! } - public var CallSettings_RecentCalls: String { return self._s[3463]! } - public var GroupInfo_DeactivatedStatus: String { return self._s[3464]! } - public var AuthSessions_OtherSessions: String { return self._s[3465]! } - public var PrivacyLastSeenSettings_CustomHelp: String { return self._s[3466]! } - public var Tour_Text5: String { return self._s[3467]! } - public var Login_PadPhoneHelp: String { return self._s[3468]! } - public var Wallpaper_PhotoLibrary: String { return self._s[3470]! } - public var Conversation_ViewGroup: String { return self._s[3471]! } - public var PeopleNearby_MakeVisibleTitle: String { return self._s[3473]! } - public var VoiceOver_Chat_YourContact: String { return self._s[3474]! } - public var Watch_AuthRequired: String { return self._s[3475]! } - public var VoiceOver_Chat_ForwardedFromYou: String { return self._s[3476]! } - public var Conversation_ForwardContacts: String { return self._s[3477]! } - public var Conversation_InputTextPlaceholder: String { return self._s[3478]! } + public var Share_MultipleMessagesDisabled: String { return self._s[3462]! } + public var TwoStepAuth_EmailInvalid: String { return self._s[3463]! } + public var EnterPasscode_ChangeTitle: String { return self._s[3465]! } + public var CallSettings_RecentCalls: String { return self._s[3466]! } + public var GroupInfo_DeactivatedStatus: String { return self._s[3467]! } + public var AuthSessions_OtherSessions: String { return self._s[3468]! } + public var PrivacyLastSeenSettings_CustomHelp: String { return self._s[3469]! } + public var Tour_Text5: String { return self._s[3470]! } + public var Login_PadPhoneHelp: String { return self._s[3471]! } + public var Wallpaper_PhotoLibrary: String { return self._s[3473]! } + public var Conversation_ViewGroup: String { return self._s[3474]! } + public var PeopleNearby_MakeVisibleTitle: String { return self._s[3476]! } + public var VoiceOver_Chat_YourContact: String { return self._s[3477]! } + public var Watch_AuthRequired: String { return self._s[3478]! } + public var VoiceOver_Chat_ForwardedFromYou: String { return self._s[3479]! } + public var Conversation_ForwardContacts: String { return self._s[3480]! } + public var Conversation_InputTextPlaceholder: String { return self._s[3481]! } public func PUSH_CHANNEL_MESSAGE_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3479]!, self._r[3479]!, [_1]) + return formatWithArgumentRanges(self._s[3482]!, self._r[3482]!, [_1]) } public func Conversation_MessageViaUser(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3480]!, self._r[3480]!, [_0]) + return formatWithArgumentRanges(self._s[3483]!, self._r[3483]!, [_0]) } - public var Channel_Setup_TypePrivate: String { return self._s[3481]! } + public var Channel_Setup_TypePrivate: String { return self._s[3484]! } public func Conversation_NoticeInvitedByInChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3482]!, self._r[3482]!, [_0]) + return formatWithArgumentRanges(self._s[3485]!, self._r[3485]!, [_0]) } - public var InviteLink_Create_TimeLimitExpiryDate: String { return self._s[3483]! } - public var InfoPlist_NSSiriUsageDescription: String { return self._s[3484]! } - public var AutoDownloadSettings_Delimeter: String { return self._s[3485]! } - public var EmptyGroupInfo_Subtitle: String { return self._s[3486]! } - public var UserInfo_StartSecretChatStart: String { return self._s[3487]! } + public var InviteLink_Create_TimeLimitExpiryDate: String { return self._s[3486]! } + public var InfoPlist_NSSiriUsageDescription: String { return self._s[3487]! } + public var AutoDownloadSettings_Delimeter: String { return self._s[3488]! } + public var EmptyGroupInfo_Subtitle: String { return self._s[3489]! } + public var UserInfo_StartSecretChatStart: String { return self._s[3490]! } public func GroupPermission_AddedInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3488]!, self._r[3488]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3491]!, self._r[3491]!, [_1, _2]) } public func Channel_AdminLog_MessageRestricted(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3489]!, self._r[3489]!, [_0, _1, _2]) + return formatWithArgumentRanges(self._s[3492]!, self._r[3492]!, [_0, _1, _2]) } - public var PrivacySettings_AutoArchiveTitle: String { return self._s[3490]! } - public var GroupInfo_InviteLink_LinkSection: String { return self._s[3491]! } - public var FastTwoStepSetup_EmailPlaceholder: String { return self._s[3492]! } - public var StickerPacksSettings_ArchivedMasks: String { return self._s[3494]! } - public var NewContact_Title: String { return self._s[3497]! } - public var Appearance_ThemeCarouselTintedNight: String { return self._s[3498]! } - public var VoiceChat_StatusSpeaking: String { return self._s[3499]! } - public var Notifications_PermissionsKeepDisabled: String { return self._s[3500]! } + public var PrivacySettings_AutoArchiveTitle: String { return self._s[3493]! } + public var GroupInfo_InviteLink_LinkSection: String { return self._s[3494]! } + public var FastTwoStepSetup_EmailPlaceholder: String { return self._s[3495]! } + public var StickerPacksSettings_ArchivedMasks: String { return self._s[3497]! } + public var NewContact_Title: String { return self._s[3500]! } + public var Appearance_ThemeCarouselTintedNight: String { return self._s[3501]! } + public var VoiceChat_StatusSpeaking: String { return self._s[3502]! } + public var Notifications_PermissionsKeepDisabled: String { return self._s[3503]! } public func Time_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3501]!, self._r[3501]!, [_0]) + return formatWithArgumentRanges(self._s[3504]!, self._r[3504]!, [_0]) } public func AutoNightTheme_LocationHelp(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3502]!, self._r[3502]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3505]!, self._r[3505]!, [_0, _1]) } - public var Chat_SlowmodeTooltipPending: String { return self._s[3503]! } - public var CallFeedback_ReasonInterruption: String { return self._s[3505]! } - public var ContactInfo_PhoneLabelHome: String { return self._s[3506]! } - public var Passport_Identity_OneOfTypeDriversLicense: String { return self._s[3507]! } + public var Chat_SlowmodeTooltipPending: String { return self._s[3506]! } + public var CallFeedback_ReasonInterruption: String { return self._s[3508]! } + public var ContactInfo_PhoneLabelHome: String { return self._s[3509]! } + public var Passport_Identity_OneOfTypeDriversLicense: String { return self._s[3510]! } public func PUSH_MESSAGE_DOCS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3509]!, self._r[3509]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[3512]!, self._r[3512]!, [_1, "\(_2)"]) } - public var Conversation_MessageEditedLabel: String { return self._s[3510]! } - public var CallList_ActiveVoiceChatsHeader: String { return self._s[3511]! } - public var SocksProxySetup_PasswordPlaceholder: String { return self._s[3512]! } - public var ChatList_Context_AddToContacts: String { return self._s[3513]! } - public var Passport_Language_is: String { return self._s[3514]! } - public var Notification_PassportValueProofOfIdentity: String { return self._s[3515]! } - public var PhotoEditor_CurvesBlue: String { return self._s[3516]! } + public var Conversation_MessageEditedLabel: String { return self._s[3513]! } + public var CallList_ActiveVoiceChatsHeader: String { return self._s[3514]! } + public var SocksProxySetup_PasswordPlaceholder: String { return self._s[3515]! } + public var ChatList_Context_AddToContacts: String { return self._s[3516]! } + public var Passport_Language_is: String { return self._s[3517]! } + public var Notification_PassportValueProofOfIdentity: String { return self._s[3518]! } + public var PhotoEditor_CurvesBlue: String { return self._s[3519]! } public func FileSize_MB(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3517]!, self._r[3517]!, [_0]) + return formatWithArgumentRanges(self._s[3520]!, self._r[3520]!, [_0]) } - public var SocksProxySetup_Username: String { return self._s[3518]! } - public var Login_SmsRequestState3: String { return self._s[3519]! } - public var Message_PinnedVideoMessage: String { return self._s[3520]! } - public var SharedMedia_TitleLink: String { return self._s[3521]! } - public var Passport_FieldIdentity: String { return self._s[3522]! } + public var SocksProxySetup_Username: String { return self._s[3521]! } + public var Login_SmsRequestState3: String { return self._s[3522]! } + public var Message_PinnedVideoMessage: String { return self._s[3523]! } + public var SharedMedia_TitleLink: String { return self._s[3524]! } + public var Passport_FieldIdentity: String { return self._s[3525]! } public func Conversation_EncryptedPlaceholderTitleOutgoing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3526]!, self._r[3526]!, [_0]) + return formatWithArgumentRanges(self._s[3529]!, self._r[3529]!, [_0]) } - public var DialogList_ProxyConnectionIssuesTooltip: String { return self._s[3529]! } - public var ReportSpam_DeleteThisChat: String { return self._s[3530]! } - public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[3531]! } - public var Passport_Identity_DateOfBirth: String { return self._s[3532]! } - public var Call_StatusIncoming: String { return self._s[3533]! } - public var ChatAdmins_AdminLabel: String { return self._s[3534]! } + public var DialogList_ProxyConnectionIssuesTooltip: String { return self._s[3532]! } + public var ReportSpam_DeleteThisChat: String { return self._s[3533]! } + public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[3534]! } + public var Passport_Identity_DateOfBirth: String { return self._s[3535]! } + public var Call_StatusIncoming: String { return self._s[3536]! } + public var ChatAdmins_AdminLabel: String { return self._s[3537]! } public func Time_MonthOfYear_m10(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3536]!, self._r[3536]!, [_0]) + return formatWithArgumentRanges(self._s[3539]!, self._r[3539]!, [_0]) } - public var Message_PinnedAnimationMessage: String { return self._s[3537]! } - public var Conversation_ReportSpamAndLeave: String { return self._s[3538]! } - public var Preview_CopyAddress: String { return self._s[3539]! } - public var MediaPlayer_UnknownTrack: String { return self._s[3540]! } - public var Login_CancelSignUpConfirmation: String { return self._s[3541]! } - public var Map_OpenInYandexMaps: String { return self._s[3543]! } + public var Message_PinnedAnimationMessage: String { return self._s[3540]! } + public var Conversation_ReportSpamAndLeave: String { return self._s[3541]! } + public var Preview_CopyAddress: String { return self._s[3542]! } + public var MediaPlayer_UnknownTrack: String { return self._s[3543]! } + public var Login_CancelSignUpConfirmation: String { return self._s[3544]! } + public var Map_OpenInYandexMaps: String { return self._s[3546]! } public func Time_PreciseDate_m11(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3546]!, self._r[3546]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3549]!, self._r[3549]!, [_1, _2, _3]) } - public var GroupRemoved_Remove: String { return self._s[3547]! } - public var ChatListFolder_TitleCreate: String { return self._s[3548]! } + public var GroupRemoved_Remove: String { return self._s[3550]! } + public var ChatListFolder_TitleCreate: String { return self._s[3551]! } public func InstantPage_AuthorAndDateTitle(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3550]!, self._r[3550]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3553]!, self._r[3553]!, [_1, _2]) } - public var Watch_UserInfo_MuteTitle: String { return self._s[3551]! } - public var Group_UpgradeNoticeText2: String { return self._s[3553]! } - public var Stats_GroupGrowthTitle: String { return self._s[3554]! } - public var CreatePoll_CancelConfirmation: String { return self._s[3557]! } - public var Month_GenOctober: String { return self._s[3558]! } - public var Conversation_TitleCommentsEmpty: String { return self._s[3559]! } - public var Settings_Appearance: String { return self._s[3560]! } + public var Watch_UserInfo_MuteTitle: String { return self._s[3554]! } + public var Group_UpgradeNoticeText2: String { return self._s[3556]! } + public var Stats_GroupGrowthTitle: String { return self._s[3557]! } + public var CreatePoll_CancelConfirmation: String { return self._s[3560]! } + public var Month_GenOctober: String { return self._s[3561]! } + public var Conversation_TitleCommentsEmpty: String { return self._s[3562]! } + public var Settings_Appearance: String { return self._s[3563]! } public func Time_MonthOfYear_m6(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3561]!, self._r[3561]!, [_0]) + return formatWithArgumentRanges(self._s[3564]!, self._r[3564]!, [_0]) } - public var UserInfo_AddToExisting: String { return self._s[3562]! } - public var Call_PhoneCallInProgressMessage: String { return self._s[3563]! } - public var Map_HomeAndWorkInfo: String { return self._s[3564]! } - public var Paint_Arrow: String { return self._s[3565]! } - public var InviteLink_CreatePrivateLinkHelp: String { return self._s[3566]! } + public var UserInfo_AddToExisting: String { return self._s[3565]! } + public var Call_PhoneCallInProgressMessage: String { return self._s[3566]! } + public var Map_HomeAndWorkInfo: String { return self._s[3567]! } + public var Paint_Arrow: String { return self._s[3568]! } + public var InviteLink_CreatePrivateLinkHelp: String { return self._s[3569]! } public func DialogList_MultipleTypingPair(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3567]!, self._r[3567]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3570]!, self._r[3570]!, [_0, _1]) } - public var CancelResetAccount_Title: String { return self._s[3568]! } - public var NotificationsSound_Circles: String { return self._s[3569]! } - public var Notifications_GroupNotificationsExceptionsHelp: String { return self._s[3570]! } - public var ChatState_Connecting: String { return self._s[3572]! } - public var Profile_MessageLifetime5s: String { return self._s[3573]! } + public var CancelResetAccount_Title: String { return self._s[3571]! } + public var NotificationsSound_Circles: String { return self._s[3572]! } + public var Notifications_GroupNotificationsExceptionsHelp: String { return self._s[3573]! } + public var ChatState_Connecting: String { return self._s[3575]! } + public var Profile_MessageLifetime5s: String { return self._s[3576]! } public func DialogList_AwaitingEncryption(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3574]!, self._r[3574]!, [_0]) + return formatWithArgumentRanges(self._s[3577]!, self._r[3577]!, [_0]) } - public var PrivacyPolicy_AgeVerificationTitle: String { return self._s[3575]! } - public var Channel_Username_CreatePublicLinkHelp: String { return self._s[3576]! } - public var AutoNightTheme_ScheduledTo: String { return self._s[3577]! } - public var Conversation_DefaultRestrictedStickers: String { return self._s[3578]! } - public var TwoStepAuth_ConfirmationTitle: String { return self._s[3579]! } + public var PrivacyPolicy_AgeVerificationTitle: String { return self._s[3578]! } + public var Channel_Username_CreatePublicLinkHelp: String { return self._s[3579]! } + public var AutoNightTheme_ScheduledTo: String { return self._s[3580]! } + public var Conversation_DefaultRestrictedStickers: String { return self._s[3581]! } + public var TwoStepAuth_ConfirmationTitle: String { return self._s[3582]! } public func Chat_UnsendMyMessagesAlertTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3580]!, self._r[3580]!, [_0]) + return formatWithArgumentRanges(self._s[3583]!, self._r[3583]!, [_0]) } - public var Passport_Phone_Help: String { return self._s[3581]! } - public var Privacy_ContactsSync: String { return self._s[3582]! } - public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[3583]! } - public var Channel_AdminLogFilter_EventsLeavingSubscribers: String { return self._s[3584]! } - public var Map_SendMyCurrentLocation: String { return self._s[3585]! } - public var Map_AddressOnMap: String { return self._s[3586]! } - public var DialogList_SearchLabel: String { return self._s[3588]! } - public var Notification_Exceptions_NewException_NotificationHeader: String { return self._s[3589]! } - public var Conversation_ChecksTooltip_Read: String { return self._s[3590]! } - public var ConversationProfile_UnknownAddMemberError: String { return self._s[3591]! } - public var ChatList_Search_ShowMore: String { return self._s[3592]! } - public var DialogList_EncryptionRejected: String { return self._s[3593]! } - public var VoiceChat_InviteLinkCopiedText: String { return self._s[3594]! } - public var DialogList_DeleteBotConfirmation: String { return self._s[3595]! } - public var VoiceChat_StartRecordingText: String { return self._s[3596]! } - public var Privacy_TopPeersDelete: String { return self._s[3597]! } - public var AttachmentMenu_SendAsFile: String { return self._s[3599]! } - public var ChatList_GenericPsaAlert: String { return self._s[3601]! } - public var SecretTimer_ImageDescription: String { return self._s[3603]! } + public var Passport_Phone_Help: String { return self._s[3584]! } + public var Privacy_ContactsSync: String { return self._s[3585]! } + public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[3586]! } + public var Channel_AdminLogFilter_EventsLeavingSubscribers: String { return self._s[3587]! } + public var Map_SendMyCurrentLocation: String { return self._s[3588]! } + public var Map_AddressOnMap: String { return self._s[3589]! } + public var DialogList_SearchLabel: String { return self._s[3591]! } + public var Notification_Exceptions_NewException_NotificationHeader: String { return self._s[3592]! } + public var Conversation_ChecksTooltip_Read: String { return self._s[3593]! } + public var ConversationProfile_UnknownAddMemberError: String { return self._s[3594]! } + public var ChatList_Search_ShowMore: String { return self._s[3595]! } + public var DialogList_EncryptionRejected: String { return self._s[3596]! } + public var VoiceChat_InviteLinkCopiedText: String { return self._s[3597]! } + public var DialogList_DeleteBotConfirmation: String { return self._s[3598]! } + public var VoiceChat_StartRecordingText: String { return self._s[3599]! } + public var Privacy_TopPeersDelete: String { return self._s[3600]! } + public var AttachmentMenu_SendAsFile: String { return self._s[3602]! } + public var ChatList_GenericPsaAlert: String { return self._s[3604]! } + public var SecretTimer_ImageDescription: String { return self._s[3606]! } public func Conversation_SetReminder_RemindOn(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3604]!, self._r[3604]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3607]!, self._r[3607]!, [_0, _1]) } - public var ChatSettings_TextSizeUnits: String { return self._s[3605]! } - public var Notification_RenamedGroup: String { return self._s[3606]! } - public var Tour_Title2: String { return self._s[3607]! } - public var Settings_CopyUsername: String { return self._s[3608]! } - public var Compose_NewEncryptedChat: String { return self._s[3609]! } - public var Conversation_CloudStorageInfo_Title: String { return self._s[3610]! } - public var Month_ShortSeptember: String { return self._s[3611]! } - public var AutoDownloadSettings_OnForAll: String { return self._s[3612]! } - public var ChatList_DeleteForEveryoneConfirmationText: String { return self._s[3613]! } - public var Call_StatusConnecting: String { return self._s[3615]! } - public var Privacy_GroupsAndChannels_NeverAllow_Placeholder: String { return self._s[3616]! } - public var Map_ShareLiveLocationHelp: String { return self._s[3617]! } - public var Cache_Files: String { return self._s[3618]! } - public var Notifications_Reset: String { return self._s[3619]! } + public var ChatSettings_TextSizeUnits: String { return self._s[3608]! } + public var Notification_RenamedGroup: String { return self._s[3609]! } + public var Tour_Title2: String { return self._s[3610]! } + public var Settings_CopyUsername: String { return self._s[3611]! } + public var Compose_NewEncryptedChat: String { return self._s[3612]! } + public var Conversation_CloudStorageInfo_Title: String { return self._s[3613]! } + public var Month_ShortSeptember: String { return self._s[3614]! } + public var AutoDownloadSettings_OnForAll: String { return self._s[3615]! } + public var ChatList_DeleteForEveryoneConfirmationText: String { return self._s[3616]! } + public var Call_StatusConnecting: String { return self._s[3618]! } + public var Privacy_GroupsAndChannels_NeverAllow_Placeholder: String { return self._s[3619]! } + public var Map_ShareLiveLocationHelp: String { return self._s[3620]! } + public var Cache_Files: String { return self._s[3621]! } + public var Notifications_Reset: String { return self._s[3622]! } public func Settings_KeepPhoneNumber(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3620]!, self._r[3620]!, [_0]) + return formatWithArgumentRanges(self._s[3623]!, self._r[3623]!, [_0]) } - public var Privacy_GroupsAndChannels_AlwaysAllow_Title: String { return self._s[3621]! } + public var Privacy_GroupsAndChannels_AlwaysAllow_Title: String { return self._s[3624]! } public func Conversation_OpenBotLinkLogin(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3622]!, self._r[3622]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3625]!, self._r[3625]!, [_1, _2]) } - public var Notification_CallIncomingShort: String { return self._s[3623]! } - public var UserInfo_BotPrivacy: String { return self._s[3625]! } - public var Appearance_BubbleCorners_Apply: String { return self._s[3626]! } - public var WebSearch_RecentClearConfirmation: String { return self._s[3627]! } - public var Conversation_ContextMenuLookUp: String { return self._s[3628]! } - public var Calls_RatingTitle: String { return self._s[3629]! } - public var SecretImage_Title: String { return self._s[3630]! } - public var Weekday_Monday: String { return self._s[3631]! } + public var Notification_CallIncomingShort: String { return self._s[3626]! } + public var UserInfo_BotPrivacy: String { return self._s[3628]! } + public var Appearance_BubbleCorners_Apply: String { return self._s[3629]! } + public var WebSearch_RecentClearConfirmation: String { return self._s[3630]! } + public var Conversation_ContextMenuLookUp: String { return self._s[3631]! } + public var Calls_RatingTitle: String { return self._s[3632]! } + public var SecretImage_Title: String { return self._s[3633]! } + public var Weekday_Monday: String { return self._s[3634]! } public func Passport_PrivacyPolicy(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3632]!, self._r[3632]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3635]!, self._r[3635]!, [_1, _2]) } - public var KeyCommand_JumpToPreviousChat: String { return self._s[3633]! } + public var KeyCommand_JumpToPreviousChat: String { return self._s[3636]! } public func DialogList_SearchSubtitleFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3634]!, self._r[3634]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3637]!, self._r[3637]!, [_1, _2]) } - public var Stats_GroupMembers: String { return self._s[3635]! } - public var Camera_Retake: String { return self._s[3636]! } - public var Conversation_SearchPlaceholder: String { return self._s[3638]! } + public var Stats_GroupMembers: String { return self._s[3638]! } + public var Camera_Retake: String { return self._s[3639]! } + public var Conversation_SearchPlaceholder: String { return self._s[3641]! } public func Passport_Identity_NativeNameGenericHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3639]!, self._r[3639]!, [_0]) + return formatWithArgumentRanges(self._s[3642]!, self._r[3642]!, [_0]) } - public var Channel_DiscussionGroup_Info: String { return self._s[3640]! } - public var SocksProxySetup_Hostname: String { return self._s[3641]! } - public var PrivacyLastSeenSettings_EmpryUsersPlaceholder: String { return self._s[3642]! } - public var Privacy_DeleteDrafts: String { return self._s[3644]! } + public var Channel_DiscussionGroup_Info: String { return self._s[3643]! } + public var SocksProxySetup_Hostname: String { return self._s[3644]! } + public var PrivacyLastSeenSettings_EmpryUsersPlaceholder: String { return self._s[3645]! } + public var Privacy_DeleteDrafts: String { return self._s[3647]! } public func Checkout_LiabilityAlert(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3645]!, self._r[3645]!, [_1, _1, _1, _2]) + return formatWithArgumentRanges(self._s[3648]!, self._r[3648]!, [_1, _1, _1, _2]) } - public var Login_CancelPhoneVerification: String { return self._s[3647]! } - public var TwoStepAuth_ResetAccountHelp: String { return self._s[3648]! } + public var Login_CancelPhoneVerification: String { return self._s[3650]! } + public var TwoStepAuth_ResetAccountHelp: String { return self._s[3651]! } public func SocksProxySetup_ProxyStatusPing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3649]!, self._r[3649]!, [_0]) + return formatWithArgumentRanges(self._s[3652]!, self._r[3652]!, [_0]) } - public var TwoStepAuth_EmailSent: String { return self._s[3650]! } - public var Cache_Indexing: String { return self._s[3651]! } - public var Notifications_ExceptionsNone: String { return self._s[3652]! } - public var MessagePoll_LabelQuiz: String { return self._s[3653]! } - public var Call_EncryptionKey_Title: String { return self._s[3654]! } - public var Common_Yes: String { return self._s[3655]! } - public var Channel_ErrorAddBlocked: String { return self._s[3656]! } - public var Month_GenJanuary: String { return self._s[3657]! } - public var Checkout_NewCard_Title: String { return self._s[3658]! } + public var TwoStepAuth_EmailSent: String { return self._s[3653]! } + public var Cache_Indexing: String { return self._s[3654]! } + public var Notifications_ExceptionsNone: String { return self._s[3655]! } + public var MessagePoll_LabelQuiz: String { return self._s[3656]! } + public var Call_EncryptionKey_Title: String { return self._s[3657]! } + public var Common_Yes: String { return self._s[3658]! } + public var Channel_ErrorAddBlocked: String { return self._s[3659]! } + public var Month_GenJanuary: String { return self._s[3660]! } + public var Checkout_NewCard_Title: String { return self._s[3661]! } public func TwoStepAuth_EnterPasswordHint(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3659]!, self._r[3659]!, [_0]) + return formatWithArgumentRanges(self._s[3662]!, self._r[3662]!, [_0]) } - public var Conversation_InputTextPlaceholderReply: String { return self._s[3661]! } - public var PasscodeSettings_AutoLock_IfAwayFor_1hour: String { return self._s[3662]! } - public var Conversation_SendDice: String { return self._s[3663]! } + public var Conversation_InputTextPlaceholderReply: String { return self._s[3664]! } + public var PasscodeSettings_AutoLock_IfAwayFor_1hour: String { return self._s[3665]! } + public var Conversation_SendDice: String { return self._s[3666]! } public func ChatSettings_AutoDownloadSettings_TypeVideo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3664]!, self._r[3664]!, [_0]) + return formatWithArgumentRanges(self._s[3667]!, self._r[3667]!, [_0]) } public func VoiceOver_Chat_VideoFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3665]!, self._r[3665]!, [_0]) + return formatWithArgumentRanges(self._s[3668]!, self._r[3668]!, [_0]) } - public var Weekday_Wednesday: String { return self._s[3666]! } - public var ReportPeer_ReasonOther_Send: String { return self._s[3667]! } - public var PasscodeSettings_EncryptDataHelp: String { return self._s[3668]! } - public var PrivacyLastSeenSettings_CustomShareSettingsHelp: String { return self._s[3669]! } - public var OldChannels_NoticeTitle: String { return self._s[3670]! } - public var TwoStepAuth_ChangeEmail: String { return self._s[3671]! } - public var PasscodeSettings_PasscodeOptions: String { return self._s[3672]! } - public var InfoPlist_NSPhotoLibraryUsageDescription: String { return self._s[3673]! } - public var Passport_Address_AddUtilityBill: String { return self._s[3674]! } + public var Weekday_Wednesday: String { return self._s[3669]! } + public var ReportPeer_ReasonOther_Send: String { return self._s[3670]! } + public var PasscodeSettings_EncryptDataHelp: String { return self._s[3671]! } + public var PrivacyLastSeenSettings_CustomShareSettingsHelp: String { return self._s[3672]! } + public var OldChannels_NoticeTitle: String { return self._s[3673]! } + public var TwoStepAuth_ChangeEmail: String { return self._s[3674]! } + public var PasscodeSettings_PasscodeOptions: String { return self._s[3675]! } + public var InfoPlist_NSPhotoLibraryUsageDescription: String { return self._s[3676]! } + public var Passport_Address_AddUtilityBill: String { return self._s[3677]! } public func Time_PreciseDate_m5(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3676]!, self._r[3676]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3679]!, self._r[3679]!, [_1, _2, _3]) } - public var TwoFactorSetup_EmailVerification_ResendAction: String { return self._s[3678]! } - public var Stats_GroupTopAdminsTitle: String { return self._s[3679]! } - public var Paint_Regular: String { return self._s[3680]! } - public var Message_Contact: String { return self._s[3681]! } - public var NetworkUsageSettings_MediaVideoDataSection: String { return self._s[3682]! } - public var VoiceOver_Chat_YourPhoto: String { return self._s[3683]! } - public var Notification_Mute1hMin: String { return self._s[3684]! } + public var TwoFactorSetup_EmailVerification_ResendAction: String { return self._s[3681]! } + public var Stats_GroupTopAdminsTitle: String { return self._s[3682]! } + public var Paint_Regular: String { return self._s[3683]! } + public var Message_Contact: String { return self._s[3684]! } + public var NetworkUsageSettings_MediaVideoDataSection: String { return self._s[3685]! } + public var VoiceOver_Chat_YourPhoto: String { return self._s[3686]! } + public var Notification_Mute1hMin: String { return self._s[3687]! } public func Login_BannedPhoneSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3685]!, self._r[3685]!, [_0]) + return formatWithArgumentRanges(self._s[3688]!, self._r[3688]!, [_0]) } - public var Profile_MessageLifetime1h: String { return self._s[3686]! } - public var TwoStepAuth_GenericHelp: String { return self._s[3687]! } - public var TextFormat_Monospace: String { return self._s[3688]! } - public var VoiceOver_Media_PlaybackRateChange: String { return self._s[3690]! } - public var Conversation_DeleteMessagesForMe: String { return self._s[3691]! } - public var ChatList_DeleteChat: String { return self._s[3692]! } - public var Channel_OwnershipTransfer_EnterPasswordText: String { return self._s[3695]! } + public var Profile_MessageLifetime1h: String { return self._s[3689]! } + public var TwoStepAuth_GenericHelp: String { return self._s[3690]! } + public var TextFormat_Monospace: String { return self._s[3691]! } + public var VoiceOver_Media_PlaybackRateChange: String { return self._s[3693]! } + public var Conversation_DeleteMessagesForMe: String { return self._s[3694]! } + public var ChatList_DeleteChat: String { return self._s[3695]! } + public var Channel_OwnershipTransfer_EnterPasswordText: String { return self._s[3698]! } public func Settings_ApplyProxyAlertCredentials(_ _1: String, _ _2: String, _ _3: String, _ _4: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3696]!, self._r[3696]!, [_1, _2, _3, _4]) + return formatWithArgumentRanges(self._s[3699]!, self._r[3699]!, [_1, _2, _3, _4]) } - public var Login_CancelPhoneVerificationStop: String { return self._s[3697]! } - public var Appearance_ThemePreview_ChatList_4_Name: String { return self._s[3698]! } - public var MediaPicker_MomentsDateRangeSameMonthYearFormat: String { return self._s[3699]! } + public var Login_CancelPhoneVerificationStop: String { return self._s[3700]! } + public var Appearance_ThemePreview_ChatList_4_Name: String { return self._s[3701]! } + public var MediaPicker_MomentsDateRangeSameMonthYearFormat: String { return self._s[3702]! } public func Channel_AdminLog_MessageToggleInvitesOn(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3700]!, self._r[3700]!, [_0]) + return formatWithArgumentRanges(self._s[3703]!, self._r[3703]!, [_0]) } - public var Notifications_Badge_IncludeChannels: String { return self._s[3701]! } - public var StickerPack_ViewPack: String { return self._s[3704]! } - public var FastTwoStepSetup_PasswordConfirmationPlaceholder: String { return self._s[3706]! } - public var EditTheme_Expand_Preview_IncomingText: String { return self._s[3707]! } - public var Notifications_Title: String { return self._s[3708]! } - public var Conversation_InputTextPlaceholderComment: String { return self._s[3709]! } - public var GroupInfo_PublicLink: String { return self._s[3710]! } - public var VoiceOver_DiscardPreparedContent: String { return self._s[3711]! } - public var Conversation_Moderate_Ban: String { return self._s[3715]! } - public var InviteLink_Manage: String { return self._s[3716]! } + public var Notifications_Badge_IncludeChannels: String { return self._s[3704]! } + public var StickerPack_ViewPack: String { return self._s[3707]! } + public var FastTwoStepSetup_PasswordConfirmationPlaceholder: String { return self._s[3709]! } + public var EditTheme_Expand_Preview_IncomingText: String { return self._s[3710]! } + public var Notifications_Title: String { return self._s[3711]! } + public var Conversation_InputTextPlaceholderComment: String { return self._s[3712]! } + public var GroupInfo_PublicLink: String { return self._s[3713]! } + public var VoiceOver_DiscardPreparedContent: String { return self._s[3714]! } + public var Conversation_Moderate_Ban: String { return self._s[3718]! } + public var InviteLink_Manage: String { return self._s[3719]! } public func Activity_RemindAboutGroup(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3717]!, self._r[3717]!, [_0]) + return formatWithArgumentRanges(self._s[3720]!, self._r[3720]!, [_0]) } - public var TextFormat_Underline: String { return self._s[3718]! } + public var TextFormat_Underline: String { return self._s[3721]! } public func DownloadingStatus(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3719]!, self._r[3719]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3722]!, self._r[3722]!, [_0, _1]) } public func PUSH_PINNED_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3720]!, self._r[3720]!, [_1]) + return formatWithArgumentRanges(self._s[3723]!, self._r[3723]!, [_1]) } - public var PollResults_Collapse: String { return self._s[3722]! } - public var Contacts_GlobalSearch: String { return self._s[3723]! } + public var PollResults_Collapse: String { return self._s[3725]! } + public var Contacts_GlobalSearch: String { return self._s[3726]! } public func Conversation_EncryptionWaiting(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3725]!, self._r[3725]!, [_0]) + return formatWithArgumentRanges(self._s[3728]!, self._r[3728]!, [_0]) } - public var Channel_Management_LabelEditor: String { return self._s[3726]! } - public var Conversation_VoiceChatMediaRecordingRestricted: String { return self._s[3727]! } - public var SettingsSearch_Synonyms_Stickers_FeaturedPacks: String { return self._s[3728]! } - public var Conversation_Theme: String { return self._s[3729]! } + public var Channel_Management_LabelEditor: String { return self._s[3729]! } + public var Conversation_VoiceChatMediaRecordingRestricted: String { return self._s[3730]! } + public var SettingsSearch_Synonyms_Stickers_FeaturedPacks: String { return self._s[3731]! } + public var Conversation_Theme: String { return self._s[3732]! } public func PUSH_CHANNEL_MESSAGE_DOCS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3730]!, self._r[3730]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[3733]!, self._r[3733]!, [_1, "\(_2)"]) } - public var Conversation_LinkDialogSave: String { return self._s[3731]! } - public var EnterPasscode_TouchId: String { return self._s[3732]! } - public var Stats_MessageOverview: String { return self._s[3734]! } - public var Privacy_Calls_P2PAlways: String { return self._s[3736]! } - public var Message_Sticker: String { return self._s[3737]! } - public var Conversation_Mute: String { return self._s[3739]! } - public var VoiceChat_AnonymousDisabledAlertText: String { return self._s[3740]! } - public var ContactInfo_Title: String { return self._s[3741]! } + public var Conversation_LinkDialogSave: String { return self._s[3734]! } + public var EnterPasscode_TouchId: String { return self._s[3735]! } + public var Stats_MessageOverview: String { return self._s[3737]! } + public var Privacy_Calls_P2PAlways: String { return self._s[3739]! } + public var Message_Sticker: String { return self._s[3740]! } + public var Conversation_Mute: String { return self._s[3742]! } + public var VoiceChat_AnonymousDisabledAlertText: String { return self._s[3743]! } + public var ContactInfo_Title: String { return self._s[3744]! } public func PUSH_CHANNEL_MESSAGE_CONTACT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3742]!, self._r[3742]!, [_1]) + return formatWithArgumentRanges(self._s[3745]!, self._r[3745]!, [_1]) } - public var Channel_Setup_TypeHeader: String { return self._s[3743]! } - public var AuthSessions_LogOut: String { return self._s[3744]! } - public var ChatSettings_AutoDownloadReset: String { return self._s[3745]! } - public var ChatListFolderSettings_NewFolder: String { return self._s[3747]! } - public var Appearance_ThemePreview_ChatList_3_AuthorName: String { return self._s[3748]! } - public var CreatePoll_Title: String { return self._s[3749]! } - public var EditTheme_EditTitle: String { return self._s[3750]! } - public var ChatListFolderSettings_RecommendedFoldersSection: String { return self._s[3751]! } - public var TwoStepAuth_SetPassword: String { return self._s[3752]! } + public var Channel_Setup_TypeHeader: String { return self._s[3746]! } + public var AuthSessions_LogOut: String { return self._s[3747]! } + public var ChatSettings_AutoDownloadReset: String { return self._s[3748]! } + public var ChatListFolderSettings_NewFolder: String { return self._s[3750]! } + public var Appearance_ThemePreview_ChatList_3_AuthorName: String { return self._s[3751]! } + public var CreatePoll_Title: String { return self._s[3752]! } + public var EditTheme_EditTitle: String { return self._s[3753]! } + public var ChatListFolderSettings_RecommendedFoldersSection: String { return self._s[3754]! } + public var TwoStepAuth_SetPassword: String { return self._s[3755]! } public func Login_InvalidPhoneEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3753]!, self._r[3753]!, [_0]) + return formatWithArgumentRanges(self._s[3756]!, self._r[3756]!, [_0]) } - public var BlockedUsers_Info: String { return self._s[3754]! } - public var AuthSessions_Sessions: String { return self._s[3755]! } - public var Group_EditAdmin_RankTitle: String { return self._s[3756]! } - public var Common_ActionNotAllowedError: String { return self._s[3757]! } - public var WebPreview_GettingLinkInfo: String { return self._s[3758]! } - public var Appearance_AppIconFilledX: String { return self._s[3759]! } - public var Passport_Email_EmailPlaceholder: String { return self._s[3760]! } - public var FeaturedStickers_OtherSection: String { return self._s[3761]! } - public var VoiceChat_RecordingStarted: String { return self._s[3762]! } - public var EditTheme_Edit_Preview_OutgoingText: String { return self._s[3763]! } - public var Profile_Username: String { return self._s[3764]! } - public var Appearance_RemoveTheme: String { return self._s[3765]! } - public var TwoStepAuth_SetupPasswordConfirmPassword: String { return self._s[3766]! } - public var Message_PinnedStickerMessage: String { return self._s[3767]! } - public var AccessDenied_VideoMicrophone: String { return self._s[3768]! } - public var WallpaperPreview_CustomColorBottomText: String { return self._s[3769]! } - public var Passport_Address_RegionPlaceholder: String { return self._s[3770]! } - public var SettingsSearch_Synonyms_Data_Storage_Title: String { return self._s[3771]! } - public var TwoStepAuth_Title: String { return self._s[3772]! } - public var Checkout_WebConfirmation_Title: String { return self._s[3773]! } - public var AutoDownloadSettings_VoiceMessagesInfo: String { return self._s[3774]! } - public var ChatListFolder_CategoryGroups: String { return self._s[3776]! } - public var Stats_GroupTopInviter_Promote: String { return self._s[3777]! } - public var Conversation_EditingPhotoPanelTitle: String { return self._s[3778]! } - public var Month_GenJuly: String { return self._s[3779]! } - public var Passport_Identity_Gender: String { return self._s[3780]! } - public var Channel_DiscussionGroup_UnlinkGroup: String { return self._s[3781]! } - public var Notification_Exceptions_DeleteAll: String { return self._s[3782]! } - public var VoiceChat_StopRecording: String { return self._s[3783]! } + public var BlockedUsers_Info: String { return self._s[3757]! } + public var AuthSessions_Sessions: String { return self._s[3758]! } + public var Group_EditAdmin_RankTitle: String { return self._s[3759]! } + public var Common_ActionNotAllowedError: String { return self._s[3760]! } + public var WebPreview_GettingLinkInfo: String { return self._s[3761]! } + public var Appearance_AppIconFilledX: String { return self._s[3762]! } + public var Passport_Email_EmailPlaceholder: String { return self._s[3763]! } + public var FeaturedStickers_OtherSection: String { return self._s[3764]! } + public var VoiceChat_RecordingStarted: String { return self._s[3765]! } + public var EditTheme_Edit_Preview_OutgoingText: String { return self._s[3766]! } + public var Profile_Username: String { return self._s[3767]! } + public var Appearance_RemoveTheme: String { return self._s[3768]! } + public var TwoStepAuth_SetupPasswordConfirmPassword: String { return self._s[3769]! } + public var Message_PinnedStickerMessage: String { return self._s[3770]! } + public var AccessDenied_VideoMicrophone: String { return self._s[3771]! } + public var WallpaperPreview_CustomColorBottomText: String { return self._s[3772]! } + public var Passport_Address_RegionPlaceholder: String { return self._s[3773]! } + public var SettingsSearch_Synonyms_Data_Storage_Title: String { return self._s[3774]! } + public var TwoStepAuth_Title: String { return self._s[3775]! } + public var Checkout_WebConfirmation_Title: String { return self._s[3776]! } + public var AutoDownloadSettings_VoiceMessagesInfo: String { return self._s[3777]! } + public var ChatListFolder_CategoryGroups: String { return self._s[3779]! } + public var Stats_GroupTopInviter_Promote: String { return self._s[3780]! } + public var Conversation_EditingPhotoPanelTitle: String { return self._s[3781]! } + public var Month_GenJuly: String { return self._s[3782]! } + public var Passport_Identity_Gender: String { return self._s[3783]! } + public var Channel_DiscussionGroup_UnlinkGroup: String { return self._s[3784]! } + public var Notification_Exceptions_DeleteAll: String { return self._s[3785]! } + public var VoiceChat_StopRecording: String { return self._s[3786]! } public func Conversation_FileHowToText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3784]!, self._r[3784]!, [_0]) - } - public func Channel_AdminLog_MessageAdmin(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3785]!, self._r[3785]!, [_0, _1, _2]) - } - public var Login_CodeSentSms: String { return self._s[3786]! } - public func VoiceOver_Chat_ReplyFrom(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3787]!, self._r[3787]!, [_0]) } - public var Login_CallRequestState2: String { return self._s[3788]! } - public var Channel_DiscussionGroup_Header: String { return self._s[3789]! } - public func Channel_AdminLog_MessageToggleInvitesOff(_ _0: String) -> (String, [(Int, NSRange)]) { + public func Channel_AdminLog_MessageAdmin(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3788]!, self._r[3788]!, [_0, _1, _2]) + } + public var Login_CodeSentSms: String { return self._s[3789]! } + public func VoiceOver_Chat_ReplyFrom(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3790]!, self._r[3790]!, [_0]) } - public var Passport_Language_ms: String { return self._s[3791]! } - public var PeopleNearby_MakeInvisible: String { return self._s[3793]! } - public var ChatList_Search_FilterVoice: String { return self._s[3795]! } - public var Camera_TapAndHoldForVideo: String { return self._s[3797]! } - public var Permissions_NotificationsAllowInSettings_v0: String { return self._s[3798]! } + public var Login_CallRequestState2: String { return self._s[3791]! } + public var Channel_DiscussionGroup_Header: String { return self._s[3792]! } + public func Channel_AdminLog_MessageToggleInvitesOff(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3793]!, self._r[3793]!, [_0]) + } + public var Passport_Language_ms: String { return self._s[3794]! } + public var PeopleNearby_MakeInvisible: String { return self._s[3796]! } + public var ChatList_Search_FilterVoice: String { return self._s[3798]! } + public var Camera_TapAndHoldForVideo: String { return self._s[3800]! } + public var Permissions_NotificationsAllowInSettings_v0: String { return self._s[3801]! } public func Notification_LeftChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3799]!, self._r[3799]!, [_0]) + return formatWithArgumentRanges(self._s[3802]!, self._r[3802]!, [_0]) } public func Call_VoiceChatInProgressMessageCall(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3800]!, self._r[3800]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3803]!, self._r[3803]!, [_1, _2]) } - public var Map_Locating: String { return self._s[3801]! } + public var Map_Locating: String { return self._s[3804]! } public func Checkout_SavePasswordTimeout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3803]!, self._r[3803]!, [_0]) + return formatWithArgumentRanges(self._s[3806]!, self._r[3806]!, [_0]) } - public var Passport_Identity_TypeInternalPassport: String { return self._s[3805]! } - public var Appearance_ThemePreview_Chat_4_Text: String { return self._s[3806]! } - public var SettingsSearch_Synonyms_EditProfile_Username: String { return self._s[3807]! } - public var Stickers_Installed: String { return self._s[3808]! } - public var Notifications_PermissionsAllowInSettings: String { return self._s[3809]! } - public var StickerPackActionInfo_RemovedTitle: String { return self._s[3810]! } - public var CallSettings_Never: String { return self._s[3812]! } - public var Channel_Setup_TypePublicHelp: String { return self._s[3813]! } + public var Passport_Identity_TypeInternalPassport: String { return self._s[3808]! } + public var Appearance_ThemePreview_Chat_4_Text: String { return self._s[3809]! } + public var SettingsSearch_Synonyms_EditProfile_Username: String { return self._s[3810]! } + public var Stickers_Installed: String { return self._s[3811]! } + public var Notifications_PermissionsAllowInSettings: String { return self._s[3812]! } + public var StickerPackActionInfo_RemovedTitle: String { return self._s[3813]! } + public var CallSettings_Never: String { return self._s[3815]! } + public var Channel_Setup_TypePublicHelp: String { return self._s[3816]! } public func ChatList_DeleteForEveryone(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3815]!, self._r[3815]!, [_0]) + return formatWithArgumentRanges(self._s[3818]!, self._r[3818]!, [_0]) } - public var Message_Game: String { return self._s[3816]! } - public var Call_Message: String { return self._s[3817]! } + public var Message_Game: String { return self._s[3819]! } + public var Call_Message: String { return self._s[3820]! } public func PUSH_CHANNEL_MESSAGE_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3818]!, self._r[3818]!, [_1]) + return formatWithArgumentRanges(self._s[3821]!, self._r[3821]!, [_1]) } - public var ChannelIntro_Text: String { return self._s[3819]! } - public var StickerPack_Send: String { return self._s[3820]! } - public var Share_AuthDescription: String { return self._s[3821]! } - public var PasscodeSettings_AutoLock_IfAwayFor_5minutes: String { return self._s[3822]! } - public var CallFeedback_WhatWentWrong: String { return self._s[3823]! } - public var Common_Create: String { return self._s[3826]! } - public var Passport_Language_hy: String { return self._s[3827]! } - public var CreatePoll_Explanation: String { return self._s[3828]! } - public var GroupPermission_AddMembersNotAvailable: String { return self._s[3829]! } - public var PeerInfo_ButtonVoiceChat: String { return self._s[3830]! } - public var Undo_ChatClearedForBothSides: String { return self._s[3831]! } - public var DialogList_NoMessagesTitle: String { return self._s[3832]! } - public var GroupInfo_Title: String { return self._s[3834]! } - public var Channel_AdminLog_CanBanUsers: String { return self._s[3835]! } - public var PhoneNumberHelp_Help: String { return self._s[3836]! } - public var TwoStepAuth_AdditionalPassword: String { return self._s[3837]! } - public var Settings_Logout: String { return self._s[3838]! } - public var Privacy_PaymentsTitle: String { return self._s[3839]! } - public var StickerPacksSettings_StickerPacksSection: String { return self._s[3840]! } - public var Tour_Text6: String { return self._s[3841]! } - public var Channel_Username_Help: String { return self._s[3843]! } - public var VoiceOver_Chat_RecordModeVoiceMessageInfo: String { return self._s[3844]! } - public var AttachmentMenu_Poll: String { return self._s[3845]! } - public var EditTheme_Create_Preview_IncomingReplyName: String { return self._s[3846]! } - public var Conversation_ReportSpamChannelConfirmation: String { return self._s[3847]! } - public var Passport_DeletePassport: String { return self._s[3848]! } - public var Login_Code: String { return self._s[3849]! } - public var Notification_SecretChatScreenshot: String { return self._s[3850]! } - public var Login_CodeFloodError: String { return self._s[3851]! } + public var ChannelIntro_Text: String { return self._s[3822]! } + public var StickerPack_Send: String { return self._s[3823]! } + public var Share_AuthDescription: String { return self._s[3824]! } + public var PasscodeSettings_AutoLock_IfAwayFor_5minutes: String { return self._s[3825]! } + public var CallFeedback_WhatWentWrong: String { return self._s[3826]! } + public var Common_Create: String { return self._s[3829]! } + public var Passport_Language_hy: String { return self._s[3830]! } + public var CreatePoll_Explanation: String { return self._s[3831]! } + public var GroupPermission_AddMembersNotAvailable: String { return self._s[3832]! } + public var PeerInfo_ButtonVoiceChat: String { return self._s[3833]! } + public var Undo_ChatClearedForBothSides: String { return self._s[3834]! } + public var DialogList_NoMessagesTitle: String { return self._s[3835]! } + public var GroupInfo_Title: String { return self._s[3837]! } + public var Channel_AdminLog_CanBanUsers: String { return self._s[3838]! } + public var PhoneNumberHelp_Help: String { return self._s[3839]! } + public var TwoStepAuth_AdditionalPassword: String { return self._s[3840]! } + public var Settings_Logout: String { return self._s[3841]! } + public var Privacy_PaymentsTitle: String { return self._s[3842]! } + public var StickerPacksSettings_StickerPacksSection: String { return self._s[3843]! } + public var Tour_Text6: String { return self._s[3844]! } + public var Channel_Username_Help: String { return self._s[3846]! } + public var VoiceOver_Chat_RecordModeVoiceMessageInfo: String { return self._s[3847]! } + public var AttachmentMenu_Poll: String { return self._s[3848]! } + public var EditTheme_Create_Preview_IncomingReplyName: String { return self._s[3849]! } + public var Conversation_ReportSpamChannelConfirmation: String { return self._s[3850]! } + public var Passport_DeletePassport: String { return self._s[3851]! } + public var Login_Code: String { return self._s[3852]! } + public var Notification_SecretChatScreenshot: String { return self._s[3853]! } + public var Login_CodeFloodError: String { return self._s[3854]! } public func Notification_PinnedAnimationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3852]!, self._r[3852]!, [_0]) + return formatWithArgumentRanges(self._s[3855]!, self._r[3855]!, [_0]) } public func Channel_Username_UsernameIsAvailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3853]!, self._r[3853]!, [_0]) - } - public var Watch_Stickers_Recents: String { return self._s[3854]! } - public var Generic_ErrorMoreInfo: String { return self._s[3855]! } - public func Call_AccountIsLoggedOnCurrentDevice(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3856]!, self._r[3856]!, [_0]) } - public var AutoDownloadSettings_DataUsage: String { return self._s[3857]! } - public var Conversation_ViewTheme: String { return self._s[3858]! } - public var Contacts_InviteSearchLabel: String { return self._s[3859]! } - public var Settings_CancelUpload: String { return self._s[3861]! } - public var Settings_AppLanguage_Unofficial: String { return self._s[3862]! } + public var Watch_Stickers_Recents: String { return self._s[3857]! } + public var Generic_ErrorMoreInfo: String { return self._s[3858]! } + public func Call_AccountIsLoggedOnCurrentDevice(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3859]!, self._r[3859]!, [_0]) + } + public var AutoDownloadSettings_DataUsage: String { return self._s[3860]! } + public var Conversation_ViewTheme: String { return self._s[3861]! } + public var Contacts_InviteSearchLabel: String { return self._s[3862]! } + public var Settings_CancelUpload: String { return self._s[3864]! } + public var Settings_AppLanguage_Unofficial: String { return self._s[3865]! } public func ChatList_ClearChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3863]!, self._r[3863]!, [_0]) + return formatWithArgumentRanges(self._s[3866]!, self._r[3866]!, [_0]) } - public var ChatList_AddFolder: String { return self._s[3864]! } - public var Conversation_Location: String { return self._s[3866]! } - public var Appearance_BubbleCorners_AdjustAdjacent: String { return self._s[3867]! } - public var DialogList_AdLabel: String { return self._s[3868]! } + public var ChatList_AddFolder: String { return self._s[3867]! } + public var Conversation_Location: String { return self._s[3869]! } + public var Appearance_BubbleCorners_AdjustAdjacent: String { return self._s[3870]! } + public var DialogList_AdLabel: String { return self._s[3871]! } public func Time_TomorrowAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3870]!, self._r[3870]!, [_0]) + return formatWithArgumentRanges(self._s[3873]!, self._r[3873]!, [_0]) } - public var Message_InvoiceLabel: String { return self._s[3871]! } - public var Channel_TooMuchBots: String { return self._s[3872]! } + public var Message_InvoiceLabel: String { return self._s[3874]! } + public var Channel_TooMuchBots: String { return self._s[3875]! } public func Channel_AdminLog_MessageRemovedChannelUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3874]!, self._r[3874]!, [_0]) + return formatWithArgumentRanges(self._s[3877]!, self._r[3877]!, [_0]) } - public var Call_IncomingVideoCall: String { return self._s[3875]! } - public var Conversation_LiveLocation: String { return self._s[3876]! } - public var TwoStepAuth_SetupPasswordEnterPasswordChange: String { return self._s[3877]! } - public var Passport_Identity_EditPassport: String { return self._s[3878]! } - public var Permissions_CellularDataTitle_v0: String { return self._s[3880]! } - public var ChatList_Search_NoResultsFitlerVoice: String { return self._s[3881]! } - public var GroupInfo_Permissions_AddException: String { return self._s[3882]! } - public var Channel_AdminLog_CanInviteUsers: String { return self._s[3884]! } - public var Channel_MessageVideoUpdated: String { return self._s[3885]! } - public var GroupInfo_Permissions_EditingDisabled: String { return self._s[3886]! } - public var AccessDenied_Camera: String { return self._s[3889]! } + public var Call_IncomingVideoCall: String { return self._s[3878]! } + public var Conversation_LiveLocation: String { return self._s[3879]! } + public var TwoStepAuth_SetupPasswordEnterPasswordChange: String { return self._s[3880]! } + public var Passport_Identity_EditPassport: String { return self._s[3881]! } + public var Permissions_CellularDataTitle_v0: String { return self._s[3883]! } + public var ChatList_Search_NoResultsFitlerVoice: String { return self._s[3884]! } + public var GroupInfo_Permissions_AddException: String { return self._s[3885]! } + public var Channel_AdminLog_CanInviteUsers: String { return self._s[3887]! } + public var Channel_MessageVideoUpdated: String { return self._s[3888]! } + public var GroupInfo_Permissions_EditingDisabled: String { return self._s[3889]! } + public var AccessDenied_Camera: String { return self._s[3892]! } public func Target_InviteToGroupConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3890]!, self._r[3890]!, [_0]) + return formatWithArgumentRanges(self._s[3893]!, self._r[3893]!, [_0]) } - public var Theme_Context_ChangeColors: String { return self._s[3891]! } - public var PrivacySettings_TwoStepAuth: String { return self._s[3892]! } - public var Privacy_Forwards_PreviewMessageText: String { return self._s[3893]! } - public var Login_CodeExpiredError: String { return self._s[3894]! } - public var State_ConnectingToProxy: String { return self._s[3895]! } - public var TextFormat_Link: String { return self._s[3896]! } - public var Passport_Language_lv: String { return self._s[3897]! } - public var AccessDenied_VoiceMicrophone: String { return self._s[3898]! } - public var WallpaperPreview_SwipeBottomText: String { return self._s[3899]! } - public var ProfilePhoto_SetMainVideo: String { return self._s[3900]! } - public var AutoDownloadSettings_Cellular: String { return self._s[3902]! } - public var ChatSettings_AutoDownloadVoiceMessages: String { return self._s[3903]! } + public var Theme_Context_ChangeColors: String { return self._s[3894]! } + public var PrivacySettings_TwoStepAuth: String { return self._s[3895]! } + public var Privacy_Forwards_PreviewMessageText: String { return self._s[3896]! } + public var Login_CodeExpiredError: String { return self._s[3897]! } + public var State_ConnectingToProxy: String { return self._s[3898]! } + public var TextFormat_Link: String { return self._s[3899]! } + public var Passport_Language_lv: String { return self._s[3900]! } + public var AccessDenied_VoiceMicrophone: String { return self._s[3901]! } + public var WallpaperPreview_SwipeBottomText: String { return self._s[3902]! } + public var ProfilePhoto_SetMainVideo: String { return self._s[3903]! } + public var AutoDownloadSettings_Cellular: String { return self._s[3905]! } + public var ChatSettings_AutoDownloadVoiceMessages: String { return self._s[3906]! } public func Channel_AdminLog_MessageKickedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3904]!, self._r[3904]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3907]!, self._r[3907]!, [_1, _2]) } - public var ChatList_EmptyChatListFilterTitle: String { return self._s[3905]! } - public var Checkout_PayNone: String { return self._s[3906]! } - public var NotificationsSound_Complete: String { return self._s[3908]! } - public var TwoStepAuth_ConfirmEmailCodePlaceholder: String { return self._s[3909]! } - public var InviteLink_CreateInfo: String { return self._s[3910]! } - public var AuthSessions_DevicesTitle: String { return self._s[3911]! } + public var ChatList_EmptyChatListFilterTitle: String { return self._s[3908]! } + public var Checkout_PayNone: String { return self._s[3909]! } + public var NotificationsSound_Complete: String { return self._s[3911]! } + public var TwoStepAuth_ConfirmEmailCodePlaceholder: String { return self._s[3912]! } + public var InviteLink_CreateInfo: String { return self._s[3913]! } + public var AuthSessions_DevicesTitle: String { return self._s[3914]! } public func DialogList_MultipleTyping(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3912]!, self._r[3912]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3915]!, self._r[3915]!, [_0, _1]) } - public var Message_LiveLocation: String { return self._s[3913]! } - public var Watch_Suggestion_BRB: String { return self._s[3914]! } - public var Channel_BanUser_Title: String { return self._s[3915]! } - public var SettingsSearch_Synonyms_Privacy_Data_Title: String { return self._s[3916]! } - public var Conversation_Dice_u1F3C0: String { return self._s[3917]! } - public var Conversation_ClearSelfHistory: String { return self._s[3918]! } - public var ProfilePhoto_OpenGallery: String { return self._s[3919]! } - public var PrivacySettings_LastSeenTitle: String { return self._s[3920]! } - public var Weekday_Thursday: String { return self._s[3921]! } - public var BroadcastListInfo_AddRecipient: String { return self._s[3922]! } - public var Privacy_ProfilePhoto: String { return self._s[3924]! } - public var StickerPacksSettings_ArchivedPacks_Info: String { return self._s[3925]! } + public var Message_LiveLocation: String { return self._s[3916]! } + public var Watch_Suggestion_BRB: String { return self._s[3917]! } + public var Channel_BanUser_Title: String { return self._s[3918]! } + public var SettingsSearch_Synonyms_Privacy_Data_Title: String { return self._s[3919]! } + public var Conversation_Dice_u1F3C0: String { return self._s[3920]! } + public var Conversation_ClearSelfHistory: String { return self._s[3921]! } + public var ProfilePhoto_OpenGallery: String { return self._s[3922]! } + public var PrivacySettings_LastSeenTitle: String { return self._s[3923]! } + public var Weekday_Thursday: String { return self._s[3924]! } + public var BroadcastListInfo_AddRecipient: String { return self._s[3925]! } + public var Privacy_ProfilePhoto: String { return self._s[3927]! } + public var StickerPacksSettings_ArchivedPacks_Info: String { return self._s[3928]! } public func Channel_AdminLog_MessageChangedUnlinkedGroup(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3926]!, self._r[3926]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3929]!, self._r[3929]!, [_1, _2]) } - public var Message_Audio: String { return self._s[3927]! } - public var Conversation_Info: String { return self._s[3928]! } - public var Cache_Videos: String { return self._s[3929]! } - public var Appearance_ThemePreview_ChatList_6_Text: String { return self._s[3930]! } - public var Channel_ErrorAddTooMuch: String { return self._s[3931]! } + public var Message_Audio: String { return self._s[3930]! } + public var Conversation_Info: String { return self._s[3931]! } + public var Cache_Videos: String { return self._s[3932]! } + public var Appearance_ThemePreview_ChatList_6_Text: String { return self._s[3933]! } + public var Channel_ErrorAddTooMuch: String { return self._s[3934]! } public func ChatList_DeleteSecretChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3932]!, self._r[3932]!, [_0]) + return formatWithArgumentRanges(self._s[3935]!, self._r[3935]!, [_0]) } - public var ChannelMembers_ChannelAdminsTitle: String { return self._s[3934]! } - public var ScheduledMessages_Title: String { return self._s[3936]! } - public var ShareFileTip_Title: String { return self._s[3939]! } - public var Chat_Gifs_TrendingSectionHeader: String { return self._s[3940]! } - public var ChatList_RemoveFolderConfirmation: String { return self._s[3941]! } + public var ChannelMembers_ChannelAdminsTitle: String { return self._s[3937]! } + public var ScheduledMessages_Title: String { return self._s[3939]! } + public var ShareFileTip_Title: String { return self._s[3942]! } + public var Chat_Gifs_TrendingSectionHeader: String { return self._s[3943]! } + public var ChatList_RemoveFolderConfirmation: String { return self._s[3944]! } public func PUSH_CHAT_MESSAGE_GEOLIVE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3942]!, self._r[3942]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3945]!, self._r[3945]!, [_1, _2]) } - public var Conversation_ContextViewStats: String { return self._s[3944]! } - public var Channel_DiscussionGroup_SearchPlaceholder: String { return self._s[3945]! } - public var PasscodeSettings_Title: String { return self._s[3946]! } - public var Channel_AdminLog_SendPolls: String { return self._s[3947]! } - public var LastSeen_ALongTimeAgo: String { return self._s[3948]! } + public var Conversation_ContextViewStats: String { return self._s[3947]! } + public var Channel_DiscussionGroup_SearchPlaceholder: String { return self._s[3948]! } + public var PasscodeSettings_Title: String { return self._s[3949]! } + public var Channel_AdminLog_SendPolls: String { return self._s[3950]! } + public var LastSeen_ALongTimeAgo: String { return self._s[3951]! } public func PUSH_CHANNEL_MESSAGE_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3949]!, self._r[3949]!, [_1]) + return formatWithArgumentRanges(self._s[3952]!, self._r[3952]!, [_1]) } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChannels: String { return self._s[3950]! } - public var CallFeedback_VideoReasonLowQuality: String { return self._s[3951]! } - public var Conversation_PinnedPreviousMessage: String { return self._s[3952]! } - public var SocksProxySetup_AddProxyTitle: String { return self._s[3953]! } - public var Passport_Identity_AddInternalPassport: String { return self._s[3954]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChannels: String { return self._s[3953]! } + public var CallFeedback_VideoReasonLowQuality: String { return self._s[3954]! } + public var Conversation_PinnedPreviousMessage: String { return self._s[3955]! } + public var SocksProxySetup_AddProxyTitle: String { return self._s[3956]! } + public var Passport_Identity_AddInternalPassport: String { return self._s[3957]! } public func ChatList_RemovedFromFolderTooltip(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3955]!, self._r[3955]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3958]!, self._r[3958]!, [_1, _2]) } public func Conversation_SetReminder_RemindToday(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3956]!, self._r[3956]!, [_0]) + return formatWithArgumentRanges(self._s[3959]!, self._r[3959]!, [_0]) } - public var Passport_Identity_GenderFemale: String { return self._s[3957]! } - public var Location_ProximityNotification_DistanceKM: String { return self._s[3960]! } - public var ConvertToSupergroup_HelpTitle: String { return self._s[3961]! } - public var VoiceChat_Audio: String { return self._s[3962]! } - public var SharedMedia_TitleAll: String { return self._s[3963]! } - public var Settings_Context_Logout: String { return self._s[3964]! } - public var GroupInfo_SetGroupPhotoDelete: String { return self._s[3966]! } - public var Settings_About_Title: String { return self._s[3967]! } - public var StickerSettings_ContextHide: String { return self._s[3968]! } + public var Passport_Identity_GenderFemale: String { return self._s[3960]! } + public var Location_ProximityNotification_DistanceKM: String { return self._s[3963]! } + public var ConvertToSupergroup_HelpTitle: String { return self._s[3964]! } + public var VoiceChat_Audio: String { return self._s[3965]! } + public var SharedMedia_TitleAll: String { return self._s[3966]! } + public var Settings_Context_Logout: String { return self._s[3967]! } + public var GroupInfo_SetGroupPhotoDelete: String { return self._s[3969]! } + public var Settings_About_Title: String { return self._s[3970]! } + public var StickerSettings_ContextHide: String { return self._s[3971]! } public func AutoDownloadSettings_UpTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3969]!, self._r[3969]!, [_0]) + return formatWithArgumentRanges(self._s[3972]!, self._r[3972]!, [_0]) } public func Conversation_LiveLocationYouAndOther(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3970]!, self._r[3970]!, [_0]) + return formatWithArgumentRanges(self._s[3973]!, self._r[3973]!, [_0]) } - public var Common_Cancel: String { return self._s[3972]! } - public var CallFeedback_Title: String { return self._s[3974]! } + public var Common_Cancel: String { return self._s[3975]! } + public var CallFeedback_Title: String { return self._s[3977]! } public func Notification_PinnedContactMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3975]!, self._r[3975]!, [_0]) + return formatWithArgumentRanges(self._s[3978]!, self._r[3978]!, [_0]) } - public var Activity_UploadingVideoMessage: String { return self._s[3976]! } - public var MediaPicker_Send: String { return self._s[3977]! } - public var PasscodeSettings_AutoLock_IfAwayFor_1minute: String { return self._s[3978]! } - public var Conversation_LiveLocationYou: String { return self._s[3979]! } - public var Notifications_ExceptionsUnmuted: String { return self._s[3980]! } + public var Activity_UploadingVideoMessage: String { return self._s[3979]! } + public var MediaPicker_Send: String { return self._s[3980]! } + public var PasscodeSettings_AutoLock_IfAwayFor_1minute: String { return self._s[3981]! } + public var Conversation_LiveLocationYou: String { return self._s[3982]! } + public var Notifications_ExceptionsUnmuted: String { return self._s[3983]! } public func Channel_AdminLog_MessageGroupPreHistoryHidden(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3981]!, self._r[3981]!, [_0]) + return formatWithArgumentRanges(self._s[3984]!, self._r[3984]!, [_0]) } public func PUSH_CHAT_ADD_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3982]!, self._r[3982]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3985]!, self._r[3985]!, [_1, _2]) } - public var Conversation_ViewBackground: String { return self._s[3983]! } - public var ChatSettings_PrivateChats: String { return self._s[3986]! } - public var Conversation_ErrorInaccessibleMessage: String { return self._s[3987]! } - public var Appearance_ThemeNight: String { return self._s[3988]! } - public var Common_Search: String { return self._s[3989]! } - public var TwoStepAuth_ReEnterPasswordTitle: String { return self._s[3990]! } - public var ChangePhoneNumberNumber_Help: String { return self._s[3992]! } - public var InviteLink_QRCode_Share: String { return self._s[3993]! } - public var Stickers_SuggestAdded: String { return self._s[3994]! } - public var Conversation_DiscardVoiceMessageDescription: String { return self._s[3997]! } - public var NetworkUsageSettings_Cellular: String { return self._s[3998]! } - public var CheckoutInfo_Title: String { return self._s[3999]! } - public var Conversation_ShareBotLocationConfirmationTitle: String { return self._s[4000]! } - public var Channel_BotDoesntSupportGroups: String { return self._s[4001]! } + public var Conversation_ViewBackground: String { return self._s[3986]! } + public var ChatSettings_PrivateChats: String { return self._s[3989]! } + public var Conversation_ErrorInaccessibleMessage: String { return self._s[3990]! } + public var Appearance_ThemeNight: String { return self._s[3991]! } + public var Common_Search: String { return self._s[3992]! } + public var TwoStepAuth_ReEnterPasswordTitle: String { return self._s[3993]! } + public var ChangePhoneNumberNumber_Help: String { return self._s[3995]! } + public var InviteLink_QRCode_Share: String { return self._s[3996]! } + public var Stickers_SuggestAdded: String { return self._s[3997]! } + public var Conversation_DiscardVoiceMessageDescription: String { return self._s[4000]! } + public var NetworkUsageSettings_Cellular: String { return self._s[4001]! } + public var CheckoutInfo_Title: String { return self._s[4002]! } + public var Conversation_ShareBotLocationConfirmationTitle: String { return self._s[4003]! } + public var Channel_BotDoesntSupportGroups: String { return self._s[4004]! } public func DialogList_SingleRecordingAudioSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4002]!, self._r[4002]!, [_0]) + return formatWithArgumentRanges(self._s[4005]!, self._r[4005]!, [_0]) } - public var MaskStickerSettings_Info: String { return self._s[4004]! } - public var GroupRemoved_DeleteUser: String { return self._s[4006]! } - public var Contacts_ShareTelegram: String { return self._s[4007]! } - public var Group_UpgradeNoticeText1: String { return self._s[4008]! } + public var MaskStickerSettings_Info: String { return self._s[4007]! } + public var GroupRemoved_DeleteUser: String { return self._s[4009]! } + public var Contacts_ShareTelegram: String { return self._s[4010]! } + public var Group_UpgradeNoticeText1: String { return self._s[4011]! } public func PUSH_PHONE_CALL_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4009]!, self._r[4009]!, [_1]) + return formatWithArgumentRanges(self._s[4012]!, self._r[4012]!, [_1]) } - public var PrivacyLastSeenSettings_Title: String { return self._s[4010]! } - public var SettingsSearch_Synonyms_Support: String { return self._s[4014]! } - public var PhotoEditor_TintTool: String { return self._s[4015]! } - public var GroupPermission_NoSendPolls: String { return self._s[4017]! } - public var NotificationsSound_None: String { return self._s[4018]! } + public var PrivacyLastSeenSettings_Title: String { return self._s[4013]! } + public var SettingsSearch_Synonyms_Support: String { return self._s[4017]! } + public var PhotoEditor_TintTool: String { return self._s[4018]! } + public var GroupPermission_NoSendPolls: String { return self._s[4020]! } + public var NotificationsSound_None: String { return self._s[4021]! } public func LOCAL_CHANNEL_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4019]!, self._r[4019]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[4022]!, self._r[4022]!, [_1, "\(_2)"]) } - public var CheckoutInfo_ShippingInfoCityPlaceholder: String { return self._s[4021]! } - public var ExplicitContent_AlertChannel: String { return self._s[4023]! } - public var Conversation_ClousStorageInfo_Description1: String { return self._s[4024]! } - public var Contacts_SortedByPresence: String { return self._s[4025]! } - public var WallpaperSearch_ColorGray: String { return self._s[4026]! } - public var Channel_AdminLogFilter_EventsNewSubscribers: String { return self._s[4027]! } - public var Conversation_ReportSpam: String { return self._s[4028]! } - public var ChatList_Search_NoResultsFilter: String { return self._s[4031]! } - public var WallpaperSearch_ColorBlack: String { return self._s[4032]! } - public var ArchivedChats_IntroTitle3: String { return self._s[4033]! } - public var InviteLink_DeleteAllRevokedLinksAlert_Action: String { return self._s[4034]! } + public var CheckoutInfo_ShippingInfoCityPlaceholder: String { return self._s[4024]! } + public var ExplicitContent_AlertChannel: String { return self._s[4026]! } + public var Conversation_ClousStorageInfo_Description1: String { return self._s[4027]! } + public var Contacts_SortedByPresence: String { return self._s[4028]! } + public var WallpaperSearch_ColorGray: String { return self._s[4029]! } + public var Channel_AdminLogFilter_EventsNewSubscribers: String { return self._s[4030]! } + public var Conversation_ReportSpam: String { return self._s[4031]! } + public var ChatList_Search_NoResultsFilter: String { return self._s[4034]! } + public var WallpaperSearch_ColorBlack: String { return self._s[4035]! } + public var ArchivedChats_IntroTitle3: String { return self._s[4036]! } + public var InviteLink_DeleteAllRevokedLinksAlert_Action: String { return self._s[4037]! } public func VoiceChat_PeerJoinedText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4035]!, self._r[4035]!, [_0]) + return formatWithArgumentRanges(self._s[4038]!, self._r[4038]!, [_0]) } - public var Conversation_DefaultRestrictedText: String { return self._s[4036]! } - public var Settings_Devices: String { return self._s[4037]! } - public var Call_AudioRouteSpeaker: String { return self._s[4038]! } - public var GroupInfo_InviteLink_CopyLink: String { return self._s[4039]! } - public var Passport_Address_Country: String { return self._s[4041]! } - public var Cache_MaximumCacheSize: String { return self._s[4042]! } - public var Chat_PanelHidePinnedMessages: String { return self._s[4043]! } - public var Notifications_Badge_IncludePublicGroups: String { return self._s[4044]! } - public var ChatSettings_AutoDownloadUsingWiFi: String { return self._s[4046]! } - public var Login_TermsOfServiceLabel: String { return self._s[4047]! } - public var Calls_NoMissedCallsPlacehoder: String { return self._s[4048]! } - public var SocksProxySetup_RequiredCredentials: String { return self._s[4049]! } - public var VoiceOver_MessageContextOpenMessageMenu: String { return self._s[4050]! } - public var AutoNightTheme_ScheduledFrom: String { return self._s[4051]! } - public var ChatSettings_AutoDownloadDocuments: String { return self._s[4052]! } - public var ConvertToSupergroup_Note: String { return self._s[4054]! } - public var Settings_SetNewProfilePhotoOrVideo: String { return self._s[4055]! } - public var PrivacySettings_PasscodeAndTouchId: String { return self._s[4056]! } - public var Common_More: String { return self._s[4057]! } - public var ShareMenu_SelectChats: String { return self._s[4059]! } + public var Conversation_DefaultRestrictedText: String { return self._s[4039]! } + public var Settings_Devices: String { return self._s[4040]! } + public var Call_AudioRouteSpeaker: String { return self._s[4041]! } + public var GroupInfo_InviteLink_CopyLink: String { return self._s[4042]! } + public var Passport_Address_Country: String { return self._s[4044]! } + public var Cache_MaximumCacheSize: String { return self._s[4045]! } + public var Chat_PanelHidePinnedMessages: String { return self._s[4046]! } + public var Notifications_Badge_IncludePublicGroups: String { return self._s[4047]! } + public var ChatSettings_AutoDownloadUsingWiFi: String { return self._s[4049]! } + public var Login_TermsOfServiceLabel: String { return self._s[4050]! } + public var Calls_NoMissedCallsPlacehoder: String { return self._s[4051]! } + public var SocksProxySetup_RequiredCredentials: String { return self._s[4052]! } + public var VoiceOver_MessageContextOpenMessageMenu: String { return self._s[4053]! } + public var AutoNightTheme_ScheduledFrom: String { return self._s[4054]! } + public var ChatSettings_AutoDownloadDocuments: String { return self._s[4055]! } + public var ConvertToSupergroup_Note: String { return self._s[4057]! } + public var Settings_SetNewProfilePhotoOrVideo: String { return self._s[4058]! } + public var PrivacySettings_PasscodeAndTouchId: String { return self._s[4059]! } + public var Common_More: String { return self._s[4060]! } + public var ShareMenu_SelectChats: String { return self._s[4062]! } public func Conversation_ScheduleMessage_SendToday(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4060]!, self._r[4060]!, [_0]) + return formatWithArgumentRanges(self._s[4063]!, self._r[4063]!, [_0]) } public func Channel_AdminLog_MessageRemovedGroupStickerPack(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4061]!, self._r[4061]!, [_0]) - } - public var Contacts_PermissionsKeepDisabled: String { return self._s[4063]! } - public func Call_ParticipantVersionOutdatedError(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[4064]!, self._r[4064]!, [_0]) } - public var WatchRemote_AlertOpen: String { return self._s[4065]! } + public var Contacts_PermissionsKeepDisabled: String { return self._s[4066]! } + public func Call_ParticipantVersionOutdatedError(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[4067]!, self._r[4067]!, [_0]) + } + public var WatchRemote_AlertOpen: String { return self._s[4068]! } public func PUSH_CHAT_ADD_MEMBER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4066]!, self._r[4066]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4069]!, self._r[4069]!, [_1, _2, _3]) } - public var Channel_Members_AddMembersHelp: String { return self._s[4067]! } - public var Shortcut_SwitchAccount: String { return self._s[4068]! } - public var Map_LiveLocationFor8Hours: String { return self._s[4069]! } + public var Channel_Members_AddMembersHelp: String { return self._s[4070]! } + public var Shortcut_SwitchAccount: String { return self._s[4071]! } + public var Map_LiveLocationFor8Hours: String { return self._s[4072]! } public func AutoNightTheme_AutomaticHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4070]!, self._r[4070]!, [_0]) + return formatWithArgumentRanges(self._s[4073]!, self._r[4073]!, [_0]) } - public var Compose_NewGroupTitle: String { return self._s[4071]! } - public var Call_VoiceOver_VoiceCallOutgoing: String { return self._s[4072]! } - public var DialogList_You: String { return self._s[4073]! } - public var ReportPeer_ReasonViolence: String { return self._s[4074]! } + public var Compose_NewGroupTitle: String { return self._s[4074]! } + public var Call_VoiceOver_VoiceCallOutgoing: String { return self._s[4075]! } + public var DialogList_You: String { return self._s[4076]! } + public var ReportPeer_ReasonViolence: String { return self._s[4077]! } public func PUSH_CHANNEL_MESSAGE_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4075]!, self._r[4075]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4078]!, self._r[4078]!, [_1, _2]) } - public var VoiceChat_Reconnecting: String { return self._s[4077]! } - public var KeyCommand_ScrollDown: String { return self._s[4080]! } - public var ChatSettings_DownloadInBackground: String { return self._s[4081]! } - public var Wallpaper_ResetWallpapers: String { return self._s[4082]! } - public var Channel_BanList_RestrictedTitle: String { return self._s[4083]! } - public var ArchivedChats_IntroText3: String { return self._s[4084]! } - public var HashtagSearch_AllChats: String { return self._s[4086]! } - public var VoiceChat_EndVoiceChat: String { return self._s[4087]! } - public var Channel_Info_BlackList: String { return self._s[4089]! } - public var Contacts_SearchUsersAndGroupsLabel: String { return self._s[4090]! } - public var PrivacyPhoneNumberSettings_DiscoveryHeader: String { return self._s[4091]! } - public var Paint_Neon: String { return self._s[4093]! } - public var SettingsSearch_Synonyms_AppLanguage: String { return self._s[4094]! } - public var AutoDownloadSettings_AutoDownload: String { return self._s[4095]! } + public var VoiceChat_Reconnecting: String { return self._s[4080]! } + public var KeyCommand_ScrollDown: String { return self._s[4083]! } + public var ChatSettings_DownloadInBackground: String { return self._s[4084]! } + public var Wallpaper_ResetWallpapers: String { return self._s[4085]! } + public var Channel_BanList_RestrictedTitle: String { return self._s[4086]! } + public var ArchivedChats_IntroText3: String { return self._s[4087]! } + public var HashtagSearch_AllChats: String { return self._s[4089]! } + public var VoiceChat_EndVoiceChat: String { return self._s[4090]! } + public var Channel_Info_BlackList: String { return self._s[4092]! } + public var Contacts_SearchUsersAndGroupsLabel: String { return self._s[4093]! } + public var PrivacyPhoneNumberSettings_DiscoveryHeader: String { return self._s[4094]! } + public var Paint_Neon: String { return self._s[4096]! } + public var SettingsSearch_Synonyms_AppLanguage: String { return self._s[4097]! } + public var AutoDownloadSettings_AutoDownload: String { return self._s[4098]! } public func Notification_PinnedVideoMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4097]!, self._r[4097]!, [_0]) + return formatWithArgumentRanges(self._s[4100]!, self._r[4100]!, [_0]) } - public var Map_StopLiveLocation: String { return self._s[4098]! } - public var SettingsSearch_Synonyms_Data_SaveEditedPhotos: String { return self._s[4099]! } - public var Channel_Username_InvalidCharacters: String { return self._s[4100]! } - public var InstantPage_Reference: String { return self._s[4101]! } - public var ChatList_HideAction: String { return self._s[4103]! } - public var Conversation_FileICloudDrive: String { return self._s[4105]! } + public var Map_StopLiveLocation: String { return self._s[4101]! } + public var SettingsSearch_Synonyms_Data_SaveEditedPhotos: String { return self._s[4102]! } + public var Channel_Username_InvalidCharacters: String { return self._s[4103]! } + public var InstantPage_Reference: String { return self._s[4104]! } + public var ChatList_HideAction: String { return self._s[4106]! } + public var Conversation_FileICloudDrive: String { return self._s[4108]! } public func PUSH_PINNED_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4106]!, self._r[4106]!, [_1]) + return formatWithArgumentRanges(self._s[4109]!, self._r[4109]!, [_1]) } - public var Passport_PasswordReset: String { return self._s[4108]! } - public var ChatList_Context_UnhideArchive: String { return self._s[4110]! } - public var ConvertToSupergroup_HelpText: String { return self._s[4111]! } - public var Calls_AddTab: String { return self._s[4112]! } - public var TwoStepAuth_ConfirmEmailResendCode: String { return self._s[4113]! } - public var SettingsSearch_Synonyms_Stickers_SuggestStickers: String { return self._s[4114]! } - public var Privacy_GroupsAndChannels: String { return self._s[4117]! } - public var AutoNightTheme_Disabled: String { return self._s[4118]! } - public var CreatePoll_MultipleChoice: String { return self._s[4119]! } + public var Passport_PasswordReset: String { return self._s[4111]! } + public var ChatList_Context_UnhideArchive: String { return self._s[4113]! } + public var ConvertToSupergroup_HelpText: String { return self._s[4114]! } + public var Calls_AddTab: String { return self._s[4115]! } + public var TwoStepAuth_ConfirmEmailResendCode: String { return self._s[4116]! } + public var SettingsSearch_Synonyms_Stickers_SuggestStickers: String { return self._s[4117]! } + public var Privacy_GroupsAndChannels: String { return self._s[4120]! } + public var AutoNightTheme_Disabled: String { return self._s[4121]! } + public var CreatePoll_MultipleChoice: String { return self._s[4122]! } public func PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4120]!, self._r[4120]!, [_1]) + return formatWithArgumentRanges(self._s[4123]!, self._r[4123]!, [_1]) } - public var Watch_Bot_Restart: String { return self._s[4122]! } + public var Watch_Bot_Restart: String { return self._s[4125]! } public func Conversation_Kilobytes(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4123]!, self._r[4123]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[4126]!, self._r[4126]!, ["\(_0)"]) } - public var GroupInfo_ScamGroupWarning: String { return self._s[4125]! } - public var Conversation_EditingMessagePanelMedia: String { return self._s[4126]! } - public var Appearance_PreviewIncomingText: String { return self._s[4127]! } - public var ChatSettings_WidgetSettings: String { return self._s[4128]! } - public var Notifications_ChannelNotificationsExceptionsHelp: String { return self._s[4129]! } - public var ChatList_UndoArchiveRevealedTitle: String { return self._s[4131]! } - public var Stats_GroupOverview: String { return self._s[4133]! } - public var ScheduledMessages_EditTime: String { return self._s[4136]! } - public var Month_GenFebruary: String { return self._s[4137]! } - public var ChatList_AutoarchiveSuggestion_OpenSettings: String { return self._s[4138]! } - public var Stickers_ClearRecent: String { return self._s[4139]! } - public var InviteLink_Create_UsersLimitNumberOfUsersUnlimited: String { return self._s[4140]! } - public var TwoStepAuth_EnterPasswordPassword: String { return self._s[4141]! } - public var Stats_Message_PublicShares: String { return self._s[4142]! } + public var GroupInfo_ScamGroupWarning: String { return self._s[4128]! } + public var Conversation_EditingMessagePanelMedia: String { return self._s[4129]! } + public var Appearance_PreviewIncomingText: String { return self._s[4130]! } + public var ChatSettings_WidgetSettings: String { return self._s[4131]! } + public var Notifications_ChannelNotificationsExceptionsHelp: String { return self._s[4132]! } + public var ChatList_UndoArchiveRevealedTitle: String { return self._s[4134]! } + public var Stats_GroupOverview: String { return self._s[4136]! } + public var ScheduledMessages_EditTime: String { return self._s[4139]! } + public var Month_GenFebruary: String { return self._s[4140]! } + public var ChatList_AutoarchiveSuggestion_OpenSettings: String { return self._s[4141]! } + public var Stickers_ClearRecent: String { return self._s[4142]! } + public var InviteLink_Create_UsersLimitNumberOfUsersUnlimited: String { return self._s[4143]! } + public var TwoStepAuth_EnterPasswordPassword: String { return self._s[4144]! } + public var Stats_Message_PublicShares: String { return self._s[4145]! } public func Checkout_PayPrice(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4143]!, self._r[4143]!, [_0]) + return formatWithArgumentRanges(self._s[4146]!, self._r[4146]!, [_0]) } - public var Login_TermsOfServiceSignupDecline: String { return self._s[4144]! } - public var CheckoutInfo_ErrorCityInvalid: String { return self._s[4145]! } - public var VoiceOver_Chat_PlayHint: String { return self._s[4146]! } - public var ChatAdmins_AllMembersAreAdminsOffHelp: String { return self._s[4147]! } - public var CheckoutInfo_ShippingInfoTitle: String { return self._s[4149]! } - public var CreatePoll_Create: String { return self._s[4150]! } - public var ChatList_Search_FilterLinks: String { return self._s[4151]! } - public var Your_cards_number_is_invalid: String { return self._s[4152]! } - public var Month_ShortApril: String { return self._s[4153]! } - public var SocksProxySetup_UseForCalls: String { return self._s[4154]! } - public var Conversation_EditingCaptionPanelTitle: String { return self._s[4155]! } - public var VoiceChat_UnmuteForMe: String { return self._s[4156]! } - public var SocksProxySetup_Status: String { return self._s[4157]! } - public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[4158]! } - public var ChatListFolder_CategoryBots: String { return self._s[4159]! } - public var Passport_FieldIdentitySelfieHelp: String { return self._s[4161]! } - public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[4162]! } - public var Chat_PinnedListPreview_UnpinAllMessages: String { return self._s[4163]! } - public var Wallpaper_ResetWallpapersInfo: String { return self._s[4164]! } - public var Conversation_TitleUnmute: String { return self._s[4165]! } - public var Group_Setup_TypeHeader: String { return self._s[4166]! } - public var Stats_ViewsPerPost: String { return self._s[4167]! } - public var CheckoutInfo_ShippingInfoCountry: String { return self._s[4168]! } - public var Passport_Identity_TranslationHelp: String { return self._s[4169]! } + public var Login_TermsOfServiceSignupDecline: String { return self._s[4147]! } + public var CheckoutInfo_ErrorCityInvalid: String { return self._s[4148]! } + public var VoiceOver_Chat_PlayHint: String { return self._s[4149]! } + public var ChatAdmins_AllMembersAreAdminsOffHelp: String { return self._s[4150]! } + public var CheckoutInfo_ShippingInfoTitle: String { return self._s[4152]! } + public var CreatePoll_Create: String { return self._s[4153]! } + public var ChatList_Search_FilterLinks: String { return self._s[4154]! } + public var Your_cards_number_is_invalid: String { return self._s[4155]! } + public var Month_ShortApril: String { return self._s[4156]! } + public var SocksProxySetup_UseForCalls: String { return self._s[4157]! } + public var Conversation_EditingCaptionPanelTitle: String { return self._s[4158]! } + public var SocksProxySetup_Status: String { return self._s[4159]! } + public var VoiceChat_UnmuteForMe: String { return self._s[4160]! } + public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[4161]! } + public var ChatListFolder_CategoryBots: String { return self._s[4162]! } + public var Passport_FieldIdentitySelfieHelp: String { return self._s[4164]! } + public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[4165]! } + public var Chat_PinnedListPreview_UnpinAllMessages: String { return self._s[4166]! } + public var Wallpaper_ResetWallpapersInfo: String { return self._s[4167]! } + public var Conversation_TitleUnmute: String { return self._s[4168]! } + public var Group_Setup_TypeHeader: String { return self._s[4169]! } + public var Stats_ViewsPerPost: String { return self._s[4170]! } + public var CheckoutInfo_ShippingInfoCountry: String { return self._s[4171]! } + public var Passport_Identity_TranslationHelp: String { return self._s[4172]! } public func PUSH_CHANNEL_MESSAGE_FWD(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4170]!, self._r[4170]!, [_1]) + return formatWithArgumentRanges(self._s[4173]!, self._r[4173]!, [_1]) } - public var GroupInfo_Administrators_Title: String { return self._s[4171]! } + public var GroupInfo_Administrators_Title: String { return self._s[4174]! } public func Channel_AdminLog_MessageRankName(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4172]!, self._r[4172]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4175]!, self._r[4175]!, [_1, _2]) } public func PUSH_CHAT_MESSAGE_POLL(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4173]!, self._r[4173]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4176]!, self._r[4176]!, [_1, _2, _3]) } - public var CheckoutInfo_ShippingInfoState: String { return self._s[4174]! } - public var Passport_Language_my: String { return self._s[4176]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[4177]! } - public var Map_PlacesNearby: String { return self._s[4178]! } - public var Channel_About_Help: String { return self._s[4179]! } - public var LogoutOptions_AddAccountTitle: String { return self._s[4180]! } - public var ChatSettings_AutomaticAudioDownload: String { return self._s[4181]! } - public var Channel_Username_Title: String { return self._s[4182]! } - public var Activity_RecordingVideoMessage: String { return self._s[4183]! } + public var CheckoutInfo_ShippingInfoState: String { return self._s[4177]! } + public var Passport_Language_my: String { return self._s[4179]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[4180]! } + public var Map_PlacesNearby: String { return self._s[4181]! } + public var Channel_About_Help: String { return self._s[4182]! } + public var LogoutOptions_AddAccountTitle: String { return self._s[4183]! } + public var ChatSettings_AutomaticAudioDownload: String { return self._s[4184]! } + public var Channel_Username_Title: String { return self._s[4185]! } + public var Activity_RecordingVideoMessage: String { return self._s[4186]! } public func StickerPackActionInfo_RemovedText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4184]!, self._r[4184]!, [_0]) + return formatWithArgumentRanges(self._s[4187]!, self._r[4187]!, [_0]) } - public var CheckoutInfo_ShippingInfoCity: String { return self._s[4185]! } - public var Passport_DiscardMessageDescription: String { return self._s[4186]! } - public var Conversation_LinkDialogOpen: String { return self._s[4187]! } - public var ChatList_Context_HideArchive: String { return self._s[4188]! } + public var CheckoutInfo_ShippingInfoCity: String { return self._s[4188]! } + public var Passport_DiscardMessageDescription: String { return self._s[4189]! } + public var Conversation_LinkDialogOpen: String { return self._s[4190]! } + public var ChatList_Context_HideArchive: String { return self._s[4191]! } public func Message_AuthorPinnedGame(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4189]!, self._r[4189]!, [_0]) + return formatWithArgumentRanges(self._s[4192]!, self._r[4192]!, [_0]) } - public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[4190]! } - public var Conversation_Admin: String { return self._s[4191]! } - public var DialogList_TabTitle: String { return self._s[4192]! } + public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[4193]! } + public var Conversation_Admin: String { return self._s[4194]! } + public var DialogList_TabTitle: String { return self._s[4195]! } public func PUSH_CHAT_ALBUM(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4193]!, self._r[4193]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4196]!, self._r[4196]!, [_1, _2]) } - public var Notifications_PermissionsUnreachableText: String { return self._s[4194]! } - public var Passport_Identity_GenderMale: String { return self._s[4196]! } - public var SettingsSearch_Synonyms_Privacy_BlockedUsers: String { return self._s[4198]! } - public var PhoneNumberHelp_Alert: String { return self._s[4199]! } - public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[4200]! } - public var Notifications_InAppNotifications: String { return self._s[4201]! } + public var Notifications_PermissionsUnreachableText: String { return self._s[4197]! } + public var Passport_Identity_GenderMale: String { return self._s[4199]! } + public var SettingsSearch_Synonyms_Privacy_BlockedUsers: String { return self._s[4201]! } + public var PhoneNumberHelp_Alert: String { return self._s[4202]! } + public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[4203]! } + public var Notifications_InAppNotifications: String { return self._s[4204]! } public func Update_AppVersion(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4202]!, self._r[4202]!, [_0]) + return formatWithArgumentRanges(self._s[4205]!, self._r[4205]!, [_0]) } - public var Notification_VideoCallOutgoing: String { return self._s[4203]! } - public var Login_InvalidCodeError: String { return self._s[4204]! } - public var Conversation_PrivateChannelTimeLimitedAlertJoin: String { return self._s[4205]! } + public var Notification_VideoCallOutgoing: String { return self._s[4206]! } + public var Login_InvalidCodeError: String { return self._s[4207]! } + public var Conversation_PrivateChannelTimeLimitedAlertJoin: String { return self._s[4208]! } public func LastSeen_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4207]!, self._r[4207]!, [_0]) + return formatWithArgumentRanges(self._s[4210]!, self._r[4210]!, [_0]) } - public var Conversation_InputTextCaptionPlaceholder: String { return self._s[4208]! } - public var ReportPeer_Report: String { return self._s[4209]! } - public var Camera_FlashOff: String { return self._s[4212]! } - public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[4215]! } - public var PrivacyPolicy_DeclineTitle: String { return self._s[4218]! } - public var SettingsSearch_Synonyms_Privacy_PasscodeAndTouchId: String { return self._s[4219]! } - public var Passport_FieldEmail: String { return self._s[4220]! } + public var Conversation_InputTextCaptionPlaceholder: String { return self._s[4211]! } + public var ReportPeer_Report: String { return self._s[4212]! } + public var Camera_FlashOff: String { return self._s[4215]! } + public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[4218]! } + public var PrivacyPolicy_DeclineTitle: String { return self._s[4221]! } + public var SettingsSearch_Synonyms_Privacy_PasscodeAndTouchId: String { return self._s[4222]! } + public var Passport_FieldEmail: String { return self._s[4223]! } public func Channel_AdminLog_MessageKickedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4221]!, self._r[4221]!, [_1]) + return formatWithArgumentRanges(self._s[4224]!, self._r[4224]!, [_1]) } - public var Notifications_ExceptionsResetToDefaults: String { return self._s[4222]! } - public var PeerInfo_PaneVoiceAndVideo: String { return self._s[4223]! } - public var Group_OwnershipTransfer_Title: String { return self._s[4224]! } - public var Conversation_DefaultRestrictedInline: String { return self._s[4225]! } - public var Login_PhoneNumberHelp: String { return self._s[4227]! } - public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[4228]! } - public var Conversation_PinnedQuiz: String { return self._s[4229]! } - public var CreateGroup_SoftUserLimitAlert: String { return self._s[4230]! } - public var Login_PhoneNumberAlreadyAuthorizedSwitch: String { return self._s[4231]! } - public var Group_MessagePhotoUpdated: String { return self._s[4232]! } - public var LoginPassword_PasswordPlaceholder: String { return self._s[4233]! } - public var Passport_Identity_Translations: String { return self._s[4235]! } - public var ChatAdmins_AllMembersAreAdmins: String { return self._s[4236]! } - public var ChannelInfo_DeleteChannel: String { return self._s[4238]! } - public var PasscodeSettings_HelpBottom: String { return self._s[4239]! } - public var Channel_Members_AddMembers: String { return self._s[4240]! } - public var AutoDownloadSettings_LastDelimeter: String { return self._s[4241]! } - public var Notification_Exceptions_DeleteAllConfirmation: String { return self._s[4243]! } - public var Conversation_HoldForAudio: String { return self._s[4244]! } - public var Media_LimitedAccessChangeSettings: String { return self._s[4246]! } - public var Watch_LastSeen_Lately: String { return self._s[4247]! } - public var ChatList_Context_MarkAsRead: String { return self._s[4248]! } - public var Conversation_PinnedMessage: String { return self._s[4249]! } - public var SettingsSearch_Synonyms_Appearance_ColorTheme: String { return self._s[4250]! } - public var Passport_UpdateRequiredError: String { return self._s[4252]! } - public var PrivacySettings_Passcode: String { return self._s[4253]! } + public var Notifications_ExceptionsResetToDefaults: String { return self._s[4225]! } + public var PeerInfo_PaneVoiceAndVideo: String { return self._s[4226]! } + public var Group_OwnershipTransfer_Title: String { return self._s[4227]! } + public var Conversation_DefaultRestrictedInline: String { return self._s[4228]! } + public var Login_PhoneNumberHelp: String { return self._s[4230]! } + public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[4231]! } + public var Conversation_PinnedQuiz: String { return self._s[4232]! } + public var CreateGroup_SoftUserLimitAlert: String { return self._s[4233]! } + public var Login_PhoneNumberAlreadyAuthorizedSwitch: String { return self._s[4234]! } + public var Group_MessagePhotoUpdated: String { return self._s[4235]! } + public var LoginPassword_PasswordPlaceholder: String { return self._s[4236]! } + public var Passport_Identity_Translations: String { return self._s[4238]! } + public var ChatAdmins_AllMembersAreAdmins: String { return self._s[4239]! } + public var ChannelInfo_DeleteChannel: String { return self._s[4241]! } + public var PasscodeSettings_HelpBottom: String { return self._s[4242]! } + public var Channel_Members_AddMembers: String { return self._s[4243]! } + public var AutoDownloadSettings_LastDelimeter: String { return self._s[4244]! } + public var Notification_Exceptions_DeleteAllConfirmation: String { return self._s[4246]! } + public var Conversation_HoldForAudio: String { return self._s[4247]! } + public var Media_LimitedAccessChangeSettings: String { return self._s[4249]! } + public var Watch_LastSeen_Lately: String { return self._s[4250]! } + public var ChatList_Context_MarkAsRead: String { return self._s[4251]! } + public var Conversation_PinnedMessage: String { return self._s[4252]! } + public var SettingsSearch_Synonyms_Appearance_ColorTheme: String { return self._s[4253]! } + public var Passport_UpdateRequiredError: String { return self._s[4255]! } + public var PrivacySettings_Passcode: String { return self._s[4256]! } public func Call_EmojiDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4254]!, self._r[4254]!, [_0]) + return formatWithArgumentRanges(self._s[4257]!, self._r[4257]!, [_0]) } - public var AutoNightTheme_NotAvailable: String { return self._s[4255]! } - public var Conversation_PressVolumeButtonForSound: String { return self._s[4256]! } - public var VoiceOver_Common_On: String { return self._s[4257]! } - public var LoginPassword_InvalidPasswordError: String { return self._s[4258]! } - public var ChatListFolder_IncludedSectionHeader: String { return self._s[4259]! } - public var Channel_SignMessages_Help: String { return self._s[4260]! } - public var ChatList_DeleteForEveryoneConfirmationTitle: String { return self._s[4261]! } - public var Conversation_TitleNoComments: String { return self._s[4262]! } - public var MediaPicker_LivePhotoDescription: String { return self._s[4263]! } - public var GroupInfo_Permissions: String { return self._s[4264]! } - public var GroupPermission_NoSendLinks: String { return self._s[4267]! } - public var Passport_Identity_ResidenceCountry: String { return self._s[4268]! } - public var Appearance_ThemeCarouselNightBlue: String { return self._s[4270]! } - public var ChatList_ArchiveAction: String { return self._s[4271]! } + public var AutoNightTheme_NotAvailable: String { return self._s[4258]! } + public var Conversation_PressVolumeButtonForSound: String { return self._s[4259]! } + public var VoiceOver_Common_On: String { return self._s[4260]! } + public var LoginPassword_InvalidPasswordError: String { return self._s[4261]! } + public var ChatListFolder_IncludedSectionHeader: String { return self._s[4262]! } + public var Channel_SignMessages_Help: String { return self._s[4263]! } + public var ChatList_DeleteForEveryoneConfirmationTitle: String { return self._s[4264]! } + public var Conversation_TitleNoComments: String { return self._s[4265]! } + public var MediaPicker_LivePhotoDescription: String { return self._s[4266]! } + public var GroupInfo_Permissions: String { return self._s[4267]! } + public var GroupPermission_NoSendLinks: String { return self._s[4270]! } + public var Passport_Identity_ResidenceCountry: String { return self._s[4271]! } + public var Appearance_ThemeCarouselNightBlue: String { return self._s[4273]! } + public var ChatList_ArchiveAction: String { return self._s[4274]! } public func Channel_AdminLog_DisabledSlowmode(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4272]!, self._r[4272]!, [_0]) - } - public var GroupInfo_GroupHistory: String { return self._s[4273]! } - public func Channel_Management_ErrorNotMember(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[4275]!, self._r[4275]!, [_0]) } - public var Privacy_Forwards_LinkIfAllowed: String { return self._s[4277]! } - public var Channel_Info_Banned: String { return self._s[4278]! } - public var Paint_RecentStickers: String { return self._s[4279]! } - public var VoiceOver_MessageContextSend: String { return self._s[4280]! } - public var Group_ErrorNotMutualContact: String { return self._s[4281]! } - public var ReportPeer_ReasonOther: String { return self._s[4283]! } - public var Channel_BanUser_PermissionChangeGroupInfo: String { return self._s[4284]! } - public var SocksProxySetup_ShareQRCodeInfo: String { return self._s[4286]! } - public var KeyCommand_Find: String { return self._s[4287]! } + public var GroupInfo_GroupHistory: String { return self._s[4276]! } + public func Channel_Management_ErrorNotMember(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[4278]!, self._r[4278]!, [_0]) + } + public var Privacy_Forwards_LinkIfAllowed: String { return self._s[4280]! } + public var Channel_Info_Banned: String { return self._s[4281]! } + public var Paint_RecentStickers: String { return self._s[4282]! } + public var VoiceOver_MessageContextSend: String { return self._s[4283]! } + public var Group_ErrorNotMutualContact: String { return self._s[4284]! } + public var ReportPeer_ReasonOther: String { return self._s[4286]! } + public var Channel_BanUser_PermissionChangeGroupInfo: String { return self._s[4287]! } + public var SocksProxySetup_ShareQRCodeInfo: String { return self._s[4289]! } + public var KeyCommand_Find: String { return self._s[4290]! } public func Channel_MessageTitleUpdated(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4288]!, self._r[4288]!, [_0]) + return formatWithArgumentRanges(self._s[4291]!, self._r[4291]!, [_0]) } - public var ChatList_Context_Unmute: String { return self._s[4289]! } - public var Chat_SlowmodeAttachmentLimitReached: String { return self._s[4290]! } - public var Stickers_GroupStickersHelp: String { return self._s[4291]! } - public var Checkout_Title: String { return self._s[4292]! } - public var Activity_RecordingAudio: String { return self._s[4293]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsPreview: String { return self._s[4294]! } - public var BlockedUsers_BlockTitle: String { return self._s[4295]! } - public var DialogList_SavedMessagesHelp: String { return self._s[4297]! } - public var Calls_All: String { return self._s[4298]! } - public var Settings_FAQ_Button: String { return self._s[4300]! } - public var Conversation_Dice_u1F3B0: String { return self._s[4302]! } + public var ChatList_Context_Unmute: String { return self._s[4292]! } + public var Chat_SlowmodeAttachmentLimitReached: String { return self._s[4293]! } + public var Stickers_GroupStickersHelp: String { return self._s[4294]! } + public var Checkout_Title: String { return self._s[4295]! } + public var Activity_RecordingAudio: String { return self._s[4296]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsPreview: String { return self._s[4297]! } + public var BlockedUsers_BlockTitle: String { return self._s[4298]! } + public var DialogList_SavedMessagesHelp: String { return self._s[4300]! } + public var Calls_All: String { return self._s[4301]! } + public var Settings_FAQ_Button: String { return self._s[4303]! } + public var Conversation_Dice_u1F3B0: String { return self._s[4305]! } public func Time_MonthOfYear_m5(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4303]!, self._r[4303]!, [_0]) + return formatWithArgumentRanges(self._s[4306]!, self._r[4306]!, [_0]) } - public var Conversation_ReportGroupLocation: String { return self._s[4304]! } - public var Passport_Scans_Upload: String { return self._s[4305]! } - public var Channel_EditAdmin_PermissionPinMessages: String { return self._s[4307]! } - public var ChatList_UnarchiveAction: String { return self._s[4308]! } - public var Stats_GroupTopInviter_History: String { return self._s[4309]! } - public var GroupInfo_Permissions_Title: String { return self._s[4310]! } - public var VoiceChat_CreateNewVoiceChatStart: String { return self._s[4311]! } - public var Passport_Language_el: String { return self._s[4312]! } - public var Channel_DiscussionMessageUnavailable: String { return self._s[4313]! } - public var GroupInfo_ActionPromote: String { return self._s[4314]! } - public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[4315]! } - public var Media_LimitedAccessSelectMore: String { return self._s[4316]! } + public var Conversation_ReportGroupLocation: String { return self._s[4307]! } + public var Passport_Scans_Upload: String { return self._s[4308]! } + public var Channel_EditAdmin_PermissionPinMessages: String { return self._s[4310]! } + public var ChatList_UnarchiveAction: String { return self._s[4311]! } + public var Stats_GroupTopInviter_History: String { return self._s[4312]! } + public var GroupInfo_Permissions_Title: String { return self._s[4313]! } + public var VoiceChat_CreateNewVoiceChatStart: String { return self._s[4314]! } + public var Passport_Language_el: String { return self._s[4315]! } + public var Channel_DiscussionMessageUnavailable: String { return self._s[4316]! } + public var GroupInfo_ActionPromote: String { return self._s[4317]! } + public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[4318]! } + public var Media_LimitedAccessSelectMore: String { return self._s[4319]! } public func TwoStepAuth_PendingEmailHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4317]!, self._r[4317]!, [_0]) + return formatWithArgumentRanges(self._s[4320]!, self._r[4320]!, [_0]) } - public var VoiceOver_Chat_Reply: String { return self._s[4318]! } - public var Month_GenMay: String { return self._s[4319]! } - public var DialogList_DeleteBotConversationConfirmation: String { return self._s[4320]! } - public var Chat_PsaTooltip_covid: String { return self._s[4321]! } - public var Watch_Suggestion_CantTalk: String { return self._s[4322]! } - public var Privacy_GroupsAndChannels_NeverAllow_Title: String { return self._s[4323]! } - public var AppUpgrade_Running: String { return self._s[4324]! } - public var PasscodeSettings_UnlockWithFaceId: String { return self._s[4327]! } - public var Notification_Exceptions_PreviewAlwaysOff: String { return self._s[4328]! } - public var SharedMedia_EmptyText: String { return self._s[4329]! } - public var Passport_Address_EditResidentialAddress: String { return self._s[4330]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[4331]! } - public var Message_PinnedGame: String { return self._s[4332]! } - public var KeyCommand_SearchInChat: String { return self._s[4333]! } - public var Appearance_ThemeCarouselNewNight: String { return self._s[4334]! } - public var ChatList_Search_FilterMedia: String { return self._s[4335]! } - public var Message_PinnedAudioMessage: String { return self._s[4336]! } - public var ChannelInfo_ConfirmLeave: String { return self._s[4337]! } + public var VoiceOver_Chat_Reply: String { return self._s[4321]! } + public var Month_GenMay: String { return self._s[4322]! } + public var DialogList_DeleteBotConversationConfirmation: String { return self._s[4323]! } + public var Chat_PsaTooltip_covid: String { return self._s[4324]! } + public var Watch_Suggestion_CantTalk: String { return self._s[4325]! } + public var Privacy_GroupsAndChannels_NeverAllow_Title: String { return self._s[4326]! } + public var AppUpgrade_Running: String { return self._s[4327]! } + public var PasscodeSettings_UnlockWithFaceId: String { return self._s[4330]! } + public var Notification_Exceptions_PreviewAlwaysOff: String { return self._s[4331]! } + public var SharedMedia_EmptyText: String { return self._s[4332]! } + public var Passport_Address_EditResidentialAddress: String { return self._s[4333]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[4334]! } + public var Message_PinnedGame: String { return self._s[4335]! } + public var KeyCommand_SearchInChat: String { return self._s[4336]! } + public var Appearance_ThemeCarouselNewNight: String { return self._s[4337]! } + public var ChatList_Search_FilterMedia: String { return self._s[4338]! } + public var Message_PinnedAudioMessage: String { return self._s[4339]! } + public var ChannelInfo_ConfirmLeave: String { return self._s[4340]! } public func Channel_AdminLog_MessagePromotedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4338]!, self._r[4338]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4341]!, self._r[4341]!, [_1, _2]) } - public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[4339]! } - public var InviteLink_Create: String { return self._s[4340]! } + public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[4342]! } + public var InviteLink_Create: String { return self._s[4343]! } public func Passport_Email_CodeHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4341]!, self._r[4341]!, [_0]) + return formatWithArgumentRanges(self._s[4344]!, self._r[4344]!, [_0]) } public func Message_PinnedTextMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4342]!, self._r[4342]!, [_0]) + return formatWithArgumentRanges(self._s[4345]!, self._r[4345]!, [_0]) } - public var Settings_AddAccount: String { return self._s[4343]! } - public var Channel_AdminLog_CanDeleteMessages: String { return self._s[4344]! } - public var Conversation_DiscardVoiceMessageTitle: String { return self._s[4345]! } - public var Channel_JoinChannel: String { return self._s[4346]! } - public var Watch_UserInfo_Unblock: String { return self._s[4347]! } - public var PhoneLabel_Title: String { return self._s[4348]! } - public var Group_Setup_HistoryHiddenHelp: String { return self._s[4350]! } - public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[4351]! } + public var Settings_AddAccount: String { return self._s[4346]! } + public var Channel_AdminLog_CanDeleteMessages: String { return self._s[4347]! } + public var Conversation_DiscardVoiceMessageTitle: String { return self._s[4348]! } + public var Channel_JoinChannel: String { return self._s[4349]! } + public var Watch_UserInfo_Unblock: String { return self._s[4350]! } + public var PhoneLabel_Title: String { return self._s[4351]! } + public var Group_Setup_HistoryHiddenHelp: String { return self._s[4353]! } + public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[4354]! } public func Login_PhoneGenericEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String, _ _6: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4352]!, self._r[4352]!, [_1, _2, _3, _4, _5, _6]) + return formatWithArgumentRanges(self._s[4355]!, self._r[4355]!, [_1, _2, _3, _4, _5, _6]) } - public var Channel_AddBotErrorHaveRights: String { return self._s[4353]! } - public var ChatList_TabIconFoldersTooltipNonEmptyFolders: String { return self._s[4354]! } - public var DialogList_EncryptionProcessing: String { return self._s[4355]! } - public var ChatList_Search_FilterChats: String { return self._s[4356]! } - public var WatchRemote_NotificationText: String { return self._s[4357]! } - public var EditTheme_ChangeColors: String { return self._s[4358]! } - public var GroupRemoved_ViewUserInfo: String { return self._s[4359]! } - public var CallSettings_OnMobile: String { return self._s[4361]! } - public var Month_ShortFebruary: String { return self._s[4363]! } - public var VoiceOver_MessageContextReply: String { return self._s[4364]! } - public var Group_Location_ChangeLocation: String { return self._s[4366]! } + public var Channel_AddBotErrorHaveRights: String { return self._s[4356]! } + public var ChatList_TabIconFoldersTooltipNonEmptyFolders: String { return self._s[4357]! } + public var DialogList_EncryptionProcessing: String { return self._s[4358]! } + public var ChatList_Search_FilterChats: String { return self._s[4359]! } + public var WatchRemote_NotificationText: String { return self._s[4360]! } + public var EditTheme_ChangeColors: String { return self._s[4361]! } + public var GroupRemoved_ViewUserInfo: String { return self._s[4362]! } + public var CallSettings_OnMobile: String { return self._s[4364]! } + public var Month_ShortFebruary: String { return self._s[4366]! } + public var VoiceOver_MessageContextReply: String { return self._s[4367]! } + public var Group_Location_ChangeLocation: String { return self._s[4369]! } public func PUSH_VIDEO_CALL_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4367]!, self._r[4367]!, [_1]) + return formatWithArgumentRanges(self._s[4370]!, self._r[4370]!, [_1]) } - public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[4368]! } - public var VoiceOver_Media_PlaybackStop: String { return self._s[4369]! } - public var SettingsSearch_Synonyms_Data_SaveIncomingPhotos: String { return self._s[4370]! } + public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[4371]! } + public var VoiceOver_Media_PlaybackStop: String { return self._s[4372]! } + public var SettingsSearch_Synonyms_Data_SaveIncomingPhotos: String { return self._s[4373]! } public func Channel_AdminLog_MessageRestrictedUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4372]!, self._r[4372]!, [_0]) + return formatWithArgumentRanges(self._s[4375]!, self._r[4375]!, [_0]) } - public var PhotoEditor_WarmthTool: String { return self._s[4373]! } - public var Login_InfoAvatarPhoto: String { return self._s[4374]! } - public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[4375]! } - public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[4376]! } - public var Map_PlacesInThisArea: String { return self._s[4377]! } - public var VoiceOver_Chat_ContactEmail: String { return self._s[4378]! } - public var Notifications_InAppNotificationsSounds: String { return self._s[4379]! } + public var PhotoEditor_WarmthTool: String { return self._s[4376]! } + public var Login_InfoAvatarPhoto: String { return self._s[4377]! } + public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[4378]! } + public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[4379]! } + public var Map_PlacesInThisArea: String { return self._s[4380]! } + public var VoiceOver_Chat_ContactEmail: String { return self._s[4381]! } + public var Notifications_InAppNotificationsSounds: String { return self._s[4382]! } public func PUSH_PINNED_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4380]!, self._r[4380]!, [_1]) - } - public var ShareMenu_Send: String { return self._s[4381]! } - public var Username_InvalidStartsWithNumber: String { return self._s[4382]! } - public func Channel_AdminLog_StartedVoiceChat(_ _1: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[4383]!, self._r[4383]!, [_1]) } - public var Appearance_AppIconClassicX: String { return self._s[4384]! } + public var ShareMenu_Send: String { return self._s[4384]! } + public var Username_InvalidStartsWithNumber: String { return self._s[4385]! } + public func Channel_AdminLog_StartedVoiceChat(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[4386]!, self._r[4386]!, [_1]) + } + public var Appearance_AppIconClassicX: String { return self._s[4387]! } public func PUSH_CHANNEL_MESSAGE_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4385]!, self._r[4385]!, [_1]) + return formatWithArgumentRanges(self._s[4388]!, self._r[4388]!, [_1]) } - public var Conversation_StopPoll: String { return self._s[4386]! } - public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[4388]! } - public var Passport_Identity_EditIdentityCard: String { return self._s[4389]! } - public var Appearance_ThemePreview_ChatList_3_Name: String { return self._s[4390]! } - public var Conversation_Timer_Title: String { return self._s[4391]! } - public var Common_Next: String { return self._s[4392]! } - public var Notification_Exceptions_NewException: String { return self._s[4393]! } + public var Conversation_StopPoll: String { return self._s[4389]! } + public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[4391]! } + public var Passport_Identity_EditIdentityCard: String { return self._s[4392]! } + public var Appearance_ThemePreview_ChatList_3_Name: String { return self._s[4393]! } + public var Conversation_Timer_Title: String { return self._s[4394]! } + public var Common_Next: String { return self._s[4395]! } + public var Notification_Exceptions_NewException: String { return self._s[4396]! } public func Generic_OpenHiddenLinkAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4394]!, self._r[4394]!, [_0]) + return formatWithArgumentRanges(self._s[4397]!, self._r[4397]!, [_0]) } - public var AccessDenied_CallMicrophone: String { return self._s[4395]! } - public var VoiceChat_UnmutePeer: String { return self._s[4396]! } - public var SettingsSearch_Synonyms_Data_AutoDownloadUsingCellular: String { return self._s[4397]! } - public var ChangePhoneNumberCode_Help: String { return self._s[4398]! } - public var Passport_Identity_OneOfTypeIdentityCard: String { return self._s[4399]! } - public var Channel_AdminLogFilter_EventsLeaving: String { return self._s[4400]! } - public var BlockedUsers_LeavePrefix: String { return self._s[4401]! } + public var AccessDenied_CallMicrophone: String { return self._s[4398]! } + public var VoiceChat_UnmutePeer: String { return self._s[4399]! } + public var SettingsSearch_Synonyms_Data_AutoDownloadUsingCellular: String { return self._s[4400]! } + public var ChangePhoneNumberCode_Help: String { return self._s[4401]! } + public var Passport_Identity_OneOfTypeIdentityCard: String { return self._s[4402]! } + public var Channel_AdminLogFilter_EventsLeaving: String { return self._s[4403]! } + public var BlockedUsers_LeavePrefix: String { return self._s[4404]! } public func Passport_RequestHeader(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4402]!, self._r[4402]!, [_0]) + return formatWithArgumentRanges(self._s[4405]!, self._r[4405]!, [_0]) } - public var Group_About_Help: String { return self._s[4403]! } - public var TwoStepAuth_ChangePasswordDescription: String { return self._s[4404]! } - public var Tour_Title3: String { return self._s[4405]! } - public var Watch_Conversation_Unblock: String { return self._s[4406]! } - public var Watch_UserInfo_Block: String { return self._s[4407]! } - public var Notifications_ChannelNotificationsAlert: String { return self._s[4408]! } - public var TwoFactorSetup_Hint_Action: String { return self._s[4409]! } - public var IntentsSettings_SuggestedChatsInfo: String { return self._s[4410]! } - public var TextFormat_AddLinkTitle: String { return self._s[4411]! } - public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[4412]! } - public var TwoStepAuth_EnterPasswordTitle: String { return self._s[4413]! } - public var FastTwoStepSetup_PasswordSection: String { return self._s[4414]! } - public var Compose_ChannelMembers: String { return self._s[4415]! } - public var Conversation_ForwardTitle: String { return self._s[4416]! } - public var Conversation_PinnedPoll: String { return self._s[4418]! } + public var Group_About_Help: String { return self._s[4406]! } + public var TwoStepAuth_ChangePasswordDescription: String { return self._s[4407]! } + public var Tour_Title3: String { return self._s[4408]! } + public var Watch_Conversation_Unblock: String { return self._s[4409]! } + public var Watch_UserInfo_Block: String { return self._s[4410]! } + public var Notifications_ChannelNotificationsAlert: String { return self._s[4411]! } + public var TwoFactorSetup_Hint_Action: String { return self._s[4412]! } + public var IntentsSettings_SuggestedChatsInfo: String { return self._s[4413]! } + public var TextFormat_AddLinkTitle: String { return self._s[4414]! } + public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[4415]! } + public var TwoStepAuth_EnterPasswordTitle: String { return self._s[4416]! } + public var FastTwoStepSetup_PasswordSection: String { return self._s[4417]! } + public var Compose_ChannelMembers: String { return self._s[4418]! } + public var Conversation_ForwardTitle: String { return self._s[4419]! } + public var Conversation_PinnedPoll: String { return self._s[4421]! } public func VoiceOver_Chat_AnonymousPollFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4419]!, self._r[4419]!, [_0]) + return formatWithArgumentRanges(self._s[4422]!, self._r[4422]!, [_0]) } - public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[4420]! } - public var Conversation_ContextMenuStickerPackAdd: String { return self._s[4421]! } - public var Stats_Overview: String { return self._s[4422]! } - public var Map_HomeAndWorkTitle: String { return self._s[4423]! } + public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[4423]! } + public var Conversation_ContextMenuStickerPackAdd: String { return self._s[4424]! } + public var Stats_Overview: String { return self._s[4425]! } + public var Map_HomeAndWorkTitle: String { return self._s[4426]! } public func Time_PreciseDate_m4(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4424]!, self._r[4424]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4427]!, self._r[4427]!, [_1, _2, _3]) } - public var Passport_Address_CityPlaceholder: String { return self._s[4425]! } - public var InfoPlist_NSLocationAlwaysAndWhenInUseUsageDescription: String { return self._s[4426]! } - public var Privacy_PhoneNumber: String { return self._s[4427]! } - public var ChatList_Search_FilterFiles: String { return self._s[4428]! } - public var ChatList_DeleteForEveryoneConfirmationAction: String { return self._s[4429]! } - public var ChannelIntro_CreateChannel: String { return self._s[4430]! } - public var Conversation_InputTextAnonymousPlaceholder: String { return self._s[4431]! } + public var Passport_Address_CityPlaceholder: String { return self._s[4428]! } + public var InfoPlist_NSLocationAlwaysAndWhenInUseUsageDescription: String { return self._s[4429]! } + public var Privacy_PhoneNumber: String { return self._s[4430]! } + public var ChatList_Search_FilterFiles: String { return self._s[4431]! } + public var ChatList_DeleteForEveryoneConfirmationAction: String { return self._s[4432]! } + public var ChannelIntro_CreateChannel: String { return self._s[4433]! } + public var Conversation_InputTextAnonymousPlaceholder: String { return self._s[4434]! } public func Login_EmailCodeBody(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4432]!, self._r[4432]!, [_0]) + return formatWithArgumentRanges(self._s[4435]!, self._r[4435]!, [_0]) } - public var Weekday_ShortMonday: String { return self._s[4433]! } - public var Passport_Language_ar: String { return self._s[4435]! } - public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[4436]! } - public var TwoFactorSetup_Done_Title: String { return self._s[4437]! } - public var Calls_RatingFeedback: String { return self._s[4438]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsPreview: String { return self._s[4439]! } - public var AutoDownloadSettings_ResetSettings: String { return self._s[4442]! } - public var Watch_Compose_Send: String { return self._s[4443]! } - public var PasscodeSettings_ChangePasscode: String { return self._s[4444]! } - public var WebSearch_RecentSectionClear: String { return self._s[4445]! } + public var Weekday_ShortMonday: String { return self._s[4436]! } + public var Passport_Language_ar: String { return self._s[4438]! } + public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[4439]! } + public var TwoFactorSetup_Done_Title: String { return self._s[4440]! } + public var Calls_RatingFeedback: String { return self._s[4441]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsPreview: String { return self._s[4442]! } + public var AutoDownloadSettings_ResetSettings: String { return self._s[4445]! } + public var Watch_Compose_Send: String { return self._s[4446]! } + public var PasscodeSettings_ChangePasscode: String { return self._s[4447]! } + public var WebSearch_RecentSectionClear: String { return self._s[4448]! } public func Contacts_AccessDeniedHelpPortrait(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4446]!, self._r[4446]!, [_0]) + return formatWithArgumentRanges(self._s[4449]!, self._r[4449]!, [_0]) } - public var WallpaperSearch_ColorTeal: String { return self._s[4447]! } - public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[4448]! } - public var Permissions_ContactsTitle_v0: String { return self._s[4449]! } - public var Checkout_PasswordEntry_Pay: String { return self._s[4451]! } - public var Settings_SavedMessages: String { return self._s[4452]! } - public var TwoStepAuth_ReEnterPasswordDescription: String { return self._s[4453]! } - public var Month_ShortMarch: String { return self._s[4454]! } - public var Message_Location: String { return self._s[4455]! } + public var WallpaperSearch_ColorTeal: String { return self._s[4450]! } + public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[4451]! } + public var Permissions_ContactsTitle_v0: String { return self._s[4452]! } + public var Checkout_PasswordEntry_Pay: String { return self._s[4454]! } + public var Settings_SavedMessages: String { return self._s[4455]! } + public var TwoStepAuth_ReEnterPasswordDescription: String { return self._s[4456]! } + public var Month_ShortMarch: String { return self._s[4457]! } + public var Message_Location: String { return self._s[4458]! } public func PUSH_MESSAGE_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4456]!, self._r[4456]!, [_1]) + return formatWithArgumentRanges(self._s[4459]!, self._r[4459]!, [_1]) } public func Notification_CallTimeFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4457]!, self._r[4457]!, [_1, _2]) - } - public var VoiceOver_Chat_VoiceMessage: String { return self._s[4459]! } - public func Channel_AdminLog_MessageChangedUnlinkedChannel(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[4460]!, self._r[4460]!, [_1, _2]) } - public var GroupPermission_NoSendMedia: String { return self._s[4461]! } - public var Conversation_ClousStorageInfo_Description2: String { return self._s[4462]! } - public var SharedMedia_CategoryDocs: String { return self._s[4463]! } - public var Appearance_RemoveThemeConfirmation: String { return self._s[4464]! } - public var Paint_Framed: String { return self._s[4465]! } - public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[4466]! } - public var Passport_Identity_DoesNotExpire: String { return self._s[4467]! } - public var Channel_SignMessages: String { return self._s[4468]! } - public var Contacts_AccessDeniedHelpON: String { return self._s[4469]! } - public var Conversation_ContextMenuStickerPackInfo: String { return self._s[4470]! } + public var VoiceOver_Chat_VoiceMessage: String { return self._s[4462]! } + public func Channel_AdminLog_MessageChangedUnlinkedChannel(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[4463]!, self._r[4463]!, [_1, _2]) + } + public var GroupPermission_NoSendMedia: String { return self._s[4464]! } + public var Conversation_ClousStorageInfo_Description2: String { return self._s[4465]! } + public var SharedMedia_CategoryDocs: String { return self._s[4466]! } + public var Appearance_RemoveThemeConfirmation: String { return self._s[4467]! } + public var Paint_Framed: String { return self._s[4468]! } + public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[4469]! } + public var Passport_Identity_DoesNotExpire: String { return self._s[4470]! } + public var Channel_SignMessages: String { return self._s[4471]! } + public var Contacts_AccessDeniedHelpON: String { return self._s[4472]! } + public var Conversation_ContextMenuStickerPackInfo: String { return self._s[4473]! } public func PUSH_CHAT_LEFT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4471]!, self._r[4471]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4474]!, self._r[4474]!, [_1, _2]) } - public var InviteLink_Create_TimeLimitNoLimit: String { return self._s[4472]! } - public var GroupInfo_UpgradeButton: String { return self._s[4473]! } - public var Channel_EditAdmin_PermissionInviteMembers: String { return self._s[4474]! } - public var AutoDownloadSettings_Files: String { return self._s[4475]! } + public var InviteLink_Create_TimeLimitNoLimit: String { return self._s[4475]! } + public var GroupInfo_UpgradeButton: String { return self._s[4476]! } + public var Channel_EditAdmin_PermissionInviteMembers: String { return self._s[4477]! } + public var AutoDownloadSettings_Files: String { return self._s[4478]! } public func Notification_ChangedGroupName(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4476]!, self._r[4476]!, [_0, _1]) + return formatWithArgumentRanges(self._s[4479]!, self._r[4479]!, [_0, _1]) } - public var Login_SendCodeViaSms: String { return self._s[4478]! } - public var Update_UpdateApp: String { return self._s[4479]! } - public var Channel_Setup_TypePublic: String { return self._s[4480]! } - public var Watch_Compose_CreateMessage: String { return self._s[4481]! } + public var Login_SendCodeViaSms: String { return self._s[4481]! } + public var Update_UpdateApp: String { return self._s[4482]! } + public var Channel_Setup_TypePublic: String { return self._s[4483]! } + public var Watch_Compose_CreateMessage: String { return self._s[4484]! } public func PUSH_CHAT_MESSAGE_VIDEOS(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4482]!, self._r[4482]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4485]!, self._r[4485]!, [_1, _2, _3]) } - public var StickerPacksSettings_ManagingHelp: String { return self._s[4483]! } - public var VoiceOver_Chat_Video: String { return self._s[4484]! } - public var Forward_ChannelReadOnly: String { return self._s[4485]! } - public var StickerPack_HideStickers: String { return self._s[4486]! } - public var ChatListFolder_NameContacts: String { return self._s[4487]! } - public var Profile_BotInfo: String { return self._s[4488]! } - public var Document_TargetConfirmationFormat: String { return self._s[4489]! } - public var GroupInfo_InviteByLink: String { return self._s[4490]! } - public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[4491]! } - public var Watch_Stickers_RecentPlaceholder: String { return self._s[4492]! } - public var Broadcast_AdminLog_EmptyText: String { return self._s[4493]! } - public var Passport_NotLoggedInMessage: String { return self._s[4494]! } - public var Conversation_StopQuizConfirmation: String { return self._s[4495]! } - public var Checkout_PaymentMethod: String { return self._s[4496]! } - public var ChatList_ArchivedChatsTitle: String { return self._s[4500]! } - public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[4501]! } - public var VoiceOver_Chat_RecordPreviewVoiceMessage: String { return self._s[4502]! } - public var PrivacyLastSeenSettings_GroupsAndChannelsHelp: String { return self._s[4503]! } - public var SettingsSearch_Synonyms_Privacy_Data_ContactsReset: String { return self._s[4504]! } - public var Camera_Title: String { return self._s[4505]! } - public var Map_Directions: String { return self._s[4506]! } - public var Stats_MessagePublicForwardsTitle: String { return self._s[4508]! } - public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[4509]! } - public var Profile_EncryptionKey: String { return self._s[4510]! } + public var StickerPacksSettings_ManagingHelp: String { return self._s[4486]! } + public var VoiceOver_Chat_Video: String { return self._s[4487]! } + public var Forward_ChannelReadOnly: String { return self._s[4488]! } + public var StickerPack_HideStickers: String { return self._s[4489]! } + public var ChatListFolder_NameContacts: String { return self._s[4490]! } + public var Profile_BotInfo: String { return self._s[4491]! } + public var Document_TargetConfirmationFormat: String { return self._s[4492]! } + public var GroupInfo_InviteByLink: String { return self._s[4493]! } + public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[4494]! } + public var Watch_Stickers_RecentPlaceholder: String { return self._s[4495]! } + public var Broadcast_AdminLog_EmptyText: String { return self._s[4496]! } + public var Passport_NotLoggedInMessage: String { return self._s[4497]! } + public var Conversation_StopQuizConfirmation: String { return self._s[4498]! } + public var Checkout_PaymentMethod: String { return self._s[4499]! } + public var ChatList_ArchivedChatsTitle: String { return self._s[4503]! } + public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[4504]! } + public var VoiceOver_Chat_RecordPreviewVoiceMessage: String { return self._s[4505]! } + public var PrivacyLastSeenSettings_GroupsAndChannelsHelp: String { return self._s[4506]! } + public var SettingsSearch_Synonyms_Privacy_Data_ContactsReset: String { return self._s[4507]! } + public var Camera_Title: String { return self._s[4508]! } + public var Map_Directions: String { return self._s[4509]! } + public var Stats_MessagePublicForwardsTitle: String { return self._s[4511]! } + public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[4512]! } + public var Profile_EncryptionKey: String { return self._s[4513]! } public func LOCAL_CHAT_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4511]!, self._r[4511]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[4514]!, self._r[4514]!, [_1, "\(_2)"]) } public func Compatibility_SecretMediaVersionTooLow(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4512]!, self._r[4512]!, [_0, _1]) + return formatWithArgumentRanges(self._s[4515]!, self._r[4515]!, [_0, _1]) } - public var Passport_Identity_TypePassport: String { return self._s[4513]! } - public var CreatePoll_QuizOptionsHeader: String { return self._s[4515]! } - public var Common_No: String { return self._s[4516]! } - public var Conversation_SendMessage_ScheduleMessage: String { return self._s[4517]! } - public var SettingsSearch_Synonyms_Privacy_LastSeen: String { return self._s[4518]! } - public var Settings_AboutEmpty: String { return self._s[4519]! } - public var TwoStepAuth_FloodError: String { return self._s[4521]! } - public var SettingsSearch_Synonyms_Appearance_TextSize: String { return self._s[4522]! } + public var Passport_Identity_TypePassport: String { return self._s[4516]! } + public var CreatePoll_QuizOptionsHeader: String { return self._s[4518]! } + public var Common_No: String { return self._s[4519]! } + public var Conversation_SendMessage_ScheduleMessage: String { return self._s[4520]! } + public var SettingsSearch_Synonyms_Privacy_LastSeen: String { return self._s[4521]! } + public var Settings_AboutEmpty: String { return self._s[4522]! } + public var TwoStepAuth_FloodError: String { return self._s[4524]! } + public var SettingsSearch_Synonyms_Appearance_TextSize: String { return self._s[4525]! } public func Channel_AdminLog_MessageUnkickedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4524]!, self._r[4524]!, [_1]) + return formatWithArgumentRanges(self._s[4527]!, self._r[4527]!, [_1]) } - public var Conversation_Edit: String { return self._s[4527]! } - public var CheckoutInfo_SaveInfo: String { return self._s[4528]! } - public var VoiceOver_Chat_AnonymousPoll: String { return self._s[4529]! } - public var Call_CameraTooltip: String { return self._s[4531]! } - public var InstantPage_FeedbackButtonShort: String { return self._s[4532]! } - public var Contacts_InviteToTelegram: String { return self._s[4533]! } - public var Notifications_ResetAllNotifications: String { return self._s[4534]! } - public var Calls_NewCall: String { return self._s[4535]! } - public var VoiceOver_Chat_Music: String { return self._s[4538]! } - public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[4539]! } - public var Channel_Edit_AboutItem: String { return self._s[4540]! } - public var Message_VideoExpired: String { return self._s[4541]! } - public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[4542]! } + public var Conversation_Edit: String { return self._s[4530]! } + public var CheckoutInfo_SaveInfo: String { return self._s[4531]! } + public var VoiceOver_Chat_AnonymousPoll: String { return self._s[4532]! } + public var Call_CameraTooltip: String { return self._s[4534]! } + public var InstantPage_FeedbackButtonShort: String { return self._s[4535]! } + public var Contacts_InviteToTelegram: String { return self._s[4536]! } + public var Notifications_ResetAllNotifications: String { return self._s[4537]! } + public var Calls_NewCall: String { return self._s[4538]! } + public var VoiceOver_Chat_Music: String { return self._s[4541]! } + public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[4542]! } + public var Channel_Edit_AboutItem: String { return self._s[4543]! } + public var Message_VideoExpired: String { return self._s[4544]! } + public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[4545]! } public func PUSH_CHAT_RETURNED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4543]!, self._r[4543]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4546]!, self._r[4546]!, [_1, _2]) } - public var NotificationsSound_Input: String { return self._s[4545]! } - public var Notifications_ClassicTones: String { return self._s[4546]! } - public var Conversation_StatusTyping: String { return self._s[4547]! } - public var Checkout_ErrorProviderAccountInvalid: String { return self._s[4548]! } - public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[4549]! } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[4550]! } - public var Conversation_MessageLeaveComment: String { return self._s[4551]! } - public var UserInfo_TapToCall: String { return self._s[4552]! } - public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[4553]! } - public var Conversation_ClearAll: String { return self._s[4555]! } - public var UserInfo_NotificationsDefault: String { return self._s[4556]! } - public var Location_ProximityGroupTip: String { return self._s[4557]! } - public var Map_ChooseAPlace: String { return self._s[4558]! } - public var GroupInfo_AddParticipantTitle: String { return self._s[4559]! } - public var ChatList_PeerTypeNonContact: String { return self._s[4560]! } - public var Conversation_SlideToCancel: String { return self._s[4561]! } - public var Month_ShortJuly: String { return self._s[4562]! } - public var SocksProxySetup_ProxyType: String { return self._s[4563]! } + public var NotificationsSound_Input: String { return self._s[4548]! } + public var Notifications_ClassicTones: String { return self._s[4549]! } + public var Conversation_StatusTyping: String { return self._s[4550]! } + public var Checkout_ErrorProviderAccountInvalid: String { return self._s[4551]! } + public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[4552]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[4553]! } + public var Conversation_MessageLeaveComment: String { return self._s[4554]! } + public var UserInfo_TapToCall: String { return self._s[4555]! } + public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[4556]! } + public var Conversation_ClearAll: String { return self._s[4558]! } + public var UserInfo_NotificationsDefault: String { return self._s[4559]! } + public var Location_ProximityGroupTip: String { return self._s[4560]! } + public var Map_ChooseAPlace: String { return self._s[4561]! } + public var GroupInfo_AddParticipantTitle: String { return self._s[4562]! } + public var ChatList_PeerTypeNonContact: String { return self._s[4563]! } + public var Conversation_SlideToCancel: String { return self._s[4564]! } + public var Month_ShortJuly: String { return self._s[4565]! } + public var SocksProxySetup_ProxyType: String { return self._s[4566]! } public func ChatList_DeleteChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4564]!, self._r[4564]!, [_0]) + return formatWithArgumentRanges(self._s[4567]!, self._r[4567]!, [_0]) } - public var ChatList_EditFolders: String { return self._s[4565]! } - public var TwoStepAuth_SetPasswordHelp: String { return self._s[4566]! } - public var ScheduledMessages_RemindersTitle: String { return self._s[4568]! } + public var ChatList_EditFolders: String { return self._s[4568]! } + public var TwoStepAuth_SetPasswordHelp: String { return self._s[4569]! } + public var ScheduledMessages_RemindersTitle: String { return self._s[4571]! } public func GroupPermission_ApplyAlertText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4569]!, self._r[4569]!, [_0]) - } - public var Permissions_PeopleNearbyTitle_v0: String { return self._s[4570]! } - public var Your_cards_expiration_year_is_invalid: String { return self._s[4571]! } - public var UserInfo_ShareMyContactInfo: String { return self._s[4573]! } - public var Passport_DeleteAddress: String { return self._s[4575]! } - public var Passport_DeletePassportConfirmation: String { return self._s[4576]! } - public var Passport_Identity_ReverseSide: String { return self._s[4577]! } - public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[4578]! } - public var Login_InfoLastNamePlaceholder: String { return self._s[4579]! } - public var InviteLink_CreatedBy: String { return self._s[4580]! } - public var Passport_FieldAddress: String { return self._s[4581]! } - public var SettingsSearch_Synonyms_Calls_Title: String { return self._s[4582]! } - public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[4585]! } - public var VoiceChat_Panel_TapToJoin: String { return self._s[4586]! } - public var Map_Home: String { return self._s[4587]! } - public var PollResults_Title: String { return self._s[4589]! } - public var ArchivedChats_IntroText2: String { return self._s[4591]! } - public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[4592]! } - public var VoiceOver_Chat_ContactPhoneNumber: String { return self._s[4593]! } - public var VoiceChat_Muted: String { return self._s[4595]! } - public var CallFeedback_ReasonSilentRemote: String { return self._s[4596]! } - public var Passport_Identity_AddPersonalDetails: String { return self._s[4597]! } - public var Group_Info_AdminLog: String { return self._s[4599]! } - public var ChatSettings_AutoPlayTitle: String { return self._s[4600]! } - public var Appearance_Animations: String { return self._s[4601]! } - public var Appearance_TextSizeSetting: String { return self._s[4602]! } - public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, _1, _2) + return formatWithArgumentRanges(self._s[4572]!, self._r[4572]!, [_0]) } + public var Permissions_PeopleNearbyTitle_v0: String { return self._s[4573]! } + public var Your_cards_expiration_year_is_invalid: String { return self._s[4574]! } + public var UserInfo_ShareMyContactInfo: String { return self._s[4576]! } + public var Passport_DeleteAddress: String { return self._s[4578]! } + public var Passport_DeletePassportConfirmation: String { return self._s[4579]! } + public var Passport_Identity_ReverseSide: String { return self._s[4580]! } + public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[4581]! } + public var Login_InfoLastNamePlaceholder: String { return self._s[4582]! } + public var InviteLink_CreatedBy: String { return self._s[4583]! } + public var Passport_FieldAddress: String { return self._s[4584]! } + public var SettingsSearch_Synonyms_Calls_Title: String { return self._s[4585]! } + public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[4588]! } + public var VoiceChat_Panel_TapToJoin: String { return self._s[4589]! } + public var Map_Home: String { return self._s[4590]! } + public var PollResults_Title: String { return self._s[4592]! } + public var ArchivedChats_IntroText2: String { return self._s[4594]! } + public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[4595]! } + public var VoiceOver_Chat_ContactPhoneNumber: String { return self._s[4596]! } + public var VoiceChat_Muted: String { return self._s[4598]! } + public var CallFeedback_ReasonSilentRemote: String { return self._s[4599]! } + public var Passport_Identity_AddPersonalDetails: String { return self._s[4600]! } + public var Group_Info_AdminLog: String { return self._s[4602]! } + public var ChatSettings_AutoPlayTitle: String { return self._s[4603]! } + public var Appearance_Animations: String { return self._s[4604]! } + public var Appearance_TextSizeSetting: String { return self._s[4605]! } public func MessageTimer_Years(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, stringValue) + } + public func OldChannels_InactiveWeek(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, _1, _2) + return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, _0, _1) } - public func ChatList_MessageVideos(_ value: Int32) -> String { + public func Stats_GroupTopPosterChars(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, stringValue) } - public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { + public func ForwardedFiles(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, stringValue) } - public func Map_ETAHours(_ value: Int32) -> String { + public func ForwardedAudios(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_ShortMinutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, _2, _1, _3) } - public func MessageTimer_Days(_ value: Int32) -> String { + public func Media_ShareVideo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, stringValue) } - public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { + public func Call_ShortMinutes(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, stringValue) } - public func ChatList_DeleteConfirmation(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, _1, _2) } - public func Media_SharePhoto(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, _1, _2) } - public func InviteLink_PeopleJoinedShort(_ value: Int32) -> String { + public func Invitation_Members(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, stringValue) } - public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, _2, _1, _3) + return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, _1, _2) } - public func ChatList_SelectedChats(_ value: Int32) -> String { + public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func VoiceOver_Chat_ContactPhoneNumberCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Months(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, stringValue) } - public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { + public func Conversation_TitleReplies(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, stringValue) } - public func SharedMedia_Link(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, _1, _2) } - public func MessageTimer_ShortSeconds(_ value: Int32) -> String { + public func Stats_MessageViews(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, stringValue) } - public func Call_ShortSeconds(_ value: Int32) -> String { + public func Stats_MessageForwards(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, stringValue) } - public func ChatListFilter_ShowMoreChats(_ value: Int32) -> String { + public func PeopleNearby_ShowMorePeople(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, stringValue) } - public func Call_Seconds(_ value: Int32) -> String { + public func Conversation_ContextMenuSelectAll(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, stringValue) } - public func MuteFor_Hours(_ value: Int32) -> String { + public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, stringValue) } - public func StickerPack_AddMaskCount(_ value: Int32) -> String { + public func MuteFor_Hours(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, stringValue) } - public func SharedMedia_Generic(_ value: Int32) -> String { + public func InstantPage_Views(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, stringValue) } - public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { + public func SharedMedia_Link(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, stringValue) } - public func SharedMedia_Video(_ value: Int32) -> String { + public func InviteLink_PeopleJoined(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, stringValue) } - public func Conversation_SelectedMessages(_ value: Int32) -> String { + public func Chat_MessagesUnpinned(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, stringValue) } - public func Invitation_Members(_ value: Int32) -> String { + public func MessageTimer_ShortMinutes(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, stringValue) @@ -5210,636 +5209,640 @@ public final class PresentationStrings: Equatable { let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, stringValue) } - public func PeopleNearby_ShowMorePeople(_ value: Int32) -> String { + public func Media_SharePhoto(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, stringValue) } - public func Conversation_StatusSubscribers(_ value: Int32) -> String { + public func ChatList_MessageVideos(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, stringValue) } - public func VoiceChat_Status_Members(_ value: Int32) -> String { + public func ForwardedLocations(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, stringValue) } - public func Notification_GameScoreExtended(_ value: Int32) -> String { + public func Call_ShortSeconds(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { + public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_TitleReplies(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, stringValue) - } - public func InviteText_ContactsCountText(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, stringValue) - } - public func OldChannels_InactiveMonth(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_StatusOnline(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ChatList_MessagePhotos(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedAudios(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Stats_GroupShowMoreTopAdmins(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Call_ShortMinutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Call_Days(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Minutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortDays(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, _0, _1) - } - public func MessageTimer_ShortHours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedStickers(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedVideos(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Stats_GroupShowMoreTopInviters(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Stats_GroupTopAdminKicks(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortWeeks(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue) - } - public func OldChannels_InactiveWeek(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Stats_GroupTopPosterMessages(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteFor_Days(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_ContextMenuSelectAll(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_Photo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Chat_MessagesUnpinned(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, stringValue) - } - public func AttachmentMenu_SendItem(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_ContactEmailCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, stringValue) - } - public func InviteLink_PeopleJoined(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func Contacts_ImportersCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedPhotos(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_AddStickerCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Call_Minutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Stats_MessageViews(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Seconds(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func VoiceChat_Panel_Members(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Months(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGE_DOCS_FIX1(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func Watch_UserInfo_Mute(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PollResults_ShowMore(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_File(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notifications_Exceptions(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Stats_GroupTopInviterInvites(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func QuickSend_Photos(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_MessagesSelected(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, stringValue) - } - public func GroupInfo_ParticipantCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Stats_MessageForwards(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LastSeen_MinutesAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func MuteExpires_Days(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, stringValue) - } - public func OldChannels_Leave(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessagePoll_VotedCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_DOCS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func ChatList_Search_Messages(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Media_ShareItem(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_PollVotes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Stats_GroupTopAdminBans(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LastSeen_HoursAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Passport_Scans(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, stringValue) - } - public func OldChannels_InactiveYear(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[108 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[109 * 6 + Int(form.rawValue)]!, stringValue) - } - public func UserCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[110 * 6 + Int(form.rawValue)]!, stringValue) - } - public func AttachmentMenu_SendGif(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[111 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessagePoll_QuizCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[112 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Contacts_InviteContacts(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[113 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[114 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[115 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Hours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[116 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_TitleComments(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[117 * 6 + Int(form.rawValue)]!, stringValue) - } - public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[118 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[119 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ChatList_MessageMusic(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[120 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Media_ShareVideo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[121 * 6 + Int(form.rawValue)]!, stringValue) - } - public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[122 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[123 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[124 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteExpires_Hours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[125 * 6 + Int(form.rawValue)]!, stringValue) - } - public func GroupInfo_ShowMoreMembers(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[126 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Call_Hours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[127 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, stringValue) } public func Stats_GroupShowMoreTopPosters(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[128 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, stringValue) } - public func StickerPack_StickerCount(_ value: Int32) -> String { + public func UserCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[129 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, stringValue) } - public func Conversation_ContextViewReplies(_ value: Int32) -> String { + public func ChatList_MessagePhotos(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[130 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, stringValue) } - public func Conversation_MessageViewComments(_ value: Int32) -> String { + public func Stats_GroupTopAdminKicks(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[131 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, stringValue) } - public func InstantPage_Views(_ value: Int32) -> String { + public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[132 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ChatList_MessageFiles(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[133 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[134 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func OldChannels_GroupFormat(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[135 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[136 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedMessages(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[137 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteExpires_Minutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[138 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedFiles(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[139 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, stringValue) } public func PUSH_CHANNEL_MESSAGE_DOCS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[140 * 6 + Int(form.rawValue)]!, _1, _2) + return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, _1, _2) } - public func ForwardedVideoMessages(_ value: Int32) -> String { + public func Call_Days(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[141 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, stringValue) } - public func Chat_TitlePinnedMessages(_ value: Int32) -> String { + public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[142 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_PollOptionCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[143 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedGifs(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[144 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[145 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[146 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedLocations(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[147 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Stats_GroupTopAdminDeletions(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[148 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Map_ETAMinutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[149 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Theme_UsersCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[150 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_ContactPhoneNumberCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[151 * 6 + Int(form.rawValue)]!, stringValue) - } - public func AttachmentMenu_SendVideo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[152 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, stringValue) } public func MessageTimer_Weeks(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[153 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, stringValue) + } + public func VoiceOver_Chat_ContactEmailCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Map_ETAHours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteFor_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Passport_Scans(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Contacts_ImportersCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Call_Minutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_Generic(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue) + } + public func OldChannels_GroupFormat(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, stringValue) + } + public func OldChannels_Leave(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendVideo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Theme_UsersCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_GroupTopAdminDeletions(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func ForwardedPhotos(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, stringValue) + } + public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedVideoMessages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_SelectedChats(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteExpires_Minutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, stringValue) + } + public func GroupInfo_ParticipantCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_AddMaskCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, stringValue) + } + public func InviteText_ContactsCountText(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_Exceptions(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_TitleComments(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortSeconds(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, stringValue) + } + public func VoiceOver_Chat_PollVotes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_ContextViewReplies(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Conversation_StatusOnline(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessagePoll_QuizCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessagePoll_VotedCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Call_Seconds(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Seconds(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendItem(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, stringValue) + } + public func GroupInfo_ShowMoreMembers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_Search_Messages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_DOCS_FIX1(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func Contacts_InviteContacts(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func Notification_GameScoreExtended(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, stringValue) + } + public func LastSeen_MinutesAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Map_ETAMinutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Watch_UserInfo_Mute(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_DeletedChats(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_DOCS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func LastSeen_HoursAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_Photo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendGif(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_MessageMusic(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_MessageFiles(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func QuickSend_Photos(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Media_ShareItem(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_File(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_GroupShowMoreTopAdmins(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[108 * 6 + Int(form.rawValue)]!, stringValue) + } + public func OldChannels_InactiveMonth(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[109 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortDays(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[110 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[111 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func OldChannels_InactiveYear(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[112 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[113 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_GroupTopAdminBans(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[114 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Call_Hours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[115 * 6 + Int(form.rawValue)]!, stringValue) } public func ForwardedContacts(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[154 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[116 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[155 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Stats_GroupTopPosterChars(_ value: Int32) -> String { + public func MessageTimer_Hours(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[156 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[117 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[157 * 6 + Int(form.rawValue)]!, _2, _1, _3) + public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[118 * 6 + Int(form.rawValue)]!, stringValue) + } + public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[119 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_DeleteConfirmation(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[120 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteExpires_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[121 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[122 * 6 + Int(form.rawValue)]!, stringValue) + } + public func VoiceChat_Status_Members(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[123 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatListFilter_ShowMoreChats(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[124 * 6 + Int(form.rawValue)]!, stringValue) } public func ForwardedPolls(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[125 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_GroupShowMoreTopInviters(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[126 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_GroupTopPosterMessages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[127 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_Video(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[128 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortHours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[129 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_SelectedMessages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[130 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_AddStickerCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[131 * 6 + Int(form.rawValue)]!, stringValue) + } + public func VoiceOver_Chat_PollOptionCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[132 * 6 + Int(form.rawValue)]!, stringValue) + } + public func VoiceChat_Panel_Members(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[133 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteExpires_Hours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[134 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[135 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PollResults_ShowMore(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[136 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedVideos(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[137 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[138 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[139 * 6 + Int(form.rawValue)]!, stringValue) + } + public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[140 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[141 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_StatusSubscribers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[142 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[143 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_MessageViewComments(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[144 * 6 + Int(form.rawValue)]!, stringValue) + } + public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[145 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[146 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[147 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedStickers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[148 * 6 + Int(form.rawValue)]!, stringValue) + } + public func VoiceOver_Chat_MessagesSelected(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[149 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_GroupTopInviterInvites(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[150 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_StickerCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[151 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[152 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func ForwardedGifs(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[153 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortWeeks(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[154 * 6 + Int(form.rawValue)]!, stringValue) + } + public func InviteLink_PeopleJoinedShort(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[155 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedMessages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[156 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Minutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[157 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[158 * 6 + Int(form.rawValue)]!, stringValue) } - public func ChatList_DeletedChats(_ value: Int32) -> String { + public func Chat_TitlePinnedMessages(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[159 * 6 + Int(form.rawValue)]!, stringValue) diff --git a/submodules/TelegramUI/BUILD b/submodules/TelegramUI/BUILD index 63e2395943..8a3eaa85ed 100644 --- a/submodules/TelegramUI/BUILD +++ b/submodules/TelegramUI/BUILD @@ -213,6 +213,7 @@ swift_library( "//submodules/AnimatedNavigationStripeNode:AnimatedNavigationStripeNode", "//submodules/AudioBlob:AudioBlob", "//Telegram:GeneratedSources", + "//third-party/ZIPFoundation:ZIPFoundation", ], visibility = [ "//visibility:public", diff --git a/submodules/TelegramUI/Images.xcassets/Avatar/Contents.json b/submodules/TelegramUI/Images.xcassets/Avatar/Contents.json index 38f0c81fc2..6e965652df 100644 --- a/submodules/TelegramUI/Images.xcassets/Avatar/Contents.json +++ b/submodules/TelegramUI/Images.xcassets/Avatar/Contents.json @@ -1,9 +1,9 @@ { "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 }, "properties" : { "provides-namespace" : true } -} \ No newline at end of file +} diff --git a/submodules/TelegramUI/Images.xcassets/Avatar/PhoneIcon.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Avatar/PhoneIcon.imageset/Contents.json new file mode 100644 index 0000000000..82b7981b98 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Avatar/PhoneIcon.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "ic_phoneavatar.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Avatar/PhoneIcon.imageset/ic_phoneavatar.pdf b/submodules/TelegramUI/Images.xcassets/Avatar/PhoneIcon.imageset/ic_phoneavatar.pdf new file mode 100644 index 0000000000..9ac6d21502 Binary files /dev/null and b/submodules/TelegramUI/Images.xcassets/Avatar/PhoneIcon.imageset/ic_phoneavatar.pdf differ diff --git a/submodules/TelegramUI/Resources/PresentationStrings.mapping b/submodules/TelegramUI/Resources/PresentationStrings.mapping index dc2e7eef73..30ce44a145 100644 Binary files a/submodules/TelegramUI/Resources/PresentationStrings.mapping and b/submodules/TelegramUI/Resources/PresentationStrings.mapping differ diff --git a/submodules/TelegramUI/Sources/ChatController.swift b/submodules/TelegramUI/Sources/ChatController.swift index b3add99fdc..ffa1c64b79 100644 --- a/submodules/TelegramUI/Sources/ChatController.swift +++ b/submodules/TelegramUI/Sources/ChatController.swift @@ -9927,7 +9927,9 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G } controller.present(textAlertController(context: context, title: nil, text: presentationData.strings.Forward_ErrorDisabledForChat, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), in: .window(.root)) } - controller.peerSelected = { [weak self, weak controller] peerId in + controller.peerSelected = { [weak self, weak controller] peer in + let peerId = peer.id + guard let strongSelf = self, let strongController = controller else { return } @@ -10122,7 +10124,9 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G case let .chat(textInputState, _, _): if let textInputState = textInputState { let controller = self.context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: self.context)) - controller.peerSelected = { [weak self, weak controller] peerId in + controller.peerSelected = { [weak self, weak controller] peer in + let peerId = peer.id + if let strongSelf = self, let strongController = controller { if case let .peer(currentPeerId) = strongSelf.chatLocation, peerId == currentPeerId { strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: true, { @@ -10322,7 +10326,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G let _ = requestUpdatePeerIsBlocked(account: strongSelf.context.account, peerId: peer.id, isBlocked: true).start() if let _ = chatPeer as? TelegramSecretChat { let _ = (strongSelf.context.account.postbox.transaction { transaction in - terminateSecretChat(transaction: transaction, peerId: chatPeer.id) + terminateSecretChat(transaction: transaction, peerId: chatPeer.id, requestRemoteHistoryRemoval: true) }).start() } if deleteChat { diff --git a/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift b/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift index 5d795a1980..6c31689200 100644 --- a/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift +++ b/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift @@ -454,7 +454,9 @@ func contextMenuForChatPresentationInterfaceState(chatPresentationInterfaceState f(.dismissWithoutContent) let controller = context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: context, filter: [.onlyWriteable, .excludeDisabled])) - controller.peerSelected = { [weak controller] peerId in + controller.peerSelected = { [weak controller] peer in + let peerId = peer.id + if let strongController = controller { strongController.dismiss() diff --git a/submodules/TelegramUI/Sources/ChatMessageAvatarAccessoryItem.swift b/submodules/TelegramUI/Sources/ChatMessageAvatarAccessoryItem.swift index 844669dea1..0952fb41b6 100644 --- a/submodules/TelegramUI/Sources/ChatMessageAvatarAccessoryItem.swift +++ b/submodules/TelegramUI/Sources/ChatMessageAvatarAccessoryItem.swift @@ -17,17 +17,19 @@ final class ChatMessageAvatarAccessoryItem: ListViewAccessoryItem { private let peer: Peer? private let messageReference: MessageReference? private let messageTimestamp: Int32 + private let forwardInfo: MessageForwardInfo? private let emptyColor: UIColor private let controllerInteraction: ChatControllerInteraction private let day: Int32 - init(context: AccountContext, peerId: PeerId, peer: Peer?, messageReference: MessageReference?, messageTimestamp: Int32, emptyColor: UIColor, controllerInteraction: ChatControllerInteraction) { + init(context: AccountContext, peerId: PeerId, peer: Peer?, messageReference: MessageReference?, messageTimestamp: Int32, forwardInfo: MessageForwardInfo?, emptyColor: UIColor, controllerInteraction: ChatControllerInteraction) { self.context = context self.peerId = peerId self.peer = peer self.messageReference = messageReference self.messageTimestamp = messageTimestamp + self.forwardInfo = forwardInfo self.emptyColor = emptyColor self.controllerInteraction = controllerInteraction @@ -40,16 +42,56 @@ final class ChatMessageAvatarAccessoryItem: ListViewAccessoryItem { func isEqualToItem(_ other: ListViewAccessoryItem) -> Bool { if case let other as ChatMessageAvatarAccessoryItem = other { - return other.peerId == self.peerId && self.day == other.day && abs(other.messageTimestamp - self.messageTimestamp) < 10 * 60 + if other.peerId != self.peerId { + return false + } + if self.day != other.day { + return false + } + if abs(other.messageTimestamp - self.messageTimestamp) >= 10 * 60 { + return false + } + if let forwardInfo = self.forwardInfo, let otherForwardInfo = other.forwardInfo { + if forwardInfo.flags.contains(.isImported) == forwardInfo.flags.contains(.isImported) { + if forwardInfo.authorSignature != otherForwardInfo.authorSignature { + return false + } + } else { + return false + } + } else if let forwardInfo = self.forwardInfo, forwardInfo.flags.contains(.isImported) { + return false + } else if let otherForwardInfo = other.forwardInfo, otherForwardInfo.flags.contains(.isImported) { + return false + } + return true + } else { + return false } - - return false } func node(synchronous: Bool) -> ListViewAccessoryItemNode { let node = ChatMessageAvatarAccessoryItemNode() node.frame = CGRect(origin: CGPoint(), size: CGSize(width: 38.0, height: 38.0)) - if let peer = self.peer { + if let forwardInfo = self.forwardInfo, forwardInfo.flags.contains(.isImported) { + if let authorSignature = forwardInfo.authorSignature, !authorSignature.isEmpty { + let components = authorSignature.components(separatedBy: " ") + if !components.isEmpty, !components[0].hasPrefix("+") { + var letters: [String] = [] + + letters.append(String(components[0][components[0].startIndex])) + if components.count > 1 { + letters.append(String(components[1][components[1].startIndex])) + } + + node.setCustomLetters(context: self.context, theme: self.context.sharedContext.currentPresentationData.with({ $0 }).theme, synchronousLoad: synchronous, letters: letters, emptyColor: self.emptyColor, controllerInteraction: self.controllerInteraction) + } else { + node.setCustomLetters(context: self.context, theme: self.context.sharedContext.currentPresentationData.with({ $0 }).theme, synchronousLoad: synchronous, letters: [], emptyColor: self.emptyColor, controllerInteraction: self.controllerInteraction) + } + } else { + node.setCustomLetters(context: self.context, theme: self.context.sharedContext.currentPresentationData.with({ $0 }).theme, synchronousLoad: synchronous, letters: [], emptyColor: self.emptyColor, controllerInteraction: self.controllerInteraction) + } + } else if let peer = self.peer { node.setPeer(context: self.context, theme: self.context.sharedContext.currentPresentationData.with({ $0 }).theme, synchronousLoad: synchronous, peer: peer, authorOfMessage: self.messageReference, emptyColor: self.emptyColor, controllerInteraction: self.controllerInteraction) } return node @@ -91,11 +133,20 @@ final class ChatMessageAvatarAccessoryItemNode: ListViewAccessoryItemNode { guard let strongSelf = self, let controllerInteraction = strongSelf.controllerInteraction, let peer = strongSelf.peer else { return } - strongSelf.controllerInteraction?.openPeerContextMenu(peer, strongSelf.containerNode, strongSelf.containerNode.bounds, gesture) + controllerInteraction.openPeerContextMenu(peer, strongSelf.containerNode, strongSelf.containerNode.bounds, gesture) } } - func setPeer(context: AccountContext, theme: PresentationTheme, synchronousLoad:Bool, peer: Peer, authorOfMessage: MessageReference?, emptyColor: UIColor, controllerInteraction: ChatControllerInteraction) { + func setCustomLetters(context: AccountContext, theme: PresentationTheme, synchronousLoad: Bool, letters: [String], emptyColor: UIColor, controllerInteraction: ChatControllerInteraction) { + self.controllerInteraction = controllerInteraction + self.peer = nil + + self.contextActionIsEnabled = false + + self.avatarNode.setCustomLetters(letters, icon: !letters.isEmpty ? nil : .phone) + } + + func setPeer(context: AccountContext, theme: PresentationTheme, synchronousLoad: Bool, peer: Peer, authorOfMessage: MessageReference?, emptyColor: UIColor, controllerInteraction: ChatControllerInteraction) { self.controllerInteraction = controllerInteraction self.peer = peer diff --git a/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift index f343c2cddb..a16581bef5 100644 --- a/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift @@ -1036,6 +1036,10 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode } effectiveAuthor = source displayAuthorInfo = !mergedTop.merged && incoming && effectiveAuthor != nil + } else if let forwardInfo = item.content.firstMessage.forwardInfo, forwardInfo.flags.contains(.isImported), let authorSignature = forwardInfo.authorSignature { + ignoreForward = true + effectiveAuthor = TelegramUser(id: PeerId(namespace: Namespaces.Peer.Empty, id: Int32(clamping: authorSignature.persistentHashValue)), accessHash: nil, firstName: authorSignature, lastName: nil, username: nil, phone: nil, photo: [], botInfo: nil, restrictionInfo: nil, flags: UserInfoFlags()) + displayAuthorInfo = !mergedTop.merged && incoming } else { effectiveAuthor = firstMessage.author diff --git a/submodules/TelegramUI/Sources/ChatMessageItem.swift b/submodules/TelegramUI/Sources/ChatMessageItem.swift index d50a40ce8b..7f892f552e 100644 --- a/submodules/TelegramUI/Sources/ChatMessageItem.swift +++ b/submodules/TelegramUI/Sources/ChatMessageItem.swift @@ -119,6 +119,21 @@ private func messagesShouldBeMerged(accountPeerId: PeerId, _ lhs: Message, _ rhs } } + var sameAuthor = false + if lhsEffectiveAuthor?.id == rhsEffectiveAuthor?.id && lhs.effectivelyIncoming(accountPeerId) == rhs.effectivelyIncoming(accountPeerId) { + sameAuthor = true + } + + var lhsEffectiveTimestamp = lhs.timestamp + var rhsEffectiveTimestamp = rhs.timestamp + + if let lhsForwardInfo = lhs.forwardInfo, lhsForwardInfo.flags.contains(.isImported), let rhsForwardInfo = rhs.forwardInfo, rhsForwardInfo.flags.contains(.isImported) { + lhsEffectiveTimestamp = lhsForwardInfo.date + rhsEffectiveTimestamp = rhsForwardInfo.date + + sameAuthor = lhsForwardInfo.authorSignature == rhsForwardInfo.authorSignature + } + if lhs.id.peerId.isRepliesOrSavedMessages(accountPeerId: accountPeerId) { if let forwardInfo = lhs.forwardInfo { lhsEffectiveAuthor = forwardInfo.author @@ -130,12 +145,7 @@ private func messagesShouldBeMerged(accountPeerId: PeerId, _ lhs: Message, _ rhs } } - var sameAuthor = false - if lhsEffectiveAuthor?.id == rhsEffectiveAuthor?.id && lhs.effectivelyIncoming(accountPeerId) == rhs.effectivelyIncoming(accountPeerId) { - sameAuthor = true - } - - if abs(lhs.timestamp - rhs.timestamp) < Int32(10 * 60) && sameAuthor { + if abs(lhsEffectiveTimestamp - rhsEffectiveTimestamp) < Int32(10 * 60) && sameAuthor { if let channel = lhs.peers[lhs.id.peerId] as? TelegramChannel, case .group = channel.info, lhsEffectiveAuthor?.id == channel.id, !lhs.effectivelyIncoming(accountPeerId) { return .none } @@ -337,7 +347,7 @@ public final class ChatMessageItem: ListViewItem, CustomStringConvertible { } if !hasActionMedia && !isBroadcastChannel { if let effectiveAuthor = effectiveAuthor { - accessoryItem = ChatMessageAvatarAccessoryItem(context: context, peerId: effectiveAuthor.id, peer: effectiveAuthor, messageReference: MessageReference(message), messageTimestamp: content.index.timestamp, emptyColor: presentationData.theme.theme.chat.message.incoming.bubble.withoutWallpaper.fill, controllerInteraction: controllerInteraction) + accessoryItem = ChatMessageAvatarAccessoryItem(context: context, peerId: effectiveAuthor.id, peer: effectiveAuthor, messageReference: MessageReference(message), messageTimestamp: content.index.timestamp, forwardInfo: message.forwardInfo, emptyColor: presentationData.theme.theme.chat.message.incoming.bubble.withoutWallpaper.fill, controllerInteraction: controllerInteraction) } } } diff --git a/submodules/TelegramUI/Sources/OpenResolvedUrl.swift b/submodules/TelegramUI/Sources/OpenResolvedUrl.swift index 9db480be46..2fb6a9787f 100644 --- a/submodules/TelegramUI/Sources/OpenResolvedUrl.swift +++ b/submodules/TelegramUI/Sources/OpenResolvedUrl.swift @@ -55,7 +55,9 @@ func openResolvedUrlImpl(_ resolvedUrl: ResolvedUrl, context: AccountContext, ur openPeer(peerId, .withBotStartPayload(ChatControllerInitialBotStart(payload: payload, behavior: .interactive))) case let .groupBotStart(botPeerId, payload): let controller = context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: context, filter: [.onlyWriteable, .onlyGroups, .onlyManageable], title: presentationData.strings.UserInfo_InviteBotToGroup)) - controller.peerSelected = { [weak controller] peerId in + controller.peerSelected = { [weak controller] peer in + let peerId = peer.id + if payload.isEmpty { if peerId.namespace == Namespaces.Peer.CloudGroup { let _ = (addGroupMember(account: context.account, peerId: peerId, memberId: botPeerId) @@ -263,7 +265,9 @@ func openResolvedUrlImpl(_ resolvedUrl: ResolvedUrl, context: AccountContext, ur context.sharedContext.applicationBindings.dismissNativeController() } else { let controller = context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: context, filter: [.onlyWriteable, .excludeDisabled])) - controller.peerSelected = { [weak controller] peerId in + controller.peerSelected = { [weak controller] peer in + let peerId = peer.id + if let strongController = controller { strongController.dismiss() continueWithPeer(peerId) diff --git a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift index 92a2200a07..4504973c15 100644 --- a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift +++ b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift @@ -4874,7 +4874,9 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD func forwardMessages(messageIds: Set?) { if let messageIds = messageIds ?? self.state.selectedMessageIds, !messageIds.isEmpty { let peerSelectionController = self.context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: self.context, filter: [.onlyWriteable, .excludeDisabled])) - peerSelectionController.peerSelected = { [weak self, weak peerSelectionController] peerId in + peerSelectionController.peerSelected = { [weak self, weak peerSelectionController] peer in + let peerId = peer.id + if let strongSelf = self, let _ = peerSelectionController { if peerId == strongSelf.context.account.peerId { strongSelf.headerNode.navigationButtonContainer.performAction?(.selectionDone) diff --git a/submodules/TelegramUI/Sources/PeerSelectionController.swift b/submodules/TelegramUI/Sources/PeerSelectionController.swift index fd6b2fdc66..07c1aed6ef 100644 --- a/submodules/TelegramUI/Sources/PeerSelectionController.swift +++ b/submodules/TelegramUI/Sources/PeerSelectionController.swift @@ -19,10 +19,11 @@ public final class PeerSelectionControllerImpl: ViewController, PeerSelectionCon private var customTitle: String? - public var peerSelected: ((PeerId) -> Void)? + public var peerSelected: ((Peer) -> Void)? private let filter: ChatListNodePeersFilter private let attemptSelection: ((Peer) -> Void)? + private let createNewGroup: (() -> Void)? public var inProgress: Bool = false { didSet { @@ -40,6 +41,8 @@ public final class PeerSelectionControllerImpl: ViewController, PeerSelectionCon } } + public var customDismiss: (() -> Void)? + private var peerSelectionNode: PeerSelectionControllerNode { return super.displayNode as! PeerSelectionControllerNode } @@ -61,6 +64,7 @@ public final class PeerSelectionControllerImpl: ViewController, PeerSelectionCon self.hasContactSelector = params.hasContactSelector self.presentationData = self.context.sharedContext.currentPresentationData.with { $0 } self.attemptSelection = params.attemptSelection + self.createNewGroup = params.createNewGroup super.init(navigationBarPresentationData: NavigationBarPresentationData(presentationData: self.presentationData)) @@ -120,7 +124,7 @@ public final class PeerSelectionControllerImpl: ViewController, PeerSelectionCon } override public func loadDisplayNode() { - self.displayNode = PeerSelectionControllerNode(context: self.context, filter: self.filter, hasContactSelector: hasContactSelector, present: { [weak self] c, a in + self.displayNode = PeerSelectionControllerNode(context: self.context, filter: self.filter, hasContactSelector: hasContactSelector, createNewGroup: self.createNewGroup, present: { [weak self] c, a in self?.present(c, in: .window(.root), with: a) }, dismiss: { [weak self] in self?.presentingViewController?.dismiss(animated: false, completion: nil) @@ -136,9 +140,9 @@ public final class PeerSelectionControllerImpl: ViewController, PeerSelectionCon self?.activateSearch() } - self.peerSelectionNode.requestOpenPeer = { [weak self] peerId in + self.peerSelectionNode.requestOpenPeer = { [weak self] peer in if let strongSelf = self, let peerSelected = strongSelf.peerSelected { - peerSelected(peerId) + peerSelected(peer) } } @@ -159,7 +163,7 @@ public final class PeerSelectionControllerImpl: ViewController, PeerSelectionCon } strongSelf.openMessageFromSearchDisposable.set((storedPeer |> deliverOnMainQueue).start(completed: { [weak strongSelf] in if let strongSelf = strongSelf, let peerSelected = strongSelf.peerSelected { - peerSelected(peer.id) + peerSelected(peer) } })) } @@ -197,7 +201,11 @@ public final class PeerSelectionControllerImpl: ViewController, PeerSelectionCon } @objc func cancelPressed() { - self.dismiss() + if let customDismiss = self.customDismiss { + customDismiss() + } else { + self.dismiss() + } } private func activateSearch() { diff --git a/submodules/TelegramUI/Sources/PeerSelectionControllerNode.swift b/submodules/TelegramUI/Sources/PeerSelectionControllerNode.swift index f2a96c89db..7a7ee6e9cf 100644 --- a/submodules/TelegramUI/Sources/PeerSelectionControllerNode.swift +++ b/submodules/TelegramUI/Sources/PeerSelectionControllerNode.swift @@ -46,7 +46,7 @@ final class PeerSelectionControllerNode: ASDisplayNode { var requestActivateSearch: (() -> Void)? var requestDeactivateSearch: (() -> Void)? - var requestOpenPeer: ((PeerId) -> Void)? + var requestOpenPeer: ((Peer) -> Void)? var requestOpenDisabledPeer: ((Peer) -> Void)? var requestOpenPeerFromSearch: ((Peer) -> Void)? var requestOpenMessageFromSearch: ((Peer, MessageId) -> Void)? @@ -59,7 +59,7 @@ final class PeerSelectionControllerNode: ASDisplayNode { return self.readyValue.get() } - init(context: AccountContext, filter: ChatListNodePeersFilter, hasContactSelector: Bool, present: @escaping (ViewController, Any?) -> Void, dismiss: @escaping () -> Void) { + init(context: AccountContext, filter: ChatListNodePeersFilter, hasContactSelector: Bool, createNewGroup: (() -> Void)?, present: @escaping (ViewController, Any?) -> Void, dismiss: @escaping () -> Void) { self.context = context self.present = present self.dismiss = dismiss @@ -84,8 +84,15 @@ final class PeerSelectionControllerNode: ASDisplayNode { self.toolbarSeparatorNode = nil self.segmentedControlNode = nil } + + var chatListcategories: [ChatListNodeAdditionalCategory] = [] + + if let _ = createNewGroup { + //TODO:localize + chatListcategories.append(ChatListNodeAdditionalCategory(id: 0, icon: PresentationResourcesItemList.createGroupIcon(self.presentationData.theme), title: "Create a New Group", appearance: .action)) + } - self.chatListNode = ChatListNode(context: context, groupId: .root, previewing: false, fillPreloadItems: false, mode: .peers(filter: filter, isSelecting: false, additionalCategories: [], chatListFilters: nil), theme: presentationData.theme, fontSize: presentationData.listsFontSize, strings: presentationData.strings, dateTimeFormat: presentationData.dateTimeFormat, nameSortOrder: presentationData.nameSortOrder, nameDisplayOrder: presentationData.nameDisplayOrder, disableAnimations: presentationData.disableAnimations) + self.chatListNode = ChatListNode(context: context, groupId: .root, previewing: false, fillPreloadItems: false, mode: .peers(filter: filter, isSelecting: false, additionalCategories: chatListcategories, chatListFilters: nil), theme: self.presentationData.theme, fontSize: presentationData.listsFontSize, strings: presentationData.strings, dateTimeFormat: presentationData.dateTimeFormat, nameSortOrder: presentationData.nameSortOrder, nameDisplayOrder: presentationData.nameDisplayOrder, disableAnimations: presentationData.disableAnimations) super.init() @@ -93,6 +100,10 @@ final class PeerSelectionControllerNode: ASDisplayNode { return UITracingLayerView() }) + self.chatListNode.additionalCategorySelected = { _ in + createNewGroup?() + } + self.backgroundColor = self.presentationData.theme.chatList.backgroundColor self.chatListNode.activateSearch = { [weak self] in @@ -100,7 +111,8 @@ final class PeerSelectionControllerNode: ASDisplayNode { } self.chatListNode.peerSelected = { [weak self] peer, _, _ in - self?.requestOpenPeer?(peer.id) + self?.chatListNode.clearHighlightAnimated(true) + self?.requestOpenPeer?(peer) } self.chatListNode.disabledPeerSelected = { [weak self] peer in @@ -326,7 +338,7 @@ final class PeerSelectionControllerNode: ASDisplayNode { } contactListNode.openPeer = { [weak self] peer, _ in if case let .peer(peer, _, _) = peer { - self?.requestOpenPeer?(peer.id) + self?.requestOpenPeer?(peer) } } contactListNode.suppressPermissionWarning = { [weak self] in diff --git a/submodules/TelegramUI/Sources/ShareExtensionContext.swift b/submodules/TelegramUI/Sources/ShareExtensionContext.swift index 5e95b25fc9..cbe65e2235 100644 --- a/submodules/TelegramUI/Sources/ShareExtensionContext.swift +++ b/submodules/TelegramUI/Sources/ShareExtensionContext.swift @@ -1,4 +1,5 @@ import UIKit +import AsyncDisplayKit import Display import TelegramCore import SyncCore @@ -16,9 +17,448 @@ import SettingsUI import OpenSSLEncryptionProvider import AppLock import Intents +import MobileCoreServices +import OverlayStatusController +import PresentationDataUtils + +import ZIPFoundation private let inForeground = ValuePromise(false, ignoreRepeated: true) +private final class LinearProgressNode: ASDisplayNode { + private let trackingNode: HierarchyTrackingNode + private let backgroundNode: ASImageNode + private let barNode: ASImageNode + private let shimmerNode: ASImageNode + private let shimmerClippingNode: ASDisplayNode + + private var currentProgress: CGFloat = 0.0 + private var currentProgressAnimation: (from: CGFloat, to: CGFloat, startTime: Double, completion: () -> Void)? + + private var shimmerPhase: CGFloat = 0.0 + + private var inHierarchyValue: Bool = false + private var shouldAnimate: Bool = false + + private let animator: ConstantDisplayLinkAnimator + + override init() { + var updateInHierarchy: ((Bool) -> Void)? + self.trackingNode = HierarchyTrackingNode { value in + updateInHierarchy?(value) + } + + var animationStep: (() -> Void)? + self.animator = ConstantDisplayLinkAnimator { + animationStep?() + } + + self.backgroundNode = ASImageNode() + self.backgroundNode.isLayerBacked = true + + self.barNode = ASImageNode() + self.barNode.isLayerBacked = true + + self.shimmerNode = ASImageNode() + self.shimmerNode.contentMode = .scaleToFill + self.shimmerClippingNode = ASDisplayNode() + self.shimmerClippingNode.clipsToBounds = true + + super.init() + + self.addSubnode(trackingNode) + self.addSubnode(self.backgroundNode) + self.addSubnode(self.barNode) + + self.shimmerClippingNode.addSubnode(self.shimmerNode) + self.addSubnode(self.shimmerClippingNode) + + updateInHierarchy = { [weak self] value in + guard let strongSelf = self else { + return + } + if strongSelf.inHierarchyValue != value { + strongSelf.inHierarchyValue = value + strongSelf.updateAnimations() + } + } + + animationStep = { [weak self] in + self?.update() + } + } + + func updateTheme(theme: PresentationTheme) { + self.backgroundNode.image = generateStretchableFilledCircleImage(diameter: 3.0, color: theme.list.itemAccentColor.withMultipliedAlpha(0.2)) + self.barNode.image = generateStretchableFilledCircleImage(diameter: 3.0, color: theme.list.itemAccentColor) + self.shimmerNode.image = generateImage(CGSize(width: 100.0, height: 3.0), opaque: false, rotatedContext: { size, context in + context.clear(CGRect(origin: CGPoint(), size: size)) + + let foregroundColor = theme.list.plainBackgroundColor.withAlphaComponent(0.4) + + let transparentColor = foregroundColor.withAlphaComponent(0.0).cgColor + let peakColor = foregroundColor.cgColor + + var locations: [CGFloat] = [0.0, 0.5, 1.0] + let colors: [CGColor] = [transparentColor, peakColor, transparentColor] + + let colorSpace = CGColorSpaceCreateDeviceRGB() + let gradient = CGGradient(colorsSpace: colorSpace, colors: colors as CFArray, locations: &locations)! + + context.drawLinearGradient(gradient, start: CGPoint(x: 0.0, y: 0.0), end: CGPoint(x: size.width, y: 0.0), options: CGGradientDrawingOptions()) + }) + } + + func updateProgress(value: CGFloat, completion: @escaping () -> Void = {}) { + if self.currentProgress.isEqual(to: value) { + self.currentProgressAnimation = nil + completion() + } else { + if value.isEqual(to: 1.0) { + self.shimmerNode.alpha = 0.0 + } + self.currentProgressAnimation = (self.currentProgress, value, CACurrentMediaTime(), completion) + } + } + + private func updateAnimations() { + let shouldAnimate = self.inHierarchyValue + if shouldAnimate != self.shouldAnimate { + self.shouldAnimate = shouldAnimate + self.animator.isPaused = !shouldAnimate + } + } + + private func update() { + if let (fromValue, toValue, startTime, completion) = self.currentProgressAnimation { + let duration: Double = 0.15 + let timestamp = CACurrentMediaTime() + let t = CGFloat((timestamp - startTime) / duration) + if t >= 1.0 { + self.currentProgress = toValue + self.currentProgressAnimation = nil + completion() + } else { + let clippedT = max(0.0, t) + self.currentProgress = (1.0 - clippedT) * fromValue + clippedT * toValue + } + + var progressWidth: CGFloat = self.bounds.width * self.currentProgress + if progressWidth < 6.0 { + progressWidth = 0.0 + } + let progressFrame = CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: progressWidth, height: 3.0)) + self.barNode.frame = progressFrame + self.shimmerClippingNode.frame = progressFrame + } + self.backgroundNode.frame = CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: self.bounds.width, height: 3.0)) + + self.shimmerPhase += 3.5 + let shimmerWidth: CGFloat = 160.0 + let shimmerOffset = self.shimmerPhase.remainder(dividingBy: self.bounds.width + shimmerWidth / 2.0) + self.shimmerNode.frame = CGRect(origin: CGPoint(x: shimmerOffset - shimmerWidth / 2.0, y: 0.0), size: CGSize(width: shimmerWidth, height: 3.0)) + } +} + +private final class ChatImportProgressController: ViewController { + private final class Node: ViewControllerTracingNode { + private weak var controller: ChatImportProgressController? + + private let context: AccountContext + private var presentationData: PresentationData + + private let statusText: ImmediateTextNode + private let statusButtonText: ImmediateTextNode + private let statusButton: HighlightableButtonNode + + private let messagesProgressText: ImmediateTextNode + private let messagesProgressNode: LinearProgressNode + + private let mediaProgressText: ImmediateTextNode + private let mediaProgressNode: LinearProgressNode + + private var validLayout: (ContainerViewLayout, CGFloat)? + + private let mediaCount: Int + private var mediaProgress: Int + private var messagesProgress: CGFloat = 0.0 + private var isDone: Bool = false + + init(controller: ChatImportProgressController, context: AccountContext, mediaCount: Int) { + self.controller = controller + self.context = context + + self.mediaCount = mediaCount + self.mediaProgress = 0 + + self.presentationData = self.context.sharedContext.currentPresentationData.with { $0 } + + self.messagesProgressText = ImmediateTextNode() + self.messagesProgressText.isUserInteractionEnabled = false + self.messagesProgressText.displaysAsynchronously = false + self.messagesProgressText.maximumNumberOfLines = 1 + self.messagesProgressText.isAccessibilityElement = false + + self.mediaProgressText = ImmediateTextNode() + self.mediaProgressText.isUserInteractionEnabled = false + self.mediaProgressText.displaysAsynchronously = false + self.mediaProgressText.maximumNumberOfLines = 1 + self.mediaProgressText.isAccessibilityElement = false + + self.statusText = ImmediateTextNode() + self.statusText.textAlignment = .center + self.statusText.isUserInteractionEnabled = false + self.statusText.displaysAsynchronously = false + self.statusText.maximumNumberOfLines = 0 + self.statusText.isAccessibilityElement = false + + self.statusButtonText = ImmediateTextNode() + self.statusButtonText.isUserInteractionEnabled = false + self.statusButtonText.displaysAsynchronously = false + self.statusButtonText.maximumNumberOfLines = 1 + self.statusButtonText.isAccessibilityElement = false + + self.statusButton = HighlightableButtonNode() + + self.messagesProgressNode = LinearProgressNode() + self.messagesProgressNode.updateTheme(theme: self.presentationData.theme) + + self.mediaProgressNode = LinearProgressNode() + self.mediaProgressNode.updateTheme(theme: self.presentationData.theme) + + super.init() + + self.backgroundColor = self.presentationData.theme.list.plainBackgroundColor + + self.addSubnode(self.messagesProgressText) + self.addSubnode(self.messagesProgressNode) + self.addSubnode(self.mediaProgressText) + self.addSubnode(self.mediaProgressNode) + self.addSubnode(self.statusText) + self.addSubnode(self.statusButtonText) + self.addSubnode(self.statusButton) + + self.statusButton.addTarget(self, action: #selector(self.statusButtonPressed), forControlEvents: .touchUpInside) + self.statusButton.highligthedChanged = { [weak self] highlighted in + if let strongSelf = self { + if highlighted { + strongSelf.statusButtonText.layer.removeAnimation(forKey: "opacity") + strongSelf.statusButtonText.alpha = 0.4 + } else { + strongSelf.statusButtonText.alpha = 1.0 + strongSelf.statusButtonText.layer.animateAlpha(from: 0.4, to: 1.0, duration: 0.2) + } + } + } + } + + @objc private func statusButtonPressed() { + self.controller?.cancel() + } + + func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationHeight: CGFloat, transition: ContainedViewLayoutTransition) { + self.validLayout = (layout, navigationHeight) + + //TODO:localize + + self.messagesProgressText.attributedText = NSAttributedString(string: "Message Texts", font: Font.regular(15.0), textColor: self.presentationData.theme.list.itemPrimaryTextColor) + let messagesProgressTextSize = self.messagesProgressText.updateLayout(CGSize(width: layout.size.width - 16.0 * 2.0, height: .greatestFiniteMagnitude)) + + self.mediaProgressText.attributedText = NSAttributedString(string: "\(self.mediaProgress) media out of \(self.mediaCount)", font: Font.regular(15.0), textColor: self.presentationData.theme.list.itemPrimaryTextColor) + let mediaProgressTextSize = self.mediaProgressText.updateLayout(CGSize(width: layout.size.width - 16.0 * 2.0, height: .greatestFiniteMagnitude)) + + self.statusButtonText.attributedText = NSAttributedString(string: "Done", font: Font.semibold(17.0), textColor: self.presentationData.theme.list.itemAccentColor) + let statusButtonTextSize = self.statusButtonText.updateLayout(CGSize(width: layout.size.width - 16.0 * 2.0, height: .greatestFiniteMagnitude)) + + var statusTextOffset: CGFloat = 0.0 + let statusButtonSpacing: CGFloat = 10.0 + + if !self.isDone { + self.statusText.attributedText = NSAttributedString(string: "Please keep this window open\nduring the import.", font: Font.regular(16.0), textColor: self.presentationData.theme.list.itemSecondaryTextColor) + } else { + self.statusText.attributedText = NSAttributedString(string: "This chat has been imported\nsuccessfully.", font: Font.semibold(16.0), textColor: self.presentationData.theme.list.itemPrimaryTextColor) + statusTextOffset -= statusButtonTextSize.height - statusButtonSpacing + } + let statusTextSize = self.statusText.updateLayout(CGSize(width: layout.size.width - 16.0 * 2.0, height: .greatestFiniteMagnitude)) + + let mediaProgressHeight: CGFloat = 4.0 + let progressSpacing: CGFloat = 16.0 + let sectionSpacing: CGFloat = 50.0 + + let contentOriginY = navigationHeight + floor((layout.size.height - navigationHeight - messagesProgressTextSize.height - progressSpacing - mediaProgressHeight - sectionSpacing - mediaProgressTextSize.height - progressSpacing - mediaProgressHeight) / 2.0) + + let messagesProgressTextFrame = CGRect(origin: CGPoint(x: 16.0, y: contentOriginY), size: messagesProgressTextSize) + self.messagesProgressText.frame = messagesProgressTextFrame + let messagesProgressFrame = CGRect(origin: CGPoint(x: 16.0, y: messagesProgressTextFrame.maxY + progressSpacing), size: CGSize(width: layout.size.width - 16.0 * 2.0, height: mediaProgressHeight)) + self.messagesProgressNode.frame = messagesProgressFrame + + let mediaProgressTextFrame = CGRect(origin: CGPoint(x: 16.0, y: messagesProgressFrame.maxY + sectionSpacing), size: mediaProgressTextSize) + self.mediaProgressText.frame = mediaProgressTextFrame + let mediaProgressFrame = CGRect(origin: CGPoint(x: 16.0, y: mediaProgressTextFrame.maxY + progressSpacing), size: CGSize(width: layout.size.width - 16.0 * 2.0, height: mediaProgressHeight)) + self.mediaProgressNode.frame = mediaProgressFrame + + let statusTextFrame = CGRect(origin: CGPoint(x: floor((layout.size.width - statusTextSize.width) / 2.0), y: layout.size.height - layout.intrinsicInsets.bottom - 16.0 - statusTextSize.height + statusTextOffset), size: statusTextSize) + self.statusText.frame = statusTextFrame + + let statusButtonTextFrame = CGRect(origin: CGPoint(x: floor((layout.size.width - statusButtonTextSize.width) / 2.0), y: statusTextFrame.maxY + statusButtonSpacing), size: statusButtonTextSize) + self.statusButtonText.frame = statusButtonTextFrame + + self.statusButtonText.isHidden = !self.isDone + self.statusButton.isHidden = !self.isDone + self.statusButton.frame = statusButtonTextFrame.insetBy(dx: -10.0, dy: -10.0) + } + + func updateProgress(mediaProgress: Int, messagesProgress: CGFloat, isDone: Bool, animated: Bool) { + self.mediaProgress = mediaProgress + self.isDone = isDone + + if let (layout, navigationHeight) = self.validLayout { + self.containerLayoutUpdated(layout, navigationHeight: navigationHeight, transition: .immediate) + self.messagesProgressNode.updateProgress(value: messagesProgress) + self.mediaProgressNode.updateProgress(value: CGFloat(mediaProgress) / CGFloat(self.mediaCount)) + } + } + } + + private var controllerNode: Node { + return self.displayNode as! Node + } + + private let context: AccountContext + private var presentationData: PresentationData + let cancel: () -> Void + private let peerId: PeerId + private let archive: Archive + private let mainEntry: TempBoxFile + private let otherEntries: [(Entry, String, ChatHistoryImport.MediaType)] + + private var pendingEntries = Set() + + private let disposable = MetaDisposable() + + init(context: AccountContext, cancel: @escaping () -> Void, peerId: PeerId, archive: Archive, mainEntry: TempBoxFile, otherEntries: [(Entry, String, ChatHistoryImport.MediaType)]) { + self.context = context + self.cancel = cancel + self.peerId = peerId + self.archive = archive + self.mainEntry = mainEntry + self.otherEntries = otherEntries + + self.pendingEntries = Set(otherEntries.map { $0.1 }) + + self.presentationData = self.context.sharedContext.currentPresentationData.with { $0 } + + super.init(navigationBarPresentationData: NavigationBarPresentationData(presentationData: self.presentationData)) + + //TODO:localize + self.title = "Importing Chat" + + self.navigationItem.setLeftBarButton(UIBarButtonItem(title: self.presentationData.strings.Common_Cancel, style: .plain, target: self, action: #selector(self.cancelPressed)), animated: false) + + self.attemptNavigation = { _ in + return false + } + + self.beginImport() + } + + required init(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + deinit { + self.disposable.dispose() + } + + @objc private func cancelPressed() { + self.cancel() + } + + override func loadDisplayNode() { + self.displayNode = Node(controller: self, context: self.context, mediaCount: self.otherEntries.count) + + self.displayNodeDidLoad() + } + + override func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { + super.containerLayoutUpdated(layout, transition: transition) + + self.controllerNode.containerLayoutUpdated(layout, navigationHeight: self.navigationHeight, transition: transition) + } + + private func beginImport() { + enum ImportError { + case generic + } + + let context = self.context + let archive = self.archive + let otherEntries = self.otherEntries + self.disposable.set((ChatHistoryImport.initSession(account: self.context.account, peerId: self.peerId, file: self.mainEntry, mediaCount: Int32(otherEntries.count)) + |> mapError { _ -> ImportError in + return .generic + } + |> mapToSignal { session -> Signal in + var importSignal: Signal = .single("") + + for (entry, fileName, mediaType) in otherEntries { + let unpackedFile = Signal { subscriber in + let tempFile = TempBox.shared.tempFile(fileName: fileName) + do { + let _ = try archive.extract(entry, to: URL(fileURLWithPath: tempFile.path)) + subscriber.putNext(tempFile) + subscriber.putCompletion() + } catch { + subscriber.putError(.generic) + } + + return EmptyDisposable + } + let uploadedMedia = unpackedFile + |> mapToSignal { tempFile -> Signal in + return ChatHistoryImport.uploadMedia(account: context.account, session: session, file: tempFile, fileName: fileName, type: mediaType) + |> mapError { _ -> ImportError in + return .generic + } + |> map { _ -> String in + } + |> then(.single(fileName)) + } + + importSignal = importSignal + |> then(uploadedMedia) + } + + importSignal = importSignal + |> then(ChatHistoryImport.startImport(account: context.account, session: session) + |> mapError { _ -> ImportError in + return .generic + } + |> map { _ -> String in + }) + + return importSignal + } + |> deliverOnMainQueue).start(next: { [weak self] fileName in + guard let strongSelf = self else { + return + } + strongSelf.pendingEntries.remove(fileName) + strongSelf.controllerNode.updateProgress(mediaProgress: strongSelf.otherEntries.count - strongSelf.pendingEntries.count, messagesProgress: 1.0, isDone: false, animated: true) + }, error: { [weak self] _ in + guard let strongSelf = self else { + return + } + strongSelf.controllerNode.updateProgress(mediaProgress: 0, messagesProgress: 0.0, isDone: false, animated: true) + }, completed: { [weak self] in + guard let strongSelf = self else { + return + } + strongSelf.controllerNode.updateProgress(mediaProgress: strongSelf.otherEntries.count, messagesProgress: 1.0, isDone: true, animated: true) + })) + } +} + private final class InternalContext { let sharedContext: SharedAccountContextImpl let wakeupManager: SharedWakeupManager @@ -285,93 +725,293 @@ public class ShareRootControllerImpl { let displayShare: () -> Void = { var cancelImpl: (() -> Void)? - let requestUserInteraction: ([UnpreparedShareItemContent]) -> Signal<[PreparedShareItemContent], NoError> = { content in - return Signal { [weak self] subscriber in - switch content[0] { - case let .contact(data): - let controller = deviceContactInfoController(context: context, subject: .filter(peer: nil, contactId: nil, contactData: data, completion: { peer, contactData in - let phone = contactData.basicData.phoneNumbers[0].value - if let vCardData = contactData.serializedVCard() { - subscriber.putNext([.media(.media(.standalone(media: TelegramMediaContact(firstName: contactData.basicData.firstName, lastName: contactData.basicData.lastName, phoneNumber: phone, peerId: nil, vCardData: vCardData))))]) + let beginShare: () -> Void = { + let requestUserInteraction: ([UnpreparedShareItemContent]) -> Signal<[PreparedShareItemContent], NoError> = { content in + return Signal { [weak self] subscriber in + switch content[0] { + case let .contact(data): + let controller = deviceContactInfoController(context: context, subject: .filter(peer: nil, contactId: nil, contactData: data, completion: { peer, contactData in + let phone = contactData.basicData.phoneNumbers[0].value + if let vCardData = contactData.serializedVCard() { + subscriber.putNext([.media(.media(.standalone(media: TelegramMediaContact(firstName: contactData.basicData.firstName, lastName: contactData.basicData.lastName, phoneNumber: phone, peerId: nil, vCardData: vCardData))))]) + } + subscriber.putCompletion() + }), completed: nil, cancelled: { + cancelImpl?() + }) + + if let strongSelf = self, let window = strongSelf.mainWindow { + controller.presentationArguments = ViewControllerPresentationArguments(presentationAnimation: .modalSheet) + window.present(controller, on: .root) } - subscriber.putCompletion() - }), completed: nil, cancelled: { - cancelImpl?() - }) - - if let strongSelf = self, let window = strongSelf.mainWindow { - controller.presentationArguments = ViewControllerPresentationArguments(presentationAnimation: .modalSheet) - window.present(controller, on: .root) + break + } + return EmptyDisposable + } |> runOn(Queue.mainQueue()) + } + + let sentItems: ([PeerId], [PreparedShareItemContent], Account) -> Signal = { peerIds, contents, account in + let sentItems = sentShareItems(account: account, to: peerIds, items: contents) + |> `catch` { _ -> Signal< + Float, NoError> in + return .complete() + } + return sentItems + |> map { value -> ShareControllerExternalStatus in + return .progress(value) + } + |> then(.single(.done)) + } + + let shareController = ShareController(context: context, subject: .fromExternal({ peerIds, additionalText, account in + if let strongSelf = self, let inputItems = strongSelf.getExtensionContext()?.inputItems, !inputItems.isEmpty, !peerIds.isEmpty { + let rawSignals = TGItemProviderSignals.itemSignals(forInputItems: inputItems)! + return preparedShareItems(account: account, to: peerIds[0], dataItems: rawSignals, additionalText: additionalText) + |> map(Optional.init) + |> `catch` { _ -> Signal in + return .single(nil) + } + |> mapToSignal { state -> Signal in + guard let state = state else { + return .single(.done) } - break - } - return EmptyDisposable - } |> runOn(Queue.mainQueue()) - } - - let sentItems: ([PeerId], [PreparedShareItemContent], Account) -> Signal = { peerIds, contents, account in - let sentItems = sentShareItems(account: account, to: peerIds, items: contents) - |> `catch` { _ -> Signal< - Float, NoError> in - return .complete() - } - return sentItems - |> map { value -> ShareControllerExternalStatus in - return .progress(value) - } - |> then(.single(.done)) - } - - let shareController = ShareController(context: context, subject: .fromExternal({ peerIds, additionalText, account in - if let strongSelf = self, let inputItems = strongSelf.getExtensionContext()?.inputItems, !inputItems.isEmpty, !peerIds.isEmpty { - let rawSignals = TGItemProviderSignals.itemSignals(forInputItems: inputItems)! - return preparedShareItems(account: account, to: peerIds[0], dataItems: rawSignals, additionalText: additionalText) - |> map(Optional.init) - |> `catch` { _ -> Signal in - return .single(nil) - } - |> mapToSignal { state -> Signal in - guard let state = state else { - return .single(.done) - } - switch state { - case .preparing: - return .single(.preparing) - case let .progress(value): - return .single(.progress(value)) - case let .userInteractionRequired(value): - return requestUserInteraction(value) - |> mapToSignal { contents -> Signal in + switch state { + case .preparing: + return .single(.preparing) + case let .progress(value): + return .single(.progress(value)) + case let .userInteractionRequired(value): + return requestUserInteraction(value) + |> mapToSignal { contents -> Signal in + return sentItems(peerIds, contents, account) + } + case let .done(contents): return sentItems(peerIds, contents, account) - } - case let .done(contents): - return sentItems(peerIds, contents, account) + } } + } else { + return .single(.done) } - } else { - return .single(.done) - } - }), externalShare: false, switchableAccounts: otherAccounts, immediatePeerId: immediatePeerId) - shareController.presentationArguments = ViewControllerPresentationArguments(presentationAnimation: .modalSheet) - shareController.dismissed = { _ in - self?.getExtensionContext()?.completeRequest(returningItems: nil, completionHandler: nil) - } - - cancelImpl = { [weak shareController] in - shareController?.dismiss(completion: { [weak self] in + }), fromForeignApp: true, externalShare: false, switchableAccounts: otherAccounts, immediatePeerId: immediatePeerId) + shareController.presentationArguments = ViewControllerPresentationArguments(presentationAnimation: .modalSheet) + shareController.dismissed = { _ in self?.getExtensionContext()?.completeRequest(returningItems: nil, completionHandler: nil) - }) + } + + cancelImpl = { [weak shareController] in + shareController?.dismiss(completion: { [weak self] in + self?.getExtensionContext()?.completeRequest(returningItems: nil, completionHandler: nil) + }) + } + + if let strongSelf = self { + if let currentShareController = strongSelf.currentShareController { + currentShareController.dismiss() + } + strongSelf.currentShareController = shareController + strongSelf.mainWindow?.present(shareController, on: .root) + } + + context.account.resetStateManagement() } - if let strongSelf = self { - if let currentShareController = strongSelf.currentShareController { - currentShareController.dismiss() - } - strongSelf.currentShareController = shareController - strongSelf.mainWindow?.present(shareController, on: .root) - } + if let strongSelf = self, let inputItems = strongSelf.getExtensionContext()?.inputItems, inputItems.count == 1, let item = inputItems[0] as? NSExtensionItem, let attachments = item.attachments { + for attachment in attachments { + if attachment.hasItemConformingToTypeIdentifier(kUTTypeFileURL as String) { + attachment.loadItem(forTypeIdentifier: kUTTypeFileURL as String, completionHandler: { result, error in + Queue.mainQueue().async { + guard let url = result as? URL else { + beginShare() + return + } + guard let fileName = url.pathComponents.last else { + beginShare() + return + } + let fileExtension = (fileName as NSString).pathExtension + guard fileExtension.lowercased() == "zip" else { + beginShare() + return + } + guard let archive = Archive(url: url, accessMode: .read) else { + beginShare() + return + } + guard let _ = archive["_chat.txt"] else { + beginShare() + return + } - context.account.resetStateManagement() + let photoRegex = try! NSRegularExpression(pattern: "[\\d]+-PHOTO-.*?\\.jpg") + let videoRegex = try! NSRegularExpression(pattern: "[\\d]+-VIDEO-.*?\\.mp4") + let stickerRegex = try! NSRegularExpression(pattern: "[\\d]+-STICKER-.*?\\.webp") + let voiceRegex = try! NSRegularExpression(pattern: "[\\d]+-AUDIO-.*?\\.opus") + + let groupCreationRegexList = [ + try! NSRegularExpression(pattern: "created group “(.*?)”"), + try! NSRegularExpression(pattern: "] (.*?): ‎Messages and calls are end-to-end encrypted") + ] + + var groupTitle: String? + var otherEntries: [(Entry, String, ChatHistoryImport.MediaType)] = [] + + var mainFile: TempBoxFile? + do { + for entry in archive { + let entryPath = entry.path(using: .utf8).replacingOccurrences(of: "/", with: "_").replacingOccurrences(of: "..", with: "_") + if entryPath.isEmpty { + continue + } + let tempFile = TempBox.shared.tempFile(fileName: entryPath) + if entryPath == "_chat.txt" { + let _ = try archive.extract(entry, to: URL(fileURLWithPath: tempFile.path)) + if let fileContents = try? String(contentsOfFile: tempFile.path) { + let fullRange = NSRange(fileContents.startIndex ..< fileContents.endIndex, in: fileContents) + for regex in groupCreationRegexList { + if groupTitle != nil { + break + } + if let match = regex.firstMatch(in: fileContents, options: [], range: fullRange) { + let range = match.range(at: 1) + if let mappedRange = Range(range, in: fileContents) { + groupTitle = String(fileContents[mappedRange]) + } + } + } + } + mainFile = tempFile + } else { + let entryFileName = (entryPath as NSString).lastPathComponent + if !entryFileName.isEmpty { + let mediaType: ChatHistoryImport.MediaType + let fullRange = NSRange(entryFileName.startIndex ..< entryFileName.endIndex, in: entryFileName) + if photoRegex.firstMatch(in: entryFileName, options: [], range: fullRange) != nil { + mediaType = .photo + } else if videoRegex.firstMatch(in: entryFileName, options: [], range: fullRange) != nil { + mediaType = .video + } else if stickerRegex.firstMatch(in: entryFileName, options: [], range: fullRange) != nil { + mediaType = .sticker + } else if voiceRegex.firstMatch(in: entryFileName, options: [], range: fullRange) != nil { + mediaType = .voice + } else { + mediaType = .file + } + otherEntries.append((entry, entryFileName, mediaType)) + } + } + } + } catch { + } + if let mainFile = mainFile, let groupTitle = groupTitle { + let presentationData = internalContext.sharedContext.currentPresentationData.with { $0 } + let navigationController = NavigationController(mode: .single, theme: NavigationControllerTheme(presentationTheme: presentationData.theme)) + + //TODO:localize + var attemptSelectionImpl: ((Peer) -> Void)? + var createNewGroupImpl: (() -> Void)? + let controller = context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: context, filter: [.onlyGroups, .onlyManageable, .excludeDisabled], hasContactSelector: false, title: "Import Chat", attemptSelection: { peer in + attemptSelectionImpl?(peer) + }, createNewGroup: { + createNewGroupImpl?() + })) + + controller.peerSelected = { peer in + attemptSelectionImpl?(peer) + } + + controller.navigationPresentation = .default + + let beginWithPeer: (PeerId) -> Void = { peerId in + navigationController.pushViewController(ChatImportProgressController(context: context, cancel: { + self?.getExtensionContext()?.completeRequest(returningItems: nil, completionHandler: nil) + }, peerId: peerId, archive: archive, mainEntry: mainFile, otherEntries: otherEntries)) + } + + attemptSelectionImpl = { peer in + var errorText: String? + if let channel = peer as? TelegramChannel { + if channel.flags.contains(.isCreator) || channel.adminRights != nil { + } else { + errorText = "You need to be an admin of the group to import messages into it." + } + } else { + errorText = "You can't import history into this group." + } + + if let errorText = errorText { + let presentationData = internalContext.sharedContext.currentPresentationData.with { $0 } + let controller = standardTextAlertController(theme: AlertControllerTheme(presentationData: presentationData), title: nil, text: errorText, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: { + })]) + strongSelf.mainWindow?.present(controller, on: .root) + } else { + let presentationData = internalContext.sharedContext.currentPresentationData.with { $0 } + let controller = standardTextAlertController(theme: AlertControllerTheme(presentationData: presentationData), title: "Import Messages", text: "Are you sure you want to import messages from \(groupTitle) into \(peer.debugDisplayTitle)?", actions: [TextAlertAction(type: .genericAction, title: presentationData.strings.Common_Cancel, action: { + }), TextAlertAction(type: .defaultAction, title: "Import", action: { + beginWithPeer(peer.id) + })]) + strongSelf.mainWindow?.present(controller, on: .root) + } + } + + createNewGroupImpl = { + let presentationData = internalContext.sharedContext.currentPresentationData.with { $0 } + let controller = standardTextAlertController(theme: AlertControllerTheme(presentationData: presentationData), title: "Create Group and Import Messages", text: "Are you sure you want to create group \(groupTitle) and import messages from another messaging app?", actions: [TextAlertAction(type: .defaultAction, title: "Create and Import", action: { + var signal: Signal = createSupergroup(account: context.account, title: groupTitle, description: nil) + |> map(Optional.init) + |> `catch` { _ -> Signal in + return .single(nil) + } + + let presentationData = context.sharedContext.currentPresentationData.with { $0 } + let progressSignal = Signal { subscriber in + let controller = OverlayStatusController(theme: presentationData.theme, type: .loading(cancelled: nil)) + if let strongSelf = self { + strongSelf.mainWindow?.present(controller, on: .root) + } + return ActionDisposable { [weak controller] in + Queue.mainQueue().async() { + controller?.dismiss() + } + } + } + |> runOn(Queue.mainQueue()) + |> delay(0.15, queue: Queue.mainQueue()) + let progressDisposable = progressSignal.start() + + signal = signal + |> afterDisposed { + Queue.mainQueue().async { + progressDisposable.dispose() + } + } + let _ = (signal + |> deliverOnMainQueue).start(next: { peerId in + if let peerId = peerId { + beginWithPeer(peerId) + } else { + //TODO:localize + } + }) + }), TextAlertAction(type: .genericAction, title: presentationData.strings.Common_Cancel, action: { + })]) + strongSelf.mainWindow?.present(controller, on: .root) + } + + navigationController.viewControllers = [controller] + strongSelf.mainWindow?.present(navigationController, on: .root) + } else { + beginShare() + return + } + } + }) + return + } + } + beginShare() + } else { + beginShare() + } } let modalPresentation: Bool diff --git a/submodules/TelegramUI/Sources/StringForMessageTimestampStatus.swift b/submodules/TelegramUI/Sources/StringForMessageTimestampStatus.swift index 797d81055c..e82a9f8919 100644 --- a/submodules/TelegramUI/Sources/StringForMessageTimestampStatus.swift +++ b/submodules/TelegramUI/Sources/StringForMessageTimestampStatus.swift @@ -12,6 +12,23 @@ enum MessageTimestampStatusFormat { case minimal } +private func dateStringForDay(strings: PresentationStrings, dateTimeFormat: PresentationDateTimeFormat, timestamp: Int32) -> String { + var t: time_t = time_t(timestamp) + var timeinfo: tm = tm() + localtime_r(&t, &timeinfo) + + let timestampNow = Int32(CFAbsoluteTimeGetCurrent() + NSTimeIntervalSince1970) + var now: time_t = time_t(timestampNow) + var timeinfoNow: tm = tm() + localtime_r(&now, &timeinfoNow) + + if timeinfo.tm_year != timeinfoNow.tm_year { + return "\(stringForTimestamp(day: timeinfo.tm_mday, month: timeinfo.tm_mon + 1, year: timeinfo.tm_year, dateTimeFormat: dateTimeFormat))" + } else { + return "\(stringForTimestamp(day: timeinfo.tm_mday, month: timeinfo.tm_mon + 1, dateTimeFormat: dateTimeFormat))" + } +} + func stringForMessageTimestampStatus(accountPeerId: PeerId, message: Message, dateTimeFormat: PresentationDateTimeFormat, nameDisplayOrder: PresentationPersonNameOrder, strings: PresentationStrings, format: MessageTimestampStatusFormat = .regular, reactionCount: Int) -> String { let timestamp: Int32 if let scheduleTime = message.scheduleTime { @@ -24,6 +41,12 @@ func stringForMessageTimestampStatus(accountPeerId: PeerId, message: Message, da dateText = " " } + if let forwardInfo = message.forwardInfo, forwardInfo.flags.contains(.isImported) { + //TODO:localize + + dateText = dateStringForDay(strings: strings, dateTimeFormat: dateTimeFormat, timestamp: forwardInfo.date) + ", " + stringForMessageTimestamp(timestamp: forwardInfo.date, dateTimeFormat: dateTimeFormat) + " Imported " + dateText + } + var authorTitle: String? if let author = message.author as? TelegramUser { if let peer = message.peers[message.id.peerId] as? TelegramChannel, case .broadcast = peer.info { diff --git a/third-party/ZIPFoundation/BUILD b/third-party/ZIPFoundation/BUILD new file mode 100644 index 0000000000..3afe292675 --- /dev/null +++ b/third-party/ZIPFoundation/BUILD @@ -0,0 +1,12 @@ +load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") + +swift_library( + name = "ZIPFoundation", + module_name = "ZIPFoundation", + srcs = glob([ + "Sources/**/*.swift", + ]), + visibility = [ + "//visibility:public", + ], +) diff --git a/third-party/ZIPFoundation/Sources/Archive+MemoryFile.swift b/third-party/ZIPFoundation/Sources/Archive+MemoryFile.swift new file mode 100644 index 0000000000..161b44c0ed --- /dev/null +++ b/third-party/ZIPFoundation/Sources/Archive+MemoryFile.swift @@ -0,0 +1,178 @@ +// +// Archive+MemoryFile.swift +// ZIPFoundation +// +// Copyright © 2017-2020 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. +// Released under the MIT License. +// +// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. +// + +import Foundation + +#if swift(>=5.0) + +extension Archive { + /// Returns a `Data` object containing a representation of the receiver. + public var data: Data? { return memoryFile?.data } + + static func configureMemoryBacking(for data: Data, mode: AccessMode) + -> (UnsafeMutablePointer, MemoryFile)? { + let posixMode: String + switch mode { + case .read: posixMode = "rb" + case .create: posixMode = "wb+" + case .update: posixMode = "rb+" + } + let memoryFile = MemoryFile(data: data) + guard let archiveFile = memoryFile.open(mode: posixMode) else { return nil } + + if mode == .create { + let endOfCentralDirectoryRecord = EndOfCentralDirectoryRecord(numberOfDisk: 0, numberOfDiskStart: 0, + totalNumberOfEntriesOnDisk: 0, + totalNumberOfEntriesInCentralDirectory: 0, + sizeOfCentralDirectory: 0, + offsetToStartOfCentralDirectory: 0, + zipFileCommentLength: 0, + zipFileCommentData: Data()) + _ = endOfCentralDirectoryRecord.data.withUnsafeBytes { (buffer: UnsafeRawBufferPointer) in + fwrite(buffer.baseAddress, buffer.count, 1, archiveFile) // Errors handled during read + } + } + return (archiveFile, memoryFile) + } +} + +class MemoryFile { + private(set) var data: Data + private var offset = 0 + + init(data: Data = Data()) { + self.data = data + } + + func open(mode: String) -> UnsafeMutablePointer? { + let cookie = Unmanaged.passRetained(self) + let writable = mode.count > 0 && (mode.first! != "r" || mode.last! == "+") + let append = mode.count > 0 && mode.first! == "a" + #if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) + let result = writable + ? funopen(cookie.toOpaque(), readStub, writeStub, seekStub, closeStub) + : funopen(cookie.toOpaque(), readStub, nil, seekStub, closeStub) + #else + let stubs = cookie_io_functions_t(read: readStub, write: writeStub, seek: seekStub, close: closeStub) + let result = fopencookie(cookie.toOpaque(), mode, stubs) + #endif + if append { + fseek(result, 0, SEEK_END) + } + return result + } +} + +private extension MemoryFile { + func readData(buffer: UnsafeMutableRawBufferPointer) -> Int { + let size = min(buffer.count, data.count-offset) + let start = data.startIndex + data.copyBytes(to: buffer.bindMemory(to: UInt8.self), from: start+offset.. Int { + let start = data.startIndex + if offset < data.count && offset+buffer.count > data.count { + data.removeSubrange(start+offset.. data.count { + data.append(Data(count: offset-data.count)) + } + if offset == data.count { + data.append(buffer.bindMemory(to: UInt8.self)) + } else { + let start = data.startIndex // May have changed in earlier mutation + data.replaceSubrange(start+offset.. Int { + var result = -1 + if whence == SEEK_SET { + result = offset + } else if whence == SEEK_CUR { + result = self.offset + offset + } else if whence == SEEK_END { + result = data.count + offset + } + self.offset = result + return self.offset + } +} + +private func fileFromCookie(cookie: UnsafeRawPointer) -> MemoryFile { + return Unmanaged.fromOpaque(cookie).takeUnretainedValue() +} + +private func closeStub(_ cookie: UnsafeMutableRawPointer?) -> Int32 { + if let cookie = cookie { + Unmanaged.fromOpaque(cookie).release() + } + return 0 +} + +#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) +private func readStub(_ cookie: UnsafeMutableRawPointer?, + _ bytePtr: UnsafeMutablePointer?, + _ count: Int32) -> Int32 { + guard let cookie = cookie, let bytePtr = bytePtr else { return 0 } + return Int32(fileFromCookie(cookie: cookie).readData( + buffer: UnsafeMutableRawBufferPointer(start: bytePtr, count: Int(count)))) +} + +private func writeStub(_ cookie: UnsafeMutableRawPointer?, + _ bytePtr: UnsafePointer?, + _ count: Int32) -> Int32 { + guard let cookie = cookie, let bytePtr = bytePtr else { return 0 } + return Int32(fileFromCookie(cookie: cookie).writeData( + buffer: UnsafeRawBufferPointer(start: bytePtr, count: Int(count)))) +} + +private func seekStub(_ cookie: UnsafeMutableRawPointer?, + _ offset: fpos_t, + _ whence: Int32) -> fpos_t { + guard let cookie = cookie else { return 0 } + return fpos_t(fileFromCookie(cookie: cookie).seek(offset: Int(offset), whence: whence)) +} + +#else +private func readStub(_ cookie: UnsafeMutableRawPointer?, + _ bytePtr: UnsafeMutablePointer?, + _ count: Int) -> Int { + guard let cookie = cookie, let bytePtr = bytePtr else { return 0 } + return fileFromCookie(cookie: cookie).readData( + buffer: UnsafeMutableRawBufferPointer(start: bytePtr, count: count)) +} + +private func writeStub(_ cookie: UnsafeMutableRawPointer?, + _ bytePtr: UnsafePointer?, + _ count: Int) -> Int { + guard let cookie = cookie, let bytePtr = bytePtr else { return 0 } + return fileFromCookie(cookie: cookie).writeData( + buffer: UnsafeRawBufferPointer(start: bytePtr, count: count)) +} + +private func seekStub(_ cookie: UnsafeMutableRawPointer?, + _ offset: UnsafeMutablePointer?, + _ whence: Int32) -> Int32 { + guard let cookie = cookie, let offset = offset else { return 0 } + let result = fileFromCookie(cookie: cookie).seek(offset: Int(offset.pointee), whence: whence) + if result >= 0 { + offset.pointee = result + return 0 + } else { + return -1 + } +} +#endif +#endif diff --git a/third-party/ZIPFoundation/Sources/Archive+Reading.swift b/third-party/ZIPFoundation/Sources/Archive+Reading.swift new file mode 100644 index 0000000000..9a748b9056 --- /dev/null +++ b/third-party/ZIPFoundation/Sources/Archive+Reading.swift @@ -0,0 +1,133 @@ +// +// Archive+Reading.swift +// ZIPFoundation +// +// Copyright © 2017-2020 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. +// Released under the MIT License. +// +// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. +// + +import Foundation + +extension Archive { + /// Read a ZIP `Entry` from the receiver and write it to `url`. + /// + /// - Parameters: + /// - entry: The ZIP `Entry` to read. + /// - url: The destination file URL. + /// - bufferSize: The maximum size of the read buffer and the decompression buffer (if needed). + /// - skipCRC32: Optional flag to skip calculation of the CRC32 checksum to improve performance. + /// - progress: A progress object that can be used to track or cancel the extract operation. + /// - Returns: The checksum of the processed content or 0 if the `skipCRC32` flag was set to `true`. + /// - Throws: An error if the destination file cannot be written or the entry contains malformed content. + public func extract(_ entry: Entry, to url: URL, bufferSize: UInt32 = defaultReadChunkSize, skipCRC32: Bool = false, + progress: Progress? = nil) throws -> CRC32 { + let fileManager = FileManager() + var checksum = CRC32(0) + switch entry.type { + case .file: + guard !fileManager.itemExists(at: url) else { + throw CocoaError(.fileWriteFileExists, userInfo: [NSFilePathErrorKey: url.path]) + } + try fileManager.createParentDirectoryStructure(for: url) + let destinationRepresentation = fileManager.fileSystemRepresentation(withPath: url.path) + guard let destinationFile: UnsafeMutablePointer = fopen(destinationRepresentation, "wb+") else { + throw CocoaError(.fileNoSuchFile) + } + defer { fclose(destinationFile) } + let consumer = { _ = try Data.write(chunk: $0, to: destinationFile) } + checksum = try self.extract(entry, bufferSize: bufferSize, skipCRC32: skipCRC32, + progress: progress, consumer: consumer) + case .directory: + let consumer = { (_: Data) in + try fileManager.createDirectory(at: url, withIntermediateDirectories: true, attributes: nil) + } + checksum = try self.extract(entry, bufferSize: bufferSize, skipCRC32: skipCRC32, + progress: progress, consumer: consumer) + case .symlink: + guard !fileManager.itemExists(at: url) else { + throw CocoaError(.fileWriteFileExists, userInfo: [NSFilePathErrorKey: url.path]) + } + let consumer = { (data: Data) in + guard let linkPath = String(data: data, encoding: .utf8) else { throw ArchiveError.invalidEntryPath } + try fileManager.createParentDirectoryStructure(for: url) + try fileManager.createSymbolicLink(atPath: url.path, withDestinationPath: linkPath) + } + checksum = try self.extract(entry, bufferSize: bufferSize, skipCRC32: skipCRC32, + progress: progress, consumer: consumer) + } + let attributes = FileManager.attributes(from: entry) + try fileManager.setAttributes(attributes, ofItemAtPath: url.path) + return checksum + } + + /// Read a ZIP `Entry` from the receiver and forward its contents to a `Consumer` closure. + /// + /// - Parameters: + /// - entry: The ZIP `Entry` to read. + /// - bufferSize: The maximum size of the read buffer and the decompression buffer (if needed). + /// - skipCRC32: Optional flag to skip calculation of the CRC32 checksum to improve performance. + /// - progress: A progress object that can be used to track or cancel the extract operation. + /// - consumer: A closure that consumes contents of `Entry` as `Data` chunks. + /// - Returns: The checksum of the processed content or 0 if the `skipCRC32` flag was set to `true`.. + /// - Throws: An error if the destination file cannot be written or the entry contains malformed content. + public func extract(_ entry: Entry, bufferSize: UInt32 = defaultReadChunkSize, skipCRC32: Bool = false, + progress: Progress? = nil, consumer: Consumer) throws -> CRC32 { + var checksum = CRC32(0) + let localFileHeader = entry.localFileHeader + fseek(self.archiveFile, entry.dataOffset, SEEK_SET) + progress?.totalUnitCount = self.totalUnitCountForReading(entry) + switch entry.type { + case .file: + guard let compressionMethod = CompressionMethod(rawValue: localFileHeader.compressionMethod) else { + throw ArchiveError.invalidCompressionMethod + } + switch compressionMethod { + case .none: checksum = try self.readUncompressed(entry: entry, bufferSize: bufferSize, + skipCRC32: skipCRC32, progress: progress, with: consumer) + case .deflate: checksum = try self.readCompressed(entry: entry, bufferSize: bufferSize, + skipCRC32: skipCRC32, progress: progress, with: consumer) + } + case .directory: + try consumer(Data()) + progress?.completedUnitCount = self.totalUnitCountForReading(entry) + case .symlink: + let localFileHeader = entry.localFileHeader + let size = Int(localFileHeader.compressedSize) + let data = try Data.readChunk(of: size, from: self.archiveFile) + checksum = data.crc32(checksum: 0) + try consumer(data) + progress?.completedUnitCount = self.totalUnitCountForReading(entry) + } + return checksum + } + + // MARK: - Helpers + + private func readUncompressed(entry: Entry, bufferSize: UInt32, skipCRC32: Bool, + progress: Progress? = nil, with consumer: Consumer) throws -> CRC32 { + let size = Int(entry.centralDirectoryStructure.uncompressedSize) + return try Data.consumePart(of: size, chunkSize: Int(bufferSize), skipCRC32: skipCRC32, + provider: { (_, chunkSize) -> Data in + return try Data.readChunk(of: Int(chunkSize), from: self.archiveFile) + }, consumer: { (data) in + if progress?.isCancelled == true { throw ArchiveError.cancelledOperation } + try consumer(data) + progress?.completedUnitCount += Int64(data.count) + }) + } + + private func readCompressed(entry: Entry, bufferSize: UInt32, skipCRC32: Bool, + progress: Progress? = nil, with consumer: Consumer) throws -> CRC32 { + let size = Int(entry.centralDirectoryStructure.compressedSize) + return try Data.decompress(size: size, bufferSize: Int(bufferSize), skipCRC32: skipCRC32, + provider: { (_, chunkSize) -> Data in + return try Data.readChunk(of: chunkSize, from: self.archiveFile) + }, consumer: { (data) in + if progress?.isCancelled == true { throw ArchiveError.cancelledOperation } + try consumer(data) + progress?.completedUnitCount += Int64(data.count) + }) + } +} diff --git a/third-party/ZIPFoundation/Sources/Archive+Writing.swift b/third-party/ZIPFoundation/Sources/Archive+Writing.swift new file mode 100644 index 0000000000..e005750bb1 --- /dev/null +++ b/third-party/ZIPFoundation/Sources/Archive+Writing.swift @@ -0,0 +1,354 @@ +// +// Archive+Writing.swift +// ZIPFoundation +// +// Copyright © 2017-2020 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. +// Released under the MIT License. +// +// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. +// + +import Foundation + +extension Archive { + private enum ModifyOperation: Int { + case remove = -1 + case add = 1 + } + + /// Write files, directories or symlinks to the receiver. + /// + /// - Parameters: + /// - path: The path that is used to identify an `Entry` within the `Archive` file. + /// - baseURL: The base URL of the `Entry` to add. + /// The `baseURL` combined with `path` must form a fully qualified file URL. + /// - compressionMethod: Indicates the `CompressionMethod` that should be applied to `Entry`. + /// By default, no compression will be applied. + /// - bufferSize: The maximum size of the write buffer and the compression buffer (if needed). + /// - progress: A progress object that can be used to track or cancel the add operation. + /// - Throws: An error if the source file cannot be read or the receiver is not writable. + public func addEntry(with path: String, relativeTo baseURL: URL, compressionMethod: CompressionMethod = .none, + bufferSize: UInt32 = defaultWriteChunkSize, progress: Progress? = nil) throws { + let fileManager = FileManager() + let entryURL = baseURL.appendingPathComponent(path) + guard fileManager.itemExists(at: entryURL) else { + throw CocoaError(.fileReadNoSuchFile, userInfo: [NSFilePathErrorKey: entryURL.path]) + } + let type = try FileManager.typeForItem(at: entryURL) + // symlinks do not need to be readable + guard type == .symlink || fileManager.isReadableFile(atPath: entryURL.path) else { + throw CocoaError(.fileReadNoPermission, userInfo: [NSFilePathErrorKey: url.path]) + } + let modDate = try FileManager.fileModificationDateTimeForItem(at: entryURL) + let uncompressedSize = type == .directory ? 0 : try FileManager.fileSizeForItem(at: entryURL) + let permissions = try FileManager.permissionsForItem(at: entryURL) + var provider: Provider + switch type { + case .file: + let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: entryURL.path) + guard let entryFile: UnsafeMutablePointer = fopen(entryFileSystemRepresentation, "rb") else { + throw CocoaError(.fileNoSuchFile) + } + defer { fclose(entryFile) } + provider = { _, _ in return try Data.readChunk(of: Int(bufferSize), from: entryFile) } + try self.addEntry(with: path, type: type, uncompressedSize: uncompressedSize, + modificationDate: modDate, permissions: permissions, + compressionMethod: compressionMethod, bufferSize: bufferSize, + progress: progress, provider: provider) + case .directory: + provider = { _, _ in return Data() } + try self.addEntry(with: path.hasSuffix("/") ? path : path + "/", + type: type, uncompressedSize: uncompressedSize, + modificationDate: modDate, permissions: permissions, + compressionMethod: compressionMethod, bufferSize: bufferSize, + progress: progress, provider: provider) + case .symlink: + provider = { _, _ -> Data in + let linkDestination = try fileManager.destinationOfSymbolicLink(atPath: entryURL.path) + let linkFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: linkDestination) + let linkLength = Int(strlen(linkFileSystemRepresentation)) + let linkBuffer = UnsafeBufferPointer(start: linkFileSystemRepresentation, count: linkLength) + return Data(buffer: linkBuffer) + } + try self.addEntry(with: path, type: type, uncompressedSize: uncompressedSize, + modificationDate: modDate, permissions: permissions, + compressionMethod: compressionMethod, bufferSize: bufferSize, + progress: progress, provider: provider) + } + } + + /// Write files, directories or symlinks to the receiver. + /// + /// - Parameters: + /// - path: The path that is used to identify an `Entry` within the `Archive` file. + /// - type: Indicates the `Entry.EntryType` of the added content. + /// - uncompressedSize: The uncompressed size of the data that is going to be added with `provider`. + /// - modificationDate: A `Date` describing the file modification date of the `Entry`. + /// Default is the current `Date`. + /// - permissions: POSIX file permissions for the `Entry`. + /// Default is `0`o`644` for files and symlinks and `0`o`755` for directories. + /// - compressionMethod: Indicates the `CompressionMethod` that should be applied to `Entry`. + /// By default, no compression will be applied. + /// - bufferSize: The maximum size of the write buffer and the compression buffer (if needed). + /// - progress: A progress object that can be used to track or cancel the add operation. + /// - provider: A closure that accepts a position and a chunk size. Returns a `Data` chunk. + /// - Throws: An error if the source data is invalid or the receiver is not writable. + public func addEntry(with path: String, type: Entry.EntryType, uncompressedSize: UInt32, + modificationDate: Date = Date(), permissions: UInt16? = nil, + compressionMethod: CompressionMethod = .none, bufferSize: UInt32 = defaultWriteChunkSize, + progress: Progress? = nil, provider: Provider) throws { + guard self.accessMode != .read else { throw ArchiveError.unwritableArchive } + // Directories and symlinks cannot be compressed + let compressionMethod = type == .file ? compressionMethod : .none + progress?.totalUnitCount = type == .directory ? defaultDirectoryUnitCount : Int64(uncompressedSize) + var endOfCentralDirRecord = self.endOfCentralDirectoryRecord + var startOfCD = Int(endOfCentralDirRecord.offsetToStartOfCentralDirectory) + fseek(self.archiveFile, startOfCD, SEEK_SET) + let existingCentralDirData = try Data.readChunk(of: Int(endOfCentralDirRecord.sizeOfCentralDirectory), + from: self.archiveFile) + fseek(self.archiveFile, startOfCD, SEEK_SET) + let localFileHeaderStart = ftell(self.archiveFile) + let modDateTime = modificationDate.fileModificationDateTime + defer { fflush(self.archiveFile) } + do { + var localFileHeader = try self.writeLocalFileHeader(path: path, compressionMethod: compressionMethod, + size: (uncompressedSize, 0), checksum: 0, + modificationDateTime: modDateTime) + let (written, checksum) = try self.writeEntry(localFileHeader: localFileHeader, type: type, + compressionMethod: compressionMethod, bufferSize: bufferSize, + progress: progress, provider: provider) + startOfCD = ftell(self.archiveFile) + fseek(self.archiveFile, localFileHeaderStart, SEEK_SET) + // Write the local file header a second time. Now with compressedSize (if applicable) and a valid checksum. + localFileHeader = try self.writeLocalFileHeader(path: path, compressionMethod: compressionMethod, + size: (uncompressedSize, written), + checksum: checksum, modificationDateTime: modDateTime) + fseek(self.archiveFile, startOfCD, SEEK_SET) + _ = try Data.write(chunk: existingCentralDirData, to: self.archiveFile) + let permissions = permissions ?? (type == .directory ? defaultDirectoryPermissions :defaultFilePermissions) + let externalAttributes = FileManager.externalFileAttributesForEntry(of: type, permissions: permissions) + let offset = UInt32(localFileHeaderStart) + let centralDir = try self.writeCentralDirectoryStructure(localFileHeader: localFileHeader, + relativeOffset: offset, + externalFileAttributes: externalAttributes) + if startOfCD > UINT32_MAX { throw ArchiveError.invalidStartOfCentralDirectoryOffset } + endOfCentralDirRecord = try self.writeEndOfCentralDirectory(centralDirectoryStructure: centralDir, + startOfCentralDirectory: UInt32(startOfCD), + operation: .add) + self.endOfCentralDirectoryRecord = endOfCentralDirRecord + } catch ArchiveError.cancelledOperation { + try rollback(localFileHeaderStart, existingCentralDirData, endOfCentralDirRecord) + throw ArchiveError.cancelledOperation + } + } + + /// Remove a ZIP `Entry` from the receiver. + /// + /// - Parameters: + /// - entry: The `Entry` to remove. + /// - bufferSize: The maximum size for the read and write buffers used during removal. + /// - progress: A progress object that can be used to track or cancel the remove operation. + /// - Throws: An error if the `Entry` is malformed or the receiver is not writable. + public func remove(_ entry: Entry, bufferSize: UInt32 = defaultReadChunkSize, progress: Progress? = nil) throws { + let manager = FileManager() + let tempDir = self.uniqueTemporaryDirectoryURL() + defer { try? manager.removeItem(at: tempDir) } + let uniqueString = ProcessInfo.processInfo.globallyUniqueString + let tempArchiveURL = tempDir.appendingPathComponent(uniqueString) + do { try manager.createParentDirectoryStructure(for: tempArchiveURL) } catch { + throw ArchiveError.unwritableArchive } + guard let tempArchive = Archive(url: tempArchiveURL, accessMode: .create) else { + throw ArchiveError.unwritableArchive + } + progress?.totalUnitCount = self.totalUnitCountForRemoving(entry) + var centralDirectoryData = Data() + var offset = 0 + for currentEntry in self { + let centralDirectoryStructure = currentEntry.centralDirectoryStructure + if currentEntry != entry { + let entryStart = Int(currentEntry.centralDirectoryStructure.relativeOffsetOfLocalHeader) + fseek(self.archiveFile, entryStart, SEEK_SET) + let provider: Provider = { (_, chunkSize) -> Data in + return try Data.readChunk(of: Int(chunkSize), from: self.archiveFile) + } + let consumer: Consumer = { + if progress?.isCancelled == true { throw ArchiveError.cancelledOperation } + _ = try Data.write(chunk: $0, to: tempArchive.archiveFile) + progress?.completedUnitCount += Int64($0.count) + } + _ = try Data.consumePart(of: Int(currentEntry.localSize), chunkSize: Int(bufferSize), + provider: provider, consumer: consumer) + let centralDir = CentralDirectoryStructure(centralDirectoryStructure: centralDirectoryStructure, + offset: UInt32(offset)) + centralDirectoryData.append(centralDir.data) + } else { offset = currentEntry.localSize } + } + let startOfCentralDirectory = ftell(tempArchive.archiveFile) + _ = try Data.write(chunk: centralDirectoryData, to: tempArchive.archiveFile) + tempArchive.endOfCentralDirectoryRecord = self.endOfCentralDirectoryRecord + let endOfCentralDirectoryRecord = try + tempArchive.writeEndOfCentralDirectory(centralDirectoryStructure: entry.centralDirectoryStructure, + startOfCentralDirectory: UInt32(startOfCentralDirectory), + operation: .remove) + tempArchive.endOfCentralDirectoryRecord = endOfCentralDirectoryRecord + self.endOfCentralDirectoryRecord = endOfCentralDirectoryRecord + fflush(tempArchive.archiveFile) + try self.replaceCurrentArchiveWithArchive(at: tempArchive.url) + } + + // MARK: - Helpers + + func uniqueTemporaryDirectoryURL() -> URL { + #if swift(>=5.0) || os(macOS) || os(iOS) || os(watchOS) || os(tvOS) + if let tempDir = try? FileManager().url(for: .itemReplacementDirectory, in: .userDomainMask, + appropriateFor: self.url, create: true) { + return tempDir + } + #endif + + return URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent( + ProcessInfo.processInfo.globallyUniqueString) + } + + func replaceCurrentArchiveWithArchive(at URL: URL) throws { + fclose(self.archiveFile) + let fileManager = FileManager() + #if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) + do { + _ = try fileManager.replaceItemAt(self.url, withItemAt: URL) + } catch { + _ = try fileManager.removeItem(at: self.url) + _ = try fileManager.moveItem(at: URL, to: self.url) + } + #else + _ = try fileManager.removeItem(at: self.url) + _ = try fileManager.moveItem(at: URL, to: self.url) + #endif + let fileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: self.url.path) + self.archiveFile = fopen(fileSystemRepresentation, "rb+") + } + + private func writeLocalFileHeader(path: String, compressionMethod: CompressionMethod, + size: (uncompressed: UInt32, compressed: UInt32), + checksum: CRC32, + modificationDateTime: (UInt16, UInt16)) throws -> LocalFileHeader { + // We always set Bit 11 in generalPurposeBitFlag, which indicates an UTF-8 encoded path. + guard let fileNameData = path.data(using: .utf8) else { throw ArchiveError.invalidEntryPath } + + let localFileHeader = LocalFileHeader(versionNeededToExtract: UInt16(20), generalPurposeBitFlag: UInt16(2048), + compressionMethod: compressionMethod.rawValue, + lastModFileTime: modificationDateTime.1, + lastModFileDate: modificationDateTime.0, crc32: checksum, + compressedSize: size.compressed, uncompressedSize: size.uncompressed, + fileNameLength: UInt16(fileNameData.count), extraFieldLength: UInt16(0), + fileNameData: fileNameData, extraFieldData: Data()) + _ = try Data.write(chunk: localFileHeader.data, to: self.archiveFile) + return localFileHeader + } + + private func writeEntry(localFileHeader: LocalFileHeader, type: Entry.EntryType, + compressionMethod: CompressionMethod, bufferSize: UInt32, progress: Progress? = nil, + provider: Provider) throws -> (sizeWritten: UInt32, crc32: CRC32) { + var checksum = CRC32(0) + var sizeWritten = UInt32(0) + switch type { + case .file: + switch compressionMethod { + case .none: + (sizeWritten, checksum) = try self.writeUncompressed(size: localFileHeader.uncompressedSize, + bufferSize: bufferSize, + progress: progress, provider: provider) + case .deflate: + (sizeWritten, checksum) = try self.writeCompressed(size: localFileHeader.uncompressedSize, + bufferSize: bufferSize, + progress: progress, provider: provider) + } + case .directory: + _ = try provider(0, 0) + if let progress = progress { progress.completedUnitCount = progress.totalUnitCount } + case .symlink: + (sizeWritten, checksum) = try self.writeSymbolicLink(size: localFileHeader.uncompressedSize, + provider: provider) + if let progress = progress { progress.completedUnitCount = progress.totalUnitCount } + } + return (sizeWritten, checksum) + } + + private func writeUncompressed(size: UInt32, bufferSize: UInt32, progress: Progress? = nil, + provider: Provider) throws -> (sizeWritten: UInt32, checksum: CRC32) { + var position = 0 + var sizeWritten = 0 + var checksum = CRC32(0) + while position < size { + if progress?.isCancelled == true { throw ArchiveError.cancelledOperation } + let readSize = (Int(size) - position) >= bufferSize ? Int(bufferSize) : (Int(size) - position) + let entryChunk = try provider(Int(position), Int(readSize)) + checksum = entryChunk.crc32(checksum: checksum) + sizeWritten += try Data.write(chunk: entryChunk, to: self.archiveFile) + position += Int(bufferSize) + progress?.completedUnitCount = Int64(sizeWritten) + } + return (UInt32(sizeWritten), checksum) + } + + private func writeCompressed(size: UInt32, bufferSize: UInt32, progress: Progress? = nil, + provider: Provider) throws -> (sizeWritten: UInt32, checksum: CRC32) { + var sizeWritten = 0 + let consumer: Consumer = { data in sizeWritten += try Data.write(chunk: data, to: self.archiveFile) } + let checksum = try Data.compress(size: Int(size), bufferSize: Int(bufferSize), + provider: { (position, size) -> Data in + if progress?.isCancelled == true { throw ArchiveError.cancelledOperation } + let data = try provider(position, size) + progress?.completedUnitCount += Int64(data.count) + return data + }, consumer: consumer) + return(UInt32(sizeWritten), checksum) + } + + private func writeSymbolicLink(size: UInt32, provider: Provider) throws -> (sizeWritten: UInt32, checksum: CRC32) { + let linkData = try provider(0, Int(size)) + let checksum = linkData.crc32(checksum: 0) + let sizeWritten = try Data.write(chunk: linkData, to: self.archiveFile) + return (UInt32(sizeWritten), checksum) + } + + private func writeCentralDirectoryStructure(localFileHeader: LocalFileHeader, relativeOffset: UInt32, + externalFileAttributes: UInt32) throws -> CentralDirectoryStructure { + let centralDirectory = CentralDirectoryStructure(localFileHeader: localFileHeader, + fileAttributes: externalFileAttributes, + relativeOffset: relativeOffset) + _ = try Data.write(chunk: centralDirectory.data, to: self.archiveFile) + return centralDirectory + } + + private func writeEndOfCentralDirectory(centralDirectoryStructure: CentralDirectoryStructure, + startOfCentralDirectory: UInt32, + operation: ModifyOperation) throws -> EndOfCentralDirectoryRecord { + var record = self.endOfCentralDirectoryRecord + let countChange = operation.rawValue + var dataLength = Int(centralDirectoryStructure.extraFieldLength) + dataLength += Int(centralDirectoryStructure.fileNameLength) + dataLength += Int(centralDirectoryStructure.fileCommentLength) + let centralDirectoryDataLengthChange = operation.rawValue * (dataLength + CentralDirectoryStructure.size) + var updatedSizeOfCentralDirectory = Int(record.sizeOfCentralDirectory) + updatedSizeOfCentralDirectory += centralDirectoryDataLengthChange + let numberOfEntriesOnDisk = UInt16(Int(record.totalNumberOfEntriesOnDisk) + countChange) + let numberOfEntriesInCentralDirectory = UInt16(Int(record.totalNumberOfEntriesInCentralDirectory) + countChange) + record = EndOfCentralDirectoryRecord(record: record, numberOfEntriesOnDisk: numberOfEntriesOnDisk, + numberOfEntriesInCentralDirectory: numberOfEntriesInCentralDirectory, + updatedSizeOfCentralDirectory: UInt32(updatedSizeOfCentralDirectory), + startOfCentralDirectory: startOfCentralDirectory) + _ = try Data.write(chunk: record.data, to: self.archiveFile) + return record + } + + private func rollback(_ localFileHeaderStart: Int, + _ existingCentralDirectoryData: Data, + _ endOfCentralDirRecord: EndOfCentralDirectoryRecord) throws { + fflush(self.archiveFile) + ftruncate(fileno(self.archiveFile), off_t(localFileHeaderStart)) + fseek(self.archiveFile, localFileHeaderStart, SEEK_SET) + _ = try Data.write(chunk: existingCentralDirectoryData, to: self.archiveFile) + _ = try Data.write(chunk: endOfCentralDirRecord.data, to: self.archiveFile) + } +} diff --git a/third-party/ZIPFoundation/Sources/Archive.swift b/third-party/ZIPFoundation/Sources/Archive.swift new file mode 100644 index 0000000000..d41c6a61d1 --- /dev/null +++ b/third-party/ZIPFoundation/Sources/Archive.swift @@ -0,0 +1,398 @@ +// +// Archive.swift +// ZIPFoundation +// +// Copyright © 2017-2020 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. +// Released under the MIT License. +// +// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. +// + +import Foundation + +/// The default chunk size when reading entry data from an archive. +public let defaultReadChunkSize = UInt32(16*1024) +/// The default chunk size when writing entry data to an archive. +public let defaultWriteChunkSize = defaultReadChunkSize +/// The default permissions for newly added entries. +public let defaultFilePermissions = UInt16(0o644) +public let defaultDirectoryPermissions = UInt16(0o755) +let defaultPOSIXBufferSize = defaultReadChunkSize +let defaultDirectoryUnitCount = Int64(1) +let minDirectoryEndOffset = 22 +let maxDirectoryEndOffset = 66000 +let endOfCentralDirectoryStructSignature = 0x06054b50 +let localFileHeaderStructSignature = 0x04034b50 +let dataDescriptorStructSignature = 0x08074b50 +let centralDirectoryStructSignature = 0x02014b50 + +/// The compression method of an `Entry` in a ZIP `Archive`. +public enum CompressionMethod: UInt16 { + /// Indicates that an `Entry` has no compression applied to its contents. + case none = 0 + /// Indicates that contents of an `Entry` have been compressed with a zlib compatible Deflate algorithm. + case deflate = 8 +} + +/// A sequence of uncompressed or compressed ZIP entries. +/// +/// You use an `Archive` to create, read or update ZIP files. +/// To read an existing ZIP file, you have to pass in an existing file `URL` and `AccessMode.read`: +/// +/// var archiveURL = URL(fileURLWithPath: "/path/file.zip") +/// var archive = Archive(url: archiveURL, accessMode: .read) +/// +/// An `Archive` is a sequence of entries. You can +/// iterate over an archive using a `for`-`in` loop to get access to individual `Entry` objects: +/// +/// for entry in archive { +/// print(entry.path) +/// } +/// +/// Each `Entry` in an `Archive` is represented by its `path`. You can +/// use `path` to retrieve the corresponding `Entry` from an `Archive` via subscripting: +/// +/// let entry = archive['/path/file.txt'] +/// +/// To create a new `Archive`, pass in a non-existing file URL and `AccessMode.create`. To modify an +/// existing `Archive` use `AccessMode.update`: +/// +/// var archiveURL = URL(fileURLWithPath: "/path/file.zip") +/// var archive = Archive(url: archiveURL, accessMode: .update) +/// try archive?.addEntry("test.txt", relativeTo: baseURL, compressionMethod: .deflate) +public final class Archive: Sequence { + typealias LocalFileHeader = Entry.LocalFileHeader + typealias DataDescriptor = Entry.DataDescriptor + typealias CentralDirectoryStructure = Entry.CentralDirectoryStructure + + /// An error that occurs during reading, creating or updating a ZIP file. + public enum ArchiveError: Error { + /// Thrown when an archive file is either damaged or inaccessible. + case unreadableArchive + /// Thrown when an archive is either opened with AccessMode.read or the destination file is unwritable. + case unwritableArchive + /// Thrown when the path of an `Entry` cannot be stored in an archive. + case invalidEntryPath + /// Thrown when an `Entry` can't be stored in the archive with the proposed compression method. + case invalidCompressionMethod + /// Thrown when the start of the central directory exceeds `UINT32_MAX` + case invalidStartOfCentralDirectoryOffset + /// Thrown when an archive does not contain the required End of Central Directory Record. + case missingEndOfCentralDirectoryRecord + /// Thrown when an extract, add or remove operation was canceled. + case cancelledOperation + } + + /// The access mode for an `Archive`. + public enum AccessMode: UInt { + /// Indicates that a newly instantiated `Archive` should create its backing file. + case create + /// Indicates that a newly instantiated `Archive` should read from an existing backing file. + case read + /// Indicates that a newly instantiated `Archive` should update an existing backing file. + case update + } + + struct EndOfCentralDirectoryRecord: DataSerializable { + let endOfCentralDirectorySignature = UInt32(endOfCentralDirectoryStructSignature) + let numberOfDisk: UInt16 + let numberOfDiskStart: UInt16 + let totalNumberOfEntriesOnDisk: UInt16 + let totalNumberOfEntriesInCentralDirectory: UInt16 + let sizeOfCentralDirectory: UInt32 + let offsetToStartOfCentralDirectory: UInt32 + let zipFileCommentLength: UInt16 + let zipFileCommentData: Data + static let size = 22 + } + + private var preferredEncoding: String.Encoding? + /// URL of an Archive's backing file. + public let url: URL + /// Access mode for an archive file. + public let accessMode: AccessMode + var archiveFile: UnsafeMutablePointer + var endOfCentralDirectoryRecord: EndOfCentralDirectoryRecord + + /// Initializes a new ZIP `Archive`. + /// + /// You can use this initalizer to create new archive files or to read and update existing ones. + /// The `mode` parameter indicates the intended usage of the archive: `.read`, `.create` or `.update`. + /// - Parameters: + /// - url: File URL to the receivers backing file. + /// - mode: Access mode of the receiver. + /// - preferredEncoding: Encoding for entry paths. Overrides the encoding specified in the archive. + /// This encoding is only used when _decoding_ paths from the receiver. + /// Paths of entries added with `addEntry` are always UTF-8 encoded. + /// - Returns: An archive initialized with a backing file at the passed in file URL and the given access mode + /// or `nil` if the following criteria are not met: + /// - Note: + /// - The file URL _must_ point to an existing file for `AccessMode.read`. + /// - The file URL _must_ point to a non-existing file for `AccessMode.create`. + /// - The file URL _must_ point to an existing file for `AccessMode.update`. + public init?(url: URL, accessMode mode: AccessMode, preferredEncoding: String.Encoding? = nil) { + self.url = url + self.accessMode = mode + self.preferredEncoding = preferredEncoding + guard let (archiveFile, endOfCentralDirectoryRecord) = Archive.configureFileBacking(for: url, mode: mode) else { + return nil + } + self.archiveFile = archiveFile + self.endOfCentralDirectoryRecord = endOfCentralDirectoryRecord + setvbuf(self.archiveFile, nil, _IOFBF, Int(defaultPOSIXBufferSize)) + } + + #if swift(>=5.0) + var memoryFile: MemoryFile? + + /// Initializes a new in-memory ZIP `Archive`. + /// + /// You can use this initalizer to create new in-memory archive files or to read and update existing ones. + /// + /// - Parameters: + /// - data: `Data` object used as backing for in-memory archives. + /// - mode: Access mode of the receiver. + /// - preferredEncoding: Encoding for entry paths. Overrides the encoding specified in the archive. + /// This encoding is only used when _decoding_ paths from the receiver. + /// Paths of entries added with `addEntry` are always UTF-8 encoded. + /// - Returns: An in-memory archive initialized with passed in backing data. + /// - Note: + /// - The backing `data` _must_ contain a valid ZIP archive for `AccessMode.read` and `AccessMode.update`. + /// - The backing `data` _must_ be empty (or omitted) for `AccessMode.create`. + public init?(data: Data = Data(), accessMode mode: AccessMode, preferredEncoding: String.Encoding? = nil) { + guard let url = URL(string: "memory:"), + let (archiveFile, memoryFile) = Archive.configureMemoryBacking(for: data, mode: mode) else { + return nil + } + + self.url = url + self.accessMode = mode + self.preferredEncoding = preferredEncoding + self.archiveFile = archiveFile + self.memoryFile = memoryFile + guard let endOfCentralDirectoryRecord = Archive.scanForEndOfCentralDirectoryRecord(in: archiveFile) + else { + fclose(self.archiveFile) + return nil + } + self.endOfCentralDirectoryRecord = endOfCentralDirectoryRecord + } + #endif + + deinit { + fclose(self.archiveFile) + } + + public func makeIterator() -> AnyIterator { + let endOfCentralDirectoryRecord = self.endOfCentralDirectoryRecord + var directoryIndex = Int(endOfCentralDirectoryRecord.offsetToStartOfCentralDirectory) + var index = 0 + return AnyIterator { + guard index < Int(endOfCentralDirectoryRecord.totalNumberOfEntriesInCentralDirectory) else { return nil } + guard let centralDirStruct: CentralDirectoryStructure = Data.readStruct(from: self.archiveFile, + at: directoryIndex) else { + return nil + } + let offset = Int(centralDirStruct.relativeOffsetOfLocalHeader) + guard let localFileHeader: LocalFileHeader = Data.readStruct(from: self.archiveFile, + at: offset) else { return nil } + var dataDescriptor: DataDescriptor? + if centralDirStruct.usesDataDescriptor { + let additionalSize = Int(localFileHeader.fileNameLength) + Int(localFileHeader.extraFieldLength) + let isCompressed = centralDirStruct.compressionMethod != CompressionMethod.none.rawValue + let dataSize = isCompressed ? centralDirStruct.compressedSize : centralDirStruct.uncompressedSize + let descriptorPosition = offset + LocalFileHeader.size + additionalSize + Int(dataSize) + dataDescriptor = Data.readStruct(from: self.archiveFile, at: descriptorPosition) + } + defer { + directoryIndex += CentralDirectoryStructure.size + directoryIndex += Int(centralDirStruct.fileNameLength) + directoryIndex += Int(centralDirStruct.extraFieldLength) + directoryIndex += Int(centralDirStruct.fileCommentLength) + index += 1 + } + return Entry(centralDirectoryStructure: centralDirStruct, + localFileHeader: localFileHeader, dataDescriptor: dataDescriptor) + } + } + + /// Retrieve the ZIP `Entry` with the given `path` from the receiver. + /// + /// - Note: The ZIP file format specification does not enforce unique paths for entries. + /// Therefore an archive can contain multiple entries with the same path. This method + /// always returns the first `Entry` with the given `path`. + /// + /// - Parameter path: A relative file path identifiying the corresponding `Entry`. + /// - Returns: An `Entry` with the given `path`. Otherwise, `nil`. + public subscript(path: String) -> Entry? { + if let encoding = preferredEncoding { + return self.first { $0.path(using: encoding) == path } + } + return self.first { $0.path == path } + } + + // MARK: - Helpers + + private static func configureFileBacking(for url: URL, mode: AccessMode) + -> (UnsafeMutablePointer, EndOfCentralDirectoryRecord)? { + let fileManager = FileManager() + switch mode { + case .read: + let fileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path) + guard let archiveFile = fopen(fileSystemRepresentation, "rb"), + let endOfCentralDirectoryRecord = Archive.scanForEndOfCentralDirectoryRecord(in: archiveFile) else { + return nil + } + return (archiveFile, endOfCentralDirectoryRecord) + case .create: + let endOfCentralDirectoryRecord = EndOfCentralDirectoryRecord(numberOfDisk: 0, numberOfDiskStart: 0, + totalNumberOfEntriesOnDisk: 0, + totalNumberOfEntriesInCentralDirectory: 0, + sizeOfCentralDirectory: 0, + offsetToStartOfCentralDirectory: 0, + zipFileCommentLength: 0, + zipFileCommentData: Data()) + do { + try endOfCentralDirectoryRecord.data.write(to: url, options: .withoutOverwriting) + } catch { return nil } + fallthrough + case .update: + let fileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path) + guard let archiveFile = fopen(fileSystemRepresentation, "rb+"), + let endOfCentralDirectoryRecord = Archive.scanForEndOfCentralDirectoryRecord(in: archiveFile) else { + return nil + } + fseek(archiveFile, 0, SEEK_SET) + return (archiveFile, endOfCentralDirectoryRecord) + } + } + + private static func scanForEndOfCentralDirectoryRecord(in file: UnsafeMutablePointer) + -> EndOfCentralDirectoryRecord? { + var directoryEnd = 0 + var index = minDirectoryEndOffset + fseek(file, 0, SEEK_END) + let archiveLength = ftell(file) + while directoryEnd == 0 && index < maxDirectoryEndOffset && index <= archiveLength { + fseek(file, archiveLength - index, SEEK_SET) + var potentialDirectoryEndTag: UInt32 = UInt32() + fread(&potentialDirectoryEndTag, 1, MemoryLayout.size, file) + if potentialDirectoryEndTag == UInt32(endOfCentralDirectoryStructSignature) { + directoryEnd = archiveLength - index + return Data.readStruct(from: file, at: directoryEnd) + } + index += 1 + } + return nil + } +} + +extension Archive { + /// The number of the work units that have to be performed when + /// removing `entry` from the receiver. + /// + /// - Parameter entry: The entry that will be removed. + /// - Returns: The number of the work units. + public func totalUnitCountForRemoving(_ entry: Entry) -> Int64 { + return Int64(self.endOfCentralDirectoryRecord.offsetToStartOfCentralDirectory + - UInt32(entry.localSize)) + } + + func makeProgressForRemoving(_ entry: Entry) -> Progress { + return Progress(totalUnitCount: self.totalUnitCountForRemoving(entry)) + } + + /// The number of the work units that have to be performed when + /// reading `entry` from the receiver. + /// + /// - Parameter entry: The entry that will be read. + /// - Returns: The number of the work units. + public func totalUnitCountForReading(_ entry: Entry) -> Int64 { + switch entry.type { + case .file, .symlink: + return Int64(entry.uncompressedSize) + case .directory: + return defaultDirectoryUnitCount + } + } + + func makeProgressForReading(_ entry: Entry) -> Progress { + return Progress(totalUnitCount: self.totalUnitCountForReading(entry)) + } + + /// The number of the work units that have to be performed when + /// adding the file at `url` to the receiver. + /// - Parameter entry: The entry that will be removed. + /// - Returns: The number of the work units. + public func totalUnitCountForAddingItem(at url: URL) -> Int64 { + var count = Int64(0) + do { + let type = try FileManager.typeForItem(at: url) + switch type { + case .file, .symlink: + count = Int64(try FileManager.fileSizeForItem(at: url)) + case .directory: + count = defaultDirectoryUnitCount + } + } catch { count = -1 } + return count + } + + func makeProgressForAddingItem(at url: URL) -> Progress { + return Progress(totalUnitCount: self.totalUnitCountForAddingItem(at: url)) + } +} + +extension Archive.EndOfCentralDirectoryRecord { + var data: Data { + var endOfCDSignature = self.endOfCentralDirectorySignature + var numberOfDisk = self.numberOfDisk + var numberOfDiskStart = self.numberOfDiskStart + var totalNumberOfEntriesOnDisk = self.totalNumberOfEntriesOnDisk + var totalNumberOfEntriesInCD = self.totalNumberOfEntriesInCentralDirectory + var sizeOfCentralDirectory = self.sizeOfCentralDirectory + var offsetToStartOfCD = self.offsetToStartOfCentralDirectory + var zipFileCommentLength = self.zipFileCommentLength + var data = Data() + withUnsafePointer(to: &endOfCDSignature, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) + withUnsafePointer(to: &numberOfDisk, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) + withUnsafePointer(to: &numberOfDiskStart, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) + withUnsafePointer(to: &totalNumberOfEntriesOnDisk, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) + withUnsafePointer(to: &totalNumberOfEntriesInCD, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) + withUnsafePointer(to: &sizeOfCentralDirectory, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) + withUnsafePointer(to: &offsetToStartOfCD, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) + withUnsafePointer(to: &zipFileCommentLength, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) + data.append(self.zipFileCommentData) + return data + } + + init?(data: Data, additionalDataProvider provider: (Int) throws -> Data) { + guard data.count == Archive.EndOfCentralDirectoryRecord.size else { return nil } + guard data.scanValue(start: 0) == endOfCentralDirectorySignature else { return nil } + self.numberOfDisk = data.scanValue(start: 4) + self.numberOfDiskStart = data.scanValue(start: 6) + self.totalNumberOfEntriesOnDisk = data.scanValue(start: 8) + self.totalNumberOfEntriesInCentralDirectory = data.scanValue(start: 10) + self.sizeOfCentralDirectory = data.scanValue(start: 12) + self.offsetToStartOfCentralDirectory = data.scanValue(start: 16) + self.zipFileCommentLength = data.scanValue(start: 20) + guard let commentData = try? provider(Int(self.zipFileCommentLength)) else { return nil } + guard commentData.count == Int(self.zipFileCommentLength) else { return nil } + self.zipFileCommentData = commentData + } + + init(record: Archive.EndOfCentralDirectoryRecord, + numberOfEntriesOnDisk: UInt16, + numberOfEntriesInCentralDirectory: UInt16, + updatedSizeOfCentralDirectory: UInt32, + startOfCentralDirectory: UInt32) { + numberOfDisk = record.numberOfDisk + numberOfDiskStart = record.numberOfDiskStart + totalNumberOfEntriesOnDisk = numberOfEntriesOnDisk + totalNumberOfEntriesInCentralDirectory = numberOfEntriesInCentralDirectory + sizeOfCentralDirectory = updatedSizeOfCentralDirectory + offsetToStartOfCentralDirectory = startOfCentralDirectory + zipFileCommentLength = record.zipFileCommentLength + zipFileCommentData = record.zipFileCommentData + } +} diff --git a/third-party/ZIPFoundation/Sources/Data+Compression.swift b/third-party/ZIPFoundation/Sources/Data+Compression.swift new file mode 100644 index 0000000000..ce3558f047 --- /dev/null +++ b/third-party/ZIPFoundation/Sources/Data+Compression.swift @@ -0,0 +1,349 @@ +// +// Data+Compression.swift +// ZIPFoundation +// +// Copyright © 2017-2020 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. +// Released under the MIT License. +// +// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. +// + +import Foundation + +/// An unsigned 32-Bit Integer representing a checksum. +public typealias CRC32 = UInt32 +/// A custom handler that consumes a `Data` object containing partial entry data. +/// - Parameters: +/// - data: A chunk of `Data` to consume. +/// - Throws: Can throw to indicate errors during data consumption. +public typealias Consumer = (_ data: Data) throws -> Void +/// A custom handler that receives a position and a size that can be used to provide data from an arbitrary source. +/// - Parameters: +/// - position: The current read position. +/// - size: The size of the chunk to provide. +/// - Returns: A chunk of `Data`. +/// - Throws: Can throw to indicate errors in the data source. +public typealias Provider = (_ position: Int, _ size: Int) throws -> Data + +/// The lookup table used to calculate `CRC32` checksums. +public let crcTable: [UInt32] = [ + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, + 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, + 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, + 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, + 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, + 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, + 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, + 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, + 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, + 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, + 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, + 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, + 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, + 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, + 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, + 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, + 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, + 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, + 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, + 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, + 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, + 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, + 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, + 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, + 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, + 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, + 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, + 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, + 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, + 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, + 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, + 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, + 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, + 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, + 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, + 0x2d02ef8d] + +extension Data { + enum CompressionError: Error { + case invalidStream + case corruptedData + } + + /// Calculate the `CRC32` checksum of the receiver. + /// + /// - Parameter checksum: The starting seed. + /// - Returns: The checksum calcualted from the bytes of the receiver and the starting seed. + public func crc32(checksum: CRC32) -> CRC32 { + // The typecast is necessary on 32-bit platforms because of + // https://bugs.swift.org/browse/SR-1774 + let mask = 0xffffffff as UInt32 + let bufferSize = self.count/MemoryLayout.size + var result = checksum ^ mask + #if swift(>=5.0) + crcTable.withUnsafeBufferPointer { crcTablePointer in + self.withUnsafeBytes { bufferPointer in + let bytePointer = bufferPointer.bindMemory(to: UInt8.self) + for bufferIndex in 0..> 8) ^ crcTablePointer[index] + } + } + } + #else + self.withUnsafeBytes { (bytes) in + let bins = stride(from: 0, to: bufferSize, by: 256) + for bin in bins { + for binIndex in 0..<256 { + let byteIndex = bin + binIndex + guard byteIndex < bufferSize else { break } + + let byte = bytes[byteIndex] + let index = Int((result ^ UInt32(byte)) & 0xff) + result = (result >> 8) ^ crcTable[index] + } + } + } + #endif + return result ^ mask + } + + /// Compress the output of `provider` and pass it to `consumer`. + /// - Parameters: + /// - size: The uncompressed size of the data to be compressed. + /// - bufferSize: The maximum size of the compression buffer. + /// - provider: A closure that accepts a position and a chunk size. Returns a `Data` chunk. + /// - consumer: A closure that processes the result of the compress operation. + /// - Returns: The checksum of the processed content. + public static func compress(size: Int, bufferSize: Int, provider: Provider, consumer: Consumer) throws -> CRC32 { + #if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) + return try self.process(operation: COMPRESSION_STREAM_ENCODE, size: size, bufferSize: bufferSize, + provider: provider, consumer: consumer) + #else + return try self.encode(size: size, bufferSize: bufferSize, provider: provider, consumer: consumer) + #endif + } + + /// Decompress the output of `provider` and pass it to `consumer`. + /// - Parameters: + /// - size: The compressed size of the data to be decompressed. + /// - bufferSize: The maximum size of the decompression buffer. + /// - skipCRC32: Optional flag to skip calculation of the CRC32 checksum to improve performance. + /// - provider: A closure that accepts a position and a chunk size. Returns a `Data` chunk. + /// - consumer: A closure that processes the result of the decompress operation. + /// - Returns: The checksum of the processed content. + public static func decompress(size: Int, bufferSize: Int, skipCRC32: Bool, + provider: Provider, consumer: Consumer) throws -> CRC32 { + #if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) + return try self.process(operation: COMPRESSION_STREAM_DECODE, size: size, bufferSize: bufferSize, + skipCRC32: skipCRC32, provider: provider, consumer: consumer) + #else + return try self.decode(bufferSize: bufferSize, skipCRC32: skipCRC32, provider: provider, consumer: consumer) + #endif + } +} + +// MARK: - Apple Platforms + +#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) +import Compression + +extension Data { + static func process(operation: compression_stream_operation, size: Int, bufferSize: Int, skipCRC32: Bool = false, + provider: Provider, consumer: Consumer) throws -> CRC32 { + var crc32 = CRC32(0) + let destPointer = UnsafeMutablePointer.allocate(capacity: bufferSize) + defer { destPointer.deallocate() } + let streamPointer = UnsafeMutablePointer.allocate(capacity: 1) + defer { streamPointer.deallocate() } + var stream = streamPointer.pointee + var status = compression_stream_init(&stream, operation, COMPRESSION_ZLIB) + guard status != COMPRESSION_STATUS_ERROR else { throw CompressionError.invalidStream } + defer { compression_stream_destroy(&stream) } + stream.src_size = 0 + stream.dst_ptr = destPointer + stream.dst_size = bufferSize + var position = 0 + var sourceData: Data? + repeat { + if stream.src_size == 0 { + do { + sourceData = try provider(position, Swift.min((size - position), bufferSize)) + if let sourceData = sourceData { + position += sourceData.count + stream.src_size = sourceData.count + } + } catch { throw error } + } + if let sourceData = sourceData { + sourceData.withUnsafeBytes { (rawBufferPointer) in + if let baseAddress = rawBufferPointer.baseAddress { + let pointer = baseAddress.assumingMemoryBound(to: UInt8.self) + stream.src_ptr = pointer.advanced(by: sourceData.count - stream.src_size) + let flags = sourceData.count < bufferSize ? Int32(COMPRESSION_STREAM_FINALIZE.rawValue) : 0 + status = compression_stream_process(&stream, flags) + } + } + if operation == COMPRESSION_STREAM_ENCODE && !skipCRC32 { crc32 = sourceData.crc32(checksum: crc32) } + } + switch status { + case COMPRESSION_STATUS_OK, COMPRESSION_STATUS_END: + let outputData = Data(bytesNoCopy: destPointer, count: bufferSize - stream.dst_size, deallocator: .none) + try consumer(outputData) + if operation == COMPRESSION_STREAM_DECODE && !skipCRC32 { crc32 = outputData.crc32(checksum: crc32) } + stream.dst_ptr = destPointer + stream.dst_size = bufferSize + default: throw CompressionError.corruptedData + } + } while status == COMPRESSION_STATUS_OK + return crc32 + } +} + +// MARK: - Linux + +#else +import CZlib + +extension Data { + static func encode(size: Int, bufferSize: Int, provider: Provider, consumer: Consumer) throws -> CRC32 { + var stream = z_stream() + let streamSize = Int32(MemoryLayout.size) + var result = deflateInit2_(&stream, Z_DEFAULT_COMPRESSION, + Z_DEFLATED, -MAX_WBITS, 9, Z_DEFAULT_STRATEGY, ZLIB_VERSION, streamSize) + defer { deflateEnd(&stream) } + guard result == Z_OK else { throw CompressionError.invalidStream } + var flush = Z_NO_FLUSH + var position = 0 + var zipCRC32 = CRC32(0) + repeat { + let readSize = Swift.min((size - position), bufferSize) + var inputChunk = try provider(position, readSize) + zipCRC32 = inputChunk.crc32(checksum: zipCRC32) + stream.avail_in = UInt32(inputChunk.count) + try inputChunk.withUnsafeMutableBytes { (rawBufferPointer) in + if let baseAddress = rawBufferPointer.baseAddress { + let pointer = baseAddress.assumingMemoryBound(to: UInt8.self) + stream.next_in = pointer + flush = position + bufferSize >= size ? Z_FINISH : Z_NO_FLUSH + } else if rawBufferPointer.count > 0 { + throw CompressionError.corruptedData + } else { + stream.next_in = nil + flush = Z_FINISH + } + var outputChunk = Data(count: bufferSize) + repeat { + stream.avail_out = UInt32(bufferSize) + try outputChunk.withUnsafeMutableBytes { (rawBufferPointer) in + guard let baseAddress = rawBufferPointer.baseAddress, rawBufferPointer.count > 0 else { + throw CompressionError.corruptedData + } + let pointer = baseAddress.assumingMemoryBound(to: UInt8.self) + stream.next_out = pointer + result = deflate(&stream, flush) + } + guard result >= Z_OK else { throw CompressionError.corruptedData } + + outputChunk.count = bufferSize - Int(stream.avail_out) + try consumer(outputChunk) + } while stream.avail_out == 0 + } + position += readSize + } while flush != Z_FINISH + return zipCRC32 + } + + static func decode(bufferSize: Int, skipCRC32: Bool, provider: Provider, consumer: Consumer) throws -> CRC32 { + var stream = z_stream() + let streamSize = Int32(MemoryLayout.size) + var result = inflateInit2_(&stream, -MAX_WBITS, ZLIB_VERSION, streamSize) + defer { inflateEnd(&stream) } + guard result == Z_OK else { throw CompressionError.invalidStream } + var unzipCRC32 = CRC32(0) + var position = 0 + repeat { + stream.avail_in = UInt32(bufferSize) + var chunk = try provider(position, bufferSize) + position += chunk.count + try chunk.withUnsafeMutableBytes { (rawBufferPointer) in + if let baseAddress = rawBufferPointer.baseAddress, rawBufferPointer.count > 0 { + let pointer = baseAddress.assumingMemoryBound(to: UInt8.self) + stream.next_in = pointer + repeat { + var outputData = Data(count: bufferSize) + stream.avail_out = UInt32(bufferSize) + try outputData.withUnsafeMutableBytes { (rawBufferPointer) in + if let baseAddress = rawBufferPointer.baseAddress, rawBufferPointer.count > 0 { + let pointer = baseAddress.assumingMemoryBound(to: UInt8.self) + stream.next_out = pointer + } else { + throw CompressionError.corruptedData + } + result = inflate(&stream, Z_NO_FLUSH) + guard result != Z_NEED_DICT && + result != Z_DATA_ERROR && + result != Z_MEM_ERROR else { + throw CompressionError.corruptedData + } + } + let remainingLength = UInt32(bufferSize) - stream.avail_out + outputData.count = Int(remainingLength) + try consumer(outputData) + if !skipCRC32 { unzipCRC32 = outputData.crc32(checksum: unzipCRC32) } + } while stream.avail_out == 0 + } + } + } while result != Z_STREAM_END + return unzipCRC32 + } +} + +#endif + +#if !swift(>=5.0) + +// Since Swift 5.0, `Data.withUnsafeBytes()` passes an `UnsafeRawBufferPointer` instead of an `UnsafePointer` +// into `body`. +// We provide a compatible method for targets that use Swift 4.x so that we can use the new version +// across all language versions. + +internal extension Data { + func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> T) rethrows -> T { + let count = self.count + return try withUnsafeBytes { (pointer: UnsafePointer) throws -> T in + try body(UnsafeRawBufferPointer(start: pointer, count: count)) + } + } + + #if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) + #else + mutating func withUnsafeMutableBytes(_ body: (UnsafeMutableRawBufferPointer) throws -> T) rethrows -> T { + let count = self.count + guard count > 0 else { + return try body(UnsafeMutableRawBufferPointer(start: nil, count: count)) + } + return try withUnsafeMutableBytes { (pointer: UnsafeMutablePointer) throws -> T in + try body(UnsafeMutableRawBufferPointer(start: pointer, count: count)) + } + } + #endif +} +#endif diff --git a/third-party/ZIPFoundation/Sources/Data+Serialization.swift b/third-party/ZIPFoundation/Sources/Data+Serialization.swift new file mode 100644 index 0000000000..3574275e4b --- /dev/null +++ b/third-party/ZIPFoundation/Sources/Data+Serialization.swift @@ -0,0 +1,103 @@ +// +// Data+Serialization.swift +// ZIPFoundation +// +// Copyright © 2017-2020 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. +// Released under the MIT License. +// +// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. +// + +import Foundation + +protocol DataSerializable { + static var size: Int { get } + init?(data: Data, additionalDataProvider: (Int) throws -> Data) + var data: Data { get } +} + +extension Data { + enum DataError: Error { + case unreadableFile + case unwritableFile + } + + func scanValue(start: Int) -> T { + let subdata = self.subdata(in: start...size) + #if swift(>=5.0) + return subdata.withUnsafeBytes { $0.load(as: T.self) } + #else + return subdata.withUnsafeBytes { $0.pointee } + #endif + } + + static func readStruct(from file: UnsafeMutablePointer, at offset: Int) -> T? where T: DataSerializable { + fseek(file, offset, SEEK_SET) + guard let data = try? self.readChunk(of: T.size, from: file) else { + return nil + } + let structure = T(data: data, additionalDataProvider: { (additionalDataSize) -> Data in + return try self.readChunk(of: additionalDataSize, from: file) + }) + return structure + } + + static func consumePart(of size: Int, chunkSize: Int, skipCRC32: Bool = false, + provider: Provider, consumer: Consumer) throws -> CRC32 { + var checksum = CRC32(0) + guard size > 0 else { + try consumer(Data()) + return checksum + } + + let readInOneChunk = (size < chunkSize) + var chunkSize = readInOneChunk ? size : chunkSize + var bytesRead = 0 + while bytesRead < size { + let remainingSize = size - bytesRead + chunkSize = remainingSize < chunkSize ? remainingSize : chunkSize + let data = try provider(bytesRead, chunkSize) + try consumer(data) + if !skipCRC32 { + checksum = data.crc32(checksum: checksum) + } + bytesRead += chunkSize + } + return checksum + } + + static func readChunk(of size: Int, from file: UnsafeMutablePointer) throws -> Data { + let alignment = MemoryLayout.alignment + #if swift(>=4.1) + let bytes = UnsafeMutableRawPointer.allocate(byteCount: size, alignment: alignment) + #else + let bytes = UnsafeMutableRawPointer.allocate(bytes: size, alignedTo: alignment) + #endif + let bytesRead = fread(bytes, 1, size, file) + let error = ferror(file) + if error > 0 { + throw DataError.unreadableFile + } + #if swift(>=4.1) + return Data(bytesNoCopy: bytes, count: bytesRead, deallocator: .custom({ buf, _ in buf.deallocate() })) + #else + let deallocator = Deallocator.custom({ buf, _ in buf.deallocate(bytes: size, alignedTo: 1) }) + return Data(bytesNoCopy: bytes, count: bytesRead, deallocator: deallocator) + #endif + } + + static func write(chunk: Data, to file: UnsafeMutablePointer) throws -> Int { + var sizeWritten = 0 + chunk.withUnsafeBytes { (rawBufferPointer) in + if let baseAddress = rawBufferPointer.baseAddress, rawBufferPointer.count > 0 { + let pointer = baseAddress.assumingMemoryBound(to: UInt8.self) + sizeWritten = fwrite(pointer, 1, chunk.count, file) + } + } + let error = ferror(file) + if error > 0 { + throw DataError.unwritableFile + } + return sizeWritten + } +} diff --git a/third-party/ZIPFoundation/Sources/Entry.swift b/third-party/ZIPFoundation/Sources/Entry.swift new file mode 100644 index 0000000000..a367b0597c --- /dev/null +++ b/third-party/ZIPFoundation/Sources/Entry.swift @@ -0,0 +1,400 @@ +// +// Entry.swift +// ZIPFoundation +// +// Copyright © 2017-2020 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. +// Released under the MIT License. +// +// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. +// + +import Foundation +import CoreFoundation + +/// A value that represents a file, a directory or a symbolic link within a ZIP `Archive`. +/// +/// You can retrieve instances of `Entry` from an `Archive` via subscripting or iteration. +/// Entries are identified by their `path`. +public struct Entry: Equatable { + /// The type of an `Entry` in a ZIP `Archive`. + public enum EntryType: Int { + /// Indicates a regular file. + case file + /// Indicates a directory. + case directory + /// Indicates a symbolic link. + case symlink + + init(mode: mode_t) { + switch mode & S_IFMT { + case S_IFDIR: + self = .directory + case S_IFLNK: + self = .symlink + default: + self = .file + } + } + } + + enum OSType: UInt { + case msdos = 0 + case unix = 3 + case osx = 19 + case unused = 20 + } + + struct LocalFileHeader: DataSerializable { + let localFileHeaderSignature = UInt32(localFileHeaderStructSignature) + let versionNeededToExtract: UInt16 + let generalPurposeBitFlag: UInt16 + let compressionMethod: UInt16 + let lastModFileTime: UInt16 + let lastModFileDate: UInt16 + let crc32: UInt32 + let compressedSize: UInt32 + let uncompressedSize: UInt32 + let fileNameLength: UInt16 + let extraFieldLength: UInt16 + static let size = 30 + let fileNameData: Data + let extraFieldData: Data + } + + struct DataDescriptor: DataSerializable { + let data: Data + let dataDescriptorSignature = UInt32(dataDescriptorStructSignature) + let crc32: UInt32 + let compressedSize: UInt32 + let uncompressedSize: UInt32 + static let size = 16 + } + + struct CentralDirectoryStructure: DataSerializable { + let centralDirectorySignature = UInt32(centralDirectoryStructSignature) + let versionMadeBy: UInt16 + let versionNeededToExtract: UInt16 + let generalPurposeBitFlag: UInt16 + let compressionMethod: UInt16 + let lastModFileTime: UInt16 + let lastModFileDate: UInt16 + let crc32: UInt32 + let compressedSize: UInt32 + let uncompressedSize: UInt32 + let fileNameLength: UInt16 + let extraFieldLength: UInt16 + let fileCommentLength: UInt16 + let diskNumberStart: UInt16 + let internalFileAttributes: UInt16 + let externalFileAttributes: UInt32 + let relativeOffsetOfLocalHeader: UInt32 + static let size = 46 + let fileNameData: Data + let extraFieldData: Data + let fileCommentData: Data + var usesDataDescriptor: Bool { return (self.generalPurposeBitFlag & (1 << 3 )) != 0 } + var usesUTF8PathEncoding: Bool { return (self.generalPurposeBitFlag & (1 << 11 )) != 0 } + var isEncrypted: Bool { return (self.generalPurposeBitFlag & (1 << 0)) != 0 } + var isZIP64: Bool { return self.versionNeededToExtract >= 45 } + } + /// Returns the `path` of the receiver within a ZIP `Archive` using a given encoding. + /// + /// - Parameters: + /// - encoding: `String.Encoding` + public func path(using encoding: String.Encoding) -> String { + return String(data: self.centralDirectoryStructure.fileNameData, encoding: encoding) ?? "" + } + /// The `path` of the receiver within a ZIP `Archive`. + public var path: String { + let dosLatinUS = 0x400 + let dosLatinUSEncoding = CFStringEncoding(dosLatinUS) + let dosLatinUSStringEncoding = CFStringConvertEncodingToNSStringEncoding(dosLatinUSEncoding) + let codepage437 = String.Encoding(rawValue: dosLatinUSStringEncoding) + let encoding = self.centralDirectoryStructure.usesUTF8PathEncoding ? .utf8 : codepage437 + return self.path(using: encoding) + } + /// The file attributes of the receiver as key/value pairs. + /// + /// Contains the modification date and file permissions. + public var fileAttributes: [FileAttributeKey: Any] { + return FileManager.attributes(from: self) + } + /// The `CRC32` checksum of the receiver. + /// + /// - Note: Always returns `0` for entries of type `EntryType.directory`. + public var checksum: CRC32 { + var checksum = self.centralDirectoryStructure.crc32 + if self.centralDirectoryStructure.usesDataDescriptor { + guard let dataDescriptor = self.dataDescriptor else { return 0 } + checksum = dataDescriptor.crc32 + } + return checksum + } + /// The `EntryType` of the receiver. + public var type: EntryType { + // OS Type is stored in the upper byte of versionMadeBy + let osTypeRaw = self.centralDirectoryStructure.versionMadeBy >> 8 + let osType = OSType(rawValue: UInt(osTypeRaw)) ?? .unused + var isDirectory = self.path.hasSuffix("/") + switch osType { + case .unix, .osx: + let mode = mode_t(self.centralDirectoryStructure.externalFileAttributes >> 16) & S_IFMT + switch mode { + case S_IFREG: + return .file + case S_IFDIR: + return .directory + case S_IFLNK: + return .symlink + default: + return isDirectory ? .directory : .file + } + case .msdos: + isDirectory = isDirectory || ((centralDirectoryStructure.externalFileAttributes >> 4) == 0x01) + fallthrough // For all other OSes we can only guess based on the directory suffix char + default: return isDirectory ? .directory : .file + } + } + /// The size of the receiver's compressed data. + public var compressedSize: Int { + return Int(dataDescriptor?.compressedSize ?? localFileHeader.compressedSize) + } + /// The size of the receiver's uncompressed data. + public var uncompressedSize: Int { + return Int(dataDescriptor?.uncompressedSize ?? localFileHeader.uncompressedSize) + } + /// The combined size of the local header, the data and the optional data descriptor. + var localSize: Int { + let localFileHeader = self.localFileHeader + var extraDataLength = Int(localFileHeader.fileNameLength) + extraDataLength += Int(localFileHeader.extraFieldLength) + var size = LocalFileHeader.size + extraDataLength + let isCompressed = localFileHeader.compressionMethod != CompressionMethod.none.rawValue + size += isCompressed ? self.compressedSize : self.uncompressedSize + size += self.dataDescriptor != nil ? DataDescriptor.size : 0 + return size + } + var dataOffset: Int { + var dataOffset = Int(self.centralDirectoryStructure.relativeOffsetOfLocalHeader) + dataOffset += LocalFileHeader.size + dataOffset += Int(self.localFileHeader.fileNameLength) + dataOffset += Int(self.localFileHeader.extraFieldLength) + return dataOffset + } + let centralDirectoryStructure: CentralDirectoryStructure + let localFileHeader: LocalFileHeader + let dataDescriptor: DataDescriptor? + + public static func == (lhs: Entry, rhs: Entry) -> Bool { + return lhs.path == rhs.path + && lhs.localFileHeader.crc32 == rhs.localFileHeader.crc32 + && lhs.centralDirectoryStructure.relativeOffsetOfLocalHeader + == rhs.centralDirectoryStructure.relativeOffsetOfLocalHeader + } + + init?(centralDirectoryStructure: CentralDirectoryStructure, + localFileHeader: LocalFileHeader, + dataDescriptor: DataDescriptor?) { + // We currently don't support ZIP64 or encrypted archives + guard !centralDirectoryStructure.isZIP64 else { return nil } + guard !centralDirectoryStructure.isEncrypted else { return nil } + self.centralDirectoryStructure = centralDirectoryStructure + self.localFileHeader = localFileHeader + self.dataDescriptor = dataDescriptor + } +} + +extension Entry.LocalFileHeader { + var data: Data { + var localFileHeaderSignature = self.localFileHeaderSignature + var versionNeededToExtract = self.versionNeededToExtract + var generalPurposeBitFlag = self.generalPurposeBitFlag + var compressionMethod = self.compressionMethod + var lastModFileTime = self.lastModFileTime + var lastModFileDate = self.lastModFileDate + var crc32 = self.crc32 + var compressedSize = self.compressedSize + var uncompressedSize = self.uncompressedSize + var fileNameLength = self.fileNameLength + var extraFieldLength = self.extraFieldLength + var data = Data() + withUnsafePointer(to: &localFileHeaderSignature, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) + withUnsafePointer(to: &versionNeededToExtract, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) + withUnsafePointer(to: &generalPurposeBitFlag, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) + withUnsafePointer(to: &compressionMethod, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) + withUnsafePointer(to: &lastModFileTime, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) + withUnsafePointer(to: &lastModFileDate, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) + withUnsafePointer(to: &crc32, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) + withUnsafePointer(to: &compressedSize, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) + withUnsafePointer(to: &uncompressedSize, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) + withUnsafePointer(to: &fileNameLength, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) + withUnsafePointer(to: &extraFieldLength, { data.append(UnsafeBufferPointer(start: $0, count: 1))}) + data.append(self.fileNameData) + data.append(self.extraFieldData) + return data + } + + init?(data: Data, additionalDataProvider provider: (Int) throws -> Data) { + guard data.count == Entry.LocalFileHeader.size else { return nil } + guard data.scanValue(start: 0) == localFileHeaderSignature else { return nil } + self.versionNeededToExtract = data.scanValue(start: 4) + self.generalPurposeBitFlag = data.scanValue(start: 6) + self.compressionMethod = data.scanValue(start: 8) + self.lastModFileTime = data.scanValue(start: 10) + self.lastModFileDate = data.scanValue(start: 12) + self.crc32 = data.scanValue(start: 14) + self.compressedSize = data.scanValue(start: 18) + self.uncompressedSize = data.scanValue(start: 22) + self.fileNameLength = data.scanValue(start: 26) + self.extraFieldLength = data.scanValue(start: 28) + let additionalDataLength = Int(self.fileNameLength) + Int(self.extraFieldLength) + guard let additionalData = try? provider(additionalDataLength) else { return nil } + guard additionalData.count == additionalDataLength else { return nil } + var subRangeStart = 0 + var subRangeEnd = Int(self.fileNameLength) + self.fileNameData = additionalData.subdata(in: subRangeStart.. Data) { + guard data.count == Entry.CentralDirectoryStructure.size else { return nil } + guard data.scanValue(start: 0) == centralDirectorySignature else { return nil } + self.versionMadeBy = data.scanValue(start: 4) + self.versionNeededToExtract = data.scanValue(start: 6) + self.generalPurposeBitFlag = data.scanValue(start: 8) + self.compressionMethod = data.scanValue(start: 10) + self.lastModFileTime = data.scanValue(start: 12) + self.lastModFileDate = data.scanValue(start: 14) + self.crc32 = data.scanValue(start: 16) + self.compressedSize = data.scanValue(start: 20) + self.uncompressedSize = data.scanValue(start: 24) + self.fileNameLength = data.scanValue(start: 28) + self.extraFieldLength = data.scanValue(start: 30) + self.fileCommentLength = data.scanValue(start: 32) + self.diskNumberStart = data.scanValue(start: 34) + self.internalFileAttributes = data.scanValue(start: 36) + self.externalFileAttributes = data.scanValue(start: 38) + self.relativeOffsetOfLocalHeader = data.scanValue(start: 42) + let additionalDataLength = Int(self.fileNameLength) + Int(self.extraFieldLength) + Int(self.fileCommentLength) + guard let additionalData = try? provider(additionalDataLength) else { return nil } + guard additionalData.count == additionalDataLength else { return nil } + var subRangeStart = 0 + var subRangeEnd = Int(self.fileNameLength) + self.fileNameData = additionalData.subdata(in: subRangeStart.. Data) { + guard data.count == Entry.DataDescriptor.size else { return nil } + let signature: UInt32 = data.scanValue(start: 0) + // The DataDescriptor signature is not mandatory so we have to re-arrange the input data if it is missing. + var readOffset = 0 + if signature == self.dataDescriptorSignature { readOffset = 4 } + self.crc32 = data.scanValue(start: readOffset + 0) + self.compressedSize = data.scanValue(start: readOffset + 4) + self.uncompressedSize = data.scanValue(start: readOffset + 8) + // Our add(_ entry:) methods always maintain compressed & uncompressed + // sizes and so we don't need a data descriptor for newly added entries. + // Data descriptors of already existing entries are manually preserved + // when copying those entries to the tempArchive during remove(_ entry:). + self.data = Data() + } +} diff --git a/third-party/ZIPFoundation/Sources/FileManager+ZIP.swift b/third-party/ZIPFoundation/Sources/FileManager+ZIP.swift new file mode 100644 index 0000000000..770366b64e --- /dev/null +++ b/third-party/ZIPFoundation/Sources/FileManager+ZIP.swift @@ -0,0 +1,326 @@ +// +// FileManager+ZIP.swift +// ZIPFoundation +// +// Copyright © 2017-2020 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. +// Released under the MIT License. +// +// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. +// + +import Foundation + +extension FileManager { + typealias CentralDirectoryStructure = Entry.CentralDirectoryStructure + + /// Zips the file or direcory contents at the specified source URL to the destination URL. + /// + /// If the item at the source URL is a directory, the directory itself will be + /// represented within the ZIP `Archive`. Calling this method with a directory URL + /// `file:///path/directory/` will create an archive with a `directory/` entry at the root level. + /// You can override this behavior by passing `false` for `shouldKeepParent`. In that case, the contents + /// of the source directory will be placed at the root of the archive. + /// - Parameters: + /// - sourceURL: The file URL pointing to an existing file or directory. + /// - destinationURL: The file URL that identifies the destination of the zip operation. + /// - shouldKeepParent: Indicates that the directory name of a source item should be used as root element + /// within the archive. Default is `true`. + /// - compressionMethod: Indicates the `CompressionMethod` that should be applied. + /// By default, `zipItem` will create uncompressed archives. + /// - progress: A progress object that can be used to track or cancel the zip operation. + /// - Throws: Throws an error if the source item does not exist or the destination URL is not writable. + public func zipItem(at sourceURL: URL, to destinationURL: URL, + shouldKeepParent: Bool = true, compressionMethod: CompressionMethod = .none, + progress: Progress? = nil) throws { + let fileManager = FileManager() + guard fileManager.itemExists(at: sourceURL) else { + throw CocoaError(.fileReadNoSuchFile, userInfo: [NSFilePathErrorKey: sourceURL.path]) + } + guard !fileManager.itemExists(at: destinationURL) else { + throw CocoaError(.fileWriteFileExists, userInfo: [NSFilePathErrorKey: destinationURL.path]) + } + guard let archive = Archive(url: destinationURL, accessMode: .create) else { + throw Archive.ArchiveError.unwritableArchive + } + let isDirectory = try FileManager.typeForItem(at: sourceURL) == .directory + if isDirectory { + let subPaths = try self.subpathsOfDirectory(atPath: sourceURL.path) + var totalUnitCount = Int64(0) + if let progress = progress { + totalUnitCount = subPaths.reduce(Int64(0), { + let itemURL = sourceURL.appendingPathComponent($1) + let itemSize = archive.totalUnitCountForAddingItem(at: itemURL) + return $0 + itemSize + }) + progress.totalUnitCount = totalUnitCount + } + + // If the caller wants to keep the parent directory, we use the lastPathComponent of the source URL + // as common base for all entries (similar to macOS' Archive Utility.app) + let directoryPrefix = sourceURL.lastPathComponent + for entryPath in subPaths { + let finalEntryPath = shouldKeepParent ? directoryPrefix + "/" + entryPath : entryPath + let finalBaseURL = shouldKeepParent ? sourceURL.deletingLastPathComponent() : sourceURL + if let progress = progress { + let itemURL = sourceURL.appendingPathComponent(entryPath) + let entryProgress = archive.makeProgressForAddingItem(at: itemURL) + progress.addChild(entryProgress, withPendingUnitCount: entryProgress.totalUnitCount) + try archive.addEntry(with: finalEntryPath, relativeTo: finalBaseURL, + compressionMethod: compressionMethod, progress: entryProgress) + } else { + try archive.addEntry(with: finalEntryPath, relativeTo: finalBaseURL, + compressionMethod: compressionMethod) + } + } + } else { + progress?.totalUnitCount = archive.totalUnitCountForAddingItem(at: sourceURL) + let baseURL = sourceURL.deletingLastPathComponent() + try archive.addEntry(with: sourceURL.lastPathComponent, relativeTo: baseURL, + compressionMethod: compressionMethod, progress: progress) + } + } + + /// Unzips the contents at the specified source URL to the destination URL. + /// + /// - Parameters: + /// - sourceURL: The file URL pointing to an existing ZIP file. + /// - destinationURL: The file URL that identifies the destination directory of the unzip operation. + /// - skipCRC32: Optional flag to skip calculation of the CRC32 checksum to improve performance. + /// - progress: A progress object that can be used to track or cancel the unzip operation. + /// - preferredEncoding: Encoding for entry paths. Overrides the encoding specified in the archive. + /// - Throws: Throws an error if the source item does not exist or the destination URL is not writable. + public func unzipItem(at sourceURL: URL, to destinationURL: URL, skipCRC32: Bool = false, + progress: Progress? = nil, preferredEncoding: String.Encoding? = nil) throws { + let fileManager = FileManager() + guard fileManager.itemExists(at: sourceURL) else { + throw CocoaError(.fileReadNoSuchFile, userInfo: [NSFilePathErrorKey: sourceURL.path]) + } + guard let archive = Archive(url: sourceURL, accessMode: .read, preferredEncoding: preferredEncoding) else { + throw Archive.ArchiveError.unreadableArchive + } + // Defer extraction of symlinks until all files & directories have been created. + // This is necessary because we can't create links to files that haven't been created yet. + let sortedEntries = archive.sorted { (left, right) -> Bool in + switch (left.type, right.type) { + case (.directory, .file): return true + case (.directory, .symlink): return true + case (.file, .symlink): return true + default: return false + } + } + var totalUnitCount = Int64(0) + if let progress = progress { + totalUnitCount = sortedEntries.reduce(0, { $0 + archive.totalUnitCountForReading($1) }) + progress.totalUnitCount = totalUnitCount + } + + for entry in sortedEntries { + let path = preferredEncoding == nil ? entry.path : entry.path(using: preferredEncoding!) + let destinationEntryURL = destinationURL.appendingPathComponent(path) + guard destinationEntryURL.isContained(in: destinationURL) else { + throw CocoaError(.fileReadInvalidFileName, + userInfo: [NSFilePathErrorKey: destinationEntryURL.path]) + } + if let progress = progress { + let entryProgress = archive.makeProgressForReading(entry) + progress.addChild(entryProgress, withPendingUnitCount: entryProgress.totalUnitCount) + _ = try archive.extract(entry, to: destinationEntryURL, skipCRC32: skipCRC32, progress: entryProgress) + } else { + _ = try archive.extract(entry, to: destinationEntryURL, skipCRC32: skipCRC32) + } + } + } + + // MARK: - Helpers + + func itemExists(at url: URL) -> Bool { + // Use `URL.checkResourceIsReachable()` instead of `FileManager.fileExists()` here + // because we don't want implicit symlink resolution. + // As per documentation, `FileManager.fileExists()` traverses symlinks and therefore a broken symlink + // would throw a `.fileReadNoSuchFile` false positive error. + // For ZIP files it may be intended to archive "broken" symlinks because they might be + // resolvable again when extracting the archive to a different destination. + return (try? url.checkResourceIsReachable()) == true + } + + func createParentDirectoryStructure(for url: URL) throws { + let parentDirectoryURL = url.deletingLastPathComponent() + try self.createDirectory(at: parentDirectoryURL, withIntermediateDirectories: true, attributes: nil) + } + + class func attributes(from entry: Entry) -> [FileAttributeKey: Any] { + let centralDirectoryStructure = entry.centralDirectoryStructure + let entryType = entry.type + let fileTime = centralDirectoryStructure.lastModFileTime + let fileDate = centralDirectoryStructure.lastModFileDate + let defaultPermissions = entryType == .directory ? defaultDirectoryPermissions : defaultFilePermissions + var attributes = [.posixPermissions: defaultPermissions] as [FileAttributeKey: Any] + // Certain keys are not yet supported in swift-corelibs + #if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) + attributes[.modificationDate] = Date(dateTime: (fileDate, fileTime)) + #endif + let versionMadeBy = centralDirectoryStructure.versionMadeBy + guard let osType = Entry.OSType(rawValue: UInt(versionMadeBy >> 8)) else { return attributes } + + let externalFileAttributes = centralDirectoryStructure.externalFileAttributes + let permissions = self.permissions(for: externalFileAttributes, osType: osType, entryType: entryType) + attributes[.posixPermissions] = NSNumber(value: permissions) + return attributes + } + + class func permissions(for externalFileAttributes: UInt32, osType: Entry.OSType, + entryType: Entry.EntryType) -> UInt16 { + switch osType { + case .unix, .osx: + let permissions = mode_t(externalFileAttributes >> 16) & (~S_IFMT) + let defaultPermissions = entryType == .directory ? defaultDirectoryPermissions : defaultFilePermissions + return permissions == 0 ? defaultPermissions : UInt16(permissions) + default: + return entryType == .directory ? defaultDirectoryPermissions : defaultFilePermissions + } + } + + class func externalFileAttributesForEntry(of type: Entry.EntryType, permissions: UInt16) -> UInt32 { + var typeInt: UInt16 + switch type { + case .file: + typeInt = UInt16(S_IFREG) + case .directory: + typeInt = UInt16(S_IFDIR) + case .symlink: + typeInt = UInt16(S_IFLNK) + } + var externalFileAttributes = UInt32(typeInt|UInt16(permissions)) + externalFileAttributes = (externalFileAttributes << 16) + return externalFileAttributes + } + + class func permissionsForItem(at URL: URL) throws -> UInt16 { + let fileManager = FileManager() + let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: URL.path) + var fileStat = stat() + lstat(entryFileSystemRepresentation, &fileStat) + let permissions = fileStat.st_mode + return UInt16(permissions) + } + + class func fileModificationDateTimeForItem(at url: URL) throws -> Date { + let fileManager = FileManager() + guard fileManager.itemExists(at: url) else { + throw CocoaError(.fileReadNoSuchFile, userInfo: [NSFilePathErrorKey: url.path]) + } + let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path) + var fileStat = stat() + lstat(entryFileSystemRepresentation, &fileStat) + #if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) + let modTimeSpec = fileStat.st_mtimespec + #else + let modTimeSpec = fileStat.st_mtim + #endif + + let timeStamp = TimeInterval(modTimeSpec.tv_sec) + TimeInterval(modTimeSpec.tv_nsec)/1000000000.0 + let modDate = Date(timeIntervalSince1970: timeStamp) + return modDate + } + + class func fileSizeForItem(at url: URL) throws -> UInt32 { + let fileManager = FileManager() + guard fileManager.itemExists(at: url) else { + throw CocoaError(.fileReadNoSuchFile, userInfo: [NSFilePathErrorKey: url.path]) + } + let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path) + var fileStat = stat() + lstat(entryFileSystemRepresentation, &fileStat) + return UInt32(fileStat.st_size) + } + + class func typeForItem(at url: URL) throws -> Entry.EntryType { + let fileManager = FileManager() + guard url.isFileURL, fileManager.itemExists(at: url) else { + throw CocoaError(.fileReadNoSuchFile, userInfo: [NSFilePathErrorKey: url.path]) + } + let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path) + var fileStat = stat() + lstat(entryFileSystemRepresentation, &fileStat) + return Entry.EntryType(mode: fileStat.st_mode) + } +} + +extension Date { + init(dateTime: (UInt16, UInt16)) { + var msdosDateTime = Int(dateTime.0) + msdosDateTime <<= 16 + msdosDateTime |= Int(dateTime.1) + var unixTime = tm() + unixTime.tm_sec = Int32((msdosDateTime&31)*2) + unixTime.tm_min = Int32((msdosDateTime>>5)&63) + unixTime.tm_hour = Int32((Int(dateTime.1)>>11)&31) + unixTime.tm_mday = Int32((msdosDateTime>>16)&31) + unixTime.tm_mon = Int32((msdosDateTime>>21)&15) + unixTime.tm_mon -= 1 // UNIX time struct month entries are zero based. + unixTime.tm_year = Int32(1980+(msdosDateTime>>25)) + unixTime.tm_year -= 1900 // UNIX time structs count in "years since 1900". + let time = timegm(&unixTime) + self = Date(timeIntervalSince1970: TimeInterval(time)) + } + + var fileModificationDateTime: (UInt16, UInt16) { + return (self.fileModificationDate, self.fileModificationTime) + } + + var fileModificationDate: UInt16 { + var time = time_t(self.timeIntervalSince1970) + guard let unixTime = gmtime(&time) else { + return 0 + } + var year = unixTime.pointee.tm_year + 1900 // UNIX time structs count in "years since 1900". + // ZIP uses the MSDOS date format which has a valid range of 1980 - 2099. + year = year >= 1980 ? year : 1980 + year = year <= 2099 ? year : 2099 + let month = unixTime.pointee.tm_mon + 1 // UNIX time struct month entries are zero based. + let day = unixTime.pointee.tm_mday + return (UInt16)(day + ((month) * 32) + ((year - 1980) * 512)) + } + + var fileModificationTime: UInt16 { + var time = time_t(self.timeIntervalSince1970) + guard let unixTime = gmtime(&time) else { + return 0 + } + let hour = unixTime.pointee.tm_hour + let minute = unixTime.pointee.tm_min + let second = unixTime.pointee.tm_sec + return (UInt16)((second/2) + (minute * 32) + (hour * 2048)) + } +} + +#if swift(>=4.2) +#else + +#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) +#else + +// The swift-corelibs-foundation version of NSError.swift was missing a convenience method to create +// error objects from error codes. (https://github.com/apple/swift-corelibs-foundation/pull/1420) +// We have to provide an implementation for non-Darwin platforms using Swift versions < 4.2. + +public extension CocoaError { + public static func error(_ code: CocoaError.Code, userInfo: [AnyHashable: Any]? = nil, url: URL? = nil) -> Error { + var info: [String: Any] = userInfo as? [String: Any] ?? [:] + if let url = url { + info[NSURLErrorKey] = url + } + return NSError(domain: NSCocoaErrorDomain, code: code.rawValue, userInfo: info) + } +} + +#endif +#endif + +public extension URL { + func isContained(in parentDirectoryURL: URL) -> Bool { + // Ensure this URL is contained in the passed in URL + let parentDirectoryURL = URL(fileURLWithPath: parentDirectoryURL.path, isDirectory: true).standardized + return self.standardized.absoluteString.hasPrefix(parentDirectoryURL.absoluteString) + } +}