996120 Commits
Author SHA1 Message Date
Luca Greco b80046bff0 Bug 2070562 - about:addons default and AMO curated nova themes preview should follow the current OS light/dark mode. r=willdurand
Differential Revision: https://phabricator.services.mozilla.com/D324746
2026-09-11 18:18:40 +00:00
Iain Ireland b9c3e085ff Bug 2037691: Support arm64 in SIMD.h r=jandem
Claude wrote the first draft of this quite a while ago. I went through and eyeballed that it looked mostly like the existing x86 implementation, and there are reasonable justifications for the differences. In particular, the difference between _mm_movemask_epi8 (which produces a 16-bit result with 1 bit per SIMD lane) and NeonMovemask (which produces a 64 bit result with 4 bits per SIMD lane) explains why we have (eg) `orMask & 0xf` vs `orMask & 0xffff` in Check4x4Chars. Note also that x86 support for sizeof(TValue) == 4 and sizeof(TValue) == 8 is only available in SIMD_avx2.cpp, whereas arm64 supports all sizes unconditionally.

I didn't spend much time reviewing the correctness of the underlying algorithms; I did that a lot for the initial landing, and we haven't had any problems with the x86 version, so I think we should be fine as long as the translation is right.

I also had a fresh instance of Claude review the patch. The main interesting point from its review was that our memchr implementation is competing against hand-tuned libc implementations. On x86 our primary competition is the Windows C runtime, which is (IIUC) less aggressively optimized, so Alex's benchmarking in bug 1776013 eventually convinced us that we should use our own memchr. That might not be true here. CI results were inconclusive, leaning if anything towards the default memchr being fastest. I'm conservatively disabling SIMD::memchr for now.

Codex's review didn't find anything else.

Differential Revision: https://phabricator.services.mozilla.com/D325185
2026-09-11 18:18:22 +00:00
Mark Banner 7bd194b64b Bug 2071252 - Fix urlbar metrics.yaml to use literal rather than block scalar headers for descriptions for better formatting. r=urlbar-reviewers,dao
Differential Revision: https://phabricator.services.mozilla.com/D325355
2026-09-11 18:17:37 +00:00
Mark Banner 59030f0267 Bug 2071252 - Fix browser search metrics.yaml to use literal rather than block scalar headers for descriptions for better formatting. r=search-reviewers,scunnane
Differential Revision: https://phabricator.services.mozilla.com/D325354
2026-09-11 18:17:36 +00:00
longsonr cdabea1dc9 Bug 2071205 - Fix SVGPathSegment API r=emilio,webidl
Differential Revision: https://phabricator.services.mozilla.com/D325320
2026-09-11 18:17:03 +00:00
Adham-A ea6b888b0b Bug 1985986 - Fix RTL glyph ink overflow measurement for contained glyphs. r=layout-reviewers,jfkthame
Differential Revision: https://phabricator.services.mozilla.com/D324373
2026-09-11 18:16:25 +00:00
Moyin af13762c4c Bug 2064846 - Calculate the duration of a piece of article r=android-reviewers,matt-tighe
Differential Revision: https://phabricator.services.mozilla.com/D324962
2026-09-11 18:15:53 +00:00
Alex Hochheiden 115df1170b Bug 2035575 - Add a duplicate transform to copy another kind's tasks with overrides r=ahal,taskgraph-reviewers
Manually duplicating every task definition produced by a kind lets the copy
drift as the source changes. Test variants already avoid this for a single
test task, but a difference compiled into artifacts needs a separate build of
every task it affects.

Differential Revision: https://phabricator.services.mozilla.com/D320191
2026-09-11 18:15:22 +00:00
Julien Cristau e10bbf0dae Bug 2062847 - Let the android-gradle-build python tests use non-shippable artifact builds r=firefox-build-system-reviewers,sergesanspaille
The android-gradle-build python tests run artifact builds, but
`mach artifact install` only searches the `.shippable` index for opt
builds. For each of the 50 candidate pushheads it looks up
`gecko.v2.autoland.shippable.revision.<rev>.mobile.android-<arch>-opt`.
Shippable Android builds aren't scheduled by default on autoland, so when
none of the last 50 autoland pushes ran a shippable build, the search
comes up empty, fails with "no built artifacts found", and every
artifact-build test in the suite fails at once. It passes only when one
of those 50 pushes happens to have a shippable Android build, which is
why it shows up as an intermittent.

