Commit Graph

41191 Commits

Author SHA1 Message Date
Joerg Bornemann
7b82d27429 Fix library suffix replacement for xcode projects
In xcode projects we replace the _debug part of referenced libraries with the
variable $(QT_LIBRARY_SUFFIX). This only worked for libraries passed with -l.

Make the library suffix replacement work for libraries passed as absolute paths
too.

Fixes: QTBUG-77804
Change-Id: Iac2dbd2f67c3fa0f415ac43cbab5a906657164e5
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2019-08-31 07:56:54 +00:00
Qt Forward Merge Bot
364b9c80de Merge "Merge remote-tracking branch 'origin/5.12' into 5.13" 2019-08-31 01:00:59 +02:00
Qt Forward Merge Bot
3176c821bf Merge remote-tracking branch 'origin/5.12' into 5.13
Change-Id: I9823da32168e99bbece2f8337d0bd4d33e6d634c
2019-08-31 01:00:48 +02:00
Marc Mutz
e45e6efa72 QTouchDevice: don't play ping-pong with q*PostRoutine()
Removing a qPostRoutine is an O(N) operation. It's perfectly ok to
keep calling it even if the list has become empty before.

Just qAddPostRoutine in the deviceList's ctor and never remove it
again.

Add a missing qAsConst as a drive-by.

Change-Id: I25f824b74012146214568cfccb22c5dba3ca38ef
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
2019-08-30 22:38:37 +02:00
BogDan Vatra
65dfc485ad Android: clean configure params for android
-android-toolchain-version is not needed anymore as we are using exclusively the llvm toolchain.

Change-Id: Ia033297a6a2c968352c364758eb1436380a5f96e
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
2019-08-30 22:29:14 +03:00
Mårten Nordheim
6b884d2aa1 QByteArray: Don't realloc when resizing to a smaller size
The same change was done for QVector and QString for 5.6 while
QByteArray was not done/forgotten. For the sake of consistency
we should converge on one type of behavior.

The change mirrors the one for QString:
50ab7c16d4

[ChangeLog][QtCore][QByteArray] resize() will no longer shrink the
capacity. That means resize(0) now reliably preserves capacity().

Change-Id: I4fcfa92f75fa472af0eaab567e1cdd62e6d336b0
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2019-08-30 19:26:41 +00:00
Rainer Keller
1232205e32 Fix crash when text contains too many directional chars
In case a text to be layouted contains more than 128 directional characters
it causes the application to crash

The function initScriptAnalysisAndIsolatePairs() collects information of
RTL/LTR chaaracters into vector "isolatePairs". The size of the vector is
capped to 128. Later the function generateDirectionalRuns() iterates
the text again and tries to access items from the previously capped vector
above the upper bound.

Task-number: QTBUG-77819
Change-Id: Ibb7bf12c12b1db22f43ff46236518da3fdeed26a
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-08-30 21:17:32 +02:00
Joerg Bornemann
c53f843001 Doc: Clarify QJsonDocument::toJson()
Mention that this method returns an indented document.

Change-Id: I0cadcc1c894c9a87910cfce389c6a5288238044d
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
2019-08-30 16:21:10 +02:00
Mårten Nordheim
e75c691d07 QArrayData: Don't allocate space we cannot use
When reallocating we assume we will grow more and increase the size to
the next power of 2. However, this might be a size where we end up with
space we cannot take advantage of. Such as having 4 bytes free at the
tail when we have 8 byte objects. The larger the objects are the greater
the chance is that we will end up in this situation, and it would have
a greater chance to leave big allocated chunks unused.

Change-Id: Ifea3d92763c1bafd489b66605c741447e5a57d5a
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2019-08-30 14:33:06 +02:00
Volker Hilsheimer
64ed4081ca QSystemTrayIcon on macOS: support the timeout hint in showMessage
If set, schedule a call to remove the notification (NSTimeInterval is
specified in seconds). The system might hide the notification balloon
earlier, but the notification will still be removed from the message
center after the specified interval.

Task-number: QTBUG-77150
Change-Id: I510e412beb16e9de271290798f3e66310f44df4f
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2019-08-30 14:17:32 +02:00
Volker Hilsheimer
c66732b979 QSystemTrayIcon: on macOS, hide messages when the user clicks them
This is default behavior on macOS, and also the behavior on Windows.

