commit 44f24924a827ad1e745173d89b207fba6abb3cc7
parent c8dec415cadf6a9263704ef29687fd98ae467df4
Author: Özgür Kesim <oec-taler@kesim.org>
Date: Sat, 13 Dec 2025 12:36:23 +0100
cleanup of some issues reported by sphinx
Diffstat:
8 files changed, 159 insertions(+), 66 deletions(-)
diff --git a/_static/_static/taler-logo.svg b/_static/_static/taler-logo.svg
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" width="670" height="300" viewBox="0 0 201 90"><g fill="#0042b3" fill-rule="evenodd" stroke-width=".3"><path d="M86.7 1.1c15.6 0 29 9.4 36 23.2h-5.9A35.1 35.1 0 0086.7 6.5C67 6.5 51 23.6 51 44.7c0 10.4 3.8 19.7 10 26.6a31.4 31.4 0 01-4.2 3A45.2 45.2 0 0146 44.7c0-24 18.2-43.6 40.7-43.6zm35.8 64.3a40.4 40.4 0 01-39 22.8c3-1.5 6-3.5 8.6-5.7a35.6 35.6 0 0024.6-17.1z"/><path d="M64.2 1.1l3.1.1c-3 1.6-5.9 3.5-8.5 5.8a37.5 37.5 0 00-30.2 37.7c0 14.3 7.3 26.7 18 33.3a29.6 29.6 0 01-8.5.2c-9-8-14.6-20-14.6-33.5 0-24 18.2-43.6 40.7-43.6zm5.4 81.4a35.6 35.6 0 0024.6-17.1h5.9a40.4 40.4 0 01-39 22.8c3-1.5 5.9-3.5 8.5-5.7zm24.8-58.2a37 37 0 00-12.6-12.8 29.6 29.6 0 018.5-.2c4 3.6 7.4 8 9.9 13z"/><path d="M41.8 1.1c1 0 2 0 3.1.2-3 1.5-5.9 3.4-8.5 5.6A37.5 37.5 0 006.1 44.7c0 21.1 16 38.3 35.7 38.3 12.6 0 23.6-7 30-17.6h5.8a40.4 40.4 0 01-35.8 23C19.3 88.4 1 68.8 1 44.7c0-24 18.2-43.6 40.7-43.6zm30.1 23.2a38.1 38.1 0 00-4.5-6.1c1.3-1.2 2.7-2.2 4.3-3 2.3 2.7 4.4 5.8 6 9.1z"/></g><path d="M76.1 34.4h9.2v-5H61.9v5H71v26h5.1zM92.6 52.9h13.7l3 7.4h5.3l-12.7-31.2h-4.7L84.5 60.3h5.2zm11.8-4.9h-9.9l5-12.4zM123.8 29.4h-4.6v31h20.6v-5h-16zM166.5 29.4H145v31h21.6v-5H150v-8.3h14.5v-4.9h-14.5v-8h16.4zM191.2 39.5c0 1.6-.5 2.8-1.6 3.8s-2.6 1.4-4.4 1.4h-7.4V34.3h7.4c1.9 0 3.4.4 4.4 1.3 1 .9 1.6 2.2 1.6 3.9zm6 20.8l-7.7-11.7c1-.3 1.9-.7 2.7-1.3a8.8 8.8 0 003.6-4.6c.4-1 .5-2.2.5-3.5 0-1.5-.2-2.9-.7-4.1a8.4 8.4 0 00-2.1-3.1c-1-.8-2-1.5-3.4-2-1.3-.4-2.8-.6-4.5-.6h-12.9v31h5V49.4h6.5l7 10.8z"/></svg>
-\ No newline at end of file
diff --git a/conf.py b/conf.py
@@ -153,13 +153,17 @@ html_theme = "sphinx_book_theme"
html_theme_options = {
# Set the name of the project to appear in the sidebar
"home_page_in_toc": True,
+ "collapse_navigation": True,
+ "collapse_navbar": True,
"logo": {
+ "alt_text": "GNU Taler",
"image_light": "images/taler-logo.svg",
"image_dark": "images/taler-logo-white.svg",
},
"show_navbar_depth": 1,
"show_toc_level": 2,
- "extra_navbar": "<div class='admonition note'><p class='admonition-title'>Questions or Suggestions?</p><p>Do you have any question or suggestion regarding the documentation? Go to our <a href='https://ich.taler.net/t/lost-in-documentation/255'>TALER Integration Community Hub</a>!</p></div>",
+ "use_fullscreen_button": False,
+ "use_download_button": False,
"extra_footer": "<div>Do you have any question or suggestion regarding the documentation? Go to our <a href='https://ich.taler.net/t/lost-in-documentation/255'>TALER Integration Community Hub</a>!</div>",
}
diff --git a/core/api-common.rst b/core/api-common.rst
@@ -660,6 +660,11 @@ Keys
// RSA public key converted to Crockford `Base32`.
type RsaPublicKey = string;
+.. ts:def:: PursePublicKey
+
+ type PursePublicKey = EddsaPublicKey;
+
+
.. _blinded-coin:
Blinded coin
@@ -771,6 +776,49 @@ Signatures
type DenominationBlindingKeySecret =
| RsaBlindingKeySecret;
+
+.. ts:def:: DenomCipher
+
+ interface DenomCipher = {
+ // specifier for the ciper
+ cipher: string;
+ }
+
+.. ts:def:: BlindedDenominationSignature
+
+ type BlindedDenominationSignature = DenomCipher & (
+ | RsaBlindedDenominationSignature
+ | CSBlindedDenominationSignature
+ )
+
+.. ts:def:: RsaBlindedDenominationSignature
+
+ interface RsaBlindedDenominationSignature extends DenomCipher {
+ cipher: "RSA";
+
+ // (blinded) RSA signature
+ blinded_rsa_signature: BlindedRsaSignature;
+ }
+
+.. ts:def:: CSBlindedDenominationSignature
+
+ interface CSBlindedDenominationSignature extends DenomCipher {
+ cipher: "CS";
+
+ // Signer chosen bit value, 0 or 1, used
+ // in Clause Blind Schnorr to make the
+ // ROS problem harder.
+ b: Integer;
+
+ // Blinded scalar calculated from c_b.
+ s: Cs25519Scalar;
+
+ }
+.. ts:def:: PurseContractSignature
+
+ type PurseContractSignature = EddsaSignature
+
+
.. _amount:
Amounts
@@ -2113,7 +2161,7 @@ within the
* purpose.purpose = TALER_SIGNATURE_EXCHANGE_CONFIRM_PURSE_REFUND.
*/
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
- struct TALER_PursePublicKey purse_pub;
+ struct TALER_PursePublicKeyP purse_pub;
union TALER_CoinSpendPublicKeyP coin_pub;
struct TALER_AmountNBO refunded_amount;
struct TALER_AmountNBO refund_fee;
diff --git a/core/api-exchange.rst b/core/api-exchange.rst
@@ -1887,36 +1887,6 @@ exchange.
}
-.. ts:def:: BlindedDenominationSignature
-
- type BlindedDenominationSignature = DenomCipher & (
- | RsaBlindedDenominationSignature
- | CSBlindedDenominationSignature
- )
-
-.. ts:def:: RsaBlindedDenominationSignature
-
- interface RsaBlindedDenominationSignature extends DenomCipher {
- cipher: "RSA";
-
- // (blinded) RSA signature
- blinded_rsa_signature: BlindedRsaSignature;
- }
-
-.. ts:def:: CSBlindedDenominationSignature
-
- interface CSBlindedDenominationSignature extends DenomCipher {
- cipher: "CS";
-
- // Signer chosen bit value, 0 or 1, used
- // in Clause Blind Schnorr to make the
- // ROS problem harder.
- b: Integer;
-
- // Blinded scalar calculated from c_b.
- s: Cs25519Scalar;
-
- }
.. ts:def:: AgeWithdrawResponse
@@ -2159,7 +2129,7 @@ Melt
can be decided by looking at the error code
(``TALER_EC_EXCHANGE_GENERIC_INSUFFICIENT_FUNDS`` or
``TALER_EC_EXCHANGE_GENERIC_COIN_CONFLICTING_DENOMINATION_KEY``).
- The response is `DepositDoubleSpendError` in both cases.
+ The response is `MeltForbiddenResponse` in both cases.
:http:statuscode:`410 Gone`:
The requested denomination key is not yet or no longer valid.
It either before the validity start, past the expiration or was revoked. The response is a
@@ -2296,6 +2266,25 @@ Melt
}
+ .. ts:def:: MeltForbiddenResponse
+
+ interface MeltForbiddenResponse {
+
+ // Must be TALER_EC_EXCHANGE_GENERIC_INSUFFICIENT_FUNDS
+ // or TALER_EC_EXCHANGE_GENERIC_COIN_CONFLICTING_DENOMINATION_KEY
+ code: Integer;
+
+ // A string explaining that the user tried to
+ // double-spend.
+ hint: string;
+
+ // EdDSA public key of a coin being double-spent.
+ coin_pub: EddsaPublicKey;
+
+ // Hash of the public key of the denomination of the coin.
+ h_denom_pub: HashCode;
+
+ }
^^^^^^^^^^^
Reveal-Melt
@@ -3779,7 +3768,7 @@ The GET request should come with the following HTTP headers:
// The original coin, from which this coin was derived from
// in a call to /refresh, and which was then credited with
// the residual value of this coin in a call to /recoup-refresh.
- old_coin_pub: EddsPublicKey;
+ old_coin_pub: EddsaPublicKey;
// Signature by the coin over a `TALER_RecoupRequestPS`
// with purpose ``TALER_SIGNATURE_WALLET_COIN_RECOUP``.
@@ -4723,6 +4712,7 @@ Wallet-to-wallet transfers
econtract: EncryptedContract;
}
+
.. http:post:: /purses/$PURSE_PUB/deposit
Deposit money into a purse. Used by the buyer for a PULL payment.
diff --git a/core/index.rst b/core/index.rst
@@ -1,6 +1,6 @@
..
This file is part of GNU TALER.
- Copyright (C) 2014-2023 Taler Systems SA
+ Copyright (C) 2014-2025 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU Affero General Public License as published by the Free Software
@@ -18,6 +18,7 @@
@author Sree Harsha Totakura
@author Marcello Stanisci
@author Christian Grothoff
+ @author Özgür Kesim
-----------------
API Specification
diff --git a/deployments/tops.rst b/deployments/tops.rst
@@ -1,9 +1,6 @@
Taler Operations Deployment
===========================
-.. contents:: Table of Contents
- :depth: 3
-
Definitions / Glossary
----------------------
@@ -1992,7 +1989,7 @@ Events:
.. code:: javascript
if (propBecameTrue(ACCOUNT_OPEN)) {
- emit(INCR_ACCOUNT_OPEN); # event-rule 1
+ emit(INCR_ACCOUNT_OPEN); // event-rule 1
const isPep = (
newProps.PEP_FOREIGN ||
@@ -2001,27 +1998,27 @@ Events:
);
if (isPep) {
- emit(INCR_PEP); # event-rule 2
+ emit(INCR_PEP); // event-rule 2
}
if (newProps.PEP_FOREIGN) {
- emit(INCR_PEP_FOREIGN); # event-rule 3
+ emit(INCR_PEP_FOREIGN); // event-rule 3
}
if (newProps.PEP_DOMESTIC) {
- emit(INCR_PEP_DOMESTIC); # event-rule 4
+ emit(INCR_PEP_DOMESTIC); // event-rule 4
}
if (newProps.PEP_INTERNATIONAL_ORGANIZATION) {
- emit(INCR_PEP_INTERNATIONAL_ORGANIZATION); # event-rule 5
+ emit(INCR_PEP_INTERNATIONAL_ORGANIZATION); // event-rule 5
}
if (newProps.HIGH_RISK_CUSTOMER) {
- emit(INCR_HIGH_RISK_CUSTOMER); # event-rule 6
+ emit(INCR_HIGH_RISK_CUSTOMER); // event-rule 6
}
if (newProps.HIGH_RISK_COUNTRY) {
- emit(INCR_HIGH_RISK_COUNTRY); # event-rule 7
+ emit(INCR_HIGH_RISK_COUNTRY); // event-rule 7
}
}
@@ -2045,22 +2042,22 @@ Events:
if (oldProps.ACCOUNT_OPEN) {
if (propBecameTrue(PEP_FOREIGN) {
- emit(INCR_PEP_FOREIGN); # event-rule 8
+ emit(INCR_PEP_FOREIGN); // event-rule 8
}
if (propBecameTrue(PEP_INTERNATIONAL_ORGANIZATION) {
- emit(INCR_PEP_INTERNATIONAL_ORGANIZATION); # event-rule 9
+ emit(INCR_PEP_INTERNATIONAL_ORGANIZATION); // event-rule 9
}
if (propBecameTrue(PEP_DOMESTIC) {
- emit(INCR_PEP_DOMESTIC); # event-rule 10
+ emit(INCR_PEP_DOMESTIC); // event-rule 10
}
if (propBecameFalse(PEP_FOREIGN) {
- emit(DECR_PEP_FOREIGN); # event-rule 11
+ emit(DECR_PEP_FOREIGN); // event-rule 11
}
if (propBecameFalse(PEP_INTERNATIONAL_ORGANIZATION) {
- emit(DECR_PEP_INTERNATIONAL_ORGANIZATION); # event-rule 12
+ emit(DECR_PEP_INTERNATIONAL_ORGANIZATION); // event-rule 12
}
if (propBecameFalse(PEP_DOMESTIC) {
- emit(DECR_PEP_DOMESTIC); # event-rule 13
+ emit(DECR_PEP_DOMESTIC); // event-rule 13
}
const wasPep = (
oldProps.PEP_DOMESTIC ||
@@ -2071,22 +2068,22 @@ Events:
newProps.PEP_FOREIGN ||
newProps.PEP_INTERNATIONAL_ORGANIZATION);
if (wasPep && !isPep) {
- emit(DECR_PEP); # event-rule 14
+ emit(DECR_PEP); // event-rule 14
}
if (!wasPep & isPep) {
- emit(INCR_PEP); # event-rule 15
+ emit(INCR_PEP); // event-rule 15
}
if (propBecameTrue(HIGH_RISK_COUNTRY)) {
- emit(INCR_HIGH_RISK_COUNTRY); # event-rule 16
+ emit(INCR_HIGH_RISK_COUNTRY); // event-rule 16
}
if (propBecameFalse(HIGH_RISK_COUNTRY)) {
- emit(DECR_HIGH_RISK_COUNTRY); # event-rule 17
+ emit(DECR_HIGH_RISK_COUNTRY); // event-rule 17
}
if (propBecameTrue(HIGH_RISK_CUSTOMER)) {
- emit(INCR_HIGH_RISK_CUSTOMER); # event-rule 18
+ emit(INCR_HIGH_RISK_CUSTOMER); // event-rule 18
}
if (propBecameFalse(HIGH_RISK_CUSTOMER)) {
- emit(DECR_HIGH_RISK_CUSTOMER); # event-rule 19
+ emit(DECR_HIGH_RISK_CUSTOMER); // event-rule 19
}
}
@@ -2124,23 +2121,23 @@ Events:
if (newProps.INVESTIGATION_STATE == "REPORTED_SUSPICION_SIMPLE" ||
newProps.INVESTIGATION_STATE == "REPORTED_SUSPICION_SUBSTANTIATED" ||
newProps.INVESTIGATION_STATE == "INVESTIGATION_COMPLETED_WITHOUT_SUSPICION") {
- emit(INCR_INVESTIGATION_CONCLUDED); # event-rule 20
+ emit(INCR_INVESTIGATION_CONCLUDED); // event-rule 20
}
if (newProps.INVESTIGATION_STATE == "REPORTED_SUSPICION_SUBSTANTIATED") {
- // FIXME-#9676: if possible, we should force the AML officer to tick
+ // FIXME-//9676: if possible, we should force the AML officer to tick
// an extra check-box "I submitted this case to MROS". No need to
// actually do anything here server-side, it's more an explicit
// acknowledgement/reminder to make really sure this event is only
// emitted if the report was files.
- emit(MROS_REPORTED_SUSPICION_SUBSTANTIATED); # event-rule 21
+ emit(MROS_REPORTED_SUSPICION_SUBSTANTIATED); // event-rule 21
}
if (newProps.INVESTIGATION_STATE == "REPORTED_SUSPICION_SIMPLE") {
- // FIXME-#9676: if possible, we should force the AML officer to tick
+ // FIXME-//9676: if possible, we should force the AML officer to tick
// an extra check-box "I submitted this case to MROS". No need to
// actually do anything here server-side, it's more an explicit
// acknowledgement/reminder to make really sure this event is only
// emitted if the report was files.
- emit(MROS_REPORTED_SUSPICION_SIMPLE); # event-rule 22
+ emit(MROS_REPORTED_SUSPICION_SIMPLE); // event-rule 22
}
}
diff --git a/design-documents/053-wallet-ui.rst b/design-documents/053-wallet-ui.rst
@@ -509,21 +509,25 @@ Proposed Design
^^^^^^^^^^^^^^^
.. image:: ../screenshots/design/cta-withdraw-1.png
+
After choosing "Withdraw", the user is presented with this screen.
The keyboard for amount entry automatically opens.
The Withdraw button is disabled until a valid amount is entered. Once a valid amount is provided, the button is enabled and displayed with the primary color.
.. image:: ../screenshots/design/cta-withdraw-2.png
+
The user can select a currency from a dropdown list.
A warning icon appears next to the currency selector; tapping it opens a dialog (see next image).
The warning icon uses the warning color from the :doc:`066-wallet-color-scheme`.
.. image:: ../screenshots/design/cta-withdraw-3.png
+
The warning dialog displays the message:
"The service provider is not trusted by the developers of this wallet."
Colors warningContainer and onWarningContainer are applied here.
.. image:: ../screenshots/design/cta-withdraw-4.png
+
If applicable, fees are displayed below the amount input field.
Below the amount section, amount shortcuts defined by the exchange are shown for quick selection.
diff --git a/images/taler-logo.svg b/images/taler-logo.svg
@@ -1 +1,53 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" width="670" height="300" viewBox="0 0 201 90"><g fill="#0042b3" fill-rule="evenodd" stroke-width=".3"><path d="M86.7 1.1c15.6 0 29 9.4 36 23.2h-5.9A35.1 35.1 0 0086.7 6.5C67 6.5 51 23.6 51 44.7c0 10.4 3.8 19.7 10 26.6a31.4 31.4 0 01-4.2 3A45.2 45.2 0 0146 44.7c0-24 18.2-43.6 40.7-43.6zm35.8 64.3a40.4 40.4 0 01-39 22.8c3-1.5 6-3.5 8.6-5.7a35.6 35.6 0 0024.6-17.1z"/><path d="M64.2 1.1l3.1.1c-3 1.6-5.9 3.5-8.5 5.8a37.5 37.5 0 00-30.2 37.7c0 14.3 7.3 26.7 18 33.3a29.6 29.6 0 01-8.5.2c-9-8-14.6-20-14.6-33.5 0-24 18.2-43.6 40.7-43.6zm5.4 81.4a35.6 35.6 0 0024.6-17.1h5.9a40.4 40.4 0 01-39 22.8c3-1.5 5.9-3.5 8.5-5.7zm24.8-58.2a37 37 0 00-12.6-12.8 29.6 29.6 0 018.5-.2c4 3.6 7.4 8 9.9 13z"/><path d="M41.8 1.1c1 0 2 0 3.1.2-3 1.5-5.9 3.4-8.5 5.6A37.5 37.5 0 006.1 44.7c0 21.1 16 38.3 35.7 38.3 12.6 0 23.6-7 30-17.6h5.8a40.4 40.4 0 01-35.8 23C19.3 88.4 1 68.8 1 44.7c0-24 18.2-43.6 40.7-43.6zm30.1 23.2a38.1 38.1 0 00-4.5-6.1c1.3-1.2 2.7-2.2 4.3-3 2.3 2.7 4.4 5.8 6 9.1z"/></g><path d="M76.1 34.4h9.2v-5H61.9v5H71v26h5.1zM92.6 52.9h13.7l3 7.4h5.3l-12.7-31.2h-4.7L84.5 60.3h5.2zm11.8-4.9h-9.9l5-12.4zM123.8 29.4h-4.6v31h20.6v-5h-16zM166.5 29.4H145v31h21.6v-5H150v-8.3h14.5v-4.9h-14.5v-8h16.4zM191.2 39.5c0 1.6-.5 2.8-1.6 3.8s-2.6 1.4-4.4 1.4h-7.4V34.3h7.4c1.9 0 3.4.4 4.4 1.3 1 .9 1.6 2.2 1.6 3.9zm6 20.8l-7.7-11.7c1-.3 1.9-.7 2.7-1.3a8.8 8.8 0 003.6-4.6c.4-1 .5-2.2.5-3.5 0-1.5-.2-2.9-.7-4.1a8.4 8.4 0 00-2.1-3.1c-1-.8-2-1.5-3.4-2-1.3-.4-2.8-.6-4.5-.6h-12.9v31h5V49.4h6.5l7 10.8z"/></svg>
-\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ width="196.2"
+ height="87.300003"
+ viewBox="0 0 196.2 87.300004"
+ version="1.1"
+ id="svg4"
+ sodipodi:docname="taler-logo.svg"
+ inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="namedview4"
+ pagecolor="#ffffff"
+ bordercolor="#000000"
+ borderopacity="0.25"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:zoom="2.0492537"
+ inkscape:cx="97.840495"
+ inkscape:cy="42.942462"
+ inkscape:window-width="3836"
+ inkscape:window-height="2113"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg4" />
+ <g
+ fill="#0042b3"
+ fill-rule="evenodd"
+ stroke-width="0.3"
+ id="g3"
+ transform="translate(-1,-1.1)">
+ <path
+ d="m 86.7,1.1 c 15.6,0 29,9.4 36,23.2 h -5.9 A 35.1,35.1 0 0 0 86.7,6.5 C 67,6.5 51,23.6 51,44.7 c 0,10.4 3.8,19.7 10,26.6 a 31.4,31.4 0 0 1 -4.2,3 A 45.2,45.2 0 0 1 46,44.7 C 46,20.7 64.2,1.1 86.7,1.1 Z m 35.8,64.3 a 40.4,40.4 0 0 1 -39,22.8 c 3,-1.5 6,-3.5 8.6,-5.7 a 35.6,35.6 0 0 0 24.6,-17.1 z"
+ id="path1" />
+ <path
+ d="m 64.2,1.1 3.1,0.1 C 64.3,2.8 61.4,4.7 58.8,7 A 37.5,37.5 0 0 0 28.6,44.7 c 0,14.3 7.3,26.7 18,33.3 a 29.6,29.6 0 0 1 -8.5,0.2 c -9,-8 -14.6,-20 -14.6,-33.5 0,-24 18.2,-43.6 40.7,-43.6 z m 5.4,81.4 A 35.6,35.6 0 0 0 94.2,65.4 h 5.9 a 40.4,40.4 0 0 1 -39,22.8 c 3,-1.5 5.9,-3.5 8.5,-5.7 z M 94.4,24.3 A 37,37 0 0 0 81.8,11.5 29.6,29.6 0 0 1 90.3,11.3 c 4,3.6 7.4,8 9.9,13 z"
+ id="path2" />
+ <path
+ d="m 41.8,1.1 c 1,0 2,0 3.1,0.2 -3,1.5 -5.9,3.4 -8.5,5.6 A 37.5,37.5 0 0 0 6.1,44.7 c 0,21.1 16,38.3 35.7,38.3 12.6,0 23.6,-7 30,-17.6 h 5.8 a 40.4,40.4 0 0 1 -35.8,23 C 19.3,88.4 1,68.8 1,44.7 1,20.7 19.2,1.1 41.7,1.1 Z m 30.1,23.2 a 38.1,38.1 0 0 0 -4.5,-6.1 c 1.3,-1.2 2.7,-2.2 4.3,-3 2.3,2.7 4.4,5.8 6,9.1 z"
+ id="path3" />
+ </g>
+ <path
+ d="m 75.1,33.3 h 9.2 v -5 H 60.9 v 5 H 70 v 26 h 5.1 z m 16.5,18.5 h 13.7 l 3,7.4 h 5.3 L 100.9,28 H 96.2 L 83.5,59.2 h 5.2 z m 11.8,-4.9 h -9.9 l 5,-12.4 z m 19.4,-18.6 h -4.6 v 31 h 20.6 v -5 h -16 z m 42.7,0 H 144 v 31 h 21.6 v -5 H 149 V 46 h 14.5 V 41.1 H 149 v -8 h 16.4 z m 24.7,10.1 c 0,1.6 -0.5,2.8 -1.6,3.8 -1.1,1 -2.6,1.4 -4.4,1.4 h -7.4 V 33.2 h 7.4 c 1.9,0 3.4,0.4 4.4,1.3 1,0.9 1.6,2.2 1.6,3.9 z m 6,20.8 -7.7,-11.7 c 1,-0.3 1.9,-0.7 2.7,-1.3 a 8.8,8.8 0 0 0 3.6,-4.6 c 0.4,-1 0.5,-2.2 0.5,-3.5 0,-1.5 -0.2,-2.9 -0.7,-4.1 a 8.4,8.4 0 0 0 -2.1,-3.1 c -1,-0.8 -2,-1.5 -3.4,-2 -1.3,-0.4 -2.8,-0.6 -4.5,-0.6 h -12.9 v 31 h 5 v -11 h 6.5 l 7,10.8 z"
+ id="path4" />
+</svg>