Add a MOZ_ARTIFACT_ALLOW_NON_SHIPPABLE environment variable that makes
the index lookup fall back to the regular per-push opt build when no
shippable build is found, and set it for the android-gradle-build task.
The shippable index is still tried first, so branches that only publish
shippable builds (central, beta, release, esr) keep resolving to those.

Differential Revision: https://phabricator.services.mozilla.com/D324866
2026-09-11 18:14:40 +00:00
jsimplicio 4c91297a52 Bug 2054561 - Message bar spec update for Nova r=desktop-theme-reviewers,mkennedy,translations-reviewers,thecount,nordzilla,emilio
Differential Revision: https://phabricator.services.mozilla.com/D311913
2026-09-11 18:14:02 +00:00
Paul Adenot 0d8a98b84c Bug 2070838 - Don't report a speech recognition session stopped during init as an error. r=media-webspeech-reviewers,azebrowski
Bringing the engine up takes as long as loading the model's weights, so stop()
can land while the session is still initializing. The engine's abandoned init
then reached the page as "network", instead of the nomatch and end that
stopping a session owes it.

Differential Revision: https://phabricator.services.mozilla.com/D324937
2026-09-11 18:13:32 +00:00
Dale Harvey d6f561d006 Bug 2071208 - Make sure recent searches widget can be enabled by Nimbus. r=maxx
Differential Revision: https://phabricator.services.mozilla.com/D325331
2026-09-11 18:13:07 +00:00
Irene Ni 7494a82306 Bug 2066474 - Restore selected checkmark on lists widget switcher menu. r=maxx
Differential Revision: https://phabricator.services.mozilla.com/D321275
2026-09-11 18:12:36 +00:00
Maxx Crawford f88ffead06 Bug 2068811 - Add newtab nova launch message strings r=fluent-reviewers,bolsson
Differential Revision: https://phabricator.services.mozilla.com/D324452
2026-09-11 18:12:08 +00:00
alastor0325 767274e9d6 Bug 2071106 - Part 4: Test that a clear lead stream is granted an input trust authority. r=media-playback-reviewers,padenot
Adds TestMFMediaSourceProtection, which builds an MFMediaSource the way
MFMediaEngineParent does and drives IMFTrustedInput against a mock CDM.

The failure this covers needs SL3000 hardware DRM and a licence server, so it
cannot be reached from a mochitest, but we can test it on gtest.

Differential Revision: https://phabricator.services.mozilla.com/D325211
2026-09-11 17:43:50 +00:00
alastor0325 3dee287405 Bug 2071106 - Part 3: Log the image size and encryption state of the media engine setup. r=media-playback-reviewers,padenot
The metadata log reported only the display size, and the media source summary
reported neither size, so both now carry the image and display size.

Differential Revision: https://phabricator.services.mozilla.com/D325210
2026-09-11 17:43:50 +00:00
alastor0325 c0682d0a70 Bug 2071106 - Part 2: Add a pref to disable the protected activation recovery, off by default. r=media-playback-reviewers,padenot
When activation failed with `MF_E_TOPO_UNSUPPORTED` or
`MF_E_INCOMPATIBLE_SAMPLE_PROTECTION` we re-drove the protected pipeline
through the hardware-context-reset path, which closes every session with
reason `hardware-context-reset`. Per the EME specification that invites the
application to create new sessions and retry, so a conformant player retries
indefinitely. Netflix reported this as repeated `F7717-1273 (unexpected
hardware-context-reset)`.

Neither error is documented as transient. Microsoft publishes no guidance for
either code, and Chromium, which drives the same Media Engine and PlayReady
path, treats both as terminal and reserves hardware-context-reset for
`DRM_E_TEE_INVALID_HWDRM_STATE` alone. The retry could not have helped in any
case, because `ExternalEngineStateMachine::SetCDMProxy` does not re-send the
CDM proxy to the recreated engine, so the new engine never sets its media
source and never builds a topology.

The mechanism is left in place behind a pref so this can be flipped back on a
release branch if disabling it regresses something. Removing it belongs in a
follow-up.