[ChangeLog][QtWidgets][QSystemTrayIcon] On macOS, clicking on the
message will remove the notification.

Change-Id: Ie30f7dacf478af76ccb53d16aea8f122869072c8
Fixes: QTBUG-77150
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2019-08-30 14:17:28 +02:00
Volker Hilsheimer
43a1db6855 Fix the documentation - QSystemTrayIcon::messageClicked works on macOS
Trivially reproduced by the systray example.

Task-number: QTBUG-77150
Change-Id: I888db728741c35e8b0378c38c8747ad163cad47d
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2019-08-30 14:17:23 +02:00
Edward Welbourne
fc49d73c44 Fix spelling of primarily in QCalendar::isSolar()'s doc
It was missing a y.

Change-Id: I12dac02e451addff966f554811ca1999acadbb1b
Reviewed-by: Jesus Fernandez <jsfdez@gmail.com>
2019-08-30 13:57:20 +02:00
Volker Hilsheimer
ca3be92234 Remove QFileInfo::type and related enum from 5.14
The API is problematic for several reasons:
- the mixing of flags and enum in a single enum type
- the name "type" as somewhat overloaded
- the ease of misuse when comparing the result rather than testing
  for a bit being set

In light of this, focus for 5.14 on the new isShortcut and
isSymbolicLink functions, thus migitating the problematic
isSymLink which conflates the two concepts.

Change-Id: I57e02321edd5061f69a775f04a0932ef89adf866
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2019-08-30 13:20:07 +02:00
Shawn Rutledge
f00bbd5eb7 Update QPA mouse event handling in offscreen and VNC plugins
This is needed after a37785ec76
deprecated the versions of QWindowSystemInterface::handleMouseEvent()
that were in use here.

Change-Id: Ib704ae2be905436f5a4a80ae6686b5fe3972d34c
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2019-08-30 12:40:31 +02:00
Edward Welbourne
acd7259a03 Extend QDate's benchmark
Test more methods.
Document what the existing test covers.
Use the right #include for QDate.

Change-Id: I051542c244e5bc381aafa3ae38144e246919db7a
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2019-08-30 11:22:07 +02:00
Edward Welbourne
14aa481614 Convert foreach to ranged for in QDateTime benchmark
Change-Id: I05cf7b1916afa94a9f0f9b83af9b4ebe20a04cf0
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2019-08-30 11:09:59 +02:00
Edward Welbourne
0556366ddb Deduplicate list-building code in QDateTime benchmark
Aside from the start-date and the end-date, and a variant with a
time-zone, the lists various tests were building were all built the
same way; so pack that up as a pair of functions (one without
time-zone, one with) to save duplication. Make the list in each
function const, ready for conversion of foreach loops to ranged for.

In the process, replace QList with QVector, reserve space before we
populate and use auto for the now-const list variables it's saved in.

Change-Id: I7d8cce459a4d6111cd645e8d3966ad769ab7e201
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2019-08-30 11:09:36 +02:00
Marc Mutz
c78a716b72 QDateTimeParser: replace QVector with QVarLengthArray<12>
The lists of month and day-of-week names usually currently do not
exceed 13 elements (incl. possible leap months), so don't use
QVector, use QVarLengthArray with Prealloc = 13.

This value may be increased when ISO week-as-month is merged, but
the container remains valid even with 52 "months" (though the code
that calculates its runtime size will naturally need to be adjusted).

Change-Id: I4ead897d933f89fc092850fcc22ca41da0a6ddc6
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2019-08-30 09:06:34 +00:00
Edward Welbourne
54f6c9bfd9 Fix unused variable warnings in QDateTime benchmark
Change-Id: Id123ace74cfa7b5ff406eabbfda0aad9f58c3fd4
Reviewed-by: David Faure <david.faure@kdab.com>
2019-08-30 10:55:46 +02:00
Edward Welbourne
06f69700af Fix some bogus date calculations in QDateTime's benchmark
Multiplying a Julian Day number by the number of milliseconds per day
does not get you a time since the start of 1970; it gets you a time
since the start of the Julian Day number system, which was several
millennia earlier.

