@vezlo/assistant-server 1.0.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.
Files changed (113) hide show
  1. package/Dockerfile +64 -0
  2. package/LICENSE +661 -0
  3. package/README.md +432 -0
  4. package/bin/vezlo-server.js +36 -0
  5. package/database-schema.sql +154 -0
  6. package/dist/knexfile.d.ts +6 -0
  7. package/dist/knexfile.d.ts.map +1 -0
  8. package/dist/knexfile.js +85 -0
  9. package/dist/knexfile.js.map +1 -0
  10. package/dist/src/config/database.d.ts +4 -0
  11. package/dist/src/config/database.d.ts.map +1 -0
  12. package/dist/src/config/database.js +30 -0
  13. package/dist/src/config/database.js.map +1 -0
  14. package/dist/src/config/global.d.ts +65 -0
  15. package/dist/src/config/global.d.ts.map +1 -0
  16. package/dist/src/config/global.js +113 -0
  17. package/dist/src/config/global.js.map +1 -0
  18. package/dist/src/config/knex.d.ts +9 -0
  19. package/dist/src/config/knex.d.ts.map +1 -0
  20. package/dist/src/config/knex.js +67 -0
  21. package/dist/src/config/knex.js.map +1 -0
  22. package/dist/src/config/logger.d.ts +4 -0
  23. package/dist/src/config/logger.d.ts.map +1 -0
  24. package/dist/src/config/logger.js +30 -0
  25. package/dist/src/config/logger.js.map +1 -0
  26. package/dist/src/config/swagger.d.ts +18 -0
  27. package/dist/src/config/swagger.d.ts.map +1 -0
  28. package/dist/src/config/swagger.js +230 -0
  29. package/dist/src/config/swagger.js.map +1 -0
  30. package/dist/src/controllers/ChatController.d.ts +16 -0
  31. package/dist/src/controllers/ChatController.d.ts.map +1 -0
  32. package/dist/src/controllers/ChatController.js +281 -0
  33. package/dist/src/controllers/ChatController.js.map +1 -0
  34. package/dist/src/controllers/KnowledgeController.d.ts +13 -0
  35. package/dist/src/controllers/KnowledgeController.d.ts.map +1 -0
  36. package/dist/src/controllers/KnowledgeController.js +210 -0
  37. package/dist/src/controllers/KnowledgeController.js.map +1 -0
  38. package/dist/src/middleware/errorHandler.d.ts +63 -0
  39. package/dist/src/middleware/errorHandler.d.ts.map +1 -0
  40. package/dist/src/middleware/errorHandler.js +226 -0
  41. package/dist/src/middleware/errorHandler.js.map +1 -0
  42. package/dist/src/migrations/001_initial_schema.d.ts +4 -0
  43. package/dist/src/migrations/001_initial_schema.d.ts.map +1 -0
  44. package/dist/src/migrations/001_initial_schema.js +144 -0
  45. package/dist/src/migrations/001_initial_schema.js.map +1 -0
  46. package/dist/src/schemas/ConversationSchemas.d.ts +132 -0
  47. package/dist/src/schemas/ConversationSchemas.d.ts.map +1 -0
  48. package/dist/src/schemas/ConversationSchemas.js +71 -0
  49. package/dist/src/schemas/ConversationSchemas.js.map +1 -0
  50. package/dist/src/schemas/FeedbackSchemas.d.ts +222 -0
  51. package/dist/src/schemas/FeedbackSchemas.d.ts.map +1 -0
  52. package/dist/src/schemas/FeedbackSchemas.js +116 -0
  53. package/dist/src/schemas/FeedbackSchemas.js.map +1 -0
  54. package/dist/src/schemas/KnowledgeSchemas.d.ts +266 -0
  55. package/dist/src/schemas/KnowledgeSchemas.d.ts.map +1 -0
  56. package/dist/src/schemas/KnowledgeSchemas.js +115 -0
  57. package/dist/src/schemas/KnowledgeSchemas.js.map +1 -0
  58. package/dist/src/schemas/MessageSchemas.d.ts +145 -0
  59. package/dist/src/schemas/MessageSchemas.d.ts.map +1 -0
  60. package/dist/src/schemas/MessageSchemas.js +79 -0
  61. package/dist/src/schemas/MessageSchemas.js.map +1 -0
  62. package/dist/src/schemas/index.d.ts +752 -0
  63. package/dist/src/schemas/index.d.ts.map +1 -0
  64. package/dist/src/schemas/index.js +31 -0
  65. package/dist/src/schemas/index.js.map +1 -0
  66. package/dist/src/server.d.ts +2 -0
  67. package/dist/src/server.d.ts.map +1 -0
  68. package/dist/src/server.js +609 -0
  69. package/dist/src/server.js.map +1 -0
  70. package/dist/src/services/AIService.d.ts +17 -0
  71. package/dist/src/services/AIService.d.ts.map +1 -0
  72. package/dist/src/services/AIService.js +174 -0
  73. package/dist/src/services/AIService.js.map +1 -0
  74. package/dist/src/services/ChatManager.d.ts +18 -0
  75. package/dist/src/services/ChatManager.d.ts.map +1 -0
  76. package/dist/src/services/ChatManager.js +174 -0
  77. package/dist/src/services/ChatManager.js.map +1 -0
  78. package/dist/src/services/KnowledgeBaseService.d.ts +72 -0
  79. package/dist/src/services/KnowledgeBaseService.d.ts.map +1 -0
  80. package/dist/src/services/KnowledgeBaseService.js +442 -0
  81. package/dist/src/services/KnowledgeBaseService.js.map +1 -0
  82. package/dist/src/storage/ConversationRepository.d.ts +15 -0
  83. package/dist/src/storage/ConversationRepository.d.ts.map +1 -0
  84. package/dist/src/storage/ConversationRepository.js +123 -0
  85. package/dist/src/storage/ConversationRepository.js.map +1 -0
  86. package/dist/src/storage/FeedbackRepository.d.ts +15 -0
  87. package/dist/src/storage/FeedbackRepository.d.ts.map +1 -0
  88. package/dist/src/storage/FeedbackRepository.js +141 -0
  89. package/dist/src/storage/FeedbackRepository.js.map +1 -0
  90. package/dist/src/storage/MessageRepository.d.ts +13 -0
  91. package/dist/src/storage/MessageRepository.d.ts.map +1 -0
  92. package/dist/src/storage/MessageRepository.js +165 -0
  93. package/dist/src/storage/MessageRepository.js.map +1 -0
  94. package/dist/src/storage/SupabaseStorage.d.ts +20 -0
  95. package/dist/src/storage/SupabaseStorage.d.ts.map +1 -0
  96. package/dist/src/storage/SupabaseStorage.js +347 -0
  97. package/dist/src/storage/SupabaseStorage.js.map +1 -0
  98. package/dist/src/storage/UnifiedStorage.d.ts +45 -0
  99. package/dist/src/storage/UnifiedStorage.d.ts.map +1 -0
  100. package/dist/src/storage/UnifiedStorage.js +94 -0
  101. package/dist/src/storage/UnifiedStorage.js.map +1 -0
  102. package/dist/src/storage/index.d.ts +11 -0
  103. package/dist/src/storage/index.d.ts.map +1 -0
  104. package/dist/src/storage/index.js +21 -0
  105. package/dist/src/storage/index.js.map +1 -0
  106. package/dist/src/types/index.d.ts +163 -0
  107. package/dist/src/types/index.d.ts.map +1 -0
  108. package/dist/src/types/index.js +3 -0
  109. package/dist/src/types/index.js.map +1 -0
  110. package/docker-compose.yml +32 -0
  111. package/env.example +46 -0
  112. package/knexfile.ts +86 -0
  113. package/package.json +92 -0
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FeedbackRepository = void 0;
4
+ class FeedbackRepository {
5
+ constructor(supabase, tablePrefix = '') {
6
+ this.supabase = supabase;
7
+ this.tablePrefix = tablePrefix;
8
+ }
9
+ getTableName(table) {
10
+ return this.tablePrefix ? `${this.tablePrefix}_${table}` : table;
11
+ }
12
+ async saveFeedback(feedback) {
13
+ const tableName = this.getTableName('message_feedback');
14
+ if (feedback.id) {
15
+ // Update existing feedback
16
+ const { data, error } = await this.supabase
17
+ .from(tableName)
18
+ .update({
19
+ rating: feedback.rating,
20
+ category: feedback.category,
21
+ comment: feedback.comment,
22
+ suggested_improvement: feedback.suggestedImprovement,
23
+ updated_at: new Date().toISOString()
24
+ })
25
+ .eq('uuid', feedback.id)
26
+ .select()
27
+ .single();
28
+ if (error)
29
+ throw new Error(`Failed to update feedback: ${error.message}`);
30
+ return this.rowToFeedback(data);
31
+ }
32
+ else {
33
+ // Get message internal ID from UUID
34
+ const messageQuery = await this.supabase
35
+ .from('messages')
36
+ .select('id')
37
+ .eq('uuid', feedback.messageId)
38
+ .single();
39
+ if (messageQuery.error)
40
+ throw new Error(`Failed to find message: ${messageQuery.error.message}`);
41
+ const { data, error } = await this.supabase
42
+ .from(tableName)
43
+ .insert({
44
+ message_id: messageQuery.data.id,
45
+ user_id: parseInt(feedback.userId) || 1,
46
+ rating: feedback.rating,
47
+ category: feedback.category,
48
+ comment: feedback.comment,
49
+ suggested_improvement: feedback.suggestedImprovement,
50
+ created_at: feedback.createdAt?.toISOString() || new Date().toISOString()
51
+ })
52
+ .select()
53
+ .single();
54
+ if (error)
55
+ throw new Error(`Failed to create feedback: ${error.message}`);
56
+ // Return feedback with original IDs from the input
57
+ return {
58
+ id: data.uuid,
59
+ messageId: feedback.messageId,
60
+ conversationId: feedback.conversationId,
61
+ userId: feedback.userId,
62
+ rating: feedback.rating,
63
+ category: feedback.category,
64
+ comment: feedback.comment,
65
+ suggestedImprovement: feedback.suggestedImprovement,
66
+ createdAt: new Date(data.created_at)
67
+ };
68
+ }
69
+ }
70
+ async getFeedback(messageId) {
71
+ const tableName = this.getTableName('message_feedback');
72
+ // Get message internal ID from UUID
73
+ const messageQuery = await this.supabase
74
+ .from('messages')
75
+ .select('id')
76
+ .eq('uuid', messageId)
77
+ .single();
78
+ if (messageQuery.error) {
79
+ throw new Error(`Failed to find message: ${messageQuery.error.message}`);
80
+ }
81
+ const { data, error } = await this.supabase
82
+ .from(tableName)
83
+ .select('*')
84
+ .eq('message_id', messageQuery.data.id)
85
+ .order('created_at', { ascending: false });
86
+ if (error)
87
+ throw new Error(`Failed to get feedback: ${error.message}`);
88
+ return (data || []).map(row => this.rowToFeedback(row));
89
+ }
90
+ async getFeedbackById(feedbackId) {
91
+ const tableName = this.getTableName('message_feedback');
92
+ const { data, error } = await this.supabase
93
+ .from(tableName)
94
+ .select('*, messages!inner(uuid)')
95
+ .eq('uuid', feedbackId)
96
+ .single();
97
+ if (error) {
98
+ if (error.code === 'PGRST116')
99
+ return null; // Not found
100
+ throw new Error(`Failed to get feedback: ${error.message}`);
101
+ }
102
+ return this.rowToFeedback(data);
103
+ }
104
+ async getUserFeedback(userId, limit = 50, offset = 0) {
105
+ const tableName = this.getTableName('message_feedback');
106
+ const { data, error } = await this.supabase
107
+ .from(tableName)
108
+ .select('*, messages!inner(uuid)')
109
+ .eq('user_id', parseInt(userId) || 1)
110
+ .order('created_at', { ascending: false })
111
+ .range(offset, offset + limit - 1);
112
+ if (error)
113
+ throw new Error(`Failed to get user feedback: ${error.message}`);
114
+ return (data || []).map(row => this.rowToFeedback(row));
115
+ }
116
+ async deleteFeedback(feedbackId) {
117
+ const tableName = this.getTableName('message_feedback');
118
+ const { error } = await this.supabase
119
+ .from(tableName)
120
+ .delete()
121
+ .eq('uuid', feedbackId);
122
+ if (error)
123
+ throw new Error(`Failed to delete feedback: ${error.message}`);
124
+ return true;
125
+ }
126
+ rowToFeedback(row) {
127
+ return {
128
+ id: row.uuid,
129
+ messageId: row.messages?.uuid || row.message_uuid || 'unknown',
130
+ conversationId: row.messages?.conversation_uuid || row.session_uuid || 'unknown',
131
+ userId: row.user_id?.toString() || '1',
132
+ rating: row.rating,
133
+ category: row.category,
134
+ comment: row.comment,
135
+ suggestedImprovement: row.suggested_improvement,
136
+ createdAt: new Date(row.created_at)
137
+ };
138
+ }
139
+ }
140
+ exports.FeedbackRepository = FeedbackRepository;
141
+ //# sourceMappingURL=FeedbackRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeedbackRepository.js","sourceRoot":"","sources":["../../../src/storage/FeedbackRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { SupabaseClient } from '@supabase/supabase-js';
2
+ import { StoredChatMessage } from '../types';
3
+ export declare class MessageRepository {
4
+ private supabase;
5
+ private tablePrefix;
6
+ constructor(supabase: SupabaseClient, tablePrefix?: string);
7
+ private getTableName;
8
+ saveMessage(message: StoredChatMessage): Promise<StoredChatMessage>;
9
+ getMessages(conversationId: string, limit?: number, offset?: number): Promise<StoredChatMessage[]>;
10
+ deleteMessage(messageId: string): Promise<boolean>;
11
+ getMessageById(messageId: string): Promise<StoredChatMessage | null>;
12
+ }
13
+ //# sourceMappingURL=MessageRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageRepository.d.ts","sourceRoot":"","sources":["../../../src/storage/MessageRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,WAAW,CAAS;gBAEhB,QAAQ,EAAE,cAAc,EAAE,WAAW,GAAE,MAAW;IAK9D,OAAO,CAAC,YAAY;IAId,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAoFnE,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,SAAK,EAAE,MAAM,SAAI,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAwCzF,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYlD,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;CA4B3E"}
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MessageRepository = void 0;
4
+ class MessageRepository {
5
+ constructor(supabase, tablePrefix = '') {
6
+ this.supabase = supabase;
7
+ this.tablePrefix = tablePrefix;
8
+ }
9
+ getTableName(table) {
10
+ return this.tablePrefix ? `${this.tablePrefix}_${table}` : table;
11
+ }
12
+ async saveMessage(message) {
13
+ const tableName = this.getTableName('messages');
14
+ if (message.id) {
15
+ // Update existing message
16
+ const { data, error } = await this.supabase
17
+ .from(tableName)
18
+ .update({
19
+ content: message.content,
20
+ metadata: { tool_calls: message.toolCalls, tool_results: message.toolResults },
21
+ updated_at: new Date().toISOString()
22
+ })
23
+ .eq('uuid', message.id)
24
+ .select()
25
+ .single();
26
+ if (error)
27
+ throw new Error(`Failed to update message: ${error.message}`);
28
+ const metadata = data.metadata || {};
29
+ return {
30
+ id: data.uuid,
31
+ conversationId: message.conversationId,
32
+ threadId: message.threadId,
33
+ role: data.type,
34
+ content: data.content,
35
+ toolCalls: metadata.tool_calls,
36
+ toolResults: metadata.tool_results,
37
+ parentMessageId: data.parent_message_id,
38
+ createdAt: new Date(data.created_at),
39
+ updatedAt: data.updated_at ? new Date(data.updated_at) : undefined
40
+ };
41
+ }
42
+ else {
43
+ // Get conversation internal ID from UUID
44
+ const conversationQuery = await this.supabase
45
+ .from('conversations')
46
+ .select('id')
47
+ .eq('uuid', message.conversationId)
48
+ .single();
49
+ if (conversationQuery.error)
50
+ throw new Error(`Failed to find conversation: ${conversationQuery.error.message}`);
51
+ // Get parent message internal ID if parentMessageId is provided
52
+ let parentMessageInternalId = null;
53
+ if (message.parentMessageId) {
54
+ const parentMessageQuery = await this.supabase
55
+ .from('messages')
56
+ .select('id')
57
+ .eq('uuid', message.parentMessageId)
58
+ .single();
59
+ if (parentMessageQuery.data && !parentMessageQuery.error) {
60
+ parentMessageInternalId = parentMessageQuery.data.id;
61
+ }
62
+ }
63
+ const { data, error } = await this.supabase
64
+ .from(tableName)
65
+ .insert({
66
+ conversation_id: conversationQuery.data.id,
67
+ parent_message_id: parentMessageInternalId,
68
+ type: message.role,
69
+ content: message.content,
70
+ metadata: { tool_calls: message.toolCalls, tool_results: message.toolResults },
71
+ created_at: message.createdAt.toISOString()
72
+ })
73
+ .select()
74
+ .single();
75
+ if (error)
76
+ throw new Error(`Failed to create message: ${error.message}`);
77
+ const metadata = data.metadata || {};
78
+ return {
79
+ id: data.uuid,
80
+ conversationId: message.conversationId,
81
+ threadId: message.threadId,
82
+ role: data.type,
83
+ content: data.content,
84
+ toolCalls: metadata.tool_calls,
85
+ toolResults: metadata.tool_results,
86
+ parentMessageId: message.parentMessageId,
87
+ createdAt: new Date(data.created_at),
88
+ updatedAt: data.updated_at ? new Date(data.updated_at) : undefined
89
+ };
90
+ }
91
+ }
92
+ async getMessages(conversationId, limit = 50, offset = 0) {
93
+ const tableName = this.getTableName('messages');
94
+ // First get the conversation internal ID
95
+ const conversationQuery = await this.supabase
96
+ .from('conversations')
97
+ .select('id')
98
+ .eq('uuid', conversationId)
99
+ .single();
100
+ if (conversationQuery.error) {
101
+ throw new Error(`Failed to find conversation: ${conversationQuery.error.message}`);
102
+ }
103
+ const { data, error } = await this.supabase
104
+ .from(tableName)
105
+ .select('*')
106
+ .eq('conversation_id', conversationQuery.data.id)
107
+ .order('created_at', { ascending: true })
108
+ .range(offset, offset + limit - 1);
109
+ if (error)
110
+ throw new Error(`Failed to get messages: ${error.message}`);
111
+ return (data || []).map(row => {
112
+ const metadata = row.metadata || {};
113
+ return {
114
+ id: row.uuid,
115
+ conversationId: conversationId,
116
+ threadId: conversationId,
117
+ role: row.type,
118
+ content: row.content,
119
+ toolCalls: metadata.tool_calls,
120
+ toolResults: metadata.tool_results,
121
+ parentMessageId: row.parent_message_id,
122
+ createdAt: new Date(row.created_at),
123
+ updatedAt: row.updated_at ? new Date(row.updated_at) : undefined
124
+ };
125
+ });
126
+ }
127
+ async deleteMessage(messageId) {
128
+ const tableName = this.getTableName('messages');
129
+ const { error } = await this.supabase
130
+ .from(tableName)
131
+ .delete()
132
+ .eq('uuid', messageId);
133
+ if (error)
134
+ throw new Error(`Failed to delete message: ${error.message}`);
135
+ return true;
136
+ }
137
+ async getMessageById(messageId) {
138
+ const tableName = this.getTableName('messages');
139
+ const { data, error } = await this.supabase
140
+ .from(tableName)
141
+ .select('*, conversations!inner(uuid)')
142
+ .eq('uuid', messageId)
143
+ .single();
144
+ if (error) {
145
+ if (error.code === 'PGRST116')
146
+ return null; // Not found
147
+ throw new Error(`Failed to get message: ${error.message}`);
148
+ }
149
+ const metadata = data.metadata || {};
150
+ return {
151
+ id: data.uuid,
152
+ conversationId: data.conversations.uuid,
153
+ threadId: data.conversations.uuid,
154
+ role: data.type,
155
+ content: data.content,
156
+ toolCalls: metadata.tool_calls,
157
+ toolResults: metadata.tool_results,
158
+ parentMessageId: data.parent_message_id,
159
+ createdAt: new Date(data.created_at),
160
+ updatedAt: data.updated_at ? new Date(data.updated_at) : undefined
161
+ };
162
+ }
163
+ }
164
+ exports.MessageRepository = MessageRepository;
165
+ //# sourceMappingURL=MessageRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageRepository.js","sourceRoot":"","sources":["../../../src/storage/MessageRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { SupabaseClient } from '@supabase/supabase-js';
2
+ import { ChatStorage, ChatConversation, StoredChatMessage, Feedback } from '../types';
3
+ export declare class SupabaseStorage implements ChatStorage {
4
+ private supabase;
5
+ private tablePrefix;
6
+ constructor(supabase: SupabaseClient, tablePrefix?: string);
7
+ private getTableName;
8
+ saveConversation(conversation: ChatConversation): Promise<ChatConversation>;
9
+ getConversation(conversationId: string): Promise<ChatConversation | null>;
10
+ updateConversation(conversationId: string, updates: Partial<ChatConversation>): Promise<ChatConversation>;
11
+ deleteConversation(conversationId: string): Promise<boolean>;
12
+ getUserConversations(userId: string, organizationId?: string): Promise<ChatConversation[]>;
13
+ saveMessage(message: StoredChatMessage): Promise<StoredChatMessage>;
14
+ getMessages(conversationId: string, limit?: number, offset?: number): Promise<StoredChatMessage[]>;
15
+ deleteMessage(messageId: string): Promise<boolean>;
16
+ saveFeedback(feedback: Feedback): Promise<Feedback>;
17
+ getFeedback(messageId: string): Promise<Feedback[]>;
18
+ private rowToConversation;
19
+ }
20
+ //# sourceMappingURL=SupabaseStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SupabaseStorage.d.ts","sourceRoot":"","sources":["../../../src/storage/SupabaseStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,EACT,MAAM,UAAU,CAAC;AAElB,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,WAAW,CAAS;gBAG1B,QAAQ,EAAE,cAAc,EACxB,WAAW,GAAE,MAAW;IAM1B,OAAO,CAAC,YAAY;IAId,gBAAgB,CAAC,YAAY,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwC3E,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAkBzE,kBAAkB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAqBzG,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAY5D,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAwB1F,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmFnE,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,SAAK,EAAE,MAAM,SAAI,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAmCzF,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYlD,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsEnD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAgCzD,OAAO,CAAC,iBAAiB;CAc1B"}