Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package telegram-desktop for 
openSUSE:Factory checked in at 2026-06-10 15:52:12
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/telegram-desktop (Old)
 and      /work/SRC/openSUSE:Factory/.telegram-desktop.new.2375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "telegram-desktop"

Wed Jun 10 15:52:12 2026 rev:157 rq:1358259 version:6.9.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/telegram-desktop/telegram-desktop.changes        
2026-05-19 18:18:19.097771459 +0200
+++ 
/work/SRC/openSUSE:Factory/.telegram-desktop.new.2375/telegram-desktop.changes  
    2026-06-10 15:52:38.187433337 +0200
@@ -1,0 +2,10 @@
+Tue Jun  9 21:26:48 UTC 2026 - Илья Индиго <[email protected]>
+
+- Updated tg_owt to git20250512.
+  * Fixed LLVM 20+ build error.
+- Updated td to git20260516.
+  * No changes provides.
+- Updated telegram-desktop to 6.9.1
+  * https://github.com/telegramdesktop/tdesktop/releases/tag/v6.9.1
+
+-------------------------------------------------------------------

Old:
----
  td-git20260508.tar.xz
  tdesktop-6.8.2-full.tar.gz
  tg_owt-git20260123.tar.xz

New:
----
  td-git20260516.tar.xz
  tdesktop-6.9.1-full.tar.gz
  tg_owt-git20250512.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ telegram-desktop.spec ++++++
--- /var/tmp/diff_new_pack.IDMngn/_old  2026-06-10 15:52:40.843543404 +0200
+++ /var/tmp/diff_new_pack.IDMngn/_new  2026-06-10 15:52:40.847543570 +0200
@@ -21,17 +21,17 @@
 %define api_id    611335
 %define api_hash  d524b414d21f4d37f08684c1df41ac9c
 %define ada_ver   3.4.4
-%define owt_ver   git20260123
-%define td_ver    git20260508
+%define owt_ver   git20250512
+%define td_ver    git20260516
 Name:           telegram-desktop
-Version:        6.8.2
+Version:        6.9.1
 Release:        0
 Summary:        Messaging application with a focus on speed and security
 License:        GPL-3.0-only
 URL:            https://github.com/telegramdesktop/tdesktop
 Source0:        
https://github.com/telegramdesktop/tdesktop/releases/download/v%{version}/tdesktop-%{version}-full.tar.gz
 Source1:        
https://github.com/ada-url/ada/archive/refs/tags/v%{ada_ver}.tar.gz#/ada-%{ada_ver}.tar.gz
-# n=tg_owt && cd /tmp && git clone --depth=1 https://github.com/desktop-app/$n 
&& pushd $n && git checkout 5c5c71258777d0196dbb3a09cc37d2f56ead28ab && 
v=git$(TZ=UTC date -d @`git log -1 --format=%at` +%Y%m%d) && d=$n-$v && 
f=$d.tar.xz && git submodule update --init --depth=1 && rm -rf .??* && popd && 
mv $n $d && tar c --remove-files "$d" | xz -9e > "$f"
+# n=tg_owt && cd /tmp && git clone --depth=1 https://github.com/desktop-app/$n 
&& pushd $n && v=git$(TZ=UTC date -d @`git log -1 --format=%at` +%Y%m%d) && 
d=$n-$v && f=$d.tar.xz && git submodule update --init --depth=1 && rm -rf .??* 
&& popd && mv $n $d && tar c --remove-files "$d" | xz -9e > "$f"
 Source2:        tg_owt-%{owt_ver}.tar.xz
 # n=td && cd /tmp && git clone --depth=1 https://github.com/tdlib/$n && pushd 
$n && v=git$(TZ=UTC date -d @`git log -1 --format=%at` +%Y%m%d) && d=$n-$v && 
f=$d.tar.xz && rm -rf .??* && popd && mv $n $d && tar c --remove-files "$d" | 
xz -9e > "$f"
 Source3:        td-%{td_ver}.tar.xz
@@ -48,6 +48,7 @@
 BuildRequires:  noopenh264-devel
 BuildRequires:  pkgconfig
 BuildRequires:  python3
+BuildRequires:  qt6-shadertools
 BuildRequires:  cmake(Microsoft.GSL)
 BuildRequires:  cmake(Qt6GuiPrivate)
 BuildRequires:  cmake(Qt6WaylandClientPrivate)
@@ -127,11 +128,8 @@
 
 %prep
 %setup -q -n tdesktop-%{version}-full -b1 -b2 -b3
-
 mv ../ada-%{ada_ver} Telegram/ThirdParty/ada
-
 mv ../tg_owt-%{owt_ver} Telegram/ThirdParty/tg_owt
-
 mv ../td-%{td_ver} Telegram/ThirdParty/td
 
 %build

++++++ td-git20260508.tar.xz -> td-git20260516.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/CMake/GeneratePkgConfig.cmake 
new/td-git20260516/CMake/GeneratePkgConfig.cmake
--- old/td-git20260508/CMake/GeneratePkgConfig.cmake    2026-05-08 
16:53:41.123622169 +0200
+++ new/td-git20260516/CMake/GeneratePkgConfig.cmake    2026-06-09 
20:14:16.620428536 +0200
@@ -8,12 +8,13 @@
   get_filename_component(NAME "${PATH}" NAME_WE)
   if (IS_ABSOLUTE ${PATH})
     get_filename_component(DIRECTORY_NAME "${PATH}" DIRECTORY)
-    if (WIN32)
-      set(${OUTPUT} "-l\"${DIRECTORY_NAME}/${NAME}\"" PARENT_SCOPE)
-    else()
-      get_filename_component(FULL_NAME "${PATH}" NAME)
-      set(${OUTPUT} "-L\"${DIRECTORY_NAME}\" -l:${FULL_NAME}" PARENT_SCOPE)
+    get_filename_component(FULL_NAME "${PATH}" NAME)
+    string(REGEX REPLACE "^lib([^.]+).*$" "\\1" LIB_NAME "${FULL_NAME}")
+    # If the regex didn't match (no lib prefix), fall back to name without 
extension
+    if ("${LIB_NAME}" STREQUAL "${FULL_NAME}")
+      set(LIB_NAME "${NAME}")
     endif()
+    set(${OUTPUT} "-L\"${DIRECTORY_NAME}\" -l${LIB_NAME}" PARENT_SCOPE)
     return()
   endif()
 
@@ -31,17 +32,58 @@
   # message("Generating pkg-config for ${TARGET}")
   get_filename_component(PREFIX "${CMAKE_INSTALL_PREFIX}" REALPATH)
 
-  get_target_property(LIST "${TARGET}" LINK_LIBRARIES)
+  get_target_property(LIBRARY_TYPE "${TARGET}" TYPE)
+  if ("${LIBRARY_TYPE}" STREQUAL "INTERFACE_LIBRARY")
+    get_target_property(LIST "${TARGET}" INTERFACE_LINK_LIBRARIES)
+  else()
+    get_target_property(LIST "${TARGET}" LINK_LIBRARIES)
+  endif()
+
+  if ("${LIST}" STREQUAL "LIST-NOTFOUND")
+    set(LIST "")
+  endif()
+
+  set(INTERFACE_LIBS "")
+  if ("${LIBRARY_TYPE}" STREQUAL "INTERFACE_LIBRARY")
+    set(PROPAGATED "")
+    foreach (DEP ${LIST})
+      if (TARGET "${DEP}")
+        get_target_property(DEP_TYPE "${DEP}" TYPE)
+        if ("${DEP_TYPE}" STREQUAL "STATIC_LIBRARY" OR "${DEP_TYPE}" STREQUAL 
"SHARED_LIBRARY")
+          list(APPEND INTERFACE_LIBS "${DEP}")
+          get_target_property(DEP_LIBS "${DEP}" LINK_LIBRARIES)
+          if (NOT "${DEP_LIBS}" STREQUAL "DEP_LIBS-NOTFOUND")
+            list(APPEND PROPAGATED ${DEP_LIBS})
+          endif()
+        else()
+          list(APPEND PROPAGATED "${DEP}")
+        endif()
+      else()
+        list(APPEND PROPAGATED "${DEP}")
+      endif()
+    endforeach()
+    if (PROPAGATED)
+      list(REMOVE_DUPLICATES PROPAGATED)
+    endif()
+    set(LIST "${PROPAGATED}")
+  endif()
+
   set(REQS "")
   set(LIBS "")
   foreach (LIB ${LIST})
     if (TARGET "${LIB}")
+      if ("${LIBRARY_TYPE}" STREQUAL "SHARED_LIBRARY")
+        get_target_property(LIB_TYPE "${LIB}" TYPE)
+        if ("${LIB_TYPE}" STREQUAL "STATIC_LIBRARY")
+          continue()
+        endif()
+      endif()
       set(HAS_REQS 1)
       list(APPEND REQS "${LIB}")
     else()
       set(HAS_LIBS 1)
       get_relative_link(LINK "${LIB}")
-      if (NOT LINK EQUAL "")
+      if (NOT "${LINK}" STREQUAL "")
         list(APPEND LIBS "${LINK}")
       endif()
     endif()
@@ -77,6 +119,36 @@
   endif()
 
   file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig")
+
+  get_target_property(TARGET_OUTPUT_NAME "${TARGET}" OUTPUT_NAME)
+  if ("${TARGET_OUTPUT_NAME}" STREQUAL "TARGET_OUTPUT_NAME-NOTFOUND")
+    set(TARGET_OUTPUT_NAME "${TARGET}")
+  endif()
+
+  if ("${LIBRARY_TYPE}" STREQUAL "INTERFACE_LIBRARY")
+    set(LIBS_LINE "")
+    foreach (ILIB ${INTERFACE_LIBS})
+      get_target_property(ILIB_OUTPUT_NAME "${ILIB}" OUTPUT_NAME)
+      if ("${ILIB_OUTPUT_NAME}" STREQUAL "ILIB_OUTPUT_NAME-NOTFOUND")
+        set(ILIB_OUTPUT_NAME "${ILIB}")
+      endif()
+      set(LIBS_LINE "${LIBS_LINE} -l${ILIB_OUTPUT_NAME}")
+    endforeach()
+    set(LIBS_LINE "Libs: -L\"${PKGCONFIG_LIBDIR}\"${LIBS_LINE}")
+  else()
+    set(LIBS_LINE "Libs: -L\"${PKGCONFIG_LIBDIR}\" -l${TARGET_OUTPUT_NAME}")
+  endif()
+
+  get_target_property(_td_iface_defs "${TARGET}" INTERFACE_COMPILE_DEFINITIONS)
+  set(CFLAGS_DEFS "")
+  if (NOT "${_td_iface_defs}" STREQUAL "_td_iface_defs-NOTFOUND")
+    foreach(_def ${_td_iface_defs})
+      string(APPEND CFLAGS_DEFS " -D${_def}")
+    endforeach()
+    unset(_def)
+  endif()
+  unset(_td_iface_defs)
+
   file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/${TARGET}.pc" 
CONTENT
 "prefix=${PREFIX}
 
@@ -84,15 +156,13 @@
 Description: ${DESCRIPTION}
 Version: ${PROJECT_VERSION}
 
-CFlags: -I\"${PKGCONFIG_INCLUDEDIR}\"
-Libs: -L\"${PKGCONFIG_LIBDIR}\" -l${TARGET}
+CFlags: -I\"${PKGCONFIG_INCLUDEDIR}\"${CFLAGS_DEFS}
+${LIBS_LINE}
 ${REQUIRES}${LIBRARIES}")
 