Change-Id: Ic90a6c3de445baf9cfd30f28dd847f146e6a7adf
Reviewed-by: David Faure <david.faure@kdab.com>
2019-08-30 10:55:12 +02:00
Edward Welbourne
2faa6cafa9 Pass QDate, QTime as value classes, rather than by const reference
This can, of course, only be done in private APIs - but comment on
public APIs to do the same at Qt 6.

Change-Id: I3c79951572be3c37b0b0c5b1b05bced051a40964
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2019-08-30 10:54:27 +02:00
Edward Welbourne
20f69beae4 Optimize QDate by shortcutting some gregorian calendar methods
Add some static methods to QGregorianCalendar, some of which serve to
implement its methods, that QDate can use to bypass vtables and
exploit fixed truths of the Gregorian calendar in its default
handling.

Change-Id: Iec191cdf4d52945dbd5679e609180cb4fe59b5fd
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2019-08-30 10:52:42 +02:00
Fredrik Orderud
7b2dfb37ee Remove hardcoded qt_instdate field from binary
Move hardcoded date to the only client code in the repo.

This field is currently modified by MaintenanceTool and possibly windeployqt,
which contributes to breaking the DLL signature on Windows. Removing the field
should avoid this problem.

Task-number: QTBUG-76985
Change-Id: I01386136ac493ea50c99c05879a3e215f3f6344c
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2019-08-30 07:03:02 +02:00
Antti Kokko
b2df41b5a8 Add changes file for Qt 5.12.5
Change-Id: Ic3c3c0d934b2f6b8980c165c4a464442fc4cebbc
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2019-08-30 07:00:11 +02:00
Mårten Nordheim
108382e236 Mark QNetworkAccessManager::autoDeleteReplies as const
From the API review.

Amends cd816d4b6a.

Change-Id: I3d3e2ef331501fa498545c5eec0e321544165b0d
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2019-08-29 18:16:52 +02:00
Alex Trotsenko
81408c0e76 QEventDispatcherWin32: avoid livelock in a foreign event loop
According to Windows docs, GetMessage() function retrieves the messages
from the input queue in defined order, where posted messages are
processed ahead of input messages, even if they were posted later.
Therefore, if the application produces a posted event permanently, as
a result of processing that event, user input messages may be blocked
due to hard CPU usage by the application.

It's not a problem, if an internal Qt event loop is running. By calling
sendPostedEvents() on the beginning of processEvents(), we are sending
posted events only once per iteration. However, during execution of
the foreign loop, we should artificially lower the priority of the
WM_QT_SENDPOSTEDEVENTS message in order to enable delivery of other
input messages.

To solve the problem, it is proposed to postpone the
WM_QT_SENDPOSTEDEVENTS message until the message queue becomes empty,
as it works for the internal loop.

Task-number: QTBUG-77464
Change-Id: I8dedb6837c6fc41aa6f497e67ab2352c2b4f3772
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2019-08-29 09:12:29 +00:00
Laszlo Agocs
2602209f54 rhi: vulkan: Introduce secondary command buffer usage
As an option. Must opt in via setting ExternalContentsInPass in
the flags for beginFrame(). It is somewhat unfortunate to require
declaring this up front, but forcing using secondary command buffers
always, even though beginExternal() may not be used in many applications,
would be an overkill.

Change-Id: I8d52bcab40c96f89f140c4c7877b6c459925e3c7
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2019-08-29 10:23:15 +02:00
Laszlo Agocs
0077e0f88c rhi: vulkan: Add missing VK_QUERY_RESULT_WAIT_BIT
Mainly to get the validation layer from newer Vulkan SDKs to shut up.

Change-Id: I3a00d2e7b5617eb1656625b1b2a919bb3c07feb9
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2019-08-29 10:23:05 +02:00
Laszlo Agocs
4e97c4061e rhi: Attempt to fix up the logic around beginExternal()
Mainly for Vulkan where it lacked the recording of the still queued
commands. Uncovered by Qt Quick examples that integrate custom Vulkan
rendering.

This still has an issue that needs to be tackled separately. (we probably
will switch to using a dedicated secondary command buffer with
RENDER_PASS_CONTINUE_BIT for the external commands, and then just have
a vkCmdExecuteCommands in our own queue instead of recording everything in
beginExternal).

The possibility of losing glMemoryBarrier() calls due to begin/endExternal()
with the OpenGL backend is fixed too. The logic here mirrors Vulkan
to some extent except that we do not have a concept of (and so the trouble
with) renderpass instances.

