lsd0009

LSD0009: The GNU Taler Protocol
Log | Files | Refs | README

commit 56d4ae91712dcb8b3a151db2e8af3f97af6c5e10
parent 72316d7ba9f2fa83f922727971016e89323cb160
Author: Mikolai Gütschow <mikolai.guetschow@tu-dresden.de>
Date:   Wed,  8 Apr 2026 10:39:03 +0200

protocol: rename Sign-Msg

Diffstat:
Mdraft-guetschow-taler-protocol.md | 51++++++++++++++++++++++++++-------------------------
Mdraft-guetschow-taler-protocol.xml | 420++++++++++++++++++++++++++++++++++++++++---------------------------------------
2 files changed, 238 insertions(+), 233 deletions(-)

diff --git a/draft-guetschow-taler-protocol.md b/draft-guetschow-taler-protocol.md @@ -340,7 +340,7 @@ out = (data == exp) ### Clause-Schnorr -# Datatypes +# Datatypes and Notation ## Amount @@ -371,7 +371,7 @@ a fixed signing context (purpose) as registered by GANA in the registry. Taler-related purposes start at 1000. ~~~ -Sign-Msg(purpose, msg) -> out +Gen-Msg(purpose, msg) -> out Inputs: purpose signature purpose as registered at GANA @@ -394,12 +394,17 @@ out = uint32(len(msg)) | uint32(purpose) | msg - Planchet-Hash: SHA-512( SHA-512( denomᵢ.pub ) | uint32(0x1) | planchetᵢ ) - check-decrement: check reserve.balance >= total, persist reserve.balance -= total - refresh-derivation (only for refresh/link) +- persist-{type} (key1, key2, ...) => (val1, val2, ...) +- lookup-{type} (key1) +- check bool +- knows data +- sum ⟨dataᵢ⟩ +- ⟨dataᵢ⟩ +- for/if ~~~ # The Taler Crypto Protocol -// todo: explain persist, check, knows, sum, indexing/list notation - ## Withdrawal {#withdrawal} The wallet generates `n > 0` coins `⟨coinᵢ⟩` and requests `n` signatures `⟨blind_sigᵢ⟩` from the exchange, @@ -407,8 +412,6 @@ attributing value to the coins according to `n` chosen denominations `⟨denom The total value and withdrawal fee (defined by the exchange per denomination) must be smaller or equal to the amount stored in the single reserve used for withdrawal. -// todo: explain notation: ⟨⟩ᵢ - // todo: document TALER_MAX_COINS = 64 per operation (due to CS-encoding) // todo: extend with extra roundtrip for CBS @@ -477,7 +480,7 @@ for i in 0..n: planchetᵢ = RSA-FDH-Blind(SHA-512(coinᵢ.pub), blind_secretᵢ, denomᵢ.pub) h_planchetᵢ = SHA-512( SHA-512( denomᵢ.pub ) | uint32(0x1) | planchetᵢ ) planchets = (⟨h_denomᵢ⟩, ⟨planchetᵢ⟩) -msg = Sign-Msg(WALLET_RESERVE_WITHDRAW, +msg = Gen-Msg(WALLET_RESERVE_WITHDRAW, ( sum( ⟨denomᵢ.value⟩ ) | sum( ⟨denomᵢ.fee_withdraw⟩ ) | SHA-512( ⟨h_planchetᵢ⟩ ) | uint256(0x0) | uint32(0x0) | uint32(0x0) )) sig = EdDSA-Sign(reserve.priv, msg) @@ -491,7 +494,7 @@ for i in 0..n: denomᵢ = Denom-Lookup(h_denomᵢ) check denomᵢ known and not withdrawal-expired h_planchetᵢ = SHA-512( SHA-512( denomᵢ.pub ) | uint32(0x1) | planchetᵢ ) -msg = Sign-Msg(WALLET_RESERVE_WITHDRAW, +msg = Gen-Msg(WALLET_RESERVE_WITHDRAW, ( sum( ⟨denomᵢ.value⟩ ) | sum( ⟨denomᵢ.fee_withdraw⟩ ) | SHA-512( ⟨h_planchetᵢ⟩ ) | uint256(0x0) | uint32(0x0) | uint32(0x0) )) check EdDSA-Verify(reserve.pub, msg, sig) @@ -599,7 +602,7 @@ contract = (order.{id,price,info,token?}, exchange, h_wire, timestamp, refund_de contract.nonce = nonce.pub persist contract h_contract = SHA-512(canonicalJSON(contract)) -msg = Sign-Msg(MERCHANT_CONTRACT, h_contract) +msg = Gen-Msg(MERCHANT_CONTRACT, h_contract) sig = EdDSA-Sign(merchant.priv, msg) ~~~ @@ -607,7 +610,7 @@ sig = EdDSA-Sign(merchant.priv, msg) (W2) payment preparation (wallet) h_contract = SHA-512(canonicalJSON(contract)) -msg = Sign-Msg(MERCHANT_CONTRACT, h_contract) +msg = Gen-Msg(MERCHANT_CONTRACT, h_contract) check EdDSA-Verify(merchant.pub, msg, sig) check contract.nonce == nonce // TODO: double-check extra hash check? @@ -615,7 +618,7 @@ check contract.nonce == nonce ⟨selectionᵢ⟩ = CoinSelection(contract.{exchange,price}) TODO: include MarkDirty here for i in 0..n: (coinᵢ, denomᵢ, contributionᵢ) = selectionᵢ - msgᵢ = Sign-Msg(WALLET_COIN_DEPOSIT, + msgᵢ = Gen-Msg(WALLET_COIN_DEPOSIT, ( h_contract | uint256(0x0) | uint512(0x0) | contract.h_wire | coinᵢ.h_denom | contract.timestamp | contract.refund_deadline @@ -630,21 +633,19 @@ persist (contract, ⟨sigᵢ⟩, ⟨depositᵢ⟩) // TODO: maybe introduce symbol for pub/priv -// TODO: maybe rename Sign-Msg as name is currently a bit confusing (not actually signing a message, but just generating the message to be signed) - ~~~ (M3) deposit check (merchant) check sum( ⟨depositᵢ.contribution⟩ ) == contract.price check Deposit(⟨depositᵢ⟩) -msg = Sign-Msg(MERCHANT_PAYMENT_OK, h_contract) +msg = Gen-Msg(MERCHANT_PAYMENT_OK, h_contract) sig = EdDSA-Sign(merchant.priv, msg) ~~~ ~~~ (W3) payment verification (wallet) -msg = Sign-Msg(MERCHANT_PAYMENT_OK, h_contract) +msg = Gen-Msg(MERCHANT_PAYMENT_OK, h_contract) check EdDSA-Verify(merchant.pub, msg, sig) ~~~ @@ -689,7 +690,7 @@ where (without age restriction, policy and wallet data hash) info.time = contract.{timestamp, wire_deadline, refund_deadline} info.wire = (payto, wire_salt) h_contract = SHA-512(canonicalJSON(contract)) -msg = Sign-Msg(MERCHANT_CONTRACT, h_contract) +msg = Gen-Msg(MERCHANT_CONTRACT, h_contract) sig = EdDSA-Sign(merchant.priv, msg) ~~~ @@ -702,7 +703,7 @@ for i in 0..n: denomᵢ = Denom-Lookup(coinᵢ.h_denom) check denomᵢ known and not deposit-expired // todo: check could be included in Denom-Lookup totalᵢ = depositᵢ.contribution + denomᵢ.fee_deposit - msgᵢ = Sign-Msg(WALLET_COIN_DEPOSIT, + msgᵢ = Gen-Msg(WALLET_COIN_DEPOSIT, ( h_contract | uint256(0x0) | uint512(0x0) | h_wire | coinᵢ.h_denom | info.time.timestamp | info.time.refund_deadline @@ -715,7 +716,7 @@ for i in 0..n: persist deposit-record schedule bank transfer to payto timestamp = now() -msg = Sign-Msg(EXCHANGE_CONFIRM_DEPOSIT, +msg = Gen-Msg(EXCHANGE_CONFIRM_DEPOSIT, ( h_contract | h_wire | uint512(0x0) | timestamp | info.time.wire_deadline | info.time.refund_deadline @@ -728,7 +729,7 @@ sig = EdDSA-Sign(exchange.priv, msg) (M2) Deposit verification (merchant) h_wire = HKDF(wire_salt, payto, "merchant-wire-signature", 64) -msg = Sign-Msg(EXCHANGE_CONFIRM_DEPOSIT, +msg = Gen-Msg(EXCHANGE_CONFIRM_DEPOSIT, ( h_contract | h_wire | uint512(0x0) | timestamp | contract.wire_deadline | contract.refund_deadline @@ -818,7 +819,7 @@ commitment = SHA-512( refresh_seed | uint256(0x0) | coin.pub | value for i in 0..n: h_denomᵢ = SHA-512(uint32(0) | uint32(0x1) | denomᵢ.pub) planchets = (⟨h_denomᵢ⟩, ⟨planchetₖᵢ⟩, ⟨transferₖᵢ.pub⟩)) -msg = Sign-Msg(WALLET_COIN_MELT, +msg = Gen-Msg(WALLET_COIN_MELT, ( commitment | coin.h_denom | uint256(0x0) | value | denom.fee_refresh )) sig = EdDSA-Sign(coin.priv, msg) @@ -853,7 +854,7 @@ for k in 0..κ: h_planchetsₖ = SHA-512( ⟨h_planchetₖᵢ⟩ ) commitment = SHA-512( refresh_seed | uint256(0x0) | coin.pub | value | SHA-512( ⟨h_planchetsₖ⟩ ) ) -msg = Sign-Msg(WALLET_COIN_MELT, +msg = Gen-Msg(WALLET_COIN_MELT, ( commitment | coin.h_denom | uint256(0x0) | value | denom.fee_refresh )) check EdDSA-Verify(coin.pub, msg, sig) @@ -864,7 +865,7 @@ if refresh-record not found: blind_sigᵢ = RSA-FDH-Sign(planchetᵧᵢ, denomᵧᵢ.priv) link_info = (refresh_seed, ⟨transferₖᵢ.pub⟩, ⟨h_denomᵢ⟩, coin_sig) persist refresh-record = (commitment, ɣ, ⟨blind_sigᵢ⟩, h_planchetsᵧ, false, link_info) -msg = Sign-Msg(EXCHANGE_CONFIRM_MELT, +msg = Gen-Msg(EXCHANGE_CONFIRM_MELT, ( commitment | uint32(ɣ) )) sig = EdDSA-Sign(exchange.priv, msg) ~~~ @@ -881,7 +882,7 @@ sig = EdDSA-Sign(exchange.priv, msg) (W2) secret revelation (wallet) check exchange.pub known -msg = Sign-Msg(EXCHANGE_CONFIRM_MELT, +msg = Gen-Msg(EXCHANGE_CONFIRM_MELT, ( commitment | ɣ )) check EdDSA-Verify(exchange.pub, msg, sig) persist refresh-challenge // what exactly? @@ -975,7 +976,7 @@ where (for RSA, without age-restriction) ~~~ (W1) history request (wallet) -msg = Sign-Msg(COIN_HISTORY_REQUEST, uint64(0x0)) +msg = Gen-Msg(COIN_HISTORY_REQUEST, uint64(0x0)) sig = EdDSA-Sign(coin.priv, msg) ~~~ @@ -1020,7 +1021,7 @@ for k in 0..κ: value = coin.denom.fee_refresh + sum( ⟨denomᵢ.value⟩ ) + sum( ⟨denomᵢ.fee_withdraw⟩ ) commitment = SHA-512( refresh_seed | uint256(0x0) | coin.pub | value | SHA-512( ⟨h_planchetsₖ⟩ ) ) -msg = Sign-Msg(WALLET_COIN_MELT, +msg = Gen-Msg(WALLET_COIN_MELT, ( commitment | coin.h_denom | uint256(0x0) | value | denom.fee_refresh )) check EdDSA-Verify(coin.pub, msg, sig) diff --git a/draft-guetschow-taler-protocol.xml b/draft-guetschow-taler-protocol.xml @@ -333,8 +333,8 @@ out = (data == exp) </section> </section> </section> - <section anchor="datatypes"> - <name>Datatypes</name> + <section anchor="datatypes-and-notation"> + <name>Datatypes and Notation</name> <section anchor="amount"> <name>Amount</name> <t>Amounts are represented in Taler as positive fixed-point values @@ -363,7 +363,7 @@ a fixed signing context (purpose) as registered by GANA in the <eref target="https://gana.gnunet.org/gnunet-signatures/gnunet_signatures.html">GNUnet Signature Purposes</eref> registry. Taler-related purposes start at 1000.</t> <artwork><![CDATA[ -Sign-Msg(purpose, msg) -> out +Gen-Msg(purpose, msg) -> out Inputs: purpose signature purpose as registered at GANA @@ -384,19 +384,24 @@ out = uint32(len(msg)) | uint32(purpose) | msg - Planchet-Hash: SHA-512( SHA-512( denomᵢ.pub ) | uint32(0x1) | planchetᵢ ) - check-decrement: check reserve.balance >= total, persist reserve.balance -= total - refresh-derivation (only for refresh/link) +- persist-{type} (key1, key2, ...) => (val1, val2, ...) +- lookup-{type} (key1) +- check bool +- knows data +- sum ⟨dataᵢ⟩ +- ⟨dataᵢ⟩ +- for/if ]]></artwork> </section> </section> <section anchor="the-taler-crypto-protocol"> <name>The Taler Crypto Protocol</name> - <t>// todo: explain persist, check, knows, sum, indexing/list notation</t> <section anchor="withdrawal"> <name>Withdrawal</name> <t>The wallet generates <tt>n &gt; 0</tt> coins <tt>⟨coinᵢ⟩</tt> and requests <tt>n</tt> signatures <tt>⟨blind_sigᵢ⟩</tt> from the exchange, attributing value to the coins according to <tt>n</tt> chosen denominations <tt>⟨denomᵢ⟩</tt>. The total value and withdrawal fee (defined by the exchange per denomination) must be smaller or equal to the amount stored in the single reserve used for withdrawal.</t> - <t>// todo: explain notation: ⟨⟩ᵢ</t> <t>// todo: document TALER_MAX_COINS = 64 per operation (due to CS-encoding)</t> <t>// todo: extend with extra roundtrip for CBS</t> <artwork><![CDATA[ @@ -458,7 +463,7 @@ for i in 0..n: planchetᵢ = RSA-FDH-Blind(SHA-512(coinᵢ.pub), blind_secretᵢ, denomᵢ.pub) h_planchetᵢ = SHA-512( SHA-512( denomᵢ.pub ) | uint32(0x1) | planchetᵢ ) planchets = (⟨h_denomᵢ⟩, ⟨planchetᵢ⟩) -msg = Sign-Msg(WALLET_RESERVE_WITHDRAW, +msg = Gen-Msg(WALLET_RESERVE_WITHDRAW, ( sum( ⟨denomᵢ.value⟩ ) | sum( ⟨denomᵢ.fee_withdraw⟩ ) | SHA-512( ⟨h_planchetᵢ⟩ ) | uint256(0x0) | uint32(0x0) | uint32(0x0) )) sig = EdDSA-Sign(reserve.priv, msg) @@ -471,7 +476,7 @@ for i in 0..n: denomᵢ = Denom-Lookup(h_denomᵢ) check denomᵢ known and not withdrawal-expired h_planchetᵢ = SHA-512( SHA-512( denomᵢ.pub ) | uint32(0x1) | planchetᵢ ) -msg = Sign-Msg(WALLET_RESERVE_WITHDRAW, +msg = Gen-Msg(WALLET_RESERVE_WITHDRAW, ( sum( ⟨denomᵢ.value⟩ ) | sum( ⟨denomᵢ.fee_withdraw⟩ ) | SHA-512( ⟨h_planchetᵢ⟩ ) | uint256(0x0) | uint32(0x0) | uint32(0x0) )) check EdDSA-Verify(reserve.pub, msg, sig) @@ -572,14 +577,14 @@ contract = (order.{id,price,info,token?}, exchange, h_wire, timestamp, refund_de contract.nonce = nonce.pub persist contract h_contract = SHA-512(canonicalJSON(contract)) -msg = Sign-Msg(MERCHANT_CONTRACT, h_contract) +msg = Gen-Msg(MERCHANT_CONTRACT, h_contract) sig = EdDSA-Sign(merchant.priv, msg) ]]></artwork> <artwork><![CDATA[ (W2) payment preparation (wallet) h_contract = SHA-512(canonicalJSON(contract)) -msg = Sign-Msg(MERCHANT_CONTRACT, h_contract) +msg = Gen-Msg(MERCHANT_CONTRACT, h_contract) check EdDSA-Verify(merchant.pub, msg, sig) check contract.nonce == nonce // TODO: double-check extra hash check? @@ -587,7 +592,7 @@ check contract.nonce == nonce ⟨selectionᵢ⟩ = CoinSelection(contract.{exchange,price}) TODO: include MarkDirty here for i in 0..n: (coinᵢ, denomᵢ, contributionᵢ) = selectionᵢ - msgᵢ = Sign-Msg(WALLET_COIN_DEPOSIT, + msgᵢ = Gen-Msg(WALLET_COIN_DEPOSIT, ( h_contract | uint256(0x0) | uint512(0x0) | contract.h_wire | coinᵢ.h_denom | contract.timestamp | contract.refund_deadline @@ -599,19 +604,18 @@ persist (contract, ⟨sigᵢ⟩, ⟨depositᵢ⟩) ]]></artwork> <t>// TODO: explain CoinSelection</t> <t>// TODO: maybe introduce symbol for pub/priv</t> - <t>// TODO: maybe rename Sign-Msg as name is currently a bit confusing (not actually signing a message, but just generating the message to be signed)</t> <artwork><![CDATA[ (M3) deposit check (merchant) check sum( ⟨depositᵢ.contribution⟩ ) == contract.price check Deposit(⟨depositᵢ⟩) -msg = Sign-Msg(MERCHANT_PAYMENT_OK, h_contract) +msg = Gen-Msg(MERCHANT_PAYMENT_OK, h_contract) sig = EdDSA-Sign(merchant.priv, msg) ]]></artwork> <artwork><![CDATA[ (W3) payment verification (wallet) -msg = Sign-Msg(MERCHANT_PAYMENT_OK, h_contract) +msg = Gen-Msg(MERCHANT_PAYMENT_OK, h_contract) check EdDSA-Verify(merchant.pub, msg, sig) ]]></artwork> </section> @@ -652,7 +656,7 @@ knows contract, ⟨depositᵢ⟩ | info.time = contract.{timestamp, wire_deadline, refund_deadline} info.wire = (payto, wire_salt) h_contract = SHA-512(canonicalJSON(contract)) -msg = Sign-Msg(MERCHANT_CONTRACT, h_contract) +msg = Gen-Msg(MERCHANT_CONTRACT, h_contract) sig = EdDSA-Sign(merchant.priv, msg) ]]></artwork> <artwork><![CDATA[ @@ -664,7 +668,7 @@ for i in 0..n: denomᵢ = Denom-Lookup(coinᵢ.h_denom) check denomᵢ known and not deposit-expired // todo: check could be included in Denom-Lookup totalᵢ = depositᵢ.contribution + denomᵢ.fee_deposit - msgᵢ = Sign-Msg(WALLET_COIN_DEPOSIT, + msgᵢ = Gen-Msg(WALLET_COIN_DEPOSIT, ( h_contract | uint256(0x0) | uint512(0x0) | h_wire | coinᵢ.h_denom | info.time.timestamp | info.time.refund_deadline @@ -677,7 +681,7 @@ for i in 0..n: persist deposit-record schedule bank transfer to payto timestamp = now() -msg = Sign-Msg(EXCHANGE_CONFIRM_DEPOSIT, +msg = Gen-Msg(EXCHANGE_CONFIRM_DEPOSIT, ( h_contract | h_wire | uint512(0x0) | timestamp | info.time.wire_deadline | info.time.refund_deadline @@ -689,7 +693,7 @@ sig = EdDSA-Sign(exchange.priv, msg) (M2) Deposit verification (merchant) h_wire = HKDF(wire_salt, payto, "merchant-wire-signature", 64) -msg = Sign-Msg(EXCHANGE_CONFIRM_DEPOSIT, +msg = Gen-Msg(EXCHANGE_CONFIRM_DEPOSIT, ( h_contract | h_wire | uint512(0x0) | timestamp | contract.wire_deadline | contract.refund_deadline @@ -763,7 +767,7 @@ commitment = SHA-512( refresh_seed | uint256(0x0) | coin.pub | value for i in 0..n: h_denomᵢ = SHA-512(uint32(0) | uint32(0x1) | denomᵢ.pub) planchets = (⟨h_denomᵢ⟩, ⟨planchetₖᵢ⟩, ⟨transferₖᵢ.pub⟩)) -msg = Sign-Msg(WALLET_COIN_MELT, +msg = Gen-Msg(WALLET_COIN_MELT, ( commitment | coin.h_denom | uint256(0x0) | value | denom.fee_refresh )) sig = EdDSA-Sign(coin.priv, msg) @@ -790,7 +794,7 @@ for k in 0..κ: h_planchetsₖ = SHA-512( ⟨h_planchetₖᵢ⟩ ) commitment = SHA-512( refresh_seed | uint256(0x0) | coin.pub | value | SHA-512( ⟨h_planchetsₖ⟩ ) ) -msg = Sign-Msg(WALLET_COIN_MELT, +msg = Gen-Msg(WALLET_COIN_MELT, ( commitment | coin.h_denom | uint256(0x0) | value | denom.fee_refresh )) check EdDSA-Verify(coin.pub, msg, sig) @@ -801,7 +805,7 @@ if refresh-record not found: blind_sigᵢ = RSA-FDH-Sign(planchetᵧᵢ, denomᵧᵢ.priv) link_info = (refresh_seed, ⟨transferₖᵢ.pub⟩, ⟨h_denomᵢ⟩, coin_sig) persist refresh-record = (commitment, ɣ, ⟨blind_sigᵢ⟩, h_planchetsᵧ, false, link_info) -msg = Sign-Msg(EXCHANGE_CONFIRM_MELT, +msg = Gen-Msg(EXCHANGE_CONFIRM_MELT, ( commitment | uint32(ɣ) )) sig = EdDSA-Sign(exchange.priv, msg) ]]></artwork> @@ -809,7 +813,7 @@ sig = EdDSA-Sign(exchange.priv, msg) (W2) secret revelation (wallet) check exchange.pub known -msg = Sign-Msg(EXCHANGE_CONFIRM_MELT, +msg = Gen-Msg(EXCHANGE_CONFIRM_MELT, ( commitment | ɣ )) check EdDSA-Verify(exchange.pub, msg, sig) persist refresh-challenge // what exactly? @@ -877,7 +881,7 @@ knows coin knows refresh-record for coin <artwork><![CDATA[ (W1) history request (wallet) -msg = Sign-Msg(COIN_HISTORY_REQUEST, uint64(0x0)) +msg = Gen-Msg(COIN_HISTORY_REQUEST, uint64(0x0)) sig = EdDSA-Sign(coin.priv, msg) ]]></artwork> <artwork><![CDATA[ @@ -910,7 +914,7 @@ for k in 0..κ: value = coin.denom.fee_refresh + sum( ⟨denomᵢ.value⟩ ) + sum( ⟨denomᵢ.fee_withdraw⟩ ) commitment = SHA-512( refresh_seed | uint256(0x0) | coin.pub | value | SHA-512( ⟨h_planchetsₖ⟩ ) ) -msg = Sign-Msg(WALLET_COIN_MELT, +msg = Gen-Msg(WALLET_COIN_MELT, ( commitment | coin.h_denom | uint256(0x0) | value | denom.fee_refresh )) check EdDSA-Verify(coin.pub, msg, sig) @@ -1028,7 +1032,7 @@ if ⟨blind_sigᵢ⟩ returned: <refcontent>National Institute of Standards and Technology (U.S.)</refcontent> </reference> </references> - <?line 1060?> + <?line 1061?> <section anchor="change-log"> <name>Change log</name> @@ -1041,190 +1045,190 @@ Education and Research (BMBF) within the project Concrete Contracts.</t> </section> </back> <!-- ##markdown-source: -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 -pxpQ1IEmGKQZEoYhB/+XprHfy8hDCxsmFwjFkG4fbCiFwbhPAYboj0DEjIIE -LbXgYIrjOJAwjcQI2Smimk+XDTgohCoxg9ExcaLlXLP/mjXOgI6oLjLbAQbC -tKEfiatwemAvojj3vuCJhgFXEiIcM7I+R6NRwVfFrS0Gc4K5wIwMKL2N6HT7 -2d5x53D7N52d5wdHJ2LZGhHPFzZtTxBz58ShzSWi+moMCIZFEEUUElgMk/CA -GxNCc+fRidBUs7QrBWTpR9HSIrFkRfbMbzYD3cAkDJqUKsygwSt+3llfOYs+ -Xy1o+Y7Zr8BaKAZiFC81A8k7H4WbjPnh8yzfMAZkds8NzyB/cMNkgMbfePZ9 -xZh2kvV+B3HLljZvYEVVaLclVyduF9tquMV0dL5asZt32lzbhQmp0PbjYlOB -3xKBmS82Qkg3amQtTemkzUyqglCFyE3G/PB5lm8UR2NNZRtZ8UGVkMKnyE3l -0xPK8Gt3gG013FI6ri6m9t66ZKWfJBkFFG6YR88fHaMKHGdafmfwz551+rUi -K2/CjjnTmm9OdUtUkk1J2SxcqBe3Nmb5xrIWeUuKBkX+Z6MnPj7ZrpOfxgAc -QnlIVHAxVaTfwkcvclS2cNoAqQDabM/bPdl2nvIpwNk1q2welWnMV5qk46dY -FqI7GZyZRkaUKBOIc2jfrljFp4DPVaFQwjG74mYIlMcrdSuNhhwCp1hml3mR -meJZjOkgOaH90zh5CKQh93XPaDSAxXRnrMsaHoeMNJDVAIrGcGwfN/pilQST -YAi0aZXMDacsonGx9CNLMmN/OKKQT8abIl3Sg+D6str3E0zNOE6KPxGjiWSi -EMaENva9YlZNgdzeb3b2t4+e7HUggUo7ijwdSkCbkL0DZrxDRK9DDJj1Ai4z -FCKVYI4DkTJIzCSOem4PhqmmCIqVFppljiMXnZ6b9kcdImJb7lLAbcC56OQA -Fsqsj3NrNRq0dQ3HoEeYbslFc5mP+bg4rpvW2Zo48JELiIONjRxqrU7bUFiB -0KJfc5jXmxtbb+TQKo4sg2xtbhRAIFNUmvGEpy+ynm22xjFHHRWYGrsOV8tZ -WSHnzEviYpVN9WXggoQpTrE+0+WoU+z0hnmw9qBYtwVTnk8XDHkd43IDHm27 -heWKNtM1kVfbz57tnXaO9072jv9xr/Pq4HR/93j7VZ2MoY3JqV2I7snKYEaA -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 +J5Qtjh9op3jSsP4XWH0PNJSKAAA= -->