| Commit message (Collapse) | Author | Age | Files | Lines |
|\
| |
| |
| | |
Change-Id: I9b1f2a0317290f0855da03eca9d26878b7faeb0a
|
| |
| |
| |
| |
| |
| | |
Change-Id: I7f08f89bbd875a835a55c1378833c92ce246c564
Reviewed-by: Viktor Engelmann <viktor.engelmann@qt.io>
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This is an improvement of:
bab4abab Keep settings synchronized when RVH swaps
Updating settings during RVH swap is flaky because it happens after
the load start of RenderFrame thus it is not guaranteed the
ViewMsg_UpdateWebPreferences message is received by the render process
before the load finishes. This means that the setting might not be applied
on the current page if it was set during the navigation.
The new RVH is created at the very beginning of the navigation, so access
it via the pending or speculative main frame of the page thereby make it
possible to update its settings before the load of RenderFrame starts.
Task-number: QTBUG-66656
Task-number: QTBUG-68424
Change-Id: I4fbba597579551bb3329936ccd7b357cf8daa4ea
Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
|
| |
| |
| |
| |
| |
| |
| | |
Use QUrl::fromUserInput to also handle URL's without protocol prefix.
Change-Id: I8e9d4650ffe86886920b48170a6b188d2c0478c8
Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
|
| |
| |
| |
| |
| |
| |
| | |
I would like to see the changes in git status.
Change-Id: I5b97af3cd467639aa4df1bcfd717f33c5b820c4b
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
|
| |
| |
| |
| |
| |
| | |
Task-number: QTBUG-68424
Change-Id: Idb72162b8aaa92a619fb7baf578f63e3d0171470
Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
YUV to RGB color conversion was not working, because the provided
ColorSpace object was invalid.
According to gl_renderer.cc, invalid color spaces should be treated
as REC709.
Task-number: QTBUG-68174
Change-Id: I1ad3b74ced4734e048256c075c953e9218ca6b6c
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
|
| |
| |
| |
| |
| |
| | |
Task-number: QTBUG-68364
Change-Id: Ib2079ccd211b537725fd0992e069c41df01c5e7b
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Some actions, like Copy, are never updated and therefore need to be always
enabled.
Task-number: QTBUG-68354
Change-Id: I6827ee719ddc55cad3e4359379d1f2980f4b9618
Reviewed-by: Michael Brüning <michael.bruning@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Reverts incorrect change to src/3rdparty in bd3687d2c5 and adds
96f354df27 Fix build with GCC 8.1.0
Change-Id: I6d4334598beb719aca0dabc96060630ea34015e9
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Currently we can crash due to use-after-free of browser
context, it happens due to fact that resource context
has pointer to browser context which is destroyed on ui
thread, while resource context is destroyed on io thread.
We used url request getter to maintain objects destruction
on io thread. Refactor the code and create profile io data,
which will live on io thread, move all the objects
currently maintained by url request getter qt to newly
created class. Fix destruction order and remove references to
browser context from resource context.
Compared to url request getter, profile io data is not
ref counted class and uses weak pointer factory to handle
all "generate" requests.
Task-number: QTBUG-67865
Change-Id: Iee4fec854eda1c1600d26e991657d4877cbc966f
Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Following commits are going to introduce
ProfileIODataQt and to keep things self documented
just rename the class so it reflects Chromium one.
Fix minor style issues in profile_qt.h
Presort include headers as requested on review.
Change-Id: If58f5aec8ac64cfaf30642195838a77497b75244
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| | |
Instead of keeping BrowserContextAdapter as a child of
global object add them to the list kept by WebEngineContext.
Change-Id: I626ca6ff6dec3eb76530e3cfb6d589cb961a5795
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Update to marked 0.3.19. Also include the un-minified
version, so that the code can be read.
[ChangeLog][Third-Party Code] Updated "Marked (WebEngine Markdown Editor
example)" to version 0.3.19.
Change-Id: Ie068d003ec6cfab27803332b4aa12095c6c8a457
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
|
| |
| |
| |
| |
| | |
Change-Id: I00f174ed23013b9094077fa6de2504c8e870827c
Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
|
| |
| |
| |
| |
| | |
Change-Id: I5fef99d3674fe4dee43df79d740988853d144abd
Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
|
|\ \
| | |
| | |
| | | |
refs/staging/dev
|
| |\|
| | |
| | |
| | | |
Change-Id: Id171407c17533846e8efe0e586d6793a61543438
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This was moved to later, but rebasing the patch lost this line.
Change-Id: I5a8f098519bb4e0ab4dcd6a5855a4c8576a46753
Reviewed-by: Viktor Engelmann <viktor.engelmann@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Use qwebchannel.js shipped with qtwebchannel.
Change-Id: Iceead5131d22a6988bbb4e7a3cca1e9f21908e3e
Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
Reviewed-by: Michael Brüning <michael.bruning@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Otherwise Chromium will pick the last added, meaning we will use the
wrong one.
Task-number: QTBUG-64071
Change-Id: Id5c939b6a5c70643ed047625c0cbb152dd8c7169
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
There can be more than one RenderViewHost assigned to a single
WebContents. This is the case when starting a page load results changing
processes. When applying settings during the load it updates only the old
RVH. This fix applies the settings to the new RVH too after the swap.
Task-number: QTBUG-66656
Change-Id: I833415b2a34f58e2a9a18c209a025c82b73aa65a
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Turns out JavaScript's JSON.stringify is not guaranteed to produce valid UTF-16
strings. It is possible in JavaScript to produce string objects which contain
invalid code units (unmatched surrogate pairs) and JSON.stringify will simply
copy this data to it's output. However, such a string cannot be losslessly
converted to UTF-8 and this leads to fun errors in WebChannelIPCTransport.
This patch
- Adds a test for the scenario above.
- Changes WebChannelIPCTransport to replace these invalid code units with the
Unicode replacement character U+FFFD.
- Changes WebChannelIPCTransportHost to validate the data it gets from the
renderer. Not validating the data defeats the whole point of Chromium's
fancy multi-process architecture: the renderer is not to be trusted.
- Changes WebChannelIPCTransport to throw JavaScript exceptions for various
errors (missing argument, wrong type, invalid JSON). Seems like the polite
thing to do.
Task-number: QTBUG-61969
Change-Id: I83275a0eaed77109dc458b80e27217108dde9f7b
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
|
| | |
| | |
| | |
| | |
| | | |
Change-Id: I81ac6fcf14563a6d093c51d93754d438992ee52a
Reviewed-by: Michael Brüning <michael.bruning@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
- Add checkboxes to make configurable whether a stylesheet should
be applied
- Add a default stylesheet which rotates the page by 180 degree.
Task-number: QTBUG-64816
Change-Id: Ic82c61f9d1e5384f3271a260bc390ac50f5b9a12
Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
When encountering a 301 redirect, one render frame/widget is created for the
original URL plus one "speculative" render frame/widget for the new URL. Once
the speculative frame commits, keyboard focus should switch to the corresponding
widget. This doesn't work however, because QQuickItem::forceActiveFocus doesn't
give focus to the containing QQuickWidget. Fixed by using QWidget::setFocus.
Also changed simplebrowser to focus the QWebEngineView on startup.
Task-number: QTBUG-68076
Change-Id: I8dc42ba89bfdcd46a86c7dca357fdf1e94f439d4
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | | |
Task-number: QTBUG-68224
Change-Id: I317915f0c81531e5858dfa3a76365b16266ce919
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Do not make it depend on a define that could break precompiled headers,
instead only included it when it is valid.
Task-number: QTBUG-67977
Change-Id: I65f4de89de06d7a35c8dd97e4e9bd92d8c6dca54
Reviewed-by: Michael Brüning <michael.bruning@qt.io>
|
| | |
| | |
| | |
| | |
| | | |
Change-Id: I9468faccfc8d943302bb643a57b9f7d1eed8862a
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
|
| | |\
| | | |
| | | |
| | | | |
Change-Id: Id41b0b07a934994471df40de884e1231ee1c0e8e
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Pulling in security fixes from Chrome 66.0.3359.139
Changes:
a816f8401c Update the ICU shim headers
a329fc0080 [Backport] [MemCache] Fix bug while iterating LRU list in range doom
492afe7432 [Backport] Merged: [keys] Don't keep chain of OrderedHashSets in KeyAccumulator
1785e2c1eb [Backport] Merged: [wasm] Call AsyncInstantiate directly when instantiating a module object
Task-number: QTBUG-67800
Change-Id: Id84a3e58f5eb4fc7b8e73f57c8edb8f0574e6547
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Add a list of public CVEs security patches have been cherry picked for.
Change-Id: I64703fea470070e79fb1327e960b59e0f7d88437
Reviewed-by: Michael Brüning <michael.bruning@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Makes it cleaner to expand it later.
Change-Id: I2ccbcf143ca676c3fb89641b40e0848b6dd4bae8
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Change-Id: I95f34b613e72c28ae1d9cfea02ccdb1d45f5c7db
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: Florian Bruhin <qt-project.org@the-compiler.org>
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Seems that with pyqt we have to fallback to qpa.
Task-number: QTBUG-67898
Change-Id: I70889b4f5858f675e4692858de3dcb111c64c147
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Changes:
e0864b6551ba Revert "For local origins CanDisplay should be treated as CanRequest"
c47570975b7e [Backport] Don't sniff file URLs for HTML.
a2e3b4e55ea0 [Backport] DevTools: speculative fix for crash in NetworkHandler::Disable
98a2b309e128 [Backport] Use correct Request Context when EMBED or OBJECT requests an image
09731111686c [Backport] Remove usage of SEE_MASK_FLAG_NO_UI from ui::base::win
848a0b395f95 [Backport] Merged: [wasm] Call FatalProcessOutOfMemory on OOM
d7809694d8ce [Backport] Merged: [turbofan] Properly test number of descriptors.
880dbfff351d [Backport] Revert "Roll libxml to 707ad080e61014ab4a6d60dc12875e233c1f673c"
9ad7a2ac8ae1 [Backport] Roll libxml to 7a1bd7f6497ac33a9023d556f6f47a48f01deac0
5ca051ce6e17 Fix use after free in DeviceMediaToMojoAdapter
24cf628c8e4a [Backport] [turbofan] Fix dead loop exit removal.
61b62c6ef03f [Backport] Use PaintLayer pointer from PaintLayerScrollableArea as PaintLayer is destructed first.
287955ba1c32 [Backport] VP9 GoF/temporal index check.
8c7d2f8a1cd6 [Backport] Check actual text length in InlineTextBox::IsLineBreak
1f64262b5d [Backport] Track the location of IHDR in PNG
7ae5eb6188 init out-param on buffer failure
Task-number: QTBUG-67800
Task-number: QTBUG-67870
Change-Id: I6b68f4dd51b214f53bb8dcc0853e1559520764ef
Reviewed-by: Michael Brüning <michael.bruning@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Task-number: QTBUG-67904
Change-Id: Ib97ca78d8a7e489534c5985237782963f7295d80
Reviewed-by: Michael Brüning <michael.bruning@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
All pages in a site instance should belong to the same browser context, an
invariant which is violated by our WebContentsDelegateQt::OpenURLFromTab.
Task-number: QTBUG-67900
Change-Id: I754180bb96de07448ee3058210391f7856f4caeb
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Changes:
6e2354c9971e [Backport] service worker: Skip service worker for all Pepper plugins.
9908339e3989 [Backport] service worker: Disable interception when OBJECT/EMBED uses ImageLoader.
4ec3a984093e [Backport] Merged: [wasm] Avoid integer overflow on function locals check
e9ec9ada1c39 [Backport] Enable <video> to see if a response from a service worker was cross-origin.
c46b6312e1dd [Backport] Enable the Oilpan metadata canary in production builds.
adb836fcdfcb [Backport] Oilpan: Disable prompty free for weak collection backings
3cf495268dd3 [Backport] Reland: Oilpan: Immediatelly promptly free objects.
ba51ea1c97e3 [Backport] If a page calls |window.focus()|, kick it out of fullscreen.
744262b7512d [Backport] service worker: Disallow opaque responses for WebVTT.
0dcab5a6bd94 [Backport] DevTools: check Host header for being IP or localhost when connecting over RDP.
0558fd6946db [Backport] Fix MediaObserver notifications in MediaStreamManager.
cbe8bec08847 [Backport] Map U+0454 (є) to 'e' (small E)
e818a3dc9a83 [Backport] Add more entries to the confusability mapping
16c374f9f30c [Backport] Add a few more entries to the confusables list for IDN
43bff7cb2280 [Backport] [M66 branch] Add more to confusables list
75434e5f622e [Backport] Fix bug in async generators.
Task-number: QTBUG-67800
Change-Id: I3728c42d8a7492b76748e2dfc9fa056852b1562c
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
|
| | | |\
| | | | |
| | | | |
| | | | | |
Change-Id: Ide3f60771813db37aac87fc7b7a8aae66d4fe1e0
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Fixes bug introduced by 4b30d82f05064723b9c3684e1c16ae0cf9d71baa where somebody
had the bright idea to call reject() from RequestController's destructor. Of
course, at this point the subclasses have already been destructed and a pure
virtual method call error is triggered.
Change-Id: Ida581285828c592a76f9ca981ec780f2711d298e
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
800x600 takes more space than expected when building a layout which
contains QWebEngineView. Now this function does exactly the same as
QWidget::sizeHint().
Add an auto test and update examples which were depending on this
hardcoded size.
Change-Id: I3b34b7d37cc99a8d6a49100d6c4b66b5b6a1c999
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
The drag creates raster window, which on eglfs platform
can be problematic. In case of running qml based
browser without backing store, this will try to create a
backing store during drag event, which will abort on eglfs.
Therefore avoid the drag in qml in case the platform does
not support multiple windows.
This patch has the side effect of disabling drag even
when qml runs with backing store, i.e. using QQuickWidget and
therefore creating another raster window is not an issue.
[ChangeLog][Behavior Changes] Drag&Drop is now disabled for
QML based applications, when platform does not support
multiple top-level windows (like EGLFS).
Task-number: QTBUG-57516
Change-Id: I0c2685ba90914fe1f7168c79744c55e07e589488
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Check that the workaround in src/3rdparty bf10f2f32a behaves as expected.
Task-number: QTBUG-62536
Change-Id: Ieae4ad61df303aae5c65d4f7be487574ce32eae0
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Shared workers work, service workers don't. Dedicated workers over custom
schemes trigger the same serialization error as WebSockets.
Task-number: QTBUG-62536
Change-Id: I97b4b8c267f6cfca74bc0abfcca905b0adeabe3d
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
For qt root builds configure system injects qmake
flags to compile config tests. To make hostcompiler
test working correctly add missing "host" flag to
configure.json file.
Task-number: QTBUG-67983
Change-Id: Ia021ab8da8ec622f15d369357738dd8d778f2481
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
User scripts with parse errors in their @match patterns were included
on all pages. Don't allow to fallback to "@include *" in this case.
Task-number: QTBUG-67726
Change-Id: I8172184e79fe3e515f391bc6cc8274a624e67a19
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Call RenderWidgetHostImpl::ImeCommitText() instead of
RenderWidgetHostImpl::ImeFinishComposingText() to trigger the necessary
JavaScript events on composing.
This fixes IME composition (eg. for dead keys) on web pages which use
custom JavaScript IME handler like facebook.
Task-number: QTBUG-66046
Change-Id: Ibc177995ba6e85eca42ae333decacfe6e788ce41
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
BrowserContextAdapter is living and accessed only in UI thread,
remove QSharedPointer usage and change QWebengineProfile to use
QPointer. Prevent BrowserContextAdapter outliving WebEngineContext
by setting globalObject as a parent to track WebEngineContext
destruction.
This commits tries to simplify the life cycle handling
of browser context, it removes profile shutdown
methods and QWebEngineBrowserContext, which was used
to track profile destruction.
Task-number: QTBUG-62147
Change-Id: I79f2c38a123cd053e3a59f4900afbdc759a396fe
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
Reviewed-by: Michael Brüning <michael.bruning@qt.io>
|
|/ / / /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
In widgets we document that web contents can not out live browser
context ie. WebEngineProfile can not be deleted before WebEnginePage
which uses it.
In qml we can not be sure the order in which objects are garbage
collected. We used shared pointers to keep order of destruction.
Unfortunately shared pointers do not work well with corner cases,
and we added more and more code to deal with that (shutdown methods
+ qpointers wrapping qsharedpointers). In order to remove growing
complexity remove usage of shared pointers to keep strict deletion order.
Remove shared pointer from WebContentsAdapter and simply track the WebContents,
that is used by the given BrowserContext. Force deletion of webcontents first.
Change-Id: I05f886a0094d971b03f9a35e12c4b4672f0fe4ce
Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
|