Commit Graph
3803 Commits
Author SHA1 Message Date
Evgeny @ SimpleX Chat 2205de390f android, desktop: show What's new once while conditions are pending (#8123)
* android, desktop: show What's new once while conditions are pending

* core: document how changed conditions are announced
2026-11-11 11:44:59 +00:00
Evgeny Poberezkin 3b5152d6ed Revert "ui: show What's new once when usage conditions are updated (#8088)"
This reverts commit d18539d1bb.
2026-11-11 11:36:47 +00:00
spaced4ndyandspaced4ndy-agents e097466325 ios: update the chat banner after connecting or joining (#8106)
* ios: update the chat banner after connecting or joining

* ios: rebuild visible rows when a chat opens over another

---------

Co-authored-by: spaced4ndy-agents <342056592+spaced4ndy-agents@users.noreply.github.com>
2026-11-11 07:42:43 +00:00
Evgeny @ SimpleX Chat d18539d1bb ui: show What's new once when usage conditions are updated (#8088)
* ui: show What's new once when usage conditions are updated

* ui: minimize the What's new and usage conditions sheet change

* ui: mark conditions in What's new as before
2026-11-10 07:31:26 +00:00
Evgeny @ SimpleX Chat 3320b21b1d desktop: do not suggest file names starting with "<" (#8103) 2026-11-10 07:15:11 +00:00
Evgeny @ SimpleX Chat 4a41d4bc5e core: evaluate the new TVar state in stateTVar updates (#8102) 2026-11-09 22:39:06 +00:00
Evgeny @ SimpleX Chat 04ad40c1cc ios, desktop: previews show a fixed version and the App Store layout (#8075)
* ios, desktop: previews show a fixed version and the App Store layout

* ios, desktop: record Settings and Support SimpleX references
2026-11-09 21:44:43 +00:00
Evgeny @ SimpleX Chat 3b9882ccf6 ui: show "Already connected?" when connecting via a used one-time link (#7813) 2026-11-07 14:57:06 +00:00
SimpleX Chat 50a575e448 7.1.2: android 393, desktop 173, ios 369 2026-11-07 13:24:56 +00:00
sh-agentsandsh-agents 97e906c9ed ios: send no audio from senders without a track (#8069)
Co-authored-by: sh-agents <350651734+sh-agents@users.noreply.github.com>
2026-11-07 10:55:16 +00:00
sh-agentsandsh-agents f3de496006 ios: fix video in calls between updated apps and freezing on hang-up (#7983)
* ios: start the simulator's file capturer when created

* ios: send and receive call video as VP8 only

* ios: end a call once when it is ended twice at once

---------

Co-authored-by: sh-agents <350651734+sh-agents@users.noreply.github.com>
2026-11-07 09:34:32 +00:00
Evgeny @ SimpleX Chat 5699d5d1bc ios: free call media frame buffers, drop frames that fail crypto (#8065) 2026-11-07 09:23:36 +00:00
8b5b8f33b7 ios: v7.1.1 (#8067)
* ios: buy a badge with an App Store purchase (#8044)

* ios: buy a badge with an App Store purchase

* ios: say why the app transaction decides the environment

* ios: do not offer a badge purchase that cannot be credited

* Apply batched suggestions from code review

Co-authored-by: Evgeny <evgeny@poberezkin.com>

---------

Co-authored-by: spacedandy-agents-simplex <342056592+spacedandy-agents-simplex@users.noreply.github.com>
Co-authored-by: Evgeny <evgeny@poberezkin.com>

* ios: 7.1.1, build 368

---------

Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com>
Co-authored-by: spacedandy-agents-simplex <342056592+spacedandy-agents-simplex@users.noreply.github.com>
2026-11-07 08:45:07 +00:00
Evgeny @ SimpleX Chat 93f9f3734c desktop: show the preview when a received image cannot be decoded (#8062) 2026-11-06 22:42:33 +00:00
Evgeny @ SimpleX Chat 5888ab5bc9 android: limit source and decoded image dimensions (#8063) 2026-11-06 22:26:30 +00:00
Evgeny @ SimpleX Chat b2e4731ec6 ios: clamp voice and video durations (#8056) 2026-11-06 22:14:19 +00:00
Evgeny @ SimpleX Chat c16200e574 ios: update WebRTC to M156 (#7878)
* ios: use only VP8 and Opus codecs in calls

* ios: update WebRTC to M156
2026-11-05 21:45:54 +00:00
Evgeny @ SimpleX Chat e97cc8ac3d directory, support bot: bold texts use double stars (#8040) 2026-11-05 17:19:01 +00:00
Evgeny @ SimpleX Chat 93e2207603 core, ui: report reason with rule text, ios gaps as in plain text (#8035)
* ui: references of the flat layout names, italic and paragraphs

* ui: what's new references with the crowdfunding link

* core, ui: report reason with rule text, ios gaps as in plain text

* ui: references of report reason, ios gaps and right-to-left text
2026-11-05 13:50:56 +00:00
Narasimha-sc 8593d30149 android, desktop: a report stays active in an open support chat after its message is moderated (#7908)
* android, desktop: do not throw when a deleted group item was sent by the user

* android, desktop: update the open support chat when its reports are deleted

* plans: moderated report stays active in the open support chat

* plans: correct the trigger and the exception location

* plans: correct statements found by fact-checking

* plans: align with the verified behaviour of the iOS handler

* plans: correct statements found by a second fact-check

* plans: correct statements found by a third fact-check

* plans: record the Android verification
2026-11-05 12:12:11 +00:00
Narasimha-sc 94d0f7ed42 desktop: a profile created when no profile exists shows its picture as bio text and loses the typed bio (#7960)
* ui: fix the first chat profile's avatar stored as its description

Profile is (displayName, fullName, shortDescr, description, image, ...),
so passing image as the fourth positional argument stored it in
description and the avatar was dropped; #7256 inserted description
before image and this call was not updated. Pass it by name.

The bio typed on the same screen was never passed on this path; pass it
as shortDescr, as createProfileInProfiles does.

* plans: first chat profile's avatar stored as its description

* plans: profile with no active local profile: wording, alternatives

* plans: profile with no active local profile: routes, navigation

* plans: profile with no active local profile: line refs, title

* plans: profile with no active local profile: trace, flag wording

* plans: profile with no active local profile: tested routes
2026-11-05 12:05:53 +00:00
Evgeny @ SimpleX Chat 39780d5b23 ui: references of the flat layout names, italic, paragraphs and what's new (#8034)
* ui: references of the flat layout names, italic and paragraphs

* ui: what's new references with the crowdfunding link
2026-11-05 10:31:01 +00:00
Evgeny @ SimpleX Chat 68369e3bbd desktop: show macOS notifications via Notification Center (#7879) 2026-11-05 07:47:02 +00:00
SimpleX Chat d461333135 7.1: android 391, desktop 172, ios 367 2026-11-04 16:29:32 +00:00
Evgeny @ SimpleX Chat aceb646f95 core, ui: typed empty lines are shown, and the flat chat layout reads as paragraphs (#8023)
* ui: markdown messages show the empty lines that were typed

* ui: snapshot references of messages with empty lines

* ui: terminal layout spacing by one paragraph unit, names at text size

* ui: terminal gap below reactions, same empty lines in both apps

* ui: flat layout references with the paragraph unit

* core, ui: text with empty lines as paragraphs, ios bubbles fit text

* core, ui: move text with empty lines as paragraphs to a follow-up

* ui: ios references with bubbles that fit their text

* ui: other senders' names in the flat layout in the secondary colour

* core, ui: text with empty lines as paragraphs

* core, ui: single-star text italic, reports drawn without core prefix
2026-11-04 13:27:22 +00:00
50c763df5d ui: translations (#8030)
* Translated using Weblate (Italian)

Currently translated at 100.0% (2727 of 2727 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/

* Translated using Weblate (Portuguese)

Currently translated at 6.8% (188 of 2727 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pt/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2727 of 2727 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/hu/

* Translated using Weblate (Italian)

Currently translated at 100.0% (3070 of 3070 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (3070 of 3070 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Portuguese)

Currently translated at 100.0% (3070 of 3070 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pt/

* Translated using Weblate (Portuguese)

Currently translated at 12.3% (337 of 2727 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pt/

* translations: fix hu ios placeholders

* translations: import/export ios

* android: translate badges, names, what's new

* ios: translate badges, names, what's new

* android: remove stale v7_1_invest_learn_more

* translations: import/export ios

* translations: fix fr ios file size string

* translations: fix errors in ca, de, es, fr, in, it, nl, pl, pt, ro, vi, zh translations (#8031)

Corrects mistranslations, typos, broken grammar and inconsistent terms found in the review of #8030: badge names inserted mid-sentence in es, ledger labels in ca/fr/in/vi, corrupted pt iOS strings, pt "dístico" vs the locale's "distintivo", and zh-rCN strings that do not read with the countdown.

* android: fix stale supporter badges title

* android: fix flagged tr, uk, zh, lv strings

* ios: fix zh-Hans months interval

* ios: warn about outdated and mismatched strings

* android: align es, tr, zh strings with ios

* ios: align uk invested string with android

---------

Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
Co-authored-by: Fábio Pereira (Serzedo) <fpereira-84@users.noreply.hosted.weblate.org>
Co-authored-by: summoner001 <summoner@disroot.org>
Co-authored-by: Narasimha-sc <166327228+Narasimha-sc@users.noreply.github.com>
2026-11-04 12:07:17 +00:00
Evgeny @ SimpleX Chat 215c02df71 ui: crowdfunding card and page as before, slide says big channels pay (#8027) 2026-11-04 10:04:16 +00:00
Evgeny @ SimpleX Chat 4ef5fdc566 ui: what's new crowdfunding card opens the crowdfunding page again (#8022)
* ui: what's new crowdfunding card opens the crowdfunding page, with ask SimpleX team

* ui: what's new references with the crowdfunding card

* ui: keep the what's new card texts, only open the crowdfunding page from it
2026-11-04 09:09:02 +00:00
Evgeny Poberezkin f0911141c6 Merge branch 'stable' 2026-11-04 08:53:18 +00:00
spaced4ndyandspacedandy-agents-simplex 86e3cdbe8c android: fix the Invest banner showing briefly at start outside the US (#8013)
* android: fix the Invest banner showing briefly at start outside the US

* android: show the Invest banner's country condition at its call sites

* android: chat list docs say the Invest banner waits for the Play country

* android: chat list spec says the Invest banner condition's order matters

* android: docs map the Invest banner's conditions and note What's New's

* android: show crowdfunding in Play builds only once the country is known

---------

Co-authored-by: spacedandy-agents-simplex <342056592+spacedandy-agents-simplex@users.noreply.github.com>
2026-11-03 12:36:08 +00:00
spaced4ndyandspacedandy-agents-simplex dfcebff38e android, desktop: right margin for images in the terminal chat layout (#8012)
* android, desktop: right margin for images in the terminal chat layout

* android, desktop: right margin for quoted images in the terminal layout

---------

Co-authored-by: spacedandy-agents-simplex <342056592+spacedandy-agents-simplex@users.noreply.github.com>
2026-11-03 12:35:16 +00:00
spaced4ndyandspacedandy-agents-simplex dc7cbe6c62 android, desktop: show members who left as left in member info (#8011)
Co-authored-by: spacedandy-agents-simplex <342056592+spacedandy-agents-simplex@users.noreply.github.com>
2026-11-03 12:34:09 +00:00
spaced4ndyandspacedandy-agents-simplex faeabef688 ios: show markdown files with HTML tags formatted to the end (#8008)
* ios: show markdown files with HTML tags formatted to the end

* ios: show every < in a markdown file as text

---------

Co-authored-by: spacedandy-agents-simplex <342056592+spacedandy-agents-simplex@users.noreply.github.com>
2026-11-03 12:33:44 +00:00
spaced4ndyandspacedandy-agents-simplex a384d3703b android: fix empty space below the QR scanner on tablets in landscape (#8009)
Co-authored-by: spacedandy-agents-simplex <342056592+spacedandy-agents-simplex@users.noreply.github.com>
2026-11-03 12:33:21 +00:00
Evgeny @ SimpleX Chat af54895ca3 ios: snapshots of full screens with the status bar, for the user guide (#8005)
* ios: guide screens rendered with the status bar; group invitation and contact preferences previews

* ios: record the full-screen snapshots with the status bar

* ios: keep the accepted group invitation preview
2026-11-03 11:20:56 +00:00
SimpleX Chat 8cbb287a04 7.1-beta.10: android 390, desktop 171, ios 366 2026-11-03 11:13:21 +00:00
Evgeny @ SimpleX Chat 814caf5ec3 ui: revenue plan slide shows who pays with three chats (#8006)
* ui: revenue plan heading without free for users

* ui: revenue plan slide with three chats
2026-11-03 09:38:28 +00:00
SimpleX Chat 06f220a8b7 7.1-beta.9: android 389, desktop 170, ios 365 2026-11-02 14:36:29 +00:00
shandsh-agents 09629bd03d ios: update translations (#7988)
Co-authored-by: sh-agents <350651734+sh-agents@users.noreply.github.com>
2026-11-02 13:06:25 +00:00
Evgeny @ SimpleX Chat 53d7e8c6ca ui: what's new in v7.1, supporter badge links and benefits (#7982)
* android, desktop: what's new in v7.1, get a supporter badge, Flat layout

* android, desktop: what's new image opens Wefunder, sections get icons

* android, desktop: crowdfunding image without the stripe at its left edge

* android, desktop: Support SimpleX in settings, badge benefits shown

* android, desktop: more space under the what's new crowdfunding image

* ci: desktop references of v7.1 what's new and the settings badge row

* android, desktop: crowdfunding page without contact button, badge texts

* ci: desktop references of what's new with one rocket

* ui: what's new in v7.1, badge links and benefits, investor offer in store

* ui: localized crowdfunding texts on iOS, badge button kept in place

* ci: iOS references of v7.1 what's new, badge row and store screens

* ui: badge instead of the phone picture in what's new

* ui: what's new crowdfunding section without the investor count

* ui: what's new badges section without a picture

* ci: what's new references without the picture and investor count

* ui: investor offer on badge store screens in every country

* ui: shorter subscription terms and store notes on badge screens

* ios: subscription terms without the cancellation window

* ios: subscription terms worded as on Google Play

* ui: shorter badge errors and subscription notes

* ui: translations of the shorter badge texts; shorter purchases alert on iOS

* ui: shorter link, channel signing and badge texts, with translations

* ui: Your badge for every badge except legend in settings

* android, desktop: badge button at one height on the store screens; crowdfunding texts translatable

* android, desktop: smaller crowdfunding image

* android, desktop: what's new references with the smaller crowdfunding image
2026-11-01 23:33:11 +00:00
Evgeny @ SimpleX Chat cd0d46c5e3 android, desktop: exact alignment and spacing (#7946)
* android, desktop: exact alignment and spacing

* android, desktop: previews of the views changed for alignment and spacing

* ci: desktop references of exact alignment and spacing

* android, desktop: preview of chat rows with unread messages, mentions and muted chats

* android, desktop: deleted text, What's new and app version keep master's layout; link strip follows iOS

* ci: desktop references of the review round and of chat rows with unread messages

* android, desktop: previews of the private routing and downgrade pickers and of the migration network step

* ci: desktop references of the private routing and downgrade pickers and the migration network step

* android, desktop: channel text aligned; master row date, strips, icons

* ci: desktop references of reverted views and the aligned channel icon

* android, desktop: the pull request holds only the agreed changes; new chat sheet and previews of reverted changes as on master
2026-11-01 07:47:07 +00:00
Evgeny @ SimpleX Chat 56b4ca73cc ios: exact alignment and spacing (#7945)
* ios: exact alignment and spacing

* ios: previews of the views changed for alignment and spacing

* ci: iOS references of exact alignment and spacing

* ios: single check and the time under a received emoji keep their places

* ios: deleted text, link strip text, What's new, app version, QR cards and onion hosts keep master's layout; info headers get more space above the avatar; chat row preview with contact requests

* ci: iOS references of the review round and of chat rows with contact requests

* ios: keep master's tags, requests, group icon, footers, compose strips

* ci: iOS references of the views back on master's layout

* ios: the pull request holds only the agreed changes, without previews of reverted ones

* ios: contact request view as on master
2026-11-01 07:46:07 +00:00
Narasimha-sc d1b3da8410 android, desktop: chat info shows another chat's mute, receipts and search; contact edits revert (#7927)
* desktop: show the open chat's mute, receipts and search in chat info

* android, desktop: show the open chat's mute state in the chat menu

* android, desktop: keep both contact info changes to mute and receipts

* android, desktop: list all members when the member search is hidden

* android, desktop: remove the unused chat menu mute state
2026-10-31 20:19:58 +00:00
Narasimha-sc 0735bd2c6e desktop: after a chat switch, chat info shows the previous chat's security code, link or members (#7926)
* desktop: reload chat info when it is shown for another chat

The info pane keeps the values it last loaded. When the pane is composed
again for another chat - after clicking another chat with a page such as
"Verify security code" open over it, or when switching between a contact
and a group - KeyChangeEffect takes the new chat id as its starting key, so
nothing is reloaded: "Verify security code" opened from the new contact's
info showed the previous contact's code, and a group's info missed its
members.

Remember which chat the loaded values belong to and reload whenever the
shown chat differs from it.

Fixes #5135

* plans: desktop chat info stale after chat switch (#5135)

* desktop: don't show another chat's info while the shown chat loads

When the info pane showed a chat other than the one its values were
loaded for, it reloaded them, but until the reload returned it showed the
previous chat's values: "Verify security code" opened the previous
contact's code, and a group showed the previous group's link, so "Group
link" opened and shared another group's link.

Start the contact info, security code and group link empty when they
belong to another chat. Hide the "Create group link" / "Group link" row
and disable the channel "Link" button until the link is loaded: with no
link yet, both open the link page, which creates a link when it gets
none, and for a group that already has one the core creates a server
queue before failing with a duplicate link error.

* desktop: keep a late group link update from replacing another chat's link

A link created, changed or deleted on the "Group link" page finishes in
the background. If the user switched chats meanwhile and the pane already
loaded the next group, the update replaced that group's stored link, and
the next time the pane was composed for it, it showed the previous group's
link, or no link after a delete.

Store the update only while the stored values belong to the group the
update came from.

* desktop: reload group info when its members were cleared

Switching chats clears the group members, and the preload skips storing
them when another chat is open when they arrive. Clicking info on group A,
then another chat and back to A before the preload finished, opened A's
info with the preloaded values marked as A's, so nothing was reloaded and
the members list showed only the user.

Reload the group info also when its members are not loaded.

* plans: chat info while it reloads, late link update, cleared members (#5135)

* desktop: hide channel owner link rows until the link is loaded

* plans: test of the channel owner rows, which builds the tables are for

* plans: restructure chat info plan into problem, cause, fix and scope

* plans: correct the Android and iOS scope of the chat info plan

* plans: chat info plan wording
2026-10-31 20:18:45 +00:00
SimpleX Chat 6016a7067b 7.1-beta.8: android 388, desktop 169, ios 364 2026-10-31 09:38:31 +00:00
Evgeny @ SimpleX Chat 5230eadbab ios, android, desktop: load JPEG, PNG, GIF and WebP image files (#7956) 2026-10-31 07:14:01 +00:00
Evgeny @ SimpleX ChatandEvgeny Poberezkin 51d9eb2785 core: faster image resizing (#7957)
* core: optimise image processing in builds without optimisation

* core: faster image sharpening

* core: faster transparency check for images

* docs: plan PNG previews from a predicted size

* core: start PNG previews at a predicted size

* ios: update core

---------

Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com>
2026-10-31 07:09:40 +00:00
Evgeny @ SimpleX Chatandspacedandy-agents-simplex cedd13f57b ui: what's new in v7.1-beta.8 (#7953)
* ui: what's new in v7.1

* ui: v7.1 what's new wording, moderator icon and badge item style

* ui: better calls in v7.1 what's new

* ui: phone icon for better calls in v7.1 what's new

* ui: v7.1 what's new preview screenshots

* ui: even gap below the supporter badge in v7.1 what's new

* ui: supporter badge picture rises above its text in v7.1 what's new

* ui: v7.1 what's new preview screenshots with the badge layout

* ui: v7.1 what's new desktop screenshot after the master merge

* ui: v7.1-beta.8 what's new wording

* ui: v7.1-beta.8 what's new: promote contributors to moderators

* ci: desktop references of v7.1-beta.8 what's new

* ui: v7.1-beta.8 what's new: larger supporter phone aligned by its head

* ci: desktop references of the supporter phone placement

* ci: iOS references of v7.1-beta.8 what's new

---------

Co-authored-by: spacedandy-agents-simplex <342056592+spacedandy-agents-simplex@users.noreply.github.com>
2026-10-30 20:58:35 +00:00
Narasimha-sc 05ac3612b7 android, desktop: a migration link pasted with extra whitespace downloads without its proxy settings (#7885)
* multiplatform: trim pasted migration link before reading its network config

MigrateToDevice.checkUserLink checked link.trim() and stored link.trim() in
every MigrationToState payload, but passed the raw link to
MigrationFileLinkData.readFromLink. A migration link pasted (or scanned)
with leading whitespace, or with trailing non-ASCII whitespace such as a no-
break space, passed the check but its "/_download info" request failed to
parse or returned no network settings, so readFromLink returned null and the
link's network settings were silently dropped: "Confirm network settings"
was skipped, the archive downloaded without the link's SOCKS proxy, and the
proxy stayed off after migration.

Compute the trimmed link once and use it throughout, so classification and
consumption see the same string.

* plans: migration link trim

* plans: migration link trim: text after the link, proxy-less download

* plans: migration link trim: exact trim coverage, settings-read reporting

* plans: migration link trim: shadowing reason, trim coverage, wording

* plans: migration link trim: title scope, NBSP bytes, tab, review reason

* plans: migration link trim: title precision, line-break case, rejections

* plans: migration link trim: line break inside desc gives a visible error

* plans: migration link trim: exact alert title
2026-10-30 20:06:20 +00:00
spaced4ndyandspacedandy-agents-simplex 4b1841c9a0 android: fix blank badges screen after a badge change (#7952)
* core: credit and lapse a test badge on a timer, for app tests

* ci: watch the desktop badges screen through badge credits and lapses

* ci: watch the Android badges screen through badge credits and lapses

* ci: tell the badges support page from the settings section

* android, desktop: log badges screen state changes, for app tests

* ci: check that the badges screen draws its page, not only lists it

* ci: start the app again when it crashes at start before badge cycles

* ci: reinstall the app before badge cycles, as the smoke test installs it

* ci: reach the Android chat console through the app version in Settings

* ci: tell Settings from the version screen on the way to the badges screen

* ci: keep one record of the last badges page the cycles read

* ci: let the Android harness set the app bars' blur

* ci: judge badge cycles by the page the Android screen draws

* ci: run badge cycles with the app bars' blur on and off

* ci: read each Android badge reading's pixels to the end

* ci: shorten the badge cycles with the app bars' blur on and off

* android, desktop: remove the badges screen's test logging

* android, desktop: fix the badges screen going blank when a badge is issued or ends

* ci: verify the badges screen over 31 credit and lapse cycles

* android, desktop: say why the badges pages are not cross-faded

* ci: type the badge cycles command again when characters are lost

* core: remove the test badge cycles

* ci: move the badge cycle steps to their own branch

---------

Co-authored-by: spacedandy-agents-simplex <342056592+spacedandy-agents-simplex@users.noreply.github.com>
2026-10-30 19:02:40 +00:00