@lyxa.ai/core 1.0.381-alpha.0 → 1.0.382
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/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/libraries/event/decorators/subscribe.js.map +1 -1
- package/dist/libraries/event/index.d.ts +4 -0
- package/dist/libraries/event/index.js +48 -0
- package/dist/libraries/event/index.js.map +1 -1
- package/dist/libraries/index.d.ts +2 -1
- package/dist/libraries/index.js +3 -0
- package/dist/libraries/index.js.map +1 -1
- package/dist/libraries/mongo/models/admin-access-control.model.js +2 -1
- package/dist/libraries/mongo/models/admin-access-control.model.js.map +1 -1
- package/dist/libraries/mongo/models/category.model.d.ts +1 -0
- package/dist/libraries/mongo/models/category.model.js +32 -1
- package/dist/libraries/mongo/models/category.model.js.map +1 -1
- package/dist/libraries/mongo/models/counter.model.d.ts +1 -0
- package/dist/libraries/mongo/models/counter.model.js +5 -0
- package/dist/libraries/mongo/models/counter.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/shop-document.model.d.ts +1 -0
- package/dist/libraries/mongo/models/embedded/shop-document.model.js +5 -0
- package/dist/libraries/mongo/models/embedded/shop-document.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/shop-search-fields.model.d.ts +7 -0
- package/dist/libraries/mongo/models/embedded/shop-search-fields.model.js +42 -0
- package/dist/libraries/mongo/models/embedded/shop-search-fields.model.js.map +1 -0
- package/dist/libraries/mongo/models/finance-settlement.model.d.ts +1 -0
- package/dist/libraries/mongo/models/finance-settlement.model.js +12 -1
- package/dist/libraries/mongo/models/finance-settlement.model.js.map +1 -1
- package/dist/libraries/mongo/models/gallery.model.js +1 -1
- package/dist/libraries/mongo/models/gallery.model.js.map +1 -1
- package/dist/libraries/mongo/models/index.d.ts +0 -3
- package/dist/libraries/mongo/models/index.js +2 -5
- package/dist/libraries/mongo/models/index.js.map +1 -1
- package/dist/libraries/mongo/models/line-item.model.d.ts +2 -0
- package/dist/libraries/mongo/models/line-item.model.js +12 -0
- package/dist/libraries/mongo/models/line-item.model.js.map +1 -1
- package/dist/libraries/mongo/models/order.model.d.ts +11 -5
- package/dist/libraries/mongo/models/order.model.js +70 -30
- package/dist/libraries/mongo/models/order.model.js.map +1 -1
- package/dist/libraries/mongo/models/providers/core-google-auth-identity.model.d.ts +1 -0
- package/dist/libraries/mongo/models/providers/core-google-auth-identity.model.js +5 -0
- package/dist/libraries/mongo/models/providers/core-google-auth-identity.model.js.map +1 -1
- package/dist/libraries/mongo/models/punch-marketing-history.model.d.ts +5 -2
- package/dist/libraries/mongo/models/punch-marketing-history.model.js +16 -9
- package/dist/libraries/mongo/models/punch-marketing-history.model.js.map +1 -1
- package/dist/libraries/mongo/models/service-cart.model.d.ts +3 -2
- package/dist/libraries/mongo/models/service-cart.model.js +6 -5
- package/dist/libraries/mongo/models/service-cart.model.js.map +1 -1
- package/dist/libraries/mongo/models/service-order.model.d.ts +3 -2
- package/dist/libraries/mongo/models/service-order.model.js +6 -5
- package/dist/libraries/mongo/models/service-order.model.js.map +1 -1
- package/dist/libraries/mongo/models/service-promotion.model.d.ts +1 -0
- package/dist/libraries/mongo/models/service-promotion.model.js +5 -0
- package/dist/libraries/mongo/models/service-promotion.model.js.map +1 -1
- package/dist/libraries/mongo/models/service.model.d.ts +2 -0
- package/dist/libraries/mongo/models/service.model.js +6 -0
- package/dist/libraries/mongo/models/service.model.js.map +1 -1
- package/dist/libraries/mongo/models/shop.model.d.ts +3 -0
- package/dist/libraries/mongo/models/shop.model.js +11 -0
- package/dist/libraries/mongo/models/shop.model.js.map +1 -1
- package/dist/libraries/mongo/models/ticket.model.d.ts +2 -0
- package/dist/libraries/mongo/models/ticket.model.js +10 -0
- package/dist/libraries/mongo/models/ticket.model.js.map +1 -1
- package/dist/libraries/mongo/models/user-app-section-setting.model.js +1 -1
- package/dist/libraries/mongo/models/user-app-section-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/user.model.d.ts +1 -1
- package/dist/libraries/mongo/utilities/uniqueIdHooks.d.ts +1 -1
- package/dist/libraries/mongo/utilities/uniqueIdHooks.js +2 -2
- package/dist/libraries/mongo/utilities/uniqueIdHooks.js.map +1 -1
- package/dist/libraries/redis/index.d.ts +4 -0
- package/dist/libraries/redis/index.js +14 -0
- package/dist/libraries/redis/index.js.map +1 -1
- package/dist/libraries/socket/BaseSocketEvent.d.ts +15 -0
- package/dist/libraries/socket/BaseSocketEvent.js +23 -0
- package/dist/libraries/socket/BaseSocketEvent.js.map +1 -0
- package/dist/libraries/socket/adapters/index.d.ts +2 -0
- package/dist/libraries/socket/adapters/index.js +19 -0
- package/dist/libraries/socket/adapters/index.js.map +1 -0
- package/dist/libraries/socket/adapters/socket-context.d.ts +9 -0
- package/dist/libraries/socket/adapters/socket-context.js +29 -0
- package/dist/libraries/socket/adapters/socket-context.js.map +1 -0
- package/dist/libraries/socket/adapters/socket-trpc.d.ts +71 -0
- package/dist/libraries/socket/adapters/socket-trpc.js +22 -0
- package/dist/libraries/socket/adapters/socket-trpc.js.map +1 -0
- package/dist/libraries/socket/core/index.d.ts +5 -0
- package/dist/libraries/socket/core/index.js +22 -0
- package/dist/libraries/socket/core/index.js.map +1 -0
- package/dist/libraries/socket/core/local-subscription-registry.d.ts +19 -0
- package/dist/libraries/socket/core/local-subscription-registry.js +58 -0
- package/dist/libraries/socket/core/local-subscription-registry.js.map +1 -0
- package/dist/libraries/socket/core/socket-event-registry.d.ts +42 -0
- package/dist/libraries/socket/core/socket-event-registry.js +25 -0
- package/dist/libraries/socket/core/socket-event-registry.js.map +1 -0
- package/dist/libraries/socket/core/socket-redis-connections.d.ts +12 -0
- package/dist/libraries/socket/core/socket-redis-connections.js +65 -0
- package/dist/libraries/socket/core/socket-redis-connections.js.map +1 -0
- package/dist/libraries/socket/core/zAsyncIterable.d.ts +7 -0
- package/dist/libraries/socket/core/zAsyncIterable.js +35 -0
- package/dist/libraries/socket/core/zAsyncIterable.js.map +1 -0
- package/dist/libraries/socket/events/chatlist-message-send.socket.event.d.ts +67 -0
- package/dist/libraries/socket/events/chatlist-message-send.socket.event.js +30 -0
- package/dist/libraries/socket/events/chatlist-message-send.socket.event.js.map +1 -0
- package/dist/libraries/socket/events/chatroom-message-send.socket.event.d.ts +56 -0
- package/dist/libraries/socket/events/chatroom-message-send.socket.event.js +33 -0
- package/dist/libraries/socket/events/chatroom-message-send.socket.event.js.map +1 -0
- package/dist/libraries/socket/events/index.d.ts +1 -0
- package/dist/libraries/socket/events/index.js +18 -0
- package/dist/libraries/socket/events/index.js.map +1 -0
- package/dist/libraries/socket/index.d.ts +4 -2
- package/dist/libraries/socket/index.js +4 -2
- package/dist/libraries/socket/index.js.map +1 -1
- package/dist/libraries/trpc/middlewares/createSocketSubscriptionProcedure.d.ts +14 -0
- package/dist/libraries/trpc/middlewares/createSocketSubscriptionProcedure.js +38 -0
- package/dist/libraries/trpc/middlewares/createSocketSubscriptionProcedure.js.map +1 -0
- package/dist/types/README.md +1 -1
- package/dist/types/package.json +1 -1
- package/dist/types/utilities/enum.d.ts +42 -16
- package/dist/types/utilities/enum.js +49 -20
- package/dist/types/utilities/enum.js.map +1 -1
- package/dist/types/utilities/validation/common-validation.d.ts +103 -3
- package/dist/types/utilities/validation/common-validation.js +7 -2
- package/dist/types/utilities/validation/common-validation.js.map +1 -1
- package/dist/types/utilities/validation/global-validation.d.ts +52 -14
- package/dist/types/utilities/validation/global-validation.js +57 -6
- package/dist/types/utilities/validation/global-validation.js.map +1 -1
- package/dist/utilities/enum.d.ts +42 -16
- package/dist/utilities/enum.js +49 -20
- package/dist/utilities/enum.js.map +1 -1
- package/dist/utilities/validation/common-validation.d.ts +103 -3
- package/dist/utilities/validation/common-validation.js +7 -2
- package/dist/utilities/validation/common-validation.js.map +1 -1
- package/dist/utilities/validation/global-validation.d.ts +52 -14
- package/dist/utilities/validation/global-validation.js +57 -6
- package/dist/utilities/validation/global-validation.js.map +1 -1
- package/package.json +3 -3
- package/dist/libraries/mongo/models/order-delivery.model.d.ts +0 -19
- package/dist/libraries/mongo/models/order-delivery.model.js +0 -87
- package/dist/libraries/mongo/models/order-delivery.model.js.map +0 -1
- package/dist/libraries/mongo/repositories/index.d.ts +0 -0
- package/dist/libraries/mongo/repositories/index.js +0 -2
- package/dist/libraries/mongo/repositories/index.js.map +0 -1
- package/dist/libraries/mongo/repositories/optimized-product.repository.d.ts +0 -0
- package/dist/libraries/mongo/repositories/optimized-product.repository.js +0 -2
- package/dist/libraries/mongo/repositories/optimized-product.repository.js.map +0 -1
- package/dist/libraries/mongo/repositories/optimized-product.service.d.ts +0 -0
- package/dist/libraries/mongo/repositories/optimized-product.service.js +0 -2
- package/dist/libraries/mongo/repositories/optimized-product.service.js.map +0 -1
- package/dist/libraries/mongo/repositories/product-benchmark.d.ts +0 -0
- package/dist/libraries/mongo/repositories/product-benchmark.js +0 -2
- package/dist/libraries/mongo/repositories/product-benchmark.js.map +0 -1
- package/dist/libraries/mongo/repositories/product-query-optimizer.d.ts +0 -0
- package/dist/libraries/mongo/repositories/product-query-optimizer.js +0 -2
- package/dist/libraries/mongo/repositories/product-query-optimizer.js.map +0 -1
- package/dist/libraries/mongo/repositories/product.repository.d.ts +0 -0
- package/dist/libraries/mongo/repositories/product.repository.js +0 -2
- package/dist/libraries/mongo/repositories/product.repository.js.map +0 -1
- package/dist/libraries/mongo/repositories/test-optimized-product.d.ts +0 -0
- package/dist/libraries/mongo/repositories/test-optimized-product.js +0 -2
- package/dist/libraries/mongo/repositories/test-optimized-product.js.map +0 -1
- package/dist/libraries/socket/SocketEmitEvent.d.ts +0 -9
- package/dist/libraries/socket/SocketEmitEvent.js +0 -29
- package/dist/libraries/socket/SocketEmitEvent.js.map +0 -1
- package/dist/libraries/socket/socket-publisher.d.ts +0 -11
- package/dist/libraries/socket/socket-publisher.js +0 -36
- package/dist/libraries/socket/socket-publisher.js.map +0 -1
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.SocketEmitEvent = void 0;
|
|
13
|
-
const BaseEvent_1 = require("../event/BaseEvent");
|
|
14
|
-
const metadata_1 = require("../event/decorators/metadata");
|
|
15
|
-
let SocketEmitEvent = class SocketEmitEvent extends BaseEvent_1.BaseEvent {
|
|
16
|
-
constructor(instanceId, parameters) {
|
|
17
|
-
super(`socket.emit.${instanceId}`, parameters);
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
exports.SocketEmitEvent = SocketEmitEvent;
|
|
21
|
-
exports.SocketEmitEvent = SocketEmitEvent = __decorate([
|
|
22
|
-
(0, metadata_1.EventMetadata)('socket.emit', [
|
|
23
|
-
{ name: 'eventType', type: 'string' },
|
|
24
|
-
{ name: 'userIds', type: 'array' },
|
|
25
|
-
{ name: 'data', type: 'object' },
|
|
26
|
-
]),
|
|
27
|
-
__metadata("design:paramtypes", [String, Object])
|
|
28
|
-
], SocketEmitEvent);
|
|
29
|
-
//# sourceMappingURL=SocketEmitEvent.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SocketEmitEvent.js","sourceRoot":"/","sources":["libraries/socket/SocketEmitEvent.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kDAA+C;AAC/C,2DAA6D;AAatD,IAAM,eAAe,GAArB,MAAM,eAAgC,SAAQ,qBAAsC;IAC1F,YAAY,UAAkB,EAAE,UAAuC;QACtE,KAAK,CAAC,eAAe,UAAU,EAAE,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;CACD,CAAA;AAJY,0CAAe;0BAAf,eAAe;IAL3B,IAAA,wBAAa,EAAC,aAAa,EAAE;QAC7B,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;QACrC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;QAClC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;KAChC,CAAC;;GACW,eAAe,CAI3B","sourcesContent":["import { BaseEvent } from '../event/BaseEvent';\nimport { EventMetadata } from '../event/decorators/metadata';\n\nexport type SocketEventParams<TData = any> = {\n\teventType: string;\n\tuserIds: string[];\n\tdata: TData;\n};\n\n@EventMetadata('socket.emit', [\n\t{ name: 'eventType', type: 'string' },\n\t{ name: 'userIds', type: 'array' },\n\t{ name: 'data', type: 'object' },\n])\nexport class SocketEmitEvent<TPayload = any> extends BaseEvent<SocketEventParams<TPayload>> {\n\tconstructor(instanceId: string, parameters: SocketEventParams<TPayload>) {\n\t\tsuper(`socket.emit.${instanceId}`, parameters);\n\t}\n}\n"]}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { RedisService } from "../redis";
|
|
2
|
-
export interface InstanceRecipients {
|
|
3
|
-
instanceId: string;
|
|
4
|
-
usersId: string[];
|
|
5
|
-
}
|
|
6
|
-
export declare function getInstanceRecipientsMap(redis: RedisService, userIds: string[]): Promise<InstanceRecipients[]>;
|
|
7
|
-
export declare function publishToRecipients({ recipientIds, eventType, data, }: {
|
|
8
|
-
recipientIds: string[];
|
|
9
|
-
eventType: string;
|
|
10
|
-
data: any;
|
|
11
|
-
}): Promise<void>;
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getInstanceRecipientsMap = getInstanceRecipientsMap;
|
|
4
|
-
exports.publishToRecipients = publishToRecipients;
|
|
5
|
-
const __1 = require("../..");
|
|
6
|
-
const event_1 = require("../event");
|
|
7
|
-
const SocketEmitEvent_1 = require("./SocketEmitEvent");
|
|
8
|
-
async function getInstanceRecipientsMap(redis, userIds) {
|
|
9
|
-
const instanceMap = {};
|
|
10
|
-
for (const userId of userIds) {
|
|
11
|
-
const instanceIds = await redis.redisClient.smembers(`user:${userId}:instances`);
|
|
12
|
-
for (const instanceId of instanceIds) {
|
|
13
|
-
if (!instanceMap[instanceId]) {
|
|
14
|
-
instanceMap[instanceId] = [];
|
|
15
|
-
}
|
|
16
|
-
instanceMap[instanceId].push(userId);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
return Object.entries(instanceMap).map(([instanceId, usersId]) => ({ instanceId, usersId }));
|
|
20
|
-
}
|
|
21
|
-
async function publishToRecipients({ recipientIds, eventType, data, }) {
|
|
22
|
-
if (!recipientIds.length)
|
|
23
|
-
return;
|
|
24
|
-
const redisService = (0, __1.getLibraries)().getRedisService();
|
|
25
|
-
const instanceRecipientsArr = await getInstanceRecipientsMap(redisService, recipientIds);
|
|
26
|
-
const timestamp = new Date().toISOString();
|
|
27
|
-
await Promise.all(instanceRecipientsArr.map(({ instanceId, usersId }) => {
|
|
28
|
-
const event = new SocketEmitEvent_1.SocketEmitEvent(instanceId, {
|
|
29
|
-
eventType,
|
|
30
|
-
userIds: usersId,
|
|
31
|
-
data: { ...data, timestamp },
|
|
32
|
-
});
|
|
33
|
-
return (0, event_1.publishEvent)(event);
|
|
34
|
-
}));
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=socket-publisher.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"socket-publisher.js","sourceRoot":"/","sources":["libraries/socket/socket-publisher.ts"],"names":[],"mappings":";;AAWA,4DAeC;AAED,kDAyBC;AArDD,6BAAqC;AACrC,oCAAwC;AACxC,uDAAoD;AAS7C,KAAK,UAAU,wBAAwB,CAC7C,KAAmB,EACnB,OAAiB;IAEjB,MAAM,WAAW,GAA6B,EAAE,CAAC;IACjD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,MAAM,YAAY,CAAC,CAAC;QACjF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACtC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9B,WAAW,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;YAC9B,CAAC;YACD,WAAW,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAC9F,CAAC;AAEM,KAAK,UAAU,mBAAmB,CAAC,EACzC,YAAY,EACZ,SAAS,EACT,IAAI,GAKJ;IACA,IAAI,CAAC,YAAY,CAAC,MAAM;QAAE,OAAO;IAEjC,MAAM,YAAY,GAAG,IAAA,gBAAY,GAAE,CAAC,eAAe,EAAE,CAAC;IACtD,MAAM,qBAAqB,GAAG,MAAM,wBAAwB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACzF,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE3C,MAAM,OAAO,CAAC,GAAG,CAChB,qBAAqB,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE;QACrD,MAAM,KAAK,GAAG,IAAI,iCAAe,CAAC,UAAU,EAAE;YAC7C,SAAS;YACT,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE;SAC5B,CAAC,CAAC;QACH,OAAO,IAAA,oBAAY,EAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC,CACF,CAAC;AACH,CAAC","sourcesContent":["import { getLibraries } from \"../..\";\nimport { publishEvent } from \"../event\";\nimport { SocketEmitEvent } from \"./SocketEmitEvent\";\nimport { RedisService } from \"../redis\";\n\nexport interface InstanceRecipients {\n\tinstanceId: string;\n\tusersId: string[];\n}\n\n \nexport async function getInstanceRecipientsMap(\n\tredis: RedisService,\n\tuserIds: string[]\n): Promise<InstanceRecipients[]> {\n\tconst instanceMap: Record<string, string[]> = {};\n\tfor (const userId of userIds) {\n\t\tconst instanceIds = await redis.redisClient.smembers(`user:${userId}:instances`);\n\t\tfor (const instanceId of instanceIds) {\n\t\t\tif (!instanceMap[instanceId]) {\n\t\t\t\tinstanceMap[instanceId] = [];\n\t\t\t}\n\t\t\tinstanceMap[instanceId].push(userId);\n\t\t}\n\t}\n\treturn Object.entries(instanceMap).map(([instanceId, usersId]) => ({ instanceId, usersId }));\n}\n\nexport async function publishToRecipients({\n\trecipientIds,\n\teventType,\n\tdata,\n}: {\n\trecipientIds: string[];\n\teventType: string;\n\tdata: any;\n}) {\n\tif (!recipientIds.length) return;\n\n\tconst redisService = getLibraries().getRedisService();\n\tconst instanceRecipientsArr = await getInstanceRecipientsMap(redisService, recipientIds);\n\tconst timestamp = new Date().toISOString();\n\n\tawait Promise.all(\n\t\tinstanceRecipientsArr.map(({ instanceId, usersId }) => {\n\t\t\tconst event = new SocketEmitEvent(instanceId, {\n\t\t\t\teventType,\n\t\t\t\tuserIds: usersId,\n\t\t\t\tdata: { ...data, timestamp },\n\t\t\t});\n\t\t\treturn publishEvent(event);\n\t\t})\n\t);\n}\n"]}
|