Differential Revision: https://phabricator.services.mozilla.com/D325209
2026-09-11 17:43:49 +00:00
alastor0325 2f0d4e5ac5 Bug 2071106 - Part 1: Request an input trust authority for a clear lead video stream. r=media-playback-reviewers,padenot
Bug 2022030 Part 5 (D287632) made `IsEncrypted()` return false on the clear
lead segment to reflect the real encryption status. That function also tells
Media Foundation whether the stream needs the protected media path, which a
clear lead still does because the encrypted part follows in the same stream.

The video descriptor was therefore marked `MF_SD_PROTECTED`, but the
`IMFInputTrustAuthority` Media Foundation asked for while resolving the
topology was refused with `MF_E_NOT_PROTECTED`. It cannot resolve a protected
branch without one, so the topology failed with `MF_E_TOPO_UNSUPPORTED`.
Reverting this makes clear lead PlayReady streams play on Netflix again.

Differential Revision: https://phabricator.services.mozilla.com/D325208
2026-09-11 17:43:48 +00:00
Sarah Clements d89caae212 Bug 2065486 - Update illustration for sync disconnected state in sidebar r=fxview-reviewers,desktop-theme-reviewers,nsharpley,emilio
* Add asset property for sync error map and consolidate the getMessageCardForState logic
* Remove height and width from new svgs so they scale

Differential Revision: https://phabricator.services.mozilla.com/D321595
2026-09-11 17:43:09 +00:00
Paul Adenot 477e1f9b54 Bug 2071261 - Quote the Norwegian locale tag in the speech recognition model mapping. r=media-webspeech-reviewers,azebrowski
YAML reads a bare `no` as false, so the multilingual model's supported_locales
declared "False" instead of "no": a key the model's prompt dictionary does not
have, offered to language negotiation as if it were a tag. Requesting it
negotiated fine and then failed in parakeet_capi_stream_begin_lang. This
was failing to set an explicit language, and falling-back to
autodetection, which wasn't intended.

gen_speech_models.py now rejects a non-string locale rather than stringifying
whatever YAML handed it.

Differential Revision: https://phabricator.services.mozilla.com/D325362
2026-09-11 17:42:35 +00:00
Matthew Gaudet 70abc663a8 Bug 2070973 - Wait until after promise is resolved to clear scheduling state r=dom-core-reviewers,smaug
Differential Revision: https://phabricator.services.mozilla.com/D325060
2026-09-11 17:41:52 +00:00
Iain Ireland 065193d607 Bug 2071118: Fix interruptRegexp for PBL r=jandem
Differential Revision: https://phabricator.services.mozilla.com/D325200
2026-09-11 17:41:20 +00:00
any1here 367638bee9 Bug 2070378 - Hide Manage AI and Labs quick actions when disabled by preference or policy r=urlbar-reviewers,Standard8
Differential Revision: https://phabricator.services.mozilla.com/D324472
2026-09-11 17:40:43 +00:00
Ruhollah Majdoddin 186a3b9047 Bug 2065751 - Advertise the Escape shortcut in the find bar's close button tooltip while the bar has focus. r=mstriemer,fluent-reviewers,bolsson
The find bar's close button tooltip is only "Close find bar", so nothing in
the UI says that Escape closes the bar.

Escape is handled by a capturing keypress listener on the find bar element
itself, so it only closes the bar while focus is inside it. Following bug
1199929, the shortcut is advertised only while that holds: the tooltip
swaps between two Fluent ids as focus enters and leaves the bar.

The key name is hardcoded rather than looked up.
ShortcutUtils.getKeyString("VK_ESCAPE") would read it from
keys.properties, but that table has no per-platform variant and would
give capital "Esc" on macOS, where the existing Escape strings use
lowercase, and .properties is a legacy format. { $shortcut } does not
apply either -- there is no <key> element here, and this Escape
handling is not remappable.

This work was done with AI assistance; I have reviewed and can explain
every line.

Differential Revision: https://phabricator.services.mozilla.com/D320643
2026-09-11 17:39:35 +00:00
Sylvestre Ledru d489e02a8c Bug 2066697 - Quote file-bug.py arguments in the bug-filing skill r=ai4dev-reviewers,padenot DONTBUILD
Unquoted field=value arguments break when the value contains shell glob
characters, e.g. a see_also URL with a query string.

