aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuido Falsi <madpilot@FreeBSD.org>2023-02-15 15:43:21 +0000
committerGuido Falsi <madpilot@FreeBSD.org>2023-02-15 15:43:21 +0000
commite65d3de319a7f795e28cfc4f9dcef6e1a5ec396b (patch)
treea6eb7ba072b8ad4b19063f9ca821b037a1bf4aa1
parenta413fd6c74731d21303fabe42e87196eafebfa95 (diff)
downloadports-e65d3de319a7f795e28cfc4f9dcef6e1a5ec396b.tar.gz
ports-e65d3de319a7f795e28cfc4f9dcef6e1a5ec396b.zip
deskutils/calibre: Update to 6.12.0
With this release upstream has decided not to include some prebuilt and bundled parts. So the port now needs to download some extra files, to be able to compile. Also while building calibre now needs to launch parts of itself which creates a temporary directory in LOCALBASE, if it is writable, so clean that up after the build. - Use DIST_SUBDIR, since the port is downloading multiple files now. - Add new dependencies for things not embedded anymore - Remove unneeded EXTRACT_BEFORE_ARGS - Remove references to python2 - Bundle predigested user-agent-data.json file, adding a utility target to easily regenerate it - Move from dead upstream textproc/cchardet to drop-in-ready textproc/py-charset-normalizer [1] Submitted by: fluffy [1]
-rw-r--r--deskutils/calibre/Makefile54
-rw-r--r--deskutils/calibre/distinfo12
-rw-r--r--deskutils/calibre/files/patch-setup_build.py6
-rw-r--r--deskutils/calibre/files/patch-setup_install.py33
-rw-r--r--deskutils/calibre/files/patch-setup_resources.py35
-rw-r--r--deskutils/calibre/files/patch-src_calibre_ebooks_chardet.py11
-rw-r--r--deskutils/calibre/files/user-agent-data.json770
-rw-r--r--deskutils/calibre/pkg-plist3
8 files changed, 905 insertions, 19 deletions
diff --git a/deskutils/calibre/Makefile b/deskutils/calibre/Makefile
index c6bc86aa1140..b7fe3c684eb3 100644
--- a/deskutils/calibre/Makefile
+++ b/deskutils/calibre/Makefile
@@ -1,8 +1,12 @@
PORTNAME= calibre
-PORTVERSION= 6.11.0
-PORTREVISION= 1
+PORTVERSION= 6.12.0
CATEGORIES= deskutils python
-MASTER_SITES= http://download.calibre-ebook.com/${PORTVERSION}/
+MASTER_SITES= http://download.calibre-ebook.com/${PORTVERSION}/ \
+ https://curl.haxx.se/ca/:cacert
+DISTFILES= ${DISTNAME}${EXTRACT_SUFX} \
+ cacert.pem:cacert
+DIST_SUBDIR= ${PORTNAME}
+EXTRACT_ONLY= ${DISTFILES:C/:[^:]+$//:Ncacert.pem}
MAINTAINER= madpilot@FreeBSD.org
COMMENT= Ebook management application
@@ -25,7 +29,9 @@ LIB_DEPENDS= libfontconfig.so:x11-fonts/fontconfig \
libuchardet.so:textproc/uchardet
BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}sqlite3>=0:databases/py-sqlite3@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}dateutil>=0:devel/py-dateutil@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}beautifulsoup>=0:www/py-beautifulsoup@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}lxml>=0:devel/py-lxml@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}mechanize>=0:www/py-mechanize@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}css-parser>=1.0.4:www/py-css-parser@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}apsw>=0:databases/py-apsw@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}msgpack>=0.3:devel/py-msgpack@${PY_FLAVOR} \
@@ -33,7 +39,10 @@ BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}sqlite3>=0:databases/py-sqlite3@${PY_FLAVO
${PYTHON_PKGNAMEPREFIX}html5-parser>=0.4.3:www/py-html5-parser@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pillow>=7.0.0:graphics/py-pillow@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}zeroconf>0:net/py-zeroconf@${PY_FLAVOR} \
- ${LOCALBASE}/bin/cmake:devel/cmake-core
+ ${PYTHON_PKGNAMEPREFIX}pyicu>0:devel/py-pyicu@${PY_FLAVOR} \
+ ${LOCALBASE}/bin/cmake:devel/cmake-core \
+ liberation-fonts-ttf>=2.1.3:x11-fonts/liberation-fonts-ttf \
+ MathJax3>0:www/mathjax3
RUN_DEPENDS= xdg-open:devel/xdg-utils \
${PYTHON_PKGNAMEPREFIX}css-parser>=1.0.4:www/py-css-parser@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}dnspython>=0:dns/py-dnspython@${PY_FLAVOR} \
@@ -49,14 +58,16 @@ RUN_DEPENDS= xdg-open:devel/xdg-utils \
${PYTHON_PKGNAMEPREFIX}msgpack>=0.3:devel/py-msgpack@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}regex>=0:textproc/py-regex@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}markdown>=0:textproc/py-markdown@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}cchardet>=0:textproc/py-cchardet@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}charset-normalizer>=0:textproc/py-charset-normalizer@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}html5-parser>=0.4.3:www/py-html5-parser@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}feedparser>=6.0.8:textproc/py-feedparser@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}jeepney>=0.6:devel/py-jeepney@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pillow>=7.0.0:graphics/py-pillow@${PY_FLAVOR} \
pdftohtml:graphics/poppler-utils \
${PYTHON_PKGNAMEPREFIX}zeroconf>0:net/py-zeroconf@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}pycryptodome>0:security/py-pycryptodome@${PY_FLAVOR}
+ ${PYTHON_PKGNAMEPREFIX}pycryptodome>0:security/py-pycryptodome@${PY_FLAVOR} \
+ liberation-fonts-ttf>=2.1.3:x11-fonts/liberation-fonts-ttf\
+ MathJax3>0:www/mathjax3
USES= desktop-file-utils gettext-runtime gl gnome localbase:ldflags \
pkgconfig pyqt:6 python:3.8+ qt:6 shared-mime-info shebangfix \
@@ -69,11 +80,12 @@ USE_GL= egl gl
USE_GNOME= glib20
USE_XORG= xrender xext x11
-EXTRACT_BEFORE_ARGS= -x -s '/^calibre/~-src/' -f
+USE_GITHUB= nodefault
+GH_TUPLE= kovidgoyal:calibre-translations:cdd2a2e:translations \
+ LibreOffice:dictionaries:1b6575d:hypenation
+
SHEBANG_GLOB= *.sh *.py *.recipe
-python_OLD_CMD= "/usr/bin/env python2" "/usr/bin/env python2" "/usr/bin/env python" /bin/python2 \
- /usr/bin/python2 ${LOCALBASE}/bin/python3
-WRKSRC= ${WRKDIR}/${PORTNAME}-src-${PORTVERSION}
+python_OLD_CMD= "/usr/bin/env python" ${LOCALBASE}/bin/python3
MAKE_ENV+= FC_INC_DIR="${LOCALBASE}/include/fontconfig" \
FC_LIB_DIR="${LOCALBASE}/lib" \
OVERRIDE_CFLAGS="${CFLAGS}" \
@@ -88,11 +100,15 @@ MAKE_ENV+= FC_INC_DIR="${LOCALBASE}/include/fontconfig" \
QMAKE=${QMAKE} \
SIP_BIN=${SIP} \
SIP_DIR=${PYQT_SIPDIR} \
- CALIBRE_PY3_PORT=1
+ PYTHONDONTWRITEBYTECODE=true
+
+post-extract:
+ @${MV} ${WRKSRC_translations} ${WRKSRC}/src/translations
+ @${CP} ${DISTDIR}/${DIST_SUBDIR}/cacert.pem ${WRKSRC}/resources/mozilla-ca-certs.pem
+ @${CP} ${FILESDIR}/user-agent-data.json ${WRKSRC}/resources
post-patch:
@${REINPLACE_CMD} -e "s|#!/usr/bin/env python{py_major_version}|#!${PYTHON_CMD}|" \
- -e "s|#!/usr/bin/env python2|#!${PYTHON_CMD}|" \
-e "s|#!/usr/bin/env python|#!${PYTHON_CMD}|" \
${WRKSRC}/setup/install.py \
${WRKSRC}/src/calibre/gui2/dialogs/custom_recipes.py \
@@ -104,7 +120,14 @@ do-configure:
do-build:
@${MKDIR} ${WRKDIR}/calibre-config ${WRKDIR}/xdg-config
@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} \
- ${PYSETUP} build)
+ ${PYSETUP} bootstrap \
+ --system-liberation_fonts \
+ --path-to-liberation_fonts=${LOCALBASE}/share/fonts/Liberation \
+ --system-mathjax \
+ --path-to-mathjax=${LOCALBASE}/www/MathJax3 \
+ --path-to-hyphenation=${WRKSRC_hypenation} \
+ )
+ @${RMDIR} ${LOCALBASE}/libexec/qt6/locales 2>/dev/null || ${TRUE}
do-install:
@${MKDIR} ${STAGEDIR}${PREFIX}/lib/${PYTHON_VERSION}/site-packages \
@@ -122,4 +145,9 @@ do-install:
@${RMDIR} ${STAGEDIR}${PREFIX}/share/desktop-directories
@${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/calibre/calibre/plugins/*
+update-recent-uas:
+ @(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} \
+ ${PYSETUP} recent_uas)
+ ${CP} ${BUILD_WRKSRC}/resources/user-agent-data.json ${FILESDIR}
+
.include <bsd.port.mk>
diff --git a/deskutils/calibre/distinfo b/deskutils/calibre/distinfo
index 78a81a53ffa5..1fd87701b5b5 100644
--- a/deskutils/calibre/distinfo
+++ b/deskutils/calibre/distinfo
@@ -1,3 +1,9 @@
-TIMESTAMP = 1673519124
-SHA256 (calibre-6.11.0.tar.xz) = ca5399e658c0e6e05bd9b5ffa8586c98f416e9d255107f63c50691daef02e167
-SIZE (calibre-6.11.0.tar.xz) = 42603028
+TIMESTAMP = 1676140665
+SHA256 (calibre/calibre-6.12.0.tar.xz) = 34718a92ad7aa53549ef80dfaa042e2ff162c418aa0420978a6efd626757757c
+SIZE (calibre/calibre-6.12.0.tar.xz) = 22753352
+SHA256 (calibre/cacert.pem) = fb1ecd641d0a02c01bc9036d513cb658bbda62a75e246bedbc01764560a639f0
+SIZE (calibre/cacert.pem) = 216583
+SHA256 (calibre/kovidgoyal-calibre-translations-cdd2a2e_GH0.tar.gz) = 8a436edccd5b01078083637a00e86045bc446b44065b66e67490f5bb544a42b0
+SIZE (calibre/kovidgoyal-calibre-translations-cdd2a2e_GH0.tar.gz) = 71153222
+SHA256 (calibre/LibreOffice-dictionaries-1b6575d_GH0.tar.gz) = 7e2587b75d06cad20ce887910f09ae0ef323369069206971c6cf4f6f3fcadae6
+SIZE (calibre/LibreOffice-dictionaries-1b6575d_GH0.tar.gz) = 94695879
diff --git a/deskutils/calibre/files/patch-setup_build.py b/deskutils/calibre/files/patch-setup_build.py
index bda38070c980..e5115425aed6 100644
--- a/deskutils/calibre/files/patch-setup_build.py
+++ b/deskutils/calibre/files/patch-setup_build.py
@@ -1,8 +1,8 @@
---- setup/build.py.orig 2020-12-12 08:56:45 UTC
+--- setup/build.py.orig 2023-02-03 02:11:49 UTC
+++ setup/build.py
-@@ -495,6 +495,7 @@ exceptions = {needs_exceptions}
+@@ -682,6 +682,7 @@ sip-file = "{os.path.basename(sipf)}"
include-dirs = {ext.inc_dirs}
- qmake-QT = ["widgets"]
+ qmake-QT = {ext.qt_modules}
sip-file = "{os.path.basename(sipf)}"
+tags = ["WS_X11"]
''')
diff --git a/deskutils/calibre/files/patch-setup_install.py b/deskutils/calibre/files/patch-setup_install.py
new file mode 100644
index 000000000000..a7083c0da5fb
--- /dev/null
+++ b/deskutils/calibre/files/patch-setup_install.py
@@ -0,0 +1,33 @@
+--- setup/install.py.orig 2023-02-03 02:11:49 UTC
++++ setup/install.py
+@@ -357,29 +357,11 @@ class Bootstrap(Command):
+
+ description = 'Bootstrap a fresh checkout of calibre from git to a state where it can be installed. Requires various development tools/libraries/headers'
+ TRANSLATIONS_REPO = 'kovidgoyal/calibre-translations'
+- sub_commands = 'build iso639 iso3166 translations gui resources cacerts recent_uas'.split()
++ sub_commands = 'build iso639 iso3166 translations gui resources cacerts'.split()
+
+ def add_options(self, parser):
+ parser.add_option('--ephemeral', default=False, action='store_true',
+ help='Do not download all history for the translations. Speeds up first time download but subsequent downloads will be slower.')
+-
+- def pre_sub_commands(self, opts):
+- tdir = self.j(self.d(self.SRC), 'translations')
+- clone_cmd = [
+- 'git', 'clone', f'https://github.com/{self.TRANSLATIONS_REPO}.git', 'translations']
+- if opts.ephemeral:
+- if os.path.exists(tdir):
+- shutil.rmtree(tdir)
+-
+- st = time.time()
+- clone_cmd.insert(2, '--depth=1')
+- subprocess.check_call(clone_cmd, cwd=self.d(self.SRC))
+- print('Downloaded translations in %d seconds' % int(time.time() - st))
+- else:
+- if os.path.exists(tdir):
+- subprocess.check_call(['git', 'pull'], cwd=tdir)
+- else:
+- subprocess.check_call(clone_cmd, cwd=self.d(self.SRC))
+
+ def run(self, opts):
+ self.info('\n\nAll done! You should now be able to run "%s setup.py install" to install calibre' % sys.executable)
diff --git a/deskutils/calibre/files/patch-setup_resources.py b/deskutils/calibre/files/patch-setup_resources.py
new file mode 100644
index 000000000000..de06cd017327
--- /dev/null
+++ b/deskutils/calibre/files/patch-setup_resources.py
@@ -0,0 +1,35 @@
+--- setup/resources.py.orig 2023-02-03 02:11:49 UTC
++++ setup/resources.py
+@@ -142,19 +142,19 @@ class CACerts(Command): # {{{
+ except OSError as err:
+ if err.errno != errno.ENOENT:
+ raise
+- raw = b''
+- nraw = download_securely('https://curl.haxx.se/ca/cacert.pem')
+- if not nraw:
+- raise RuntimeError('Failed to download CA cert bundle')
+- if nraw != raw:
+- self.info('Updating Mozilla CA certificates')
+- with open(self.CA_PATH, 'wb') as f:
+- f.write(nraw)
+- self.verify_ca_certs()
+-
+- def verify_ca_certs(self):
+- from calibre.utils.https import get_https_resource_securely
+- get_https_resource_securely('https://calibre-ebook.com', cacerts=self.b(self.CA_PATH))
++# raw = b''
++# nraw = download_securely('https://curl.haxx.se/ca/cacert.pem')
++# if not nraw:
++# raise RuntimeError('Failed to download CA cert bundle')
++# if nraw != raw:
++# self.info('Updating Mozilla CA certificates')
++# with open(self.CA_PATH, 'wb') as f:
++# f.write(nraw)
++# self.verify_ca_certs()
++#
++# def verify_ca_certs(self):
++# from calibre.utils.https import get_https_resource_securely
++# get_https_resource_securely('https://calibre-ebook.com', cacerts=self.b(self.CA_PATH))
+ # }}}
+
+
diff --git a/deskutils/calibre/files/patch-src_calibre_ebooks_chardet.py b/deskutils/calibre/files/patch-src_calibre_ebooks_chardet.py
new file mode 100644
index 000000000000..d71ea85d0ae6
--- /dev/null
+++ b/deskutils/calibre/files/patch-src_calibre_ebooks_chardet.py
@@ -0,0 +1,11 @@
+--- src/calibre/ebooks/chardet.py.orig 2023-01-17 15:04:24 UTC
++++ src/calibre/ebooks/chardet.py
+@@ -109,7 +109,7 @@ def detect(bytestring):
+ from calibre_extensions.uchardet import detect as implementation
+ except ImportError:
+ # People running from source without updated binaries
+- from cchardet import detect as cdi
++ from charset_normalizer import detect as cdi
+
+ def implementation(x):
+ return cdi(x).get('encoding') or ''
diff --git a/deskutils/calibre/files/user-agent-data.json b/deskutils/calibre/files/user-agent-data.json
new file mode 100644
index 000000000000..5e9c8978acd2
--- /dev/null
+++ b/deskutils/calibre/files/user-agent-data.json
@@ -0,0 +1,770 @@
+{
+ "chrome_versions": [
+ {
+ "chrome_version": "110.0.5481",
+ "date": "2023-02-07",
+ "webkit_version": "110"
+ },
+ {
+ "chrome_version": "109.0.5414",
+ "date": "2023-01-10",
+ "webkit_version": "109"
+ },
+ {
+ "chrome_version": "108.0.5359",
+ "date": "2022-11-29",
+ "webkit_version": "108"
+ },
+ {
+ "chrome_version": "107.0.5304",
+ "date": "2022-10-24",
+ "webkit_version": "107"
+ },
+ {
+ "chrome_version": "106.0.5249",
+ "date": "2022-09-27",
+ "webkit_version": "106"
+ },
+ {
+ "chrome_version": "105.0.5195",
+ "date": "2022-08-30",
+ "webkit_version": "105"
+ },
+ {
+ "chrome_version": "104.0.5112",
+ "date": "2022-08-02",
+ "webkit_version": "104"
+ },
+ {
+ "chrome_version": "103.0.5060",
+ "date": "2022-06-21",
+ "webkit_version": "103"
+ },
+ {
+ "chrome_version": "102.0.5005",
+ "date": "2022-05-24",
+ "webkit_version": "102"
+ },
+ {
+ "chrome_version": "101.0.4951",
+ "date": "2022-04-26",
+ "webkit_version": "101"
+ },
+ {
+ "chrome_version": "100.0.4896",
+ "date": "2022-03-29",
+ "webkit_version": "100"
+ },
+ {
+ "chrome_version": "99.0.4844",
+ "date": "2022-03-01",
+ "webkit_version": "99"
+ },
+ {
+ "chrome_version": "98.0.4758",
+ "date": "2022-02-01",
+ "webkit_version": "98"
+ },
+ {
+ "chrome_version": "97.0.4692",
+ "date": "2022-01-04",
+ "webkit_version": "97"
+ },
+ {
+ "chrome_version": "96.0.4664",
+ "date": "2021-11-09",
+ "webkit_version": "96"
+ },
+ {
+ "chrome_version": "95.0.4638",
+ "date": "2021-10-19",
+ "webkit_version": "95"
+ },
+ {
+ "chrome_version": "94.0.4606",
+ "date": "2021-09-21",
+ "webkit_version": "94"
+ },
+ {
+ "chrome_version": "93.0.4577",
+ "date": "2021-08-31",
+ "webkit_version": "93"
+ },
+ {
+ "chrome_version": "92.0.4515",
+ "date": "2021-07-20",
+ "webkit_version": "92"
+ },
+ {
+ "chrome_version": "91.0.4472",
+ "date": "2021-05-25",
+ "webkit_version": "91"
+ },
+ {
+ "chrome_version": "90.0.4430",
+ "date": "2021-04-13",
+ "webkit_version": "90"
+ },
+ {
+ "chrome_version": "89.0.4389",
+ "date": "2021-03-02",
+ "webkit_version": "89"
+ },
+ {
+ "chrome_version": "88.0.4324",
+ "date": "2021-01-19",
+ "webkit_version": "88"
+ },
+ {
+ "chrome_version": "87.0.4280",
+ "date": "2020-11-17",
+ "webkit_version": "87"
+ },
+ {
+ "chrome_version": "86.0.4240",
+ "date": "2020-09-30",
+ "webkit_version": "86"
+ },
+ {
+ "chrome_version": "85.0.4183",
+ "date": "2020-08-25",
+ "webkit_version": "85"
+ },
+ {
+ "chrome_version": "84.0.4147",
+ "date": "2020-07-14",
+ "webkit_version": "84"
+ },
+ {
+ "chrome_version": "83.0.4103",
+ "date": "2020-05-19",
+ "webkit_version": "83"
+ },
+ {
+ "chrome_version": "81.0.4044",
+ "date": "2020-04-07",
+ "webkit_version": "81"
+ },
+ {
+ "chrome_version": "80.0.3987",
+ "date": "2020-02-04",
+ "webkit_version": "80"
+ },
+ {
+ "chrome_version": "79.0.3945",
+ "date": "2019-12-10",
+ "webkit_version": "79"
+ },
+ {
+ "chrome_version": "78.0.3904",
+ "date": "2019-10-22",
+ "webkit_version": "78"
+ },
+ {
+ "chrome_version": "77.0.3865",
+ "date": "2019-09-10",
+ "webkit_version": "77"
+ },
+ {
+ "chrome_version": "76.0.3809",
+ "date": "2019-07-30",
+ "webkit_version": "76"
+ },
+ {
+ "chrome_version": "75.0.3770",
+ "date": "2019-06-04",
+ "webkit_version": "75"
+ },
+ {
+ "chrome_version": "74.0.3729",
+ "date": "2019-04-23",
+ "webkit_version": "74"
+ },
+ {
+ "chrome_version": "73.0.3683",
+ "date": "2019-03-12",
+ "webkit_version": "73"
+ },
+ {
+ "chrome_version": "72.0.3626",
+ "date": "2019-01-29",
+ "webkit_version": "72"
+ },
+ {
+ "chrome_version": "71.0.3578",
+ "date": "2018-12-04",
+ "webkit_version": "71"
+ },
+ {
+ "chrome_version": "70.0.3538",
+ "date": "2018-10-16",
+ "webkit_version": "70"
+ },
+ {
+ "chrome_version": "69.0.3497",
+ "date": "2018-09-04",
+ "webkit_version": "69"
+ },
+ {
+ "chrome_version": "68.0.3440",
+ "date": "2018-07-24",
+ "webkit_version": "68"
+ },
+ {
+ "chrome_version": "67.0.3396",
+ "date": "2018-05-29",
+ "webkit_version": "67"
+ },
+ {
+ "chrome_version": "66.0.3359",
+ "date": "2018-04-17",
+ "webkit_version": "66"
+ },
+ {
+ "chrome_version": "65.0.3325",
+ "date": "2018-03-06",
+ "webkit_version": "65"
+ },
+ {
+ "chrome_version": "64.0.3282",
+ "date": "2018-01-23",
+ "webkit_version": "64"
+ },
+ {
+ "chrome_version": "63.0.3239",
+ "date": "2017-12-05",
+ "webkit_version": "63"
+ },
+ {
+ "chrome_version": "62.0.3202",
+ "date": "2017-10-17",
+ "webkit_version": "62"
+ },
+ {
+ "chrome_version": "61.0.3163",
+ "date": "2017-09-05",
+ "webkit_version": "61"
+ },
+ {
+ "chrome_version": "60.0.3112",
+ "date": "2017-07-25",
+ "webkit_version": "60"
+ },
+ {
+ "chrome_version": "59.0.3071",
+ "date": "2017-06-05",
+ "webkit_version": "59"
+ },
+ {
+ "chrome_version": "58.0.3029",
+ "date": "2017-04-19",
+ "webkit_version": "58"
+ },
+ {
+ "chrome_version": "57.0.2987",
+ "date": "2017-03-09",
+ "webkit_version": "57"
+ },
+ {
+ "chrome_version": "56.0.2924",
+ "date": "2017-01-25",
+ "webkit_version": "56"
+ },
+ {
+ "chrome_version": "55.0.2883",
+ "date": "2016-12-01",
+ "webkit_version": "55"
+ },
+ {
+ "chrome_version": "54.0.2840",
+ "date": "2016-10-12",
+ "webkit_version": "54"
+ },
+ {
+ "chrome_version": "53.0.2785",
+ "date": "2016-08-31",
+ "webkit_version": "53"
+ },
+ {
+ "chrome_version": "52.0.2743",
+ "date": "2016-07-20",
+ "webkit_version": "52"
+ },
+ {
+ "chrome_version": "51.0.2704",
+ "date": "2016-05-25",
+ "webkit_version": "51"
+ },
+ {
+ "chrome_version": "50.0.2661",
+ "date": "2016-04-13",
+ "webkit_version": "50"
+ },
+ {
+ "chrome_version": "49.0.2623",
+ "date": "2016-03-02",
+ "webkit_version": "49"
+ },
+ {
+ "chrome_version": "48.0.2564",
+ "date": "2016-01-20",
+ "webkit_version": "48"
+ },
+ {
+ "chrome_version": "47.0.2526",
+ "date": "2015-12-01",
+ "webkit_version": "47"
+ },
+ {
+ "chrome_version": "46.0.2490",
+ "date": "2015-10-13",
+ "webkit_version": "46"
+ },
+ {
+ "chrome_version": "45.0.2454",
+ "date": "2015-09-01",
+ "webkit_version": "45"
+ },
+ {
+ "chrome_version": "44.0.2403",
+ "date": "2015-07-21",
+ "webkit_version": "44"
+ },
+ {
+ "chrome_version": "43.0.2357",
+ "date": "2015-05-19",
+ "webkit_version": "43"
+ },
+ {
+ "chrome_version": "42.0.2311",
+ "date": "2015-04-14",
+ "webkit_version": "42"
+ },
+ {
+ "chrome_version": "41.0.2272",
+ "date": "2015-03-03",
+ "webkit_version": "41"
+ },
+ {
+ "chrome_version": "40.0.2214",
+ "date": "2015-01-20",
+ "webkit_version": "40"
+ },
+ {
+ "chrome_version": "39.0.2171",
+ "date": "2014-11-12",
+ "webkit_version": "39"
+ },
+ {
+ "chrome_version": "38.0.2125",
+ "date": "2014-10-07",
+ "webkit_version": "38"
+ },
+ {
+ "chrome_version": "37.0.2062",
+ "date": "2014-08-26",
+ "webkit_version": "37"
+ },
+ {
+ "chrome_version": "36.0.1985",
+ "date": "2014-07-15",
+ "webkit_version": "36"
+ },
+ {
+ "chrome_version": "35.0.1916",
+ "date": "2014-05-20",
+ "webkit_version": "35"
+ },
+ {
+ "chrome_version": "34.0.1847",
+ "date": "2014-04-02",
+ "webkit_version": "34"
+ },
+ {
+ "chrome_version": "33.0.1750",
+ "date": "2014-02-18",
+ "webkit_version": "33"
+ },
+ {
+ "chrome_version": "32.0.1700",
+ "date": "2014-01-14",
+ "webkit_version": "32"
+ },
+ {
+ "chrome_version": "31.0.1650",
+ "date": "2013-11-12",
+ "webkit_version": "31"
+ },
+ {
+ "chrome_version": "30.0.1599",
+ "date": "2013-09-18",
+ "webkit_version": "30"
+ },
+ {
+ "chrome_version": "29.0.1547",
+ "date": "2013-08-20",
+ "webkit_version": "29"
+ },
+ {
+ "chrome_version": "27.0.1453",
+ "date": "2013-05-21",
+ "webkit_version": "537.36"
+ },
+ {
+ "chrome_version": "26.0.1410",
+ "date": "2013-03-26",
+ "webkit_version": "537.31"
+ },
+ {
+ "chrome_version": "25.0.1364",
+ "date": "2013-02-21",
+ "webkit_version": "537.22"
+ },
+ {
+ "chrome_version": "24.0.1312",
+ "date": "2013-01-10",
+ "webkit_version": "537.17"
+ },
+ {
+ "chrome_version": "23.0.1271",
+ "date": "2012-11-06",
+ "webkit_version": "537.11"
+ },
+ {
+ "chrome_version": "22.0.1229",
+ "date": "2012-09-25",
+ "webkit_version": "537.4"
+ },
+ {
+ "chrome_version": "21.0.1180",
+ "date": "2012-07-31",
+ "webkit_version": "537.1"
+ },
+ {
+ "chrome_version": "20.0.1132",
+ "date": "2012-06-26",
+ "webkit_version": "536.10"
+ },
+ {
+ "chrome_version": "19.0.1084",
+ "date": "2012-05-15",
+ "webkit_version": "536.5"
+ },
+ {
+ "chrome_version": "18.0.1025",
+ "date": "2012-03-28",
+ "webkit_version": "535.19"
+ },
+ {
+ "chrome_version": "17.0.963",
+ "date": "2012-02-08",
+ "webkit_version": "535.11"
+ },
+ {
+ "chrome_version": "16.0.912",
+ "date": "2011-12-13",
+ "webkit_version": "535.7"
+ },
+ {
+ "chrome_version": "15.0.874",
+ "date": "2011-10-25",
+ "webkit_version": "535.2"
+ },
+ {
+ "chrome_version": "13.0.782",
+ "date": "2011-08-02",
+ "webkit_version": "535.1"
+ },
+ {
+ "chrome_version": "12.0.742",
+ "date": "2011-06-07",
+ "webkit_version": "534.30"
+ },
+ {
+ "chrome_version": "11.0.696",
+ "date": "2011-04-27",
+ "webkit_version": "534.24"
+ },
+ {
+ "chrome_version": "10.0.648",
+ "date": "2011-03-08",
+ "webkit_version": "534.16"
+ },
+ {
+ "chrome_version": "9.0.597",
+ "date": "2011-02-03",
+ "webkit_version": "534.13"
+ },
+ {
+ "chrome_version": "8.0.552",
+ "date": "2010-12-02",
+ "webkit_version": "534.10"
+ },
+ {
+ "chrome_version": "7.0.517",
+ "date": "2010-10-21",
+ "webkit_version": "534.7"
+ },
+ {
+ "chrome_version": "6.0.472",
+ "date": "2010-09-02",
+ "webkit_version": "534.3"
+ },
+ {
+ "chrome_version": "5.0.375",
+ "date": "2010-05-21",
+ "webkit_version": "533"
+ },
+ {
+ "chrome_version": "4.0.249",
+ "date": "2010-01-25",
+ "webkit_version": "532.5"
+ },
+ {
+ "chrome_version": "3.0.195",
+ "date": "2009-10-12",
+ "webkit_version": "532"
+ },
+ {
+ "chrome_version": "2.0.172",
+ "date": "2009-05-24",
+ "webkit_version": "530"
+ },
+ {
+ "chrome_version": "1.0.154",
+ "date": "2008-12-11",
+ "webkit_version": "528"
+ },
+ {
+ "chrome_version": "0.4.154",
+ "date": "2008-11-24",
+ "webkit_version": "525"
+ }
+ ],
+ "common_user_agents": [
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54",
+ "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.66",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.2 Safari/605.1.15",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0",
+ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.30",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.2 Safari/605.1.15",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.50",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.56",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.68",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.2 Safari/605.1.15",
+ "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.1 Safari/605.1.15",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
+ "Mozilla/5.0 (Linux; Android) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.63"
+ ],
+ "desktop_platforms": [
+ "Windows NT 10.0; WOW64",
+ "Linux; Android",
+ "Windows NT 10.0",
+ "Windows NT 6.1; WOW64",
+ "Windows NT 10.0; Win64; x64"
+ ],
+ "firefox_versions": [
+ "109.0",
+ "108.0",
+ "107.0",
+ "106.0",
+ "105.0",
+ "104.0",
+ "103.0",
+ "102.0",
+ "101.0",
+ "100.0",
+ "99.0",
+ "98.0",
+ "97.0",
+ "96.0",
+ "95.0",
+ "94.0",
+ "93.0",
+ "92.0",
+ "91.0",
+ "90.0",
+ "89.0",
+ "88.0",
+ "87.0",
+ "86.0",
+ "85.0",
+ "84.0",
+ "83.0",
+ "82.0",
+ "81.0",
+ "80.0",
+ "79.0",
+ "78.0",
+ "77.0",
+ "76.0",
+ "75.0",
+ "74.0",
+ "73.0",
+ "72.0",
+ "71.0",
+ "70.0",
+ "69.0",
+ "68.0",
+ "67.0",
+ "66.0",
+ "65.0",
+ "64.0",
+ "63.0",
+ "62.0",
+ "61.0",
+ "60.0",
+ "59.0",
+ "58.0",
+ "57.0",
+ "56.0",
+ "55.0",
+ "54.0",
+ "53.0",
+ "52.0",
+ "51.0",
+ "50.0",
+ "49.0",
+ "48.0",
+ "47.0",
+ "46.0",
+ "45.0",
+ "44.0",
+ "43.0",
+ "42.0",
+ "41.0",
+ "40.0",
+ "39.0",
+ "38.0",
+ "37.0",
+ "36.0",
+ "35.0",
+ "34.0",
+ "33.1",
+ "33.0",
+ "32.0",
+ "31.0",
+ "30.0",
+ "29.0",
+ "28.0",
+ "27.0",
+ "26.0",
+ "25.0",
+ "24.0",
+ "23.0",
+ "22.0",
+ "21.0",
+ "20.0",
+ "19.0",
+ "18.0",
+ "17.0",
+ "16.0",
+ "15.0",
+ "14.0.1",
+ "13.0",
+ "12.0",
+ "11.0",
+ "10.0",
+ "9.0",
+ "8.0",
+ "7.0",
+ "6.0",
+ "5.0",
+ "4.0",
+ "3.6",
+ "3.5",
+ "3.0",
+ "2.0",
+ "1.5",
+ "1.0",
+ "0.1"
+ ],
+ "timestamp": "2023-02-11T21:18:24.696207+00:00",
+ "user_agents_popularity": {
+ "Mozilla/5.0 (Linux; Android) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36": 13268,
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.2 Safari/605.1.15": 37346,
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.1 Safari/605.1.15": 14526,
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.2 Safari/605.1.15": 65322,
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15": 138181,
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.2 Safari/605.1.15": 19498,
+ "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36": 16083,
+ "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36": 94748,
+ "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko": 2594522,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36": 252239,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36": 113155,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54": 95611,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36": 71913,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36": 23230,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36": 74658,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36": 3914561,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36": 14157,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36": 248851,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75": 73762,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36": 218732,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.66": 74734,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36": 104050,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36": 38454,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36": 123096,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.63": 13111,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.68": 24592,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36": 71882,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36": 153597,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.50": 26553,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.56": 25704,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36": 102464,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36": 78701,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36": 46955,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36": 152433,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36": 162655,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36": 154649,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36": 136559,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36": 108700,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36": 74643,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.30": 48663,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0": 59502,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0": 22867,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0": 224631,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0": 156831,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0": 165825,
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0": 55692,
+ "Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0": 38764,
+ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36": 53520,
+ "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko": 16030
+ }
+}
diff --git a/deskutils/calibre/pkg-plist b/deskutils/calibre/pkg-plist
index ffc3268bf297..822a564add26 100644
--- a/deskutils/calibre/pkg-plist
+++ b/deskutils/calibre/pkg-plist
@@ -1063,6 +1063,8 @@ lib/calibre/calibre/gui2/tts/macos.py
lib/calibre/calibre/gui2/tts/macos_config.py
lib/calibre/calibre/gui2/tts/windows.py
lib/calibre/calibre/gui2/tts/windows_config.py
+lib/calibre/calibre/gui2/tts/windows_sapi.py
+lib/calibre/calibre/gui2/tts/windows_sapi_config.py
lib/calibre/calibre/gui2/tweak_book/__init__.py
lib/calibre/calibre/gui2/tweak_book/boss.py
lib/calibre/calibre/gui2/tweak_book/char_select.py
@@ -1387,6 +1389,7 @@ lib/calibre/calibre/utils/unsmarten.py
lib/calibre/calibre/utils/webengine.py
lib/calibre/calibre/utils/windows/__init__.py
lib/calibre/calibre/utils/windows/winsapi.py
+lib/calibre/calibre/utils/windows/winspeech.py
lib/calibre/calibre/utils/windows/wintest.py
lib/calibre/calibre/utils/winreg/__init__.py
lib/calibre/calibre/utils/winreg/dde.py