Clean up around the implementations of finish() as well. Attempting to share
code via a "flushCommandBuffer" function is admirable but is not worth it
since some semantics are different. (finish() cannot be called within a
begin/endPass, unlike begin/endExternal).

Change-Id: I5137db598d6a40d484e53678f5c919abf750d9ed
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2019-08-29 10:22:56 +02:00
Laszlo Agocs
2d7fc7a152 rhi: vulkan: Expose the VkRenderPass via the usual mechanisms
Qt Quick in turn will expose it via QSGRendererInterface. Essential when
adding custom Vulkan rendering into a Qt Quick application because the
custom pipeline state objects will need to reference a VkRenderPass.

Change-Id: Idf4092cfc3937830fb8123164081059b0d8d030e
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2019-08-29 10:22:41 +02:00
Volker Hilsheimer
d6551fe125 QTree/TableView: Don't emit clicked when releasing after double click
If an item is double clicked, then without this fix, the views emit the
clicked() signal when the mousebutton is released after the double click
event. This is unexpected and wrong.

QAbstractItemView keeps track of the item the mouse was pressed on, to
verify that the release occurred on the same item before emitting
clicked, and to make sure we have a valid pressed item before initiating
drag'n'drop. By resetting d->pressedItem when a double click has been
handled, we can prevent the emission of a clicked signal in the next
release event.

[ChangeLog][QtWidgets][QTreeView] Don't emit clicked signal after a
doubleClicked signal.

Fixes: QTBUG-77771
Change-Id: I05988e9e2222157f4216cebc40c22507e8d83b82
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
Reviewed-by: Jesus Fernandez <jsfdez@gmail.com>
2019-08-29 09:52:10 +02:00
BogDan Vatra
c28b881c98 Android: Use LLVM tools where possible
Properly set CROSS_COMPILE qmake variable

Fixes: QTBUG-77890
Change-Id: I73e22d0f936d35c373c064d30ea8d92005d79b2c
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
2019-08-29 09:45:37 +03:00
BogDan Vatra
8e54fc0880 Android: AUX template doesn't require a multi arch build
Change-Id: I7b7abe7f016b4b85546986354653fc4ddf320dcc
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
2019-08-29 09:45:34 +03:00
Rainer Keller
02a6209487 Fix invalid end range appended to HTTP request
When the end range of a byte range in a HTTP request is skipped the download
manager adds 0 it its place when resuming that download.

When there is no end range given the value is skipped.

Task-number: QTBUG-77867
Change-Id: I52358c94cf56c88217fcc91abb102ed393ac7242
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2019-08-28 15:34:08 +02:00
Tor Arne Vestbø
0844be34ba iOS: Skip explicit dead code stripping when generating Xcode projects
Fixes: QTBUG-73680
Change-Id: I5d17ef6321bb1f800c39c3f80dca9527ad343d12
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
2019-08-28 13:58:39 +02:00
Kai Koehne
351f6eb52b Add Third-Party code in qregion.cpp to qt_attribution.json file
This makes it visible also in the overview documentation of the module,
and can be used to automatically generate attribution documents.

The code actually mentions the names and file versions (CVS?) where things
got copied from; however, X11 seems to have stopped using CVS a long time
ago, and without a server it's hard to determine the exact X11 version that
was copied from. It arguably doesn't matter, anyhow, because we won't update
the code anymore.

Fixes: QTBUG-70556
Change-Id: Ib17117a1a3c4112b81982afbd51273048a43221a
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2019-08-28 13:40:02 +02:00
Tor Arne Vestbø
79bf1b7e34 widgets: Mark widgets as needing flush during painting
Except for the case of syncing in response to an expose event,
where the platform asked us to flush a specific region, we
should strive to only flush parts that have been repainted.

And we should flush those parts to their nearest native child,
instead of unconditionally flushing the root/top level widget
as well.

By allowing drawWidget to schedule the flush we automatically
flush the minimal region, to the right widgets.

