@wireapp/core 17.20.0 → 17.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +35 -0
- package/package.json +3 -3
- package/src/main/conversation/ConversationService.d.ts +43 -23
- package/src/main/conversation/ConversationService.js +106 -112
- package/src/main/conversation/ConversationService.js.map +1 -1
- package/src/main/conversation/ConversationService.ts +130 -388
- package/src/main/conversation/message/MessageService.d.ts +11 -2
- package/src/main/conversation/message/MessageService.js +34 -8
- package/src/main/conversation/message/MessageService.js.map +1 -1
- package/src/main/conversation/message/MessageService.ts +36 -15
- package/src/main/cryptography/CryptographyService.d.ts +3 -3
- package/src/main/cryptography/CryptographyService.js +14 -11
- package/src/main/cryptography/CryptographyService.js.map +1 -1
- package/src/main/cryptography/CryptographyService.ts +23 -16
|
@@ -6,10 +6,19 @@ export declare class MessageService {
|
|
|
6
6
|
private readonly cryptographyService;
|
|
7
7
|
constructor(apiClient: APIClient, cryptographyService: CryptographyService);
|
|
8
8
|
sendOTRMessage(sendingClientId: string, recipients: OTRRecipients<Uint8Array>, conversationId: string | null, plainTextArray: Uint8Array, base64CipherText?: string): Promise<ClientMismatch>;
|
|
9
|
+
private isClientMismatchError;
|
|
9
10
|
private checkFederatedClientsMismatch;
|
|
10
|
-
sendFederatedOTRMessage(sendingClientId: string, conversationId: string, conversationDomain: string, recipients: QualifiedOTRRecipients, plainTextArray: Uint8Array, assetData?: Uint8Array): Promise<MessageSendingStatus>;
|
|
11
|
+
sendFederatedOTRMessage(sendingClientId: string, conversationId: string, conversationDomain: string, recipients: QualifiedOTRRecipients, plainTextArray: Uint8Array, assetData?: Uint8Array, reportMissing?: boolean): Promise<MessageSendingStatus>;
|
|
11
12
|
sendOTRProtobufMessage(sendingClientId: string, recipients: OTRRecipients<Uint8Array>, conversationId: string | null, plainTextArray: Uint8Array, assetData?: Uint8Array): Promise<ClientMismatch>;
|
|
12
13
|
private onClientMismatch;
|
|
13
14
|
private onClientProtobufMismatch;
|
|
14
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Will re-encrypt a message when there were some missing clients in the initial send (typically when the server replies with a client mismatch error)
|
|
17
|
+
*
|
|
18
|
+
* @param {ProtobufOTR.QualifiedNewOtrMessage} messageData The initial message that was sent
|
|
19
|
+
* @param {MessageSendingStatus} messageSendingStatus Info about the missing/deleted clients
|
|
20
|
+
* @param {Uint8Array} plainTextArray The text that should be encrypted for the missing clients
|
|
21
|
+
* @return resolves with a new message payload that can be sent
|
|
22
|
+
*/
|
|
23
|
+
private encryptForMissingClients;
|
|
15
24
|
}
|
|
@@ -60,6 +60,10 @@ class MessageService {
|
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
+
isClientMismatchError(error) {
|
|
64
|
+
var _a;
|
|
65
|
+
return ((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === http_status_codes_1.StatusCodes.PRECONDITION_FAILED;
|
|
66
|
+
}
|
|
63
67
|
checkFederatedClientsMismatch(messageData, messageSendingStatus) {
|
|
64
68
|
var _a, _b, _c, _d;
|
|
65
69
|
const updatedMessageSendingStatus = Object.assign({}, messageSendingStatus);
|
|
@@ -103,7 +107,7 @@ class MessageService {
|
|
|
103
107
|
}
|
|
104
108
|
return updatedMessageSendingStatus;
|
|
105
109
|
}
|
|
106
|
-
async sendFederatedOTRMessage(sendingClientId, conversationId, conversationDomain, recipients, plainTextArray, assetData) {
|
|
110
|
+
async sendFederatedOTRMessage(sendingClientId, conversationId, conversationDomain, recipients, plainTextArray, assetData, reportMissing) {
|
|
107
111
|
const qualifiedUserEntries = Object.entries(recipients).map(([domain, otrRecipients]) => {
|
|
108
112
|
const userEntries = Object.entries(otrRecipients).map(([userId, otrClientMap]) => {
|
|
109
113
|
const clientEntries = Object.entries(otrClientMap).map(([clientId, payload]) => {
|
|
@@ -137,14 +141,28 @@ class MessageService {
|
|
|
137
141
|
* missing clients. We have to ignore missing clients because there can be the case that there are clients that
|
|
138
142
|
* don't provide PreKeys (clients from the Pre-E2EE era).
|
|
139
143
|
*/
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
144
|
+
if (reportMissing) {
|
|
145
|
+
protoMessage.reportAll = {};
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
protoMessage.ignoreAll = {};
|
|
149
|
+
}
|
|
150
|
+
let sendingStatus;
|
|
151
|
+
try {
|
|
152
|
+
sendingStatus = await this.apiClient.conversation.api.postOTRMessageV2(conversationId, conversationDomain, protoMessage);
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
if (!this.isClientMismatchError(error)) {
|
|
156
|
+
throw error;
|
|
157
|
+
}
|
|
158
|
+
sendingStatus = error.response.data;
|
|
159
|
+
}
|
|
160
|
+
const mismatch = this.checkFederatedClientsMismatch(protoMessage, sendingStatus);
|
|
161
|
+
if (mismatch) {
|
|
162
|
+
const reEncryptedMessage = await this.encryptForMissingClients(protoMessage, mismatch, plainTextArray);
|
|
145
163
|
await this.apiClient.conversation.api.postOTRMessageV2(conversationId, conversationDomain, reEncryptedMessage);
|
|
146
164
|
}
|
|
147
|
-
return
|
|
165
|
+
return sendingStatus;
|
|
148
166
|
}
|
|
149
167
|
async sendOTRProtobufMessage(sendingClientId, recipients, conversationId, plainTextArray, assetData) {
|
|
150
168
|
const userEntries = Object.entries(recipients).map(([userId, otrClientMap]) => {
|
|
@@ -274,7 +292,15 @@ class MessageService {
|
|
|
274
292
|
}
|
|
275
293
|
throw error;
|
|
276
294
|
}
|
|
277
|
-
|
|
295
|
+
/**
|
|
296
|
+
* Will re-encrypt a message when there were some missing clients in the initial send (typically when the server replies with a client mismatch error)
|
|
297
|
+
*
|
|
298
|
+
* @param {ProtobufOTR.QualifiedNewOtrMessage} messageData The initial message that was sent
|
|
299
|
+
* @param {MessageSendingStatus} messageSendingStatus Info about the missing/deleted clients
|
|
300
|
+
* @param {Uint8Array} plainTextArray The text that should be encrypted for the missing clients
|
|
301
|
+
* @return resolves with a new message payload that can be sent
|
|
302
|
+
*/
|
|
303
|
+
async encryptForMissingClients(messageData, messageSendingStatus, plainTextArray) {
|
|
278
304
|
var _a, _b, _c;
|
|
279
305
|
var _d;
|
|
280
306
|
// walk through deleted domain/user map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageService.js","sourceRoot":"","sources":["MessageService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MessageService.js","sourceRoot":"","sources":["MessageService.ts"],"names":[],"mappings":"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"}
|
|
@@ -88,6 +88,10 @@ export class MessageService {
|
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
+
private isClientMismatchError(error: any): error is ClientMismatchError {
|
|
92
|
+
return error.response?.status === HTTP_STATUS.PRECONDITION_FAILED;
|
|
93
|
+
}
|
|
94
|
+
|
|
91
95
|
private checkFederatedClientsMismatch(
|
|
92
96
|
messageData: ProtobufOTR.QualifiedNewOtrMessage,
|
|
93
97
|
messageSendingStatus: MessageSendingStatus,
|
|
@@ -149,6 +153,7 @@ export class MessageService {
|
|
|
149
153
|
recipients: QualifiedOTRRecipients,
|
|
150
154
|
plainTextArray: Uint8Array,
|
|
151
155
|
assetData?: Uint8Array,
|
|
156
|
+
reportMissing?: boolean,
|
|
152
157
|
): Promise<MessageSendingStatus> {
|
|
153
158
|
const qualifiedUserEntries = Object.entries(recipients).map<ProtobufOTR.IQualifiedUserEntry>(
|
|
154
159
|
([domain, otrRecipients]) => {
|
|
@@ -190,25 +195,33 @@ export class MessageService {
|
|
|
190
195
|
* missing clients. We have to ignore missing clients because there can be the case that there are clients that
|
|
191
196
|
* don't provide PreKeys (clients from the Pre-E2EE era).
|
|
192
197
|
*/
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
protoMessage,
|
|
199
|
-
);
|
|
200
|
-
|
|
201
|
-
const federatedClientsMismatch = this.checkFederatedClientsMismatch(protoMessage, messageSendingStatus);
|
|
198
|
+
if (reportMissing) {
|
|
199
|
+
protoMessage.reportAll = {};
|
|
200
|
+
} else {
|
|
201
|
+
protoMessage.ignoreAll = {};
|
|
202
|
+
}
|
|
202
203
|
|
|
203
|
-
|
|
204
|
-
|
|
204
|
+
let sendingStatus: MessageSendingStatus;
|
|
205
|
+
try {
|
|
206
|
+
sendingStatus = await this.apiClient.conversation.api.postOTRMessageV2(
|
|
207
|
+
conversationId,
|
|
208
|
+
conversationDomain,
|
|
205
209
|
protoMessage,
|
|
206
|
-
federatedClientsMismatch,
|
|
207
|
-
plainTextArray,
|
|
208
210
|
);
|
|
211
|
+
} catch (error) {
|
|
212
|
+
if (!this.isClientMismatchError(error)) {
|
|
213
|
+
throw error;
|
|
214
|
+
}
|
|
215
|
+
sendingStatus = error.response!.data! as unknown as MessageSendingStatus;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
const mismatch = this.checkFederatedClientsMismatch(protoMessage, sendingStatus);
|
|
219
|
+
|
|
220
|
+
if (mismatch) {
|
|
221
|
+
const reEncryptedMessage = await this.encryptForMissingClients(protoMessage, mismatch, plainTextArray);
|
|
209
222
|
await this.apiClient.conversation.api.postOTRMessageV2(conversationId, conversationDomain, reEncryptedMessage);
|
|
210
223
|
}
|
|
211
|
-
return
|
|
224
|
+
return sendingStatus;
|
|
212
225
|
}
|
|
213
226
|
|
|
214
227
|
public async sendOTRProtobufMessage(
|
|
@@ -383,7 +396,15 @@ export class MessageService {
|
|
|
383
396
|
throw error;
|
|
384
397
|
}
|
|
385
398
|
|
|
386
|
-
|
|
399
|
+
/**
|
|
400
|
+
* Will re-encrypt a message when there were some missing clients in the initial send (typically when the server replies with a client mismatch error)
|
|
401
|
+
*
|
|
402
|
+
* @param {ProtobufOTR.QualifiedNewOtrMessage} messageData The initial message that was sent
|
|
403
|
+
* @param {MessageSendingStatus} messageSendingStatus Info about the missing/deleted clients
|
|
404
|
+
* @param {Uint8Array} plainTextArray The text that should be encrypted for the missing clients
|
|
405
|
+
* @return resolves with a new message payload that can be sent
|
|
406
|
+
*/
|
|
407
|
+
private async encryptForMissingClients(
|
|
387
408
|
messageData: ProtobufOTR.QualifiedNewOtrMessage,
|
|
388
409
|
messageSendingStatus: MessageSendingStatus,
|
|
389
410
|
plainTextArray: Uint8Array,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { APIClient } from '@wireapp/api-client';
|
|
2
2
|
import type { PreKey as SerializedPreKey } from '@wireapp/api-client/src/auth/';
|
|
3
3
|
import type { RegisteredClient } from '@wireapp/api-client/src/client/';
|
|
4
|
-
import type { OTRRecipients, QualifiedOTRRecipients } from '@wireapp/api-client/src/conversation/';
|
|
4
|
+
import type { OTRRecipients, QualifiedOTRRecipients, QualifiedUserClients, UserClients } from '@wireapp/api-client/src/conversation/';
|
|
5
5
|
import type { ConversationOtrMessageAddEvent } from '@wireapp/api-client/src/event';
|
|
6
6
|
import type { QualifiedUserPreKeyBundleMap, UserPreKeyBundleMap } from '@wireapp/api-client/src/user/';
|
|
7
7
|
import { Cryptobox } from '@wireapp/cryptobox';
|
|
@@ -26,8 +26,8 @@ export declare class CryptographyService {
|
|
|
26
26
|
createCryptobox(): Promise<SerializedPreKey[]>;
|
|
27
27
|
decrypt(sessionId: string, encodedCiphertext: string): Promise<Uint8Array>;
|
|
28
28
|
private static dismantleSessionId;
|
|
29
|
-
encryptQualified(plainText: Uint8Array, preKeyBundles: QualifiedUserPreKeyBundleMap): Promise<QualifiedOTRRecipients>;
|
|
30
|
-
encrypt(plainText: Uint8Array,
|
|
29
|
+
encryptQualified(plainText: Uint8Array, preKeyBundles: QualifiedUserPreKeyBundleMap | QualifiedUserClients): Promise<QualifiedOTRRecipients>;
|
|
30
|
+
encrypt(plainText: Uint8Array, users: UserPreKeyBundleMap | UserClients, domain?: string): Promise<OTRRecipients<Uint8Array>>;
|
|
31
31
|
private encryptPayloadForSession;
|
|
32
32
|
initCryptobox(): Promise<void>;
|
|
33
33
|
deleteCryptographyStores(): Promise<boolean[]>;
|
|
@@ -28,6 +28,7 @@ const protocol_messaging_1 = require("@wireapp/protocol-messaging");
|
|
|
28
28
|
const bazinga64_1 = require("bazinga64");
|
|
29
29
|
const logdown_1 = __importDefault(require("logdown"));
|
|
30
30
|
const conversation_1 = require("../conversation");
|
|
31
|
+
const util_1 = require("../util");
|
|
31
32
|
const CryptographyDatabaseRepository_1 = require("./CryptographyDatabaseRepository");
|
|
32
33
|
const GenericMessageMapper_1 = require("./GenericMessageMapper");
|
|
33
34
|
class CryptographyService {
|
|
@@ -92,31 +93,33 @@ class CryptographyService {
|
|
|
92
93
|
}
|
|
93
94
|
return qualifiedOTRRecipients;
|
|
94
95
|
}
|
|
95
|
-
async encrypt(plainText,
|
|
96
|
-
const recipients = {};
|
|
96
|
+
async encrypt(plainText, users, domain) {
|
|
97
97
|
const bundles = [];
|
|
98
|
-
for (const userId in
|
|
99
|
-
|
|
100
|
-
for (const clientId
|
|
101
|
-
const
|
|
98
|
+
for (const userId in users) {
|
|
99
|
+
const clientIds = (0, util_1.isUserClients)(users) ? users[userId] : Object.keys(users[userId]);
|
|
100
|
+
for (const clientId of clientIds) {
|
|
101
|
+
const base64PreKey = (0, util_1.isUserClients)(users) ? undefined : users[userId][clientId].key;
|
|
102
102
|
const sessionId = CryptographyService.constructSessionId(userId, clientId, domain || null);
|
|
103
103
|
bundles.push(this.encryptPayloadForSession(sessionId, plainText, base64PreKey));
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
const payloads = await Promise.all(bundles);
|
|
107
|
-
payloads.
|
|
107
|
+
return payloads.reduce((recipients, payload) => {
|
|
108
108
|
const { encryptedPayload, sessionId } = payload;
|
|
109
109
|
const { userId, clientId } = CryptographyService.dismantleSessionId(sessionId);
|
|
110
|
+
recipients[userId] || (recipients[userId] = {});
|
|
110
111
|
recipients[userId][clientId] = encryptedPayload;
|
|
111
|
-
|
|
112
|
-
|
|
112
|
+
return recipients;
|
|
113
|
+
}, {});
|
|
113
114
|
}
|
|
114
115
|
async encryptPayloadForSession(sessionId, plainText, base64EncodedPreKey) {
|
|
115
116
|
this.logger.log(`Encrypting payload for session ID "${sessionId}"`);
|
|
116
117
|
let encryptedPayload;
|
|
117
118
|
try {
|
|
118
|
-
const decodedPreKeyBundle =
|
|
119
|
-
|
|
119
|
+
const decodedPreKeyBundle = base64EncodedPreKey
|
|
120
|
+
? bazinga64_1.Decoder.fromBase64(base64EncodedPreKey).asBytes.buffer
|
|
121
|
+
: undefined;
|
|
122
|
+
const payloadAsArrayBuffer = await this.cryptobox.encrypt(sessionId, plainText, decodedPreKeyBundle);
|
|
120
123
|
encryptedPayload = new Uint8Array(payloadAsArrayBuffer);
|
|
121
124
|
}
|
|
122
125
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CryptographyService.js","sourceRoot":"","sources":["CryptographyService.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;;;;
|
|
1
|
+
{"version":3,"file":"CryptographyService.js","sourceRoot":"","sources":["CryptographyService.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,13 @@
|
|
|
20
20
|
import type {APIClient} from '@wireapp/api-client';
|
|
21
21
|
import type {PreKey as SerializedPreKey} from '@wireapp/api-client/src/auth/';
|
|
22
22
|
import type {RegisteredClient} from '@wireapp/api-client/src/client/';
|
|
23
|
-
import type {
|
|
23
|
+
import type {
|
|
24
|
+
OTRClientMap,
|
|
25
|
+
OTRRecipients,
|
|
26
|
+
QualifiedOTRRecipients,
|
|
27
|
+
QualifiedUserClients,
|
|
28
|
+
UserClients,
|
|
29
|
+
} from '@wireapp/api-client/src/conversation/';
|
|
24
30
|
import type {ConversationOtrMessageAddEvent} from '@wireapp/api-client/src/event';
|
|
25
31
|
import type {QualifiedUserPreKeyBundleMap, UserPreKeyBundleMap} from '@wireapp/api-client/src/user/';
|
|
26
32
|
import {Cryptobox} from '@wireapp/cryptobox';
|
|
@@ -32,6 +38,7 @@ import logdown from 'logdown';
|
|
|
32
38
|
|
|
33
39
|
import {GenericMessageType, PayloadBundle, PayloadBundleSource} from '../conversation';
|
|
34
40
|
import type {SessionPayloadBundle} from '../cryptography/';
|
|
41
|
+
import {isUserClients} from '../util';
|
|
35
42
|
import {CryptographyDatabaseRepository} from './CryptographyDatabaseRepository';
|
|
36
43
|
import {GenericMessageMapper} from './GenericMessageMapper';
|
|
37
44
|
|
|
@@ -118,7 +125,7 @@ export class CryptographyService {
|
|
|
118
125
|
|
|
119
126
|
public async encryptQualified(
|
|
120
127
|
plainText: Uint8Array,
|
|
121
|
-
preKeyBundles: QualifiedUserPreKeyBundleMap,
|
|
128
|
+
preKeyBundles: QualifiedUserPreKeyBundleMap | QualifiedUserClients,
|
|
122
129
|
): Promise<QualifiedOTRRecipients> {
|
|
123
130
|
const qualifiedOTRRecipients: QualifiedOTRRecipients = {};
|
|
124
131
|
|
|
@@ -131,17 +138,15 @@ export class CryptographyService {
|
|
|
131
138
|
|
|
132
139
|
public async encrypt(
|
|
133
140
|
plainText: Uint8Array,
|
|
134
|
-
|
|
141
|
+
users: UserPreKeyBundleMap | UserClients,
|
|
135
142
|
domain?: string,
|
|
136
143
|
): Promise<OTRRecipients<Uint8Array>> {
|
|
137
|
-
const recipients: OTRRecipients<Uint8Array> = {};
|
|
138
144
|
const bundles: Promise<SessionPayloadBundle>[] = [];
|
|
139
145
|
|
|
140
|
-
for (const userId in
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
const {key: base64PreKey} = preKeyBundles[userId][clientId];
|
|
146
|
+
for (const userId in users) {
|
|
147
|
+
const clientIds = isUserClients(users) ? users[userId] : Object.keys(users[userId]);
|
|
148
|
+
for (const clientId of clientIds) {
|
|
149
|
+
const base64PreKey = isUserClients(users) ? undefined : users[userId][clientId].key;
|
|
145
150
|
const sessionId = CryptographyService.constructSessionId(userId, clientId, domain || null);
|
|
146
151
|
bundles.push(this.encryptPayloadForSession(sessionId, plainText, base64PreKey));
|
|
147
152
|
}
|
|
@@ -149,27 +154,29 @@ export class CryptographyService {
|
|
|
149
154
|
|
|
150
155
|
const payloads = await Promise.all(bundles);
|
|
151
156
|
|
|
152
|
-
payloads.
|
|
157
|
+
return payloads.reduce((recipients, payload) => {
|
|
153
158
|
const {encryptedPayload, sessionId} = payload;
|
|
154
159
|
const {userId, clientId} = CryptographyService.dismantleSessionId(sessionId);
|
|
160
|
+
recipients[userId] ||= {};
|
|
155
161
|
recipients[userId][clientId] = encryptedPayload;
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
return recipients;
|
|
162
|
+
return recipients;
|
|
163
|
+
}, {} as OTRRecipients<Uint8Array>);
|
|
159
164
|
}
|
|
160
165
|
|
|
161
166
|
private async encryptPayloadForSession(
|
|
162
167
|
sessionId: string,
|
|
163
168
|
plainText: Uint8Array,
|
|
164
|
-
base64EncodedPreKey
|
|
169
|
+
base64EncodedPreKey?: string,
|
|
165
170
|
): Promise<SessionPayloadBundle> {
|
|
166
171
|
this.logger.log(`Encrypting payload for session ID "${sessionId}"`);
|
|
167
172
|
|
|
168
173
|
let encryptedPayload: Uint8Array;
|
|
169
174
|
|
|
170
175
|
try {
|
|
171
|
-
const decodedPreKeyBundle =
|
|
172
|
-
|
|
176
|
+
const decodedPreKeyBundle = base64EncodedPreKey
|
|
177
|
+
? Decoder.fromBase64(base64EncodedPreKey).asBytes.buffer
|
|
178
|
+
: undefined;
|
|
179
|
+
const payloadAsArrayBuffer = await this.cryptobox.encrypt(sessionId, plainText, decodedPreKeyBundle);
|
|
173
180
|
encryptedPayload = new Uint8Array(payloadAsArrayBuffer);
|
|
174
181
|
} catch (error) {
|
|
175
182
|
this.logger.error(`Could not encrypt payload: ${(error as Error).message}`);
|