Differential Revision: https://phabricator.services.mozilla.com/D325257
2026-09-11 17:39:01 +00:00
Sylvestre Ledru e173c24599 Bug 2058821 - doc: apply the markdownlint fixes over the tree r=firefox-source-docs-reviewers,ipc-reviewers,devtools-reviewers,releng-reviewers,android-reviewers,bhearsum,nchevobbe,ahal,tcampbell DONTBUILD
Mostly mechanical: `markdownlint-cli2 --fix` over the directories the md
linter covers (blank lines around fences and lists, list indentation, bare
URLs wrapped in angle brackets, stray spaces inside code spans).

A few spots needed to be fixed by hand because they were malformed in the
first place: reference links left dangling by the RST conversion in
ipc/docs/ipdl.md and devtools/docs/user/debugger-api/index.md, an `{image}`
directive whose options had escaped the fence in
docs/contributing/debugging/capturing_minidump.md, and text where a literal
asterisk or underscore was being parsed as emphasis.

Differential Revision: https://phabricator.services.mozilla.com/D315001
2026-09-11 17:38:33 +00:00
lola_t b14ad10e3f Bug 2067125 Add ListenSheetIntegration and ListenSheetBehaviour r=android-reviewers,moyin
Differential Revision: https://phabricator.services.mozilla.com/D324345
2026-09-11 17:38:05 +00:00
Dão Gottwald fc05d1ba33 Bug 2071258 - Render each mermaid diagram at its own size instead of the column width. r=firefox-source-docs-reviewers,sylvestre
Differential Revision: https://phabricator.services.mozilla.com/D325363
2026-09-11 17:37:34 +00:00
Sylvestre Ledru 2af023094e Bug 2071212 - Initialize SECItem::type before PK11_ImportSymKey in NSSCipherStrategy::Init (Coverity CID 1700949) r=dom-storage-reviewers,jari
keyItem was default-constructed and only had data and len assigned, leaving
type indeterminate when it was handed to PK11_ImportSymKey. Use aggregate
initialization with siBuffer, matching the `SECItem empty = {siBuffer, nullptr,
0}` on the following line.

Differential Revision: https://phabricator.services.mozilla.com/D325327
2026-09-11 17:37:05 +00:00
Sarah Clements 5b5214a6a7 Bug 2070260 - Migrate old sidebar users to hide-launcher visibility and enable sidebar.revamp in all builds r=kcochrane,firefox-desktop-core-reviewers ,mossop,fluent-reviewers,settings-reviewers,sessionstore-reviewers,tgiles,sthompson,bolsson,jsudiaman
* Add migration and enable sidebar.revamp in beta and release
* Remove show sidebar checkbox from the tab browsing section in about:preferences
* Fix sidebar bug where switcher label isn't showing if a tool isn't already saved in preferences

Differential Revision: https://phabricator.services.mozilla.com/D324600
2026-09-11 17:36:38 +00:00
AndiAJ 9fecf287d5 Bug 2071253 - Fix verifyTabsTrayListViewTest UI test r=aaronmt
The UI test was sometimes failing because it failed to verify that the normal tabs list is displayed.

To fix this, I've changed for waiting for the empty tabs list to not exist to waiting for the normal tabs list to exists.
I've also removed some redundant actions from the tests.

  This change also fixes **verifyTabsTrayGridViewTest** UI test

Both tests successfully passed 50x on Firebase 

Differential Revision: https://phabricator.services.mozilla.com/D325356
2026-09-11 17:36:09 +00:00
unifolia 0d23b5ed27 Bug 2064054 - Make the Organize Tabs flyout a dismissable popup so Wayland can place it beside the panel r=Mardak
Differential Revision: https://phabricator.services.mozilla.com/D324447
2026-09-11 17:35:39 +00:00
AndiAJ 18cdfeacc1 Bug 2071272 - Convert deleteDownloadedFileTest regression UI test to efficiency framework r=jajohnson
The UI test successfully passed 50x on Firebase 
All UI tests successfully passed 1x on Firebase 

Differential Revision: https://phabricator.services.mozilla.com/D325371
2026-09-11 17:35:16 +00:00
sarah541 1d37bac63c Bug 2058533 - Add a PromoCard highlighting the Collections to Tab Groups migration in the Tab Groups page r=android-reviewers,gl
Differential Revision: https://phabricator.services.mozilla.com/D323690
2026-09-11 17:34:48 +00:00
Sandor Molnar 232fa29495 Revert "Bug 2062329 - Attribute MLModelHubService downloads to the requesting task. r=ai-platform-reviewers,valentinp" for causing bc failures @ browser_speech_recognition_telemetry.js
This reverts commit 62a4a5d638.