Change-Id: I73c143761d4a0da6991433b41dea0a0bc83a448a
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
2019-08-28 13:22:59 +02:00
Tor Arne Vestbø
984df39c79 widgets: Add logging for widget painting
Change-Id: I551ec290812369e3848c1096fed7e813cd9e1cd6
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
2019-08-28 13:22:50 +02:00
Karsten Heimrich
375f565060 Fix reporting the network interface type on macOS 10.14.5 and later
* initialize the structure used as argument to ioctl SIOCGIFMEDIA

The ioctl in ifType(...) returned -1 and set errno to EFAULT, thus
the code to determine the interface type was not executed.

Task-number: QTBUG-76408
Change-Id: Ib69c2c0cd4dda3604d568adf9746e0c9a280e9a0
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
Reviewed-by: Christian Ehrlicher <ch.ehrlicher@gmx.de>
2019-08-28 13:05:18 +02:00
Christian Ehrlicher
271d3bae38 QGraphicsItem: mark GraphicsItemChange::ItemMatrixChange as deprecated
The enum GraphicsItemChange::ItemMatrixChange is deprecated since Qt4
times. The corresponding matrix functions were also marked as deprecated
in 5.13 but the enum was forgotten. Therefore also mark it as deprecated
so it can be removed with Qt6.

Change-Id: I39bec89af14aaefe2e504f5a890ef314574766a1
Reviewed-by: Andreas Aardal Hanssen <andreas@hanssen.name>
2019-08-28 13:04:21 +02:00
BogDan Vatra
0315e1945e Android: install qmlfiles only for first ABI
qmlfiles are the same for all ABIs, and installing them for all leads to race condition

Change-Id: I69fe062f59f1d7c028dff5212e2f2fac7e71398d
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
2019-08-28 13:50:31 +03:00
BogDan Vatra
3db14b5bd3 Say hello to -android-abis configure param
This configure parameter is useful to compile Qt only for a selected ABIs.

The old parameter, -android-arch, does the same thing, it's kept for compatibility.

[ChangeLog][Android] -android-abis configure script parameter useful to compile Qt
only for a selected Android ABIs.

Change-Id: I1f418c7e0914dd83b98d763e8cd8c09841e20fdf
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2019-08-28 12:36:34 +03:00
Tor Arne Vestbø
3542fc4958 widgets: Simplify QWidgetRepaintManager::flush
Change-Id: Icba88fa068aac2ac5d8bb04e46a3e3f34e279a48
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
2019-08-28 10:41:29 +02:00
Ulf Hermann
26afc5c9b1 Provide conversion between QVariant and QUuid in bootstrap
The classes are there. There is no need for the extra #if-ery.

Change-Id: Ic92ff894d6c9d26dbe32ca83b9501fa8d07e3d44
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2019-08-28 06:33:48 +00:00
Joerg Bornemann
fc6d569862 Do not prepend QMAKE_PREFIX_STATICLIB to TARGET for TEMPLATE aux
This was introduced by accident in 4da47d0f.

Fixes: QTBUG-77429
Change-Id: Ic3d9052e1fc83dab5ed3b8725629588208b0d7bb
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
(cherry picked from commit 2a4cf923f4)
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
2019-08-28 06:25:01 +00:00
BogDan Vatra
4cc3615b4e Use QLatin1String where possible
Change-Id: I8f94ba4880bcac735e4445d71f0e22774d9f78eb
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2019-08-28 07:38:48 +03:00
Marc Mutz
00d972fa4f QReadWriteLock QT_NO_THREAD shell: make API compatible with the regular one
- add missing explicit
- drop static from member functions that aren't static in the regular version
  (ie. all functions)

As a drive-by, remove redundant inline keyword where it doesn't cause
wanton inconsistency with surrounding code.

Change-Id: I5aed73c3afa85d98d97b57c2c1874b1a5e664960
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2019-08-28 06:25:40 +02:00
Tor Arne Vestbø
ebec918722 widgets: Simplify markNeedsFlush in QWidgetPrivate::drawWidget
QWidgetRepaintManager::markNeedsFlush already ignores paintOnScreen
widgets.

Change-Id: I8b5d6f79c8fd60115f77d65aef05cc4baf840bdd
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
2019-08-28 00:47:09 +02:00
Tor Arne Vestbø
25026defdc widgets: Clarify QWidgetRepaintManager::sync of specific widget
Change-Id: Ifa2a8245decfcb2b36c1952a39ec60b7eeca6e43
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
2019-08-28 00:46:36 +02:00