diff --git a/_service b/_service
new file mode 100644
index 0000000..2801277
--- /dev/null
+++ b/_service
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/fix-printer-attributes-parsing.patch b/fix-printer-attributes-parsing.patch
deleted file mode 100644
index 06f6b3f..0000000
--- a/fix-printer-attributes-parsing.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-From 0bd5dd829e6f5509fda6cb09430ff14faa432941 Mon Sep 17 00:00:00 2001
-From: Martin Wilck
-Date: Fri, 15 Sep 2023 18:32:08 +0200
-Subject: [PATCH 19/19] hplip: fix printer attributes parsing
-
----
- protocol/hp_ipp.c | 21 ++++++++++++++-------
- 1 file changed, 14 insertions(+), 7 deletions(-)
-
-diff --git a/protocol/hp_ipp.c b/protocol/hp_ipp.c
-index 9b05f5e..3ba83fa 100644
---- a/protocol/hp_ipp.c
-+++ b/protocol/hp_ipp.c
-@@ -43,6 +43,13 @@ Boston, MA 02110-1301, USA.
- #define _STRINGIZE(x) #x
- #define STRINGIZE(x) _STRINGIZE(x)
-
-+#define hplip_strlcpy(dst, src, size) \
-+ do { \
-+ if (!memccpy(dst, src, '\0', size)) \
-+ dst[size - 1] = '\0'; \
-+ } while (0)
-+
-+
- http_t *acquireCupsInstance()
- {
- if (http == NULL)
-@@ -113,7 +120,7 @@ int addCupsPrinter(char *name, char *device_uri, char *location, char *ppd_file,
- }
-
- if ( info == NULL )
-- snprintf( info,sizeof(info), name );
-+ hplip_strlcpy( info, name, sizeof(info));
-
- sprintf(printer_uri, "ipp://localhost/printers/%s", name);
-
-@@ -518,27 +525,27 @@ int __parsePrinterAttributes(ipp_t *response, printer_t **printer_list)
-
- if ( strcmp(attr_name, "printer-name") == 0 &&
- val_tag == IPP_TAG_NAME ) {
-- snprintf(t_printer->name, sizeof(t_printer->name),ippGetString(attr, 0, NULL) );
-+ hplip_strlcpy(t_printer->name, ippGetString(attr, 0, NULL), sizeof(t_printer->name) );
- }
- else if ( strcmp(attr_name, "device-uri") == 0 &&
- val_tag == IPP_TAG_URI ) {
-- snprintf(t_printer->device_uri,sizeof(t_printer->device_uri), ippGetString(attr, 0, NULL) );
-+ hplip_strlcpy(t_printer->device_uri, ippGetString(attr, 0, NULL), sizeof(t_printer->device_uri) );
- }
- else if ( strcmp(attr_name, "printer-uri-supported") == 0 &&
- val_tag == IPP_TAG_URI ) {
-- snprintf(t_printer->printer_uri,sizeof(t_printer->printer_uri), ippGetString(attr, 0, NULL) );
-+ hplip_strlcpy(t_printer->printer_uri, ippGetString(attr, 0, NULL), sizeof(t_printer->printer_uri) );
- }
- else if ( strcmp(attr_name, "printer-info") == 0 &&
- val_tag == IPP_TAG_TEXT ) {
-- snprintf(t_printer->info,sizeof(t_printer->info), ippGetString(attr, 0, NULL) );
-+ hplip_strlcpy(t_printer->info, ippGetString(attr, 0, NULL), sizeof(t_printer->info) );
- }
- else if ( strcmp(attr_name, "printer-location") == 0 &&
- val_tag == IPP_TAG_TEXT ) {
-- snprintf(t_printer->location,sizeof(t_printer->location),ippGetString(attr, 0, NULL) );
-+ hplip_strlcpy(t_printer->location, ippGetString(attr, 0, NULL), sizeof(t_printer->location) );
- }
- else if ( strcmp(attr_name, "printer-make-and-model") == 0 &&
- val_tag == IPP_TAG_TEXT ) {
-- snprintf(t_printer->make_model,sizeof(t_printer->make_model),ippGetString(attr, 0, NULL) );
-+ hplip_strlcpy(t_printer->make_model, ippGetString(attr, 0, NULL), sizeof(t_printer->make_model));
- }
- else if ( strcmp(attr_name, "printer-state") == 0 &&
- val_tag == IPP_TAG_ENUM ) {
---
-2.42.0
-
diff --git a/hplip-3.23.12.tar.gz b/hplip-3.23.12.tar.gz
new file mode 100644
index 0000000..b25b58b
--- /dev/null
+++ b/hplip-3.23.12.tar.gz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a76c2ac8deb31ddb5f0da31398d25ac57440928a0692dcb060a48daa718e69ed
+size 30162044
diff --git a/hplip-3.23.12.tar.gz.asc b/hplip-3.23.12.tar.gz.asc
new file mode 100644
index 0000000..dd9233a
--- /dev/null
+++ b/hplip-3.23.12.tar.gz.asc
@@ -0,0 +1,6 @@
+-----BEGIN PGP SIGNATURE-----
+
+iF0EABECAB0WIQRKui9m29WpWJSRDgZz13DNpZBHuQUCZWSyogAKCRBz13DNpZBH
+uVF7AJwLUoaLa1hTcyzo4hVznR9NQhL/VgCfdNKIqdWCxyZ9ugr8IBptjQ2u1es=
+=kO2i
+-----END PGP SIGNATURE-----
diff --git a/hplip-3.23.8.tar.gz b/hplip-3.23.8.tar.gz
deleted file mode 100644
index b49ea00..0000000
--- a/hplip-3.23.8.tar.gz
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:f7cc05f628c0cfd750e54ae41431c1dfdd29e97682f18b5c5ba5cb2c5b4b1b46
-size 30121648
diff --git a/hplip-3.23.8.tar.gz.asc b/hplip-3.23.8.tar.gz.asc
deleted file mode 100644
index 55dd2c4..0000000
--- a/hplip-3.23.8.tar.gz.asc
+++ /dev/null
@@ -1,6 +0,0 @@
------BEGIN PGP SIGNATURE-----
-
-iF0EABECAB0WIQRKui9m29WpWJSRDgZz13DNpZBHuQUCZQE3rQAKCRBz13DNpZBH
-uXcAAKCaq7vba92lagYYA6sXL0rUNvkXHgCfeOSP5AY/WM7gG/N2SSTkbCjGwWw=
-=SGJw
------END PGP SIGNATURE-----
diff --git a/hplip-missing-drivers.patch b/hplip-missing-drivers.patch
index c9439e4..1bf9905 100644
--- a/hplip-missing-drivers.patch
+++ b/hplip-missing-drivers.patch
@@ -1,8 +1,19 @@
-Index: hplip-3.22.4/cups_drv.inc
-===================================================================
---- hplip-3.22.4.orig/cups_drv.inc
-+++ hplip-3.22.4/cups_drv.inc
-@@ -411,6 +411,7 @@ cups_ppd_printers = \
+From eab655e0f8ab7c7520e0c60970d74e51b25c2061 Mon Sep 17 00:00:00 2001
+From: Martin Wilck
+Date: Fri, 15 Sep 2023 18:31:38 +0200
+Subject: [PATCH 18/18] hplip: missing drivers
+
+---
+ cups_drv.inc | 2 +
+ data/models/models.dat | 477 ++++++++++++++++++++++++++++++++++++++++-
+ prnt/drv/hpcups.drv.in | 16 ++
+ 3 files changed, 486 insertions(+), 9 deletions(-)
+
+diff --git a/cups_drv.inc b/cups_drv.inc
+index 8a33bfe..dc38978 100644
+--- a/cups_drv.inc
++++ b/cups_drv.inc
+@@ -414,6 +414,7 @@ cups_ppd_printers = \
ppd/hpcups/hp-laserjet_cm1418fnw-pcl3.ppd.gz \
ppd/hpcups/hp-laserjet_cp1025.ppd.gz \
ppd/hpcups/hp-laserjet_cp1025nw.ppd.gz \
@@ -10,7 +21,7 @@ Index: hplip-3.22.4/cups_drv.inc
ppd/hpcups/hp-laserjet_m1005.ppd.gz \
ppd/hpcups/hp-laserjet_m101-m106.ppd.gz \
ppd/hpcups/hp-laserjet_m109-m112.ppd.gz \
-@@ -527,6 +528,7 @@ cups_ppd_printers = \
+@@ -531,6 +532,7 @@ cups_ppd_printers = \
ppd/hpcups/hp-laserjet_professional_p1607dn.ppd.gz \
ppd/hpcups/hp-laserjet_professional_p1608dn.ppd.gz \
ppd/hpcups/hp-laserjet_professional_p1609dn.ppd.gz \
@@ -18,10 +29,10 @@ Index: hplip-3.22.4/cups_drv.inc
ppd/hpcups/hp-laserjet_professional_p_1102w.ppd.gz \
ppd/hpcups/hp-laserjet_tank_1020.ppd.gz \
ppd/hpcups/hp-laserjet_tank_150x.ppd.gz \
-Index: hplip-3.22.4/data/models/models.dat
-===================================================================
---- hplip-3.22.4.orig/data/models/models.dat
-+++ hplip-3.22.4/data/models/models.dat
+diff --git a/data/models/models.dat b/data/models/models.dat
+index a567fdd..ed89569 100644
+--- a/data/models/models.dat
++++ b/data/models/models.dat
@@ -2104,7 +2104,7 @@ usb-pid=411
usb-vid=3f0
wifi-config=0
@@ -46,7 +57,7 @@ Index: hplip-3.22.4/data/models/models.dat
ppd-name=hp-laserjet_100_color_mfp_m175-ps.ppd
monitor-type=0
panel-check-type=0
-@@ -2165,6 +2157,378 @@ usb-pid=62a
+@@ -2218,6 +2210,378 @@ usb-pid=62a
usb-vid=3f0
wifi-config=3
@@ -425,7 +436,7 @@ Index: hplip-3.22.4/data/models/models.dat
[officejet_100_mobile_l411]
align-type=-1
clean-type=1
-@@ -17867,6 +18231,58 @@ usb-pid=2c17
+@@ -17920,6 +18284,58 @@ usb-pid=2c17
usb-vid=3f0
wifi-config=0
@@ -484,7 +495,7 @@ Index: hplip-3.22.4/data/models/models.dat
[hp_laserjet_cp1025nw]
align-type=0
clean-type=0
-@@ -18468,6 +18884,49 @@ usb-pid=3011
+@@ -18521,6 +18937,49 @@ usb-pid=3011
usb-vid=3f0
wifi-config=0
@@ -534,14 +545,15 @@ Index: hplip-3.22.4/data/models/models.dat
[hp_laserjet_professional_p1102]
align-type=0
clean-type=0
-Index: hplip-3.22.4/prnt/drv/hpcups.drv.in
-===================================================================
---- hplip-3.22.4.orig/prnt/drv/hpcups.drv.in
-+++ hplip-3.22.4/prnt/drv/hpcups.drv.in
-@@ -22689,6 +22689,14 @@ Group "RLT/HP Real Life Technologies"
+diff --git a/prnt/drv/hpcups.drv.in b/prnt/drv/hpcups.drv.in
+index 2829168..3c1377a 100644
+--- a/prnt/drv/hpcups.drv.in
++++ b/prnt/drv/hpcups.drv.in
+@@ -23107,6 +23107,14 @@ Group "RLT/HP Real Life Technologies"
+ Attribute "Product" "" "(HP LaserJet Professional p1102 Printer)"
Attribute "Product" "" "(HP LaserJet Professional p1102s Printer)"
}
- {
++ {
+ ModelName "HP LaserJet Professional p1102w"
+ Attribute "NickName" "" "HP LaserJet Professional p1102w, hpcups $Version, requires proprietary plugin"
+ Attribute "ShortNickName" "" "HP LaserJet Professional p1102w hpijs"
@@ -549,11 +561,10 @@ Index: hplip-3.22.4/prnt/drv/hpcups.drv.in
+ PCFileName "hp-laserjet_professional_p1102w.ppd"
+ Attribute "Product" "" "(HP LaserJet Professional p1102w Printer)"
+ }
-+ {
+ {
ModelName "HP LaserJet Professional p1106"
Attribute "NickName" "" "HP LaserJet Professional p1106, hpcups $Version"
- Attribute "ShortNickName" "" "HP LJ Pro p1106 hpijs"
-@@ -23122,6 +23130,14 @@ Group "RLT/HP Real Life Technologies"
+@@ -23541,6 +23549,14 @@ Group "RLT/HP Real Life Technologies"
PCFileName "hp-laserjet_cp1025nw.ppd"
Attribute "Product" "" "(HP LaserJet Pro cp1025nw Color Printer Series)"
}
@@ -568,3 +579,6 @@ Index: hplip-3.22.4/prnt/drv/hpcups.drv.in
}
} // End LJZjsColor (for proprietary plugin)
+--
+2.43.0
+
diff --git a/hplip.changes b/hplip.changes
index 42226f0..5deb07b 100644
--- a/hplip.changes
+++ b/hplip.changes
@@ -1,3 +1,21 @@
+-------------------------------------------------------------------
+Wed Jan 3 16:11:11 UTC 2024 - Martin Wilck
+
+- Update to hplip 3.23.12
+ * del fix-printer-attributes-parsing.patch (merged upstream)
+ * del hppsfilter-booklet-printing-change-insecure-fixed-tm.patch
+ (merged upstream)
+- Added support for new printers:
+ * HP OfficeJet Pro 9130b series
+ * HP OfficeJet Pro 9120b series
+ * HP OfficeJet Pro 9110b series
+ * HP Color LaserJet Enterprise Flow MFP X58045z
+ * HP Color LaserJet Enterprise Flow MFP X58045zs
+ * HP Color LaserJet Enterprise MFP X58045dn 
+ * HP Color LaserJet Enterprise MFP X58045
+ * HP LaserJet Pro P1106 plus
+ * HP LaserJet Pro P1108 plus
+
-------------------------------------------------------------------
Wed Nov 15 20:21:30 UTC 2023 - Martin Wilck
diff --git a/hplip.spec b/hplip.spec
index e3c6aee..52dd46d 100644
--- a/hplip.spec
+++ b/hplip.spec
@@ -1,7 +1,7 @@
#
# spec file for package hplip
#
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -24,7 +24,7 @@
%define pyexe %{_bindir}/python3
%global use_qt5 1
Name: hplip
-Version: 3.23.8
+Version: 3.23.12
Release: 0
Summary: HP's Printing, Scanning, and Faxing Software
License: BSD-3-Clause AND GPL-2.0-or-later AND MIT
@@ -86,10 +86,6 @@ Patch403: Revert-changes-from-3.18.5-that-break-hp-setup-for-f.patch
# PATCH-FIX-UPSTREAM: https://bugs.launchpad.net/hplip/+bug/1879445
Patch404: hplip-3.20.6-python-includes.patch
Patch500: hplip-missing-drivers.patch
-# PATCH-FIX-UPSTREAM boo#1209866 lp#2013185
-Patch501: fix-printer-attributes-parsing.patch
-# PATCH-FIX-SUSE bsc#1214399
-Patch502: hppsfilter-booklet-printing-change-insecure-fixed-tm.patch
BuildRequires: %{pymod devel}
BuildRequires: %{pymod qt5-devel}
BuildRequires: %{pymod xml}
@@ -335,8 +331,6 @@ This sub-package is only required by developers.
%patch403 -p1
%patch404 -p1
%patch500 -p1
-%patch501 -p1
-%patch502 -p1
# replace "env" shebang and "/usr/bin/python" with real executable
find . -name '*.py' -o -name pstotiff | \
xargs -n 1 sed -i '1s,^#!\(%{_bindir}/env python\|%{_bindir}/python\),#!%{pyexe},'
diff --git a/hppsfilter-booklet-printing-change-insecure-fixed-tm.patch b/hppsfilter-booklet-printing-change-insecure-fixed-tm.patch
deleted file mode 100644
index 073dc78..0000000
--- a/hppsfilter-booklet-printing-change-insecure-fixed-tm.patch
+++ /dev/null
@@ -1,203 +0,0 @@
-From d12ed6cd01bef7765cdeee16f8f6e66f22e71fbd Mon Sep 17 00:00:00 2001
-From: Matthias Gerstner
-Date: Fri, 8 Sep 2023 10:17:04 +0200
-Subject: [PATCH] hppsfilter: booklet printing: change insecure fixed /tmp file
- paths
-
-Using the fixed /tmp file paths in booklet printing /tmp/booklet.ps,
-/tmp/temp.ps and /tmp/NUP.ps is a local security issue and also prevents
-potential parallel operation of hplip.
-
-Use proper `mkstemp()` for these files. Functions like `PS_Booklet()`
-and `cupsFileOpen()` don't use the open file descriptor but open the
-path by name again. This is safe, since the files have already been
-safely created and have safe modes. I wanted to avoid changing a whole
-series of function signatures for this.
-
-The purpose of the `chmod()` in `open_tempbookletfile()` is unclear, the
-data should only be processed by our own process. Making the file world
-readable is an information leak, though. Thus drop this line.
----
- prnt/hpps/hppsfilter.c | 124 ++++++++++++++++++++++++++++++++---------
- 1 file changed, 98 insertions(+), 26 deletions(-)
-
-diff --git a/prnt/hpps/hppsfilter.c b/prnt/hpps/hppsfilter.c
-index d6721b1..711b8d8 100644
---- a/prnt/hpps/hppsfilter.c
-+++ b/prnt/hpps/hppsfilter.c
-@@ -43,7 +43,9 @@ static FILE *g_fp_outdbgps = NULL;
- static FILE *ptempbooklet_file = NULL;
- static char temp_filename[FILE_NAME_SIZE] = {0};
- static char booklet_filename[FILE_NAME_SIZE] = {0};
-+static int booklet_fd = -1;
- static char Nup_filename[FILE_NAME_SIZE] = {0};
-+static int Nup_fd = -1;
- extern void PS_Booklet(char *tempfile, char *bookletfile, char *nupfile,int order, int nup, char* pagesize, int bookletMaker);
- static const char *GetOptionValue(const char *iOptionValue);
-
-@@ -99,16 +101,78 @@ static int hpwrite (void *pBuffer, size_t size)
- return ndata_written;
- }
-
--static void open_tempbookletfile(char *mode)
-+static int open_tempbookletfile(char *mode)
- {
-- ptempbooklet_file= fopen(temp_filename, mode);
-+ snprintf(temp_filename, FILE_NAME_SIZE, "/tmp/hppsfilter-temp.XXXXXX");
-+ int fd = mkstemp(temp_filename);
-+ if (fd < 0) {
-+ temp_filename[0] = '\0';
-+ fprintf(stderr, "ERROR: Unable to open temp file %s\n", temp_filename);
-+ return 1;
-+ }
-+
-+ ptempbooklet_file = fdopen(fd, mode);
- if(ptempbooklet_file == NULL)
- {
-- fprintf(stderr, "ERROR: Unable to open temp file %s\n", temp_filename);
-- return 1;
-+ close(fd);
-+ fprintf(stderr, "ERROR: Unable to open temp file %s\n", temp_filename);
-+ return 1;
- }
-- chmod(temp_filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
-+ return 0;
-+}
-
-+static void clean_tempfiles()
-+{
-+ if (booklet_fd != -1)
-+ {
-+ close(booklet_fd);
-+ booklet_fd = -1;
-+ }
-+
-+ if (Nup_fd != -1)
-+ {
-+ close(Nup_fd);
-+ Nup_fd = -1;
-+ }
-+
-+ if (ptempbooklet_file != NULL)
-+ {
-+ fclose(ptempbooklet_file);
-+ ptempbooklet_file = NULL;
-+ }
-+
-+ if( booklet_filename[0] != '\0' )
-+ {
-+ if ((unlink(booklet_filename)) == -1)
-+ {
-+ fprintf(stderr, "ERROR: Unable to remove temporary files in /tmp dir \"%s\" ",booklet_filename);
-+ return 1;
-+ }
-+
-+ booklet_filename[0] = '\0';
-+ }
-+
-+ if( temp_filename[0] != '\0' )
-+ {
-+ if ((unlink(temp_filename)) == -1)
-+ {
-+ fprintf(stderr, "ERROR: Unable to remove temporary files in /tmp dir \"%s\" ",temp_filename);
-+ return 1;
-+ }
-+
-+ temp_filename[0] = '\0';
-+ }
-+
-+ if( Nup_filename[0] != '\0' )
-+ {
-+ if ((unlink(Nup_filename)) == -1)
-+ {
-+ fprintf(stderr, "ERROR: Unable to remove temporary files in /tmp dir \"%s\" ",Nup_filename);
-+ return 1;
-+ }
-+
-+ Nup_filename[0] = '\0';
-+ }
- }
-
- static int Dump_tempbookletfile (void *pBuffer, size_t size)
-@@ -921,6 +985,8 @@ int main (int argc, char **argv)
- char buffer[MAX_BUFFER] = {0};
- int LfpSecurePin = 0;
-
-+ atexit(clean_tempfiles);
-+
- get_LogLevel();
- setbuf (stderr, NULL);
-
-@@ -1024,13 +1090,32 @@ int main (int argc, char **argv)
- if(booklet_enabled)
- {
- /* 1. dump the contents of the input file into temp file */
-- sprintf(booklet_filename, "/tmp/%s.ps","booklet");
-- sprintf(temp_filename, "/tmp/%s.ps","temp");
-- sprintf(Nup_filename, "/tmp/%s.ps","NUP");
-- open_tempbookletfile("w");
-- while( (numBytes = cupsFileGetLine(fp_input, line, sizeof(line))) > 0)
-+ snprintf(booklet_filename, FILE_NAME_SIZE, "/tmp/hppsfilter-booklet.XXXXXX");
-+ booklet_fd = mkstemp(booklet_filename);
-+ if( booklet_fd < 0 )
-+ {
-+ booklet_filename[0] = '\0';
-+ fprintf(stderr, "ERROR: Unable to create booklet temporary file \"%s\"", booklet_filename);
-+ return 1;
-+ }
-+
-+ snprintf(Nup_filename, FILE_NAME_SIZE, "/tmp/hppsfilter-nup.XXXXXX");
-+ Nup_fd = mkstemp(Nup_filename);
-+ if( Nup_fd < 0 )
-+ {
-+ Nup_filename[0] = '\0';
-+ clean_tempfiles();
-+ fprintf(stderr, "ERROR: Unable to create nup temporary file \"%s\"", Nup_filename);
-+ return 1;
-+ }
-+
-+ if( open_tempbookletfile("w") != 0 )
-+ {
-+ clean_tempfiles();
-+ return 1;
-+ }
-+ while( (numBytes = cupsFileGetLine(fp_input, line, sizeof(line))) > 0)
- Dump_tempbookletfile (line, numBytes);
-- fclose(ptempbooklet_file);
-
- /* 2. Perform the booklet operation on the PS file */
- PS_Booklet(temp_filename,booklet_filename,Nup_filename,order,nup,subString,bookletMaker);
-@@ -1040,6 +1125,7 @@ int main (int argc, char **argv)
- if ((fp_bookletinput = cupsFileOpen(Nup_filename, "r")) == NULL)
- {
- fprintf(stderr, "ERROR: Unable to open Nup_filename print file \"%s\"", Nup_filename);
-+ clean_tempfiles();
- return 1;
- }
- while ( (numBytes = cupsFileGetLine(fp_bookletinput, line, sizeof(line))) > 0)
-@@ -1047,21 +1133,7 @@ int main (int argc, char **argv)
- cupsFileClose (fp_bookletinput);
-
- /* 4. Unlink function to remove the temp temporary files created */
-- if( (unlink(booklet_filename)) == -1)
-- {
-- fprintf(stderr, "ERROR: Unable to remove temporary files in /tmp dir \"%s\" ",booklet_filename);
-- return 1;
-- }
-- if( (unlink(temp_filename)) == -1)
-- {
-- fprintf(stderr, "ERROR: Unable to remove temporary files in /tmp dir \"%s\" ",temp_filename);
-- return 1;
-- }
-- if( (unlink(Nup_filename)) == -1)
-- {
-- fprintf(stderr, "ERROR: Unable to remove temporary files in /tmp dir \"%s\" ",Nup_filename);
-- return 1;
-- }
-+ clean_tempfiles();
- booklet_enabled = 0;
- bookletMaker=0;
- }
---
-2.42.1
-