Revert "Bug 2062329 - Measure inference cost and init failures in the HWInference process. r=media-playback-reviewers,alwu"

This reverts commit 7783c6fb9e.

Revert "Bug 2062329 - Measure speech recognition latency in the content process. r=media-playback-reviewers,alwu"

This reverts commit 189550601a.

Revert "Bug 2062329 - Record speech recognition usage, outcomes and errors with Glean. r=media-playback-reviewers,alwu,TravisLong"

This reverts commit 39db08efe3.

Revert "Bug 2062329 - Add use counters for the SpeechRecognition API. r=dom-core-reviewers,webidl,smaug"

This reverts commit 84ede0b820.
2026-09-11 17:32:37 +00:00
Sandor Molnar 2cc9db3b01 Bug 2071004 - Update wpt metadata for /html/canvas/element/manual/imagebitmap/createImageBitmap-resolves-in-task.any.html 2026-09-11 17:30:33 +00:00
scottdowne 1ef27a4b11 Bug 2071368 - Format DiscoveryStreamFeed.test.js with Prettier.
Differential Revision: https://phabricator.services.mozilla.com/D325449
2026-09-11 15:46:39 +00:00
Leo Tenenbaum 09c4a957c1 Bug 2071064 - Call ClearForm when unlinking form controls. r=dom-core-reviewers,smaug
Differential Revision: https://phabricator.services.mozilla.com/D325435
2026-09-11 15:34:54 +00:00
Ryan VanderMeulen 1dfefda069 Bug 2071075 - Build the macOS onnxruntime toolchains on Linux workers. r=jcristau
The aarch64 task was already a cross build on the Intel b-osx-1015 workers, so neither build executes what it
compiles. build.py's --osx_arch only acts on a macOS host, so the Darwin cmake variables are passed directly,
the way build-llvm-common.sh does for compiler-rt, with linux64-clang-toolchain replacing the Mach-O
macosx64-clang and the mac cmake/ninja fetches. Deployment targets are set explicitly to Firefox's (10.15
x86_64, 11.0 arm64).

-fuse-ld=lld goes in the compile flags because cmake's try_compile checks, including the one behind
--enable_lto, don't inherit CMAKE_*_LINKER_FLAGS and would silently disable LTO. CMAKE_ASM_COMPILER_TARGET is
needed or the .S files are assembled for the host.

Differential Revision: https://phabricator.services.mozilla.com/D325157
2026-09-11 15:34:21 +00:00
Ryan VanderMeulen 0f715ac101 Bug 2071075 - Build the macOS openssl and xz cpython dependencies on Linux workers. r=jcristau
macosx64-xz, macosx64-aarch64-xz and macosx64-aarch64-openssl never execute what they compile and already
fetch macosx64-sdk-toolchain, so they only need linux64-clang-toolchain instead of the Mach-O macosx64-clang,
plus --target/--host.

libtool picks its linker with its own PATH search rather than honoring -fuse-ld, so xz also gets LD=ld64.lld,
and -Wno-unused-command-line-argument keeps its -Werror configure probe from rejecting -fuse-ld. Both scripts
pin AR/RANLIB to llvm-ar/llvm-ranlib so the static archives get a symbol index.

pack.sh is now located via $GECKO_PATH: $(dirname $0) breaks on the Linux worker, which invokes scripts with a
path relative to the initial directory, once build-xz.sh has cd'd elsewhere.

Differential Revision: https://phabricator.services.mozilla.com/D325156
2026-09-11 15:34:20 +00:00
Ryan VanderMeulen 684471d51c Bug 2071075 - Build the win32 and aarch64 WindowsAppSDK repack toolchains on Linux workers. r=jcristau
The win32 and aarch64 WindowsAppSDK repacks only unzip and re-tar an MSIX, exactly like the x86_64 one that
already runs on Linux; drop their Windows worker override.

