Compare commits

..

6 commits

Author SHA1 Message Date
Peter Oliver
3c594f8d93 Add missing changelog entry. 2024-06-25 00:40:51 +01:00
Peter Oliver
a8c7c435f9 Remember to commit key. 2024-06-24 01:45:14 +01:00
Peter Oliver
d21aa76cb0 Emacs 29.4 tarball is signed by Stefan Kangas, not Eli Zaretskii. 2024-06-23 23:26:40 +01:00
Peter Oliver
b8fb44ed99 Update to version 29.4. 2024-06-23 22:55:22 +01:00
Dan Čermák
7a4fb3e1b7 New upstream release 29.3, fixes rhbz#2271287
Drop 0001-configure-Remove-obsolete-check-for-b-i486-linuxaout.patch, it does
not appear to be necessary anymore
2024-03-25 12:57:33 +00:00
Peter Oliver
f2ef61d320 Update to version 29.2. 2024-01-22 19:27:21 +00:00
17 changed files with 2178 additions and 2922 deletions

13
.gitignore vendored
View file

@ -1,6 +1,5 @@
/bodhi.template.last
/emacs-*.src.rpm
/emacs-23.3a.tar.bz2
/php-mode.el
/emacs-24.0.92.tar.gz
/emacs-24.0.93.tar.gz
/emacs-24.0.94.tar.gz
@ -36,15 +35,9 @@
/emacs-28.2.tar.xz.sig
/emacs-29.1.tar.xz
/emacs-29.1.tar.xz.sig
/emacs-29.2.tar.xz
/emacs-29.2.tar.xz.sig
/emacs-29.3.tar.xz
/emacs-29.3.tar.xz.sig
/emacs-29.4.tar.xz
/emacs-29.4.tar.xz.sig
/emacs-30.0.91.tar.xz
/emacs-30.0.91.tar.xz.sig
/php-mode.el
/results_emacs/
/emacs-30.1.tar.xz
/emacs-30.1.tar.xz.sig
/emacs-30.2.tar.xz
/emacs-30.2.tar.xz.sig

View file

@ -1,31 +0,0 @@
From 164e45695f9784469ff2f66cafcd6bc927c246be Mon Sep 17 00:00:00 2001
From: Peter Oliver <git@mavit.org.uk>
Date: Tue, 18 Mar 2025 13:16:15 +0000
Subject: [PATCH] =?UTF-8?q?Don=E2=80=99t=20specify=20StartupWMClass=20in?=
=?UTF-8?q?=20emacs.desktop?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
See the explanation at
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=49505#67. In summary, the
value we were providing doesnt work on Wayland, and the default should
be fine.
* etc/emacs.desktop: Dont specify StartupWMClass
---
etc/emacs.desktop | 1 -
1 file changed, 1 deletion(-)
diff --git a/etc/emacs.desktop b/etc/emacs.desktop
index 0d7cac14da5..16ad3c7eb48 100644
--- a/etc/emacs.desktop
+++ b/etc/emacs.desktop
@@ -9,4 +9,3 @@ Type=Application
Terminal=false
Categories=Development;TextEditor;
StartupNotify=true
-StartupWMClass=Emacs
--
2.48.1

View file