-  get_target_property(LIBRARY_TYPE "${TARGET}" TYPE)
-  if (LIBRARY_TYPE STREQUAL "STATIC_LIBRARY" OR LIBRARY_TYPE STREQUAL 
"SHARED_LIBRARY")
+  if ("${LIBRARY_TYPE}" STREQUAL "STATIC_LIBRARY" OR "${LIBRARY_TYPE}" 
STREQUAL "SHARED_LIBRARY" OR
+      "${LIBRARY_TYPE}" STREQUAL "INTERFACE_LIBRARY")
     install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/${TARGET}.pc" 
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
-  elseif (LIBRARY_TYPE STREQUAL "INTERFACE_LIBRARY")
-    # TODO: support interface libraries
   else()
     message(FATAL_ERROR "Don't know how to handle ${TARGET} of type 
${LIBRARY_TYPE}")
   endif()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/README.md new/td-git20260516/README.md
--- old/td-git20260508/README.md        2026-05-08 16:53:41.123622169 +0200
+++ new/td-git20260516/README.md        2026-06-09 20:14:16.620428536 +0200
@@ -21,7 +21,7 @@
 * **Cross-platform**: `TDLib` can be used on Android, iOS, Windows, macOS, 
Linux, FreeBSD, OpenBSD, NetBSD, illumos, Windows Phone, WebAssembly, watchOS, 
tvOS, visionOS, Tizen, Cygwin. It should also work on other *nix systems with 
or without minimal effort.
 * **Multilanguage**: `TDLib` can be easily used with any programming language 
that is able to execute C functions. Additionally, it already has native Java 
(using `JNI`) bindings and .NET (using `C++/CLI` and `C++/CX`) bindings.
 * **Easy to use**: `TDLib` takes care of all network implementation details, 
encryption and local data storage.
-* **High-performance**: in the [Telegram Bot 
API](https://core.telegram.org/bots/api), each `TDLib` instance handles more 
than 25000 active bots simultaneously.
+* **High-performance**: in the [Telegram Bot 
API](https://core.telegram.org/bots/api), each `TDLib` instance handles more 
than 37000 active bots simultaneously.
 * **Well-documented**: all `TDLib` API methods and public interfaces are fully 
documented.
 * **Consistent**: `TDLib` guarantees that all updates are delivered in the 
right order.
 * **Reliable**: `TDLib` remains stable on slow and unreliable Internet 
connections.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/benchmark/bench_misc.cpp 
new/td-git20260516/benchmark/bench_misc.cpp
--- old/td-git20260508/benchmark/bench_misc.cpp 2026-05-08 16:53:41.124311219 
+0200
+++ new/td-git20260516/benchmark/bench_misc.cpp 2026-06-09 20:14:16.621113519 
+0200
@@ -13,6 +13,7 @@
 #include "td/utils/common.h"
 #include "td/utils/logging.h"
 #include "td/utils/port/Clocks.h"
+#include "td/utils/port/config.h"
 #include "td/utils/port/EventFd.h"
 #include "td/utils/port/FileFd.h"
 #include "td/utils/port/path.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/benchmark/bench_queue.cpp 
new/td-git20260516/benchmark/bench_queue.cpp
--- old/td-git20260508/benchmark/bench_queue.cpp        2026-05-08 
16:53:41.124311219 +0200
+++ new/td-git20260516/benchmark/bench_queue.cpp        2026-06-09 
20:14:16.621113519 +0200
@@ -8,6 +8,7 @@
 #include "td/utils/common.h"
 #include "td/utils/logging.h"
 #include "td/utils/MpscPollableQueue.h"
+#include "td/utils/port/config.h"
 #include "td/utils/port/sleep.h"
 #include "td/utils/port/thread.h"
 #include "td/utils/queue.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/benchmark/check_tls.cpp 
new/td-git20260516/benchmark/check_tls.cpp
--- old/td-git20260508/benchmark/check_tls.cpp  2026-05-08 16:53:41.124311219 
+0200
+++ new/td-git20260516/benchmark/check_tls.cpp  2026-06-09 20:14:16.621113519 
+0200
@@ -9,6 +9,7 @@
 #include "td/utils/format.h"
 #include "td/utils/logging.h"
 #include "td/utils/misc.h"
+#include "td/utils/port/config.h"
 #include "td/utils/port/detail/Iocp.h"
 #include "td/utils/port/IPAddress.h"
 #include "td/utils/port/sleep.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/td-git20260508/example/ios/Python-Apple-support.patch 
new/td-git20260516/example/ios/Python-Apple-support.patch
--- old/td-git20260508/example/ios/Python-Apple-support.patch   2026-05-08 
16:53:41.125290796 +0200
+++ new/td-git20260516/example/ios/Python-Apple-support.patch   2026-06-09 
20:14:16.622074872 +0200
@@ -1,5 +1,5 @@
 diff --git a/Makefile b/Makefile
-index a1d13e9..8efcf20 100644
+index a1d13e9..34b8d32 100644
 --- a/Makefile
 +++ b/Makefile
 @@ -18,8 +18,13 @@
@@ -79,18 +79,20 @@
  # The architecture of the machine doing the build
  HOST_ARCH=$(shell uname -m)
  HOST_PYTHON=install/macOS/macosx/python-$(PYTHON_VERSION)
-@@ -212,6 +236,10 @@ ARCH-$(target)=$$(subst .,,$$(suffix $(target)))
- 
+@@ -213,11 +237,7 @@ ARCH-$(target)=$$(subst .,,$$(suffix $(target)))
  ifeq ($(os),macOS)
  TARGET_TRIPLE-$(target)=$$(ARCH-$(target))-apple-darwin
-+else ifeq ($(os),visionOS)
-+TARGET_TRIPLE-$(target)=$$(ARCH-$(target))-apple-xros
-+else ifeq ($(os),visionOS-simulator)
-+TARGET_TRIPLE-$(target)=$$(ARCH-$(target))-apple-xros-simulator
  else
-       ifeq ($$(findstring simulator,$$(SDK-$(target))),)
- TARGET_TRIPLE-$(target)=$$(ARCH-$(target))-apple-$$(OS_LOWER-$(target))
-@@ -662,7 +690,7 @@ BZIP2_FATLIB-$(sdk)=$$(BZIP2_MERGE-$(sdk))/lib/libbz2.a
+-      ifeq ($$(findstring simulator,$$(SDK-$(target))),)
+-TARGET_TRIPLE-$(target)=$$(ARCH-$(target))-apple-$$(OS_LOWER-$(target))
+-      else
+-TARGET_TRIPLE-$(target)=$$(ARCH-$(target))-apple-$$(OS_LOWER-$(target))-simulator
+-      endif
++      TARGET_TRIPLE-$(target)=$$(ARCH-$(target))-apple-$$(OS_LOWER-$(target))
+ endif
+ 
+ SDK_ROOT-$(target)=$$(shell xcrun --sdk $$(SDK-$(target)) --show-sdk-path)
+@@ -662,7 +682,7 @@ BZIP2_FATLIB-$(sdk)=$$(BZIP2_MERGE-$(sdk))/lib/libbz2.a
  XZ_MERGE-$(sdk)=$(PROJECT_DIR)/merge/$(os)/$(sdk)/xz-$(XZ_VERSION)
  XZ_FATLIB-$(sdk)=$$(XZ_MERGE-$(sdk))/lib/liblzma.a
  
@@ -99,7 +101,7 @@
  OPENSSL_FATINCLUDE-$(sdk)=$$(OPENSSL_MERGE-$(sdk))/include
  OPENSSL_SSL_FATLIB-$(sdk)=$$(OPENSSL_MERGE-$(sdk))/lib/libssl.a
  OPENSSL_CRYPTO_FATLIB-$(sdk)=$$(OPENSSL_MERGE-$(sdk))/lib/libcrypto.a
-@@ -716,14 +744,14 @@ $$(OPENSSL_SSL_FATLIB-$(sdk)): $$(foreach 
target,$$(SDK_TARGETS-$(sdk)),$$(OPENS
+@@ -716,14 +736,14 @@ $$(OPENSSL_SSL_FATLIB-$(sdk)): $$(foreach 
target,$$(SDK_TARGETS-$(sdk)),$$(OPENS
        mkdir -p $$(OPENSSL_MERGE-$(sdk))/lib
        lipo -create -output $$@ \
                $$(foreach 
target,$$(SDK_TARGETS-$(sdk)),$$(OPENSSL_SSL_LIB-$$(target))) \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/example/python/tdjson_example.py 
new/td-git20260516/example/python/tdjson_example.py
--- old/td-git20260508/example/python/tdjson_example.py 2026-05-08 
16:53:41.125758037 +0200
+++ new/td-git20260516/example/python/tdjson_example.py 2026-06-09 
20:14:16.622530814 +0200
@@ -89,7 +89,8 @@
             if verbosity_level == 0:
                 sys.exit(f"TDLib fatal error: {message.decode('utf-8')}")
 
-        self._td_set_log_message_callback(2, on_log_message_callback)
+        self._log_message_callback = on_log_message_callback
+        self._td_set_log_message_callback(2, self._log_message_callback)
         self.execute(
             {"@type": "setLogVerbosityLevel", "new_verbosity_level": 
verbosity_level}
         )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/generate/scheme/td_api.tl 
new/td-git20260516/td/generate/scheme/td_api.tl
--- old/td-git20260508/td/generate/scheme/td_api.tl     2026-05-08 
16:53:41.153908615 +0200
+++ new/td-git20260516/td/generate/scheme/td_api.tl     2026-06-09 
20:14:16.649836034 +0200
@@ -11460,7 +11460,7 @@
 //@to_language_code Language code of the language to which the message is 
translated. Must be one of
 //-"af", "sq", "am", "ar", "hy", "az", "eu", "be", "bn", "bs", "bg", "ca", 
"ceb", "zh-CN", "zh", "zh-Hans", "zh-TW", "zh-Hant", "co", "hr", "cs", "da", 
"nl", "en", "eo", "et",
 //-"fi", "fr", "fy", "gl", "ka", "de", "el", "gu", "ht", "ha", "haw", "he", 
"iw", "hi", "hmn", "hu", "is", "ig", "id", "in", "ga", "it", "ja", "jv", "kn", 
"kk", "km", "rw", "ko",
-//-"ku", "ky", "lo", "la", "lv", "lt", "lb", "mk", "mg", "ms", "ml", "mt", 
"mi", "mr", "mn", "my", "ne", "no", "ny", "or", "ps", "fa", "pl", "pt", "pa", 
"ro", "ru", "sm", "gd", "sr",
+//-"ku", "ky", "lo", "la", "lv", "lt", "lb", "mk", "mg", "ms", "ml", "mt", 
"mi", "mr", "mn", "my", "ne", "no", "ny", "or", "ps", "fa", "pl", "pt", 
"pt-BR", "pa", "ro", "ru", "sm", "gd", "sr",
 //-"st", "sn", "sd", "si", "sk", "sl", "so", "es", "su", "sw", "sv", "tl", 
"tg", "ta", "tt", "te", "th", "tr", "tk", "uk", "ur", "ug", "uz", "vi", "cy", 
"xh", "yi", "ji", "yo", "zu"
 //@tone Tone of the translation; must be one of "", "formal", "neutral", 
"casual"; defaults to "neutral"
 translateText text:formattedText to_language_code:string tone:string = 
FormattedText;
@@ -12823,7 +12823,7 @@
 transferChatOwnership chat_id:int53 user_id:int53 password:string = Ok;
 
 //@description Returns the user who will become the owner of the chat after 7 
days if the current user does not return to the supergroup or channel during 
that period or immediately for basic groups; requires owner privileges in the 
chat.
-//-Available only for supergroups and channel chats
+//-Available only for basic groups, supergroups, and channel chats
 //@chat_id Chat identifier
 getChatOwnerAfterLeaving chat_id:int53 = User;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/mtproto/HttpTransport.cpp 
new/td-git20260516/td/mtproto/HttpTransport.cpp
--- old/td-git20260508/td/mtproto/HttpTransport.cpp     2026-05-08 
16:53:41.156331743 +0200
+++ new/td-git20260516/td/mtproto/HttpTransport.cpp     2026-06-09 
20:14:16.652756177 +0200
@@ -24,7 +24,7 @@
 namespace mtproto {
 namespace http {
 
-Result<size_t> Transport::read_next(BufferSlice *message, uint32 *quick_ack) {
+Result<size_t> Transport::read_next(BufferSlice *message, uint32 *quick_ack, 
int32 *error_code) {
   CHECK(can_read());
   auto r_size = reader_.read_next(&http_query_);
   if (r_size.is_error() || r_size.ok() != 0) {
@@ -37,6 +37,7 @@
     return Status::Error("Wrong response");
   }
   *message = std::move(http_query_.container_[1]);
+  *error_code = http_query_.code_;
   turn_ = Write;
   return 0;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/mtproto/HttpTransport.h 
new/td-git20260516/td/mtproto/HttpTransport.h
--- old/td-git20260508/td/mtproto/HttpTransport.h       2026-05-08 
16:53:41.156331743 +0200
+++ new/td-git20260516/td/mtproto/HttpTransport.h       2026-06-09 
20:14:16.652756177 +0200
@@ -27,23 +27,31 @@
   explicit Transport(string secret) : secret_(std::move(secret)) {
   }
 
-  Result<size_t> read_next(BufferSlice *message, uint32 *quick_ack) final 
TD_WARN_UNUSED_RESULT;
+  Result<size_t> read_next(BufferSlice *message, uint32 *quick_ack, int32 
*error_code) final TD_WARN_UNUSED_RESULT;
+
   bool support_quick_ack() const final {
     return false;
   }
+
   void write(BufferWriter &&message, bool quick_ack) final;
+
   bool can_read() const final;
+
   bool can_write() const final;
+
   void init(ChainBufferReader *input, ChainBufferWriter *output) final {
     reader_.init(input);
     output_ = output;
   }
 
   size_t max_prepend_size() const final;
+
   size_t max_append_size() const final;
+
   TransportType get_type() const final {
     return {TransportType::Http, 0, ProxySecret::from_raw(secret_)};
   }
+
   bool use_random_padding() const final;
 
  private:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/mtproto/IStreamTransport.h 
new/td-git20260516/td/mtproto/IStreamTransport.h
--- old/td-git20260508/td/mtproto/IStreamTransport.h    2026-05-08 
16:53:41.156331743 +0200
+++ new/td-git20260516/td/mtproto/IStreamTransport.h    2026-06-09 
20:14:16.652756177 +0200
@@ -22,7 +22,7 @@
   IStreamTransport(const IStreamTransport &) = delete;
   IStreamTransport &operator=(const IStreamTransport &) = delete;
   virtual ~IStreamTransport() = default;
-  virtual Result<size_t> read_next(BufferSlice *message, uint32 *quick_ack) = 
0;
+  virtual Result<size_t> read_next(BufferSlice *message, uint32 *quick_ack, 
int32 *error_code) = 0;
   virtual bool support_quick_ack() const = 0;
   virtual void write(BufferWriter &&message, bool quick_ack) = 0;
   virtual bool can_read() const = 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/mtproto/RawConnection.cpp 
new/td-git20260516/td/mtproto/RawConnection.cpp
--- old/td-git20260508/td/mtproto/RawConnection.cpp     2026-05-08 
16:53:41.156331743 +0200
+++ new/td-git20260516/td/mtproto/RawConnection.cpp     2026-06-09 
20:14:16.652756177 +0200
@@ -163,7 +163,8 @@
     while (transport_->can_read()) {
       BufferSlice packet;
       uint32 quick_ack = 0;
-      TRY_RESULT(wait_size, transport_->read_next(&packet, &quick_ack));
+      int32 error_code = 0;
+      TRY_RESULT(wait_size, transport_->read_next(&packet, &quick_ack, 
&error_code));
       if (wait_size != 0) {
         constexpr size_t MAX_PACKET_SIZE = (1 << 22) + 1024;
         if (wait_size > MAX_PACKET_SIZE) {
@@ -189,7 +190,7 @@
       PacketInfo packet_info;
       packet_info.version = 2;
 
-      TRY_RESULT(read_result, Transport::read(packet.as_mutable_slice(), 
auth_key, &packet_info));
+      TRY_RESULT(read_result, Transport::read(packet.as_mutable_slice(), 
error_code, auth_key, &packet_info));
       switch (read_result.type()) {
         case Transport::ReadResult::Quickack:
           TRY_STATUS(on_quick_ack(read_result.quick_ack(), callback));
@@ -283,7 +284,7 @@
   RawConnectionHttp(IPAddress ip_address, unique_ptr<StatsCallback> 
stats_callback)
       : ip_address_(std::move(ip_address)), 
stats_callback_(std::move(stats_callback)) {
     LOG(DEBUG) << "Create raw connection " << this;
-    answers_ = std::make_shared<MpscPollableQueue<Result<BufferSlice>>>();
+    answers_ = std::make_shared<MpscPollableQueue<Result<std::pair<int32, 
BufferSlice>>>>();
     answers_->init();
   }
 
@@ -369,7 +370,7 @@
   unique_ptr<StatsCallback> stats_callback_;
 
   ConnectionManager::ConnectionToken connection_token_;
-  std::shared_ptr<MpscPollableQueue<Result<BufferSlice>>> answers_;
+  std::shared_ptr<MpscPollableQueue<Result<std::pair<int32, BufferSlice>>>> 
answers_;
   std::vector<BufferSlice> to_send_;
 
   void on_read(size_t size, Callback &callback) {
@@ -396,7 +397,9 @@
         break;
       }
       for (int i = 0; i < packets_n; i++) {
-        TRY_RESULT(packet, answers_->reader_get_unsafe());
+        TRY_RESULT(answer, answers_->reader_get_unsafe());
+        auto error_code = answer.first;
+        auto packet = std::move(answer.second);
         on_read(packet.size(), callback);
         CHECK(mode_ == Receive);
         mode_ = Send;
@@ -404,11 +407,10 @@
         PacketInfo packet_info;
         packet_info.version = 2;
 
-        TRY_RESULT(read_result, Transport::read(packet.as_mutable_slice(), 
auth_key, &packet_info));
+        TRY_RESULT(read_result, Transport::read(packet.as_mutable_slice(), 
error_code, auth_key, &packet_info));
         switch (read_result.type()) {
-          case Transport::ReadResult::Quickack: {
+          case Transport::ReadResult::Quickack:
             break;
-          }
           case Transport::ReadResult::Error: {
             TRY_STATUS(on_read_mtproto_error(read_result.error()));
             break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/mtproto/TcpTransport.cpp 
new/td-git20260516/td/mtproto/TcpTransport.cpp
--- old/td-git20260508/td/mtproto/TcpTransport.cpp      2026-05-08 
16:53:41.156331743 +0200
+++ new/td-git20260516/td/mtproto/TcpTransport.cpp      2026-06-09 
20:14:16.652756177 +0200
@@ -142,7 +142,7 @@
   MutableSlice(header_).substr(56).copy_from(header_slice.substr(56));
 }
 
-Result<size_t> ObfuscatedTransport::read_next(BufferSlice *message, uint32 
*quick_ack) {
+Result<size_t> ObfuscatedTransport::read_next(BufferSlice *message, uint32 
*quick_ack, int32 *error_code) {
   if (secret_.emulate_tls()) {
     tls_reader_byte_flow_.wakeup();
   } else {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/mtproto/TcpTransport.h 
new/td-git20260516/td/mtproto/TcpTransport.h
--- old/td-git20260508/td/mtproto/TcpTransport.h        2026-05-08 
16:53:41.156331743 +0200
+++ new/td-git20260516/td/mtproto/TcpTransport.h        2026-06-09 
20:14:16.652756177 +0200
@@ -53,7 +53,7 @@
 class OldTransport final : public IStreamTransport {
  public:
   OldTransport() = default;
-  Result<size_t> read_next(BufferSlice *message, uint32 *quick_ack) final 
TD_WARN_UNUSED_RESULT {
+  Result<size_t> read_next(BufferSlice *message, uint32 *quick_ack, int32 
*error_code) final TD_WARN_UNUSED_RESULT {
     return impl_.read_from_stream(input_, message, quick_ack);
   }
   bool support_quick_ack() const final {
@@ -103,7 +103,7 @@
       : dc_id_(dc_id), secret_(std::move(secret)), 
impl_(secret_.use_random_padding()) {
   }
 
-  Result<size_t> read_next(BufferSlice *message, uint32 *quick_ack) final 
TD_WARN_UNUSED_RESULT;
+  Result<size_t> read_next(BufferSlice *message, uint32 *quick_ack, int32 
*error_code) final TD_WARN_UNUSED_RESULT;
 
   bool support_quick_ack() const final {
     return true;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/mtproto/Transport.cpp 
new/td-git20260516/td/mtproto/Transport.cpp
--- old/td-git20260508/td/mtproto/Transport.cpp 2026-05-08 16:53:41.156331743 
+0200
+++ new/td-git20260516/td/mtproto/Transport.cpp 2026-06-09 20:14:16.652835915 
+0200
@@ -415,7 +415,11 @@
   return as<uint64>(message.begin());
 }
 
-Result<Transport::ReadResult> Transport::read(MutableSlice message, const 
AuthKey &auth_key, PacketInfo *packet_info) {
+Result<Transport::ReadResult> Transport::read(MutableSlice message, int32 
error_code, const AuthKey &auth_key,
+                                              PacketInfo *packet_info) {
+  if (error_code >= 300) {
+    return ReadResult::make_error(-error_code);
+  }
   if (message.size() < 16) {
     if (message.size() < 4) {
       return Status::Error(PSLICE() << "Invalid MTProto message: smaller than 
4 bytes [size = " << message.size()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/mtproto/Transport.h 
new/td-git20260516/td/mtproto/Transport.h
--- old/td-git20260508/td/mtproto/Transport.h   2026-05-08 16:53:41.156331743 
+0200
+++ new/td-git20260516/td/mtproto/Transport.h   2026-06-09 20:14:16.652835915 
+0200
@@ -87,7 +87,7 @@
   // Returns size of MTProto packet.
   // If dest.size() >= size, the packet is also written into [dest].
   // If auth_key is nonempty, encryption will be used.
-  static Result<ReadResult> read(MutableSlice message, const AuthKey &auth_key,
+  static Result<ReadResult> read(MutableSlice message, int32 error_code, const 
AuthKey &auth_key,
                                  PacketInfo *packet_info) 
TD_WARN_UNUSED_RESULT;
 
   static BufferWriter write(const Storer &storer, const AuthKey &auth_key, 
PacketInfo *packet_info,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/td-git20260508/td/telegram/BusinessConnectionManager.cpp 
new/td-git20260516/td/telegram/BusinessConnectionManager.cpp
--- old/td-git20260508/td/telegram/BusinessConnectionManager.cpp        
2026-05-08 16:53:41.162908380 +0200
+++ new/td-git20260516/td/telegram/BusinessConnectionManager.cpp        
2026-06-09 20:14:16.659835636 +0200
@@ -1287,7 +1287,7 @@
       fake_message->content_ = std::move(message_contents[media_pos]);
       fake_message->init_file_upload_ids(td_);
       auto input_media = 
get_message_content_input_media(fake_message->content_.get(), td_, 
MessageSelfDestructType(),
-                                                         string(), 
td_->auth_manager_->is_bot());
+                                                         string(), 
td_->auth_manager_->is_bot(), -1);
       auto file_id = fake_message->file_upload_id_.get_file_id();
       if (input_media != nullptr || !file_id.is_valid()) {
         if (!file_id.is_valid() || 
td_->file_manager_->get_file_view(file_id).has_full_remote_location()) {
@@ -1307,8 +1307,8 @@
     return;
   }
 
-  auto input_media =
-      get_message_content_input_media(content, td_, message->ttl_, 
message->send_emoji_, td_->auth_manager_->is_bot());
+  auto input_media = get_message_content_input_media(content, td_, 
message->ttl_, message->send_emoji_,
+                                                     
td_->auth_manager_->is_bot(), -1);
   if (input_media != nullptr) {
     
td_->create_handler<SendBusinessMediaQuery>(std::move(promise))->send(std::move(message),
 std::move(input_media));
     return;
@@ -1492,7 +1492,7 @@
   }
 
   auto input_media =
-      get_message_content_input_media(message->content_.get(), td_, 
message->ttl_, message->send_emoji_, true);
+      get_message_content_input_media(message->content_.get(), td_, 
message->ttl_, message->send_emoji_, true, -1);
   if (input_media == nullptr) {
     return promise.set_error(400, "Failed to upload file");
   }
@@ -1560,7 +1560,7 @@
         create_business_message_to_send(business_connection_id, dialog_id, 
input_reply_to.clone(), disable_notification,
                                         protect_content, effect_id, nullptr, 
std::move(message_content));
     auto input_media = 
get_message_content_input_media(message->content_.get(), td_, message->ttl_,
-                                                       message->send_emoji_, 
td_->auth_manager_->is_bot());
+                                                       message->send_emoji_, 
td_->auth_manager_->is_bot(), -1);
     if (input_media != nullptr) {
       auto file_id = message->file_upload_id_.get_file_id();
       CHECK(file_id.is_valid());
@@ -1655,8 +1655,13 @@
   auto messages = td_api::make_object<td_api::businessMessages>();
   for (auto &update_ptr : updates->updates_) {
     auto update = 
telegram_api::move_object_as<telegram_api::updateBotNewBusinessMessage>(update_ptr);
-    
messages->messages_.push_back(td_->messages_manager_->get_business_message_object(
-        std::move(update->message_), std::move(update->reply_to_message_)));
+    auto message_object = 
td_->messages_manager_->get_business_message_object(std::move(update->message_),
+                                                                              
std::move(update->reply_to_message_));
+    if (message_object == nullptr) {
+      LOG(ERROR) << "Failed to create send business album message";
+      return promise.set_error(500, "Receive invalid business connection 
messages");
+    }
+    messages->messages_.push_back(std::move(message_object));
   }
   promise.set_value(std::move(messages));
 }
@@ -1692,7 +1697,7 @@
     auto upload_result = r_upload_result.move_as_ok();
     input_media.push_back(std::move(upload_result.input_media_));
   }
-  auto full_input_media = 
get_message_content_input_media(message->content_.get(), td_, 
std::move(input_media));
+  auto full_input_media = 
get_message_content_multi_input_media(message->content_.get(), td_, 
std::move(input_media));
   td_->create_handler<SendBusinessMediaQuery>(std::move(promise))
       ->send(std::move(message), std::move(full_input_media));
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/telegram/Client.cpp 
new/td-git20260516/td/telegram/Client.cpp
--- old/td-git20260508/td/telegram/Client.cpp   2026-05-08 16:53:41.164908328 
+0200
+++ new/td-git20260516/td/telegram/Client.cpp   2026-06-09 20:14:16.661835557 
+0200
@@ -21,6 +21,7 @@
 #include "td/utils/logging.h"
 #include "td/utils/misc.h"
 #include "td/utils/MpscPollableQueue.h"
+#include "td/utils/port/config.h"
 #include "td/utils/port/RwMutex.h"
 #include "td/utils/port/thread.h"
 #include "td/utils/Slice.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/telegram/ClientDotNet.cpp 
new/td-git20260516/td/telegram/ClientDotNet.cpp
--- old/td-git20260508/td/telegram/ClientDotNet.cpp     2026-05-08 
16:53:41.164908328 +0200
+++ new/td-git20260516/td/telegram/ClientDotNet.cpp     2026-06-09 
20:14:16.661835557 +0200
@@ -11,6 +11,7 @@
 #include "td/telegram/TdDotNetApi.h"
 
 #include "td/utils/port/CxCli.h"
+#include "td/utils/port/platform.h"
 
 #pragma managed(push, off)
 #include <cstdint>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/telegram/EmojiGameInfo.cpp 
new/td-git20260516/td/telegram/EmojiGameInfo.cpp
--- old/td-git20260508/td/telegram/EmojiGameInfo.cpp    2026-05-08 
16:53:41.167908250 +0200
+++ new/td-git20260516/td/telegram/EmojiGameInfo.cpp    2026-06-09 
20:14:16.664835438 +0200
@@ -52,7 +52,7 @@
   CHECK(params_.size() == 7u);
   auto suggested_amounts =
       
transform(full_split(td->option_manager_->get_option_string("ton_stakedice_stake_suggested_amounts"),
 ','),
-                to_integer<int64>);
+                [](const auto &str) { return to_integer<int64>(str); });
   return td_api::make_object<td_api::stakeDiceState>(game_hash_, prev_stake_, 
std::move(suggested_amounts),
                                                      current_streak_,
                                                      
vector<int32>(params_.begin(), params_.begin() + 6), params_[6]);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/telegram/ForumTopic.cpp 
new/td-git20260516/td/telegram/ForumTopic.cpp
--- old/td-git20260508/td/telegram/ForumTopic.cpp       2026-05-08 
16:53:41.168908223 +0200
+++ new/td-git20260516/td/telegram/ForumTopic.cpp       2026-06-09 
20:14:16.664835438 +0200
@@ -97,6 +97,7 @@
     new_unread_poll_vote_count = 0;
   }
   if (unread_poll_vote_count_ == new_unread_poll_vote_count) {
+    LOG(INFO) << "Number of unread poll votes is still " << 
unread_poll_vote_count_;
     return false;
   }
   unread_poll_vote_count_ = new_unread_poll_vote_count;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/telegram/ForumTopicManager.cpp 
new/td-git20260516/td/telegram/ForumTopicManager.cpp
--- old/td-git20260508/td/telegram/ForumTopicManager.cpp        2026-05-08 
16:53:41.168908223 +0200
+++ new/td-git20260516/td/telegram/ForumTopicManager.cpp        2026-06-09 
20:14:16.665835398 +0200
@@ -1451,10 +1451,12 @@
             << forum_topic_id << " in " << dialog_id;
   auto dialog_topics = get_dialog_topics(dialog_id);
   if (dialog_topics == nullptr) {
+    LOG(INFO) << "Topic list of " << dialog_id << " not found";
     return;
   }
   auto topic = get_topic(dialog_topics, forum_topic_id);
   if (topic == nullptr || topic->topic_ == nullptr) {
+    LOG(INFO) << "Topic " << forum_topic_id << " not found";
     return;
   }
   if (topic->topic_->update_unread_poll_vote_count(count, is_relative)) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/telegram/InlineMessageManager.cpp 
new/td-git20260516/td/telegram/InlineMessageManager.cpp
--- old/td-git20260508/td/telegram/InlineMessageManager.cpp     2026-05-08 
16:53:41.170908171 +0200
+++ new/td-git20260516/td/telegram/InlineMessageManager.cpp     2026-06-09 
20:14:16.667835318 +0200
@@ -299,7 +299,7 @@
   TRY_RESULT_PROMISE(promise, input_bot_inline_message_id, 
get_input_bot_inline_message_id(inline_message_id));
 
   auto input_media =
-      get_message_content_input_media(content.content.get(), td_, 
MessageSelfDestructType(), string(), true);
+      get_message_content_input_media(content.content.get(), td_, 
MessageSelfDestructType(), string(), true, -1);
   if (input_media == nullptr) {
     return promise.set_error(400, "Invalid message content specified");
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/telegram/MessageContent.cpp 
new/td-git20260516/td/telegram/MessageContent.cpp
--- old/td-git20260508/td/telegram/MessageContent.cpp   2026-05-08 
16:53:41.172908119 +0200
+++ new/td-git20260516/td/telegram/MessageContent.cpp   2026-06-09 
20:14:16.669835239 +0200
@@ -5486,7 +5486,7 @@
         }
         input_media.push_back(std::move(media));
       }
-      return get_message_content_input_media(content, td, 
std::move(input_media));
+      return get_message_content_multi_input_media(content, td, 
std::move(input_media));
     }
     case MessageContentType::Photo: {
       const auto *m = static_cast<const MessagePhoto *>(content);
@@ -5630,7 +5630,7 @@
   return nullptr;
 }
 
-telegram_api::object_ptr<telegram_api::InputMedia> 
get_message_content_input_media(
+telegram_api::object_ptr<telegram_api::InputMedia> 
get_message_content_multi_input_media(
     const MessageContent *content, Td *td, 
vector<telegram_api::object_ptr<telegram_api::InputMedia>> &&input_media) {
   CHECK(content != nullptr);
   switch (content->get_type()) {
@@ -9962,18 +9962,12 @@
       case telegram_api::messageActionChatMigrateTo::ID:
       case telegram_api::messageActionChannelCreate::ID:
       case telegram_api::messageActionChannelMigrateFrom::ID:
-      case telegram_api::messageActionBotAllowed::ID:
-      case telegram_api::messageActionSecureValuesSent::ID:
       case telegram_api::messageActionSecureValuesSentMe::ID:
       case telegram_api::messageActionGroupCall::ID:
       case telegram_api::messageActionInviteToGroupCall::ID:
       case telegram_api::messageActionGroupCallScheduled::ID:
       case telegram_api::messageActionChatJoinedByRequest::ID:
-      case telegram_api::messageActionWebViewDataSent::ID:
       case telegram_api::messageActionWebViewDataSentMe::ID:
-      case telegram_api::messageActionTopicCreate::ID:
-      case telegram_api::messageActionTopicEdit::ID:
-      case telegram_api::messageActionRequestedPeer::ID:
       case telegram_api::messageActionGiveawayLaunch::ID:
       case telegram_api::messageActionGiveawayResults::ID:
       case telegram_api::messageActionBoostApply::ID:
@@ -9983,7 +9977,6 @@
       case telegram_api::messageActionSuggestedPostRefund::ID:
       case telegram_api::messageActionNewCreatorPending::ID:
       case telegram_api::messageActionChangeCreator::ID:
-      case telegram_api::messageActionManagedBotCreated::ID:
         LOG(ERROR) << "Receive business " << to_string(action_ptr);
         break;
       case telegram_api::messageActionHistoryClear::ID:
@@ -10022,6 +10015,23 @@
       case telegram_api::messageActionPollDeleteAnswer::ID:
         // ok
         break;
+      case telegram_api::messageActionBotAllowed::ID:
+      case telegram_api::messageActionSecureValuesSent::ID:
+      case telegram_api::messageActionWebViewDataSent::ID:
+      case telegram_api::messageActionTopicCreate::ID:
+      case telegram_api::messageActionTopicEdit::ID:
+      case telegram_api::messageActionRequestedPeer::ID:
+      case telegram_api::messageActionManagedBotCreated::ID:
+        // ok in chats with bots
+        if (owner_dialog_id.get_type() == DialogType::User) {
+          auto user_id = owner_dialog_id.get_user_id();
+          if (!td->user_manager_->is_user_bot(user_id) && 
!td->user_manager_->is_user_deleted(user_id)) {
+            LOG(ERROR) << "Receive in " << owner_dialog_id << " business " << 
to_string(action_ptr);
+          }
+        } else {
+          LOG(ERROR) << "Receive in " << owner_dialog_id << " business " << 
to_string(action_ptr);
+        }
+        break;
       default:
         UNREACHABLE();
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/telegram/MessageContent.h 
new/td-git20260516/td/telegram/MessageContent.h
--- old/td-git20260508/td/telegram/MessageContent.h     2026-05-08 
16:53:41.172908119 +0200
+++ new/td-git20260516/td/telegram/MessageContent.h     2026-06-09 
20:14:16.669835239 +0200
@@ -138,7 +138,7 @@
     const MessageContent *content, Td *td, 
telegram_api::object_ptr<telegram_api::InputEncryptedFile> input_file,
     BufferSlice thumbnail, int32 layer);
 
-telegram_api::object_ptr<telegram_api::InputMedia> 
get_message_content_input_media(
+telegram_api::object_ptr<telegram_api::InputMedia> 
get_message_content_multi_input_media(
     const MessageContent *content, Td *td, 
vector<telegram_api::object_ptr<telegram_api::InputMedia>> &&input_media);
 
 telegram_api::object_ptr<telegram_api::InputMedia> 
get_message_content_input_media(
@@ -150,7 +150,7 @@
 telegram_api::object_ptr<telegram_api::InputMedia> 
get_message_content_input_media(const MessageContent *content,
                                                                                
    Td *td, MessageSelfDestructType ttl,
                                                                                
    const string &emoji, bool force,
-                                                                               
    int32 media_pos = -1);
+                                                                               
    int32 media_pos);
 
 telegram_api::object_ptr<telegram_api::InputMedia> 
get_message_content_input_media_web_page(
     const Td *td, const MessageContent *content);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/telegram/MessageQueryManager.cpp 
new/td-git20260516/td/telegram/MessageQueryManager.cpp
--- old/td-git20260508/td/telegram/MessageQueryManager.cpp      2026-05-08 
16:53:41.174908067 +0200
+++ new/td-git20260516/td/telegram/MessageQueryManager.cpp      2026-06-09 
20:14:16.671835160 +0200
@@ -1756,7 +1756,10 @@
     auto messages_info = get_messages_info(td_, DialogId(), 
result_ptr.move_as_ok(), "GetPersonalChannelHistoryQuery");
     auto messages = td_api::make_object<td_api::messages>();
     for (auto &message : messages_info.messages) {
-      
messages->messages_.push_back(td_->messages_manager_->get_guest_message_object(std::move(message),
 false));
+      auto message_object = 
td_->messages_manager_->get_guest_message_object(std::move(message), false);
+      if (message_object != nullptr) {
+        messages->messages_.push_back(std::move(message_object));
+      }
     }
     promise_.set_value(std::move(messages));
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/telegram/MessagesManager.cpp 
new/td-git20260516/td/telegram/MessagesManager.cpp
--- old/td-git20260508/td/telegram/MessagesManager.cpp  2026-05-08 
16:53:41.176908014 +0200
+++ new/td-git20260516/td/telegram/MessagesManager.cpp  2026-06-09 
20:14:16.673835080 +0200
@@ -8955,7 +8955,7 @@
     // remove_message_notification_id(d, m, true, false);  // must be called 
before unread_reactions are cleared
     m->reactions->unread_reactions_.clear();
 
-    on_unread_message_reaction_removed(d, m, nullptr);
+    on_unread_message_reaction_removed(d, m, 
"read_all_local_dialog_reactions");
     on_message_changed(d, m, true, "read_all_local_dialog_reactions");
   }
 }
@@ -10487,7 +10487,8 @@
         continue;
       }
 
-      auto counts = transform(full_split(Slice(it.second)), 
to_integer_safe<int32>);
+      auto counts =
+          transform(full_split(Slice(it.second)), [](const auto &str) { return 
to_integer_safe<int32>(str); });
       if ((counts.size() != 4 && counts.size() != 6) || any_of(counts, 
[](const auto &c) { return c.is_error(); })) {
         LOG(ERROR) << "Can't parse " << it.second;
       } else {
@@ -21802,7 +21803,7 @@
       CHECK(static_cast<size_t>(media_pos) < file_upload_ids.size());
     }
     auto input_media = get_message_content_input_media(content, td_, m->ttl, 
m->send_emoji,
-                                                       
td_->auth_manager_->is_bot() && bad_parts.empty());
+                                                       
td_->auth_manager_->is_bot() && bad_parts.empty(), media_pos);
     auto can_have_multiple_files = 
can_message_content_have_multiple_files(content_type);
     if (input_media == nullptr || media_pos >= 0 || !bad_parts.empty() || 
can_have_multiple_files) {
       if (content_type == MessageContentType::Game || content_type == 
MessageContentType::Story) {
@@ -22289,7 +22290,7 @@
     }
 
     const FormattedText *caption = 
get_message_content_caption(m->content.get());
-    auto input_media = get_message_content_input_media(m->content.get(), td_, 
m->ttl, m->send_emoji, true);
+    auto input_media = get_message_content_input_media(m->content.get(), td_, 
m->ttl, m->send_emoji, true, -1);
     if (input_media == nullptr) {
       // TODO return CHECK
       auto file_upload_id = get_message_send_file_upload_id(dialog_id, m, -1);
@@ -22387,7 +22388,7 @@
     return;
   }
 
-  auto input_media = get_message_content_input_media(m->content.get(), td_, 
m->ttl, m->send_emoji, true);
+  auto input_media = get_message_content_input_media(m->content.get(), td_, 
m->ttl, m->send_emoji, true, -1);
   CHECK(input_media != nullptr);
   pending_internal_media_sends_.erase(it);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/telegram/NotificationManager.cpp 
new/td-git20260516/td/telegram/NotificationManager.cpp
--- old/td-git20260508/td/telegram/NotificationManager.cpp      2026-05-08 
16:53:41.177907989 +0200
+++ new/td-git20260516/td/telegram/NotificationManager.cpp      2026-06-09 
20:14:16.674835040 +0200
@@ -332,7 +332,8 @@
     return;
   }
 
-  auto notification_announcement_ids_string = implode(transform(stored_ids, 
to_string<int32>));
+  auto notification_announcement_ids_string =
+      implode(transform(stored_ids, [](int32 stored_id) { return 
to_string(stored_id); }));
   G()->td_db()->get_binlog_pmc()->set("notification_announcement_ids", 
notification_announcement_ids_string);
 }
 
@@ -3997,7 +3998,7 @@
   packet_info.is_creator = true;
   packet_info.check_mod4 = false;
 
-  TRY_RESULT(result, mtproto::Transport::read(payload, auth_key, 
&packet_info));
+  TRY_RESULT(result, mtproto::Transport::read(payload, 0, auth_key, 
&packet_info));
   if (result.type() != mtproto::Transport::ReadResult::Packet) {
     return Status::Error(400, "Wrong packet type");
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/telegram/OptionManager.cpp 
new/td-git20260516/td/telegram/OptionManager.cpp
--- old/td-git20260508/td/telegram/OptionManager.cpp    2026-05-08 
16:53:41.177907989 +0200
+++ new/td-git20260516/td/telegram/OptionManager.cpp    2026-06-09 
20:14:16.674835040 +0200
@@ -562,7 +562,7 @@
   }
   if (name == "whitelisted_bots") {
     return td_api::make_object<td_api::updateTrustedMiniAppBots>(
-        transform(full_split(get_option_string(name), ','), 
to_integer<int64>));
+        transform(full_split(get_option_string(name), ','), [](const auto 
&str) { return to_integer<int64>(str); }));
   }
   return nullptr;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/telegram/Outline.cpp 
new/td-git20260516/td/telegram/Outline.cpp
--- old/td-git20260508/td/telegram/Outline.cpp  2026-05-08 16:53:41.177907989 
+0200
+++ new/td-git20260516/td/telegram/Outline.cpp  2026-06-09 20:14:16.674835040 
+0200
@@ -349,7 +349,7 @@
       skip_commas();
       if (path[pos] == '\0') {
         LOG(ERROR) << "Receive unclosed path " << path << " from " << source;
-        return nullptr;
+        return string();
       }
       if (is_alpha(path[pos])) {
         command = path[pos++];
@@ -437,7 +437,7 @@
         default:
           LOG(ERROR) << "Receive invalid command " << command << " at pos " << 
pos << " from " << source << ": "
                      << path;
-          return nullptr;
+          return string();
       }
     }
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/telegram/PollManager.hpp 
new/td-git20260516/td/telegram/PollManager.hpp
--- old/td-git20260508/td/telegram/PollManager.hpp      2026-05-08 
16:53:41.179907937 +0200
+++ new/td-git20260516/td/telegram/PollManager.hpp      2026-06-09 
20:14:16.676834961 +0200
@@ -360,11 +360,6 @@
           correct_option_ids.push_back(correct_option_id);
         }
       }
-      auto status = check_quiz_correct_option_ids(correct_option_ids, 
option_texts.size(), false);
-      if (status.is_error()) {
-        parser.set_error(status.message().str());
-        return PollId();
-      }
     }
     if (has_open_period) {
       parse(open_period, parser);
@@ -401,6 +396,13 @@
         options.emplace_back(FormattedText{std::move(option_texts[i]), 
std::move(option_entities[i])}, nullptr);
       }
     }
+    if (is_quiz) {
+      auto status = check_quiz_correct_option_ids(correct_option_ids, 
options.size(), false);
+      if (status.is_error()) {
+        parser.set_error(status.message().str());
+        return PollId();
+      }
+    }
 
     if (parser.get_error() != nullptr) {
       return PollId();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/telegram/QuickReplyManager.cpp 
new/td-git20260516/td/telegram/QuickReplyManager.cpp
--- old/td-git20260508/td/telegram/QuickReplyManager.cpp        2026-05-08 
16:53:41.180907910 +0200
+++ new/td-git20260516/td/telegram/QuickReplyManager.cpp        2026-06-09 
20:14:16.677834921 +0200
@@ -2294,7 +2294,7 @@
   }
   auto file_upload_id = is_edit ? m->edited_file_upload_id : m->file_upload_id;
   LOG(DEBUG) << "Need to send " << file_upload_id;
-  auto input_media = get_message_content_input_media(content, td_, {}, 
m->send_emoji, false);
+  auto input_media = get_message_content_input_media(content, td_, {}, 
m->send_emoji, false, -1);
   if (input_media == nullptr) {
     if (content_type == MessageContentType::Game || content_type == 
MessageContentType::Story) {
       return;
@@ -2492,7 +2492,7 @@
 
   save_quick_reply_shortcuts();
 
-  auto input_media = get_message_content_input_media(content.get(), td_, {}, 
m->send_emoji, true);
+  auto input_media = get_message_content_input_media(content.get(), td_, {}, 
m->send_emoji, true, -1);
   Status result;
   if (input_media == nullptr) {
     result = Status::Error(400, "Failed to upload file");
@@ -2592,7 +2592,7 @@
               << " and is_finished = " << 
static_cast<bool>(request.is_finished[i]);
 
     const FormattedText *caption = 
get_message_content_caption(m->content.get());
-    auto input_media = get_message_content_input_media(m->content.get(), td_, 
{}, m->send_emoji, true);
+    auto input_media = get_message_content_input_media(m->content.get(), td_, 
{}, m->send_emoji, true, -1);
     CHECK(input_media != nullptr);
     auto entities = get_input_message_entities(td_->user_manager_.get(), 
caption, "do_send_message_group");
     int32 input_single_media_flags = 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/telegram/SecretChatActor.cpp 
new/td-git20260516/td/telegram/SecretChatActor.cpp
--- old/td-git20260508/td/telegram/SecretChatActor.cpp  2026-05-08 
16:53:41.182907858 +0200
+++ new/td-git20260516/td/telegram/SecretChatActor.cpp  2026-06-09 
20:14:16.679834842 +0200
@@ -788,7 +788,7 @@
     mtproto_version = versions[i];
     packet_info.version = mtproto_version;
     packet_info.is_creator = auth_state_.x == 0;
-    r_read_result = mtproto::Transport::read(data, *auth_key, &packet_info);
+    r_read_result = mtproto::Transport::read(data, 0, *auth_key, &packet_info);
     if (i + 1 != versions.size() && r_read_result.is_error()) {
       if (config_state_.his_layer >= 
static_cast<int32>(SecretChatLayer::Mtproto2)) {
         LOG(WARNING) << tag("mtproto", mtproto_version) << " decryption failed 
" << r_read_result.error();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/telegram/StarGiftManager.cpp 
new/td-git20260516/td/telegram/StarGiftManager.cpp
--- old/td-git20260508/td/telegram/StarGiftManager.cpp  2026-05-08 
16:53:41.184907806 +0200
+++ new/td-git20260516/td/telegram/StarGiftManager.cpp  2026-06-09 
20:14:16.681834762 +0200
@@ -1830,7 +1830,7 @@
         
transform(full_split(td_->option_manager_->get_option_string("stargifts_craft_attribute_permilles",
                                                                      
"100,80,400,70,350,700,60,300,600,1000"),
                              ','),
-                  to_integer<int32>);
+                  [](const auto &str) { return to_integer<int32>(str); });
     CHECK(attribute_persistence_per_mille.size() == 10u);
     vector<td_api::object_ptr<td_api::attributeCraftPersistenceProbability>> 
probabilities;
     for (size_t num = 1; num <= 4; num++) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/telegram/cli.cpp 
new/td-git20260516/td/telegram/cli.cpp
--- old/td-git20260508/td/telegram/cli.cpp      2026-05-08 16:53:41.190907649 
+0200
+++ new/td-git20260516/td/telegram/cli.cpp      2026-06-09 20:14:16.686834563 
+0200
@@ -964,7 +964,7 @@
 
   template <class T>
   static vector<T> to_integers(Slice integers) {
-    return transform(transform(autosplit(integers), trim<Slice>), 
to_integer<T>);
+    return transform(autosplit(integers), [](const auto &slice) { return 
to_integer<T>(trim(slice)); });
   }
 
   static void get_args(string &args, string &arg) {
@@ -8388,7 +8388,7 @@
       ReactionNotificationSource poll_votes;
       int64 sound_id;
       bool show_preview;
-      get_args(args, message_reactions, story_reactions, sound_id, 
show_preview);
+      get_args(args, message_reactions, story_reactions, poll_votes, sound_id, 
show_preview);
       
send_request(td_api::make_object<td_api::setReactionNotificationSettings>(
           
td_api::make_object<td_api::reactionNotificationSettings>(message_reactions, 
story_reactions, poll_votes,
                                                                     sound_id, 
show_preview)));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/td-git20260508/td/telegram/net/NetQueryDispatcher.cpp 
new/td-git20260516/td/telegram/net/NetQueryDispatcher.cpp
--- old/td-git20260508/td/telegram/net/NetQueryDispatcher.cpp   2026-05-08 
16:53:41.193539742 +0200
+++ new/td-git20260516/td/telegram/net/NetQueryDispatcher.cpp   2026-06-09 
20:14:16.690533941 +0200
@@ -26,6 +26,7 @@
 #include "td/utils/common.h"
 #include "td/utils/logging.h"
 #include "td/utils/misc.h"
+#include "td/utils/port/config.h"
 #include "td/utils/port/sleep.h"
 #include "td/utils/Slice.h"
 #include "td/utils/SliceBuilder.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/td/tl/tl_dotnet_object.h 
new/td-git20260516/td/tl/tl_dotnet_object.h
--- old/td-git20260508/td/tl/tl_dotnet_object.h 2026-05-08 16:53:41.194908917 
+0200
+++ new/td-git20260516/td/tl/tl_dotnet_object.h 2026-06-09 20:14:16.691924134 
+0200
@@ -7,6 +7,7 @@
 #pragma once
 
 #include "td/utils/port/CxCli.h"
+#include "td/utils/port/platform.h"
 
 #pragma managed(push, off)
 #include "td/telegram/td_api.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/td-git20260508/tdactor/td/actor/ConcurrentScheduler.h 
new/td-git20260516/tdactor/td/actor/ConcurrentScheduler.h
--- old/td-git20260508/tdactor/td/actor/ConcurrentScheduler.h   2026-05-08 
16:53:41.195130546 +0200
+++ new/td-git20260516/tdactor/td/actor/ConcurrentScheduler.h   2026-06-09 
20:14:16.692179105 +0200
@@ -9,6 +9,7 @@
 #include "td/actor/actor.h"
 
 #include "td/utils/common.h"
+#include "td/utils/port/config.h"
 #include "td/utils/port/thread.h"
 #include "td/utils/Slice.h"
 #include "td/utils/Time.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdactor/td/actor/impl/Scheduler.h 
new/td-git20260516/tdactor/td/actor/impl/Scheduler.h
--- old/td-git20260508/tdactor/td/actor/impl/Scheduler.h        2026-05-08 
16:53:41.195356242 +0200
+++ new/td-git20260516/tdactor/td/actor/impl/Scheduler.h        2026-06-09 
20:14:16.692401675 +0200
@@ -13,6 +13,7 @@
 #include "td/utils/Heap.h"
 #include "td/utils/logging.h"
 #include "td/utils/ObjectPool.h"
+#include "td/utils/port/config.h"
 #include "td/utils/port/detail/PollableFd.h"
 #include "td/utils/port/PollFlags.h"
 #include "td/utils/Promise.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdactor/test/actors_simple.cpp 
new/td-git20260516/tdactor/test/actors_simple.cpp
--- old/td-git20260508/tdactor/test/actors_simple.cpp   2026-05-08 
16:53:41.195657357 +0200
+++ new/td-git20260516/tdactor/test/actors_simple.cpp   2026-06-09 
20:14:16.692703913 +0200
@@ -14,6 +14,7 @@
 #include "td/utils/logging.h"
 #include "td/utils/MpscPollableQueue.h"
 #include "td/utils/Observer.h"
+#include "td/utils/port/config.h"
 #include "td/utils/port/FileFd.h"
 #include "td/utils/port/path.h"
 #include "td/utils/port/thread.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tddb/td/db/detail/RawSqliteDb.h 
new/td-git20260516/tddb/td/db/detail/RawSqliteDb.h
--- old/td-git20260508/tddb/td/db/detail/RawSqliteDb.h  2026-05-08 
16:53:41.196518164 +0200
+++ new/td-git20260516/tddb/td/db/detail/RawSqliteDb.h  2026-06-09 
20:14:16.693534625 +0200
@@ -6,6 +6,7 @@
 //
 #pragma once
 
+#include "td/utils/common.h"
 #include "td/utils/optional.h"
 #include "td/utils/Slice.h"
 #include "td/utils/SliceBuilder.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdnet/td/net/DarwinHttp.h 
new/td-git20260516/tdnet/td/net/DarwinHttp.h
--- old/td-git20260508/tdnet/td/net/DarwinHttp.h        2026-05-08 
16:53:41.197905112 +0200
+++ new/td-git20260516/tdnet/td/net/DarwinHttp.h        2026-06-09 
20:14:16.694899151 +0200
@@ -7,15 +7,18 @@
 #pragma once
 
 #include "td/utils/buffer.h"
+#include "td/utils/common.h"
 #include "td/utils/Promise.h"
 #include "td/utils/Slice.h"
 
+#include <utility>
+
 namespace td {
 
 class DarwinHttp {
  public:
-  static void get(CSlice url, Promise<BufferSlice> promise);
-  static void post(CSlice url, Slice data, Promise<BufferSlice> promise);
+  static void get(CSlice url, Promise<std::pair<int32, BufferSlice>> promise);
+  static void post(CSlice url, Slice data, Promise<std::pair<int32, 
BufferSlice>> promise);
 };
 
 }  // namespace td
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdnet/td/net/DarwinHttp.mm 
new/td-git20260516/tdnet/td/net/DarwinHttp.mm
--- old/td-git20260508/tdnet/td/net/DarwinHttp.mm       2026-05-08 
16:53:41.197932853 +0200
+++ new/td-git20260516/tdnet/td/net/DarwinHttp.mm       2026-06-09 
20:14:16.694930208 +0200
@@ -52,7 +52,7 @@
   return request;
 }
 
-void http_send(NSURLRequest *request, Promise<BufferSlice> promise) {
+void http_send(NSURLRequest *request, Promise<std::pair<int32, BufferSlice>> 
promise) {
   __block auto callback = std::move(promise);
   NSURLSessionDataTask *dataTask =
     [getSession()
@@ -60,7 +60,12 @@
       completionHandler:
         ^(NSData *data, NSURLResponse *response, NSError *error) {
           if (error == nil) {
-            callback.set_value(BufferSlice(Slice((const char *)([data bytes]), 
[data length])));
+            int32 statusCode = 0;
+            if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
+              NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
+              statusCode = static_cast<int32>(httpResponse.statusCode);
+            }
+            callback.set_value(std::make_pair(statusCode, 
BufferSlice(Slice((const char *)([data bytes]), [data length]))));
           } else {
             callback.set_error(static_cast<int32>([error code]), "HTTP request 
failed");
           }
@@ -69,11 +74,11 @@
 }
 }  // namespace
 
-void DarwinHttp::get(CSlice url, Promise<BufferSlice> promise) {
+void DarwinHttp::get(CSlice url, Promise<std::pair<int32, BufferSlice>> 
promise) {
   return http_send(http_get(url), std::move(promise));
 }
 
-void DarwinHttp::post(CSlice url, Slice data, Promise<BufferSlice> promise) {
+void DarwinHttp::post(CSlice url, Slice data, Promise<std::pair<int32, 
BufferSlice>> promise) {
   return http_send(http_post(url, data), std::move(promise));
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdnet/td/net/SslCtx.cpp 
new/td-git20260516/tdnet/td/net/SslCtx.cpp
--- old/td-git20260508/tdnet/td/net/SslCtx.cpp  2026-05-08 16:53:41.197932853 
+0200
+++ new/td-git20260516/tdnet/td/net/SslCtx.cpp  2026-06-09 20:14:16.694930208 
+0200
@@ -11,6 +11,7 @@
 #include "td/utils/FlatHashMap.h"
 #include "td/utils/logging.h"
 #include "td/utils/misc.h"
+#include "td/utils/port/config.h"
 #include "td/utils/port/path.h"
 #include "td/utils/port/wstring_convert.h"
 #include "td/utils/ScopeGuard.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/BufferedUdp.h 
new/td-git20260516/tdutils/td/utils/BufferedUdp.h
--- old/td-git20260508/tdutils/td/utils/BufferedUdp.h   2026-05-08 
16:53:41.199193678 +0200
+++ new/td-git20260516/tdutils/td/utils/BufferedUdp.h   2026-06-09 
20:14:16.696246707 +0200
@@ -10,6 +10,7 @@
 #include "td/utils/common.h"
 #include "td/utils/logging.h"
 #include "td/utils/optional.h"
+#include "td/utils/port/config.h"
 #include "td/utils/port/detail/PollableFd.h"
 #include "td/utils/port/thread_local.h"
 #include "td/utils/port/UdpSocketFd.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/MpmcQueue.h 
new/td-git20260516/tdutils/td/utils/MpmcQueue.h
--- old/td-git20260508/tdutils/td/utils/MpmcQueue.h     2026-05-08 
16:53:41.199907414 +0200
+++ new/td-git20260516/tdutils/td/utils/MpmcQueue.h     2026-06-09 
20:14:16.696246707 +0200
@@ -11,6 +11,7 @@
 // To close queue, one should send as much sentinel elements as there are 
readers.
 // Once there are no readers and writers, one may easily destroy queue
 
+#include "td/utils/common.h"
 #include "td/utils/format.h"
 #include "td/utils/HazardPointers.h"
 #include "td/utils/logging.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/MpscPollableQueue.h 
new/td-git20260516/tdutils/td/utils/MpscPollableQueue.h
--- old/td-git20260508/tdutils/td/utils/MpscPollableQueue.h     2026-05-08 
16:53:41.199907414 +0200
+++ new/td-git20260516/tdutils/td/utils/MpscPollableQueue.h     2026-06-09 
20:14:16.696246707 +0200
@@ -8,6 +8,7 @@
 
 #include "td/utils/common.h"
 #include "td/utils/misc.h"
+#include "td/utils/port/config.h"
 #include "td/utils/port/EventFd.h"
 
 #if !TD_EVENTFD_UNSUPPORTED
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/OptionParser.cpp 
new/td-git20260516/tdutils/td/utils/OptionParser.cpp
--- old/td-git20260508/tdutils/td/utils/OptionParser.cpp        2026-05-08 
16:53:41.199907414 +0200
+++ new/td-git20260516/tdutils/td/utils/OptionParser.cpp        2026-06-09 
20:14:16.696834166 +0200
@@ -9,6 +9,7 @@
 #include "td/utils/FlatHashMap.h"
 #include "td/utils/logging.h"
 #include "td/utils/PathView.h"
+#include "td/utils/port/config.h"
 #include "td/utils/SliceBuilder.h"
 
 #if TD_PORT_WINDOWS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/Status.h 
new/td-git20260516/tdutils/td/utils/Status.h
--- old/td-git20260508/tdutils/td/utils/Status.h        2026-05-08 
16:53:41.199907414 +0200
+++ new/td-git20260516/tdutils/td/utils/Status.h        2026-06-09 
20:14:16.696834166 +0200
@@ -8,6 +8,7 @@
 
 #include "td/utils/common.h"
 #include "td/utils/logging.h"
+#include "td/utils/port/config.h"
 #include "td/utils/ScopeGuard.h"
 #include "td/utils/Slice.h"
 #include "td/utils/StackAllocator.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/StorerBase.h 
new/td-git20260516/tdutils/td/utils/StorerBase.h
--- old/td-git20260508/tdutils/td/utils/StorerBase.h    2026-05-08 
16:53:41.199907414 +0200
+++ new/td-git20260516/tdutils/td/utils/StorerBase.h    2026-06-09 
20:14:16.696834166 +0200
@@ -6,6 +6,7 @@
 //
 #pragma once
 
+#include "td/utils/common.h"
 #include "td/utils/int_types.h"
 
 namespace td {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/benchmark.h 
new/td-git20260516/tdutils/td/utils/benchmark.h
--- old/td-git20260508/tdutils/td/utils/benchmark.h     2026-05-08 
16:53:41.200907388 +0200
+++ new/td-git20260516/tdutils/td/utils/benchmark.h     2026-06-09 
20:14:16.697834127 +0200
@@ -6,6 +6,7 @@
 //
 #pragma once
 
+#include "td/utils/common.h"
 #include "td/utils/format.h"
 #include "td/utils/logging.h"
 #include "td/utils/port/Clocks.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/crypto.cpp 
new/td-git20260516/tdutils/td/utils/crypto.cpp
--- old/td-git20260508/tdutils/td/utils/crypto.cpp      2026-05-08 
16:53:41.200907388 +0200
+++ new/td-git20260516/tdutils/td/utils/crypto.cpp      2026-06-09 
20:14:16.697834127 +0200
@@ -13,6 +13,7 @@
 #include "td/utils/Destructor.h"
 #include "td/utils/logging.h"
 #include "td/utils/misc.h"
+#include "td/utils/port/config.h"
 #include "td/utils/port/RwMutex.h"
 #include "td/utils/port/thread_local.h"
 #include "td/utils/Random.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/Clocks.cpp 
new/td-git20260516/tdutils/td/utils/port/Clocks.cpp
--- old/td-git20260508/tdutils/td/utils/port/Clocks.cpp 2026-05-08 
16:53:41.201907362 +0200
+++ new/td-git20260516/tdutils/td/utils/port/Clocks.cpp 2026-06-09 
20:14:16.697834127 +0200
@@ -6,7 +6,9 @@
 //
 #include "td/utils/port/Clocks.h"
 
-#include "td/utils/port/platform.h"
+#include "td/utils/port/config.h"
+#include "td/utils/Slice.h"
+#include "td/utils/SliceBuilder.h"
 
 #include <chrono>
 #include <ctime>
@@ -57,6 +59,59 @@
   return 
static_cast<double>(std::chrono::duration_cast<std::chrono::nanoseconds>(duration).count())
 * 1e-9;
 }
 
+string Clocks::get_debug() {
+  string result;
+#if TD_PORT_POSIX
+  auto add_clock = [&](Slice clock_name, clockid_t clock_id) {
+    struct timespec spec;
+    if (clock_gettime(clock_id, &spec) == 0) {
+      result += PSTRING() << '[' << clock_name << " = "
+                          << static_cast<double>(spec.tv_nsec) * 1e-9 + 
static_cast<double>(spec.tv_sec) << ']';
+    } else {
+      result += PSTRING() << '[' << clock_name << " failed]";
+    }
+  };
+
+#ifdef CLOCK_REALTIME
+  add_clock("REALTIME", CLOCK_REALTIME);
+#endif
+#ifdef CLOCK_REALTIME_COARSE
+  add_clock("REALTIME_COARSE", CLOCK_REALTIME_COARSE);
+#endif
+#ifdef CLOCK_TAI
+  add_clock("TAI", CLOCK_TAI);
+#endif
+#ifdef CLOCK_MONOTONIC
+  add_clock("MONOTONIC", CLOCK_MONOTONIC);
+#endif
+#ifdef CLOCK_MONOTONIC_COARSE
+  add_clock("MONOTONIC_COARSE", CLOCK_MONOTONIC_COARSE);
+#endif
+#ifdef CLOCK_MONOTONIC_RAW
+  add_clock("MONOTONIC_RAW", CLOCK_MONOTONIC_RAW);
+#endif
+#ifdef CLOCK_BOOTTIME
+  add_clock("BOOTTIME", CLOCK_BOOTTIME);
+#endif
+#ifdef CLOCK_BOOTTIME_ALARM
+  add_clock("BOOTTIME_ALARM", CLOCK_BOOTTIME_ALARM);
+#endif
+#ifdef CLOCK_PROCESS_CPUTIME_ID
+  add_clock("PROCESS_CPUTIME_ID", CLOCK_PROCESS_CPUTIME_ID);
+#endif
+#ifdef CLOCK_THREAD_CPUTIME_ID
+  add_clock("THREAD_CPUTIME_ID", CLOCK_THREAD_CPUTIME_ID);
+#endif
+#endif
+
+  auto duration = std::chrono::steady_clock::now().time_since_epoch();
+  result +=
+      PSTRING() << "[chrono::steady = "
+                << 
static_cast<double>(std::chrono::duration_cast<std::chrono::nanoseconds>(duration).count())
 * 1e-9
+                << ']';
+  return result;
+}
+
 int Clocks::tz_offset() {
   // not thread-safe on POSIX, so calculate the offset only once
   static int offset = [] {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/Clocks.h 
new/td-git20260516/tdutils/td/utils/port/Clocks.h
--- old/td-git20260508/tdutils/td/utils/port/Clocks.h   2026-05-08 
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/Clocks.h   2026-06-09 
20:14:16.699464281 +0200
@@ -6,6 +6,8 @@
 //
 #pragma once
 
+#include "td/utils/common.h"
+
 namespace td {
 
 struct Clocks {
@@ -13,6 +15,8 @@
 
   static double system();
 
+  static string get_debug();
+
   static int tz_offset();
 };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/CxCli.h 
new/td-git20260516/tdutils/td/utils/port/CxCli.h
--- old/td-git20260508/tdutils/td/utils/port/CxCli.h    2026-05-08 
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/CxCli.h    2026-06-09 
20:14:16.699464281 +0200
@@ -7,7 +7,7 @@
 #pragma once
 
 #pragma managed(push, off)
-#include "td/utils/port/config.h"
+#include "td/utils/port/platform.h"
 #pragma managed(pop)
 
 #include "td/utils/common.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/FileFd.cpp 
new/td-git20260516/tdutils/td/utils/port/FileFd.cpp
--- old/td-git20260508/tdutils/td/utils/port/FileFd.cpp 2026-05-08 
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/FileFd.cpp 2026-06-09 
20:14:16.699464281 +0200
@@ -17,6 +17,7 @@
 #include "td/utils/FlatHashSet.h"
 #include "td/utils/logging.h"
 #include "td/utils/misc.h"
+#include "td/utils/port/config.h"
 #include "td/utils/port/detail/PollableFd.h"
 #include "td/utils/port/detail/skip_eintr.h"
 #include "td/utils/port/PollFlags.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/FileFd.h 
new/td-git20260516/tdutils/td/utils/port/FileFd.h
--- old/td-git20260508/tdutils/td/utils/port/FileFd.h   2026-05-08 
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/FileFd.h   2026-06-09 
20:14:16.699464281 +0200
@@ -6,8 +6,6 @@
 //
 #pragma once
 
-#include "td/utils/port/config.h"
-
 #include "td/utils/common.h"
 #include "td/utils/port/detail/NativeFd.h"
 #include "td/utils/port/detail/PollableFd.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/FromApp.h 
new/td-git20260516/tdutils/td/utils/port/FromApp.h
--- old/td-git20260508/tdutils/td/utils/port/FromApp.h  2026-05-08 
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/FromApp.h  2026-06-09 
20:14:16.699464281 +0200
@@ -7,6 +7,7 @@
 #pragma once
 
 #include "td/utils/common.h"
+#include "td/utils/port/config.h"
 
 #ifdef TD_PORT_WINDOWS
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/IPAddress.h 
new/td-git20260516/tdutils/td/utils/port/IPAddress.h
--- old/td-git20260508/tdutils/td/utils/port/IPAddress.h        2026-05-08 
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/IPAddress.h        2026-06-09 
20:14:16.699464281 +0200
@@ -6,8 +6,6 @@
 //
 #pragma once
 
-#include "td/utils/port/config.h"
-
 #include "td/utils/common.h"
 #include "td/utils/Slice.h"
 #include "td/utils/Status.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/IoSlice.h 
new/td-git20260516/tdutils/td/utils/port/IoSlice.h
--- old/td-git20260508/tdutils/td/utils/port/IoSlice.h  2026-05-08 
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/IoSlice.h  2026-06-09 
20:14:16.699464281 +0200
@@ -6,6 +6,7 @@
 //
 #pragma once
 
+#include "td/utils/port/config.h"
 #include "td/utils/Slice.h"
 
 #if TD_PORT_POSIX
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/RwMutex.h 
new/td-git20260516/tdutils/td/utils/port/RwMutex.h
--- old/td-git20260508/tdutils/td/utils/port/RwMutex.h  2026-05-08 
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/RwMutex.h  2026-06-09 
20:14:16.699464281 +0200
@@ -6,9 +6,8 @@
 //
 #pragma once
 
-#include "td/utils/port/config.h"
-
 #include "td/utils/common.h"
+#include "td/utils/port/config.h"
 
 #if TD_PORT_POSIX
 #include <pthread.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/td-git20260508/tdutils/td/utils/port/ServerSocketFd.cpp 
new/td-git20260516/tdutils/td/utils/port/ServerSocketFd.cpp
--- old/td-git20260508/tdutils/td/utils/port/ServerSocketFd.cpp 2026-05-08 
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/ServerSocketFd.cpp 2026-06-09 
20:14:16.699464281 +0200
@@ -6,10 +6,9 @@
 //
 #include "td/utils/port/ServerSocketFd.h"
 
-#include "td/utils/port/config.h"
-
 #include "td/utils/common.h"
 #include "td/utils/logging.h"
+#include "td/utils/port/config.h"
 #include "td/utils/port/detail/skip_eintr.h"
 #include "td/utils/port/IPAddress.h"
 #include "td/utils/port/PollFlags.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/td-git20260508/tdutils/td/utils/port/ServerSocketFd.h 
new/td-git20260516/tdutils/td/utils/port/ServerSocketFd.h
--- old/td-git20260508/tdutils/td/utils/port/ServerSocketFd.h   2026-05-08 
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/ServerSocketFd.h   2026-06-09 
20:14:16.699464281 +0200
@@ -8,6 +8,7 @@
 
 #include "td/utils/port/detail/NativeFd.h"
 #include "td/utils/port/detail/PollableFd.h"
+#include "td/utils/port/platform.h"
 #include "td/utils/port/SocketFd.h"
 
 #include "td/utils/Slice.h"
@@ -16,6 +17,7 @@
 #include <memory>
 
 namespace td {
+
 namespace detail {
 class ServerSocketFdImpl;
 class ServerSocketFdImplDeleter {
@@ -54,4 +56,5 @@
   std::unique_ptr<detail::ServerSocketFdImpl, 
detail::ServerSocketFdImplDeleter> impl_;
   explicit ServerSocketFd(unique_ptr<detail::ServerSocketFdImpl> impl);
 };
+
 }  // namespace td
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/SocketFd.h 
new/td-git20260516/tdutils/td/utils/port/SocketFd.h
--- old/td-git20260508/tdutils/td/utils/port/SocketFd.h 2026-05-08 
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/SocketFd.h 2026-06-09 
20:14:16.699464281 +0200
@@ -7,11 +7,11 @@
 #pragma once
 
 #include "td/utils/port/config.h"
-
 #include "td/utils/port/detail/NativeFd.h"
 #include "td/utils/port/detail/PollableFd.h"
 #include "td/utils/port/IoSlice.h"
 #include "td/utils/port/IPAddress.h"
+#include "td/utils/port/platform.h"
 #include "td/utils/Slice.h"
 #include "td/utils/Span.h"
 #include "td/utils/Status.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/Stat.h 
new/td-git20260516/tdutils/td/utils/port/Stat.h
--- old/td-git20260508/tdutils/td/utils/port/Stat.h     2026-05-08 
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/Stat.h     2026-06-09 
20:14:16.699464281 +0200
@@ -6,9 +6,8 @@
 //
 #pragma once
 
-#include "td/utils/port/config.h"
-
 #include "td/utils/common.h"
+#include "td/utils/port/config.h"
 #include "td/utils/Slice.h"
 #include "td/utils/Status.h"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/StdStreams.cpp 
new/td-git20260516/tdutils/td/utils/port/StdStreams.cpp
--- old/td-git20260508/tdutils/td/utils/port/StdStreams.cpp     2026-05-08 
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/StdStreams.cpp     2026-06-09 
20:14:16.699464281 +0200
@@ -8,6 +8,7 @@
 
 #include "td/utils/logging.h"
 #include "td/utils/misc.h"
+#include "td/utils/port/config.h"
 #include "td/utils/port/detail/Iocp.h"
 #include "td/utils/port/detail/NativeFd.h"
 #include "td/utils/port/detail/PollableFd.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/UdpSocketFd.h 
new/td-git20260516/tdutils/td/utils/port/UdpSocketFd.h
--- old/td-git20260508/tdutils/td/utils/port/UdpSocketFd.h      2026-05-08 
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/UdpSocketFd.h      2026-06-09 
20:14:16.699464281 +0200
@@ -13,6 +13,7 @@
 #include "td/utils/port/detail/NativeFd.h"
 #include "td/utils/port/detail/PollableFd.h"
 #include "td/utils/port/IPAddress.h"
+#include "td/utils/port/platform.h"
 #include "td/utils/Slice.h"
 #include "td/utils/Span.h"
 #include "td/utils/Status.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/td-git20260508/tdutils/td/utils/port/detail/PollableFd.h 
new/td-git20260516/tdutils/td/utils/port/detail/PollableFd.h
--- old/td-git20260508/tdutils/td/utils/port/detail/PollableFd.h        
2026-05-08 16:53:41.203106353 +0200
+++ new/td-git20260516/tdutils/td/utils/port/detail/PollableFd.h        
2026-06-09 20:14:16.700259868 +0200
@@ -11,6 +11,7 @@
 #include "td/utils/List.h"
 #include "td/utils/logging.h"
 #include "td/utils/Observer.h"
+#include "td/utils/port/config.h"
 #include "td/utils/port/detail/NativeFd.h"
 #include "td/utils/port/Mutex.h"
 #include "td/utils/port/PollFlags.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/td-git20260508/tdutils/td/utils/port/detail/skip_eintr.h 
new/td-git20260516/tdutils/td/utils/port/detail/skip_eintr.h
--- old/td-git20260508/tdutils/td/utils/port/detail/skip_eintr.h        
2026-05-08 16:53:41.203106353 +0200
+++ new/td-git20260516/tdutils/td/utils/port/detail/skip_eintr.h        
2026-06-09 20:14:16.700259868 +0200
@@ -6,6 +6,8 @@
 //
 #pragma once
 
+#include "td/utils/port/config.h"
+
 #if TD_PORT_POSIX
 #include "td/utils/common.h"
 #include "td/utils/Time.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/path.cpp 
new/td-git20260516/tdutils/td/utils/port/path.cpp
--- old/td-git20260508/tdutils/td/utils/port/path.cpp   2026-05-08 
16:53:41.203106353 +0200
+++ new/td-git20260516/tdutils/td/utils/port/path.cpp   2026-06-09 
20:14:16.700259868 +0200
@@ -6,10 +6,9 @@
 //
 #include "td/utils/port/path.h"
 
-#include "td/utils/port/config.h"
-
 #include "td/utils/format.h"
 #include "td/utils/logging.h"
+#include "td/utils/port/config.h"
 #include "td/utils/port/detail/skip_eintr.h"
 #include "td/utils/ScopeGuard.h"
 #include "td/utils/SliceBuilder.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/rlimit.cpp 
new/td-git20260516/tdutils/td/utils/port/rlimit.cpp
--- old/td-git20260508/tdutils/td/utils/port/rlimit.cpp 2026-05-08 
16:53:41.203106353 +0200
+++ new/td-git20260516/tdutils/td/utils/port/rlimit.cpp 2026-06-09 
20:14:16.700259868 +0200
@@ -6,9 +6,8 @@
 //
 #include "td/utils/port/rlimit.h"
 
-#include "td/utils/port/config.h"
-
 #include "td/utils/misc.h"
+#include "td/utils/port/config.h"
 
 #if TD_PORT_POSIX
 #include <sys/resource.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/stacktrace.cpp 
new/td-git20260516/tdutils/td/utils/port/stacktrace.cpp
--- old/td-git20260508/tdutils/td/utils/port/stacktrace.cpp     2026-05-08 
16:53:41.203106353 +0200
+++ new/td-git20260516/tdutils/td/utils/port/stacktrace.cpp     2026-06-09 
20:14:16.700259868 +0200
@@ -6,6 +6,8 @@
 //
 #include "td/utils/port/stacktrace.h"
 
+#include "td/utils/port/config.h"
+#include "td/utils/port/platform.h"
 #include "td/utils/port/signals.h"
 
 #if __GLIBC__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/thread_local.h 
new/td-git20260516/tdutils/td/utils/port/thread_local.h
--- old/td-git20260508/tdutils/td/utils/port/thread_local.h     2026-05-08 
16:53:41.203106353 +0200
+++ new/td-git20260516/tdutils/td/utils/port/thread_local.h     2026-06-09 
20:14:16.700259868 +0200
@@ -6,8 +6,6 @@
 //
 #pragma once
 
-#include "td/utils/port/config.h"
-
 #include "td/utils/common.h"
 #include "td/utils/Destructor.h"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/uname.cpp 
new/td-git20260516/tdutils/td/utils/port/uname.cpp
--- old/td-git20260508/tdutils/td/utils/port/uname.cpp  2026-05-08 
16:53:41.203106353 +0200
+++ new/td-git20260516/tdutils/td/utils/port/uname.cpp  2026-06-09 
20:14:16.700259868 +0200
@@ -6,12 +6,11 @@
 //
 #include "td/utils/port/uname.h"
 
-#include "td/utils/port/config.h"
-
 #include "td/utils/common.h"
 #include "td/utils/filesystem.h"
 #include "td/utils/logging.h"
 #include "td/utils/misc.h"
+#include "td/utils/port/config.h"
 #include "td/utils/port/Stat.h"
 #include "td/utils/SliceBuilder.h"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/user.cpp 
new/td-git20260516/tdutils/td/utils/port/user.cpp
--- old/td-git20260508/tdutils/td/utils/port/user.cpp   2026-05-08 
16:53:41.203106353 +0200
+++ new/td-git20260516/tdutils/td/utils/port/user.cpp   2026-06-09 
20:14:16.700259868 +0200
@@ -7,6 +7,7 @@
 #include "td/utils/port/user.h"
 
 #include "td/utils/port/config.h"
+#include "td/utils/port/platform.h"
 
 #if TD_PORT_POSIX
 #include "td/utils/SliceBuilder.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/queue.h 
new/td-git20260516/tdutils/td/utils/queue.h
--- old/td-git20260508/tdutils/td/utils/queue.h 2026-05-08 16:53:41.203106353 
+0200
+++ new/td-git20260516/tdutils/td/utils/queue.h 2026-06-09 20:14:16.700259868 
+0200
@@ -6,6 +6,7 @@
 //
 #pragma once
 
+#include "td/utils/port/config.h"
 #include "td/utils/port/EventFd.h"
 #include "td/utils/port/sleep.h"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/test/log.cpp 
new/td-git20260516/tdutils/test/log.cpp
--- old/td-git20260508/tdutils/test/log.cpp     2026-05-08 16:53:41.204907284 
+0200
+++ new/td-git20260516/tdutils/test/log.cpp     2026-06-09 20:14:16.701900584 
+0200
@@ -7,11 +7,13 @@
 #include "td/utils/AsyncFileLog.h"
 #include "td/utils/benchmark.h"
 #include "td/utils/CombinedLog.h"
+#include "td/utils/common.h"
 #include "td/utils/FileLog.h"
 #include "td/utils/format.h"
 #include "td/utils/logging.h"
 #include "td/utils/MemoryLog.h"
 #include "td/utils/NullLog.h"
+#include "td/utils/port/config.h"
 #include "td/utils/port/path.h"
 #include "td/utils/port/thread.h"
 #include "td/utils/Slice.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/test/misc.cpp 
new/td-git20260516/tdutils/test/misc.cpp
--- old/td-git20260508/tdutils/test/misc.cpp    2026-05-08 16:53:41.204907284 
+0200
+++ new/td-git20260516/tdutils/test/misc.cpp    2026-06-09 20:14:16.701900584 
+0200
@@ -21,6 +21,7 @@
 #include "td/utils/invoke.h"
 #include "td/utils/logging.h"
 #include "td/utils/misc.h"
+#include "td/utils/port/config.h"
 #include "td/utils/port/EventFd.h"
 #include "td/utils/port/FileFd.h"
 #include "td/utils/port/IPAddress.h"
@@ -474,8 +475,8 @@
 }
 
 static void test_unique(td::vector<int> v, const td::vector<int> &expected) {
-  auto v_str = td::transform(v, &td::to_string<int>);
-  auto expected_str = td::transform(expected, &td::to_string<int>);
+  auto v_str = td::transform(v, [](int num) { return td::to_string(num); });
+  auto expected_str = td::transform(expected, [](int num) { return 
td::to_string(num); });
 
   td::unique(v);
   ASSERT_EQ(expected, v);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/tdutils/test/port.cpp 
new/td-git20260516/tdutils/test/port.cpp
--- old/td-git20260508/tdutils/test/port.cpp    2026-05-08 16:53:41.204907284 
+0200
+++ new/td-git20260516/tdutils/test/port.cpp    2026-06-09 20:14:16.701900584 
+0200
@@ -8,6 +8,7 @@
 #include "td/utils/common.h"
 #include "td/utils/logging.h"
 #include "td/utils/misc.h"
+#include "td/utils/port/config.h"
 #include "td/utils/port/EventFd.h"
 #include "td/utils/port/FileFd.h"
 #include "td/utils/port/IoSlice.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/td-git20260508/test/tdclient.cpp 
new/td-git20260516/test/tdclient.cpp
--- old/td-git20260508/test/tdclient.cpp        2026-05-08 16:53:41.205907257 
+0200
+++ new/td-git20260516/test/tdclient.cpp        2026-06-09 20:14:16.702833928 
+0200
@@ -22,6 +22,7 @@
 #include "td/utils/format.h"
 #include "td/utils/logging.h"
 #include "td/utils/misc.h"
+#include "td/utils/port/config.h"
 #include "td/utils/port/FileFd.h"
 #include "td/utils/port/path.h"
 #include "td/utils/port/sleep.h"

++++++ tdesktop-6.8.2-full.tar.gz -> tdesktop-6.9.1-full.tar.gz ++++++
/work/SRC/openSUSE:Factory/telegram-desktop/tdesktop-6.8.2-full.tar.gz 
/work/SRC/openSUSE:Factory/.telegram-desktop.new.2375/tdesktop-6.9.1-full.tar.gz
 differ: char 5, line 1

++++++ tg_owt-git20260123.tar.xz -> tg_owt-git20250512.tar.xz ++++++
/work/SRC/openSUSE:Factory/telegram-desktop/tg_owt-git20260123.tar.xz 
/work/SRC/openSUSE:Factory/.telegram-desktop.new.2375/tg_owt-git20250512.tar.xz 
differ: char 15, line 1

Reply via email to