Differential Revision: https://phabricator.services.mozilla.com/D325155
2026-09-11 15:34:20 +00:00
Ryan VanderMeulen 714d1f97e1 Bug 2071075 - Build the macOS Android repack toolchains on Linux workers. r=jcristau
The macOS Android toolchains (JDK, SDK, arm64 AVD and arm64 system images) only download and repack upstream
archives, so they don't need a macOS worker. The JDK is downloaded for macOS/arm64 via new --os-name/--os-arch
overrides for android.py --jdk-only. sdkmanager selects packages by matching the host OS and CPU architecture,
so downloading the macOS/arm64 packages from this Linux/x86_64 host needs both REPO_OS_OVERRIDE=macosx and
-Dos.arch=aarch64. The AVD prewarm was already a no-op because arm64.json sets emulator_prewarm to false, and
system images are host-independent, so neither of those two repacks needs either override.

They were also in the TL Treeherder group despite targeting macOS arm64; move them to TMA64 to match the other
cross-built toolchains.

Differential Revision: https://phabricator.services.mozilla.com/D325154
2026-09-11 15:34:19 +00:00
Stephanie Cunnane fe3550cd24 Bug 2070734 - Document the contextmenu_visual SAP in the search telemetry docs. r=search-reviewers,Standard8 DONTBUILD
Differential Revision: https://phabricator.services.mozilla.com/D324790
2026-09-11 15:33:41 +00:00
Gregory Mierzwinski df4afcdd3f Bug 1883400 - Integrate hardware info into perfdocs checks and generation. r=perftest-reviewers,mozperftest-reviewers,aglavic
This patch integrates the new hardware doc generation into perfdocs. It adds the ability to list all of our hardware info in the performance-infrstructure docs, and also provides links from the test documentation to it.

With this change, any new tasks with undocumented tools will trigger failures in perfdocs. Those pools will need to either be listed under an existing hardware type, or will need a new hardware section added for it.

Differential Revision: https://phabricator.services.mozilla.com/D323368
2026-09-11 15:33:07 +00:00
Gregory Mierzwinski 03ea427c40 Bug 1883400 - Add new component for listing hardware info in perfdocs. r=perftest-reviewers,mozperftest-reviewers,aglavic
This patch adds a new class that will be used to gather, and build the documentation for hardware information across all performance tests. The existing content here is based on the platforms wiki found here: https://wiki.mozilla.org/Performance/Platforms

A new YAML file is added in the main perfdocs directory to track all the hardware along with their mapping to worker pools. The platform labels are gathered dynamically and added to these new docs so they don't need to be included in the YAML either. The new class is a singleton to make it simpler to use in multiple different places.

Differential Revision: https://phabricator.services.mozilla.com/D323367
2026-09-11 15:33:07 +00:00
Eemeli Aro 0482e9a63e Bug 2067110 - Check string allocation in mozJSModuleLoader::CreateTextModuleFromSource. r=arai
Differential Revision: https://phabricator.services.mozilla.com/D325003
2026-09-11 15:29:49 +00:00
Eemeli Aro 62803d7584 Bug 2067109 - Check string allocation in WorkletModuleLoader::CreateTextModule. r=dom-core-reviewers,jjaschke
Differential Revision: https://phabricator.services.mozilla.com/D325002
2026-09-11 15:29:49 +00:00
Eemeli Aro c81b3051a4 Bug 2067108 - Check string allocation in WorkerModuleLoader::CreateTextModule. r=edenchuang
Differential Revision: https://phabricator.services.mozilla.com/D325001
2026-09-11 15:29:48 +00:00
Eemeli Aro 8398fd4d32 Bug 2067107 - Check string allocation in ModuleLoader::CreateTextModule. r=dom-core-reviewers,jjaschke
Differential Revision: https://phabricator.services.mozilla.com/D325000
2026-09-11 15:29:47 +00:00
Sylvestre Ledru aed6a14648 Bug 2062203 - Null-check node before deref in nsNavHistoryFolderResultNode::OnItemMoved (Coverity CID 1644887) r=places-reviewers,Standard8
The same-folder branch dereferenced `node` for `mBookmarkIndex` and passed it
to ReindexRange before reaching the null check that already guarded the rest of
the branch. `node` comes from FindChildById and is only known to be non-null
when it was returned, so move the existing assertion and check above the first
dereference rather than leaving them in the middle of the branch.

Differential Revision: https://phabricator.services.mozilla.com/D317484
2026-09-11 15:29:09 +00:00