@ -1,86 +0,0 @@
From 6f29ac0393bb0bb70c8122d9f1bda0ae5d8cee24 Mon Sep 17 00:00:00 2001
From: Peter Oliver <git@mavit.org.uk>
Date: Thu, 26 Sep 2024 13:20:06 +0100
Subject: [PATCH] Pong and Tetris are excluded.
---
doc/emacs/ack.texi | 2 +-
doc/emacs/misc.texi | 7 +------
lisp/menu-bar.el | 6 ------
test/src/doc-tests.el | 4 ++--
4 files changed, 4 insertions(+), 15 deletions(-)
diff --git a/doc/emacs/ack.texi b/doc/emacs/ack.texi
index 5ec5cd53fa6..26f174831ca 100644
--- a/doc/emacs/ack.texi
+++ b/doc/emacs/ack.texi
@@ -228,7 +228,7 @@ Acknowledgments
@item
Glynn Clements provided @file{gamegrid.el} and a couple of games that
-use it, Snake and Tetris.
+use it, including Snake.
@item
Andrew Cohen wrote @file{spam-wash.el}, to decode and clean email before
diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi
index 41e37fd094e..38e281bf59c 100644
--- a/doc/emacs/misc.texi
+++ b/doc/emacs/misc.texi
@@ -3248,14 +3248,9 @@ Amusements
nato-region} converts the text in the region to NATO phonetic
alphabet; @kbd{M-x denato-region} converts it back.
-@findex pong
-@cindex Pong game
-@findex tetris
-@cindex Tetris
@findex snake
@cindex Snake
- @kbd{M-x pong}, @kbd{M-x snake} and @kbd{M-x tetris} are
-implementations of the well-known Pong, Snake and Tetris games.
+ @kbd{M-x snake} is an implementation of the well-known Snake game.
@findex solitaire
@cindex solitaire
diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el
index bcfa83cf8e4..1b0a0bce6a5 100644
--- a/lisp/menu-bar.el
+++ b/lisp/menu-bar.el
@@ -1658,18 +1658,12 @@ menu-bar-games-menu
(bindings--define-key menu [zone]
'(menu-item "Zone Out" zone
:help "Play tricks with Emacs display when Emacs is idle"))
- (bindings--define-key menu [tetris]
- '(menu-item "Tetris" tetris
- :help "Falling blocks game"))
(bindings--define-key menu [solitaire]
'(menu-item "Solitaire" solitaire
:help "Get rid of all the stones"))
(bindings--define-key menu [snake]
'(menu-item "Snake" snake
:help "Move snake around avoiding collisions"))
- (bindings--define-key menu [pong]
- '(menu-item "Pong" pong
- :help "Bounce the ball to your opponent"))
(bindings--define-key menu [mult]
'(menu-item "Multiplication Puzzle" mpuz
:help "Exercise brain with multiplication"))
diff --git a/test/src/doc-tests.el b/test/src/doc-tests.el
index b41a7ac5fb6..24befb737bc 100644
--- a/test/src/doc-tests.el
+++ b/test/src/doc-tests.el
@@ -34,8 +34,8 @@ doc-tests-documentation/autoloaded-macro
(ert-deftest doc-tests-documentation/autoloaded-defun ()
(skip-unless noninteractive)
- (should (autoloadp (symbol-function 'tetris)))
- (should (stringp (documentation 'tetris)))) ; See Bug#52969.
+ (should (autoloadp (symbol-function 'doctor)))
+ (should (stringp (documentation 'doctor)))) ; See Bug#52969.
(ert-deftest doc-tests-quoting-style ()
(should (memq (text-quoting-style) '(grave straight curve))))
--
2.46.1

View file

@ -1,106 +0,0 @@
From 16f0be6354ea13331859c861fa7d423a0b54bec7 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii <eliz@gnu.org>
Date: Fri, 17 Oct 2025 14:15:41 +0300
Subject: [PATCH] Support Tree-sitter version 0.26 and later
* src/treesit.c (init_treesit_functions)
[TREE_SITTER_LANGUAGE_VERSION >= 15]: Define prototype for, and
load 'ts_language_abi_version' instead of the deprecated (and
removed in tree-sitter 0.26) 'ts_language_version'.
(ts_language_abi_version) [TREE_SITTER_LANGUAGE_VERSION >= 15]:
Define on WINDOWSNT, instead of 'ts_language_version'.
(treesit_language_abi_version): New compatibility function.
(treesit_load_language, Ftreesit_language_abi_version): Use
'treesit_language_abi_version' instead of 'ts_language_version'.
(Bug#79627)
---
src/treesit.c | 34 +++++++++++++++++++++++++++++++++-
1 file changed, 33 insertions(+), 1 deletion(-)
diff --git a/src/treesit.c b/src/treesit.c
index e2986c186b8..4d6bf9a5dbd 100644
--- a/src/treesit.c
+++ b/src/treesit.c
@@ -34,7 +34,11 @@ Copyright (C) 2021-2025 Free Software Foundation, Inc.
# include "w32common.h"
/* In alphabetical order. */
+#if TREE_SITTER_LANGUAGE_VERSION >= 15
+#undef ts_language_abi_version
+#else
#undef ts_language_version
+#endif
#undef ts_node_child
#undef ts_node_child_by_field_name
#undef ts_node_child_count
@@ -89,7 +93,11 @@ Copyright (C) 2021-2025 Free Software Foundation, Inc.
#undef ts_tree_get_changed_ranges
#undef ts_tree_root_node
+#if TREE_SITTER_LANGUAGE_VERSION >= 15
+DEF_DLL_FN (uint32_t, ts_language_abi_version, (const TSLanguage *));
+#else
DEF_DLL_FN (uint32_t, ts_language_version, (const TSLanguage *));
+#endif
DEF_DLL_FN (TSNode, ts_node_child, (TSNode, uint32_t));
DEF_DLL_FN (TSNode, ts_node_child_by_field_name,
(TSNode, const char *, uint32_t));
@@ -166,7 +174,11 @@ init_treesit_functions (void)
if (!library)
return false;
+#if TREE_SITTER_LANGUAGE_VERSION >= 15
+ LOAD_DLL_FN (library, ts_language_abi_version);
+#else
LOAD_DLL_FN (library, ts_language_version);
+#endif
LOAD_DLL_FN (library, ts_node_child);
LOAD_DLL_FN (library, ts_node_child_by_field_name);
LOAD_DLL_FN (library, ts_node_child_count);
@@ -224,7 +236,11 @@ init_treesit_functions (void)
return true;
}
+#if TREE_SITTER_LANGUAGE_VERSION >= 15
+#define ts_language_abi_version fn_ts_language_abi_version
+#else
#define ts_language_version fn_ts_language_version
+#endif
#define ts_node_child fn_ts_node_child
#define ts_node_child_by_field_name fn_ts_node_child_by_field_name
#define ts_node_child_count fn_ts_node_child_count
@@ -632,6 +648,22 @@ treesit_load_language_push_for_each_suffix (Lisp_Object lib_base_name,
}
}
+/* This function is a compatibility shim. Tree-sitter 0.25 introduced
+ ts_language_abi_version as a replacement for ts_language_version, and
+ tree-sitter 0.26 removed ts_language_version. Here we use the fact
+ that 0.25 bumped TREE_SITTER_LANGUAGE_VERSION to 15, to use the new
+ function instead of the old one, when Emacs is compiled against
+ tree-sitter version 0.25 or newer. */
+static uint32_t
+treesit_language_abi_version (const TSLanguage *ts_lang)
+{
+#if TREE_SITTER_LANGUAGE_VERSION >= 15
+ return ts_language_abi_version (ts_lang);
+#else
+ return ts_language_version (ts_lang);
+#endif
+}
+
/* Load the dynamic library of LANGUAGE_SYMBOL and return the pointer
to the language definition.
@@ -817,7 +849,7 @@ DEFUN ("treesit-language-abi-version", Ftreesit_language_abi_version,
&signal_data);
if (ts_language == NULL)
return Qnil;
- uint32_t version = ts_language_version (ts_language);
+ uint32_t version = treesit_language_abi_version (ts_language);
return make_fixnum((ptrdiff_t) version);
}
}
--
2.52.0

View file

@ -1,63 +0,0 @@
From 7099578f18b1ea6a168b1883fa7a4ac7f49fc08f Mon Sep 17 00:00:00 2001
From: Peter Oliver <git@mavit.org.uk>
Date: Sun, 14 Jul 2024 20:47:14 +0100
Subject: [PATCH 2/2] Fall back to the terminal from pure GTK when no display
is available
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* src/dispnew.c (init_display_interactive): Only use PGTK windowing if
at least one of the environment variables WAYLAND_DISPLAY, DISPLAY,
BROADWAY_DISPLAY is set. (Bug#63555)
This patch is not suitable for merging, because it doesnt consider
what happens if you try to use PGTK on Windows or MacOS.
---
src/dispnew.c | 29 ++++++++++++++++++++++++++---
1 file changed, 26 insertions(+), 3 deletions(-)
diff --git a/src/dispnew.c b/src/dispnew.c
index 7cf2b49273c..481d33a7302 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -6557,10 +6557,33 @@ init_display_interactive (void)
#endif
#ifdef HAVE_PGTK
- if (!inhibit_window_system && !will_dump_p ())
+ if (!inhibit_window_system)
{
- Vinitial_window_system = Qpgtk;
- return;
+ if (!display_arg && !will_dump_p ())
+ {
+ int i;
+ const char *gdk_display_variables[] = {
+ "WAYLAND_DISPLAY",
+ "DISPLAY",
+ "BROADWAY_DISPLAY",
+ };
+ size_t n = ARRAYELTS (gdk_display_variables);
+
+ for (i = 0; i < n; i++)
+ {
+ char *display;
+ display = getenv (gdk_display_variables[i]);
+ if (display != 0 && *display != 0)
+ {
+ display_arg = 1;
+ break;
+ }
+ }
+ }
+ if (display_arg) {
+ Vinitial_window_system = Qpgtk;
+ return;
+ }
}
#endif
--
2.45.2

View file

@ -1,31 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: 12BB 9B40 0EE3 F772 8286 4D18 272B 5C54 E015 416A
Comment: Andrea Corallo <acorallo@gnu.org>
xsFNBGa/sd8BEAC7hQAGte6YvxDaiTutpSkVrb+zJBGcEW/AroE/dduBn8mfxa/Y
i71C2GV/y03aibdaO+cXPULAkkuJVDnFk57hn3w9zo98LzqDSEgNFcAUSSSQdyj7
Wn3J26doRpFQKnv3dbx1yZRZccbLgt/AH6hzhvNjFbYZ53LYE9rKzUYLTNHDhUI4
QTda2PvgWoySXcjBKhyIgg9zZLSc2w4ZwhO9WDVai58xNsl+YyU2HqVPpJZSCX0j
liIooHOEL2D601ByrWmePRGFR0tD6V9xj5jWuusErb78r57NOPsRCRKCKcg/v/kl
fA5+byvanw27PDa8zoheXgF41uDf96keOQPBve3TE1Oy4x+G55zuP9KNQ5aSCG49
x0Cc7BET23JmiWUnz1GUbM7vka5ell+smmq+kTDtK47L+4N954a6CR0esPLJMLF6
Ub2y8SY2XPn1Bv8lsN77f0L5yyhnK72H+mf4fS/qjJlN0F+DWx49Z8it9rbG8Atc
X6Vqzv5qaDPbCpAqdqs2qrv3nAdvYOlwxmVh6Hxq1EOFT2v49dmn3viVBNnuT7yW
tyvpTDyvfLKOnfH+OLLuqPUFZnxt8mU8ieNEnvIYojSOFyddJAh2uOI3sqjLHrDg
PRAYFv9jp7K7pk+S054mdF31qD+TTxjWQtNI8Sxh/Q71Vtz7JyqYWd/JCQARAQAB
zSFBbmRyZWEgQ29yYWxsbyA8YWNvcmFsbG9AZ251Lm9yZz7CwZQEEwEKAD4WIQQS
u5tADuP3coKGTRgnK1xU4BVBagUCZr+x3wIbAwUJA8JnAAULCQgHAgYVCgkICwIE
FgIDAQIeAQIXgAAKCRAnK1xU4BVBaj/0D/4ogwPjg6Cwyi8pmRYx9gOjQNIRtjOb
2aHFYQs9luFy20Wlt/7QtelDH+NLCAb5PKvhDI3Sw+SIoheAndhbzqW7GEW5J9G7
10PPkCUCjbicJOKsUkMv03wS6IrelUYzgjbmGYRo2vYcSb+BHXQR4MuxDSL/2vPD
LHYKwij9K+FozgJVfjq5n97l/wsGsc/orRiST23ykiXyCZweulGLhXnoCghHrnB1
B+xBaCv3P1GW/BZZgXGPQ+1XMOsFlP951vfjirlHnJMvMDkMkNhT6Qh282jTokWN
TVQqKUv5tpdNkId+QmUhzC+DcfoOsegB3wWa6VQ/w1cG9mkoPUTT8Y8fo4FXnWwV
U4472JuZdQYFDAKEnTsW1TRNgBb5xLNNCUmDUVDndgn1WtZIZx18QBtJ1CHhycaN
C68McWuvvENhEM8clUXIHundgeDce4gcQC23Un7NT0PbNTwvGPfBSaoVax5ZVHuZ
Tr2pTHqAqqi4YLnrE5R06OIWQzVOVs5NZplDPZGXZOxryXa3ssLxjL2VYbo4AAUZ
h3fyVOzNHlGLT3Egj4XHDuDFcswUimD5SmrqQQwg94CgXExDisqH9Uo8L7Zxf/AG
UpIsxpDv219GOdTffbzl01W6oaP4obiTwMFUaQ7ljdCfq19KYdo576touTU+/48q
7AjjL28Eznhz0Q==
=goOm
-----END PGP PUBLIC KEY BLOCK-----

1880
changelog

File diff suppressed because it is too large Load diff

View file

@ -1,13 +1,7 @@
;;; default.el --- loaded after ".emacs" on startup -*- lexical-binding: t -*-
;;; Commentary:
;;
;; Setting `inhibit-default-init' non-nil in "~/.emacs"
;; prevents loading of this file. Also the "-q" option to "emacs"
;; prevents both "~/.emacs" and this file from being loaded at startup.
;;; Code:
;;; default.el - loaded after ".emacs" on startup
;;;
;;; Setting `inhibit-default-init' non-nil in "~/.emacs"
;;; prevents loading of this file. Also the "-q" option to emacs
;;; prevents both "~/.emacs" and this file from being loaded at startup.
(setq-default smime-CA-directory "/etc/ssl/certs")
;;; default.el ends here

View file

@ -1,4 +1,4 @@
;;; -*- lexical-binding: t -*-
;; .emacs
(custom-set-variables
;; uncomment to always end a file with a newline

View file

@ -1,41 +0,0 @@
#!/usr/bin/bash
# The pure GTK build of emacs is not supported on X11, so try to avoid
# using it there if there is another alternative.
preferred="$(readlink -f /usr/bin/emacs)"
if [[ $XDG_SESSION_TYPE == 'x11' ]]; then
case "$preferred" in
*-pgtk)
for variant in gtk+x11 lucid; do
if type "emacs-$variant" >/dev/null; then
exec -a emacs "emacs-$variant" "$@"
fi
done
;;
*/emacs-desktop)
# If this wrapper script is itself the preferred alternative,
# select something suitable from the options available.
for variant in gtk+x11 lucid pgtk nw; do
if type "emacs-$variant" >/dev/null; then
exec -a emacs "emacs-$variant" "$@"
fi
done
exit 2
;;
esac
else
case "$preferred" in
*/emacs-desktop)
for variant in pgtk gtk+x11 lucid nw; do
if type "emacs-$variant" >/dev/null; then
exec -a emacs "emacs-$variant" "$@"
fi
done
exit 2
;;
esac
fi
exec emacs "$@"

View file

@ -1,26 +0,0 @@
From eaaf4883aee50974eeb03e529a29585f8ddc1d9d Mon Sep 17 00:00:00 2001
From: Bhavin Gandhi <bhavin192@geeksocket.in>
Date: Wed, 31 May 2023 22:44:54 +0530
Subject: [PATCH] Add package names to PGTK on X error message
---
src/pgtkterm.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/pgtkterm.c b/src/pgtkterm.c
index c00e13550bd..ce51bff5947 100644
--- a/src/pgtkterm.c
+++ b/src/pgtkterm.c
@@ -6680,7 +6680,8 @@ pgtk_display_x_warning (GdkDisplay *display)
" System. That configuration is unsupported and\n"
" will lead to sporadic crashes during transfer of\n"
" large selection data. It will also lead to\n"
- " various problems with keyboard input.\n");
+ " various problems with keyboard input.\n"
+ "\nInstall emacs-gtk+x11 or emacs-lucid package.\n");
gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
gtk_container_add (GTK_CONTAINER (content_area), label);
gtk_widget_show (label);
--
2.40.1

View file

@ -1,12 +1,11 @@
--- a/src/gnutls.c 2016-01-24 10:29:58.000000000 +0100
+++ b/src/gnutls.c 2016-02-02 09:32:28.477274274 +0100
@@ -1557,8 +1557,8 @@
@@ -1557,7 +1557,7 @@
gnutls_certificate_credentials_t x509_cred = NULL;
gnutls_anon_client_credentials_t anon_cred = NULL;
Lisp_Object global_init;
- char const *priority_string_ptr = "NORMAL"; /* default priority string. */
+ char const *priority_string_ptr = "@SYSTEM"; /* default priority string. */
char *c_hostname;
const char *c_pass;
/* Placeholders for the property list elements. */

2733
emacs.spec

File diff suppressed because it is too large Load diff

View file

@ -1,5 +0,0 @@
# -*- rpm-spec -*-
%__emacs_lisp_recommends %{_rpmconfigdir}/emacs_lisp.rec
%__emacs_lisp_path %{_datadir}/emacs/.+\.el(\.gz)?$
%__emacs_lisp_protocol multifile

View file

@ -1,49 +0,0 @@
#!/usr/bin/emacs -x
;; This file is not part of GNU Emacs.
;;; Commentary:
;; Inspect Emacs Lisp files for usage of Tree-sitter parsers, and
;; generate RPM Recommends for those.
;;; Code:
(setq backtrace-on-error-noninteractive nil
jka-compr-verbose nil)
(condition-case nil
(while (setq filename (read-from-minibuffer ""))
(when (string-match-p (rx ".el" (optional ".gz") line-end)
filename)
(condition-case err
(let* ((symlink-target (file-symlink-p filename))
(source-filename
(if (and (stringp symlink-target)
(string-match-p (rx line-start "/")
symlink-target))
(file-name-concat (getenv "RPM_BUILD_ROOT")
symlink-target)
filename)))
(with-temp-buffer
(insert-file-contents source-filename)
(setq parsers ())
(while
(search-forward-regexp
(rx "(" (or "treesit-ensure-installed"
"treesit-parser-create"
"treesit-ready-p")
" '")
nil t)
(add-to-list 'parsers (thing-at-point 'symbol t)))
(when parsers
(princ (concat ";" filename "\n"))
(dolist (parser parsers)
(princ (concat "tree-sitter(" parser ")" "\n"))))))
;; Missing files are probably caused by "broken" symlinks
;; (which may actually be fulfilled by some other package).
(file-missing (message "warning: %s" (error-message-string err))))))
(end-of-file nil))
;;; emacs_lisp.rec ends here

View file

@ -1,16 +1,9 @@
;;; site-start.el --- loaded before user's ".emacs" file and default.el -*- lexical-binding: t -*-
;;; Commentary:
;;
;; Load *.el and *.elc in /usr/share/emacs/site-lisp/site-start.d on startup
;;; Code:
;;; loaded before user's ".emacs" file and default.el
;; load *.el and *.elc in /usr/share/emacs/site-lisp/site-start.d on startup
(mapc
'load
(delete-dups
(mapcar 'file-name-sans-extension
(directory-files
"/usr/share/emacs/site-lisp/site-start.d" t "\\.elc?\\'"))))
;;; site-start.el ends here

View file

@ -1,2 +1,2 @@
SHA512 (emacs-30.2.tar.xz) = 313432d11e95c74f8cd35c5b1da442e6223f5d40f9173c55883c0339ecbfb97a0bedf79177ef8902afd3e33c078a233777bed01f5caffa1e7524f17d58bfc9a2
SHA512 (emacs-30.2.tar.xz.sig) = ab5b5d0624b37ac662cf9914e8807fc37ee273c107f1a19ca75a527b6b9a85ce35f9436d03d8a988876cce7e7bebcc6c4a1251b0ceb08785b56bf42743f246e1
SHA512 (emacs-29.4.tar.xz) = 66b38081cb01d2c46ff7beefb45986cc225b4c922c30712ad0d456c6cae5507176ed99418c8f26948c5375c8afde4e4b2507d23ed997dbb5392d12150a121d80
SHA512 (emacs-29.4.tar.xz.sig) = 6c20269c260fb7f6d8b9b4582be25179a5adaaa1b9d94e68d55890f7b0b211dfd396c7005694b0154471ab3769f12e5067b8f4ec21720755d9087d89a8c722f6