a2a-memory 0.11.4 → 0.11.6

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 (262) hide show
  1. package/LICENSE +7 -19
  2. package/README.md +1 -1
  3. package/dist/a2a/client.js +1 -252
  4. package/dist/a2a/discovery.js +1 -115
  5. package/dist/a2a/index.js +1 -8
  6. package/dist/a2a/types.js +1 -42
  7. package/dist/adapters/anthropic.js +1 -117
  8. package/dist/chunking/chunker.js +1 -163
  9. package/dist/claude/sync.js +1 -294
  10. package/dist/cli/commands/add.js +1 -80
  11. package/dist/cli/commands/claude-sync.js +1 -70
  12. package/dist/cli/commands/cleanup.js +1 -83
  13. package/dist/cli/commands/config.js +1 -73
  14. package/dist/cli/commands/edit.js +1 -69
  15. package/dist/cli/commands/embed.js +1 -92
  16. package/dist/cli/commands/extract.js +1 -103
  17. package/dist/cli/commands/health.js +1 -105
  18. package/dist/cli/commands/list.js +1 -49
  19. package/dist/cli/commands/migrate-chunks.js +1 -205
  20. package/dist/cli/commands/migrate-file-refs.js +1 -183
  21. package/dist/cli/commands/proficiency.js +1 -146
  22. package/dist/cli/commands/rm.js +1 -64
  23. package/dist/cli/commands/search.js +1 -89
  24. package/dist/cli/commands/setup-wizard.js +1 -387
  25. package/dist/cli/commands/setup.js +1 -170
  26. package/dist/cli/commands/skill.js +1 -151
  27. package/dist/cli/commands/status.js +1 -70
  28. package/dist/cli/commands/sync.js +1 -202
  29. package/dist/cli/commands/team.js +1 -142
  30. package/dist/cli/index.js +1 -87
  31. package/dist/config/manager.js +1 -372
  32. package/dist/db/database.d.ts +10 -1
  33. package/dist/db/database.js +1 -1367
  34. package/dist/embedding/e5-provider.js +1 -147
  35. package/dist/embedding/index.js +1 -34
  36. package/dist/embedding/local-provider.js +1 -157
  37. package/dist/embedding/openai-provider.js +1 -92
  38. package/dist/embedding/quantization.js +1 -89
  39. package/dist/extraction/dedup-manager.js +1 -161
  40. package/dist/extraction/emotion-filter.js +1 -33
  41. package/dist/extraction/extractor.js +1 -642
  42. package/dist/extraction/file-reference.js +1 -77
  43. package/dist/extraction/filter.js +1 -85
  44. package/dist/extraction/scorer.js +1 -142
  45. package/dist/extraction/similarity.js +1 -85
  46. package/dist/hooks/client-factory.js +1 -44
  47. package/dist/hooks/post-tool-use.js +1 -470
  48. package/dist/hooks/pre-compact.js +1 -209
  49. package/dist/hooks/session-end.d.ts +1 -0
  50. package/dist/hooks/session-end.js +1 -623
  51. package/dist/hooks/session-start.js +1 -549
  52. package/dist/hooks/shared.js +1 -110
  53. package/dist/hooks/user-prompt-submit.js +1 -316
  54. package/dist/i18n/index.js +1 -2
  55. package/dist/i18n/messages.js +1 -150
  56. package/dist/index.js +1 -43
  57. package/dist/lifecycle/cleanup-scheduler.js +1 -137
  58. package/dist/lifecycle/cleanup.js +1 -116
  59. package/dist/lifecycle/index.js +1 -13
  60. package/dist/lifecycle/quality-scorer.js +1 -46
  61. package/dist/lifecycle/tiering.js +1 -246
  62. package/dist/llm/client.js +1 -226
  63. package/dist/llm/index.js +1 -5
  64. package/dist/proficiency/actr-engine.js +1 -106
  65. package/dist/proficiency/detection.js +1 -77
  66. package/dist/proficiency/index.js +1 -9
  67. package/dist/proficiency/tracker.js +1 -173
  68. package/dist/proficiency/types.js +1 -8
  69. package/dist/providers/adapters.js +1 -140
  70. package/dist/providers/detector.js +1 -57
  71. package/dist/search/adaptive-router.js +1 -93
  72. package/dist/search/index.js +1 -9
  73. package/dist/search/ranker.js +1 -171
  74. package/dist/search/reranker.js +1 -155
  75. package/dist/session/parser.js +1 -130
  76. package/dist/skill/evaluator.js +1 -509
  77. package/dist/skill/index.js +1 -7
  78. package/dist/skill/types.js +1 -7
  79. package/dist/sync/client.d.ts +1 -0
  80. package/dist/sync/client.js +1 -597
  81. package/dist/sync/encryption.js +1 -203
  82. package/dist/sync/index.js +1 -12
  83. package/dist/sync/queue.js +1 -199
  84. package/dist/sync/scheduler.js +1 -140
  85. package/dist/sync/synchronizer.js +1 -241
  86. package/dist/sync/team-synchronizer.js +1 -204
  87. package/dist/sync/vector-clock.js +1 -70
  88. package/dist/types/index.d.ts +2 -1
  89. package/dist/types/index.js +1 -131
  90. package/dist/utils/keychain.js +1 -170
  91. package/dist/utils/logger.js +1 -128
  92. package/package.json +14 -10
  93. package/dist/a2a/client.d.ts.map +0 -1
  94. package/dist/a2a/client.js.map +0 -1
  95. package/dist/a2a/discovery.d.ts.map +0 -1
  96. package/dist/a2a/discovery.js.map +0 -1
  97. package/dist/a2a/index.d.ts.map +0 -1
  98. package/dist/a2a/index.js.map +0 -1
  99. package/dist/a2a/types.d.ts.map +0 -1
  100. package/dist/a2a/types.js.map +0 -1
  101. package/dist/adapters/anthropic.d.ts.map +0 -1
  102. package/dist/adapters/anthropic.js.map +0 -1
  103. package/dist/chunking/chunker.d.ts.map +0 -1
  104. package/dist/chunking/chunker.js.map +0 -1
  105. package/dist/claude/sync.d.ts.map +0 -1
  106. package/dist/claude/sync.js.map +0 -1
  107. package/dist/cli/commands/add.d.ts.map +0 -1
  108. package/dist/cli/commands/add.js.map +0 -1
  109. package/dist/cli/commands/claude-sync.d.ts.map +0 -1
  110. package/dist/cli/commands/claude-sync.js.map +0 -1
  111. package/dist/cli/commands/cleanup.d.ts.map +0 -1
  112. package/dist/cli/commands/cleanup.js.map +0 -1
  113. package/dist/cli/commands/config.d.ts.map +0 -1
  114. package/dist/cli/commands/config.js.map +0 -1
  115. package/dist/cli/commands/edit.d.ts.map +0 -1
  116. package/dist/cli/commands/edit.js.map +0 -1
  117. package/dist/cli/commands/embed.d.ts.map +0 -1
  118. package/dist/cli/commands/embed.js.map +0 -1
  119. package/dist/cli/commands/extract.d.ts.map +0 -1
  120. package/dist/cli/commands/extract.js.map +0 -1
  121. package/dist/cli/commands/health.d.ts.map +0 -1
  122. package/dist/cli/commands/health.js.map +0 -1
  123. package/dist/cli/commands/list.d.ts.map +0 -1
  124. package/dist/cli/commands/list.js.map +0 -1
  125. package/dist/cli/commands/migrate-chunks.d.ts.map +0 -1
  126. package/dist/cli/commands/migrate-chunks.js.map +0 -1
  127. package/dist/cli/commands/migrate-file-refs.d.ts.map +0 -1
  128. package/dist/cli/commands/migrate-file-refs.js.map +0 -1
  129. package/dist/cli/commands/proficiency.d.ts.map +0 -1
  130. package/dist/cli/commands/proficiency.js.map +0 -1
  131. package/dist/cli/commands/rm.d.ts.map +0 -1
  132. package/dist/cli/commands/rm.js.map +0 -1
  133. package/dist/cli/commands/search.d.ts.map +0 -1
  134. package/dist/cli/commands/search.js.map +0 -1
  135. package/dist/cli/commands/setup-wizard.d.ts.map +0 -1
  136. package/dist/cli/commands/setup-wizard.js.map +0 -1
  137. package/dist/cli/commands/setup.d.ts.map +0 -1
  138. package/dist/cli/commands/setup.js.map +0 -1
  139. package/dist/cli/commands/skill.d.ts.map +0 -1
  140. package/dist/cli/commands/skill.js.map +0 -1
  141. package/dist/cli/commands/status.d.ts.map +0 -1
  142. package/dist/cli/commands/status.js.map +0 -1
  143. package/dist/cli/commands/sync.d.ts.map +0 -1
  144. package/dist/cli/commands/sync.js.map +0 -1
  145. package/dist/cli/commands/team.d.ts.map +0 -1
  146. package/dist/cli/commands/team.js.map +0 -1
  147. package/dist/cli/index.d.ts.map +0 -1
  148. package/dist/cli/index.js.map +0 -1
  149. package/dist/config/manager.d.ts.map +0 -1
  150. package/dist/config/manager.js.map +0 -1
  151. package/dist/db/database.d.ts.map +0 -1
  152. package/dist/db/database.js.map +0 -1
  153. package/dist/embedding/e5-provider.d.ts.map +0 -1
  154. package/dist/embedding/e5-provider.js.map +0 -1
  155. package/dist/embedding/index.d.ts.map +0 -1
  156. package/dist/embedding/index.js.map +0 -1
  157. package/dist/embedding/local-provider.d.ts.map +0 -1
  158. package/dist/embedding/local-provider.js.map +0 -1
  159. package/dist/embedding/openai-provider.d.ts.map +0 -1
  160. package/dist/embedding/openai-provider.js.map +0 -1
  161. package/dist/embedding/quantization.d.ts.map +0 -1
  162. package/dist/embedding/quantization.js.map +0 -1
  163. package/dist/extraction/dedup-manager.d.ts.map +0 -1
  164. package/dist/extraction/dedup-manager.js.map +0 -1
  165. package/dist/extraction/emotion-filter.d.ts.map +0 -1
  166. package/dist/extraction/emotion-filter.js.map +0 -1
  167. package/dist/extraction/extractor.d.ts.map +0 -1
  168. package/dist/extraction/extractor.js.map +0 -1
  169. package/dist/extraction/file-reference.d.ts.map +0 -1
  170. package/dist/extraction/file-reference.js.map +0 -1
  171. package/dist/extraction/filter.d.ts.map +0 -1
  172. package/dist/extraction/filter.js.map +0 -1
  173. package/dist/extraction/scorer.d.ts.map +0 -1
  174. package/dist/extraction/scorer.js.map +0 -1
  175. package/dist/extraction/similarity.d.ts.map +0 -1
  176. package/dist/extraction/similarity.js.map +0 -1
  177. package/dist/hooks/client-factory.d.ts.map +0 -1
  178. package/dist/hooks/client-factory.js.map +0 -1
  179. package/dist/hooks/post-tool-use.d.ts.map +0 -1
  180. package/dist/hooks/post-tool-use.js.map +0 -1
  181. package/dist/hooks/pre-compact.d.ts.map +0 -1
  182. package/dist/hooks/pre-compact.js.map +0 -1
  183. package/dist/hooks/session-end.d.ts.map +0 -1
  184. package/dist/hooks/session-end.js.map +0 -1
  185. package/dist/hooks/session-start.d.ts.map +0 -1
  186. package/dist/hooks/session-start.js.map +0 -1
  187. package/dist/hooks/shared.d.ts.map +0 -1
  188. package/dist/hooks/shared.js.map +0 -1
  189. package/dist/hooks/user-prompt-submit.d.ts.map +0 -1
  190. package/dist/hooks/user-prompt-submit.js.map +0 -1
  191. package/dist/i18n/index.d.ts.map +0 -1
  192. package/dist/i18n/index.js.map +0 -1
  193. package/dist/i18n/messages.d.ts.map +0 -1
  194. package/dist/i18n/messages.js.map +0 -1
  195. package/dist/index.d.ts.map +0 -1
  196. package/dist/index.js.map +0 -1
  197. package/dist/lifecycle/cleanup-scheduler.d.ts.map +0 -1
  198. package/dist/lifecycle/cleanup-scheduler.js.map +0 -1
  199. package/dist/lifecycle/cleanup.d.ts.map +0 -1
  200. package/dist/lifecycle/cleanup.js.map +0 -1
  201. package/dist/lifecycle/index.d.ts.map +0 -1
  202. package/dist/lifecycle/index.js.map +0 -1
  203. package/dist/lifecycle/quality-scorer.d.ts.map +0 -1
  204. package/dist/lifecycle/quality-scorer.js.map +0 -1
  205. package/dist/lifecycle/tiering.d.ts.map +0 -1
  206. package/dist/lifecycle/tiering.js.map +0 -1
  207. package/dist/llm/client.d.ts.map +0 -1
  208. package/dist/llm/client.js.map +0 -1
  209. package/dist/llm/index.d.ts.map +0 -1
  210. package/dist/llm/index.js.map +0 -1
  211. package/dist/proficiency/actr-engine.d.ts.map +0 -1
  212. package/dist/proficiency/actr-engine.js.map +0 -1
  213. package/dist/proficiency/detection.d.ts.map +0 -1
  214. package/dist/proficiency/detection.js.map +0 -1
  215. package/dist/proficiency/index.d.ts.map +0 -1
  216. package/dist/proficiency/index.js.map +0 -1
  217. package/dist/proficiency/tracker.d.ts.map +0 -1
  218. package/dist/proficiency/tracker.js.map +0 -1
  219. package/dist/proficiency/types.d.ts.map +0 -1
  220. package/dist/proficiency/types.js.map +0 -1
  221. package/dist/providers/adapters.d.ts.map +0 -1
  222. package/dist/providers/adapters.js.map +0 -1
  223. package/dist/providers/detector.d.ts.map +0 -1
  224. package/dist/providers/detector.js.map +0 -1
  225. package/dist/search/adaptive-router.d.ts.map +0 -1
  226. package/dist/search/adaptive-router.js.map +0 -1
  227. package/dist/search/index.d.ts.map +0 -1
  228. package/dist/search/index.js.map +0 -1
  229. package/dist/search/ranker.d.ts.map +0 -1
  230. package/dist/search/ranker.js.map +0 -1
  231. package/dist/search/reranker.d.ts.map +0 -1
  232. package/dist/search/reranker.js.map +0 -1
  233. package/dist/session/parser.d.ts.map +0 -1
  234. package/dist/session/parser.js.map +0 -1
  235. package/dist/skill/evaluator.d.ts.map +0 -1
  236. package/dist/skill/evaluator.js.map +0 -1
  237. package/dist/skill/index.d.ts.map +0 -1
  238. package/dist/skill/index.js.map +0 -1
  239. package/dist/skill/types.d.ts.map +0 -1
  240. package/dist/skill/types.js.map +0 -1
  241. package/dist/sync/client.d.ts.map +0 -1
  242. package/dist/sync/client.js.map +0 -1
  243. package/dist/sync/encryption.d.ts.map +0 -1
  244. package/dist/sync/encryption.js.map +0 -1
  245. package/dist/sync/index.d.ts.map +0 -1
  246. package/dist/sync/index.js.map +0 -1
  247. package/dist/sync/queue.d.ts.map +0 -1
  248. package/dist/sync/queue.js.map +0 -1
  249. package/dist/sync/scheduler.d.ts.map +0 -1
  250. package/dist/sync/scheduler.js.map +0 -1
  251. package/dist/sync/synchronizer.d.ts.map +0 -1
  252. package/dist/sync/synchronizer.js.map +0 -1
  253. package/dist/sync/team-synchronizer.d.ts.map +0 -1
  254. package/dist/sync/team-synchronizer.js.map +0 -1
  255. package/dist/sync/vector-clock.d.ts.map +0 -1
  256. package/dist/sync/vector-clock.js.map +0 -1
  257. package/dist/types/index.d.ts.map +0 -1
  258. package/dist/types/index.js.map +0 -1
  259. package/dist/utils/keychain.d.ts.map +0 -1
  260. package/dist/utils/keychain.js.map +0 -1
  261. package/dist/utils/logger.d.ts.map +0 -1
  262. package/dist/utils/logger.js.map +0 -1
@@ -1,1367 +1 @@
1
- /**
2
- * Memory Database
3
- *
4
- * SQLite 기반 로컬 메모리 저장소.
5
- * better-sqlite3 (동기 API) 사용.
6
- */
7
- import Database from 'better-sqlite3';
8
- import { randomUUID } from 'node:crypto';
9
- import { existsSync, mkdirSync, statSync, renameSync } from 'node:fs';
10
- import { dirname } from 'node:path';
11
- import { homedir } from 'node:os';
12
- import { cosineSimilarity as computeCosineSimilarity } from '../extraction/similarity.js';
13
- import { quantizeToFloat32, dequantizeFromFloat32, quantizeToInt8, dequantizeFromInt8, } from '../embedding/quantization.js';
14
- const DEFAULT_DB_PATH = '~/.a2a/memory.db';
15
- function resolvePath(p) {
16
- if (p.startsWith('~')) {
17
- return p.replace('~', homedir());
18
- }
19
- return p;
20
- }
21
- export class MemoryDatabase {
22
- db;
23
- dbPath;
24
- stmts = new Map();
25
- quantizationLevel;
26
- constructor(dbPath = DEFAULT_DB_PATH, quantizationLevel = 'none') {
27
- this.dbPath = resolvePath(dbPath);
28
- this.quantizationLevel = quantizationLevel;
29
- const dir = dirname(this.dbPath);
30
- if (!existsSync(dir)) {
31
- mkdirSync(dir, { recursive: true });
32
- }
33
- this.db = MemoryDatabase.openDatabase(this.dbPath);
34
- this.db.pragma('journal_mode = WAL');
35
- this.db.pragma('foreign_keys = ON');
36
- this.db.pragma('cache_size = -64000');
37
- this.db.pragma('synchronous = NORMAL');
38
- this.db.pragma('temp_store = MEMORY');
39
- this.db.pragma('mmap_size = 268435456');
40
- this.checkIntegrity();
41
- }
42
- /**
43
- * better-sqlite3 native binding을 로드합니다.
44
- * 로드 실패 시 명확한 에러 메시지와 해결 방법을 안내합니다.
45
- */
46
- static openDatabase(dbPath) {
47
- try {
48
- return new Database(dbPath);
49
- }
50
- catch (err) {
51
- const msg = err instanceof Error ? err.message : String(err);
52
- const isBindingError = msg.includes('NODE_MODULE_VERSION') ||
53
- msg.includes('was compiled against') ||
54
- msg.includes('cannot open shared object') ||
55
- msg.includes('invalid ELF') ||
56
- msg.includes('binding');
57
- if (isBindingError) {
58
- console.error('[a2a] Failed to load better-sqlite3 native binding.');
59
- console.error('[a2a] This usually happens when the Node.js version has changed.');
60
- console.error('[a2a] Fix: npm rebuild better-sqlite3');
61
- console.error('[a2a] or: cd ~/.nvm/versions/node/<version>/lib/node_modules/a2a-memory && npm rebuild better-sqlite3');
62
- throw new Error(`[a2a] better-sqlite3 native binding load failed. Run: npm rebuild better-sqlite3\nOriginal error: ${msg}`);
63
- }
64
- throw err;
65
- }
66
- }
67
- /**
68
- * SQLite integrity_check를 실행합니다.
69
- * 손상된 DB는 .corrupt로 이름을 변경하고 새 DB를 생성합니다.
70
- */
71
- checkIntegrity() {
72
- // 새로 생성된 빈 DB는 integrity_check가 불필요
73
- try {
74
- const result = this.db.pragma('integrity_check');
75
- const ok = result.length === 1 && result[0].integrity_check === 'ok';
76
- if (!ok) {
77
- const issues = result.map(r => r.integrity_check).join(', ');
78
- console.error(`[a2a] Database integrity check failed: ${issues}`);
79
- this.recoverCorruptDatabase();
80
- }
81
- }
82
- catch (err) {
83
- const msg = err instanceof Error ? err.message : String(err);
84
- console.error(`[a2a] Database integrity check error: ${msg}`);
85
- this.recoverCorruptDatabase();
86
- }
87
- }
88
- /**
89
- * 손상된 DB를 .corrupt로 이름 변경 후 새 DB를 엽니다.
90
- */
91
- recoverCorruptDatabase() {
92
- try {
93
- this.db.close();
94
- }
95
- catch {
96
- // close 실패 무시
97
- }
98
- const corruptPath = `${this.dbPath}.corrupt.${Date.now()}`;
99
- try {
100
- renameSync(this.dbPath, corruptPath);
101
- console.error(`[a2a] Corrupt database moved to: ${corruptPath}`);
102
- }
103
- catch (renameErr) {
104
- console.error(`[a2a] Failed to move corrupt database: ${renameErr instanceof Error ? renameErr.message : String(renameErr)}`);
105
- }
106
- console.error('[a2a] Creating a new database. Previous data may be lost.');
107
- this.db = MemoryDatabase.openDatabase(this.dbPath);
108
- this.db.pragma('journal_mode = WAL');
109
- this.db.pragma('foreign_keys = ON');
110
- this.db.pragma('cache_size = -64000');
111
- this.db.pragma('synchronous = NORMAL');
112
- this.db.pragma('temp_store = MEMORY');
113
- this.db.pragma('mmap_size = 268435456');
114
- this.stmts.clear();
115
- }
116
- stmt(key, sql) {
117
- let s = this.stmts.get(key);
118
- if (!s) {
119
- s = this.db.prepare(sql);
120
- this.stmts.set(key, s);
121
- }
122
- return s;
123
- }
124
- initialize() {
125
- this.db.exec(`
126
- CREATE TABLE IF NOT EXISTS memories (
127
- id TEXT PRIMARY KEY,
128
- content TEXT NOT NULL,
129
- category TEXT NOT NULL,
130
- tier TEXT NOT NULL,
131
- embedding BLOB,
132
- project_path TEXT,
133
- session_id TEXT,
134
- created_at TEXT NOT NULL DEFAULT (datetime('now')),
135
- updated_at TEXT NOT NULL DEFAULT (datetime('now')),
136
- access_count INTEGER NOT NULL DEFAULT 0,
137
- last_accessed_at TEXT
138
- );
139
-
140
- CREATE TABLE IF NOT EXISTS memory_tags (
141
- memory_id TEXT NOT NULL,
142
- tag TEXT NOT NULL,
143
- PRIMARY KEY (memory_id, tag),
144
- FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE
145
- );
146
-
147
- CREATE TABLE IF NOT EXISTS sessions (
148
- session_id TEXT PRIMARY KEY,
149
- project_path TEXT NOT NULL,
150
- message_count INTEGER NOT NULL DEFAULT 0,
151
- processed_at TEXT NOT NULL DEFAULT (datetime('now'))
152
- );
153
-
154
- CREATE TABLE IF NOT EXISTS sync_status (
155
- memory_id TEXT PRIMARY KEY,
156
- remote_id TEXT,
157
- synced_at TEXT,
158
- sync_state TEXT NOT NULL DEFAULT 'pending',
159
- FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE
160
- );
161
-
162
- CREATE INDEX IF NOT EXISTS idx_memories_category ON memories(category);
163
- CREATE INDEX IF NOT EXISTS idx_memories_tier ON memories(tier);
164
- CREATE INDEX IF NOT EXISTS idx_memories_project ON memories(project_path);
165
- CREATE INDEX IF NOT EXISTS idx_memories_session ON memories(session_id);
166
- CREATE INDEX IF NOT EXISTS idx_memory_tags_tag ON memory_tags(tag);
167
- CREATE INDEX IF NOT EXISTS idx_sync_state ON sync_status(sync_state);
168
- CREATE INDEX IF NOT EXISTS idx_memories_project_updated ON memories(project_path, updated_at DESC);
169
- CREATE INDEX IF NOT EXISTS idx_memories_category_tier ON memories(category, tier);
170
-
171
- CREATE TABLE IF NOT EXISTS vector_clocks (
172
- memory_id TEXT PRIMARY KEY,
173
- clock_state TEXT NOT NULL,
174
- updated_at TEXT NOT NULL DEFAULT (datetime('now'))
175
- );
176
-
177
- CREATE TABLE IF NOT EXISTS embedding_metadata (
178
- memory_id TEXT PRIMARY KEY,
179
- quantization_level TEXT NOT NULL,
180
- quantization_stats TEXT,
181
- FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE
182
- );
183
- `);
184
- // FTS5 테이블 (별도 exec — 이미 존재하면 무시)
185
- try {
186
- this.db.exec(`
187
- CREATE VIRTUAL TABLE IF NOT EXISTS memory_fts USING fts5(
188
- content,
189
- tokenize='unicode61'
190
- );
191
- `);
192
- }
193
- catch {
194
- // FTS5 테이블이 이미 존재하면 무시
195
- }
196
- // C-4: embedding_hash 컬럼 추가 (기존 DB 호환)
197
- try {
198
- this.db.exec('ALTER TABLE memories ADD COLUMN embedding_hash TEXT');
199
- }
200
- catch {
201
- // 이미 존재하면 무시
202
- }
203
- // E-3: sync_history + tombstones 테이블
204
- this.db.exec(`
205
- CREATE TABLE IF NOT EXISTS sync_history (
206
- id INTEGER PRIMARY KEY AUTOINCREMENT,
207
- operation TEXT NOT NULL,
208
- memory_id TEXT NOT NULL,
209
- timestamp TEXT NOT NULL DEFAULT (datetime('now')),
210
- status TEXT NOT NULL DEFAULT 'success',
211
- details TEXT
212
- );
213
-
214
- CREATE TABLE IF NOT EXISTS tombstones (
215
- memory_id TEXT PRIMARY KEY,
216
- deleted_at TEXT NOT NULL DEFAULT (datetime('now')),
217
- synced INTEGER NOT NULL DEFAULT 0
218
- );
219
-
220
- CREATE INDEX IF NOT EXISTS idx_memories_embedding_hash ON memories(embedding_hash);
221
- CREATE INDEX IF NOT EXISTS idx_sync_history_memory ON sync_history(memory_id);
222
- CREATE INDEX IF NOT EXISTS idx_sync_history_timestamp ON sync_history(timestamp);
223
- CREATE INDEX IF NOT EXISTS idx_tombstones_synced ON tombstones(synced);
224
- `);
225
- // Proficiency 테이블 (Phase 5 PoC)
226
- this.db.exec(`
227
- CREATE TABLE IF NOT EXISTS proficiency_records (
228
- id TEXT PRIMARY KEY,
229
- skill_memory_id TEXT NOT NULL,
230
- skill_name TEXT NOT NULL,
231
- level INTEGER NOT NULL DEFAULT 1,
232
- experience_count INTEGER NOT NULL DEFAULT 0,
233
- success_rate REAL NOT NULL DEFAULT 0.0,
234
- actr_activation REAL NOT NULL DEFAULT 0.0,
235
- last_practiced_at TEXT,
236
- project_path TEXT,
237
- created_at TEXT NOT NULL DEFAULT (datetime('now')),
238
- updated_at TEXT NOT NULL DEFAULT (datetime('now')),
239
- FOREIGN KEY (skill_memory_id) REFERENCES memories(id) ON DELETE CASCADE
240
- );
241
-
242
- CREATE TABLE IF NOT EXISTS experience_events (
243
- id TEXT PRIMARY KEY,
244
- proficiency_id TEXT NOT NULL,
245
- timestamp REAL NOT NULL,
246
- outcome TEXT NOT NULL CHECK(outcome IN ('success','partial','failure')),
247
- difficulty REAL NOT NULL DEFAULT 0.5,
248
- context_tags TEXT,
249
- session_id TEXT,
250
- FOREIGN KEY (proficiency_id) REFERENCES proficiency_records(id) ON DELETE CASCADE
251
- );
252
-
253
- CREATE INDEX IF NOT EXISTS idx_proficiency_skill ON proficiency_records(skill_memory_id);
254
- CREATE INDEX IF NOT EXISTS idx_proficiency_project ON proficiency_records(project_path);
255
- CREATE INDEX IF NOT EXISTS idx_experience_proficiency ON experience_events(proficiency_id);
256
- CREATE INDEX IF NOT EXISTS idx_experience_timestamp ON experience_events(timestamp);
257
- `);
258
- // Emotion buffer 테이블 (감정 수집 파이프라인)
259
- this.db.exec(`
260
- CREATE TABLE IF NOT EXISTS emotion_buffer (
261
- id TEXT PRIMARY KEY,
262
- message TEXT NOT NULL,
263
- created_at TEXT NOT NULL,
264
- synced INTEGER DEFAULT 0
265
- );
266
- CREATE INDEX IF NOT EXISTS idx_emotion_buffer_synced ON emotion_buffer(synced);
267
- `);
268
- // Parent-Child chunk 컬럼 추가 (기존 DB 호환)
269
- try {
270
- this.db.exec('ALTER TABLE memories ADD COLUMN parent_id TEXT');
271
- }
272
- catch { /* 이미 존재하면 무시 */ }
273
- try {
274
- this.db.exec('ALTER TABLE memories ADD COLUMN chunk_index INTEGER');
275
- }
276
- catch { /* 이미 존재하면 무시 */ }
277
- try {
278
- this.db.exec('ALTER TABLE memories ADD COLUMN chunk_total INTEGER');
279
- }
280
- catch { /* 이미 존재하면 무시 */ }
281
- this.db.exec('CREATE INDEX IF NOT EXISTS idx_memories_parent_id ON memories(parent_id)');
282
- // Effectiveness measurement tables (v1.2 — F-018~F-019)
283
- this.db.exec(`
284
- CREATE TABLE IF NOT EXISTS injection_logs (
285
- id TEXT PRIMARY KEY,
286
- session_id TEXT NOT NULL,
287
- hook_type TEXT NOT NULL,
288
- injected_memory_ids TEXT,
289
- injected_keywords TEXT,
290
- hit_count INTEGER NOT NULL DEFAULT 0,
291
- total_injected INTEGER NOT NULL DEFAULT 0,
292
- effectiveness REAL,
293
- ab_group TEXT,
294
- created_at TEXT NOT NULL DEFAULT (datetime('now'))
295
- );
296
-
297
- CREATE TABLE IF NOT EXISTS injection_hits (
298
- id TEXT PRIMARY KEY,
299
- injection_id TEXT NOT NULL,
300
- matched_keywords TEXT,
301
- tool_name TEXT NOT NULL,
302
- created_at TEXT NOT NULL DEFAULT (datetime('now')),
303
- FOREIGN KEY (injection_id) REFERENCES injection_logs(id) ON DELETE CASCADE
304
- );
305
-
306
- CREATE TABLE IF NOT EXISTS extraction_evaluations (
307
- id TEXT PRIMARY KEY,
308
- memory_id TEXT NOT NULL,
309
- session_id TEXT NOT NULL,
310
- significance_score REAL,
311
- dedup_action TEXT,
312
- tier TEXT,
313
- reused_count INTEGER NOT NULL DEFAULT 0,
314
- survived_30d INTEGER NOT NULL DEFAULT 0,
315
- promoted INTEGER NOT NULL DEFAULT 0,
316
- created_at TEXT NOT NULL DEFAULT (datetime('now'))
317
- );
318
-
319
- CREATE INDEX IF NOT EXISTS idx_injection_logs_session ON injection_logs(session_id);
320
- CREATE INDEX IF NOT EXISTS idx_injection_hits_injection ON injection_hits(injection_id);
321
- CREATE INDEX IF NOT EXISTS idx_extraction_evals_memory ON extraction_evaluations(memory_id);
322
- CREATE INDEX IF NOT EXISTS idx_extraction_evals_session ON extraction_evaluations(session_id);
323
- `);
324
- // Runtime migration: add ab_group column to injection_logs if missing (existing DBs)
325
- try {
326
- const cols = this.db.prepare("PRAGMA table_info(injection_logs)").all();
327
- const hasAbGroup = cols.some(c => c.name === 'ab_group');
328
- if (!hasAbGroup) {
329
- this.db.exec('ALTER TABLE injection_logs ADD COLUMN ab_group TEXT');
330
- }
331
- }
332
- catch {
333
- // Ignore migration errors — column may already exist or table not yet created
334
- }
335
- }
336
- // ============================
337
- // CRUD
338
- // ============================
339
- createMemory(input) {
340
- const id = randomUUID();
341
- const now = new Date().toISOString();
342
- const tags = input.tags ?? [];
343
- const insertMemory = this.stmt('insert_memory', `
344
- INSERT INTO memories (id, content, category, tier, project_path, session_id, created_at, updated_at, parent_id, chunk_index, chunk_total)
345
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
346
- `);
347
- const insertTag = this.stmt('insert_tag', 'INSERT INTO memory_tags (memory_id, tag) VALUES (?, ?)');
348
- const insertFts = this.stmt('insert_fts', 'INSERT INTO memory_fts (rowid, content) VALUES (?, ?)');
349
- const runTransaction = this.db.transaction(() => {
350
- insertMemory.run(id, input.content, input.category, input.tier, input.projectPath ?? null, input.sessionId ?? null, now, now, input.parentId ?? null, input.chunkIndex ?? null, input.chunkTotal ?? null);
351
- for (const tag of tags) {
352
- insertTag.run(id, tag);
353
- }
354
- const rowId = this.getRowId(id);
355
- insertFts.run(rowId, input.content);
356
- });
357
- runTransaction();
358
- return {
359
- id,
360
- content: input.content,
361
- category: input.category,
362
- tier: input.tier,
363
- tags,
364
- projectPath: input.projectPath,
365
- sessionId: input.sessionId,
366
- createdAt: now,
367
- updatedAt: now,
368
- accessCount: 0,
369
- parentId: input.parentId,
370
- chunkIndex: input.chunkIndex,
371
- chunkTotal: input.chunkTotal,
372
- };
373
- }
374
- getMemory(id) {
375
- const row = this.stmt('get_memory', 'SELECT * FROM memories WHERE id = ?').get(id);
376
- if (!row)
377
- return null;
378
- return this.rowToMemory(row);
379
- }
380
- /**
381
- * 사용자 접근을 기록합니다 (access_count 증가).
382
- * 검색 결과 반환, 세션 주입 등 실제 "사용자 노출" 시점에만 호출하세요.
383
- */
384
- recordAccess(id) {
385
- this.stmt('inc_access', "UPDATE memories SET access_count = access_count + 1, last_accessed_at = datetime('now') WHERE id = ?").run(id);
386
- }
387
- updateMemory(id, updates) {
388
- const existing = this.stmt('get_memory', 'SELECT * FROM memories WHERE id = ?').get(id);
389
- if (!existing)
390
- return null;
391
- const fields = ["updated_at = datetime('now')"];
392
- const values = [];
393
- if (updates.content !== undefined) {
394
- fields.push('content = ?');
395
- values.push(updates.content);
396
- }
397
- if (updates.category !== undefined) {
398
- fields.push('category = ?');
399
- values.push(updates.category);
400
- }
401
- if (updates.tier !== undefined) {
402
- fields.push('tier = ?');
403
- values.push(updates.tier);
404
- }
405
- if (updates.projectPath !== undefined) {
406
- fields.push('project_path = ?');
407
- values.push(updates.projectPath);
408
- }
409
- if (updates.sessionId !== undefined) {
410
- fields.push('session_id = ?');
411
- values.push(updates.sessionId);
412
- }
413
- values.push(id);
414
- this.db.prepare(`UPDATE memories SET ${fields.join(', ')} WHERE id = ?`).run(...values);
415
- if (updates.tags !== undefined) {
416
- this.stmt('delete_tags', 'DELETE FROM memory_tags WHERE memory_id = ?').run(id);
417
- const tagStmt = this.stmt('insert_tag', 'INSERT INTO memory_tags (memory_id, tag) VALUES (?, ?)');
418
- for (const tag of updates.tags) {
419
- tagStmt.run(id, tag);
420
- }
421
- }
422
- if (updates.content !== undefined) {
423
- const rowId = this.getRowId(id);
424
- if (rowId !== null) {
425
- this.stmt('update_fts', 'UPDATE memory_fts SET content = ? WHERE rowid = ?').run(updates.content, rowId);
426
- }
427
- }
428
- const updatedRow = this.stmt('get_memory', 'SELECT * FROM memories WHERE id = ?').get(id);
429
- if (!updatedRow)
430
- return null;
431
- return this.rowToMemory(updatedRow);
432
- }
433
- deleteMemory(id) {
434
- // tombstone 생성 (sync-safe deletion)
435
- this.addTombstone(id);
436
- const rowId = this.getRowId(id);
437
- if (rowId !== null) {
438
- this.stmt('delete_fts', 'DELETE FROM memory_fts WHERE rowid = ?').run(rowId);
439
- }
440
- const result = this.stmt('delete_memory', 'DELETE FROM memories WHERE id = ?').run(id);
441
- return result.changes > 0;
442
- }
443
- listMemories(options) {
444
- const conditions = [];
445
- const values = [];
446
- if (options?.category) {
447
- conditions.push('category = ?');
448
- values.push(options.category);
449
- }
450
- if (options?.tier) {
451
- conditions.push('tier = ?');
452
- values.push(options.tier);
453
- }
454
- if (options?.projectPath) {
455
- conditions.push('project_path = ?');
456
- values.push(options.projectPath);
457
- }
458
- // excludeParents: Parent 메모리(parent_id IS NULL AND chunk_total IS NOT NULL) 제외
459
- // Child(parent_id IS NOT NULL) + 독립 메모리(parent_id IS NULL AND chunk_total IS NULL)만 반환
460
- if (options?.excludeParents) {
461
- conditions.push('(parent_id IS NOT NULL OR (parent_id IS NULL AND chunk_total IS NULL))');
462
- }
463
- const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
464
- const limit = options?.limit ?? 50;
465
- const offset = options?.offset ?? 0;
466
- const rows = this.db.prepare(`SELECT * FROM memories ${where} ORDER BY updated_at DESC LIMIT ? OFFSET ?`).all(...values, limit, offset);
467
- return this.rowsToMemories(rows);
468
- }
469
- // ============================
470
- // Search
471
- // ============================
472
- searchByFTS(query, limit = 10) {
473
- const rows = this.db.prepare(`
474
- SELECT m.*, fts.rank
475
- FROM memory_fts fts
476
- JOIN memories m ON m.rowid = fts.rowid
477
- WHERE memory_fts MATCH ?
478
- AND (m.parent_id IS NOT NULL OR (m.parent_id IS NULL AND m.chunk_total IS NULL))
479
- ORDER BY fts.rank
480
- LIMIT ?
481
- `).all(query, limit);
482
- const memories = this.rowsToMemories(rows);
483
- return rows.map((row, i) => ({
484
- memory: memories[i],
485
- score: Math.min(1, Math.max(0, 1 + row.rank / 10)),
486
- matchType: 'fts',
487
- }));
488
- }
489
- searchByVector(embedding, limit = 10, minScore = 0.5, projectPath) {
490
- // C-4: 후보 풀 (1000) + 코사인 유사도 계산
491
- // Parent 메모리(parent_id IS NULL AND chunk_total IS NOT NULL) 제외 — Child + 독립 메모리만 반환
492
- const rows = projectPath
493
- ? this.stmt('vector_search_project', 'SELECT * FROM memories WHERE embedding IS NOT NULL AND project_path = ? AND (parent_id IS NOT NULL OR (parent_id IS NULL AND chunk_total IS NULL)) LIMIT 1000').all(projectPath)
494
- : this.stmt('vector_search_all', 'SELECT * FROM memories WHERE embedding IS NOT NULL AND (parent_id IS NOT NULL OR (parent_id IS NULL AND chunk_total IS NULL)) LIMIT 1000').all();
495
- const scored = rows
496
- .map((row) => {
497
- const stored = bufferToFloat32Array(row.embedding);
498
- const similarity = computeCosineSimilarity(embedding, Array.from(stored));
499
- return { row, similarity };
500
- })
501
- .filter((item) => item.similarity >= minScore)
502
- .sort((a, b) => b.similarity - a.similarity)
503
- .slice(0, limit);
504
- const scoredMemories = this.rowsToMemories(scored.map(s => s.row));
505
- return scored.map((item, i) => ({
506
- memory: scoredMemories[i],
507
- score: item.similarity,
508
- matchType: 'vector',
509
- }));
510
- }
511
- search(options) {
512
- const limit = options.limit ?? 10;
513
- const results = [];
514
- // FTS 검색
515
- try {
516
- const ftsResults = this.searchByFTS(options.query, limit);
517
- results.push(...ftsResults);
518
- }
519
- catch {
520
- // FTS 쿼리 실패 시 무시
521
- }
522
- // 카테고리/티어/프로젝트 필터 적용
523
- const filtered = results.filter((r) => {
524
- if (options.category && r.memory.category !== options.category)
525
- return false;
526
- if (options.tier && r.memory.tier !== options.tier)
527
- return false;
528
- if (options.projectPath && r.memory.projectPath !== options.projectPath)
529
- return false;
530
- if (options.minScore && r.score < options.minScore)
531
- return false;
532
- return true;
533
- });
534
- // 중복 제거 (id 기준)
535
- const seen = new Set();
536
- return filtered.filter((r) => {
537
- if (seen.has(r.memory.id))
538
- return false;
539
- seen.add(r.memory.id);
540
- return true;
541
- }).slice(0, limit);
542
- }
543
- // ============================
544
- // Session
545
- // ============================
546
- saveSession(sessionId, projectPath, messageCount) {
547
- this.stmt('save_session', `
548
- INSERT OR REPLACE INTO sessions (session_id, project_path, message_count, processed_at)
549
- VALUES (?, ?, ?, datetime('now'))
550
- `).run(sessionId, projectPath, messageCount);
551
- }
552
- getSession(sessionId) {
553
- const row = this.stmt('get_session', 'SELECT * FROM sessions WHERE session_id = ?').get(sessionId);
554
- if (!row)
555
- return null;
556
- return {
557
- sessionId: row.session_id,
558
- projectPath: row.project_path,
559
- messageCount: row.message_count,
560
- processedAt: row.processed_at,
561
- };
562
- }
563
- getSessionCount(projectPath) {
564
- if (projectPath) {
565
- const row = this.stmt('count_sessions_project', 'SELECT COUNT(*) as cnt FROM sessions WHERE project_path = ?').get(projectPath);
566
- return row?.cnt ?? 0;
567
- }
568
- const row = this.stmt('count_sessions_all', 'SELECT COUNT(*) as cnt FROM sessions').get();
569
- return row?.cnt ?? 0;
570
- }
571
- // ============================
572
- // Utility
573
- // ============================
574
- getStats() {
575
- const totalMemories = this.stmt('count_memories', 'SELECT COUNT(*) as count FROM memories').get().count;
576
- const totalSessions = this.stmt('count_sessions', 'SELECT COUNT(*) as count FROM sessions').get().count;
577
- let dbSizeBytes = 0;
578
- try {
579
- dbSizeBytes = statSync(this.dbPath).size;
580
- }
581
- catch {
582
- // ignore
583
- }
584
- const categoryRows = this.stmt('category_counts', 'SELECT category, COUNT(*) as count FROM memories GROUP BY category').all();
585
- const categoryCounts = {};
586
- for (const row of categoryRows) {
587
- categoryCounts[row.category] = row.count;
588
- }
589
- return { totalMemories, totalSessions, dbSizeBytes, categoryCounts };
590
- }
591
- integrityCheck() {
592
- try {
593
- const result = this.db.pragma('quick_check');
594
- return result.length > 0 && result[0].quick_check === 'ok';
595
- }
596
- catch {
597
- return false;
598
- }
599
- }
600
- vacuum() {
601
- this.db.exec('VACUUM');
602
- }
603
- close() {
604
- this.stmts.clear();
605
- this.db.close();
606
- }
607
- // ============================
608
- // Sync
609
- // ============================
610
- setSyncStatus(memoryId, remoteId, state) {
611
- const now = new Date().toISOString();
612
- this.stmt('set_sync_status', `
613
- INSERT OR REPLACE INTO sync_status (memory_id, remote_id, synced_at, sync_state)
614
- VALUES (?, ?, ?, ?)
615
- `).run(memoryId, remoteId, now, state);
616
- }
617
- getSyncStatus(memoryId) {
618
- const row = this.stmt('get_sync_status', 'SELECT remote_id, synced_at, sync_state FROM sync_status WHERE memory_id = ?').get(memoryId);
619
- if (!row)
620
- return null;
621
- return {
622
- remoteId: row.remote_id,
623
- syncedAt: row.synced_at,
624
- syncState: row.sync_state,
625
- };
626
- }
627
- getPendingSyncMemories(limit = 10000) {
628
- const rows = this.db.prepare(`
629
- SELECT m.id, m.content, m.category, m.tier, NULL as embedding,
630
- m.project_path, m.session_id, m.created_at, m.updated_at,
631
- m.access_count, m.last_accessed_at, NULL as embedding_hash,
632
- m.parent_id, m.chunk_index, m.chunk_total
633
- FROM memories m
634
- LEFT JOIN sync_status s ON m.id = s.memory_id
635
- WHERE s.sync_state = 'pending' OR s.sync_state IS NULL
636
- ORDER BY m.created_at ASC
637
- LIMIT ?
638
- `).all(limit);
639
- return this.rowsToMemories(rows);
640
- }
641
- findMemoryByRemoteId(remoteId) {
642
- const row = this.stmt('find_by_remote', `
643
- SELECT m.*
644
- FROM memories m
645
- JOIN sync_status s ON m.id = s.memory_id
646
- WHERE s.remote_id = ?
647
- `).get(remoteId);
648
- if (!row)
649
- return null;
650
- return this.rowToMemory(row);
651
- }
652
- getSyncedMemoryCount() {
653
- const row = this.stmt('synced_count', "SELECT COUNT(*) as count FROM sync_status WHERE sync_state = 'synced'").get();
654
- return row.count;
655
- }
656
- getLastSyncedAt() {
657
- const row = this.stmt('last_synced', "SELECT MAX(synced_at) as last_synced FROM sync_status WHERE sync_state = 'synced'").get();
658
- return row.last_synced;
659
- }
660
- // ============================
661
- // Sync History (E-3)
662
- // ============================
663
- addSyncHistory(operation, memoryId, status = 'success', details) {
664
- this.stmt('add_sync_history', `
665
- INSERT INTO sync_history (operation, memory_id, status, details)
666
- VALUES (?, ?, ?, ?)
667
- `).run(operation, memoryId, status, details ?? null);
668
- }
669
- getSyncHistory(options) {
670
- const limit = options?.limit ?? 100;
671
- if (options?.memoryId) {
672
- const rows = this.stmt('sync_history_by_memory', 'SELECT * FROM sync_history WHERE memory_id = ? ORDER BY id DESC LIMIT ?').all(options.memoryId, limit);
673
- return rows.map(mapSyncHistoryRow);
674
- }
675
- const rows = this.stmt('sync_history_all', 'SELECT * FROM sync_history ORDER BY id DESC LIMIT ?').all(limit);
676
- return rows.map(mapSyncHistoryRow);
677
- }
678
- // ============================
679
- // Tombstones (E-3)
680
- // ============================
681
- addTombstone(memoryId) {
682
- this.stmt('add_tombstone', `
683
- INSERT OR REPLACE INTO tombstones (memory_id, deleted_at, synced)
684
- VALUES (?, datetime('now'), 0)
685
- `).run(memoryId);
686
- }
687
- getTombstones(limit = 1000) {
688
- const rows = this.stmt('get_tombstones', 'SELECT * FROM tombstones ORDER BY deleted_at DESC LIMIT ?').all(limit);
689
- return rows.map((r) => ({
690
- memoryId: r.memory_id,
691
- deletedAt: r.deleted_at,
692
- synced: r.synced === 1,
693
- }));
694
- }
695
- getUnsyncedTombstones() {
696
- const rows = this.stmt('unsynced_tombstones', 'SELECT memory_id, deleted_at FROM tombstones WHERE synced = 0').all();
697
- return rows.map((r) => ({
698
- memoryId: r.memory_id,
699
- deletedAt: r.deleted_at,
700
- }));
701
- }
702
- markTombstoneSynced(memoryId) {
703
- this.stmt('mark_tombstone_synced', 'UPDATE tombstones SET synced = 1 WHERE memory_id = ?').run(memoryId);
704
- }
705
- saveEmbeddingHash(memoryId, hash) {
706
- this.stmt('save_emb_hash', 'UPDATE memories SET embedding_hash = ? WHERE id = ?').run(hash, memoryId);
707
- }
708
- // ============================
709
- // Vector Clocks
710
- // ============================
711
- saveVectorClock(memoryId, clockState) {
712
- this.stmt('save_vclock', `
713
- INSERT OR REPLACE INTO vector_clocks (memory_id, clock_state, updated_at)
714
- VALUES (?, ?, datetime('now'))
715
- `).run(memoryId, JSON.stringify(clockState));
716
- }
717
- getVectorClock(memoryId) {
718
- const row = this.stmt('get_vclock', 'SELECT clock_state FROM vector_clocks WHERE memory_id = ?').get(memoryId);
719
- if (!row)
720
- return null;
721
- return JSON.parse(row.clock_state);
722
- }
723
- getAllVectorClocks() {
724
- const rows = this.stmt('all_vclocks', 'SELECT memory_id, clock_state FROM vector_clocks').all();
725
- return rows.map((r) => ({
726
- memoryId: r.memory_id,
727
- clockState: JSON.parse(r.clock_state),
728
- }));
729
- }
730
- saveEmbedding(memoryId, embedding) {
731
- let buffer;
732
- let stats = null;
733
- // Quantization level에 따라 압축
734
- if (this.quantizationLevel === 'float32') {
735
- buffer = quantizeToFloat32(embedding);
736
- }
737
- else if (this.quantizationLevel === 'int8') {
738
- const result = quantizeToInt8(embedding);
739
- buffer = result.buffer;
740
- stats = result.stats;
741
- }
742
- else {
743
- // 'none': 기존 방식 (float32로 저장)
744
- buffer = float32ArrayToBuffer(new Float32Array(embedding));
745
- }
746
- // 임베딩 저장
747
- this.stmt('save_embedding', 'UPDATE memories SET embedding = ? WHERE id = ?').run(buffer, memoryId);
748
- // 메타데이터 저장 (quantization level과 stats)
749
- this.stmt('save_embedding_meta', `
750
- INSERT OR REPLACE INTO embedding_metadata (memory_id, quantization_level, quantization_stats)
751
- VALUES (?, ?, ?)
752
- `).run(memoryId, this.quantizationLevel, stats ? JSON.stringify(stats) : null);
753
- }
754
- getEmbedding(memoryId) {
755
- const row = this.stmt('get_memory', 'SELECT embedding FROM memories WHERE id = ?').get(memoryId);
756
- if (!row?.embedding)
757
- return null;
758
- // 메타데이터 조회
759
- const metaRow = this.stmt('get_embedding_meta', 'SELECT quantization_level, quantization_stats FROM embedding_metadata WHERE memory_id = ?').get(memoryId);
760
- const level = (metaRow?.quantization_level ?? 'none');
761
- // Level에 따라 역양자화
762
- if (level === 'float32') {
763
- return dequantizeFromFloat32(row.embedding);
764
- }
765
- else if (level === 'int8') {
766
- if (!metaRow?.quantization_stats) {
767
- throw new Error(`Int8 embedding missing stats for memory ${memoryId}`);
768
- }
769
- const stats = JSON.parse(metaRow.quantization_stats);
770
- return dequantizeFromInt8(row.embedding, stats);
771
- }
772
- else {
773
- // 'none' 또는 메타데이터 없음 (레거시 데이터): float32Array로 읽기
774
- return Array.from(bufferToFloat32Array(row.embedding));
775
- }
776
- }
777
- // ============================
778
- // Lifecycle
779
- // ============================
780
- getMemoriesOlderThan(days) {
781
- // TTL 기준: last_accessed_at (없으면 updated_at)
782
- // 활성 면제: 해당 TTL 기간 내 access_count >= 5이면 제외
783
- // skill 카테고리는 제외
784
- const rows = this.db.prepare(`
785
- SELECT * FROM memories
786
- WHERE COALESCE(last_accessed_at, updated_at) < datetime('now', ?)
787
- AND COALESCE(access_count, 0) < 5
788
- AND category != 'skill'
789
- ORDER BY COALESCE(last_accessed_at, updated_at) ASC
790
- `).all(`-${days} days`);
791
- return this.rowsToMemories(rows);
792
- }
793
- getMemoriesWithoutEmbedding(limit = 100) {
794
- const rows = this.db.prepare(`
795
- SELECT * FROM memories
796
- WHERE embedding IS NULL
797
- ORDER BY created_at DESC
798
- LIMIT ?
799
- `).all(limit);
800
- return this.rowsToMemories(rows);
801
- }
802
- deleteMemories(ids) {
803
- if (ids.length === 0)
804
- return 0;
805
- const transaction = this.db.transaction(() => {
806
- let deleted = 0;
807
- for (const id of ids) {
808
- // tombstone 생성 (sync-safe deletion)
809
- this.addTombstone(id);
810
- const rowId = this.getRowId(id);
811
- if (rowId !== null) {
812
- this.db.prepare('DELETE FROM memory_fts WHERE rowid = ?').run(rowId);
813
- }
814
- const result = this.db.prepare('DELETE FROM memories WHERE id = ?').run(id);
815
- deleted += result.changes;
816
- }
817
- return deleted;
818
- });
819
- return transaction();
820
- }
821
- getMemoryCount(projectPath, excludeChildren) {
822
- const childFilter = excludeChildren ? ' AND parent_id IS NULL' : '';
823
- if (projectPath) {
824
- return this.db.prepare(`SELECT COUNT(*) as count FROM memories WHERE project_path = ?${childFilter}`).get(projectPath).count;
825
- }
826
- if (excludeChildren) {
827
- return this.db.prepare('SELECT COUNT(*) as count FROM memories WHERE parent_id IS NULL').get().count;
828
- }
829
- return this.stmt('count_memories', 'SELECT COUNT(*) as count FROM memories').get().count;
830
- }
831
- // ============================
832
- // Migration
833
- // ============================
834
- /**
835
- * 레거시 category/tier 값을 새 스키마로 마이그레이션
836
- * preference → convention, procedural → semantic
837
- */
838
- migrateOldValues() {
839
- const catResult = this.db.prepare("UPDATE memories SET category = 'convention' WHERE category = 'preference'").run();
840
- const tierResult = this.db.prepare("UPDATE memories SET tier = 'semantic' WHERE tier = 'procedural'").run();
841
- return {
842
- categoriesUpdated: catResult.changes,
843
- tiersUpdated: tierResult.changes,
844
- };
845
- }
846
- // ============================
847
- // Parent-Child Chunks
848
- // ============================
849
- /**
850
- * Parent + Children 일괄 생성 (트랜잭션)
851
- */
852
- createMemoryWithChunks(parent, children) {
853
- if (children.length === 0) {
854
- return this.createMemory(parent).id;
855
- }
856
- const parentId = randomUUID();
857
- const now = new Date().toISOString();
858
- const chunkTotal = children.length;
859
- const insertMemory = this.stmt('insert_memory', `
860
- INSERT INTO memories (id, content, category, tier, project_path, session_id, created_at, updated_at, parent_id, chunk_index, chunk_total)
861
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
862
- `);
863
- const insertTag = this.stmt('insert_tag', 'INSERT INTO memory_tags (memory_id, tag) VALUES (?, ?)');
864
- const insertFts = this.stmt('insert_fts', 'INSERT INTO memory_fts (rowid, content) VALUES (?, ?)');
865
- const runTransaction = this.db.transaction(() => {
866
- // Parent 생성 (parent_id=NULL, chunk_total 설정)
867
- const parentTags = parent.tags ?? [];
868
- insertMemory.run(parentId, parent.content, parent.category, parent.tier, parent.projectPath ?? null, parent.sessionId ?? null, now, now, null, null, chunkTotal);
869
- for (const tag of parentTags) {
870
- insertTag.run(parentId, tag);
871
- }
872
- const parentRowId = this.getRowId(parentId);
873
- insertFts.run(parentRowId, parent.content);
874
- // Children 생성
875
- for (let i = 0; i < children.length; i++) {
876
- const childId = randomUUID();
877
- const child = children[i];
878
- const childTags = child.tags ?? [];
879
- insertMemory.run(childId, child.content, child.category, child.tier, child.projectPath ?? null, child.sessionId ?? null, now, now, parentId, i, chunkTotal);
880
- for (const tag of childTags) {
881
- insertTag.run(childId, tag);
882
- }
883
- const childRowId = this.getRowId(childId);
884
- insertFts.run(childRowId, child.content);
885
- }
886
- });
887
- runTransaction();
888
- return parentId;
889
- }
890
- /**
891
- * Parent의 모든 Child chunks 조회 (chunk_index 순)
892
- */
893
- getChildChunks(parentId) {
894
- const rows = this.db.prepare('SELECT * FROM memories WHERE parent_id = ? ORDER BY chunk_index ASC').all(parentId);
895
- return this.rowsToMemories(rows);
896
- }
897
- /**
898
- * Child의 Parent 조회
899
- */
900
- getParentMemory(childId) {
901
- const child = this.stmt('get_memory', 'SELECT * FROM memories WHERE id = ?').get(childId);
902
- if (!child?.parent_id)
903
- return null;
904
- return this.getMemory(child.parent_id);
905
- }
906
- /**
907
- * Parent-Child를 원자적으로 교체 (delete old + create new in single transaction)
908
- */
909
- replaceMemoryWithChunks(oldParentId, newParent, newChildren) {
910
- const transaction = this.db.transaction(() => {
911
- // 1. 기존 Parent+Children 삭제
912
- const oldChildren = this.db.prepare('SELECT id FROM memories WHERE parent_id = ?').all(oldParentId);
913
- for (const child of oldChildren) {
914
- this.addTombstone(child.id);
915
- const rowId = this.getRowId(child.id);
916
- if (rowId !== null) {
917
- this.stmt('delete_fts', 'DELETE FROM memory_fts WHERE rowid = ?').run(rowId);
918
- }
919
- }
920
- this.addTombstone(oldParentId);
921
- const oldParentRowId = this.getRowId(oldParentId);
922
- if (oldParentRowId !== null) {
923
- this.stmt('delete_fts', 'DELETE FROM memory_fts WHERE rowid = ?').run(oldParentRowId);
924
- }
925
- this.db.prepare('DELETE FROM memories WHERE parent_id = ?').run(oldParentId);
926
- this.stmt('delete_memory', 'DELETE FROM memories WHERE id = ?').run(oldParentId);
927
- // 2. 새 Parent+Children 생성
928
- const parentId = randomUUID();
929
- const now = new Date().toISOString();
930
- const chunkTotal = newChildren.length === 0 ? undefined : newChildren.length;
931
- const insertMemory = this.stmt('insert_memory', `
932
- INSERT INTO memories (id, content, category, tier, project_path, session_id, created_at, updated_at, parent_id, chunk_index, chunk_total)
933
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
934
- `);
935
- const insertTag = this.stmt('insert_tag', 'INSERT INTO memory_tags (memory_id, tag) VALUES (?, ?)');
936
- const insertFts = this.stmt('insert_fts', 'INSERT INTO memory_fts (rowid, content) VALUES (?, ?)');
937
- // Parent
938
- const parentTags = newParent.tags ?? [];
939
- insertMemory.run(parentId, newParent.content, newParent.category, newParent.tier, newParent.projectPath ?? null, newParent.sessionId ?? null, now, now, null, null, chunkTotal ?? null);
940
- for (const tag of parentTags) {
941
- insertTag.run(parentId, tag);
942
- }
943
- const parentRowId = this.getRowId(parentId);
944
- insertFts.run(parentRowId, newParent.content);
945
- // Children
946
- for (let i = 0; i < newChildren.length; i++) {
947
- const childId = randomUUID();
948
- const child = newChildren[i];
949
- const childTags = child.tags ?? [];
950
- insertMemory.run(childId, child.content, child.category, child.tier, child.projectPath ?? null, child.sessionId ?? null, now, now, parentId, i, chunkTotal ?? null);
951
- for (const tag of childTags) {
952
- insertTag.run(childId, tag);
953
- }
954
- const childRowId = this.getRowId(childId);
955
- insertFts.run(childRowId, child.content);
956
- }
957
- return parentId;
958
- });
959
- return transaction();
960
- }
961
- /**
962
- * Parent와 모든 Children 일괄 삭제
963
- */
964
- deleteWithChildren(parentId) {
965
- const transaction = this.db.transaction(() => {
966
- // Children의 FTS, tombstone 처리
967
- const children = this.db.prepare('SELECT id FROM memories WHERE parent_id = ?').all(parentId);
968
- for (const child of children) {
969
- this.addTombstone(child.id);
970
- const rowId = this.getRowId(child.id);
971
- if (rowId !== null) {
972
- this.stmt('delete_fts', 'DELETE FROM memory_fts WHERE rowid = ?').run(rowId);
973
- }
974
- }
975
- // Parent 자체도 처리
976
- this.addTombstone(parentId);
977
- const parentRowId = this.getRowId(parentId);
978
- if (parentRowId !== null) {
979
- this.stmt('delete_fts', 'DELETE FROM memory_fts WHERE rowid = ?').run(parentRowId);
980
- }
981
- // Children 수동 삭제 (FK CASCADE DDL 없음)
982
- const childResult = this.db.prepare('DELETE FROM memories WHERE parent_id = ?').run(parentId);
983
- const parentResult = this.stmt('delete_memory', 'DELETE FROM memories WHERE id = ?').run(parentId);
984
- return childResult.changes + parentResult.changes;
985
- });
986
- return transaction();
987
- }
988
- /**
989
- * 특정 태그를 가진 메모리 전체 조회 (tag 인덱스 JOIN 기반)
990
- */
991
- findMemoriesByTag(tag) {
992
- const rows = this.db.prepare(`
993
- SELECT m.* FROM memories m
994
- JOIN memory_tags t ON m.id = t.memory_id
995
- WHERE t.tag = ?
996
- ORDER BY m.updated_at DESC
997
- `).all(tag);
998
- return this.rowsToMemories(rows);
999
- }
1000
- // ============================
1001
- // Private helpers
1002
- // ============================
1003
- getRowId(id) {
1004
- const row = this.stmt('get_rowid', 'SELECT rowid FROM memories WHERE id = ?').get(id);
1005
- return row?.rowid ?? null;
1006
- }
1007
- rowToMemory(row) {
1008
- const tags = this.stmt('get_tags', 'SELECT tag FROM memory_tags WHERE memory_id = ?').all(row.id);
1009
- // Embedding 복원 (quantization 고려)
1010
- let embedding = undefined;
1011
- if (row.embedding) {
1012
- try {
1013
- embedding = this.getEmbedding(row.id) ?? undefined;
1014
- }
1015
- catch {
1016
- // 메타데이터 없는 레거시 데이터는 float32Array로 읽기
1017
- embedding = Array.from(bufferToFloat32Array(row.embedding));
1018
- }
1019
- }
1020
- const VALID_CATEGORIES = [
1021
- 'error_solution', 'code_pattern', 'decision', 'context',
1022
- 'project_knowledge', 'convention', 'learning', 'skill',
1023
- ];
1024
- const VALID_TIERS = ['working', 'episodic', 'semantic'];
1025
- const category = VALID_CATEGORIES.includes(row.category)
1026
- ? row.category
1027
- : 'context';
1028
- const tier = VALID_TIERS.includes(row.tier)
1029
- ? row.tier
1030
- : 'semantic';
1031
- return {
1032
- id: row.id,
1033
- content: row.content,
1034
- category,
1035
- tier,
1036
- tags: tags.map((t) => t.tag),
1037
- embedding,
1038
- projectPath: row.project_path ?? undefined,
1039
- sessionId: row.session_id ?? undefined,
1040
- createdAt: row.created_at,
1041
- updatedAt: row.updated_at,
1042
- accessCount: row.access_count,
1043
- lastAccessedAt: row.last_accessed_at ?? undefined,
1044
- parentId: row.parent_id ?? undefined,
1045
- chunkIndex: row.chunk_index ?? undefined,
1046
- chunkTotal: row.chunk_total ?? undefined,
1047
- };
1048
- }
1049
- rowsToMemories(rows) {
1050
- if (rows.length === 0)
1051
- return [];
1052
- const ids = rows.map(r => r.id);
1053
- // SQLite bind variable limit (999) 대응: 청크 단위 조회
1054
- const CHUNK_SIZE = 900; // 안전 마진
1055
- const tagMap = new Map();
1056
- const metaMap = new Map();
1057
- for (let i = 0; i < ids.length; i += CHUNK_SIZE) {
1058
- const chunk = ids.slice(i, i + CHUNK_SIZE);
1059
- const placeholders = chunk.map(() => '?').join(',');
1060
- const tagRows = this.db.prepare(`SELECT memory_id, tag FROM memory_tags WHERE memory_id IN (${placeholders})`).all(...chunk);
1061
- for (const tr of tagRows) {
1062
- const arr = tagMap.get(tr.memory_id) ?? [];
1063
- arr.push(tr.tag);
1064
- tagMap.set(tr.memory_id, arr);
1065
- }
1066
- const metaRows = this.db.prepare(`SELECT memory_id, quantization_level, quantization_stats FROM embedding_metadata WHERE memory_id IN (${placeholders})`).all(...chunk);
1067
- for (const mr of metaRows) {
1068
- metaMap.set(mr.memory_id, {
1069
- level: mr.quantization_level,
1070
- stats: mr.quantization_stats ? JSON.parse(mr.quantization_stats) : null,
1071
- });
1072
- }
1073
- }
1074
- return rows.map(row => {
1075
- let embedding = undefined;
1076
- if (row.embedding) {
1077
- const meta = metaMap.get(row.id);
1078
- const level = meta?.level ?? 'none';
1079
- try {
1080
- if (level === 'float32') {
1081
- embedding = dequantizeFromFloat32(row.embedding);
1082
- }
1083
- else if (level === 'int8') {
1084
- if (!meta?.stats) {
1085
- throw new Error('Int8 stats missing');
1086
- }
1087
- embedding = dequantizeFromInt8(row.embedding, meta.stats);
1088
- }
1089
- else {
1090
- // 'none' 또는 메타데이터 없음
1091
- embedding = Array.from(bufferToFloat32Array(row.embedding));
1092
- }
1093
- }
1094
- catch {
1095
- // 에러 시 레거시 방식으로 폴백
1096
- embedding = Array.from(bufferToFloat32Array(row.embedding));
1097
- }
1098
- }
1099
- return {
1100
- id: row.id,
1101
- content: row.content,
1102
- category: row.category,
1103
- tier: row.tier,
1104
- tags: tagMap.get(row.id) ?? [],
1105
- embedding,
1106
- projectPath: row.project_path ?? undefined,
1107
- sessionId: row.session_id ?? undefined,
1108
- createdAt: row.created_at,
1109
- updatedAt: row.updated_at,
1110
- accessCount: row.access_count,
1111
- lastAccessedAt: row.last_accessed_at ?? undefined,
1112
- parentId: row.parent_id ?? undefined,
1113
- chunkIndex: row.chunk_index ?? undefined,
1114
- chunkTotal: row.chunk_total ?? undefined,
1115
- };
1116
- });
1117
- }
1118
- /**
1119
- * PRAGMA integrity_check 실행
1120
- */
1121
- getIntegrityStatus() {
1122
- const result = this.db.prepare('PRAGMA integrity_check').get();
1123
- return result.integrity_check === 'ok';
1124
- }
1125
- /**
1126
- * pending sync 메모리 수 조회
1127
- */
1128
- getPendingSyncCount() {
1129
- const result = this.db
1130
- .prepare("SELECT COUNT(*) as count FROM sync_status WHERE sync_state = 'pending'")
1131
- .get();
1132
- return result.count;
1133
- }
1134
- // ============================
1135
- // Proficiency (Phase 5 PoC)
1136
- // ============================
1137
- createProficiency(input) {
1138
- const id = randomUUID();
1139
- const now = new Date().toISOString();
1140
- this.stmt('insert_proficiency', `
1141
- INSERT INTO proficiency_records (id, skill_memory_id, skill_name, project_path, created_at, updated_at)
1142
- VALUES (?, ?, ?, ?, ?, ?)
1143
- `).run(id, input.skillMemoryId, input.skillName, input.projectPath ?? null, now, now);
1144
- return {
1145
- id,
1146
- skillMemoryId: input.skillMemoryId,
1147
- skillName: input.skillName,
1148
- level: 1,
1149
- experienceCount: 0,
1150
- successRate: 0.0,
1151
- actrActivation: 0.0,
1152
- lastPracticedAt: now,
1153
- createdAt: now,
1154
- updatedAt: now,
1155
- projectPath: input.projectPath,
1156
- };
1157
- }
1158
- getProficiency(id) {
1159
- const row = this.stmt('get_proficiency', 'SELECT * FROM proficiency_records WHERE id = ?').get(id);
1160
- if (!row)
1161
- return null;
1162
- return mapProficiencyRow(row);
1163
- }
1164
- getProficiencyBySkill(skillMemoryId) {
1165
- const row = this.stmt('get_proficiency_by_skill', 'SELECT * FROM proficiency_records WHERE skill_memory_id = ?').get(skillMemoryId);
1166
- if (!row)
1167
- return null;
1168
- return mapProficiencyRow(row);
1169
- }
1170
- listProficiencies(options) {
1171
- const limit = options?.limit ?? 100;
1172
- if (options?.projectPath) {
1173
- const rows = this.stmt('list_proficiencies_project', 'SELECT * FROM proficiency_records WHERE project_path = ? ORDER BY level DESC, updated_at DESC LIMIT ?').all(options.projectPath, limit);
1174
- return rows.map(mapProficiencyRow);
1175
- }
1176
- const rows = this.stmt('list_proficiencies_all', 'SELECT * FROM proficiency_records ORDER BY level DESC, updated_at DESC LIMIT ?').all(limit);
1177
- return rows.map(mapProficiencyRow);
1178
- }
1179
- updateProficiency(id, updates) {
1180
- const fields = ["updated_at = datetime('now')"];
1181
- const values = [];
1182
- if (updates.level !== undefined) {
1183
- fields.push('level = ?');
1184
- values.push(updates.level);
1185
- }
1186
- if (updates.experienceCount !== undefined) {
1187
- fields.push('experience_count = ?');
1188
- values.push(updates.experienceCount);
1189
- }
1190
- if (updates.successRate !== undefined) {
1191
- fields.push('success_rate = ?');
1192
- values.push(updates.successRate);
1193
- }
1194
- if (updates.actrActivation !== undefined) {
1195
- fields.push('actr_activation = ?');
1196
- values.push(updates.actrActivation);
1197
- }
1198
- if (updates.lastPracticedAt !== undefined) {
1199
- fields.push('last_practiced_at = ?');
1200
- values.push(updates.lastPracticedAt);
1201
- }
1202
- values.push(id);
1203
- const result = this.db.prepare(`UPDATE proficiency_records SET ${fields.join(', ')} WHERE id = ?`).run(...values);
1204
- return result.changes > 0;
1205
- }
1206
- addExperienceEvent(event) {
1207
- const id = randomUUID();
1208
- this.stmt('insert_experience', `
1209
- INSERT INTO experience_events (id, proficiency_id, timestamp, outcome, difficulty, context_tags, session_id)
1210
- VALUES (?, ?, ?, ?, ?, ?, ?)
1211
- `).run(id, event.proficiencyId, event.timestamp, event.outcome, event.difficulty, event.contextTags ? JSON.stringify(event.contextTags) : null, event.sessionId ?? null);
1212
- return {
1213
- id,
1214
- proficiencyId: event.proficiencyId,
1215
- timestamp: event.timestamp,
1216
- outcome: event.outcome,
1217
- difficulty: event.difficulty,
1218
- contextTags: event.contextTags ?? [],
1219
- sessionId: event.sessionId,
1220
- };
1221
- }
1222
- getExperienceEvents(proficiencyId, options) {
1223
- const limit = options?.limit ?? 1000;
1224
- const order = options?.order === 'asc' ? 'ASC' : 'DESC';
1225
- const rows = this.db.prepare(`SELECT * FROM experience_events WHERE proficiency_id = ? ORDER BY timestamp ${order} LIMIT ?`).all(proficiencyId, limit);
1226
- return rows.map(mapExperienceRow);
1227
- }
1228
- getExperienceEventCount(proficiencyId) {
1229
- const row = this.stmt('count_experience', 'SELECT COUNT(*) as count FROM experience_events WHERE proficiency_id = ?').get(proficiencyId);
1230
- return row.count;
1231
- }
1232
- // ============================
1233
- // Emotion Buffer
1234
- // ============================
1235
- bufferEmotionMessage(message) {
1236
- const id = randomUUID();
1237
- const now = new Date().toISOString();
1238
- this.stmt('insert_emotion_buffer', 'INSERT INTO emotion_buffer (id, message, created_at, synced) VALUES (?, ?, ?, 0)').run(id, message, now);
1239
- }
1240
- getUnsentEmotionMessages(limit = 10) {
1241
- return this.db.prepare('SELECT id, message FROM emotion_buffer WHERE synced = 0 ORDER BY created_at ASC LIMIT ?').all(limit);
1242
- }
1243
- markEmotionMessagesSynced(ids) {
1244
- if (ids.length === 0)
1245
- return;
1246
- const placeholders = ids.map(() => '?').join(',');
1247
- this.db.prepare(`UPDATE emotion_buffer SET synced = 1 WHERE id IN (${placeholders})`).run(...ids);
1248
- }
1249
- cleanupSyncedEmotionMessages() {
1250
- const result = this.db.prepare('DELETE FROM emotion_buffer WHERE synced = 1').run();
1251
- return result.changes;
1252
- }
1253
- // ============================
1254
- // Effectiveness Measurement (F-018~F-019)
1255
- // ============================
1256
- /**
1257
- * Record an injection event (SessionStart or UserPromptSubmit).
1258
- * Returns the new injection log id.
1259
- */
1260
- recordInjection(input) {
1261
- const id = randomUUID();
1262
- const now = new Date().toISOString();
1263
- this.stmt('insert_injection_log', `
1264
- INSERT INTO injection_logs (id, session_id, hook_type, injected_memory_ids, injected_keywords, hit_count, total_injected, effectiveness, ab_group, created_at)
1265
- VALUES (?, ?, ?, ?, ?, 0, ?, NULL, ?, ?)
1266
- `).run(id, input.sessionId, input.hookType, JSON.stringify(input.injectedMemoryIds), JSON.stringify(input.injectedKeywords), input.totalInjected, input.abGroup ?? null, now);
1267
- return id;
1268
- }
1269
- /**
1270
- * Record a keyword hit in PostToolUse.
1271
- */
1272
- recordInjectionHit(injectionId, matchedKeywords, toolName) {
1273
- const id = randomUUID();
1274
- const now = new Date().toISOString();
1275
- this.stmt('insert_injection_hit', `
1276
- INSERT INTO injection_hits (id, injection_id, matched_keywords, tool_name, created_at)
1277
- VALUES (?, ?, ?, ?, ?)
1278
- `).run(id, injectionId, JSON.stringify(matchedKeywords), toolName, now);
1279
- // Update hit_count on injection_log
1280
- this.stmt('inc_injection_hit_count', 'UPDATE injection_logs SET hit_count = hit_count + 1 WHERE id = ?').run(injectionId);
1281
- }
1282
- /**
1283
- * Get the most recent injection log for a session.
1284
- */
1285
- getLatestInjection(sessionId) {
1286
- const row = this.db.prepare('SELECT id, injected_keywords, total_injected FROM injection_logs WHERE session_id = ? ORDER BY created_at DESC LIMIT 1').get(sessionId);
1287
- if (!row)
1288
- return null;
1289
- return { id: row.id, injectedKeywords: row.injected_keywords, totalInjected: row.total_injected };
1290
- }
1291
- /**
1292
- * Update effectiveness score at session end.
1293
- */
1294
- updateInjectionEffectiveness(injectionId, effectiveness, hitCount) {
1295
- this.stmt('update_injection_effectiveness', 'UPDATE injection_logs SET effectiveness = ?, hit_count = ? WHERE id = ?').run(effectiveness, hitCount, injectionId);
1296
- }
1297
- /**
1298
- * Get all hit records for an injection log.
1299
- */
1300
- getInjectionHits(injectionId) {
1301
- const rows = this.db.prepare('SELECT id, tool_name FROM injection_hits WHERE injection_id = ?').all(injectionId);
1302
- return rows.map(r => ({ id: r.id, toolName: r.tool_name }));
1303
- }
1304
- /**
1305
- * Record extraction quality evaluation.
1306
- */
1307
- recordExtractionEval(input) {
1308
- const id = randomUUID();
1309
- const now = new Date().toISOString();
1310
- this.stmt('insert_extraction_eval', `
1311
- INSERT INTO extraction_evaluations (id, memory_id, session_id, significance_score, dedup_action, tier, reused_count, survived_30d, promoted, created_at)
1312
- VALUES (?, ?, ?, ?, ?, ?, 0, 0, 0, ?)
1313
- `).run(id, input.memoryId, input.sessionId, input.significanceScore ?? null, input.dedupAction ?? null, input.tier ?? null, now);
1314
- }
1315
- /**
1316
- * Purge injection_logs (and cascade hits) older than given days.
1317
- */
1318
- purgeOldInjectionLogs(days = 30) {
1319
- const cutoff = new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString();
1320
- const result = this.db.prepare('DELETE FROM injection_logs WHERE created_at < ?').run(cutoff);
1321
- return result.changes;
1322
- }
1323
- }
1324
- function mapSyncHistoryRow(row) {
1325
- return {
1326
- id: row.id,
1327
- operation: row.operation,
1328
- memoryId: row.memory_id,
1329
- timestamp: row.timestamp,
1330
- status: row.status,
1331
- details: row.details,
1332
- };
1333
- }
1334
- function mapProficiencyRow(row) {
1335
- return {
1336
- id: row.id,
1337
- skillMemoryId: row.skill_memory_id,
1338
- skillName: row.skill_name,
1339
- level: row.level,
1340
- experienceCount: row.experience_count,
1341
- successRate: row.success_rate,
1342
- actrActivation: row.actr_activation,
1343
- lastPracticedAt: row.last_practiced_at ?? row.created_at,
1344
- createdAt: row.created_at,
1345
- updatedAt: row.updated_at,
1346
- projectPath: row.project_path ?? undefined,
1347
- };
1348
- }
1349
- function mapExperienceRow(row) {
1350
- return {
1351
- id: row.id,
1352
- proficiencyId: row.proficiency_id,
1353
- timestamp: row.timestamp,
1354
- outcome: row.outcome,
1355
- difficulty: row.difficulty,
1356
- contextTags: row.context_tags ? JSON.parse(row.context_tags) : [],
1357
- sessionId: row.session_id ?? undefined,
1358
- };
1359
- }
1360
- function bufferToFloat32Array(buf) {
1361
- const arrayBuffer = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
1362
- return new Float32Array(arrayBuffer);
1363
- }
1364
- function float32ArrayToBuffer(arr) {
1365
- return Buffer.from(arr.buffer, arr.byteOffset, arr.byteLength);
1366
- }
1367
- //# sourceMappingURL=database.js.map
1
+ (function(_0x7f6652,_0xac5c7d){function _0x59bec5(_0x32afad,_0x37a3e2){return _0x4b2d(_0x37a3e2-0x211,_0x32afad);}const _0x1ad9ac=_0x7f6652();function _0x561177(_0x1c9fed,_0x5ea60b){return _0x4b2d(_0x5ea60b-0x9b,_0x1c9fed);}while(!![]){try{const _0x7cdda6=parseInt(_0x561177(0x307,0x1f2))/0x1*(parseInt(_0x59bec5(0x8db,0x7b0))/0x2)+-parseInt(_0x59bec5(0xab6,0x83c))/0x3*(parseInt(_0x59bec5(0xf5,0x38b))/0x4)+-parseInt(_0x59bec5(0x359,0x2fd))/0x5*(parseInt(_0x561177(0xc8,0x20f))/0x6)+parseInt(_0x59bec5(0x649,0x4a7))/0x7*(parseInt(_0x59bec5(0x223,0x356))/0x8)+parseInt(_0x59bec5(0x4e2,0x720))/0x9+-parseInt(_0x561177(0x446,0x32f))/0xa*(-parseInt(_0x59bec5(0x459,0x6ea))/0xb)+-parseInt(_0x561177(0x353,0x221))/0xc*(parseInt(_0x561177(0x245,0x4d4))/0xd);if(_0x7cdda6===_0xac5c7d)break;else _0x1ad9ac['push'](_0x1ad9ac['shift']());}catch(_0x2f9ceb){_0x1ad9ac['push'](_0x1ad9ac['shift']());}}}(_0x4863,0x4ce81));import _0x4882f0 from'better-sqlite3';import{randomUUID}from'node:crypto';import{existsSync,mkdirSync,statSync,renameSync}from'node:fs';function _0x4b2d(_0xf81e49,_0x1599d1){_0xf81e49=_0xf81e49-0xdb;const _0x4863ad=_0x4863();let _0x4b2d6b=_0x4863ad[_0xf81e49];if(_0x4b2d['plHnMl']===undefined){var _0x292f88=function(_0x4cafdf){const _0x1a7c99='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2b757f='',_0x388ee1='';for(let _0xd8e690=0x0,_0xdff860,_0x12a9ef,_0x50ae35=0x0;_0x12a9ef=_0x4cafdf['charAt'](_0x50ae35++);~_0x12a9ef&&(_0xdff860=_0xd8e690%0x4?_0xdff860*0x40+_0x12a9ef:_0x12a9ef,_0xd8e690++%0x4)?_0x2b757f+=String['fromCharCode'](0xff&_0xdff860>>(-0x2*_0xd8e690&0x6)):0x0){_0x12a9ef=_0x1a7c99['indexOf'](_0x12a9ef);}for(let _0xab34da=0x0,_0x219a55=_0x2b757f['length'];_0xab34da<_0x219a55;_0xab34da++){_0x388ee1+='%'+('00'+_0x2b757f['charCodeAt'](_0xab34da)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x388ee1);};_0x4b2d['BoZcsY']=_0x292f88,_0x4b2d['xsDPTt']={},_0x4b2d['plHnMl']=!![];}const _0x28ddb6=_0x4863ad[0x0],_0x447ede=_0xf81e49+_0x28ddb6,_0x2769ec=_0x4b2d['xsDPTt'][_0x447ede];return!_0x2769ec?(_0x4b2d6b=_0x4b2d['BoZcsY'](_0x4b2d6b),_0x4b2d['xsDPTt'][_0x447ede]=_0x4b2d6b):_0x4b2d6b=_0x2769ec,_0x4b2d6b;}import{dirname}from'node:path';import{homedir}from'node:os';import{cosineSimilarity as _0x4f60df}from'../extraction/similarity.js';import{quantizeToFloat32,dequantizeFromFloat32,quantizeToInt8,dequantizeFromInt8}from'../embedding/quantization.js';const DEFAULT_DB_PATH=_0x180951(-0x1c9,-0xb7)+_0x180951(0x363,0x1b2);function _0x180951(_0x3be4b1,_0x2e7d00){return _0x4b2d(_0x2e7d00- -0x308,_0x3be4b1);}function resolvePath(_0x5def33){const _0x101e2e={'nToBY':function(_0x40a6c6){return _0x40a6c6();}};function _0x1f0754(_0x57b212,_0x51ebdd){return _0x410919(_0x57b212,_0x51ebdd-0xd2);}if(_0x5def33['startsWith']('~'))return _0x5def33[_0x1f0754(-0x104,-0x51)]('~',_0x101e2e['nToBY'](homedir));return _0x5def33;}export class MemoryDatabase{['db'];[_0x410919(-0x14d,0xaf)];[_0x180951(-0x1f5,0xb7)]=new Map();[_0x410919(0xcc,0x155)+_0x410919(0x33d,0x322)];constructor(_0x189c14=DEFAULT_DB_PATH,_0x4c780e=_0x180951(0x189,0xa0)){const _0x379850={'ozEhL':function(_0x5e2b84,_0xf3295e){return _0x5e2b84(_0xf3295e);},'nkldU':function(_0x3a662b,_0x3c2c41){return _0x3a662b(_0x3c2c41);},'MtUbN':'journal_mo'+_0x15dbe4(0x722,0x6c3),'Kwqzy':'foreign_ke'+_0xa67b33(0x9de,0xbac),'liHYU':_0x15dbe4(0x962,0xbda)+'\x20=\x20-64000'};this['dbPath']=resolvePath(_0x189c14),this[_0xa67b33(0x7bf,0x7bc)+_0xa67b33(0x98c,0x884)]=_0x4c780e;const _0x690926=_0x379850[_0xa67b33(0x9d7,0x90a)](dirname,this[_0xa67b33(0x719,0x4e1)]);!_0x379850[_0x15dbe4(0x860,0xa88)](existsSync,_0x690926)&&mkdirSync(_0x690926,{'recursive':!![]});this['db']=MemoryDatabase[_0xa67b33(0x686,0x7a2)+'se'](this[_0x15dbe4(0x6a1,0x8c0)]),this['db'][_0xa67b33(0x57c,0x581)](_0x379850[_0x15dbe4(0x91e,0x6e6)]),this['db'][_0x15dbe4(0x504,0x705)](_0x379850['Kwqzy']),this['db'][_0xa67b33(0x57c,0x3a4)](_0x379850[_0x15dbe4(0x55a,0x574)]),this['db']['pragma'](_0x15dbe4(0x988,0xade)+'s\x20=\x20NORMAL');function _0x15dbe4(_0x3347ef,_0x2b62a0){return _0x410919(_0x2b62a0,_0x3347ef-0x5f2);}this['db']['pragma'](_0xa67b33(0x5d6,0x48b)+_0x15dbe4(0x4f5,0x6b9)),this['db'][_0xa67b33(0x57c,0x372)](_0x15dbe4(0x65c,0x8b2)+'=\x2026843545'+'6');function _0xa67b33(_0x1faa5b,_0x499dc9){return _0x410919(_0x499dc9,_0x1faa5b-0x66a);}this[_0x15dbe4(0x685,0x79a)+_0x15dbe4(0x84d,0x6af)]();}static[_0x410919(-0x240,0x1c)+'se'](_0x40f7d4){function _0x335a6f(_0xdd74e,_0x4a970a){return _0x410919(_0xdd74e,_0x4a970a-0x533);}function _0x2aae07(_0x3e008e,_0x1a9fe1){return _0x410919(_0x3e008e,_0x1a9fe1-0x231);}const _0x1efbec={'mhmjc':function(_0x1dd995,_0x461a1f){return _0x1dd995 instanceof _0x461a1f;},'WbitV':function(_0x1d132d,_0x54df6c){return _0x1d132d(_0x54df6c);},'zvEHv':_0x2aae07(0x496,0x228)+_0x335a6f(0xa93,0x8c8),'nsTyO':_0x2aae07(0x626,0x40a)+_0x335a6f(0x92a,0x67e)+'bject','Zuftq':_0x2aae07(-0x3a,0x1fa),'ONBHk':_0x335a6f(0x543,0x5a3)+_0x2aae07(0x2c5,0x53e)+_0x2aae07(0x7ef,0x5ad)+_0x2aae07(0x70d,0x518)+_0x2aae07(0xd2,0xbe)+_0x335a6f(0x502,0x565)+_0x2aae07(0x41f,0x4a1),'PoWcU':_0x335a6f(0x657,0x734)+_0x335a6f(0x755,0x5df)+'\x20better-sq'+'lite3\x20nati'+'ve\x20binding'+'.','TKjSR':'[a2a]\x20Fix:'+_0x2aae07(0x304,0x249)+_0x335a6f(0x4ce,0x3d9)+'sqlite3'};try{return new _0x4882f0(_0x40f7d4);}catch(_0x56bbd9){const _0x4d6668=_0x1efbec[_0x2aae07(0x17a,0x3b0)](_0x56bbd9,Error)?_0x56bbd9[_0x335a6f(0x5fd,0x7cb)]:_0x1efbec['WbitV'](String,_0x56bbd9),_0x1dd80=_0x4d6668[_0x335a6f(0x65a,0x7e6)]('NODE_MODUL'+'E_VERSION')||_0x4d6668[_0x335a6f(0x929,0x7e6)](_0x1efbec[_0x2aae07(-0x9b,0x16a)])||_0x4d6668[_0x2aae07(0x40a,0x4e4)](_0x1efbec[_0x2aae07(0x455,0x342)])||_0x4d6668[_0x2aae07(0x745,0x4e4)](_0x335a6f(0x76e,0x759)+'F')||_0x4d6668[_0x335a6f(0x5b4,0x7e6)](_0x1efbec[_0x335a6f(0x918,0x6c7)]);if(_0x1dd80){const _0x499f98='1|0|2|3|4'[_0x2aae07(0x2e7,0x4c4)]('|');let _0x4d2f1a=0x0;while(!![]){switch(_0x499f98[_0x4d2f1a++]){case'0':console[_0x335a6f(0x756,0x502)](_0x1efbec[_0x2aae07(0x61d,0x39b)]);continue;case'1':console[_0x2aae07(0x2fa,0x200)](_0x1efbec[_0x2aae07(-0x111,0x135)]);continue;case'2':console['error'](_0x1efbec[_0x2aae07(-0x54,0x10a)]);continue;case'3':console['error']('[a2a]\x20\x20\x20or'+_0x2aae07(0x8,0x275)+'m/versions'+_0x2aae07(0x515,0x4b1)+'sion>/lib/'+_0x335a6f(0x34e,0x4d9)+'es/a2a-mem'+_0x2aae07(0x601,0x4e5)+_0x2aae07(0x3a7,0x282)+_0x2aae07(-0xb2,0x132)+'te3');continue;case'4':throw new Error('[a2a]\x20bett'+_0x2aae07(0x2e9,0x268)+_0x2aae07(0x17b,0x31f)+_0x2aae07(0x455,0x220)+_0x335a6f(0x839,0x713)+_0x335a6f(0x9ef,0x89a)+_0x2aae07(0x6e9,0x569)+'er-sqlite3'+'\x0aOriginal\x20'+_0x335a6f(0x861,0x64d)+_0x4d6668);continue;}break;}}throw _0x56bbd9;}}[_0x180951(-0x1d6,0xf)+_0x410919(0x19a,0x25b)](){const _0x3386bb={'afrNe':_0x36c3f2(0x435,0x56b)+'check','gYFfR':function(_0x1a2bde,_0x4172d1){return _0x1a2bde===_0x4172d1;},'arpIg':function(_0x49b5e9,_0x4cd14a){return _0x49b5e9 instanceof _0x4cd14a;},'NstCp':function(_0x386304,_0x2f577e){return _0x386304(_0x2f577e);}};function _0x7bff1a(_0x49e6c8,_0xb5b16a){return _0x410919(_0xb5b16a,_0x49e6c8-0x38e);}function _0x36c3f2(_0x57e3e3,_0x2c8947){return _0x410919(_0x2c8947,_0x57e3e3-0x4cf);}try{const _0x1b559b=this['db']['pragma'](_0x3386bb[_0x36c3f2(0x82b,0x8f4)]),_0x5c0d66=_0x3386bb[_0x36c3f2(0x71f,0x867)](_0x1b559b['length'],0x1)&&_0x3386bb[_0x36c3f2(0x71f,0x5a6)](_0x1b559b[0x0]['integrity_'+'check'],'ok');if(!_0x5c0d66){const _0x3b1869=_0x1b559b[_0x36c3f2(0x669,0x57f)](_0x302de0=>_0x302de0[_0x7bff1a(0x2f4,0x47e)+'check'])[_0x7bff1a(0x72e,0x7b8)](',\x20');console[_0x36c3f2(0x49e,0x590)](_0x36c3f2(0x820,0x884)+_0x36c3f2(0x6dd,0x744)+_0x7bff1a(0x56d,0x7a4)+_0x36c3f2(0x399,0x25f)+_0x3b1869),this[_0x36c3f2(0x74c,0x752)+_0x7bff1a(0x4ec,0x29e)+'se']();}}catch(_0x1aac05){const _0x674da2=_0x3386bb[_0x36c3f2(0x87a,0x764)](_0x1aac05,Error)?_0x1aac05[_0x7bff1a(0x626,0x584)]:_0x3386bb['NstCp'](String,_0x1aac05);console['error'](_0x36c3f2(0x820,0x812)+_0x7bff1a(0x59c,0x4d6)+_0x36c3f2(0x6ae,0x8d4)+_0x36c3f2(0x4c7,0x434)+_0x674da2),this[_0x36c3f2(0x74c,0x52f)+_0x36c3f2(0x62d,0x509)+'se']();}}['recoverCor'+_0x180951(-0x19c,0xda)+'se'](){const _0x4248ee={'qOqft':_0x57d166(0x684,0x5df)+_0x57d166(0x2a5,0x1e9)+_0x4cf03f(0x563,0x79a)+_0x4cf03f(0xa5c,0x863)+'data\x20may\x20b'+_0x4cf03f(0x59f,0x669),'HPOCK':_0x57d166(0x6e5,0x454)+'de\x20=\x20WAL','Sppzm':'temp_store'+_0x57d166(-0xe3,0x144),'LNRBC':'mmap_size\x20'+_0x57d166(0x2b9,0x18f)+'6'};function _0x57d166(_0x1f4b7c,_0x25632b){return _0x410919(_0x1f4b7c,_0x25632b-0x241);}try{this['db'][_0x4cf03f(0x92f,0x6f3)]();}catch{}const _0x49c247=this[_0x57d166(0x448,0x2f0)]+_0x4cf03f(0x603,0x783)+Date['now']();try{renameSync(this[_0x57d166(0x11c,0x2f0)],_0x49c247),console['error'](_0x4cf03f(0x226,0x3b3)+_0x4cf03f(0x61c,0x5e6)+_0x57d166(0x3a6,0x5bc)+_0x4cf03f(0x4e1,0x487)+_0x49c247);}catch(_0x1b83e0){console[_0x4cf03f(0x763,0x52a)](_0x4cf03f(0x527,0x75c)+'ed\x20to\x20move'+_0x4cf03f(0xa78,0x8ce)+_0x4cf03f(0x6f0,0x6fc)+(_0x1b83e0 instanceof Error?_0x1b83e0[_0x57d166(0x2a9,0x4d9)]:String(_0x1b83e0)));}console[_0x57d166(0x29d,0x210)](_0x4248ee[_0x57d166(0x475,0x4bf)]);function _0x4cf03f(_0x418d04,_0x5262b8){return _0x410919(_0x418d04,_0x5262b8-0x55b);}this['db']=MemoryDatabase[_0x4cf03f(0x578,0x577)+'se'](this[_0x4cf03f(0x861,0x60a)]),this['db'][_0x57d166(-0x1a,0x153)](_0x4248ee[_0x57d166(0x375,0x433)]),this['db']['pragma'](_0x4cf03f(0xa7b,0x8e7)+'ys\x20=\x20ON'),this['db'][_0x4cf03f(0x1c0,0x46d)](_0x4cf03f(0x6c6,0x8cb)+_0x57d166(0x4c6,0x5a9)),this['db'][_0x4cf03f(0x5cc,0x46d)](_0x57d166(0x43b,0x5d7)+_0x57d166(0x603,0x5b3)),this['db'][_0x4cf03f(0x683,0x46d)](_0x4248ee[_0x4cf03f(0x31f,0x3cd)]),this['db'][_0x57d166(0x3a3,0x153)](_0x4248ee[_0x57d166(0x23a,0x28e)]),this[_0x57d166(0x3eb,0x37c)][_0x57d166(0x48f,0x4cd)]();}[_0x180951(0x1bf,0x66)](_0x41b4c5,_0x49e561){function _0x42e2fa(_0x42ee40,_0x50cb8a){return _0x410919(_0x42ee40,_0x50cb8a-0x356);}const _0x3c972d={'bBCKg':function(_0x199dca,_0x57d46a){return _0x199dca!==_0x57d46a;},'IjYFk':_0x21130a(0x3bf,0x51a)};function _0x21130a(_0x399a35,_0x3653f8){return _0x410919(_0x399a35,_0x3653f8-0x637);}let _0x581670=this['stmts']['get'](_0x41b4c5);if(!_0x581670){if(_0x3c972d[_0x21130a(0x81e,0x7c6)]('LLtRZ',_0x42e2fa(0x67a,0x64d)))_0x581670=this['db'][_0x21130a(0x57d,0x7d0)](_0x49e561),this[_0x21130a(0x850,0x772)][_0x21130a(0xbde,0x9b1)](_0x41b4c5,_0x581670);else{this['addTombsto'+'ne'](_0xcb8fe6['id']);const _0x2be181=this[_0x21130a(0x85a,0x95c)](_0x4bfbea['id']);_0x3c972d[_0x42e2fa(0x65a,0x4e5)](_0x2be181,null)&&this['stmt'](_0x3c972d[_0x42e2fa(0x4ea,0x507)],_0x21130a(0x6d2,0x6c6)+_0x21130a(0x79c,0x8ad)+'ts\x20WHERE\x20r'+_0x42e2fa(0x2a8,0x2ed))['run'](_0x2be181);}}return _0x581670;}[_0x180951(-0x330,-0x1ae)](){const _0x2fff19={'hpOiM':_0x3e7452(0x1e8,0x3f8)+_0x3d0356(0x7c3,0x99b)+_0x3d0356(0x8e0,0x938)+_0x3d0356(0x537,0x78a)+_0x3e7452(0x361,0x44e)+'T','QTFQs':_0x3d0356(0x6ce,0x93b)+_0x3d0356(0x7c3,0x6dc)+_0x3e7452(0x3fa,0x50f)+_0x3e7452(0x39a,0x3f8)+_0x3d0356(0x4cd,0x26f)+'R','rkNfQ':'CREATE\x20IND'+'EX\x20IF\x20NOT\x20'+'EXISTS\x20idx'+'_memories_'+'parent_id\x20'+_0x3e7452(0x43d,0x63f)+_0x3e7452(-0xb2,0xf3)+'d)','MPlYw':_0x3e7452(0x1e8,-0x58)+'E\x20injectio'+_0x3d0356(0x575,0x458)+_0x3e7452(-0x9b,0x149)+_0x3d0356(0x7c5,0x55d)+'T'};this['db'][_0x3d0356(0x8a0,0x88f)](_0x3d0356(0x5fc,0x85e)+_0x3d0356(0x6e7,0x534)+_0x3e7452(0x95,-0x1b4)+_0x3d0356(0x8fa,0x68f)+_0x3d0356(0x593,0x512)+_0x3e7452(0x65,-0x202)+_0x3d0356(0x92e,0xa6f)+_0x3d0356(0x723,0x6f4)+_0x3d0356(0x7f3,0x8e0)+_0x3e7452(0x28c,0x33c)+_0x3d0356(0x8ae,0xa25)+_0x3e7452(-0x49,0x67)+'y\x20TEXT\x20NOT'+_0x3d0356(0x65b,0x80f)+'\x20\x20\x20\x20\x20tier\x20'+'TEXT\x20NOT\x20N'+_0x3e7452(0x3c8,0x2cd)+'\x20\x20\x20embeddi'+_0x3e7452(0x3e1,0x302)+_0x3e7452(0x203,0x401)+_0x3e7452(0x277,-0x28)+_0x3e7452(0x3b2,0x328)+_0x3d0356(0x505,0x790)+_0x3d0356(0x910,0xaba)+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20c'+_0x3e7452(0x4a,0x101)+_0x3e7452(0x28c,0x274)+_0x3d0356(0x559,0x548)+'T\x20(datetim'+_0x3d0356(0x465,0x3a5)+_0x3e7452(0x20,-0x114)+_0x3e7452(0x71,-0xa2)+_0x3d0356(0x772,0x833)+_0x3e7452(0x73,-0x34)+'T\x20(datetim'+_0x3e7452(-0x81,-0x11b)+_0x3d0356(0x6b0,0x939)+_0x3e7452(0x2a1,0x10a)+_0x3d0356(0x956,0xa04)+_0x3d0356(0x536,0x56d)+_0x3e7452(0x205,0x14e)+'\x20\x20\x20\x20\x20\x20\x20\x20la'+_0x3d0356(0x449,0x49a)+'d_at\x20TEXT\x0a'+_0x3d0356(0x7fe,0x864)+_0x3d0356(0x4a2,0x6e8)+_0x3d0356(0x83d,0xa1b)+_0x3d0356(0x6a2,0x655)+_0x3d0356(0x458,0x291)+'tags\x20(\x0a\x20\x20\x20'+'\x20\x20\x20\x20\x20memor'+_0x3e7452(0x3ff,0x4d0)+_0x3e7452(0x31b,0x2a5)+_0x3e7452(0x331,0x52f)+_0x3e7452(0x255,0x411)+_0x3d0356(0x65b,0x4a2)+'\x20\x20\x20\x20\x20PRIMA'+'RY\x20KEY\x20(me'+_0x3d0356(0x61e,0x6a7)+_0x3d0356(0x62a,0x677)+_0x3e7452(0x115,-0x149)+'\x20KEY\x20(memo'+'ry_id)\x20REF'+_0x3d0356(0x60c,0x671)+_0x3d0356(0x608,0x876)+_0x3e7452(-0x1d,-0x1f1)+_0x3e7452(0x486,0x21e)+_0x3d0356(0x89b,0x99a)+_0x3e7452(0x1d9,0xff)+_0x3e7452(0x337,0x58a)+_0x3d0356(0x94c,0x9ad)+_0x3d0356(0x8f1,0xa8d)+_0x3d0356(0x6f7,0x808)+_0x3e7452(0x402,0x520)+_0x3d0356(0x782,0x6a0)+_0x3e7452(-0x2a,0x17)+_0x3d0356(0x8a7,0x6d6)+_0x3e7452(0x27e,0x4b2)+_0x3e7452(0x20e,0x1d5)+_0x3e7452(0x3a3,0x63f)+_0x3e7452(0x3a7,0x464)+_0x3d0356(0x79d,0x57b)+'TEGER\x20NOT\x20'+'NULL\x20DEFAU'+_0x3e7452(-0xa5,-0x1d9)+_0x3d0356(0x696,0x41d)+'sed_at\x20TEX'+_0x3d0356(0x4d2,0x5ee)+'\x20DEFAULT\x20('+_0x3d0356(0x5b6,0x3ec)+_0x3d0356(0x91f,0x7be)+_0x3e7452(0x29a,0x378)+_0x3e7452(0x2c1,0xeb)+_0x3e7452(0x19e,0x1b2)+_0x3d0356(0x7f8,0x751)+_0x3d0356(0x8b1,0x749)+_0x3e7452(0x1d2,0x3de)+'\x20\x20memory_i'+_0x3e7452(0x29c,0x3af)+'MARY\x20KEY,\x0a'+('\x20\x20\x20\x20\x20\x20\x20\x20re'+_0x3e7452(0xd8,-0x194)+_0x3e7452(0x33,-0x225)+'\x20\x20synced_a'+_0x3d0356(0x4a8,0x580)+_0x3d0356(0x668,0x817)+_0x3e7452(0x367,0x411)+_0x3d0356(0x4d2,0x295)+_0x3d0356(0x937,0x6f9)+_0x3d0356(0x4c2,0x6ee)+_0x3d0356(0x443,0x57a)+_0x3e7452(0x389,0x15c)+_0x3d0356(0x595,0x401)+_0x3e7452(0x20f,0x401)+_0x3d0356(0x62f,0x698)+'s(id)\x20ON\x20D'+_0x3d0356(0x596,0x4b7)+'ADE\x0a\x20\x20\x20\x20\x20\x20'+');\x0a\x0a\x20\x20\x20\x20\x20\x20'+'CREATE\x20IND'+_0x3d0356(0x492,0x60d)+_0x3e7452(-0x7,0x1ce)+_0x3d0356(0x96b,0xa04)+_0x3e7452(-0x80,-0x193)+'N\x20memories'+'(category)'+_0x3d0356(0x905,0x928)+_0x3d0356(0x64e,0x7ee)+_0x3e7452(-0x94,-0x19d)+_0x3e7452(0x31e,0x562)+_0x3d0356(0x5e9,0x696)+_0x3d0356(0x590,0x36e)+_0x3d0356(0x8fc,0x749)+_0x3e7452(0x41f,0x417)+_0x3e7452(0x168,0x400)+_0x3e7452(-0x94,-0x2a9)+_0x3d0356(0x804,0x944)+_0x3d0356(0x899,0x8d2)+_0x3e7452(-0x26,-0x140)+_0x3d0356(0x56c,0x329)+_0x3e7452(0x27e,0x34b)+');\x0a\x20\x20\x20\x20\x20\x20C'+_0x3e7452(0x124,-0x8c)+_0x3d0356(0x7e8,0x5ab)+'XISTS\x20idx_'+_0x3d0356(0x8c8,0x6b8)+_0x3e7452(0x48b,0x667)+_0x3d0356(0x964,0xaff)+_0x3d0356(0x50e,0x7bb)+';\x0a\x20\x20\x20\x20\x20\x20CR'+'EATE\x20INDEX'+_0x3d0356(0x452,0x4a8)+_0x3e7452(0x31e,0x578)+'emory_tags'+_0x3e7452(-0x64,-0xa7)+_0x3d0356(0x91e,0x985)+_0x3e7452(0x5c,-0x247)+_0x3e7452(0x10b,0x2af)+_0x3e7452(0x22c,0x4c6)+'T\x20EXISTS\x20i'+_0x3e7452(0x58,0xa5)+_0x3e7452(0x435,0x2bc)+_0x3e7452(0x401,0x431)+_0x3e7452(0x1f6,-0x8c)+';\x0a\x20\x20\x20\x20\x20\x20CR'+_0x3d0356(0x64e,0x74f)+'\x20IF\x20NOT\x20EX'+_0x3e7452(0x31e,0x3c6)+_0x3d0356(0x899,0x7ca)+_0x3e7452(0x441,0x54c)+_0x3d0356(0x6ba,0x844)+'ories(proj'+_0x3d0356(0x55f,0x577)+_0x3d0356(0x86a,0xa92)+_0x3d0356(0x88e,0x69a)+'\x20\x20\x20\x20CREATE'+_0x3e7452(0x3db,0x3de)+'NOT\x20EXISTS'+_0x3e7452(0xf4,0x1e4)+'ies_catego'+_0x3d0356(0x4dd,0x422)+_0x3e7452(0x3f3,0x46e)+_0x3e7452(0x26a,0x227)+_0x3d0356(0x7c2,0x5a1)+_0x3e7452(0xd6,0x18e)+_0x3e7452(0x1e1,0x281)+_0x3d0356(0x670,0x75f)+_0x3e7452(0x477,0x53d)+_0x3d0356(0x6b1,0x5bc)+'\x20\x20\x20\x20\x20memor'+'y_id\x20TEXT\x20'+'PRIMARY\x20KE'+_0x3e7452(0x1e5,0x134)+_0x3e7452(0x2aa,0x20e)+'te\x20TEXT\x20NO'+_0x3e7452(0x2ee,0x3fd)+_0x3d0356(0x58f,0x796)+_0x3d0356(0x710,0x6a1)+_0x3d0356(0x4d2,0x2d7)+'\x20DEFAULT\x20(')+('datetime(\x27'+_0x3e7452(0x439,0x30c)+_0x3d0356(0x780,0x775)+'\x20\x20\x20CREATE\x20'+_0x3e7452(0x19e,0xcf)+_0x3e7452(0x312,0x470)+'embedding_'+_0x3d0356(0x612,0x4db)+_0x3d0356(0x4c1,0x2d4)+_0x3e7452(0x230,0x24)+'EXT\x20PRIMAR'+_0x3e7452(0x1f2,0x287)+_0x3e7452(0x26c,0x4aa)+_0x3d0356(0x66d,0x688)+_0x3e7452(0x3b7,0x3ee)+_0x3e7452(-0x75,-0xf4)+_0x3d0356(0x6ac,0x5af)+_0x3e7452(0x3b9,0x1e3)+_0x3d0356(0x755,0x7f0)+_0x3d0356(0x673,0x6bb)+_0x3d0356(0x6d3,0x758)+_0x3d0356(0x8a5,0x7ef)+'id)\x20REFERE'+_0x3d0356(0x897,0x806)+_0x3d0356(0x97d,0x75d)+_0x3d0356(0x6aa,0x867)+_0x3e7452(0x1e3,0x120)+_0x3e7452(0x141,0x2dc)));try{this['db'][_0x3e7452(0x3ba,0x461)](_0x3d0356(0x617,0x843)+'REATE\x20VIRT'+_0x3d0356(0x43b,0x54d)+'IF\x20NOT\x20EXI'+_0x3d0356(0x940,0xae4)+_0x3e7452(0x3a5,0x447)+_0x3d0356(0x524,0x696)+_0x3d0356(0x69c,0x693)+_0x3d0356(0x4eb,0x341)+'\x20\x20\x20\x20\x20\x20toke'+'nize=\x27unic'+_0x3d0356(0x4d9,0x335)+'\x20\x20\x20\x20\x20);\x0a\x20\x20'+_0x3d0356(0x936,0x7a9));}catch{}try{this['db'][_0x3e7452(0x3ba,0x46a)](_0x2fff19[_0x3e7452(0x244,0x149)]);}catch{}this['db'][_0x3d0356(0x8a0,0x8a3)](_0x3e7452(0x116,0x1c8)+'ATE\x20TABLE\x20'+_0x3d0356(0x57b,0x353)+_0x3d0356(0x862,0x985)+'istory\x20(\x0a\x20'+_0x3e7452(0x309,0x2e2)+'INTEGER\x20PR'+'IMARY\x20KEY\x20'+'AUTOINCREM'+_0x3d0356(0x810,0x9be)+'\x20\x20\x20operati'+_0x3d0356(0x901,0x8df)+_0x3e7452(0x2ee,0x54e)+_0x3e7452(0x267,0x2fd)+_0x3d0356(0x853,0x9ae)+_0x3d0356(0x445,0x287)+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20t'+_0x3d0356(0x87e,0x9c4)+'EXT\x20NOT\x20NU'+'LL\x20DEFAULT'+_0x3d0356(0x800,0x5d4)+_0x3e7452(0x13e,0x159)+_0x3e7452(0x1f1,0x46)+'atus\x20TEXT\x20'+_0x3e7452(0x50,0x1ac)+_0x3d0356(0x8b4,0x9c1)+_0x3e7452(0x180,0x3a0)+_0x3e7452(0x25b,0x285)+'ils\x20TEXT\x0a\x20'+_0x3e7452(0x3b5,0x41c)+'\x20\x20\x20\x20\x20CREAT'+_0x3e7452(0x337,0x4d2)+_0x3d0356(0x94c,0xa13)+_0x3d0356(0x831,0x95d)+_0x3d0356(0x593,0x482)+_0x3e7452(0x1be,-0xc1)+_0x3d0356(0x584,0x7ee)+_0x3d0356(0x81f,0x649)+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20d'+_0x3d0356(0x701,0x599)+_0x3d0356(0x772,0x650)+_0x3e7452(0x73,0x233)+_0x3d0356(0x508,0x654)+_0x3e7452(-0x81,-0x1c2)+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20s'+'ynced\x20INTE'+'GER\x20NOT\x20NU'+'LL\x20DEFAULT'+'\x200\x0a\x20\x20\x20\x20\x20\x20)'+_0x3d0356(0x514,0x2da)+_0x3e7452(0x124,0x1bd)+_0x3e7452(0x302,0xfa)+_0x3e7452(0x2a0,0x3f2)+_0x3e7452(0x240,0xc0)+'mbedding_h'+_0x3d0356(0x6ea,0x694)+'ories(embe'+'dding_hash'+');\x0a\x20\x20\x20\x20\x20\x20C'+_0x3d0356(0x60a,0x411)+_0x3d0356(0x7e8,0x5be)+'XISTS\x20idx_'+_0x3e7452(0x38e,0xe9)+'ry_memory\x20'+_0x3d0356(0x57f,0x7a4)+'story(memo'+_0x3d0356(0x8d4,0x6ee)+'\x20\x20\x20\x20CREATE'+_0x3d0356(0x8c1,0xa9e)+_0x3e7452(0x18a,0x322)+_0x3e7452(0x11d,-0x12d)+_0x3d0356(0x84b,0x8d3)+'mestamp\x20ON'+_0x3e7452(0xb5,0xb8)+_0x3e7452(0x2bd,0x33c)+_0x3e7452(0x454,0x2a6)+'\x20\x20CREATE\x20I'+'NDEX\x20IF\x20NO'+'T\x20EXISTS\x20i'+_0x3d0356(0x5ac,0x7a7)+_0x3d0356(0x5a4,0x680)+_0x3d0356(0x491,0x687)+_0x3d0356(0x8bc,0xa70)+_0x3e7452(0x303,0x7c)),this['db'][_0x3d0356(0x8a0,0xa7c)](_0x3d0356(0x5fc,0x4d5)+_0x3e7452(0x201,0x3ee)+_0x3e7452(0x95,0x26b)+'STS\x20profic'+_0x3e7452(0x1fe,0x1a2)+_0x3e7452(0x25a,0x444)+_0x3d0356(0x4ec,0x28e)+_0x3d0356(0x707,0x622)+_0x3d0356(0x81b,0xa20)+_0x3d0356(0x83c,0x5f1)+_0x3d0356(0x716,0x630)+_0x3d0356(0x938,0x8d3)+_0x3d0356(0x7c0,0x890)+_0x3e7452(0x2ea,0x77)+_0x3e7452(0xd7,-0x18b)+_0x3d0356(0x7d4,0x772)+_0x3e7452(-0xa9,-0x1b)+'l\x20INTEGER\x20'+'NOT\x20NULL\x20D'+_0x3d0356(0x511,0x33b)+_0x3d0356(0x55d,0x42f)+_0x3d0356(0x693,0x783)+_0x3d0356(0x454,0x39e)+_0x3e7452(0x216,0x2ed)+'L\x20DEFAULT\x20'+'0,\x0a\x20\x20\x20\x20\x20\x20\x20'+_0x3e7452(0x17a,0x1e1)+_0x3e7452(0xdc,-0x1bd)+_0x3d0356(0x489,0x35e)+'FAULT\x200.0,'+_0x3e7452(0x1ca,0x40e)+_0x3e7452(0x2d7,0x54f)+_0x3d0356(0x942,0xbd2)+'NOT\x20NULL\x20D'+_0x3e7452(-0x3d,0x200)+_0x3d0356(0x673,0x675)+_0x3d0356(0x72f,0x708)+'iced_at\x20TE'+_0x3e7452(0x33,-0xd1)+_0x3d0356(0x53f,0x3d8)+_0x3d0356(0x655,0x5a4)+_0x3e7452(0xce,0xcb)+_0x3e7452(0x4a,0x2e)+'TEXT\x20NOT\x20N'+_0x3d0356(0x559,0x2c0)+_0x3e7452(0x22,-0x97)+'e(\x27now\x27)),'+_0x3e7452(0x20,0xf4)+'pdated_at\x20'+_0x3d0356(0x772,0x895)+_0x3e7452(0x73,0x215)+'T\x20(datetim'+_0x3e7452(-0x81,-0x111)+_0x3e7452(-0x61,-0x1be)+_0x3d0356(0x931,0xafa)+_0x3d0356(0x4e4,0x4cd)+_0x3d0356(0x5c6,0x48d)+_0x3e7452(0x428,0x56f)+_0x3d0356(0x6af,0x681)+'d)\x20ON\x20DELE'+_0x3e7452(-0x79,0xce)+'\x0a\x20\x20\x20\x20\x20\x20);\x0a'+_0x3e7452(0x116,0x17c)+_0x3e7452(0x201,-0x57)+_0x3e7452(0x95,0x1d2)+_0x3d0356(0x96d,0xa2d)+'ence_event'+_0x3d0356(0x6b8,0x4c3)+_0x3e7452(0x31d,0x15b)+_0x3d0356(0x4a4,0x594)+_0x3e7452(0x1e5,0x184)+_0x3d0356(0x5d0,0x50e)+'cy_id\x20TEXT'+_0x3e7452(-0xa1,0x1cb)+_0x3e7452(0x390,0x3d2)+_0x3d0356(0x5a9,0x70e)+'EAL\x20NOT\x20NU'+_0x3d0356(0x7c0,0x5dc)+_0x3e7452(0x3bd,0x5cd)+_0x3e7452(0x28c,0x11e)+_0x3e7452(0x2cf,0x15b)+_0x3e7452(0x4f,0x2de)+_0x3e7452(0x3d1,0x4a7)+_0x3e7452(0x2f8,0x28f)+_0x3e7452(0x283,0x429)+'\x27)),\x0a\x20\x20\x20\x20\x20'+_0x3e7452(0x2d2,0x14d)+_0x3d0356(0x4f4,0x32c)+_0x3e7452(-0x5d,-0x293)+_0x3e7452(0x2c6,0x463)+_0x3e7452(0xce,0x22f)+_0x3e7452(0x10f,-0x17c)+_0x3d0356(0x6cd,0x7a2)+_0x3e7452(0x261,-0x48)+_0x3d0356(0x447,0x321)+'T,\x0a\x20\x20\x20\x20\x20\x20\x20'+'\x20FOREIGN\x20K'+'EY\x20(profic'+'iency_id)\x20'+_0x3d0356(0x735,0x808)+(_0x3d0356(0x5d0,0x835)+'cy_records'+_0x3d0356(0x599,0x756)+'LETE\x20CASCA'+_0x3d0356(0x66f,0x3ed)+_0x3e7452(0x2e,-0x1f2)+_0x3d0356(0x60a,0x6e7)+'X\x20IF\x20NOT\x20E'+_0x3e7452(0x2a0,0x408)+'proficienc'+'y_skill\x20ON'+'\x20proficien'+_0x3e7452(0x385,0x485)+_0x3e7452(0x49,0x2e1)+_0x3e7452(-0x4f,0x7)+_0x3e7452(0x1d9,0x86)+_0x3e7452(0x263,0x511)+'\x20NOT\x20EXIST'+_0x3e7452(0x3a9,0x1b2)+_0x3d0356(0x4e7,0x2bd)+'oject\x20ON\x20p'+_0x3e7452(0x2fa,0x1fa)+_0x3e7452(0x38b,0x1a0)+_0x3e7452(0x2be,0x172)+_0x3d0356(0x71a,0x504)+_0x3e7452(0xcd,-0x121)+_0x3e7452(-0x54,0x75)+_0x3d0356(0x4df,0x2ce)+'_experienc'+_0x3d0356(0x717,0x761)+_0x3e7452(0x2fd,0x56e)+_0x3d0356(0x638,0x5e4)+_0x3e7452(0x38f,0x2a1)+_0x3e7452(0x1b1,0x40d)+';\x0a\x20\x20\x20\x20\x20\x20CR'+'EATE\x20INDEX'+_0x3d0356(0x452,0x2d2)+_0x3e7452(-0x88,0x77)+_0x3e7452(0x78,-0x16d)+_0x3e7452(0x146,-0x3f)+'ON\x20experie'+_0x3e7452(-0x38,-0x78)+_0x3e7452(0xd2,-0x1d7)+');\x0a\x20\x20\x20\x20'));function _0x3d0356(_0x33f14f,_0x43c139){return _0x180951(_0x43c139,_0x33f14f-0x658);}this['db'][_0x3d0356(0x8a0,0x993)]('\x0a\x20\x20\x20\x20\x20\x20CRE'+_0x3d0356(0x6e7,0x687)+'IF\x20NOT\x20EXI'+_0x3e7452(0x1c0,0x19b)+_0x3d0356(0x468,0x38e)+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20i'+_0x3e7452(0x29c,0x238)+_0x3d0356(0x4bc,0x6f4)+_0x3d0356(0x44c,0x257)+'ssage\x20TEXT'+_0x3e7452(-0xa1,0xf3)+_0x3d0356(0x5b4,0x6f4)+_0x3e7452(0x4a,0x27c)+_0x3e7452(0x28c,0x287)+_0x3e7452(0x3c8,0x2e6)+'\x20\x20\x20synced\x20'+_0x3e7452(0x478,0x2ac)+_0x3d0356(0x639,0x7fa)+_0x3e7452(0x1ba,0xf2)+'\x20\x20\x20CREATE\x20'+_0x3e7452(0x200,0x184)+'OT\x20EXISTS\x20'+_0x3e7452(-0xb5,0x17a)+_0x3d0356(0x90f,0x65f)+_0x3d0356(0x4f3,0x6b7)+'motion_buf'+_0x3e7452(0xa,0x219)+_0x3e7452(0x366,0x2f0));try{this['db'][_0x3d0356(0x8a0,0x7a4)]('ALTER\x20TABL'+_0x3e7452(0x2dd,0x7e)+_0x3e7452(0x3fa,0x5fe)+_0x3e7452(0x6e,0xe7)+_0x3e7452(-0x33,0xce));}catch{}try{this['db'][_0x3e7452(0x3ba,0x2d0)](_0x3e7452(0x1e8,0x86)+_0x3e7452(0x2dd,0x82)+'\x20ADD\x20COLUM'+_0x3d0356(0x770,0x923)+_0x3d0356(0x978,0x6c7)+'R');}catch{}try{this['db'][_0x3d0356(0x8a0,0x9b1)](_0x2fff19['QTFQs']);}catch{}function _0x3e7452(_0x5f3b6a,_0x412c41){return _0x180951(_0x412c41,_0x5f3b6a-0x172);}this['db'][_0x3d0356(0x8a0,0x87b)](_0x2fff19[_0x3e7452(0x41e,0x5d9)]),this['db'][_0x3e7452(0x3ba,0x1e3)](_0x3d0356(0x5fc,0x384)+'ATE\x20TABLE\x20'+_0x3e7452(0x95,0x17b)+_0x3d0356(0x7f5,0x7f8)+'ion_logs\x20('+_0x3d0356(0x4c8,0x39f)+_0x3e7452(0x29c,0x291)+_0x3e7452(-0x2a,-0xab)+_0x3e7452(0xd3,0x93)+_0x3d0356(0x61f,0x6fd)+'EXT\x20NOT\x20NU'+_0x3d0356(0x7c0,0x625)+_0x3e7452(0x238,0x4c9)+_0x3e7452(0x2d3,0x212)+'\x20NULL,\x0a\x20\x20\x20'+_0x3d0356(0x788,0x9e0)+_0x3e7452(0x37,0x158)+_0x3e7452(0x269,0x4b7)+_0x3d0356(0x4c8,0x708)+_0x3e7452(0x12,0x46)+_0x3e7452(0x9d,-0x1cd)+_0x3e7452(0x3d7,0x344)+_0x3d0356(0x730,0x8ab)+_0x3d0356(0x525,0x5ad)+'OT\x20NULL\x20DE'+'FAULT\x200,\x0a\x20'+_0x3e7452(0x1f9,0x156)+'al_injecte'+_0x3d0356(0x46b,0x480)+_0x3e7452(0x50,-0x168)+_0x3d0356(0x6eb,0x7ab)+_0x3d0356(0x7d1,0x921)+'fectivenes'+_0x3e7452(-0xa8,-0x76)+_0x3e7452(0x27c,0x6e)+_0x3e7452(0x3a,0x2e9)+_0x3e7452(0xce,-0x5f)+_0x3d0356(0x530,0x639)+_0x3d0356(0x772,0x83f)+_0x3d0356(0x559,0x3de)+_0x3d0356(0x508,0x4cc)+_0x3d0356(0x703,0x7f0)+_0x3e7452(0x318,0x1a7)+_0x3e7452(-0x44,0x1cf)+_0x3e7452(0x357,0x37f)+_0x3d0356(0x6a2,0x41e)+_0x3d0356(0x721,0x756)+_0x3d0356(0x585,0x7ac)+'\x20\x20\x20\x20\x20\x20\x20\x20id'+_0x3d0356(0x7f2,0x879)+_0x3d0356(0x840,0x5c2)+_0x3e7452(0x2e9,0x304)+_0x3d0356(0x45a,0x266)+_0x3d0356(0x772,0x8a6)+_0x3d0356(0x8ae,0x620)+_0x3e7452(0x40a,0x1c9)+_0x3e7452(0x411,0x560)+_0x3e7452(0x3b2,0x61c)+_0x3e7452(0x70,0x78)+_0x3e7452(0x218,0x1ef)+_0x3d0356(0x471,0x484)+_0x3e7452(0x43b,0x47b)+_0x3e7452(0xdf,-0x4d)+_0x3d0356(0x67c,0x443)+_0x3e7452(0x1da,0xcd)+_0x3e7452(0x320,0x4d0)+_0x3e7452(0x176,0x37d)+_0x3d0356(0x7ba,0xa11)+_0x3d0356(0x943,0xa40)+_0x3d0356(0x700,0x45d)+_0x3e7452(0x3e9,0x18b)+_0x3e7452(0x39b,0x47f)+_0x3e7452(0x223,0x45c)+'id)\x20ON\x20DEL'+_0x3d0356(0x6ef,0x6d0)+_0x3d0356(0x4d3,0x62a)+_0x3d0356(0x586,0x2e5)+'EATE\x20TABLE'+_0x3d0356(0x452,0x1f4)+_0x3e7452(-0x83,0x194)+_0x3e7452(0x7f,0x2f7)+'uations\x20(\x0a'+_0x3e7452(0x442,0x4a1)+'\x20TEXT\x20PRIM'+_0x3d0356(0x840,0x83b)+_0x3e7452(0x457,0x349)+'ory_id\x20TEX'+'T\x20NOT\x20NULL'+_0x3d0356(0x673,0x447)+_0x3e7452(0x33b,0x457)+_0x3e7452(0x20e,0x267)+'NULL,\x0a\x20\x20\x20\x20'+_0x3e7452(0x44,0x1bc)+'icance_sco'+_0x3e7452(0x2f6,0x1ea)+_0x3e7452(0x3ec,0x616)+'up_action\x20'+_0x3e7452(0x3b2,0x14c)+'\x20\x20\x20\x20tier\x20T'+_0x3d0356(0x476,0x1c8)+('\x20\x20\x20reused_'+_0x3d0356(0x8f4,0x809)+_0x3e7452(0x49f,0x6b6)+'LL\x20DEFAULT'+'\x200,\x0a\x20\x20\x20\x20\x20\x20'+_0x3d0356(0x91a,0x74d)+_0x3d0356(0x567,0x3fa)+_0x3d0356(0x6fc,0x72e)+_0x3e7452(0x1da,-0x99)+_0x3d0356(0x631,0x4bf)+_0x3e7452(0x2c4,0x19)+_0x3d0356(0x7b7,0x7c3)+_0x3d0356(0x5aa,0x743)+_0x3e7452(0xbf,0x2b1)+_0x3d0356(0x85c,0x6e2)+'ted_at\x20TEX'+_0x3e7452(-0x14,-0x82)+'\x20DEFAULT\x20('+_0x3d0356(0x5b6,0x693)+_0x3d0356(0x91f,0x72d)+'\x20\x20\x20);\x0a\x0a\x20\x20\x20'+'\x20\x20\x20CREATE\x20'+'INDEX\x20IF\x20N'+_0x3e7452(0x312,0x227)+_0x3e7452(0x30e,0x591)+_0x3d0356(0x494,0x5d7)+_0x3d0356(0x971,0xaf0)+_0x3d0356(0x700,0x58c)+_0x3d0356(0x698,0x8c0)+_0x3e7452(0x1bd,-0x74)+'\x20\x20\x20\x20CREATE'+'\x20INDEX\x20IF\x20'+_0x3e7452(0x18a,-0xb7)+'\x20idx_injec'+'tion_hits_'+'injection\x20'+'ON\x20injecti'+_0x3d0356(0x883,0x5f7)+_0x3e7452(0x1a3,-0x8)+');\x0a\x20\x20\x20\x20\x20\x20C'+_0x3d0356(0x60a,0x608)+'X\x20IF\x20NOT\x20E'+_0x3d0356(0x786,0x8a6)+_0x3e7452(0xa4,0x94)+_0x3d0356(0x6ec,0x899)+_0x3d0356(0x869,0x63c)+'raction_ev'+_0x3d0356(0x5b1,0x782)+_0x3e7452(0x123,0x1e9)+_0x3e7452(0x41f,0x1bd)+'EATE\x20INDEX'+_0x3e7452(-0x94,0x1c8)+_0x3e7452(-0x88,-0x137)+_0x3e7452(0x319,0x3ce)+'evals_sess'+'ion\x20ON\x20ext'+_0x3d0356(0x613,0x4b2)+'aluations('+'session_id'+_0x3e7452(0x366,0x3a1)));try{const _0x3b59cb=this['db'][_0x3d0356(0x76d,0x5c9)](_0x3e7452(0x171,0x13)+'le_info(in'+_0x3d0356(0x582,0x714)+_0x3e7452(0x48,0x1b7))[_0x3e7452(0x46d,0x39d)](),_0x24c786=_0x3b59cb[_0x3d0356(0x523,0x5f0)](_0x213e43=>_0x213e43['name']===_0x3d0356(0x48e,0x4ba));!_0x24c786&&this['db'][_0x3d0356(0x8a0,0x940)](_0x2fff19['MPlYw']);}catch{}}[_0x410919(0xd1,0x9e)+'ry'](_0x180704){const _0x3db578={'TmPAv':function(_0x4d0606){return _0x4d0606();},'pljaw':_0x43ca4a(0x6c3,0x74e)},_0x3a9845=_0x3db578[_0x43ca4a(0x2f6,0x3e7)](randomUUID),_0x4be4d9=new Date()[_0x1b1075(0x602,0x674)+'g']();function _0x1b1075(_0x82fd65,_0xe03619){return _0x410919(_0x82fd65,_0xe03619-0x3cf);}const _0xb8d6c2=_0x180704[_0x43ca4a(0x4de,0x499)]??[],_0x52cdd5=this[_0x43ca4a(0x37c,0x4ba)](_0x43ca4a(0x356,0x43e)+_0x43ca4a(0x313,0x36a),_0x1b1075(0xe2,0x36a)+_0x43ca4a(0x65b,0x6ba)+'emories\x20(i'+_0x43ca4a(-0x14,0x246)+_0x1b1075(0x326,0x38d)+_0x43ca4a(0x801,0x5e6)+'oject_path'+',\x20session_'+'id,\x20create'+_0x43ca4a(0x2db,0x444)+_0x43ca4a(0x47c,0x4d2)+'rent_id,\x20c'+_0x43ca4a(0x7e6,0x59b)+_0x1b1075(0x3e2,0x678)+_0x43ca4a(0x4eb,0x484)+'\x20VALUES\x20(?'+_0x1b1075(0x517,0x356)+_0x1b1075(0xa7,0x294)+_0x43ca4a(0x248,0x343)+')\x0a\x20\x20\x20\x20');function _0x43ca4a(_0x542e1a,_0x3301be){return _0x410919(_0x542e1a,_0x3301be-0x3d0);}const _0x421db6=this[_0x43ca4a(0x6e7,0x4ba)](_0x3db578[_0x43ca4a(0xdb,0x2b2)],_0x1b1075(-0x1a,0x28b)+_0x43ca4a(0x586,0x3d0)+'ags\x20(memor'+_0x1b1075(0x32,0x2d6)+_0x43ca4a(0x3e5,0x57d)+_0x1b1075(0x574,0x340)),_0x27ac3a=this[_0x1b1075(0x68a,0x4b9)](_0x43ca4a(0x18b,0x3fe),'INSERT\x20INT'+_0x1b1075(0x61d,0x5eb)+'ts\x20(rowid,'+_0x1b1075(0x50b,0x27b)+_0x43ca4a(0x8ce,0x623)+_0x43ca4a(0x460,0x481)),_0x2f526c=this['db'][_0x43ca4a(0x6bd,0x729)+'n'](()=>{_0x52cdd5[_0x1e32c2(0x5ad,0x38c)](_0x3a9845,_0x180704['content'],_0x180704[_0x4a0b4c(0x36c,0x2cf)],_0x180704[_0x1e32c2(0x58c,0x426)],_0x180704[_0x1e32c2(0x8fb,0x6bd)+'h']??null,_0x180704['sessionId']??null,_0x4be4d9,_0x4be4d9,_0x180704[_0x4a0b4c(0x34f,0x47c)]??null,_0x180704[_0x4a0b4c(0x1ab,0x402)]??null,_0x180704[_0x1e32c2(0x918,0x8fd)]??null);for(const _0x5a7c66 of _0xb8d6c2){_0x421db6[_0x4a0b4c(0x5b3,0x32f)](_0x3a9845,_0x5a7c66);}function _0x4a0b4c(_0x270bdf,_0x580b48){return _0x1b1075(_0x270bdf,_0x580b48- -0xc3);}function _0x1e32c2(_0x968b0f,_0x3378c9){return _0x1b1075(_0x3378c9,_0x968b0f-0x1bb);}const _0x39d0f6=this[_0x1e32c2(0x8af,0x720)](_0x3a9845);_0x27ac3a[_0x1e32c2(0x5ad,0x56d)](_0x39d0f6,_0x180704[_0x1e32c2(0x5f1,0x38b)]);});return _0x2f526c(),{'id':_0x3a9845,'content':_0x180704[_0x43ca4a(0x489,0x437)],'category':_0x180704[_0x43ca4a(0x1f3,0x393)],'tier':_0x180704[_0x1b1075(0x226,0x3d1)],'tags':_0xb8d6c2,'projectPath':_0x180704[_0x43ca4a(0x8f0,0x741)+'h'],'sessionId':_0x180704[_0x1b1075(0x337,0x481)],'createdAt':_0x4be4d9,'updatedAt':_0x4be4d9,'accessCount':0x0,'parentId':_0x180704[_0x43ca4a(0x33f,0x540)],'chunkIndex':_0x180704['chunkIndex'],'chunkTotal':_0x180704[_0x43ca4a(0x76a,0x75e)]};}[_0x180951(0xb4,-0x130)](_0x1afe1d){const _0xce3ba4={'dNqWH':_0x1ebcb5(-0x2c,-0xe7),'GTrEr':_0x36b546(-0x1a,-0x7b)+_0x36b546(0x3d5,0x14d)+_0x1ebcb5(-0xa1,0xf8)+'d\x20=\x20?'},_0x4ed9b5=this[_0x36b546(0x1bc,0x335)](_0xce3ba4['dNqWH'],_0xce3ba4[_0x1ebcb5(0x3f3,0x4b7)])[_0x36b546(0x370,0x17a)](_0x1afe1d);if(!_0x4ed9b5)return null;function _0x36b546(_0x21ae27,_0x50bfe4){return _0x410919(_0x50bfe4,_0x21ae27-0xd2);}function _0x1ebcb5(_0x14110b,_0x1a18bb){return _0x410919(_0x1a18bb,_0x14110b-0xca);}return this[_0x1ebcb5(-0xaf,-0x30)+'y'](_0x4ed9b5);}[_0x180951(-0x61,0xdf)+'ss'](_0x46447b){function _0x387ab8(_0x5e03c5,_0x31b5a5){return _0x410919(_0x31b5a5,_0x5e03c5-0x47d);}const _0x3a3ad6={'sarMa':_0x4cc42b(0x20e,0x5),'hBwDe':_0x4cc42b(-0x40,0x4f)+_0x387ab8(0x7c6,0x83d)+_0x387ab8(0x586,0x57b)+_0x4cc42b(-0x249,-0x14f)+_0x4cc42b(-0x360,-0x22d)+_0x4cc42b(-0x1f0,-0x143)+_0x387ab8(0x4bf,0x341)+_0x387ab8(0x658,0x3c8)+_0x387ab8(0x458,0x30b)+_0x4cc42b(-0x14d,-0xd9)};function _0x4cc42b(_0x666cf7,_0x5c0d2e){return _0x410919(_0x666cf7,_0x5c0d2e- -0xe3);}this[_0x387ab8(0x567,0x2ee)](_0x3a3ad6['sarMa'],_0x3a3ad6[_0x387ab8(0x383,0x144)])[_0x387ab8(0x4a0,0x6b1)](_0x46447b);}[_0x410919(0x1fa,0x207)+'ry'](_0xf88cd4,_0x45874e){const _0x2126a0={'DAvXM':'ALTER\x20TABL'+'E\x20memories'+_0x517456(0xaf,0x32d)+'N\x20chunk_to'+_0x517456(-0xc5,-0xe6)+'R','uUqTf':_0x2075ca(0x4a,-0x97),'Loqva':_0x2075ca(0x71,0x1db),'WUXJz':function(_0x5121d1,_0x12a0ab){return _0x5121d1!==_0x12a0ab;},'kMNGY':function(_0x4015ed,_0x49ef9f){return _0x4015ed===_0x49ef9f;},'RKlnP':_0x517456(0x22b,0x31e),'qZVgA':_0x517456(-0x249,-0x76)+'\x20?','KPrhB':_0x2075ca(0x309,0x26b),'qecUq':'project_pa'+_0x517456(0x3dc,0x3d0),'NNuDd':function(_0x599484,_0x1a869e){return _0x599484===_0x1a869e;},'eyJWC':'LqlZL','oDveM':_0x2075ca(0x3b4,0x25e)+_0x517456(0x499,0x1f5),'rhKOn':function(_0x1ceb4f,_0x1cdeb0){return _0x1ceb4f!==_0x1cdeb0;},'Bjkqt':function(_0x51f1a9,_0x5d6b72){return _0x51f1a9!==_0x5d6b72;},'kSQsN':_0x2075ca(0x240,0x101),'IPqLA':'DELETE\x20FRO'+_0x517456(-0x189,0xd8)+_0x517456(0x482,0x3c6)+_0x2075ca(-0x3e,0xf5)+_0x2075ca(0x100,0x33a),'crhuZ':'insert_tag','PpGqn':'INSERT\x20INT'+_0x517456(0x1f3,0x21)+_0x517456(0x62,-0xc9)+_0x517456(0x10d,-0xd8)+_0x2075ca(0x314,0x1e1)+_0x2075ca(0xd8,0x21d),'kfhSK':function(_0x4e238a,_0x7dc27a){return _0x4e238a!==_0x7dc27a;},'CEfrw':_0x2075ca(0x3f9,0x17d),'MaStW':'UPDATE\x20mem'+_0x517456(0x308,0x1f2)+_0x517456(0x238,0x1a8)+'=\x20?\x20WHERE\x20'+'rowid\x20=\x20?'},_0x2022c5=this[_0x2075ca(0x251,0x4ad)](_0x2126a0[_0x517456(0x193,0x348)],'SELECT\x20*\x20F'+'ROM\x20memori'+_0x517456(-0xbc,-0x14a)+_0x2075ca(-0x3,0x17c))[_0x2075ca(0x405,0x60f)](_0xf88cd4);if(!_0x2022c5)return null;function _0x2075ca(_0x39f81e,_0xf0fdaa){return _0x410919(_0xf0fdaa,_0x39f81e-0x167);}const _0x15ebd1=[_0x2075ca(0x3fd,0x1df)+_0x517456(-0x419,-0x180)+_0x517456(0x5b0,0x36d)],_0x1fd001=[];_0x2126a0[_0x517456(-0x149,0xd9)](_0x45874e[_0x2075ca(0x1ce,-0x89)],undefined)&&(_0x2126a0[_0x2075ca(0xf6,-0x100)](_0x2126a0[_0x2075ca(0x3bb,0x325)],_0x2075ca(0x464,0x5d9))?(_0x15ebd1[_0x2075ca(-0x2b,0x139)]('content\x20=\x20'+'?'),_0x1fd001['push'](_0x45874e[_0x2075ca(0x1ce,0x36e)])):this['db'][_0x517456(0x32b,0x2ed)](AGcKDe[_0x517456(0x198,-0xf9)]));_0x45874e[_0x2075ca(0x12a,-0x91)]!==undefined&&(_0x15ebd1[_0x517456(0x13d,-0x171)](_0x2126a0[_0x517456(0x28a,0x2f8)]),_0x1fd001[_0x2075ca(-0x2b,-0x245)](_0x45874e[_0x2075ca(0x12a,0xb8)]));_0x45874e[_0x517456(0x296,0x23)]!==undefined&&(_0x15ebd1['push'](_0x2126a0[_0x2075ca(0x2f,-0x1db)]),_0x1fd001[_0x2075ca(-0x2b,0x15f)](_0x45874e[_0x2075ca(0x169,-0x125)]));_0x45874e[_0x2075ca(0x4d8,0x268)+'h']!==undefined&&(_0x15ebd1[_0x2075ca(-0x2b,0x42)](_0x2126a0[_0x517456(0xf0,-0x3c)]),_0x1fd001[_0x517456(-0x1a7,-0x171)](_0x45874e[_0x517456(0x419,0x392)+'h']));_0x2126a0[_0x2075ca(0x21f,0x7f)](_0x45874e[_0x2075ca(0x219,0x3ca)],undefined)&&(_0x2126a0[_0x517456(0x29c,0x46)](_0x517456(0x13a,0x17a),_0x2126a0['eyJWC'])?_0x50402b=_0x170904[_0x2075ca(0x47d,0x26c)](_0x117245(_0x44b341[_0x517456(0x396,0x14c)])):(_0x15ebd1[_0x2075ca(-0x2b,0x1f1)](_0x2126a0['oDveM']),_0x1fd001['push'](_0x45874e[_0x2075ca(0x219,0x2a2)])));_0x1fd001[_0x2075ca(-0x2b,-0x235)](_0xf88cd4),this['db'][_0x2075ca(0x300,0x4b6)]('UPDATE\x20mem'+'ories\x20SET\x20'+_0x15ebd1[_0x2075ca(0x507,0x767)](',\x20')+(_0x2075ca(0x517,0x42a)+'=\x20?'))[_0x2075ca(0x18a,0x1b)](..._0x1fd001);if(_0x2126a0[_0x2075ca(0x41d,0x26d)](_0x45874e[_0x517456(0x99,0xea)],undefined)){if(_0x2126a0[_0x2075ca(0x39e,0x4a0)](_0x2126a0[_0x517456(0x431,0x2fc)],_0x517456(0x363,0xfa)))this[_0x2075ca(0x251,0xa2)](_0x2126a0[_0x517456(0x4b9,0x3b2)],'DELETE\x20FRO'+'M\x20memory_f'+_0x2075ca(0x35b,0x5bb)+'owid\x20=\x20?')[_0x2075ca(0x18a,0x46)](_0xb61c24);else{this[_0x2075ca(0x251,0x1e4)](_0x2075ca(0x2,0x288)+'s',_0x2126a0[_0x517456(0x82,0x99)])[_0x2075ca(0x18a,-0x6e)](_0xf88cd4);const _0x1a7f91=this[_0x2075ca(0x251,0x11e)](_0x2126a0[_0x517456(0x463,0x244)],_0x2126a0[_0x517456(0x152,0x3ac)]);for(const _0x1c7e6b of _0x45874e[_0x517456(-0xb9,0xea)]){_0x1a7f91['run'](_0xf88cd4,_0x1c7e6b);}}}if(_0x45874e[_0x2075ca(0x1ce,0x18a)]!==undefined){const _0x18c530=this['getRowId'](_0xf88cd4);_0x2126a0['kfhSK'](_0x18c530,null)&&this[_0x2075ca(0x251,0x490)](_0x2126a0[_0x2075ca(0x2a4,0x26e)],_0x2126a0['MaStW'])[_0x2075ca(0x18a,0xf5)](_0x45874e[_0x517456(-0x77,0x88)],_0x18c530);}const _0x34b6ab=this[_0x517456(0x32e,0x10b)](_0x2126a0[_0x2075ca(0x48e,0x4fd)],_0x517456(-0x4b,-0xcb)+_0x2075ca(0x46a,0x67a)+_0x2075ca(-0x4,0xc6)+_0x2075ca(-0x3,0x28a))[_0x2075ca(0x405,0x624)](_0xf88cd4);if(!_0x34b6ab)return null;function _0x517456(_0x2c36ad,_0x59e0e9){return _0x410919(_0x2c36ad,_0x59e0e9-0x21);}return this[_0x2075ca(-0x12,0x14a)+'y'](_0x34b6ab);}[_0x410919(-0x2d,0x1bf)+'ry'](_0x52e098){function _0x5fb786(_0x339fea,_0x14108c){return _0x180951(_0x339fea,_0x14108c-0x447);}const _0x4f3868={'idREQ':_0x1f5b1c(0x729,0x4ef),'ZacRa':'DELETE\x20FRO'+_0x5fb786(0x5f3,0x639)+_0x5fb786(0x450,0x5b7)+_0x5fb786(0x34d,0x35a),'EGxHH':function(_0x138979,_0x208f68){return _0x138979>_0x208f68;}};function _0x1f5b1c(_0x3fe923,_0x2cbfb1){return _0x180951(_0x3fe923,_0x2cbfb1-0x690);}this[_0x1f5b1c(0x95e,0x750)+'ne'](_0x52e098);const _0x4b2aae=this[_0x1f5b1c(0x69d,0x931)](_0x52e098);_0x4b2aae!==null&&this[_0x5fb786(0x511,0x4ad)](_0x4f3868[_0x5fb786(0x798,0x60d)],_0x4f3868[_0x1f5b1c(0x634,0x46d)])['run'](_0x4b2aae);const _0x1db1d8=this[_0x5fb786(0x25b,0x4ad)]('delete_mem'+_0x5fb786(0x2c5,0x35d),_0x5fb786(0x366,0x452)+_0x5fb786(0x652,0x680)+'\x20WHERE\x20id\x20'+'=\x20?')[_0x5fb786(0x19c,0x3e6)](_0x52e098);return _0x4f3868['EGxHH'](_0x1db1d8['changes'],0x0);}['countMemor'+'ies'](_0x576d9c){const _0x12ff26={'lCwwN':function(_0x4098cb,_0x411e9d){return _0x4098cb(_0x411e9d);},'hFena':_0x4b7174(0x4df,0x29f)+_0x4b7174(0x87d,0x7c8),'mMSlb':_0x4b7174(0x70e,0x45c)+'F','JDAOn':_0x4b7174(0x6e9,0x773)+_0x4b7174(0x594,0x50d)+_0x4b7174(0x55b,0x350)+_0x4b7174(0x675,0x916)+'ve\x20binding'+'.','yOaEb':'[a2a]\x20\x20\x20or'+':\x20cd\x20~/.nv'+'m/versions'+_0x334c4a(0x4f2,0x46f)+_0x4b7174(0x7f6,0x9b2)+'node_modul'+_0x334c4a(0x501,0x32a)+_0x334c4a(0x526,0x66c)+_0x334c4a(0x2c3,0x322)+'etter-sqli'+'te3','udzFQ':_0x334c4a(0x366,0x2e2)+'on','HuFSR':function(_0x58f9ec,_0x1a87ec){return _0x58f9ec!==_0x1a87ec;},'DNriO':'evTGj','zjFXT':function(_0x2cc032,_0x4b202c){return _0x2cc032!==_0x4b202c;},'hutwC':'AmDOY','tQPwK':_0x334c4a(0x5f8,0x401),'iMBxf':_0x4b7174(0x40a,0x57c)};function _0x334c4a(_0x3891c,_0x22a34c){return _0x410919(_0x22a34c,_0x3891c-0x272);}const _0x3ffa71=[],_0x1a3ea7=[];function _0x4b7174(_0x115ed7,_0xe30142){return _0x410919(_0xe30142,_0x115ed7-0x4e8);}if(_0x576d9c?.[_0x334c4a(0x235,-0x20)]){if(_0x12ff26[_0x334c4a(0x582,0x72e)](_0x12ff26[_0x4b7174(0x415,0x614)],'evTGj')){const _0x786d2a=_0x313de2 instanceof _0x1f183b?_0x126b41[_0x4b7174(0x780,0x8b9)]:GeXALB[_0x4b7174(0x5a9,0x5ea)](_0x192cb0,_0x16e00d),_0x4eb032=_0x786d2a[_0x334c4a(0x525,0x772)]('NODE_MODUL'+_0x4b7174(0x3fd,0x3d0))||_0x786d2a[_0x4b7174(0x79b,0x510)](GeXALB[_0x334c4a(0x4b7,0x281)])||_0x786d2a['includes']('cannot\x20ope'+'n\x20shared\x20o'+'bject')||_0x786d2a['includes'](GeXALB[_0x4b7174(0x445,0x36f)])||_0x786d2a[_0x4b7174(0x79b,0x917)](_0x4b7174(0x4b1,0x5ad));if(_0x4eb032){_0x3f0bba[_0x334c4a(0x241,0x402)](GeXALB[_0x4b7174(0x847,0x7d5)]),_0x211456[_0x334c4a(0x241,0x203)]('[a2a]\x20This'+_0x334c4a(0x57f,0x774)+_0x4b7174(0x864,0x5b5)+_0x4b7174(0x7cf,0x78c)+_0x4b7174(0x375,0x16f)+'n\x20has\x20chan'+_0x4b7174(0x758,0x4aa)),_0x26560c['error'](_0x4b7174(0x88b,0x877)+_0x4b7174(0x500,0x442)+_0x334c4a(0x118,0x29f)+'sqlite3'),_0x5d8c97[_0x4b7174(0x4b7,0x756)](GeXALB[_0x4b7174(0x476,0x291)]);throw new _0x2339b9('[a2a]\x20bett'+_0x4b7174(0x51f,0x36b)+'\x20native\x20bi'+_0x334c4a(0x261,0x50c)+'\x20failed.\x20R'+_0x334c4a(0x5d9,0x694)+_0x334c4a(0x5aa,0x30e)+'er-sqlite3'+_0x4b7174(0x566,0x645)+_0x334c4a(0x38c,0x103)+_0x786d2a);}throw _0x414cdf;}else _0x3ffa71[_0x334c4a(0xe0,0x2b4)]('category\x20='+'\x20?'),_0x1a3ea7[_0x4b7174(0x356,0x397)](_0x576d9c[_0x4b7174(0x4ab,0x4df)]);}_0x576d9c?.[_0x334c4a(0x274,0x3d5)]&&(_0x3ffa71[_0x4b7174(0x356,0x24b)](_0x334c4a(0x414,0x50f)),_0x1a3ea7[_0x334c4a(0xe0,0x21)](_0x576d9c[_0x334c4a(0x274,0x17a)]));_0x576d9c?.['projectPat'+'h']&&(_0x12ff26[_0x334c4a(0x136,0x2a2)](_0x12ff26[_0x4b7174(0x3ba,0x1c6)],_0x12ff26[_0x334c4a(0x46a,0x3ed)])?(_0x3ffa71[_0x4b7174(0x356,0x3da)]('project_pa'+_0x4b7174(0x897,0x813)),_0x1a3ea7[_0x4b7174(0x356,0x3b0)](_0x576d9c['projectPat'+'h'])):this[_0x334c4a(0x35c,0x5c9)](_0x12ff26[_0x334c4a(0x3ac,0x455)],_0x4b7174(0x483,0x451)+_0x334c4a(0x5f6,0x47b)+_0x334c4a(0x202,-0x39)+'sessions\x20('+_0x334c4a(0x4bf,0x3a4)+_0x334c4a(0x27a,0x485)+_0x334c4a(0x499,0x202)+_0x4b7174(0x585,0x54a)+_0x334c4a(0x4af,0x709)+_0x4b7174(0x3e2,0x31f)+'\x20VALUES\x20(?'+_0x4b7174(0x5e4,0x6d6)+_0x334c4a(0x3b9,0x1e3)+_0x334c4a(0x126,0x272))[_0x334c4a(0x295,0x2b1)](_0x5703b3,_0x1ec575,_0x48b27b));const _0x45cc67=_0x3ffa71['length']>0x0?'WHERE\x20'+_0x3ffa71[_0x334c4a(0x612,0x656)](_0x12ff26[_0x334c4a(0x4f5,0x38c)]):'',_0x36e677=this['db'][_0x334c4a(0x40b,0x280)](_0x334c4a(0x33f,0x136)+_0x4b7174(0x4a1,0x30e)+'ount\x20FROM\x20'+_0x4b7174(0x487,0x2bc)+_0x45cc67)['get'](..._0x1a3ea7);return _0x36e677['count'];}[_0x180951(0xd9,0xe7)+'es'](_0x2012e9){const _0x11ab32={'cTjGU':_0x12d5f3(0x591,0x51c)+'\x20?','aVzHg':'tier\x20=\x20?','ZweEA':function(_0x1b34af,_0x10bd0e){return _0x1b34af!==_0x10bd0e;},'KYLJg':function(_0x10cdaa,_0x1ef319){return _0x10cdaa>_0x1ef319;},'hBNSG':_0x42d919(0x2fb,0x536)},_0x3eac1f=[],_0xacbc3=[];_0x2012e9?.['category']&&(_0x3eac1f['push'](_0x11ab32[_0x12d5f3(0x728,0x4ba)]),_0xacbc3['push'](_0x2012e9['category']));_0x2012e9?.[_0x12d5f3(0x62a,0x3cd)]&&(_0x3eac1f[_0x12d5f3(0x496,0x24e)](_0x11ab32[_0x12d5f3(0x90d,0xac6)]),_0xacbc3[_0x12d5f3(0x496,0x270)](_0x2012e9[_0x42d919(0x3db,0x67d)]));if(_0x2012e9?.[_0x12d5f3(0x999,0x721)+'h']){if(_0x11ab32[_0x42d919(0x2ff,0x105)](_0x42d919(0x265,0x15),_0x42d919(0x265,0x36a))){const _0x55bf69=this['db'][_0x42d919(0x572,0x3f1)]('SELECT\x20id,'+_0x12d5f3(0x6e3,0x67d)+'keywords,\x20'+_0x12d5f3(0x92f,0xb56)+_0x42d919(0x5e2,0x4aa)+_0x12d5f3(0x754,0x9a5)+'logs\x20WHERE'+_0x42d919(0x6ed,0x586)+_0x12d5f3(0x9df,0x821)+_0x12d5f3(0x949,0x776)+'ed_at\x20DESC'+_0x42d919(0x565,0x715))[_0x12d5f3(0x8c6,0x83a)](_0x3a0137);if(!_0x55bf69)return null;return{'id':_0x55bf69['id'],'injectedKeywords':_0x55bf69['injected_k'+_0x12d5f3(0x6ad,0x40d)],'totalInjected':_0x55bf69['total_inje'+'cted']};}else _0x3eac1f[_0x12d5f3(0x496,0x537)]('project_pa'+'th\x20=\x20?'),_0xacbc3['push'](_0x2012e9['projectPat'+'h']);}_0x2012e9?.[_0x42d919(0x5bb,0x6c8)+_0x42d919(0x402,0x350)]&&_0x3eac1f[_0x42d919(0x247,0x2e6)](_0x42d919(0x252,0x22f)+_0x12d5f3(0x833,0xa10)+_0x42d919(0x383,0x53a)+'ent_id\x20IS\x20'+'NULL\x20AND\x20c'+_0x12d5f3(0x771,0x734)+_0x42d919(0x366,0x38f));function _0x12d5f3(_0x3ea0fb,_0x27d65b){return _0x180951(_0x27d65b,_0x3ea0fb-0x6ac);}function _0x42d919(_0x8094e1,_0x39d29d){return _0x180951(_0x39d29d,_0x8094e1-0x45d);}const _0x5455d4=_0x11ab32['KYLJg'](_0x3eac1f[_0x42d919(0x462,0x4d0)],0x0)?_0x12d5f3(0x60b,0x872)+_0x3eac1f[_0x42d919(0x779,0x7c0)](_0x11ab32['hBNSG']):'',_0x184e2f=_0x2012e9?.[_0x12d5f3(0x9e0,0xac8)]??0x32,_0x48def7=_0x2012e9?.[_0x42d919(0x580,0x342)]??0x0,_0x5eafa8=this['db'][_0x42d919(0x572,0x42d)](_0x12d5f3(0x53c,0x2ea)+_0x42d919(0x6dc,0x490)+'es\x20'+_0x5455d4+(_0x42d919(0x5dc,0x444)+_0x12d5f3(0x8be,0x8b0)+_0x42d919(0x699,0x746)+_0x42d919(0x42e,0x1a6)+'\x20?'))[_0x12d5f3(0x9a7,0x8ac)](..._0xacbc3,_0x184e2f,_0x48def7);return this[_0x12d5f3(0x66d,0x6b5)+_0x42d919(0x483,0x5ea)](_0x5eafa8);}['searchByFT'+'S'](_0x11b9d0,_0x54a6ab=0xa,_0x3f159b){const _0x1f7c67={'cNrVt':_0x4c1973(0x475,0x3f1)+'\x20MATCH\x20?','NujgU':_0x2edc49(0x3e3,0x5a4)+_0x4c1973(0x3ee,0x367),'KxjkW':_0x2edc49(0x208,0x49f)+'\x20=\x20?','BjUWE':_0x4c1973(0xbf,0x1aa)},_0x1448d5=[_0x1f7c67['cNrVt'],_0x2edc49(0x11b,0x29a)+_0x4c1973(0x481,0x552)+_0x2edc49(0x3f0,0x288)+'.parent_id'+_0x2edc49(0x2bb,0x10f)+_0x2edc49(0x310,0xc1)+_0x4c1973(0x375,0x296)+'NULL))'],_0x18f8b0=[_0x11b9d0];_0x3f159b?.[_0x2edc49(0x2e6,0x58e)+'h']&&(_0x1448d5[_0x2edc49(-0x66,0x8b)](_0x1f7c67[_0x2edc49(0x3ff,0x318)]),_0x18f8b0[_0x2edc49(0x2b,0x8b)](_0x3f159b[_0x2edc49(0x3e2,0x58e)+'h']));_0x3f159b?.[_0x2edc49(0x47e,0x1e0)]&&(_0x1448d5[_0x2edc49(0x169,0x8b)](_0x1f7c67[_0x4c1973(0x688,0x530)]),_0x18f8b0[_0x4c1973(0x391,0xf6)](_0x3f159b[_0x4c1973(0x443,0x24b)]));_0x3f159b?.[_0x2edc49(0x3e4,0x21f)]&&(_0x1448d5[_0x2edc49(0x18e,0x8b)]('m.tier\x20=\x20?'),_0x18f8b0[_0x2edc49(0x1f8,0x8b)](_0x3f159b['tier']));function _0x2edc49(_0x573fe6,_0x1ba0f2){return _0x410919(_0x573fe6,_0x1ba0f2-0x21d);}_0x18f8b0[_0x4c1973(0x1a7,0xf6)](_0x54a6ab);const _0x138c4e=_0x2edc49(0x6fb,0x55e)+_0x2edc49(0x3b3,0x536)+_0x4c1973(0x4a0,0x3d4)+_0x4c1973(0x417,0x4fe)+_0x4c1973(0x7d8,0x5dd)+_0x4c1973(0xbb,0x2eb)+_0x4c1973(0x94,0x13a)+_0x4c1973(0x44e,0x2e8)+_0x2edc49(0x659,0x59e)+_0x2edc49(0x2,0x1ef)+_0x4c1973(0x571,0x3df)+_0x1448d5[_0x4c1973(0x580,0x628)](_0x1f7c67['BjUWE'])+(_0x4c1973(0x48a,0x23d)+_0x2edc49(0x3a6,0xfe)+_0x4c1973(0x6b6,0x52b)+_0x4c1973(0x7df,0x592));function _0x4c1973(_0x1b3bbd,_0x2710af){return _0x410919(_0x1b3bbd,_0x2710af-0x288);}const _0xf95434=this['db'][_0x4c1973(0x663,0x421)](_0x138c4e)[_0x4c1973(0x5c1,0x607)](..._0x18f8b0),_0x1463ba=this[_0x2edc49(0x4ea,0x262)+_0x4c1973(0x1fd,0x332)](_0xf95434);return _0xf95434[_0x4c1973(0x302,0x422)]((_0xfec9d3,_0x4c53eb)=>({'memory':_0x1463ba[_0x4c53eb],'score':Math['min'](0x1,Math[_0x2edc49(0x421,0x4f3)](0x0,0x1+_0xfec9d3[_0x4c1973(0x176,0x28f)]/0xa)),'matchType':_0x2edc49(0x40e,0x381)}));}['searchByVe'+_0x410919(-0x56,-0x19b)](_0x16a99b,_0x2b8faa=0xa,_0x27cc70=0.5,_0x2ba2d4){const _0x152797={'WOjwd':'SELECT\x20*\x20F'+_0x1effd4(0x62c,0x5a5)+_0xab011a(0x42,0x279)+'mbedding\x20I'+_0xab011a(0x1f2,0x67)+_0xab011a(0x2ab,0x275)+_0x1effd4(0x3db,0x523)+_0x1effd4(0x709,0x60c)+'ent_id\x20IS\x20'+_0xab011a(0x37d,0x397)+_0xab011a(0x427,0x5a6)+_0x1effd4(0x602,0x52f)+'\x20AND\x20chunk'+_0xab011a(0xf1,0x2a2)+_0xab011a(0x289,0x3fb)+_0x1effd4(0x138,0x2bb),'LWsub':_0x1effd4(0x2ad,0x3be)+_0xab011a(0x234,0x91)};function _0xab011a(_0x44dca2,_0x17a9f2){return _0x180951(_0x17a9f2,_0x44dca2-0x167);}const _0x143846=_0x2ba2d4?this[_0xab011a(0x1cd,-0x56)](_0x1effd4(0x36d,0x3be)+_0xab011a(0x2f5,0xee)+'t',_0x152797['WOjwd'])[_0x1effd4(0x754,0x621)](_0x2ba2d4):this[_0x1effd4(0x579,0x38c)](_0x152797[_0xab011a(0x38e,0x3a7)],_0x1effd4(0x19d,0x1b6)+_0x1effd4(0x75d,0x5a5)+'es\x20WHERE\x20e'+_0x1effd4(0x60e,0x368)+_0x1effd4(0x631,0x3b1)+_0xab011a(0x12,0x216)+_0x1effd4(0x1ed,0xfc)+_0x1effd4(0x28b,0x337)+_0x1effd4(0x58c,0x63d)+_0xab011a(0x1e9,-0x32)+_0xab011a(0x17d,-0xa7)+'total\x20IS\x20N'+_0xab011a(0x6f,0x2f7)+_0x1effd4(0x280,0x132))[_0xab011a(0x462,0x3e4)](),_0x5eceed=_0x143846[_0x1effd4(0x6dc,0x43c)](_0x4feaad=>{const _0x30b728=bufferToFloat32Array(_0x4feaad[_0x1b3d88(0x4f0,0x63a)]);function _0x1b3d88(_0x4f4afb,_0x2593e5){return _0xab011a(_0x4f4afb-0x2e2,_0x2593e5);}const _0x5998a1=_0x4f60df(_0x16a99b,Array['from'](_0x30b728));return{'row':_0x4feaad,'similarity':_0x5998a1};})['filter'](_0x4ea5b5=>_0x4ea5b5[_0xab011a(0x3e9,0x1dc)]>=_0x27cc70)[_0x1effd4(0x47f,0x5a4)]((_0x404116,_0x103ee7)=>_0x103ee7[_0x1effd4(0x5db,0x5a8)]-_0x404116['similarity'])[_0x1effd4(0x26c,0x218)](0x0,_0x2b8faa),_0x54242a=this[_0x1effd4(0x270,0x2e7)+_0x1effd4(0x50f,0x34c)](_0x5eceed[_0x1effd4(0x69c,0x43c)](_0x261103=>_0x261103[_0xab011a(0x1d0,0x9f)]));function _0x1effd4(_0x21430d,_0x4d8d83){return _0x180951(_0x21430d,_0x4d8d83-0x326);}return _0x5eceed[_0x1effd4(0x6bf,0x43c)]((_0x80c961,_0x12d936)=>({'memory':_0x54242a[_0x12d936],'score':_0x80c961[_0xab011a(0x3e9,0x1cb)],'matchType':_0x1effd4(0x531,0x3d0)}));}['search'](_0x5336d7){const _0x1c0747={'IUlTy':function(_0x34436d,_0x258bb8){return _0x34436d<_0x258bb8;}};function _0x5a9f88(_0x59098f,_0x31a996){return _0x410919(_0x31a996,_0x59098f-0xc9);}const _0x2e4882=_0x5336d7[_0x5a9f88(0x481,0x317)]??0xa,_0x47c80a=[];try{const _0x311da3=this['searchByFT'+'S'](_0x5336d7[_0x5a9f88(-0x2f,0x6d)],_0x2e4882,{'projectPath':_0x5336d7[_0x357f38(0x79c,0x6cc)+'h'],'category':_0x5336d7[_0x5a9f88(0x8c,0x23c)],'tier':_0x5336d7['tier']});_0x47c80a[_0x357f38(0x241,0x1c9)](..._0x311da3);}catch{}const _0x11ebe8=_0x47c80a[_0x357f38(0x572,0x5d0)](_0x5b2389=>{function _0x582cc4(_0x5a4e29,_0xd73f9){return _0x357f38(_0xd73f9,_0x5a4e29-0x1f2);}if(_0x5336d7['minScore']&&_0x1c0747[_0x582cc4(0x8b2,0x78e)](_0x5b2389[_0x7bbdfb(0x2fb,0x295)],_0x5336d7[_0x7bbdfb(0x114,0x2e8)]))return![];function _0x7bbdfb(_0x334df5,_0x5a131b){return _0x357f38(_0x5a131b,_0x334df5- -0x191);}return!![];});function _0x357f38(_0x319d3f,_0x49bf88){return _0x410919(_0x319d3f,_0x49bf88-0x35b);}const _0x3fc450=new Set();return _0x11ebe8['filter'](_0x116282=>{function _0x50d18c(_0x3a176b,_0x2b7a49){return _0x5a9f88(_0x3a176b-0x298,_0x2b7a49);}if(_0x3fc450[_0x50d18c(0x299,0x485)](_0x116282[_0x50d18c(0x4d0,0x2d7)]['id']))return![];function _0x203287(_0x43be47,_0x1bcdde){return _0x5a9f88(_0x1bcdde-0x2fb,_0x43be47);}return _0x3fc450[_0x50d18c(0x511,0x585)](_0x116282['memory']['id']),!![];})[_0x5a9f88(0x3f,0x22)](0x0,_0x2e4882);}[_0x410919(0x292,0x57)+'n'](_0x5e8e70,_0x40bd2f,_0x5a0371){function _0x31201c(_0x40bb91,_0x544cf4){return _0x180951(_0x544cf4,_0x40bb91- -0xc8);}function _0x2a61df(_0xeb0f0f,_0x3b43e0){return _0x180951(_0xeb0f0f,_0x3b43e0- -0x41);}this[_0x31201c(-0x62,-0x2ab)]('save_sessi'+'on',_0x2a61df(-0x1a8,-0x12a)+'ERT\x20OR\x20REP'+_0x31201c(-0x1bc,-0x13)+_0x31201c(-0x294,-0x281)+_0x2a61df(-0xa0,0x188)+_0x2a61df(-0x152,-0xbd)+_0x2a61df(0x248,0x162)+_0x31201c(-0xaf,-0x8)+_0x2a61df(0x1fd,0x178)+_0x31201c(-0x252,-0x109)+_0x31201c(0x61,0x190)+_0x2a61df(0x232,0x37)+'tetime(\x27no'+_0x2a61df(-0x447,-0x211))[_0x2a61df(-0x8e,-0xa2)](_0x5e8e70,_0x40bd2f,_0x5a0371);}[_0x180951(0x3f5,0x324)](_0x3263ee){function _0x327bdf(_0x510c85,_0x1d064f){return _0x180951(_0x1d064f,_0x510c85- -0xdd);}const _0x4b0624={'wBfPq':'get_sessio'+'n'};function _0x213677(_0x282d01,_0x372463){return _0x180951(_0x282d01,_0x372463-0x391);}const _0x388382=this[_0x213677(0x18a,0x3f7)](_0x4b0624[_0x213677(0x548,0x564)],_0x327bdf(-0x24d,-0x41a)+_0x213677(0x815,0x597)+_0x327bdf(0x1f5,0xbf)+'ession_id\x20'+_0x213677(0x137,0x2a6))[_0x213677(0x541,0x5ab)](_0x3263ee);if(!_0x388382)return null;return{'sessionId':_0x388382['session_id'],'projectPath':_0x388382[_0x327bdf(-0xbc,0x143)+'th'],'messageCount':_0x388382[_0x213677(0x308,0x3c6)+'unt'],'processedAt':_0x388382[_0x213677(0x8b3,0x65f)+'at']};}['getSession'+'Count'](_0x4159cc){const _0xb64e79={'eUVUK':_0x4d2f84(0x57d,0x814)+_0x503e45(0x26e,0x4c1)+_0x503e45(0x55b,0x512)+'ssions\x20WHE'+_0x503e45(0x539,0x4d9)+'_path\x20=\x20?','fRUaG':'count_sess'+_0x503e45(0x10e,-0x18b),'NHOoJ':_0x503e45(0x382,0x54e)+_0x503e45(0x26e,0x3c2)+_0x4d2f84(0x756,0x8a7)+_0x4d2f84(0x527,0x3f8)};if(_0x4159cc){const _0x6de3f3=this[_0x503e45(0x39f,0x361)]('count_sess'+_0x4d2f84(0x65f,0x41a)+'ct',_0xb64e79[_0x4d2f84(0x628,0x701)])[_0x503e45(0x553,0x2be)](_0x4159cc);return _0x6de3f3?.[_0x4d2f84(0x6d9,0x685)]??0x0;}function _0x503e45(_0x46158b,_0x3a4170){return _0x180951(_0x3a4170,_0x46158b-0x339);}const _0x29e1a=this[_0x503e45(0x39f,0x4fc)](_0xb64e79[_0x4d2f84(0x48e,0x5dc)],_0xb64e79[_0x4d2f84(0x5e6,0x64d)])[_0x503e45(0x553,0x4ef)]();function _0x4d2f84(_0x64589c,_0x285e56){return _0x180951(_0x285e56,_0x64589c-0x534);}return _0x29e1a?.[_0x4d2f84(0x6d9,0x7bc)]??0x0;}[_0x180951(0x1e0,-0x79)](){const _0x156e51={'bvNqI':_0x8a67e0(0x27b,0x184)+_0x8a67e0(0x167,-0xf0)+_0xd04b0f(0x75e,0x6f3)+'memories','SHIxe':'count_sess'+_0xd04b0f(0x53b,0x5a0),'CegQH':_0xd04b0f(0x608,0x5e9)+'NT(*)\x20as\x20c'+_0xd04b0f(0x6b7,0x6f3)+_0x8a67e0(0x4f,-0xd4),'QXaoe':function(_0x32ac86,_0x186a0b){return _0x32ac86===_0x186a0b;},'Matcn':_0xd04b0f(0x72c,0x56a)},_0x4f151d=this['stmt']('count_memo'+_0xd04b0f(0x6cf,0x5c6),_0x156e51['bvNqI'])[_0xd04b0f(0x560,0x7ba)]()[_0x8a67e0(0x325,0x248)];function _0xd04b0f(_0xe083a5,_0x5936bf){return _0x410919(_0xe083a5,_0x5936bf-0x51c);}function _0x8a67e0(_0x21d9d7,_0x47eb3a){return _0x410919(_0x47eb3a,_0x21d9d7-0x1ae);}const _0x53a1e9=this[_0x8a67e0(0x298,0x1fe)](_0x156e51['SHIxe'],_0x156e51[_0xd04b0f(0x624,0x3b8)])[_0xd04b0f(0x940,0x7ba)]()[_0xd04b0f(0x49d,0x693)];let _0x120cf4=0x0;try{if(_0x156e51[_0x8a67e0(0x21b,-0x25)](_0x156e51['Matcn'],_0x8a67e0(0x1fc,0x209)))_0x120cf4=statSync(this[_0xd04b0f(0x3bd,0x5cb)])[_0xd04b0f(0x27f,0x441)];else{if(_0x2ae776['minScore']&&_0x462a49[_0xd04b0f(0x4bc,0x64d)]<_0x21c755[_0x8a67e0(0xf8,-0x19)])return![];return!![];}}catch{}const _0x4e6a8d=this[_0xd04b0f(0x82a,0x606)]('category_c'+_0x8a67e0(0x285,0x225),'SELECT\x20cat'+_0xd04b0f(0x555,0x71a)+'NT(*)\x20as\x20c'+_0xd04b0f(0x707,0x6f3)+_0xd04b0f(0x76a,0x53a)+_0xd04b0f(0x5cc,0x6a7)+'tegory')[_0x8a67e0(0x52d,0x596)](),_0x45f449={};for(const _0x3435b0 of _0x4e6a8d){_0x45f449[_0x3435b0['category']]=_0x3435b0['count'];}return{'totalMemories':_0x4f151d,'totalSessions':_0x53a1e9,'dbSizeBytes':_0x120cf4,'categoryCounts':_0x45f449};}[_0x410919(-0x48,-0x195)+_0x410919(0x354,0x2f6)](){function _0x898468(_0x5efd4f,_0x225f31){return _0x410919(_0x225f31,_0x5efd4f- -0x4b);}function _0x42a2dd(_0x30b8b5,_0xf29a39){return _0x410919(_0xf29a39,_0x30b8b5-0x111);}try{const _0x2bb060=this['db'][_0x898468(-0x139,-0x280)](_0x898468(0x291,0x72)+'k');return _0x2bb060[_0x42a2dd(0x19a,0xf)]>0x0&&_0x2bb060[0x0]['quick_chec'+'k']==='ok';}catch{return![];}}['vacuum'](){const _0x38ab73={'sbMwu':_0xfa7bc3(0x5a9,0x417)};function _0xfa7bc3(_0xc44bb2,_0x1a2175){return _0x410919(_0x1a2175,_0xc44bb2-0x3a5);}function _0x40d324(_0x474465,_0x49d147){return _0x410919(_0x49d147,_0x474465-0x156);}this['db'][_0xfa7bc3(0x671,0x570)](_0x38ab73['sbMwu']);}['close'](){function _0x3cc52e(_0x17910a,_0x103353){return _0x180951(_0x17910a,_0x103353-0x33c);}this[_0x3cc52e(0x690,0x3f3)][_0x3cc52e(0x67d,0x544)]();function _0x47696a(_0x3d047a,_0x5bb87f){return _0x180951(_0x5bb87f,_0x3d047a-0x5d6);}this['db'][_0x47696a(0x6ea,0x44c)]();}[_0x410919(-0x3f,0x1f3)+_0x180951(-0x294,-0xcd)](_0x31563e,_0x2e4c87,_0x1fa8cc){const _0x460c1c={'VrSqx':_0x33ea3c(0x606,0x476)+_0x33ea3c(0x1ad,0x44f)};function _0x160e6d(_0x5340e4,_0x44f41d){return _0x180951(_0x5340e4,_0x44f41d-0x2c6);}function _0x33ea3c(_0x16d72a,_0x1cee39){return _0x180951(_0x16d72a,_0x1cee39-0x3ba);}const _0x3c7c0d=new Date()['toISOStrin'+'g']();this[_0x33ea3c(0x515,0x420)](_0x460c1c[_0x33ea3c(0x568,0x355)],'\x0a\x20\x20\x20\x20\x20\x20INS'+'ERT\x20OR\x20REP'+'LACE\x20INTO\x20'+_0x33ea3c(0x4b8,0x613)+_0x33ea3c(0x5e0,0x443)+_0x33ea3c(0x1f3,0x21f)+_0x160e6d(0x6c9,0x51a)+_0x33ea3c(0x4f8,0x547)+'_state)\x0a\x20\x20'+_0x33ea3c(0x37,0x1b1)+_0x33ea3c(0x70b,0x4d1)+_0x33ea3c(0xdc,0x33b))[_0x160e6d(0x45c,0x265)](_0x31563e,_0x2e4c87,_0x3c7c0d,_0x1fa8cc);}[_0x410919(-0x1e9,-0x111)+'tus'](_0xfdeddd){function _0x5d005a(_0x42c5dc,_0x205ddd){return _0x410919(_0x42c5dc,_0x205ddd-0x392);}const _0x554d2a=this[_0x4469e5(0x51e,0x6e5)](_0x5d005a(0x653,0x43f)+'tatus',_0x4469e5(0x4f4,0x73f)+_0x4469e5(0x66c,0x481)+_0x4469e5(0x794,0x688)+'ync_state\x20'+_0x5d005a(0x380,0x5eb)+_0x5d005a(0xd3,0x330)+_0x5d005a(0x12c,0x2c0)+_0x5d005a(0x4d5,0x3eb))[_0x4469e5(0x6d2,0x68b)](_0xfdeddd);function _0x4469e5(_0x20eb8d,_0x1cda31){return _0x410919(_0x1cda31,_0x20eb8d-0x434);}if(!_0x554d2a)return null;return{'remoteId':_0x554d2a[_0x4469e5(0x3d6,0x299)],'syncedAt':_0x554d2a[_0x4469e5(0x3c9,0x555)],'syncState':_0x554d2a[_0x4469e5(0x77c,0x727)]};}[_0x410919(0x5fb,0x37d)+_0x410919(0x15b,0x2f1)+'es'](_0x1f0d06=0x2710){function _0x260a9b(_0x4b42d6,_0x3697f8){return _0x180951(_0x3697f8,_0x4b42d6-0x415);}function _0x495059(_0x4733f8,_0x3bb561){return _0x180951(_0x3bb561,_0x4733f8-0xe);}const _0xe7c6ef=this['db'][_0x260a9b(0x52a,0x2c6)](_0x260a9b(0x553,0x47b)+_0x260a9b(0x260,-0x43)+_0x260a9b(0x5eb,0x4f9)+_0x495059(0xdd,0x388)+_0x495059(0x158,0x17b)+_0x260a9b(0x394,0x1e6)+_0x260a9b(0x6a0,0x92a)+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+'\x20\x20\x20m.proje'+_0x495059(-0x45,-0x46)+_0x260a9b(0x52e,0x5b0)+_0x260a9b(0x3a5,0x3fa)+_0x260a9b(0x480,0x1ea)+_0x260a9b(0x40c,0x37c)+_0x260a9b(0x547,0x386)+_0x495059(0x1c8,0x3f)+_0x260a9b(0x3c4,0x2ec)+_0x495059(0x6f,0x45)+_0x260a9b(0x39e,0x1d0)+_0x495059(0xf2,-0x12e)+_0x495059(0x17a,0x1c9)+'sh,\x0a\x20\x20\x20\x20\x20\x20'+_0x495059(0x184,0x1db)+_0x495059(0x1d9,0x351)+_0x260a9b(0x531,0x5df)+_0x260a9b(0x310,0x34b)+_0x260a9b(0x5a1,0x3a0)+_0x260a9b(0x4f7,0x637)+_0x495059(-0x27,-0x1df)+_0x260a9b(0x4c8,0x691)+'T\x20JOIN\x20syn'+_0x495059(-0x5c,-0x203)+_0x260a9b(0x666,0x8a7)+_0x260a9b(0x5fb,0x7c0)+_0x495059(-0xe4,-0x2da)+'HERE\x20s.syn'+_0x260a9b(0x23e,0x352)+_0x495059(0x166,0x90)+_0x260a9b(0x5df,0x3c7)+_0x260a9b(0x3f3,0x66d)+'ULL\x0a\x20\x20\x20\x20\x20\x20'+'ORDER\x20BY\x20m'+'.created_a'+_0x495059(-0x8a,0xec)+_0x260a9b(0x3e3,0x3bb)+_0x260a9b(0x6f3,0x8c0))[_0x495059(0x309,0x4a5)](_0x1f0d06);return this[_0x260a9b(0x3d6,0x662)+_0x495059(0x34,-0x43)](_0xe7c6ef);}[_0x410919(0xd2,0xbe)+_0x180951(0x4a2,0x2da)](_0x15f6ae){const _0x4ae710={'WiEgp':'find_by_re'+'mote'};function _0x477573(_0x37d1fb,_0x12b087){return _0x180951(_0x12b087,_0x37d1fb-0x17a);}const _0x1051ab=this[_0x265bf3(0x1ef,0xd2)](_0x4ae710[_0x265bf3(0x264,0x303)],_0x477573(0x2b8,0xed)+_0x477573(0x279,0x376)+_0x265bf3(-0x10,-0x5)+_0x265bf3(-0x2a,-0x265)+_0x265bf3(0xf9,0x9b)+_0x477573(0x476,0x2ed)+_0x477573(0x2fc,0x469)+'id\x20=\x20s.mem'+_0x265bf3(0x460,0x267)+_0x265bf3(0x0,0x57)+'.remote_id'+_0x265bf3(0x1a7,-0xa8))[_0x265bf3(0x3a3,0x416)](_0x15f6ae);if(!_0x1051ab)return null;function _0x265bf3(_0x29167d,_0x5a6c56){return _0x180951(_0x5a6c56,_0x29167d-0x189);}return this[_0x265bf3(-0x74,-0x143)+'y'](_0x1051ab);}[_0x410919(-0x3c2,-0x18c)+'emoryCount'](){function _0x5a6532(_0x559b71,_0x405621){return _0x180951(_0x559b71,_0x405621-0x572);}const _0x135bc8=this['stmt'](_0x18b893(0x2ab,0x42d)+'nt',_0x5a6532(0x3e8,0x5bb)+'NT(*)\x20as\x20c'+'ount\x20FROM\x20'+_0x5a6532(0x783,0x7cb)+'s\x20WHERE\x20sy'+_0x5a6532(0x770,0x5cc)+_0x18b893(0x6d,0x104))[_0x5a6532(0x96c,0x78c)]();function _0x18b893(_0xec872a,_0x1d9995){return _0x180951(_0xec872a,_0x1d9995-0x193);}return _0x135bc8['count'];}[_0x180951(-0x4f,-0x12c)+_0x180951(0x299,0xa1)](){const _0x153ed6={'TTygs':_0x1845b0(0x58f,0x66d)+'d','JiCZS':_0x1845b0(0x7ff,0x596)+'(synced_at'+_0x1845b0(0x600,0x60f)+_0x491f45(-0x2b9,-0x168)+_0x1845b0(0x5b4,0x613)+'tus\x20WHERE\x20'+_0x491f45(0x363,0x357)+_0x491f45(0x1d3,0x2e1)+'\x27'};function _0x491f45(_0x7f1a5,_0x3b91f6){return _0x410919(_0x7f1a5,_0x3b91f6-0xf);}const _0x3fdc7d=this[_0x491f45(0x323,0xf9)](_0x153ed6[_0x491f45(-0x382,-0x16c)],_0x153ed6[_0x491f45(0x323,0x240)])[_0x491f45(0xb9,0x2ad)]();function _0x1845b0(_0x15f7dc,_0x3f4533){return _0x410919(_0x15f7dc,_0x3f4533-0x649);}return _0x3fdc7d[_0x491f45(-0xdc,0x33)+'d'];}[_0x410919(0x1d9,0x122)+_0x410919(-0x2bd,-0x119)](_0x3c27ba,_0x41c427,_0x264016=_0x180951(-0x1fc,-0xc0),_0x37dba4){function _0x1ef3b3(_0x1b922e,_0x3374d2){return _0x180951(_0x1b922e,_0x3374d2-0x1d0);}const _0x192095={'iNKkP':_0x367d13(0x95,0x12e)+_0x367d13(-0xfe,0xde)};function _0x367d13(_0x2ecce8,_0x4238c2){return _0x180951(_0x4238c2,_0x2ecce8-0x3f);}this[_0x1ef3b3(0x1c,0x236)](_0x192095['iNKkP'],_0x1ef3b3(0xff,0xe7)+_0x1ef3b3(0x138,0x3d)+_0x1ef3b3(0x34e,0x463)+_0x367d13(0x27c,0x3ab)+_0x367d13(-0x99,-0xb9)+_0x1ef3b3(-0xc4,0x142)+'s,\x20details'+_0x1ef3b3(0x24f,0xe2)+_0x367d13(0x3,-0x146)+',\x20?,\x20?)\x0a\x20\x20'+'\x20\x20')[_0x1ef3b3(0x45,0x16f)](_0x3c27ba,_0x41c427,_0x264016,_0x37dba4??null);}[_0x180951(-0x121,0xa3)+_0x180951(-0x5d,-0x19d)](_0x5255ae){const _0x344378={'KCzKv':_0xc18841(0x4c3,0x25f)+'ROM\x20sync_h'+'istory\x20ORD'+'ER\x20BY\x20id\x20D'+_0xc18841(0x4d5,0x3f1)+'?'};function _0xc18841(_0x430b7e,_0x473109){return _0x410919(_0x430b7e,_0x473109-0x34b);}function _0x506676(_0xa5ae62,_0x57bfb3){return _0x410919(_0xa5ae62,_0x57bfb3-0xd2);}const _0x4015a1=_0x5255ae?.[_0x506676(0x269,0x48a)]??0x64;if(_0x5255ae?.[_0x506676(0x300,0xcf)]){const _0x592f07=this[_0x506676(0x360,0x1bc)](_0xc18841(0x36a,0x5eb)+'ry_by_memo'+'ry','SELECT\x20*\x20F'+_0xc18841(0x1f8,0x385)+_0x506676(0x1bb,0x405)+_0x506676(-0x211,0x0)+_0xc18841(0x621,0x450)+'ER\x20BY\x20id\x20D'+_0xc18841(0x3fb,0x3f1)+'?')[_0x506676(0x201,0x451)](_0x5255ae[_0x506676(0xf7,0xcf)],_0x4015a1);return _0x592f07[_0x506676(0x294,0x26c)](mapSyncHistoryRow);}const _0x36be23=this[_0x506676(0x341,0x1bc)]('sync_histo'+_0xc18841(0x2a9,0x36b),_0x344378[_0x506676(0x43,0x217)])[_0xc18841(0x849,0x6ca)](_0x4015a1);return _0x36be23[_0xc18841(0x456,0x4e5)](mapSyncHistoryRow);}['addTombsto'+'ne'](_0xe2bb47){const _0x421c63={'kJZEK':_0x130fe0(0x627,0x437)+_0x130fe0(0x133,0x329)};function _0x554c02(_0x3e3b23,_0x104c23){return _0x180951(_0x3e3b23,_0x104c23-0x2e8);}function _0x130fe0(_0xb35ba4,_0x436a98){return _0x180951(_0xb35ba4,_0x436a98-0x508);}this['stmt'](_0x421c63[_0x130fe0(0x3c5,0x3c6)],'\x0a\x20\x20\x20\x20\x20\x20INS'+_0x554c02(0x744,0x5e8)+'LACE\x20INTO\x20'+_0x130fe0(0x2d2,0x380)+_0x554c02(0x12a,0x2e6)+_0x130fe0(0x5cd,0x525)+_0x554c02(0xcc,0x103)+_0x554c02(0x75e,0x5d9)+_0x554c02(-0x173,0x126)+_0x554c02(0x9f,0x246)+_0x130fe0(0x1ba,0x3ab)+_0x554c02(0x73c,0x5c6))[_0x554c02(0x4a,0x287)](_0xe2bb47);}['getTombsto'+_0x410919(0xee,0x29c)](_0x93431=0x3e8){function _0x5c428b(_0x49c813,_0x3d8028){return _0x410919(_0x3d8028,_0x49c813-0xd3);}function _0x486684(_0x174e57,_0x51de62){return _0x410919(_0x174e57,_0x51de62-0x1a8);}const _0x42e696={'DiboI':'get_tombst'+'ones'},_0x2f4513=this[_0x5c428b(0x1bd,0x3b6)](_0x42e696[_0x5c428b(0x291,0x173)],'SELECT\x20*\x20F'+_0x5c428b(0x13f,-0x12c)+_0x5c428b(0x11,0x11c)+_0x5c428b(0x12,-0x144)+'d_at\x20DESC\x20'+_0x5c428b(0x421,0x369))['all'](_0x93431);return _0x2f4513[_0x486684(0x29a,0x342)](_0x201874=>({'memoryId':_0x201874[_0x486684(0x6d6,0x521)],'deletedAt':_0x201874[_0x5c428b(0x377,0x3d8)],'synced':_0x201874['synced']===0x1}));}['getUnsynce'+_0x410919(0x33,-0xcd)+'s'](){function _0x2118ce(_0xd084f6,_0x22fa5a){return _0x180951(_0x22fa5a,_0xd084f6- -0x2e);}const _0x7bd474={'GLZhT':'unsynced_t'+'ombstones','dRhlz':_0x195e57(0x254,0x503)+_0x195e57(0x184,0x241)+'leted_at\x20F'+_0x2118ce(-0x46,-0xff)+_0x195e57(0x174,0x156)+_0x2118ce(0x214,-0x51)+'0'};function _0x195e57(_0xbe3434,_0x1d1950){return _0x180951(_0xbe3434,_0x1d1950-0x27c);}const _0x516b32=this[_0x195e57(0x575,0x2e2)](_0x7bd474[_0x195e57(0x4b2,0x238)],_0x7bd474[_0x195e57(0x715,0x536)])[_0x2118ce(0x2cd,0x247)]();return _0x516b32[_0x2118ce(0xe8,0x356)](_0x416c94=>({'memoryId':_0x416c94[_0x195e57(0x70a,0x571)],'deletedAt':_0x416c94['deleted_at']}));}['markTombst'+_0x180951(0x344,0x113)](_0x1a2137){function _0x3de59d(_0x4e11ff,_0x49e84d){return _0x410919(_0x49e84d,_0x4e11ff- -0x8f);}function _0xfdc5bb(_0x4d9d7f,_0x503b96){return _0x410919(_0x4d9d7f,_0x503b96-0x1f8);}this[_0xfdc5bb(0x42c,0x2e2)](_0x3de59d(-0x31,0x168)+_0x3de59d(0xee,0x221)+'d','UPDATE\x20tom'+_0xfdc5bb(0x407,0x1b8)+'T\x20synced\x20='+'\x201\x20WHERE\x20m'+'emory_id\x20='+'\x20?')[_0xfdc5bb(0x3f3,0x21b)](_0x1a2137);}[_0x410919(-0x7c,0x15d)+_0x180951(-0x13e,-0x148)](_0xb7eb6f,_0x44946d){const _0x1eac3a={'zLHOx':_0x3d923a(0x591,0x2e7)+_0x13f290(0x404,0x207)};function _0x13f290(_0x4002d7,_0xd2d672){return _0x410919(_0x4002d7,_0xd2d672-0x5d);}function _0x3d923a(_0x4db24f,_0x42d060){return _0x410919(_0x4db24f,_0x42d060-0x3fd);}this[_0x13f290(0x346,0x147)](_0x1eac3a['zLHOx'],_0x3d923a(0x423,0x52f)+_0x13f290(0x2c8,0x3a6)+'embedding_'+_0x13f290(0x38a,0x388)+_0x13f290(0x374,0x247)+'?')[_0x3d923a(0x31f,0x420)](_0x44946d,_0xb7eb6f);}[_0x180951(0x1cc,0x15a)+_0x180951(-0x31,0x88)](_0x12775b,_0x19ab0c){function _0x3328a6(_0x26d4ee,_0x520755){return _0x410919(_0x26d4ee,_0x520755-0x43f);}function _0x96ed82(_0x1875b2,_0xa1b7d0){return _0x410919(_0x1875b2,_0xa1b7d0-0x1c0);}this[_0x3328a6(0x2e2,0x529)](_0x96ed82(0x138,0xa0)+'k',_0x96ed82(0x2ae,0x15b)+_0x96ed82(0x3de,0x544)+_0x3328a6(0x658,0x3cf)+'vector_clo'+_0x3328a6(0x632,0x499)+_0x96ed82(0x62f,0x4bc)+_0x96ed82(0x5cc,0x418)+'pdated_at)'+_0x96ed82(0x319,0x165)+_0x96ed82(-0x17b,0x8d)+'\x20datetime('+_0x96ed82(0x4ab,0x3dd)+'\x20\x20')[_0x3328a6(0x5b0,0x462)](_0x12775b,JSON[_0x96ed82(0x35b,0x43c)](_0x19ab0c));}[_0x180951(0xa8,0x1b0)+_0x180951(-0x190,0x5f)](_0x53b3f1){function _0x2a3a41(_0x224e7e,_0x51fe63){return _0x180951(_0x224e7e,_0x51fe63-0x22);}function _0x5ec162(_0x38e351,_0x161b5b){return _0x180951(_0x38e351,_0x161b5b-0x278);}const _0x654c9={'CyOjR':_0x5ec162(0x1f9,0x263)+_0x5ec162(0xb4,0x1ce)+_0x2a3a41(-0x130,-0xf2)+_0x5ec162(0x278,0x1a1)+_0x5ec162(0x2d8,0xd8)+'_id\x20=\x20?'},_0x5efc6c=this[_0x2a3a41(-0xb1,0x88)](_0x2a3a41(-0x187,-0x51),_0x654c9['CyOjR'])['get'](_0x53b3f1);if(!_0x5efc6c)return null;return JSON[_0x5ec162(0x644,0x56a)](_0x5efc6c['clock_stat'+'e']);}['getAllVect'+_0x180951(-0xd2,-0x97)](){const _0x2ccfd9={'SPqgd':_0x2a8966(0x7cb,0x933)+'s','kKvQb':_0x2a8966(0x794,0x520)+'ory_id,\x20cl'+_0x18301f(0x72b,0x755)+_0x2a8966(0x666,0x8ec)+'r_clocks'},_0x13c03e=this[_0x18301f(0x81d,0x5df)](_0x2ccfd9[_0x18301f(0x748,0x61e)],_0x2ccfd9[_0x2a8966(0x739,0x586)])[_0x2a8966(0x808,0x5ce)]();function _0x18301f(_0x269426,_0x5ebdfd){return _0x180951(_0x269426,_0x5ebdfd-0x579);}function _0x2a8966(_0x4cbe0c,_0x1d183b){return _0x180951(_0x1d183b,_0x4cbe0c-0x50d);}return _0x13c03e[_0x2a8966(0x623,0x3a8)](_0x58f906=>({'memoryId':_0x58f906[_0x18301f(0x6ed,0x86e)],'clockState':JSON[_0x18301f(0x837,0x86b)](_0x58f906[_0x18301f(0x2b4,0x55b)+'e'])}));}[_0x180951(0x1d3,0xd9)+_0x180951(0x2d1,0x285)](_0x117769,_0x41ec7b){const _0x3f99f2={'Mhjef':function(_0x39a970,_0x547bb0){return _0x39a970===_0x547bb0;},'IcuEE':'float32','LjEcP':_0x350f09(0x5bd,0x4eb),'cNavg':function(_0x3feaf1,_0x3928f8){return _0x3feaf1(_0x3928f8);},'uIoBK':'save_embed'+_0x37fffd(0x1f6,0x45a)};let _0x1c92d0,_0x1f67bf=null;if(_0x3f99f2['Mhjef'](this[_0x350f09(0x677,0x674)+'onLevel'],_0x3f99f2[_0x350f09(0x525,0x5c6)]))_0x1c92d0=quantizeToFloat32(_0x41ec7b);else{if(this['quantizati'+_0x350f09(0x608,0x841)]===_0x3f99f2[_0x37fffd(0x214,0x404)]){const _0x4ec61f=_0x3f99f2[_0x350f09(0x6db,0x67f)](quantizeToInt8,_0x41ec7b);_0x1c92d0=_0x4ec61f['buffer'],_0x1f67bf=_0x4ec61f[_0x350f09(0x60c,0x520)];}else _0x1c92d0=_0x3f99f2['cNavg'](float32ArrayToBuffer,new Float32Array(_0x41ec7b));}function _0x37fffd(_0x478bda,_0x3821fc){return _0x180951(_0x3821fc,_0x478bda- -0x1);}this['stmt'](_0x3f99f2[_0x350f09(0x6c8,0x707)],_0x37fffd(0xad,0x331)+_0x350f09(0xa92,0x868)+_0x350f09(0x732,0x8a7)+_0x37fffd(-0x9,-0x77)+_0x37fffd(-0x2c,-0xfe))[_0x37fffd(-0x62,-0x292)](_0x1c92d0,_0x117769);function _0x350f09(_0x5a7f46,_0x5a770c){return _0x180951(_0x5a7f46,_0x5a770c-0x5a3);}this['stmt']('save_embed'+_0x37fffd(-0x21f,-0x3ac),_0x350f09(0x51c,0x4ba)+_0x37fffd(0x2ff,0x1c9)+_0x350f09(0x3d4,0x4af)+_0x350f09(0xaaa,0x849)+_0x350f09(0x459,0x55d)+_0x350f09(0xa43,0x7a6)+_0x37fffd(-0xc,-0x12f)+_0x37fffd(0x32e,0x86)+_0x350f09(0x7d9,0x598)+_0x350f09(0x35f,0x478)+_0x350f09(0x6fb,0x4c4)+_0x350f09(0x56b,0x3ec)+_0x37fffd(-0x80,-0x57))['run'](_0x117769,this[_0x350f09(0x41b,0x674)+'onLevel'],_0x1f67bf?JSON[_0x37fffd(0x1f7,0x3e)](_0x1f67bf):null);}[_0x410919(0x433,0x339)+'ng'](_0x1b0aa8){const _0x20e642={'qNPdk':_0x531a62(0x971,0xbb9)+_0x531a62(0x9a9,0x976)+_0x531a62(0x8c6,0x70b)+_0x531a62(0x843,0x718)+_0x2ff8da(0x614,0x554),'ikihP':_0x2ff8da(0x2f9,0x2cc),'yqhao':_0x2ff8da(0x335,0x477)+'ntization_'+_0x2ff8da(0x486,0x4b1)+_0x2ff8da(0x6ba,0x937)+_0x531a62(0xa1f,0xa2e)+_0x2ff8da(0x4e7,0x261)+_0x531a62(0x7ec,0x9c7)+_0x531a62(0xa0c,0xb63)+'ry_id\x20=\x20?','ahphd':'float32','oCvfs':function(_0x1f734e,_0x1c9053){return _0x1f734e(_0x1c9053);},'GufVS':function(_0x2f1a3d,_0x2981a3){return _0x2f1a3d===_0x2981a3;},'WIgxj':_0x2ff8da(0x3bb,0x46e),'Uviaj':function(_0x4445d6,_0x2123f6,_0x3e4e31){return _0x4445d6(_0x2123f6,_0x3e4e31);}},_0x2c52d6=this[_0x2ff8da(0x4d9,0x26e)](_0x20e642['ikihP'],_0x531a62(0x52c,0x607)+'edding\x20FRO'+_0x531a62(0x923,0xa9e)+'\x20WHERE\x20id\x20'+_0x2ff8da(0x388,0x38b))[_0x2ff8da(0x68d,0x589)](_0x1b0aa8);if(!_0x2c52d6?.['embedding'])return null;const _0x54b397=this['stmt']('get_embedd'+_0x531a62(0x516,0x453),_0x20e642[_0x2ff8da(0x2ae,0x442)])[_0x2ff8da(0x68d,0x63a)](_0x1b0aa8),_0x215a13=_0x54b397?.['quantizati'+_0x2ff8da(0x332,0x408)]??_0x531a62(0x78a,0x6a2);function _0x2ff8da(_0x3eda90,_0x4a8135){return _0x410919(_0x4a8135,_0x3eda90-0x3ef);}function _0x531a62(_0x2168c9,_0x967297){return _0x410919(_0x967297,_0x2168c9-0x666);}if(_0x215a13===_0x20e642[_0x2ff8da(0x581,0x55e)]){if(_0x2ff8da(0x766,0x668)===_0x531a62(0x8b2,0xadd)){const _0x234199=this['stmt']('all_vclock'+'s',ZdJjvD['qNPdk'])[_0x2ff8da(0x76e,0x70e)]();return _0x234199['map'](_0x10c553=>({'memoryId':_0x10c553[_0x2ff8da(0x768,0x64f)],'clockState':_0x3e9cb4[_0x2ff8da(0x765,0x4b4)](_0x10c553['clock_stat'+'e'])}));}else return _0x20e642[_0x531a62(0x691,0x558)](dequantizeFromFloat32,_0x2c52d6[_0x531a62(0x791,0x6b7)]);}else{if(_0x20e642[_0x2ff8da(0x3cb,0x2e1)](_0x215a13,_0x20e642['WIgxj'])){if(!_0x54b397?.[_0x531a62(0x7bb,0x846)+'on_stats'])throw new Error(_0x2ff8da(0x30c,0x186)+_0x531a62(0x73a,0x4bd)+_0x2ff8da(0x651,0x67e)+_0x531a62(0x833,0x5df)+_0x1b0aa8);const _0x25ca3e=JSON['parse'](_0x54b397[_0x531a62(0x7bb,0x520)+'on_stats']);return _0x20e642[_0x531a62(0x72b,0x937)](dequantizeFromInt8,_0x2c52d6[_0x531a62(0x791,0x560)],_0x25ca3e);}else return Array[_0x531a62(0x97c,0x988)](bufferToFloat32Array(_0x2c52d6['embedding']));}}[_0x410919(0x1ef,0x242)+_0x180951(-0x13,0x127)](_0x38af06){function _0x52f4ce(_0x47b619,_0x2b8567){return _0x410919(_0x47b619,_0x2b8567-0x403);}function _0x7b06bb(_0x3f3840,_0x58c3ed){return _0x410919(_0x3f3840,_0x58c3ed- -0x114);}const _0x2208e7=this['db']['prepare'](_0x7b06bb(0x332,0xae)+'ECT\x20*\x20FROM'+_0x7b06bb(-0x119,-0x15a)+_0x7b06bb(0x38a,0x29a)+_0x7b06bb(-0x78,-0x265)+_0x7b06bb(0x99,0x132)+'ssed_at,\x20u'+'pdated_at)'+_0x7b06bb(-0xea,-0xea)+_0x52f4ce(0x87b,0x654)+')\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+_0x52f4ce(0x271,0x3e4)+_0x7b06bb(-0x1d0,0xb2)+'count,\x200)\x20'+_0x7b06bb(-0x29c,-0x94)+_0x52f4ce(0x55b,0x389)+'gory\x20!=\x20\x27s'+'kill\x27\x0a\x20\x20\x20\x20'+_0x52f4ce(0xdc,0x37c)+_0x52f4ce(0x56c,0x715)+_0x7b06bb(-0xe4,0x151)+'sed_at,\x20up'+_0x7b06bb(0x391,0x1de)+_0x52f4ce(0x512,0x661))[_0x52f4ce(0x645,0x782)]('-'+_0x38af06+_0x7b06bb(-0x23,-0x119));return this[_0x52f4ce(0x51a,0x448)+_0x52f4ce(0x433,0x4ad)](_0x2208e7);}['getMemorie'+_0x410919(0x114,0x2f8)+_0x180951(0x268,0x36)](_0x5f3739=0x64){function _0x54da71(_0x4eb9f4,_0x4b23bc){return _0x180951(_0x4eb9f4,_0x4b23bc-0x264);}function _0x1e17cb(_0x402d25,_0x595453){return _0x180951(_0x595453,_0x402d25-0x444);}const _0x322126=this['db'][_0x1e17cb(0x559,0x5c9)](_0x1e17cb(0x582,0x5ce)+_0x1e17cb(0x721,0x573)+_0x54da71(0x20a,0x19a)+_0x1e17cb(0x76e,0x4db)+_0x1e17cb(0x67c,0x6f2)+_0x1e17cb(0x432,0x484)+_0x54da71(0x1ef,0x402)+_0x54da71(0x367,0x501)+_0x54da71(0x51b,0x306)+'\x0a\x20\x20\x20\x20\x20\x20LIM'+'IT\x20?\x0a\x20\x20\x20\x20')[_0x1e17cb(0x73f,0x6d6)](_0x5f3739);return this['rowsToMemo'+_0x1e17cb(0x46a,0x1f2)](_0x322126);}['deleteMemo'+_0x410919(-0xf0,0xaa)](_0x18548e){function _0x7b3c98(_0x328918,_0x1bbf66){return _0x180951(_0x1bbf66,_0x328918-0x6d5);}const _0x4a5f33={'CnUYs':_0xcec79e(0xd8,0x12f)+_0xcec79e(0x114,0x290)+'kill','YHrlL':'SELECT\x20*\x20F'+_0xcec79e(0x453,0x2ac)+_0x7b3c98(0x761,0x841)+'rds\x20WHERE\x20'+_0xcec79e(0x357,0x18f)+_0x7b3c98(0x4fc,0x467),'tWqjw':function(_0xa84243,_0x566625){return _0xa84243!==_0x566625;},'PvTiW':_0x7b3c98(0x818,0x653),'ADbOO':_0x7b3c98(0x6e0,0x69d)+_0x7b3c98(0x90e,0x752)+'\x20WHERE\x20id\x20'+_0x7b3c98(0x5ea,0x401),'eTuPC':function(_0x9387e3){return _0x9387e3();}};if(_0x18548e['length']===0x0)return 0x0;const _0x4b4f1a=this['db'][_0x7b3c98(0x9aa,0xb63)+'n'](()=>{function _0x2d357f(_0x14847e,_0x51da20){return _0x7b3c98(_0x14847e- -0x1c1,_0x51da20);}function _0x3773a1(_0x1e7d08,_0x540434){return _0x7b3c98(_0x1e7d08- -0x2a6,_0x540434);}if(_0x4a5f33['tWqjw'](_0x4a5f33[_0x3773a1(0x565,0x384)],_0x3773a1(0x572,0x2de))){const _0x1f395d=this[_0x3773a1(0x495,0x589)](_0x4a5f33[_0x2d357f(0x3c7,0x589)],_0x4a5f33[_0x3773a1(0x207,0x404)])['get'](_0x49e027);if(!_0x1f395d)return null;return _0x2f703(_0x1f395d);}else{let _0x2686d3=0x0;for(const _0x302fb8 of _0x18548e){this[_0x3773a1(0x4ef,0x298)+'ne'](_0x302fb8);const _0x2ac80b=this[_0x2d357f(0x7b5,0x5f3)](_0x302fb8);_0x4a5f33['tWqjw'](_0x2ac80b,null)&&this['db'][_0x2d357f(0x629,0x532)](_0x2d357f(0x51f,0x672)+_0x3773a1(0x621,0x711)+_0x3773a1(0x59f,0x673)+_0x3773a1(0x342,0x3a9))[_0x3773a1(0x3ce,0x2b3)](_0x2ac80b);const _0x589b38=this['db'][_0x3773a1(0x544,0x5f4)](_0x4a5f33['ADbOO'])[_0x3773a1(0x3ce,0x4a3)](_0x302fb8);_0x2686d3+=_0x589b38[_0x2d357f(0x5de,0x558)];}return _0x2686d3;}});function _0xcec79e(_0x985cd3,_0x721dc3){return _0x180951(_0x721dc3,_0x985cd3-0x123);}return _0x4a5f33[_0xcec79e(-0xd3,0x7c)](_0x4b4f1a);}['getMemoryC'+_0x180951(-0x246,-0x11d)](_0x1d3141,_0x5a671c){function _0x24abd2(_0x6ded2b,_0x84c116){return _0x180951(_0x84c116,_0x6ded2b-0x329);}const _0x445ae4={'VZENl':'\x20AND\x20paren'+_0x454fa6(0x1a6,0x8c)+'LL','TlVKk':_0x454fa6(0x2ee,0x2c6)+_0x454fa6(0x3e0,0x1b2)+_0x454fa6(0x5c8,0x3d0)+'memories\x20W'+_0x24abd2(0x587,0x731)+_0x24abd2(0x138,0xf4)+'LL','UBNSP':'count_memo'+'ries','jvVOO':_0x24abd2(0x372,0x4f0)+_0x454fa6(0x374,0x1b2)+'ount\x20FROM\x20'+'memories'},_0x389ac8=_0x5a671c?_0x445ae4[_0x24abd2(0x336,0x3d7)]:'';if(_0x1d3141)return this['db']['prepare'](_0x454fa6(0x323,0x2c6)+_0x24abd2(0x25e,0x1f7)+'ount\x20FROM\x20'+_0x454fa6(0x2b7,0x2eb)+_0x454fa6(0x1c9,0x291)+_0x454fa6(0x70c,0x47a)+'?'+_0x389ac8)[_0x24abd2(0x543,0x645)](_0x1d3141)[_0x454fa6(0x484,0x370)];if(_0x5a671c)return this['db'][_0x454fa6(0x2c5,0x392)](_0x445ae4[_0x24abd2(0x11f,0x142)])[_0x454fa6(0x370,0x497)]()[_0x24abd2(0x41c,0x652)];function _0x454fa6(_0x447f32,_0x294acf){return _0x180951(_0x447f32,_0x294acf-0x27d);}return this[_0x454fa6(0x355,0x2e3)](_0x445ae4[_0x454fa6(0xf,0x175)],_0x445ae4[_0x24abd2(0x595,0x5ca)])[_0x24abd2(0x543,0x308)]()['count'];}[_0x410919(0x1a0,0x2f9)+_0x410919(0x121,0x22e)](){function _0x2021d2(_0x4b7503,_0x37ccfb){return _0x180951(_0x37ccfb,_0x4b7503-0x25e);}function _0x338e7e(_0x300748,_0x1077dc){return _0x180951(_0x1077dc,_0x300748-0x34b);}const _0x51576e=this['db'][_0x2021d2(0x373,0x313)](_0x2021d2(0x30c,0x33b)+_0x338e7e(0x610,0x56c)+_0x2021d2(0x143,0x306)+_0x338e7e(0x27b,0x4b2)+'on\x27\x20WHERE\x20'+_0x338e7e(0x230,0x19c)+_0x338e7e(0x661,0x5bf)+'ce\x27')[_0x338e7e(0x2ea,0x589)](),_0x4f9215=this['db'][_0x338e7e(0x460,0x293)](_0x338e7e(0x3f9,0x17e)+_0x2021d2(0x523,0x4f1)+_0x2021d2(0xa1,-0x18b)+_0x2021d2(0x13f,0x3b3)+_0x2021d2(0x43d,0x4d8)+_0x338e7e(0x2ba,0x285)+_0x2021d2(0x14e,-0x28))[_0x2021d2(0x1fd,0x483)]();return{'categoriesUpdated':_0x51576e[_0x338e7e(0x415,0x64b)],'tiersUpdated':_0x4f9215[_0x338e7e(0x415,0x441)]};}[_0x180951(-0x64,0x1a)+'ryWithChun'+'ks'](_0x5868ee,_0x291348){const _0x5d259b={'TwMTO':_0x41f785(-0x165,-0xee)+_0x46d12c(0x24d,0x1dd),'MTYQF':_0x41f785(0x2cf,0x318)+'nt','ZCXMQ':_0x41f785(-0xe6,-0x52)+'\x20?','WAgSK':_0x46d12c(0xed,-0x4c),'gupLt':function(_0x15975f,_0x8b15bd){return _0x15975f===_0x8b15bd;},'fvXlY':'bcJPp','xDadJ':function(_0x54f7c8,_0x15b5fd){return _0x54f7c8!==_0x15b5fd;},'PANKg':function(_0x103cd3){return _0x103cd3();},'qGzkZ':_0x46d12c(0x8a,-0x111)+_0x46d12c(0x1f4,0x33)+'ags\x20(memor'+_0x46d12c(-0x302,-0xc6)+_0x41f785(0x15e,-0x12e)+_0x46d12c(0xf0,-0x5c)};if(_0x291348[_0x46d12c(0x366,0xbc)]===0x0){if(_0x5d259b[_0x46d12c(0x19a,0x1fd)](_0x46d12c(0xa4,0x1a4),_0x46d12c(-0x10d,-0x45)))return this[_0x41f785(0x4f,0x5e)+'ry'](_0x5868ee)['id'];else this[_0x46d12c(0x68,0x11d)](kGUDHF[_0x46d12c(-0x87,-0x116)],_0x46d12c(0x145,0x165)+'ories\x20SET\x20'+_0x46d12c(0x1df,0x35d)+_0x46d12c(0x573,0x35e)+'HERE\x20id\x20=\x20'+'?')['run'](_0x2341a7,_0x49799e);}const _0x326cb9=_0x5d259b[_0x46d12c(-0xca,0x7)](randomUUID);function _0x46d12c(_0x347119,_0x3bfa46){return _0x180951(_0x347119,_0x3bfa46-0xb7);}const _0xba61df=new Date()[_0x46d12c(0x78,0x2d8)+'g']();function _0x41f785(_0x171477,_0x222252){return _0x180951(_0x222252,_0x171477-0x35);}const _0x5e6b54=_0x291348[_0x41f785(0x3a,-0x7b)],_0x2e7882=this[_0x46d12c(0x100,0x11d)]('insert_mem'+_0x46d12c(-0x238,-0x33),_0x46d12c(-0xc2,-0x32)+_0x41f785(0x29b,0x4eb)+_0x46d12c(0x89,0x113)+_0x41f785(-0x1d9,-0x1ae)+_0x46d12c(-0x20c,-0xf)+',\x20tier,\x20pr'+'oject_path'+_0x41f785(0x367,0x48c)+_0x41f785(-0x5f,-0xb8)+'d_at,\x20upda'+_0x41f785(0xb3,0x33f)+_0x41f785(0x28f,0x1d7)+_0x46d12c(0x2b,0x1fe)+',\x20chunk_to'+_0x46d12c(-0x14f,0xe7)+_0x46d12c(0x451,0x1e0)+_0x41f785(-0xc8,-0xe7)+'\x20?,\x20?,\x20?,\x20'+_0x41f785(-0xdc,0x19f)+_0x41f785(-0x16a,-0x6c)),_0x3909c8=this[_0x41f785(0x9b,0x2d5)](_0x41f785(0x32f,0x58a),_0x5d259b['qGzkZ']),_0x16851d=this[_0x41f785(0x9b,0x221)](_0x41f785(-0x21,0x156),_0x41f785(-0x193,0xd8)+_0x46d12c(0x3fd,0x24f)+_0x41f785(0x29f,0x17d)+_0x46d12c(-0x93,-0x121)+_0x46d12c(0x1b2,0x286)+_0x46d12c(0x312,0xe4)),_0x4c6f4f=this['db'][_0x41f785(0x30a,0x555)+'n'](()=>{const _0x357fef=_0x5868ee[_0xd4858e(0x40b,0x216)]??[];_0x2e7882[_0xd4858e(0x365,0x32f)](_0x326cb9,_0x5868ee['content'],_0x5868ee[_0x1e7369(0x4ff,0x4aa)],_0x5868ee[_0x1e7369(0x53e,0x562)],_0x5868ee[_0x1e7369(0x8ad,0xa7a)+'h']??null,_0x5868ee[_0xd4858e(0x3f4,0x342)]??null,_0xba61df,_0xba61df,null,null,_0x5e6b54);for(const _0x222645 of _0x357fef){_0x3909c8['run'](_0x326cb9,_0x222645);}const _0x21d39f=this['getRowId'](_0x326cb9);function _0xd4858e(_0x578778,_0x3d0fee){return _0x41f785(_0x578778-0x391,_0x3d0fee);}function _0x1e7369(_0xa5f8e7,_0x169b7a){return _0x41f785(_0xa5f8e7-0x58b,_0x169b7a);}_0x16851d[_0x1e7369(0x55f,0x7f6)](_0x21d39f,_0x5868ee[_0xd4858e(0x3a9,0x2a9)]);for(let _0x3bae80=0x0;_0x3bae80<_0x291348[_0xd4858e(0x3cb,0x436)];_0x3bae80++){if(_0x5d259b['WAgSK']===_0xd4858e(0x5f3,0x3e5)){const _0x5dbd40=this[_0xd4858e(0x42c,0x3ec)](kGUDHF[_0x1e7369(0x552,0x4a6)],'SELECT\x20COU'+'NT(*)\x20as\x20c'+_0xd4858e(0x519,0x69d)+_0x1e7369(0x819,0x901)+_0xd4858e(0x3c8,0x4d1)+_0x1e7369(0x61a,0x4ff)+_0xd4858e(0x337,0x352))['get']();return _0x5dbd40[_0xd4858e(0x4b9,0x684)];}else{const _0x5de74e=randomUUID(),_0x369d53=_0x291348[_0x3bae80],_0x2c0a6c=_0x369d53[_0xd4858e(0x40b,0x4a9)]??[];_0x2e7882[_0xd4858e(0x365,0x481)](_0x5de74e,_0x369d53[_0xd4858e(0x3a9,0x583)],_0x369d53[_0x1e7369(0x4ff,0x733)],_0x369d53[_0xd4858e(0x344,0x55b)],_0x369d53[_0x1e7369(0x8ad,0x78f)+'h']??null,_0x369d53[_0x1e7369(0x5ee,0x5bd)]??null,_0xba61df,_0xba61df,_0x326cb9,_0x3bae80,_0x5e6b54);for(const _0x262733 of _0x2c0a6c){_0x5d259b['gupLt'](_0x5d259b[_0x1e7369(0x465,0x5cc)],_0xd4858e(0x4e7,0x69d))?(_0x4d3d3a[_0x1e7369(0x3aa,0x4fd)](kGUDHF[_0x1e7369(0x7a2,0x530)]),_0xd639f1[_0x1e7369(0x3aa,0x136)](_0x52b5ac[_0xd4858e(0x305,0x2e9)])):_0x3909c8['run'](_0x5de74e,_0x262733);}const _0x3bbab3=this['getRowId'](_0x5de74e);_0x16851d[_0xd4858e(0x365,0x4ce)](_0x3bbab3,_0x369d53['content']);}}});return _0x4c6f4f(),_0x326cb9;}['getChildCh'+_0x180951(0x208,0xd0)](_0x2b95cb){function _0x587b0a(_0x13bc37,_0x19f4ab){return _0x410919(_0x13bc37,_0x19f4ab-0x23c);}const _0x389ec0=this['db'][_0x45b72f(0x3ba,0x1fa)](_0x587b0a(-0x8d,0x150)+'ROM\x20memori'+_0x587b0a(0xf,0x9f)+_0x587b0a(0x16b,0x2ad)+'\x20?\x20ORDER\x20B'+_0x45b72f(0x19e,-0xa8)+_0x45b72f(0x416,0x322))[_0x587b0a(0x33a,0x5bb)](_0x2b95cb);function _0x45b72f(_0x145c54,_0x712746){return _0x410919(_0x712746,_0x145c54-0x221);}return this[_0x45b72f(0x266,-0x2e)+'ries'](_0x389ec0);}[_0x180951(0x245,0x255)+_0x180951(0x195,0x2a0)](_0x2a5fc4){const _0xe145a7={'kDJvj':_0x166b2e(0x1fc,0x24a)+_0x541564(0x819,0x8da)+_0x541564(0x219,0x46c)+'d\x20=\x20?'},_0x2d2ae7=this[_0x166b2e(0x3d2,0x504)](_0x541564(0x259,0x4e1),_0xe145a7[_0x541564(0xa4b,0x8a4)])['get'](_0x2a5fc4);if(!_0x2d2ae7?.[_0x166b2e(0x4a5,0x3a8)])return null;function _0x541564(_0x2baf29,_0x394dc0){return _0x410919(_0x2baf29,_0x394dc0-0x5d7);}function _0x166b2e(_0x103258,_0x16d785){return _0x410919(_0x16d785,_0x103258-0x2e8);}return this[_0x166b2e(0x23c,-0x64)](_0x2d2ae7[_0x166b2e(0x4a5,0x69e)]);}['replaceMem'+'oryWithChu'+_0x180951(0x1a4,0x2aa)](_0x5209a6,_0x4c8be3,_0x99e378){const _0x473cc1={'hYdwg':_0x4fd935(0x696,0x5c7)+_0x4fd935(0x8e2,0x8d1),'ImsNz':function(_0x36968f,_0x7bceb){return _0x36968f===_0x7bceb;},'ttVkq':_0x430156(0x68e,0x52b),'Cpkuf':_0x430156(0x1da,0x29b)+_0x4fd935(0x604,0x798)+_0x430156(0x170,0x400)+_0x4fd935(0x736,0x4b9),'PpWdR':_0x430156(0x121,0x29b)+'M\x20memories'+_0x4fd935(0xb09,0x8d2)+_0x4fd935(0x318,0x4bb),'CcBmS':function(_0xd989d,_0x1abfd4){return _0xd989d===_0x1abfd4;},'yvRdw':_0x4fd935(0x31c,0x590)+_0x430156(0xc4,0x1a6),'BAxCR':_0x4fd935(0x93b,0x8a0),'fZeQG':_0x4fd935(0x4cf,0x3de)+_0x4fd935(0x2e8,0x522)+_0x430156(0x4d,0x122)+_0x430156(0x297,0x113)+_0x430156(0x557,0x3b9)+_0x4fd935(0x436,0x493),'nYXVi':function(_0x4b1bbb,_0x1b8bb8){return _0x4b1bbb??_0x1b8bb8;}};function _0x4fd935(_0x2f16ef,_0x1ba8b9){return _0x410919(_0x2f16ef,_0x1ba8b9-0x522);}const _0x1742a6=this['db']['transactio'+'n'](()=>{function _0x1022c4(_0x954abd,_0x4e4c91){return _0x430156(_0x4e4c91,_0x954abd- -0x362);}function _0x32f94d(_0x179b6f,_0x44293c){return _0x430156(_0x44293c,_0x179b6f-0x2ad);}if(_0x473cc1[_0x1022c4(0x169,0x3de)]('YVzuz',_0x473cc1['ttVkq'])){const _0x465184=this['db'][_0x1022c4(0x43,0x58)]('SELECT\x20id\x20'+_0x1022c4(-0x2d3,-0x31a)+'ies\x20WHERE\x20'+'parent_id\x20'+'=\x20?')[_0x32f94d(0x838,0x637)](_0x5209a6);for(const _0x193ee4 of _0x465184){this[_0x1022c4(-0x12,-0x268)+'ne'](_0x193ee4['id']);const _0xe245d7=this[_0x32f94d(0x7de,0x59a)](_0x193ee4['id']);_0xe245d7!==null&&this[_0x1022c4(-0x6c,-0x280)](_0x1022c4(-0x273,-0x490),_0x473cc1[_0x32f94d(0x5f2,0x582)])[_0x32f94d(0x4dc,0x368)](_0xe245d7);}this[_0x32f94d(0x5fd,0x63d)+'ne'](_0x5209a6);const _0x3bd4cb=this[_0x32f94d(0x7de,0x99c)](_0x5209a6);_0x3bd4cb!==null&&this['stmt'](_0x32f94d(0x39c,0x1a2),_0x1022c4(-0xc7,-0x272)+_0x1022c4(0x120,0xbc)+'ts\x20WHERE\x20r'+_0x32f94d(0x450,0x52d))[_0x1022c4(-0x133,-0xd2)](_0x3bd4cb);this['db'][_0x32f94d(0x652,0x471)](_0x1022c4(-0xc7,-0x321)+_0x32f94d(0x776,0x948)+'\x20WHERE\x20par'+'ent_id\x20=\x20?')[_0x1022c4(-0x133,-0x1b8)](_0x5209a6),this[_0x1022c4(-0x6c,-0x2ce)](_0x1022c4(-0x29d,-0x3e)+_0x1022c4(-0x1bc,0x73),_0x473cc1['PpWdR'])[_0x1022c4(-0x133,0x50)](_0x5209a6);const _0xb3bb7d=randomUUID(),_0x1819d6=new Date()['toISOStrin'+'g'](),_0x6b0521=_0x473cc1[_0x32f94d(0x865,0x6fd)](_0x99e378[_0x1022c4(-0xcd,-0x89)],0x0)?undefined:_0x99e378[_0x32f94d(0x542,0x5d3)],_0x10a259=this[_0x1022c4(-0x6c,-0xc2)](_0x473cc1[_0x1022c4(-0x2ea,-0x40a)],_0x1022c4(-0x170,-0x9a)+'NSERT\x20INTO'+'\x20memories\x20'+'(id,\x20conte'+_0x1022c4(0x11e,0x336)+_0x1022c4(-0x102,-0x20b)+_0x1022c4(-0xb1,-0x217)+_0x32f94d(0x4b2,0x2a6)+'n_id,\x20crea'+_0x1022c4(-0x245,0x14)+_0x1022c4(-0xee,0xe2)+_0x1022c4(0x1ab,0x34c)+_0x1022c4(0x10b,-0xef)+'ex,\x20chunk_'+_0x1022c4(0xfc,0x3a1)+_0x32f94d(0x58a,0x36f)+'S\x20(?,\x20?,\x20?'+_0x32f94d(0x440,0x6bc)+_0x1022c4(-0x291,-0x1c5)+'?,\x20?)\x0a\x20\x20\x20\x20'+'\x20\x20'),_0x5b19bd=this[_0x1022c4(-0x6c,-0xbb)](_0x473cc1[_0x32f94d(0x3c7,0x55a)],_0x473cc1['fZeQG']),_0x34c9b8=this['stmt'](_0x1022c4(-0x128,-0x31e),_0x32f94d(0x375,0x25c)+_0x1022c4(0xc6,0x1ef)+'ts\x20(rowid,'+_0x32f94d(0x365,0x3ec)+_0x1022c4(0xfd,0x83)+'\x20?)'),_0x348533=_0x4c8be3[_0x32f94d(0x582,0x787)]??[];_0x10a259[_0x1022c4(-0x133,-0x327)](_0xb3bb7d,_0x4c8be3[_0x32f94d(0x520,0x754)],_0x4c8be3[_0x1022c4(-0x193,-0x16c)],_0x4c8be3['tier'],_0x4c8be3[_0x32f94d(0x82a,0x6db)+'h']??null,_0x4c8be3[_0x1022c4(-0xa4,0x115)]??null,_0x1819d6,_0x1819d6,null,null,_0x6b0521??null);for(const _0x1524ee of _0x348533){_0x5b19bd[_0x32f94d(0x4dc,0x627)](_0xb3bb7d,_0x1524ee);}const _0x3674dc=this[_0x32f94d(0x7de,0x808)](_0xb3bb7d);_0x34c9b8[_0x32f94d(0x4dc,0x25a)](_0x3674dc,_0x4c8be3[_0x1022c4(-0xef,-0x183)]);for(let _0x11a39c=0x0;_0x11a39c<_0x99e378[_0x1022c4(-0xcd,-0x336)];_0x11a39c++){const _0x186195=randomUUID(),_0xd05023=_0x99e378[_0x11a39c],_0x3ef575=_0xd05023['tags']??[];_0x10a259[_0x32f94d(0x4dc,0x3f0)](_0x186195,_0xd05023[_0x32f94d(0x520,0x501)],_0xd05023[_0x1022c4(-0x193,-0x2f9)],_0xd05023[_0x1022c4(-0x154,0x81)],_0xd05023[_0x32f94d(0x82a,0xa84)+'h']??null,_0xd05023['sessionId']??null,_0x1819d6,_0x1819d6,_0xb3bb7d,_0x11a39c,_0x473cc1[_0x32f94d(0x576,0x6cc)](_0x6b0521,null));for(const _0x59ac78 of _0x3ef575){_0x5b19bd['run'](_0x186195,_0x59ac78);}const _0x47faf9=this[_0x1022c4(0x1cf,0x2f2)](_0x186195);_0x34c9b8['run'](_0x47faf9,_0xd05023[_0x32f94d(0x520,0x283)]);}return _0xb3bb7d;}else _0x5e3433[_0x32f94d(0x327,0x248)](PTQyqx[_0x1022c4(-0x1e,-0x25)]),_0x5456b7[_0x32f94d(0x327,0x378)](_0x52d12a[_0x1022c4(0x21b,0x4c3)+'h']);});function _0x430156(_0x326c7c,_0x59252d){return _0x410919(_0x326c7c,_0x59252d-0x20c);}return _0x1742a6();}[_0x410919(0x16b,0xe2)+_0x410919(0x10b,-0x93)](_0x2a9e1a){const _0x38a82b={'bHbYo':function(_0x4b3ae6,_0x14a64b){return _0x4b3ae6!==_0x14a64b;},'ELJuJ':_0x2ab855(-0x169,-0x178)+_0x2ab855(-0x88,0x138),'zBmNa':'DELETE\x20FRO'+_0x14b4ba(0x562,0x58d)+_0x2ab855(0x38e,0x1d0)+'=\x20?','IUSAL':function(_0x5077f8,_0x60fcd3){return _0x5077f8+_0x60fcd3;}},_0x4c17be=this['db'][_0x14b4ba(0x7e9,0x629)+'n'](()=>{const _0x347b9d=this['db']['prepare'](_0x47c497(-0x3b5,-0x2a7)+'FROM\x20memor'+_0x1e39ed(0x333,0x2d1)+'parent_id\x20'+'=\x20?')['all'](_0x2a9e1a);for(const _0x5cdd08 of _0x347b9d){this[_0x47c497(-0x3a,-0x1e)+'ne'](_0x5cdd08['id']);const _0x41d65e=this[_0x47c497(0x289,0x1c3)](_0x5cdd08['id']);_0x38a82b[_0x1e39ed(0x7e0,0x7ac)](_0x41d65e,null)&&this[_0x47c497(0xca,-0x78)](_0x47c497(-0x1ff,-0x27f),_0x47c497(0xd4,-0xd3)+_0x1e39ed(0x4ad,0x6e5)+'ts\x20WHERE\x20r'+_0x47c497(-0x255,-0x1cb))[_0x47c497(-0x31c,-0x13f)](_0x41d65e);}function _0x47c497(_0x15d75f,_0x18aaad){return _0x2ab855(_0x18aaad- -0x140,_0x15d75f);}this['addTombsto'+'ne'](_0x2a9e1a);const _0xc9c1f8=this[_0x47c497(-0x8d,0x1c3)](_0x2a9e1a);_0xc9c1f8!==null&&this[_0x47c497(0x7a,-0x78)](_0x1e39ed(0x312,0x352),_0x47c497(0x1a0,-0xd3)+_0x1e39ed(0x828,0x6e5)+'ts\x20WHERE\x20r'+_0x1e39ed(0x565,0x406))[_0x1e39ed(0x3a1,0x492)](_0xc9c1f8);function _0x1e39ed(_0x54e073,_0x31fddb){return _0x2ab855(_0x31fddb-0x491,_0x54e073);}const _0xe3e836=this['db'][_0x1e39ed(0x3a3,0x608)](_0x1e39ed(0x729,0x4fe)+_0x1e39ed(0x949,0x72c)+_0x1e39ed(0x751,0x764)+_0x1e39ed(0x78a,0x579))[_0x1e39ed(0x399,0x492)](_0x2a9e1a),_0x20afba=this['stmt'](_0x38a82b['ELJuJ'],_0x38a82b['zBmNa'])[_0x1e39ed(0x47a,0x492)](_0x2a9e1a);return _0x38a82b[_0x47c497(0x174,-0x136)](_0xe3e836[_0x1e39ed(0x41a,0x5bd)],_0x20afba[_0x1e39ed(0x6c1,0x5bd)]);});function _0x14b4ba(_0x1755b0,_0x12c52b){return _0x410919(_0x1755b0,_0x12c52b-0x2d0);}function _0x2ab855(_0x3836bd,_0x234171){return _0x410919(_0x234171,_0x3836bd- -0x22);}return _0x4c17be();}[_0x410919(0x24d,0x90)+'esByTag'](_0x4879ee){const _0x50898a=this['db'][_0x393aeb(0x2e0,0x484)](_0x393aeb(0x309,0x2d0)+_0x572458(0x613,0x718)+_0x393aeb(0x9a,-0x1b5)+_0x393aeb(-0x55,-0x2c3)+'JOIN\x20memor'+_0x572458(0x2fa,0x1ea)+_0x393aeb(0x264,0x2bf)+_0x393aeb(0x12,-0x148)+'\x0a\x20\x20\x20\x20\x20\x20WHE'+_0x572458(0x55c,0x3f9)+_0x572458(0x5df,0x71c)+_0x393aeb(0x2eb,0x372)+_0x572458(0x668,0x4b9)+'\x20DESC\x0a\x20\x20\x20\x20')[_0x572458(0x751,0x9db)](_0x4879ee);function _0x393aeb(_0x3b7007,_0x5b1461){return _0x410919(_0x5b1461,_0x3b7007-0x147);}function _0x572458(_0x2c5f85,_0x38c933){return _0x410919(_0x38c933,_0x2c5f85-0x3d2);}return this[_0x572458(0x417,0x401)+_0x393aeb(0x1f1,0x36a)](_0x50898a);}[_0x180951(0x3a,0x2a1)](_0x59326a){function _0x1e8eb6(_0xcf57cb,_0xd5bc2d){return _0x410919(_0xd5bc2d,_0xcf57cb-0x551);}const _0x15e0b1=this[_0x14510b(0x70c,0x4ca)](_0x14510b(0x514,0x316),_0x14510b(0x653,0x717)+_0x1e8eb6(0x6f9,0x87a)+_0x1e8eb6(0x4cb,0x5f8)+'RE\x20id\x20=\x20?')['get'](_0x59326a);function _0x14510b(_0x40fa14,_0x1b8c47){return _0x410919(_0x40fa14,_0x1b8c47-0x3e0);}return _0x15e0b1?.['rowid']??null;}[_0x410919(-0x303,-0x179)+'y'](_0x53ca5b){const _0x558ed8={'jdbaL':_0x32c59f(0x6d8,0x854)+_0x3f7a69(0x56e,0x402),'iGwbz':_0x32c59f(0x39a,0x256)+'rn','bDyMY':_0x3f7a69(0x4fa,0x259),'Eogsd':_0x32c59f(0x797,0x67c),'AdIvV':_0x32c59f(0x3a8,0x2b1),'LiMSj':'context','OPOhD':_0x3f7a69(0x68f,0x4a5)};function _0x3f7a69(_0x35cf86,_0x2ae854){return _0x180951(_0x35cf86,_0x2ae854-0x2c2);}const _0x35d600=this[_0x3f7a69(0x13f,0x328)](_0x32c59f(0x756,0x603),_0x3f7a69(0x444,0x4ce)+'\x20FROM\x20memo'+_0x3f7a69(0x514,0x4b0)+_0x32c59f(0x401,0x336)+_0x3f7a69(0x165,0x193))[_0x32c59f(0x89c,0x94a)](_0x53ca5b['id']);let _0x23aff1=undefined;if(_0x53ca5b[_0x3f7a69(0x21e,0x369)])try{_0x23aff1=this['getEmbeddi'+'ng'](_0x53ca5b['id'])??undefined;}catch{_0x23aff1=Array['from'](bufferToFloat32Array(_0x53ca5b['embedding']));}const _0x195437=[_0x558ed8['jdbaL'],_0x558ed8[_0x32c59f(0x440,0x541)],_0x32c59f(0x708,0x83b),_0x3f7a69(0x4d6,0x305),_0x32c59f(0x84f,0x62e)+'owledge','convention',_0x558ed8[_0x32c59f(0x5a7,0x79b)],_0x558ed8['Eogsd']],_0x518ada=[_0x558ed8['AdIvV'],_0x32c59f(0x734,0x7b3),_0x32c59f(0x784,0x881)],_0x1fdf30=_0x195437[_0x32c59f(0x7d0,0x9f4)](_0x53ca5b['category'])?_0x53ca5b['category']:_0x558ed8[_0x3f7a69(0x356,0x285)],_0x50eec3=_0x518ada[_0x3f7a69(0x404,0x4f1)](_0x53ca5b['tier'])?_0x53ca5b[_0x32c59f(0x51f,0x6ac)]:_0x558ed8[_0x32c59f(0x54a,0x462)];function _0x32c59f(_0x136d49,_0x2257e9){return _0x180951(_0x2257e9,_0x136d49-0x5a1);}return{'id':_0x53ca5b['id'],'content':_0x53ca5b[_0x32c59f(0x584,0x454)],'category':_0x1fdf30,'tier':_0x50eec3,'tags':_0x35d600[_0x32c59f(0x6b7,0x94d)](_0x1de836=>_0x1de836[_0x3f7a69(0x4bb,0x522)]),'embedding':_0x23aff1,'projectPath':_0x53ca5b[_0x3f7a69(0x239,0x2e3)+'th']??undefined,'sessionId':_0x53ca5b[_0x3f7a69(0x5fc,0x48b)]??undefined,'createdAt':_0x53ca5b[_0x3f7a69(0x59b,0x308)],'updatedAt':_0x53ca5b[_0x3f7a69(0x49d,0x4d4)],'accessCount':_0x53ca5b[_0x3f7a69(0x35c,0x347)+'nt'],'lastAccessedAt':_0x53ca5b[_0x3f7a69(0x360,0x4a3)+'sed_at']??undefined,'parentId':_0x53ca5b[_0x3f7a69(0x213,0x3fb)]??undefined,'chunkIndex':_0x53ca5b[_0x3f7a69(0x287,0x1b3)+'x']??undefined,'chunkTotal':_0x53ca5b[_0x32c59f(0x53f,0x2a2)+'l']??undefined};}[_0x180951(0x85,-0x3f)+_0x410919(0x14e,0xaa)](_0x1e6b2d){const _0x427c60={'kYolu':function(_0x4683e8,_0x2805b0){return _0x4683e8===_0x2805b0;},'UosMs':function(_0xdcc874,_0x403e95){return _0xdcc874(_0x403e95);},'OBoeb':_0x3c1e31(-0x39,0xe4),'uWMpi':function(_0x50cee3,_0x4d608d,_0x5b5389){return _0x50cee3(_0x4d608d,_0x5b5389);},'RuIfY':function(_0x37fc71,_0x12bef9){return _0x37fc71!==_0x12bef9;},'TKkyt':function(_0x41e8ce,_0x209c3e){return _0x41e8ce(_0x209c3e);},'GFGrP':function(_0x42a55e,_0x43338d){return _0x42a55e<_0x43338d;}};function _0x3c1e31(_0x10ac20,_0x234887){return _0x180951(_0x10ac20,_0x234887-0x19c);}if(_0x427c60[_0x3c1e31(0x1f8,-0x10)](_0x1e6b2d[_0x3c1e31(0x23d,0x1a1)],0x0))return[];const _0x5896f3=_0x1e6b2d[_0x3c1e31(0x337,0x2b2)](_0x16e9d7=>_0x16e9d7['id']),_0x309393=0x384,_0x3e3707=new Map(),_0x337f11=new Map();for(let _0x4e7799=0x0;_0x427c60[_0x3c1e31(0x2ed,0x292)](_0x4e7799,_0x5896f3[_0x3c1e31(0x18b,0x1a1)]);_0x4e7799+=_0x309393){const _0x46bdcb=_0x5896f3[_0x338ab3(0xdd,0x385)](_0x4e7799,_0x4e7799+_0x309393),_0x79a347=_0x46bdcb[_0x338ab3(0x63b,0x5a9)](()=>'?')[_0x338ab3(0x87a,0x7af)](','),_0x34a3ad=this['db'][_0x338ab3(0x7e3,0x5a8)]('SELECT\x20mem'+_0x338ab3(0x36b,0x583)+_0x3c1e31(0x35e,0x4c5)+_0x3c1e31(0x2c3,0x4c2)+_0x338ab3(0x889,0x64a)+'y_id\x20IN\x20('+_0x79a347+')')['all'](..._0x46bdcb);for(const _0x3da627 of _0x34a3ad){const _0xf20cd5=_0x3e3707[_0x3c1e31(0x220,0x3b6)](_0x3da627[_0x3c1e31(0x6f2,0x491)])??[];_0xf20cd5[_0x3c1e31(0x186,-0x7a)](_0x3da627[_0x3c1e31(0x188,0x3fc)]),_0x3e3707['set'](_0x3da627[_0x338ab3(0x7c1,0x788)],_0xf20cd5);}const _0x319472=this['db'][_0x3c1e31(0x136,0x2b1)](_0x338ab3(0x71b,0x71a)+_0x3c1e31(0x471,0x3ac)+_0x338ab3(0x2fa,0x350)+_0x338ab3(0x24a,0x36f)+_0x338ab3(0x5f7,0x350)+'_stats\x20FRO'+_0x338ab3(0x57c,0x6c1)+_0x338ab3(0x63e,0x67e)+_0x3c1e31(0x2cd,0x96)+'ory_id\x20IN\x20'+'('+_0x79a347+')')[_0x3c1e31(0x319,0x497)](..._0x46bdcb);for(const _0x3ef5db of _0x319472){_0x337f11[_0x338ab3(0x6ed,0x789)](_0x3ef5db[_0x338ab3(0x579,0x788)],{'level':_0x3ef5db[_0x338ab3(0x593,0x564)+_0x338ab3(0xf1,0x352)],'stats':_0x3ef5db[_0x338ab3(0x53d,0x564)+_0x338ab3(0x53c,0x455)]?JSON[_0x3c1e31(0x66d,0x48e)](_0x3ef5db['quantizati'+_0x3c1e31(0x33f,0x15e)]):null});}}function _0x338ab3(_0x5ab604,_0x31598c){return _0x180951(_0x5ab604,_0x31598c-0x493);}return _0x1e6b2d[_0x3c1e31(0x278,0x2b2)](_0x3c8c68=>{function _0x3d5d45(_0x33bfa4,_0xc80779){return _0x3c1e31(_0xc80779,_0x33bfa4-0x2f4);}function _0x1bedab(_0x16761b,_0x7a795f){return _0x3c1e31(_0x16761b,_0x7a795f-0x4ef);}let _0x111301=undefined;if(_0x3c8c68[_0x3d5d45(0x537,0x697)]){const _0x5182ba=_0x337f11['get'](_0x3c8c68['id']),_0x45f77c=_0x5182ba?.[_0x1bedab(0x958,0x83a)]??_0x1bedab(0x7f1,0x72b);try{if(_0x427c60[_0x3d5d45(0x2e4,0x206)](_0x45f77c,'float32'))_0x111301=_0x427c60['UosMs'](dequantizeFromFloat32,_0x3c8c68['embedding']);else{if(_0x427c60['kYolu'](_0x45f77c,_0x427c60[_0x3d5d45(0x70b,0x873)])){if(!_0x5182ba?.[_0x1bedab(0x45d,0x608)])throw new Error('Int8\x20stats'+_0x1bedab(0xa5c,0x7c7));_0x111301=_0x427c60[_0x1bedab(0xacc,0x8b5)](dequantizeFromInt8,_0x3c8c68[_0x1bedab(0x83e,0x732)],_0x5182ba[_0x3d5d45(0x40d,0x3dd)]);}else{if(_0x427c60[_0x1bedab(0x35e,0x605)]('QEAui',_0x3d5d45(0x475,0x2b6)))_0x111301=Array[_0x3d5d45(0x722,0x599)](_0x427c60['TKkyt'](bufferToFloat32Array,_0x3c8c68[_0x3d5d45(0x537,0x540)]));else{const _0x4046e5=this[_0x1bedab(0x4cc,0x6f1)](_0x1bedab(0x954,0x921)+_0x3d5d45(0x50a,0x4ff),_0x3d5d45(0x5ce,0x82f)+_0x3d5d45(0x58f,0x80d)+_0x1bedab(0x71a,0x4f2)+_0x1bedab(0x644,0x4d8)+_0x1bedab(0x487,0x5fb)+_0x3d5d45(0x78c,0x8d7)+_0x3d5d45(0x612,0x395)+_0x3d5d45(0x590,0x31d)+_0x3d5d45(0x767,0x69f)+'\x20\x20\x20WHERE\x20s'+_0x1bedab(0x7c1,0x957)+_0x3d5d45(0x4ae,0x3d0))[_0x1bedab(0xab0,0x8a5)](_0x45af1f);if(!_0x4046e5)return null;return this[_0x1bedab(0x6f4,0x48e)+'y'](_0x4046e5);}}}}catch{_0x111301=Array[_0x3d5d45(0x722,0x55e)](_0x427c60[_0x1bedab(0x6d7,0x531)](bufferToFloat32Array,_0x3c8c68[_0x3d5d45(0x537,0x42c)]));}}return{'id':_0x3c8c68['id'],'content':_0x3c8c68['content'],'category':_0x3c8c68[_0x1bedab(0x3c6,0x5ca)],'tier':_0x3c8c68[_0x3d5d45(0x40e,0x491)],'tags':_0x3e3707['get'](_0x3c8c68['id'])??[],'embedding':_0x111301,'projectPath':_0x3c8c68['project_pa'+'th']??undefined,'sessionId':_0x3c8c68[_0x1bedab(0xa86,0x854)]??undefined,'createdAt':_0x3c8c68[_0x3d5d45(0x4d6,0x533)],'updatedAt':_0x3c8c68[_0x3d5d45(0x6a2,0x921)],'accessCount':_0x3c8c68['access_cou'+'nt'],'lastAccessedAt':_0x3c8c68[_0x1bedab(0x75d,0x86c)+'sed_at']??undefined,'parentId':_0x3c8c68[_0x1bedab(0x850,0x7c4)]??undefined,'chunkIndex':_0x3c8c68[_0x3d5d45(0x381,0xf7)+'x']??undefined,'chunkTotal':_0x3c8c68[_0x3d5d45(0x42e,0x36f)+'l']??undefined};});}[_0x410919(0x27d,0x4)+_0x410919(0x12d,0x11e)](){function _0x49b2b9(_0x13a13a,_0x72df9e){return _0x180951(_0x13a13a,_0x72df9e-0x270);}const _0x4972c1={'KZcYF':_0x336f3b(0x320,0x574)+_0x336f3b(0x36f,0x430)+'ck'};function _0x336f3b(_0x3a70e6,_0x233ecf){return _0x180951(_0x233ecf,_0x3a70e6-0xbe);}const _0x1ee93b=this['db'][_0x336f3b(0x1d3,0x19c)](_0x4972c1['KZcYF'])[_0x336f3b(0x2d8,0xaf)]();return _0x1ee93b[_0x336f3b(-0x60,0x8e)+'check']==='ok';}[_0x410919(0x44e,0x37d)+_0x410919(0x37a,0x180)](){function _0x2dc6f5(_0x30ce66,_0x43b8f0){return _0x410919(_0x43b8f0,_0x30ce66-0x166);}const _0xf8831c=this['db'][_0x1aab30(0x3da,0x27d)](_0x1aab30(0x30e,0x316)+_0x1aab30(0x1fa,0x170)+_0x1aab30(0x418,0x1e9)+_0x1aab30(0x51e,0x346)+_0x2dc6f5(0x1ec,0xb4)+_0x2dc6f5(0x244,0xc1)+_0x2dc6f5(0x134,0x37c))[_0x2dc6f5(0x404,0x4ff)]();function _0x1aab30(_0x3a947e,_0x3ae053){return _0x410919(_0x3ae053,_0x3a947e-0x241);}return _0xf8831c[_0x1aab30(0x3b8,0x2bf)];}[_0x180951(-0xa8,-0x132)+_0x180951(-0x1d0,0xe1)](_0x2ff5d1){const _0x4b43f6=randomUUID();function _0x1c4014(_0x106503,_0xf71b2c){return _0x180951(_0x106503,_0xf71b2c-0x3d1);}const _0x4a3bc9=new Date()['toISOStrin'+'g']();function _0x2a8173(_0x5a654f,_0x504b50){return _0x180951(_0x504b50,_0x5a654f-0x4e6);}return this[_0x2a8173(0x54c,0x758)]('insert_pro'+_0x1c4014(0x470,0x356),_0x2a8173(0x3fd,0x419)+_0x1c4014(0x222,0x420)+_0x2a8173(0x66e,0x7d5)+_0x2a8173(0x36f,0x582)+_0x1c4014(0x3cc,0x219)+_0x1c4014(0x5dd,0x5d4)+_0x2a8173(0x6e8,0x5d4)+_0x2a8173(0x488,0x4f0)+_0x1c4014(0x7e7,0x68c)+_0x2a8173(0x543,0x391)+_0x2a8173(0x449,0x5ad)+'\x0a\x20\x20\x20\x20\x20\x20VAL'+'UES\x20(?,\x20?,'+'\x20?,\x20?,\x20?,\x20'+'?)\x0a\x20\x20\x20\x20')[_0x1c4014(0x404,0x370)](_0x4b43f6,_0x2ff5d1['skillMemor'+_0x2a8173(0x5bc,0x738)],_0x2ff5d1['skillName'],_0x2ff5d1[_0x1c4014(0x821,0x6be)+'h']??null,_0x4a3bc9,_0x4a3bc9),{'id':_0x4b43f6,'skillMemoryId':_0x2ff5d1[_0x2a8173(0x439,0x69a)+_0x2a8173(0x5bc,0x4d0)],'skillName':_0x2ff5d1[_0x1c4014(0x640,0x505)],'level':0x1,'experienceCount':0x0,'successRate':0x0,'actrActivation':0x0,'lastPracticedAt':_0x4a3bc9,'createdAt':_0x4a3bc9,'updatedAt':_0x4a3bc9,'projectPath':_0x2ff5d1[_0x1c4014(0x81f,0x6be)+'h']};}[_0x410919(0x2c8,0x2eb)+_0x410919(0x30e,0x25c)](_0x4a6d17){const _0x29e194={'iYJVI':_0x1a3b59(0x463,0x1ed)+_0x2beefc(-0x1f3,-0x256)};function _0x2beefc(_0x4b78df,_0x15bd25){return _0x180951(_0x4b78df,_0x15bd25- -0x54);}const _0x4e69ff=this[_0x2beefc(0x241,0x12)](_0x29e194[_0x1a3b59(0x7df,0xa06)],_0x2beefc(0x63,-0x1c4)+_0x2beefc(0x10b,0x2dc)+_0x2beefc(0x1a5,0x38)+_0x1a3b59(0x36e,0x276)+'id\x20=\x20?')[_0x1a3b59(0x6c8,0x51e)](_0x4a6d17);function _0x1a3b59(_0x438e04,_0x3e9cfb){return _0x180951(_0x3e9cfb,_0x438e04-0x4ae);}if(!_0x4e69ff)return null;return mapProficiencyRow(_0x4e69ff);}[_0x410919(0x20e,0x2eb)+_0x180951(-0xda,-0x1ad)+'l'](_0x303a34){function _0x338989(_0x29d868,_0x48c236){return _0x410919(_0x29d868,_0x48c236- -0x94);}function _0x4fd86c(_0xf9d3d,_0x136f42){return _0x410919(_0x136f42,_0xf9d3d- -0xab);}const _0x484951={'lycbo':_0x338989(0x19,-0x5b)+'iency_by_s'+_0x338989(-0x96,0x1d0)},_0x2b2951=this[_0x338989(-0x97,0x56)](_0x484951[_0x4fd86c(-0x1b3,-0x108)],'SELECT\x20*\x20F'+_0x4fd86c(0x309,0x375)+_0x338989(0x1f2,0x7c)+'rds\x20WHERE\x20'+_0x4fd86c(0x20d,0x25b)+'ry_id\x20=\x20?')[_0x4fd86c(0x1f3,0x325)](_0x303a34);if(!_0x2b2951)return null;return mapProficiencyRow(_0x2b2951);}['listProfic'+_0x410919(-0x96,0x16e)](_0x1da8f4){const _0x4e7f86={'HnSSw':_0x1a4b29(0x119,0x301)+_0x2cda69(0x116,-0x29)+_0x1a4b29(0x37a,0xe4),'lMLLo':_0x2cda69(0x13c,0x48)+_0x2cda69(0x598,0x4e8)+'iency_reco'+_0x1a4b29(0x15b,-0x9)+_0x2cda69(0x576,0x32a)+_0x1a4b29(0x6a,0x2e3)+_0x2cda69(0x3b4,0x25a)+_0x2cda69(0x32e,0x43e)};function _0x1a4b29(_0xa6d8d1,_0x44c02f){return _0x410919(_0x44c02f,_0xa6d8d1-0x1e9);}function _0x2cda69(_0x28634c,_0x4551ee){return _0x410919(_0x28634c,_0x4551ee-0x134);}const _0x4e61e8=_0x1da8f4?.[_0x1a4b29(0x5a1,0x62a)]??0x64;if(_0x1da8f4?.[_0x2cda69(0x205,0x4a5)+'h']){const _0x37ee5a=this[_0x2cda69(0x266,0x21e)](_0x4e7f86['HnSSw'],_0x1a4b29(0xfd,-0x8b)+_0x2cda69(0x6b9,0x4e8)+_0x1a4b29(0x2f9,0x546)+'rds\x20WHERE\x20'+'project_pa'+_0x2cda69(0xd7,0x2f7)+_0x2cda69(0x22c,0x32d)+_0x2cda69(0x265,0x306)+_0x2cda69(0xe,0x21d)+_0x1a4b29(0x28f,0x66)+'?')[_0x1a4b29(0x568,0x59e)](_0x1da8f4[_0x1a4b29(0x55a,0x67d)+'h'],_0x4e61e8);return _0x37ee5a[_0x2cda69(0x245,0x2ce)](mapProficiencyRow);}const _0xc4f3f4=this[_0x1a4b29(0x2d3,0x2a0)](_0x2cda69(0x1e0,0x64)+_0x1a4b29(0x488,0x3be)+'ll',_0x4e7f86[_0x2cda69(0x336,0xaf)])[_0x2cda69(0x291,0x4b3)](_0x4e61e8);return _0xc4f3f4[_0x1a4b29(0x383,0x118)](mapProficiencyRow);}['updateProf'+_0x180951(0x1f7,0xe1)](_0x1c34df,_0x2727ac){const _0x529993={'STgTP':_0x22ef64(0x6fe,0x52a)+_0x22ef64(0x2c7,0x201)+_0x22ef64(0x7b4,0x70d),'xguQX':function(_0x10c5fe,_0xc2159c){return _0x10c5fe!==_0xc2159c;},'HueDJ':_0x22ef64(0x5b0,0x382),'mDkHX':_0x3876ca(0x45b,0x230)+_0x3876ca(0x5fd,0x626),'lnFPF':_0x22ef64(0x7f5,0x7f2)+'te\x20=\x20?','CzLad':_0x3876ca(0x3b1,0x1ee)+_0x22ef64(0x3d7,0x4ac),'Oyydf':_0x3876ca(0x4cf,0x434)+_0x3876ca(0x1f3,0x1aa)+'?'},_0x6b4f6c=[_0x529993[_0x3876ca(0x42a,0x617)]],_0x1ff9b9=[];_0x529993[_0x3876ca(0x66e,0x90f)](_0x2727ac['level'],undefined)&&(_0x6b4f6c['push'](_0x529993['HueDJ']),_0x1ff9b9[_0x3876ca(0x1e2,0x1ae)](_0x2727ac[_0x22ef64(0x69b,0x8d2)]));_0x2727ac[_0x3876ca(0x45b,0x634)+'Count']!==undefined&&(_0x6b4f6c[_0x22ef64(0x2d6,0x3c2)](_0x529993['mDkHX']),_0x1ff9b9['push'](_0x2727ac['experience'+_0x3876ca(0x4a8,0x371)]));_0x2727ac[_0x22ef64(0x77d,0x69e)+'e']!==undefined&&(_0x6b4f6c['push'](_0x529993[_0x3876ca(0x648,0x861)]),_0x1ff9b9[_0x3876ca(0x1e2,0x383)](_0x2727ac[_0x3876ca(0x689,0x408)+'e']));_0x2727ac[_0x3876ca(0x311,0xc2)+'tion']!==undefined&&(_0x6b4f6c[_0x22ef64(0x2d6,0x293)](_0x529993[_0x3876ca(0x387,0x58d)]),_0x1ff9b9['push'](_0x2727ac[_0x3876ca(0x311,0x304)+_0x3876ca(0x538,0x311)]));_0x2727ac[_0x3876ca(0x579,0x5f8)+_0x22ef64(0x58d,0x66d)]!==undefined&&(_0x6b4f6c[_0x22ef64(0x2d6,0x515)](_0x529993[_0x3876ca(0x28f,0x1e2)]),_0x1ff9b9[_0x3876ca(0x1e2,0x20)](_0x2727ac['lastPracti'+'cedAt']));_0x1ff9b9[_0x22ef64(0x2d6,0x157)](_0x1c34df);function _0x22ef64(_0x53b252,_0x22c509){return _0x410919(_0x22c509,_0x53b252-0x468);}function _0x3876ca(_0x5419da,_0x274ec9){return _0x410919(_0x274ec9,_0x5419da-0x374);}const _0x22947f=this['db'][_0x22ef64(0x601,0x4d3)](_0x3876ca(0x58c,0x5fe)+_0x22ef64(0x467,0x3a7)+_0x3876ca(0x655,0x807)+'\x20'+_0x6b4f6c[_0x22ef64(0x808,0x924)](',\x20')+(_0x3876ca(0x724,0x50d)+_0x22ef64(0x401,0x29c)))['run'](..._0x1ff9b9);return _0x22947f[_0x22ef64(0x5b6,0x426)]>0x0;}['addExperie'+'nceEvent'](_0x5c05cb){const _0x478a9e=randomUUID();this[_0x350f99(0x44,0x1e4)](_0x249644(0x56f,0x55a)+_0x350f99(0x28e,0x2d7),_0x350f99(-0x10b,-0x275)+_0x249644(0x292,0x333)+_0x350f99(-0x11c,-0x193)+_0x249644(0x3ff,0x2da)+_0x249644(0x35a,0x4d0)+_0x249644(0x4c1,0x4ec)+'mestamp,\x20o'+_0x350f99(-0x20c,0x1)+_0x249644(0x45e,0x5ad)+'context_ta'+_0x249644(0x42c,0x2d4)+_0x249644(0x5ff,0x876)+_0x249644(0x646,0x686)+'?,\x20?,\x20?,\x20?'+_0x350f99(-0x47,-0x25f)+_0x249644(0x1e2,0x369))[_0x249644(0x2ca,0x52b)](_0x478a9e,_0x5c05cb[_0x249644(0x151,-0x84)+_0x350f99(0xb4,0x1f7)],_0x5c05cb['timestamp'],_0x5c05cb[_0x249644(0x460,0x341)],_0x5c05cb[_0x350f99(-0x6b,0x185)],_0x5c05cb['contextTag'+'s']?JSON[_0x249644(0x523,0x5f1)](_0x5c05cb[_0x350f99(-0x22a,-0x107)+'s']):null,_0x5c05cb['sessionId']??null);function _0x350f99(_0x188096,_0x3666fb){return _0x180951(_0x3666fb,_0x188096- -0x22);}function _0x249644(_0x3731f1,_0x51eba7){return _0x180951(_0x51eba7,_0x3731f1-0x32b);}return{'id':_0x478a9e,'proficiencyId':_0x5c05cb[_0x249644(0x151,0x258)+_0x350f99(0xb4,-0x1d5)],'timestamp':_0x5c05cb[_0x350f99(0xaa,-0x94)],'outcome':_0x5c05cb['outcome'],'difficulty':_0x5c05cb['difficulty'],'contextTags':_0x5c05cb[_0x350f99(-0x22a,-0x397)+'s']??[],'sessionId':_0x5c05cb[_0x350f99(0xc,0x255)]};}['getExperie'+_0x410919(0x4ac,0x271)](_0x518535,_0x4e62fe){const _0x146bef={'AbZeM':_0xc2ad75(0x258,0x4cb)};function _0xc2ad75(_0x18d8f6,_0x4a3950){return _0x410919(_0x4a3950,_0x18d8f6- -0x7);}const _0x4396b7=_0x4e62fe?.[_0xc2ad75(0x3b1,0x1b9)]??0x3e8,_0x572dee=_0x4e62fe?.[_0x15f460(0x7b4,0x848)]===_0x146bef[_0xc2ad75(-0x10a,-0xd6)]?'ASC':'DESC',_0x2dc7a8=this['db'][_0xc2ad75(0x192,0x369)](_0x15f460(0x346,0x42d)+'ROM\x20experi'+'ence_event'+_0x15f460(0x4b4,0x4c2)+_0xc2ad75(-0x16f,0xa0)+_0x15f460(0x3fd,0x61e)+_0x15f460(0x577,0x4e1)+'stamp\x20'+_0x572dee+_0xc2ad75(0x303,0x3db))[_0x15f460(0x95d,0x898)](_0x518535,_0x4396b7);function _0x15f460(_0x4600e1,_0x48847d){return _0x410919(_0x4600e1,_0x48847d-0x519);}return _0x2dc7a8[_0xc2ad75(0x193,0x415)](mapExperienceRow);}[_0x180951(-0x308,-0xb1)+'nceEventCo'+_0x180951(0x410,0x17b)](_0x390945){const _0x3e1372={'eJgfq':'count_expe'+_0x15ccee(0x4c9,0x42d)},_0x403ea7=this[_0x15ccee(0x3d9,0x647)](_0x3e1372[_0x337c72(0xcb,0x59)],'SELECT\x20COU'+_0x15ccee(0x2a8,0xad)+_0x337c72(0x3fb,0x288)+'experience'+_0x337c72(0xc2,0x14d)+_0x337c72(0x2c8,0x2ce)+_0x15ccee(0x430,0x214)+'\x20?')[_0x15ccee(0x58d,0x429)](_0x390945);function _0x15ccee(_0x30954d,_0x2daa79){return _0x180951(_0x2daa79,_0x30954d-0x373);}function _0x337c72(_0xebe560,_0x3bd8b7){return _0x180951(_0x3bd8b7,_0xebe560-0x2a8);}return _0x403ea7[_0x15ccee(0x466,0x457)];}[_0x410919(0xfe,0x393)+_0x410919(0x23c,0x8d)](_0x15d9bc){function _0x3e0bb0(_0x398c50,_0x5576b3){return _0x410919(_0x398c50,_0x5576b3-0x13f);}function _0x16c877(_0x395e74,_0x152a23){return _0x410919(_0x152a23,_0x395e74-0x446);}const _0x95348c={'uUTSI':_0x3e0bb0(0x2c6,0x4aa)+_0x16c877(0x3aa,0x45f)+'r'},_0x49484d=randomUUID(),_0x1b3f35=new Date()[_0x16c877(0x6eb,0x891)+'g']();this[_0x16c877(0x530,0x545)](_0x95348c[_0x16c877(0x6b3,0x82b)],_0x16c877(0x302,0x99)+'O\x20emotion_'+_0x3e0bb0(0x2a8,0x8a)+',\x20message,'+'\x20created_a'+_0x3e0bb0(0xf1,0x1a0)+_0x16c877(0x5f3,0x3c3)+',\x20?,\x20?,\x200)')[_0x16c877(0x469,0x4d7)](_0x49484d,_0x15d9bc,_0x1b3f35);}[_0x180951(-0x277,-0x1db)+_0x180951(0x29e,0x1b1)+_0x410919(-0x114,-0x7c)](_0x4ebebb=0xa){function _0x417463(_0x527ede,_0x22b67d){return _0x180951(_0x22b67d,_0x527ede-0x16);}function _0x453351(_0x9e9c87,_0x12229b){return _0x180951(_0x9e9c87,_0x12229b-0x12f);}return this['db'][_0x417463(0x12b,-0x17c)](_0x417463(-0x2d,0xda)+_0x453351(0x520,0x369)+_0x453351(0x15f,0x20d)+'n_buffer\x20W'+'HERE\x20synce'+_0x453351(-0x234,-0x34)+_0x453351(0x35a,0x3cc)+'ed_at\x20ASC\x20'+_0x453351(0x3a1,0x3f9))[_0x417463(0x311,0x5a8)](_0x4ebebb);}[_0x410919(0x1dd,0x2df)+_0x410919(0x440,0x2d0)+'ynced'](_0x1a21ad){function _0x42e5d5(_0xf40b08,_0x169ac2){return _0x180951(_0xf40b08,_0x169ac2-0x361);}if(_0x1a21ad[_0x42e5d5(0x450,0x366)]===0x0)return;function _0x25f9bf(_0x4112c1,_0x43e4dc){return _0x180951(_0x4112c1,_0x43e4dc- -0x9c);}const _0x3920f8=_0x1a21ad['map'](()=>'?')[_0x25f9bf(0x52,0x280)](',');this['db'][_0x42e5d5(0x2ca,0x476)](_0x42e5d5(0x616,0x3b2)+_0x42e5d5(0x3d,0x241)+'r\x20SET\x20sync'+_0x25f9bf(0x1b8,0x52)+'RE\x20id\x20IN\x20('+_0x3920f8+')')[_0x42e5d5(0x4ce,0x300)](..._0x1a21ad);}[_0x410919(0x406,0x3a2)+'cedEmotion'+_0x180951(0x2ab,0x1c4)](){function _0x2d63eb(_0x55f895,_0x49a3fa){return _0x410919(_0x49a3fa,_0x55f895- -0x48);}const _0xb0fb08={'EAhJy':_0x1b9ce3(-0x4e,0x100)+_0x1b9ce3(-0x22a,-0x27f)+_0x1b9ce3(-0x201,-0xfc)+_0x1b9ce3(-0x47,0x38)+'=\x201'},_0x15284a=this['db'][_0x1b9ce3(0xbc,0x340)](_0xb0fb08[_0x1b9ce3(0x167,0x3a)])[_0x1b9ce3(-0xba,-0x1d6)]();function _0x1b9ce3(_0x5f025d,_0x25b994){return _0x410919(_0x25b994,_0x5f025d- -0xdd);}return _0x15284a[_0x2d63eb(0x106,0x37f)];}[_0x180951(0x1e3,0x2d3)+_0x410919(-0x3c4,-0x122)](_0x3b1a9e){const _0x3abbde=randomUUID();function _0x1c0d41(_0x4bc018,_0x310632){return _0x410919(_0x310632,_0x4bc018-0x5c7);}const _0x50a2e8=new Date()['toISOStrin'+'g']();this[_0x23a8e0(0x210,-0x83)](_0x1c0d41(0x63d,0x49a)+_0x23a8e0(0x1,0xc4),_0x23a8e0(0xc1,0x29e)+_0x23a8e0(0x217,0x21f)+_0x23a8e0(0xca,0x355)+_0x1c0d41(0x956,0x8ad)+'ession_id,'+'\x20hook_type'+_0x23a8e0(0x2ae,0xef)+'_memory_id'+'s,\x20injecte'+_0x1c0d41(0x4e1,0x743)+',\x20hit_coun'+_0x1c0d41(0x895,0x6af)+'njected,\x20e'+_0x23a8e0(0x4c2,0x2ae)+_0x23a8e0(0x5b,0x2b6)+_0x23a8e0(0x120,-0x17d)+_0x1c0d41(0x84c,0x90b)+_0x1c0d41(0x966,0x95e)+_0x23a8e0(0x99,-0x1d5)+_0x23a8e0(0x1d4,0x3d5)+'\x20NULL,\x20?,\x20'+_0x23a8e0(0x2c5,0x2f5))['run'](_0x3abbde,_0x3b1a9e[_0x23a8e0(0x1d8,0x36b)],_0x3b1a9e[_0x23a8e0(0x4a9,0x40d)],JSON[_0x1c0d41(0x843,0x71f)](_0x3b1a9e[_0x1c0d41(0x889,0x648)+_0x1c0d41(0x81d,0x77b)]),JSON[_0x1c0d41(0x843,0x799)](_0x3b1a9e[_0x23a8e0(0x391,0x1ff)+'ywords']),_0x3b1a9e[_0x23a8e0(0x4ba,0x5bb)+_0x23a8e0(0x32,-0x20c)],_0x3b1a9e[_0x23a8e0(-0x6a,-0x195)]??null,_0x50a2e8);function _0x23a8e0(_0x442b9d,_0x30754b){return _0x410919(_0x30754b,_0x442b9d-0x126);}return _0x3abbde;}[_0x410919(0x213,0x357)+_0x180951(0x1e5,0x10f)](_0x146ad5,_0xfaed0e,_0x54efda){const _0x1391ea={'snoDA':function(_0x4248fe){return _0x4248fe();},'oYqJr':_0x47f4cf(0x2fc,0x54b)+_0x47f4cf(0x20b,0x45b)+'s\x20SET\x20hit_'+'count\x20=\x20hi'+_0x47f4cf(0x1c8,0x3de)+'1\x20WHERE\x20id'+_0x41546b(-0x161,0xd5)},_0x249125=_0x1391ea[_0x41546b(0x3b2,0x293)](randomUUID);function _0x41546b(_0x5521b2,_0x1b8a98){return _0x180951(_0x5521b2,_0x1b8a98- -0x7b);}const _0x1f955f=new Date()[_0x41546b(0x2d6,0x1a6)+'g']();this[_0x41546b(0x53,-0x15)](_0x41546b(-0x285,-0x89)+'ection_hit',_0x41546b(0x42,-0x164)+_0x47f4cf(0x70b,0x671)+_0x41546b(0xe8,0x1a8)+_0x47f4cf(0x4bb,0x729)+_0x47f4cf(0x509,0x6bf)+_0x47f4cf(0x50d,0x48f)+_0x41546b(0x49d,0x286)+_0x41546b(0x122,0xc6)+',\x20created_'+_0x47f4cf(0x444,0x473)+'VALUES\x20(?,'+'\x20?,\x20?,\x20?,\x20'+_0x41546b(0x100,0xa0))[_0x41546b(-0x16b,-0xdc)](_0x249125,_0x146ad5,JSON[_0x47f4cf(0x7d1,0x7fc)](_0xfaed0e),_0x54efda,_0x1f955f);function _0x47f4cf(_0xe639fd,_0x3c6a4a){return _0x180951(_0xe639fd,_0x3c6a4a-0x604);}this[_0x41546b(0xe1,-0x15)]('inc_inject'+_0x41546b(0x1ba,-0xf)+'unt',_0x1391ea[_0x41546b(0x123,0x15)])['run'](_0x146ad5);}['getLatestI'+_0x180951(0x2aa,0x148)](_0x82bbf2){function _0x3262e3(_0x50778c,_0xd1bb34){return _0x410919(_0xd1bb34,_0x50778c-0x46b);}const _0x42f53d=this['db'][_0x3262e3(0x604,0x5b3)]('SELECT\x20id,'+_0x5957dd(-0x4d,-0xf5)+_0x5957dd(-0x190,0x48)+_0x5957dd(0x1ff,0x11e)+_0x3262e3(0x674,0x57f)+_0x5957dd(0x24,0x3a)+_0x3262e3(0x6ab,0x813)+'\x20session_i'+_0x3262e3(0x822,0xa13)+_0x3262e3(0x78c,0x84e)+'ed_at\x20DESC'+_0x5957dd(0x84,-0xd))[_0x5957dd(0x196,0x25c)](_0x82bbf2);function _0x5957dd(_0x402c17,_0x486f90){return _0x410919(_0x486f90,_0x402c17- -0x108);}if(!_0x42f53d)return null;return{'id':_0x42f53d['id'],'injectedKeywords':_0x42f53d[_0x5957dd(-0x1ef,-0x138)+_0x3262e3(0x4f0,0x54e)],'totalInjected':_0x42f53d[_0x3262e3(0x772,0x710)+_0x5957dd(0xb9,0x12)]};}[_0x180951(0x3ef,0x173)+_0x410919(0x244,0xa3)+_0x180951(-0x24a,-0xab)](_0x50fd8c,_0x10dfb1,_0x30480c){function _0x38a2d7(_0x24200c,_0x37c593){return _0x410919(_0x24200c,_0x37c593- -0xaf);}function _0x481e4a(_0x481e7e,_0x4901c5){return _0x410919(_0x481e7e,_0x4901c5- -0xc3);}const _0x502033={'gAqIc':_0x481e4a(-0x327,-0x77)+_0x481e4a(0x2fa,0x255)+_0x38a2d7(-0x68,-0x191),'sRcXq':_0x38a2d7(-0x331,-0xe4)+_0x38a2d7(-0x30a,-0x1d4)+_0x38a2d7(0x2de,0x287)+_0x38a2d7(0x93,0xf4)+_0x481e4a(-0x26f,-0x44)+_0x481e4a(-0xad,-0x198)+'HERE\x20id\x20=\x20'+'?'};this['stmt'](_0x502033[_0x481e4a(0xdc,0x3e)],_0x502033['sRcXq'])[_0x481e4a(0x24,-0xa0)](_0x10dfb1,_0x30480c,_0x50fd8c);}[_0x180951(0x24e,0x83)+_0x410919(0x282,0x219)](_0x47996d){function _0x3b941f(_0x1196c5,_0x1bc350){return _0x180951(_0x1196c5,_0x1bc350-0x263);}function _0x21dba2(_0x457d1e,_0xa9119a){return _0x180951(_0x457d1e,_0xa9119a-0x2f6);}const _0xfd3d1d=this['db'][_0x3b941f(0x474,0x378)](_0x21dba2(0x320,0x2b3)+'\x20tool_name'+'\x20FROM\x20inje'+'ction_hits'+_0x21dba2(0x4d1,0x300)+'ection_id\x20'+_0x3b941f(0xf6,0x178))[_0x21dba2(0x4b4,0x5f1)](_0x47996d);return _0xfd3d1d[_0x3b941f(0x155,0x379)](_0x3f6b07=>({'id':_0x3f6b07['id'],'toolName':_0x3f6b07[_0x3b941f(0x70f,0x524)]}));}[_0x410919(0x2b6,0x3b2)+_0x410919(0x10,-0x109)](_0x1f2ca9){function _0x3fa97b(_0xb6974f,_0x562c62){return _0x180951(_0xb6974f,_0x562c62-0x587);}const _0x5293f8={'Lkrpv':function(_0x1022fa){return _0x1022fa();},'EZoYj':_0x409a57(0x576,0x63f)+_0x409a57(0x6c6,0x444)+'al'},_0x580557=_0x5293f8[_0x3fa97b(0x7a7,0x699)](randomUUID),_0x5d715b=new Date()[_0x409a57(0x453,0x6aa)+'g']();function _0x409a57(_0x4d2b45,_0x55c0d9){return _0x180951(_0x4d2b45,_0x55c0d9-0x489);}this['stmt'](_0x5293f8[_0x3fa97b(0x51b,0x5bf)],'\x0a\x20\x20\x20\x20\x20\x20INS'+_0x3fa97b(0x4b9,0x4ee)+_0x3fa97b(0x6d7,0x72e)+_0x3fa97b(0x6c4,0x622)+_0x409a57(0x5bf,0x3c2)+_0x409a57(0x5db,0x5f2)+'ssion_id,\x20'+_0x409a57(0x27a,0x3bd)+_0x3fa97b(0x5ab,0x679)+_0x3fa97b(0x99b,0x6ea)+_0x409a57(0x521,0x502)+_0x3fa97b(0x606,0x3ab)+'nt,\x20surviv'+'ed_30d,\x20pr'+'omoted,\x20cr'+_0x409a57(0x42e,0x411)+'\x20\x20\x20\x20\x20\x20VALU'+_0x409a57(0x452,0x28d)+_0x3fa97b(0x62b,0x476)+',\x200,\x200,\x200,'+_0x3fa97b(0x42a,0x508))[_0x409a57(0x279,0x428)](_0x580557,_0x1f2ca9['memoryId'],_0x1f2ca9[_0x3fa97b(0x701,0x5b5)],_0x1f2ca9[_0x409a57(0x5d9,0x3bd)+_0x3fa97b(0x6f8,0x45a)]??null,_0x1f2ca9[_0x3fa97b(0xaeb,0x8a4)+'n']??null,_0x1f2ca9[_0x409a57(0x5fd,0x407)]??null,_0x5d715b);}['purgeOldIn'+_0x410919(0x2eb,0xa0)+'s'](_0x552ae2=0x1e){function _0x1c1dcf(_0x7f52f7,_0xfc1d3f){return _0x410919(_0xfc1d3f,_0x7f52f7- -0xf6);}function _0x135a70(_0x159412,_0x213936){return _0x410919(_0x159412,_0x213936-0x80);}const _0x175239={'osWsE':function(_0x481f05,_0x4b06f3){return _0x481f05-_0x4b06f3;},'xrwBq':function(_0x5f357a,_0x106e44){return _0x5f357a*_0x106e44;},'RtTRS':function(_0x22cd81,_0x3914e7){return _0x22cd81*_0x3914e7;},'sYwiS':function(_0x482fa1,_0x3b275b){return _0x482fa1*_0x3b275b;},'OwmUK':function(_0x5e8a0e,_0x11b296){return _0x5e8a0e*_0x11b296;},'OMmhK':_0x1c1dcf(-0x67,0x245)+_0x135a70(-0x83,0x8f)+_0x1c1dcf(0x19b,0x205)+_0x135a70(0x365,0x202)+_0x1c1dcf(-0x15a,0x34)},_0x40ce7c=new Date(_0x175239[_0x135a70(0x2e2,0xbc)](Date['now'](),_0x175239[_0x1c1dcf(-0x1f6,-0xb7)](_0x175239[_0x1c1dcf(-0x256,-0x372)](_0x175239[_0x1c1dcf(-0x1ae,0x38)](_0x175239[_0x1c1dcf(-0x29f,-0x545)](_0x552ae2,0x18),0x3c),0x3c),0x3e8)))[_0x1c1dcf(0x1af,0x2c5)+'g'](),_0x110b65=this['db']['prepare'](_0x175239[_0x135a70(0x21a,0x282)])['run'](_0x40ce7c);return _0x110b65['changes'];}}function _0x410919(_0xa502c2,_0x4424ce){return _0x4b2d(_0x4424ce- -0x284,_0xa502c2);}function mapSyncHistoryRow(_0x3ff22d){function _0x756a66(_0xf1207d,_0x1f5048){return _0x180951(_0xf1207d,_0x1f5048-0x1e4);}function _0x567b2b(_0x3fec9c,_0xff96a6){return _0x180951(_0x3fec9c,_0xff96a6-0x166);}return{'id':_0x3ff22d['id'],'operation':_0x3ff22d['operation'],'memoryId':_0x3ff22d[_0x756a66(0x388,0x4d9)],'timestamp':_0x3ff22d[_0x567b2b(-0x3e,0x232)],'status':_0x3ff22d['status'],'details':_0x3ff22d[_0x567b2b(0x63e,0x3ce)]};}function mapProficiencyRow(_0x1bb10f){function _0x11c317(_0x268aa1,_0x4ecb52){return _0x180951(_0x268aa1,_0x4ecb52- -0x89);}function _0xc6f91e(_0x2919ff,_0x1bb826){return _0x180951(_0x1bb826,_0x2919ff-0x1fc);}return{'id':_0x1bb10f['id'],'skillMemoryId':_0x1bb10f['skill_memo'+_0x11c317(0x77,0x1f7)],'skillName':_0x1bb10f[_0x11c317(-0x185,0xc8)],'level':_0x1bb10f[_0x11c317(0xad,0x126)],'experienceCount':_0x1bb10f[_0x11c317(-0x1a,-0x26)+_0xc6f91e(0x1a8,0xce)],'successRate':_0x1bb10f['success_ra'+'te'],'actrActivation':_0x1bb10f[_0x11c317(0x1d2,-0xd0)+'ation'],'lastPracticedAt':_0x1bb10f[_0xc6f91e(0x2d3,0x104)+_0xc6f91e(0x467,0x2bf)]??_0x1bb10f[_0xc6f91e(0x242,0x60)],'createdAt':_0x1bb10f['created_at'],'updatedAt':_0x1bb10f[_0x11c317(0x196,0x189)],'projectPath':_0x1bb10f[_0x11c317(-0x243,-0x68)+'th']??undefined};}function mapExperienceRow(_0xc7217f){function _0x4d12c2(_0x2e5a03,_0x9f8e01){return _0x410919(_0x9f8e01,_0x2e5a03- -0x15);}function _0xeed6e5(_0x503c13,_0xfba38b){return _0x410919(_0xfba38b,_0x503c13-0xeb);}return{'id':_0xc7217f['id'],'proficiencyId':_0xc7217f[_0xeed6e5(-0x6b,-0x1a)+_0x4d12c2(0x96,0x1f5)],'timestamp':_0xc7217f[_0x4d12c2(0x13b,0x3c0)],'outcome':_0xc7217f[_0x4d12c2(0x1a4,0x223)],'difficulty':_0xc7217f[_0x4d12c2(0x26,0xe1)],'contextTags':_0xc7217f[_0x4d12c2(0xb6,0x19e)+'gs']?JSON[_0x4d12c2(0x361,0x528)](_0xc7217f['context_ta'+'gs']):[],'sessionId':_0xc7217f[_0xeed6e5(0x338,0x2d6)]??undefined};}function bufferToFloat32Array(_0x3d09e9){function _0x5afc6b(_0x27fbc4,_0xf41376){return _0x410919(_0x27fbc4,_0xf41376- -0x2);}function _0x45cb90(_0x289143,_0x3306bc){return _0x410919(_0x289143,_0x3306bc-0x1b2);}const _0x158267=_0x3d09e9[_0x45cb90(0x141,0x25b)][_0x5afc6b(-0x18e,-0x8c)](_0x3d09e9[_0x45cb90(0x4fb,0x4f2)],_0x3d09e9[_0x5afc6b(0x1ea,0x33e)]+_0x3d09e9['byteLength']);return new Float32Array(_0x158267);}function float32ArrayToBuffer(_0x44b61c){function _0x49643d(_0x4970f8,_0x4d278e){return _0x180951(_0x4d278e,_0x4970f8-0x41d);}function _0x204887(_0x7aa851,_0x346968){return _0x180951(_0x346968,_0x7aa851-0x35a);}return Buffer[_0x204887(0x5ec,0x82a)](_0x44b61c['buffer'],_0x44b61c[_0x204887(0x616,0x66d)],_0x44b61c[_0x49643d(0x3f5,0x368)]);}function _0x4863(){const _0x4ff9ab=['icaGicaGicb0yq','rufOsNK','AezLBMe','kgXHC3rFywnJzq','s0vzlaOGicaGia','twvZC2fNzxm','rsbuqujmrsbjrG','Awrsrve','su1buLKGs0vzla','v0XHt1K','C2vZC2LVBL9Pza','t1iGCY5ZEw5JxW','yxjLBNrFAwqSia','z1LgzLi','zsGNBM93jYWGpW','Dg90ywWPcIaGia','vKfmvuvticG/la','uKTSBLa','mtfpC2rZqw8','Bw9YEuLKCW','D0jMuhe','A19ZDgf0zsWGDq','rLjptsbZEw5JxW','Bs5JB250zw50la','CML0Eq','zw5JEq','uYb0B21IC3rVBG','qvndcIaGica','yxnJ','B2nRx3n0yxrLia','ignODw5Rx2LUza','BMCGC3rHDhmGzG','rvjfihrPzxiGpq','A2LSBa','BgfZDf9Hy2nLCW','wKnytve','C2vTyw50Awm','icaGC2TPBgXFBq','veuGvefcteuGsq','ihmUBwvTB3j5xW','Aw5Qzwn0zwrlzq','qvjzieTfwsWkia','Dvvuu0K','BMTSzfu','z19TzxrHzgf0yq','z2vKlG','BMnLrxzLBNrZ','CNLFDgfNCYbxsa','z19OyxnOifrfwa','BNqSignHDgvNBW','zMLSDgvY','tsbTzw1VCNLFzG','AgLZDg9YEv90Aq','ktSkicaGia','x3n0yxrLifrfwa','C2TPBgW','zgLUzW','C3rYAw5NAwz5','CMvJB3zLCKnVCG','Cu9XzNq','CNLFAwqGvevyva','l25VzguVphzLCG','y3rFCgf0Aca9ia','Bs5JyxrLz29YEq','Au1cEgy','uKuGChjVAMvJDa','zf9HDcKkicaGia','ihnRAwXSx25HBq','BwvTB3j5x2LKla','icaGicaGy3jLyq','x2nVDw50id0GpW','uK9nihnLC3nPBW','ndCWmdq2nMD5tKXsuG','y2XLyxi','AwqGsvmGtLvmta','u1rtihn5BMnFAa','zxmVytjHlw1LBq','u0vmrunuihrHzW','BL9SB2DZifDirq','DxbKyxrLx2z0CW','C3bSAxq','B3j5x2LKlcbXDq','B3j5ie9oigv4Da','DxbKyxrLzf9HDa','y3LFCMvJB3jKCW','BwvZC2fNzq','tgPfy1a','tK9uie5vteWGtW','uKvjr04Gs0vzia','BMvZ','x3jLy29YzhmOCa','z2v0','y2LLBMnPzxnFyq','C3LUy19OAxn0BW','zw50CYHWCM9MAq','cIaGicaGicaGDa','CMfUAWOGicaGia','zgvSzxrLzf9HDa','Dg9ju09tDhjPBG','BNqGrLjptsbZzq','BMPLy3rPB25FAa','s3HQA1C','lcbJAhvUA190BW','Aw1LC3rHBxaGva','tfDZDwi','tIbJAhvUA190BW','tKnfuYbPBMPLyW','DvDnCgK','B25FAgL0CYHPBG','A0T2uwi','DuHIDgW','tsbLBwjLzgrPBG','Aw5JBhvKzxm','B3j5icyMig5WBq','tLvmtcWkicaGia','CMHlt24','x2z0CYbvu0LorW','C2TPBgXFBwvTBW','icaGig1LC3nHzW','ierfu0mPoWOGia','uYbPzhHFChjVzG','rsbLBwjLzgrPBG','tsbTzw1VCMLLCW','ig1LC3nHz2uGrG','sw1ZtNO','ierfu0mGteLnsq','EsaOB3bLCMf0Aq','Aw5Qzwn0zwrnzq','tKnfuYbTzw1VCG','vevyvcWkicaGia','zw1VCMLLC19WCG','ihn5BMnLzca9ia','icaGicaPoWOkia','Aw5Zzxj0x2v4Ca','DMvSifrfwfqGtG','AwqGsvmGtK9uia','BNrPEMf0Aw9UxW','zxHLyW','A0rkDMO','DcWGDg90ywXFAq','icbVDxrJB21Lia','BK1LC3nHz2vZuW','wsaOBwvTB3j5xW','id0Gj3n5BMnLza','icaGicaGicbWCG','Bg5guey','ie9oig0UAwqGpq','Bwf4','CvPwz0e','x2LKlcbZEw5Jzq','z2v0ugfYzw50tq','vuXmlaOGicaGia','A1nrC04','CxvPy2TFy2HLyW','C3LUy19ZDgf0Dq','CMvUDf9PzcWGyW','BwfYA0vTB3rPBW','ruzbvuXuicDZDq','zwnVCMrZifnfva','sevsrsbWyxjLBG','icGNC3vJy2vZCW','DgfN','yvz6sgC','ufjbr01bigLUDa','BIb0AguGtM9Kzq','B25LCYHZEw5Jzq','vcWkicaGicaGia','rvjuieLove8GBq','z2v0uhjVzMLJAq','zgv0ywLSCW','ieLorevyieLgia','DhmGkhjVD2LKla','AwnLzf9HDa','ANzwt08','u3LUy01LBw9YAq','zgf0zwrFyxqPia','BMCGqKXpqIWkia','BwvTB3jPzxnFCW','ifDirvjfihbHCG','AgvJAW','BuD4vvm','C1DPDgHVDxrfBq','BwLNCMf0zu9Sza','EgD1uvG','AwqPifjfrKvsrq','Ev9PzcWGy2XVyW','DhHNzwW','icaGicaGigrLza','t0jVzwi','CNLFAwqPoWOGia','CgfYzw50x2LKla','C29YDa','uK9nig1LBw9YAq','CNLFAwq','ig1LBw9YAwvZka','C2LTAwXHCML0Eq','Dg90ywXFAw5Qzq','ifbYzxzPB3vZia','Aw5N','ieXjtuLuid8','u0vmrunuig1LBq','iefercbdt0Xvtq','ihvZDwfSBhKGAa','C2LVBJ4VBgLIlW','BwjLzgrPBMCScG','shvgu1i','Ev9PzcburvHuia','ienpquXfu0nfka','y19ZDgf0DxmOCW','ihnLC3nPB25FAq','C3vJy2vZC1jHDa','zNjVBq','Ew5Jx2HPC3rVCG','zwn0Aw9Ux2vMzG','lcbMDhmUCMfUAW','zMLUzf9IEv9Yzq','ndrrEfDiBfe','icaGBwf0y2HLza','uYbZzxnZAw9UCW','C3LUy2vKx2nVDq','wvz6DxO','y291BNqGsu5urq','uIbcwsbJCMvHDa','B25mzxzLBa','x2TLExDVCMrZia','zw1VCNK','z2v0uM93swq','u1rtig1LBw9YAq','tg9XDMe','CMLLCYH0AwvYkq','r1rYrxi','zw1IzwrKAw5NxW','AgfZAca9id8GvW','txrvyK4','B24GvevyvcbotW','BMTZ','B3jKzxi','CMTozLe','oWOGicaGicbduG','ChjVAMvJDf9RBG','Axn0B3j5ifDirq','zxjPzw5Jzq','zwDYAxr5x2nOzq','CYbtrvqGzwzMzq','u0vmrunuihjVDW','yNvPBgqGyMv0Da','z2v0rw1IzwrKAq','ruzfuKvoq0vtia','BL9IDwzMzxjFCW','BL9PzcburvHula','yKHIww8','zfjOBhO','x3bHDgGSignYzq','yNL0zu9MzNnLDa','u0vmrunuig0UkG','ywXSx3zJBg9JAW','B3j5x2LKlcbJBa','uIaOCgfYzw50xW','Dg9VBf9Uyw1L','icbZDxj2AxzLza','yxrLie9oihn5BG','C3LUy19ZDgf0zq','B3jPzxmGu0vuia','Bw9YEv90ywDZka','BM93jYKPcIaGia','zsGNBM93jYK','icaGicaGignYzq','teLnsvqGpW','t04GBwvTB3jPzq','lNjLBw90zv9Pza','w2eYyv0Grgf0yq','ChjVy2vZC2vKxW','B2PLy3rFDxbKyq','icaGicaGicbPza','DhmGzNrZcIaGia','BNmGv0HfuKuGCW','CMvJB3jKsw5Qzq','BL9PzcKkicaGia','DhjHBNnHy3rPBW','ifbssu1buLKGsW','B3j5x2LKcIaGia','ywzYtMu','t1jfsuDoieTfwq','qNLszw1VDgvjza','sKrbt24','BMnLzf9HDcWGCW','runuicOGrLjptq','icaGia','ierfrKfvtfqGjW','rvHuie5pvcbovq','svvSvhK','yw1WktSkicaGia','Dw46ig5WBsbYzq','id0Glty0mdaW','icaGicaGig1LBq','pYbbtKqGkhbHCG','Aw5Zzxj0x2vTBW','u1rtig1LBw9YEq','B3PfAeW','DgLVBIbsrufmia','ruLhtIblrvKGka','y2fJAgvFC2L6zq','ChjVAMvJDfbHDa','CYa9ie5puK1bta','ignVCNj1ChqGza','ExmGpsbptG','zcKkicaGicaGvG','CgfYC2u','tgTouNy','ie5pvcbfweLtva','BwvTB3j5x2LK','C2v0','C2uGBw92zwqGDa','yxbWzw5ZihDOzq','z2v0ugvUzgLUzW','Aw5Zzxj0x3rHzW','ywXS','ihn5BMnFC3rHDa','psbMDhmUCM93Aq','DcbjtLrfr0vsia','Ag9VA1r5Cgu','rvjuie9sifjfua','x2TLExDVCMrZla','A1Hmt2q','Bs5WCM9Qzwn0xW','zw1IzwrKAw5Nia','ihzLy3rVCL9JBa','su5uruDfuIberq','uhbhCw4','zM9YzwLNBL9Rzq','C3vJy2vZC19Yyq','y2H1BMTuB3rHBa','B2DZicHPzcWGCW','BwvTB3jPzxmOCW','DvvXvgy','C25Vree','yNvMzMvYrw1VDa','Dg90ywXjBMPLyW','zwqGywDHAw5ZDa','C3LUy2HYB25VDq','x21LBw9YAwvZxW','ienbu0nbreukia','u1rtigv4CgvYAq','icDWCMvMzxjLBG','icHWyxjLBNrFAq','zMzLy3rPDMvUzq','zxnZAw9Uie9oia','w2eYyv0Gq3jLyq','icbwquXvrvmGka','AM9PBG','zgvKDxbby3rPBW','y2XLyw51Cfn5BG','w2eYyv0GrML4oG','zgv4ieLovevhrq','ywDZifDirvjfia','v0HfuKuGBwvTBW','mtGWmdnrz3DIzwq','z2v0u2vZC2LVBG','AwvZkgLKksbptG','B3j5x3rHz3mGvW','yxjWswC','q2ncBvm','zYbguK9nig1LBq','icaGicaGv0HfuG','DgGGpsa/','ifDirvjfigLKia','r0vsie5pvcbovq','CMvJB3jKrxH0CG','Aw9Ux2XLDMvSla','uK9nihbYB2zPyW','AvLkvKK','lcbZzxnZAw9UxW','zca9id8Gt1jerq','BgLTAxq','C3rHDhmGrLjptq','t3DTvuS','w2eYyv0Gq29YCG','Aw9UC19HBgW','BNrFAwqGsvmGtG','BwvTB3j5x2LKia','wuHYBeW','Awr4x2vTB3rPBW','Df9JB3vUDcaRia','id0Gzgf0zxrPBq','CYHWyxjLBNrFAq','wMfJuMe','AwvZifDirvjfia','zxmGv0HfuKuGCa','CYbTcIaGicaGia','y3rVCG','zgLUz19TzxrH','vufmifrbqKXfia','nJi2nJyWA21jsg1w','icaGicaGBgv2zq','CYbsrufmlaOGia','Aw50zwDYAxr5qW','ExzszhC','tfqGmcWkicaGia','ChvZAa','icaGicaGicbgtW','ywjhCM91Ca','ie5pvcbovuXmla','u3bWEM0','Aw9Ux2LKifrfwa','z2v0u3LUy2vKtq','C3rFywnJzxnZzq','zcWGy29UDgvUDa','ienptfvntIbHyG','icaGicaGicbTzq','khbHCMvUDf9Pza','vgXws2S','icaGifzbtfvfuW','y29UDgv4DfrHzW','y29Kzv9Wyxr0zq','ieLgie5pvcbfwa','AwnLzf9HDca9ia','B3vUDcbjtLrfrW','rvndlcb1CgrHDa','AwvUy3K','rLjptsbTzw1VCG','vfmGBwvTB3j5xW','vfr5z3m','zwn0Aw9Ux2LKia','CM93vg9nzw1VCG','rvmGkd8Sid8Sia','C3LUy2vKiezstW','svnuuYbPzhHFzq','D29YA2LUzW','DxjVsLG','lMPZihzLCNnPBW','zvr1uem','svnuuYbLEhrYyq','vcaXmdaW','zsGNBM93jYKPla','y2f0zwDVCNKGtW','Df9PzcbjuYbovq','BL9IDwzMzxiGka','zxmGv0HfuKuGAq','zca9id8','zcbjtLrfr0vsia','B2zPy2LLBMn5xW','veuGq0ftq0ferq','DxrJB21LlcbKAq','zgvSzxrLx3rHzW','q2vNuuG','t1qGtLvmtcWkia','x2v2zw50CYbxsa','x2f0lcbZEw5Jzq','uNruuLm','C2vZC2LVBNm','rvHulaOGicaGia','y2LLBMnPzxnFCa','tKqGBs5JAhvUAW','B25L','BgqGyMv0DgvYlq','zuPNzNe','CMv1C2vKx2nVDq','z2v0vw5Zzw50rq','ChjVzMLJAwvUyW','CNLFAwqGpsa/','ignVBNrLBNqPia','y19ZDgf0zsa9ia','x3rHzYbptIbTzq','rsbdt0fmrvndrq','Aw5Nx21LDge','cIaGicaGicaGrG','Bw9YAwvZig0GtW','tsbLBw90Aw9UxW','DYCPkqOGicaG','t1qGtLvmtcberq','C19JB3vUDcaRia','vhDnve8','C2vZC2LVBNmGka','zgvSzxrLx21LBq','ywjFz3jVDxa','u0vmrunuigLKia','su5trvjuieLova','ie9oihrVBwjZDa','rvGGsuyGtK9uia','ExfOyw8','Aw9Ux2XVz3nFCW','nZCXotKYDKTsA2nz','quXvrvmGkd8Sia','B3j5x2LKktSkia','EMPgwfq','id8Sid8Sid8Sia','u0vmrunuigvTyG','DgLLCIa9icDZzq','s1bYAei','icaGy2f0zwDVCG','igzHAwXLzdOG','lM1LBw9YEv9Pza','AwqSihnRAwXSxW','vuvticG/lca/la','icaGicaGq1jfqq','runuig0UAwqSia','ufjjtufswsblrq','zw1VCMLLCYbTcG','Ahv0D0m','mJuXodDIrNLkqKu','DcburvHulaOGia','ruzbvuXuidaUma','Aw5PDgLHBgL6zq','zw5JEuj5u2TPBa','A1LVBhu','veTQu1i','BMnLx2v2zw50CW','zwn0Aw9Ux2XVzW','yNvMzMvYifDirq','CMvWBgfJzq','y3rPB24','zcburvHu','C2f2zv92y2XVyW','rviGqLKGzNrZlG','CgXQyxC','zgvSzxrLx2z0CW','rvjfig1LBw9YEq','kqOGicaG','ref2we0','Dg9YEq','tufswsblrvKScG','AwqSihjLBw90zq','C2f2zv9LBwjFAa','icaGiezst00GBq','B2PLy3qGt04GBq','cIaGicaGicaGBq','CgvUzgLUzYCScG','z2v0u3LUy1n0yq','mZb1swf1rMy','rvjuieLove8GCW','ieLtie5vteWGqq','yxqPcIaGicaGia','cIaGicaGicaGAq','ie9oierftevurq','mtq4q2L4CvfS','ywn0Aw9UrxzHBa','BhLJyM8','DgfSieLovevhrq','x2f0kqOGicaGia','icaGv0HfuKuGCW','Dg9TyNn0B25LCW','qwjAzu0','vcbot1qGtLvmta','rqOGicaGicaPoW','Ehj3qNe','zxr0zxiTC3fSAq','odrKDeP5DNi','id0Gtuvnt1jz','ug9xy1u','B2rLnJeNcIaGia','Aej3rgu','Ev9PzcWGDgfNkq','CxvLCNK','CNLFDgLLCIbptG','z2v0x21LBw9YEq','rvHju1rtigLKEa','DgvK','x3jLy29YzhmGka','qKf4q1i','zcWGBwf0y2HLza','icHZA2LSBf9Tzq','DgvKx2f0lcb1Ca','ChjHz21H','AwnPzw5JEv9WCG','u0vmrunuicOGrG','rv9wrvjtsu9o','ywDZicHTzw1VCG','DgvUDcWkicaGia','icaGigLKifrfwa','Aw5Qzwn0zwrFAW','zf9RzxL3B3jKCW','t3L5zgy','zMvYkhn5BMnLza','sw50ocbLBwjLza','zwn0AxzLBMvZCW','Ew5JzwqGt04Gzq','Bhr5ifjfquWGtG','zca9idaGt1jerq','ieforca','AuD3yNO','BMPLy3rLzf9Rzq','C2L6zq','wNDLrue','BM93jYKSidaPcG','Ev90ywDZihqGtW','zNzyBfK','veTRExq','B3vUDca9id8GvW','BZOG','re5YAu8','uKuGBwvTB3j5xW','ieforcaOCgfYzq','BgLZDf9WCM9MAq','icaGihnLC3nPBW','cIaGicaGicaGDq','zfrVBwjZDg9Uzq','vcaOzgf0zxrPBq','C3mSigfIx2DYBW','z2v0x3jVD2LK','q25vwxm','AgfZ','ENzfshy','zxnZAw9Ux2LKkq','cIaGica','Aw5NsgfZAa','ruzbvuXuideScG','B25LCYbpuKrfuG','iejzigrLBgv0zq','oWOkicaGicaGqW','yw50AxPHDgLVBG','A0PAruS','B25FBgv2zwW','CMrZifDirvjfia','wfqScIaGicaGia','u0vmrunuihf1yq','Axn0B3j5','C1L3Avm','DgvKx21LBw9YEq','BwLUu2nVCMu','yNvMzMvYicHPza','CM91CcburvHula','u0vmrunuie1bwa','psaYnJG0mZu0nq','C29Tzq','igz0CZuOcIaGia','ieLovevhrviGtG','y3jLyxrLuhjVzG','t00GBwvTB3jPzq','z2v0twvTB3j5','x2LKid0GpW','icaGihnPz25PzG','y2vty29Yzq','z2v0tgfZDfn5BG','Aw9Ux3n0yxrZkq','z3mP','khnRAwXSx21LBq','CMvHDgvKx2f0ia','Bu1tBgi','B25LCYbxsevsrq','zxmGv0HfuKuGzq','x2XLDMvSlcbXDq','B3v0y29TzsbjtG','tK9uie5vteWGra','tIbLBwjLzgrPBG','DgLVBL9IDwzMzq','BwfUDgLJjYbxsa','Aw50zwDYAxr5xW','B3vUDa','BgLiwvu','y2f0zwDVCNKGpq','zhHFC3LUy19ZDa','icbWCM9Qzwn0xW','DgvTCf9ZDg9Yzq','q2HPBgrYzw4','DgfNktSkicaGia','yxrPB24Gpsa/','uK9nihzLy3rVCG','lca/kq','CMrZie9srevsia','pYWGpYWGpYWGpW','ywWN','y2H1BMTFAw5Kzq','C2XPy2u','icaGAwqGvevyva','A2v5D29YzhmSia','icbpuKrfuIbcwq','Bw9YAwvZifDirq','Be1mtg8','vujou1a','wsbJAhvUA19PBG','ifDirvjfig1LBq','zgv4lcbTlMnODq','tIbWyxjLBNrFAq','B2LJC04','icaGihrVB2XFBG','CgrHDgvKx2f0ia','ywDLCW','vuXmierfrKfvta','icbbtKqGy2f0zq','lca/lca/lca/la','se14AfC','icaGicaGicbLEa','EhbLCMLLBMnLxW','zwn0x3bHDgGSia','vuXmksKGteLnsq','ieLtie5vteWPkq','Eu9Hrwi','A01or1K','tefdrsbjtLrpia','y3rPB25FzxzHBa','AwqkicaGicaGvW','xZmWzcbjtLrfrW','BNqGpsbHy2nLCW','C3LUy2vKx2f0','kqOGicaGicbwqq','B3DPzca9id8','zw1VCMLLCYHWCG','psa/','B3j5','cIaGicaGieLouW','x2f0idWGpW','ywn0CKfJDgL2yq','C3rHDhvZifDirq','BwvTB3jPzxmG','msWGBgfZDf9HyW','BL9SB2DZiefera','CMvTB3rLx2LK','CwvJvxe','BMPLy3rPB25FBa','cIaGicaGifzbta','BM9Kzv9TB2r1Ba','suyGtK9uievysq','DgLUzYbHig5LDW','CYbxsevsrsbWCG','teWGt1iGkhbHCG','t04GC3LUy19OAq','B24Sig1LBw9YEq','x2nSB2nRCYbxsa','AMvJDgLVBL9SBW','ExDVCMrZifrfwa','AwqGvevyvcbquG','B25FAgL0CYaOcG','cGOGicaGicbduG','ywrKx3rVBwjZDa','icDJB252zw50Aq','cIaGicaGie9sra','zxH0CMfJDgLVBG','DhvZ','C2LNBMLMAwnHBG','tLqOkIKGyxmGyW','ig1LBw9YAwvZcG','icaGicaGDxbKyq','zxiGt04GBwvTBW','CYaOAwqSig1LBq','lcbJyxrLz29YEq','zxmGkaOGicaGia','yNn0B25LCYbtrq','kg1LBw9YEv9Pza','ruXfveuGq0ftqW','y2f0zwDVCNK','C3vJy2vZCW','kgLKksbptIberq','ksbHCYbSyxn0xW','ihn5BMnFAgLZDa','rviGqLKGDgLTzq','yMLUzgLUzW','tsbZEw5Jx3n0yq','vvbeqvrfigLUAG','Aw50oa','FI8UytjHl21LBq','icDWzw5KAw5NjW','zxjYB3i','BMvZx3n5BMnLza','qvvmvcaWlaOGia','zaOGicaGicbxsa','z2v0rxHWzxjPzq','uefos2C','Aw1LC3rHBxaGuG','vcbovuXmierfrG','C2TPBgXnzw1VCG','zhHFDg9TyNn0BW','DgL2zw5LC3m','y2TFC3rHDguGrG','kcDUB3CNksbxsa','r3vMvLm','ywX1yxrPB25Zka','zLjvyuC','q1jfqvrfieLora','cIaGicaGicaGyW','qu5eienpquXfuW','zgf0zxrPBwuOjW','v0HfuKuG','khrPBwvZDgfTCa','icaGicaGicbZzq','cIaGicaGicaGsq','CgrHDgvKx2f0kq','icaGiensrufurq','BwuGvevyvcbotW','Bw90zv9Pzcburq','rvjuieLove8Gzq','Dcbbu0mkicaGia','B3jdBg9JA3m','yxrLifjfquWGtG','BMrPBMCGBg9Hza','AwqSignYzwf0zq','yxrLzf9HDcburq','Bw9YEv9PzcKGuG','icDWCM9Jzwr1CG','icaGicaGsK9jtG','icDZEw5JzwqN','x2LKlcbZDgf0Dq','D2fZignVBxbPBa','igvYCM9YoIa','DgGSihnLC3nPBW','DxaSignYzwf0zq','igrHExm','ihbYB2zPy2LLBG','BwvTB3j5swq','uNvjzLK','zMLJAwvUy3LFCG','tYbTzw1VCNLFDa','C3rHDhm','DgLLCG','ie5vteWGyxmGzq','z2v0sw50zwDYAq','id8PcIaGica','igLKEf9Tzw1VCG','CMfUAW','lcbWCM9Qzwn0xW','zMLJAwvUy3K','rvjfigLKid0GpW','z2v0u3rHDhm','zwf0zwrFyxqPcG','zxnZzwrFyxqSia','x3rVDgfSieLtia','tsbPBMPLy3rPBW','mJK4nda5mfHoD3bHBW','z2v0x3zJBg9JAW','mtruC1nctuG','q3Pmywq','zcWGBs5JCMvHDa','zw1VCMLLC190Aq','tvrzuuy','vg1qqxy','ig5WBsbYzwj1Aq','svqGmtaWma','y19ZDgf0DxmGCW','BgvHCM5PBMC','B3bLBKrHDgfIyq','icbduKvbveuGsq','BwvTB3jPzxmGrW','vNjtCxG','CNLFywXS','B250zxH0x3rHzW','y2H1BMTFDg90yq','CNvU','BgfZDf9ZEw5Jzq','tK51rgq','zsWGChjVAMvJDa','icaGrK9sruLhtG','cIaGicaGiensrq','zw50CW','idWGzgf0zxrPBq','B0n2zNm','svvtquW','t1bpAeq','Aw5Zzxj0x2z0CW','igLKEf9ZEw5JxW','x2nVDw50','y3rFCgf0AcWGBq','BIbOyxmGy2HHBG','C3nFy291BNqSia','Bw9YAwvZkgLKkq','BwvTB3j5x2LKkq','uKvbveuGsu5erq','zxiTC3fSAxrLmW','rvjftKnfuYbTzq','z2v0x3bYB2zPyW','uK9nihn5BMnFAa','zgLMzMLJDwX0Eq','B3nxC0u','ywn0CL9Hy3rPDG','Bwv0ywrHDgeGka','CMfJDgLVBL9LDG','r0XAAfq','u0vmrunuigLKla','y2vZC2vKx2f0ia','cIaGicaGicaGqW','oIbJzcb+lY5UDG','CM93C1rVtwvTBW','B25FC3rHDhm','tgLnu2O','tfvfuYaOpYWGpW','B3j5x2LKlcbKzq','Bw9YEv9PzcWGDa','C3nPB25FAwqGva','DxbKyxrLx2LUAG','te5sqKm','t2TSrKe','BwvTB3jPzxmGBq','kcDUB3CNksKScG','ihjLyNvPBgqGyG','icbmsu1jvca/cG','icaPoWOGicaG','CNKSihrPzxiSia','vca/ie9grLnfva','ywCPlaOGicaGia','C2f2zvnLC3nPBW','DgLTzxn0yw1Wia','AwqGpsa/','y2TZicHTzw1VCG','rvmGBwvTB3jPzq','yNL0zuXLBMD0Aa','mcWkicaGicaGia','BwfYA190B21ICW','lca/lca/lca/kq','tIbTlNjVD2LKia','DcWGC3LUy2vKkq','C3rHDguGsvmGtG','icaGsK9jtIbTzq','zxjPzw5Jzv9LDG','rKfvtfqGmaOGia','y2XVy2TFC3rHDa','y29UDgvUDa','zgf0zwrFyxqSia','EKrIsue','Bw1HCf9ZAxPLia','tLvmtcbpuIaOBq','uK9nihrVBwjZDa','uvHHB2u','Aw5Zzxj0x21LBq','u0vmrunuignSBW','w2eYyv0GvgHPCW','yxjLBNrFAwqGpq','zYbjuYbovuXmcG','igjLDhrLCI1ZCq','zf9HDcWGDxbKyq','AwvUy3LFyNLFCW','Aw5Zzxj0x2LUAG','C3nPB25Z','svbXtee','ihf1yw50AxPHDa','rufursbjtKrfwa','CgrHDgvKx2f0la','psa/ifDirvjfia','kg0UCgfYzw50xW','cK9YAwDPBMfSia','psa/lcbOAxrFyW','pca1cIaGicaGia','Cgf0AcburvHula','icHTzw1VCNLFAq','ufjbr01bihrHyG','Aw9UCW','zxL3B3jKCW','CYbxsevsrsbZEq','ie5vteWScIaGia','j25VDYCPksWkia','BgvUz3rO','yKr5tvK','Dxb0igrHDgfIyq','ihn1y2nLC3nFCG','Aw9UtwvZC2fNzq','ifDirvjfigLUAG','revmrvrfiezstW','zMLUze1LBw9YAq','vLPftMW','y2nLC3mNlaOGia','y2HLy2TjBNrLzW','icaGicaGC3LUyW','t1qGtLvmtcbpuG','uKuGC3LUy2vKia','Bgv2zwWSihf1yq','sevsrsbWCM9Qzq','AxPHDgLVBL9Szq','qu5eignODw5RxW','reukicaGicaGkq','tK9uievysvnuuW','ywDLx2nVDw50la','y3jLyxrLtwvTBW','laOGicaGicaGia','AMvJDgLVBKXVzW','zcWGzgvSzxrLza','id0GpWOGicaG','y3rPB25fzMzLyW','rvjfihbYB2zPyW','ChjVAMvJDf9Wyq','rvndieXjtuLuia','swn1ruu','wfqGtK9uie5vta','yNvMzMvY','CMLLCW','Ev9Pza','zwqGDg8GBg9Hza','z2v0x3n5BMnFCW','lca/lcaWlca/la','zgjqyxrO','vefcteuGsuyGtG','id8P','C2vZC2LVBKLK','lcbWCM9MAwnPzq','DgfSkqOGicaGia','AMvJDgLVBL9Pza','u1rNvfa','tsbTzw1VCNLFDa','v1vysNO','BwvZC2fNzv9JBW','yMvKzgLUzW','igLUAMvJDgvKxW','rvPVwwO','BLLyvMK','zMLUze1LBw9YEq','CgvYAwvUy2vFyW','u0vmrunuihjLBq','Ben3D04','icaGihbYB2nLCW','y2LLBMn5x2LKkq','Bg9NCYHZzxnZAq','vxzPywO','BwjLzgrPBMCGsq','y29UDgv4Da','icaGicaGignVBG','DgfNCW','y3jLyxrLzf9HDa','y29UDgv4Df90yq','icaGicK7cIaGia','u0vmrunuienpvq','rIbot1qGrvHjuW','B25FAwqPoWOGia','icaGBwvTB3j5xW','icaGicbwquXvrq','u1rtigvTB3rPBW','rvjuieLove8GCa','zgLUzYbTAxnZAq','vvbeqvrfigvTBW','ierftevursbdqq','B3vUDhm','icaGicaGihf1yq','u1LhENq','ywrKx3n5BMnFAa','BwvTB3jPzxmOAq','cIaGicaGicaGyq','B2nRCYaOcIaGia','BMnFC3rHDguGpq','Cgf0Aca9id8','zw1VCMLLCYaOAq','yxrLzf9HDcWGDq','zgvSzxrLv2L0Aa','Bg9JAW','CYaOcIaGicaGia','Bs5Syxn0x2fJyW','DgvKie9oig1LBq','zxHWzxjPzw5Jzq','Aw5Jx2fJy2vZCW','zgf0zwrFyxqGra','C3rTDa','icaGicbduKvbva','tcberuzbvuXuia','CM93','ig5HDgL2zsbIAq','zwrFyxqSig0UDq','Aw9Ux2HPDf9JBW','rvjuieLove8GAq','BwvTB3jPzxmGvW','ifrbqKXfieLgia','C2f2zv9ZzxnZAq','u0nbreukicaGia','y2H1BMTjBMrLEa','wsWkicaGicaGia','igvTyMvKzgLUzW','CYburvHulaOGia','quXurviGvefcta','tNvQz1u','lca/lca/lcbKyq','B24SihrPzxiSia','Bw90zq','rK9sruLhtIblrq','y1rQr1u','z0fXswm','DgvKx2f0lcbWyq','icaGicaGicbZDa','wsblrvKScIaGia','AwqGpsa/ie9sra','zcbjuYbovuXmia','z2v0sw5Qzwn0Aq','Ew5Jx3n0yxrLkq','ywnJzxnZx2nVDq','zw50x2LKid0GpW','icaGicaGihrVDa','q2XVy2S','CYaOBwvTB3j5xW','zsbSB3n0lG','uYbot1qGtLvmta','AwvUy3LFCMvJBW','BNnuEu8','su5ervGGsuyGtG','qvrfifrbqKXfia','B1LXsNi','icaGicaGihbYBW','yxnOie9oig1LBq','ruzbvuXuidaScG','x2v2ywXZx21LBq','Dgf0Dxm','zxjYB3i6ia','rvrfienbu0nbra','DMvJDg9Yx3nLyq','tIbTlMLKid0GDa','DhLtDgf0Dxm','zxzHBhvHDgLVBG','ifrfwfqGtK9uia','ksbsruzfuKvoqW','ywrKu3LUy0HPCW','icGkicaGicaGia','BM9Uzq','y2vKqxq','zwrFyxqGrevtqW','z2v0u3LUy0HPCW','rviGtK9uie5vta','u1bXz2q','yw1LifrfwfqGtG','zw1IzwrKAw5N','Aw5Qzwn0Aw9UxW','zwXLDgvKx2f0ia','DMvJDg9Y','zsGNBM93jYKPcG','zguGpsbxquW','C2nVCMu','vvbeqvrfig1LBq','vcbquKLnqvjzia','q291BNq','DgLVBL9SB2DZka','tKHpB0O','cIaGicaGieXfrG','AfLKD2C','q3bRDwy','Dwr6rLe','C3rTDhm','DgvKx2f0ifrfwa','q0vMCNC','tKrfwcbjrIbotW','BMPLy3rPB25FAq','C2v0x3n5BMnFCW','AwvUy3LFAwqGpq','zw1VCNLFAwqGva','zv9WCM9MAwnPzq','ywrKvg9TyNn0BW','s0n6s3y','AcK7cIaGicaGia','Dgv0Aw1LkcDUBW','Bgv2zwWGpsa/','AhvUA190B3rHBa','icbOB29Rx3r5Ca','BIbZAgfYzwqGBW','cIaGicaGiezstW','vfmGAw5Qzwn0Aq','y2HHBMDLCW','rvKScIaGicaGia','DgLTzxn0yw1W','CMnOx2fSBa','BwvTB3jPzxnFzq','ig0Uy2f0zwDVCG','Dw5RCW','CxvHBNrPEMf0Aq','AhbpAu0','rvjfia','zxzLBNrZicHPza','DerusMW','EuLK','BgfZDf9WCMfJDa','igHPDf9JB3vUDa','C2f2zuvTyMvKza','CNvWDerHDgfIyq','v2Lfz3a','y05HDMC','uKvgrvjftKnfuW','uK9nigvTB3rPBW','CMvJB3jKqwnJzq','zNrZ','AwnPzw5JEq','icaGicbguK9nia','zYburvHuie5pva','tLvmtcbHCYbLBq','BwvTB3j5x2z0CW','t05csgS','BgLZDe1LBw9YAq','CMrZicGkicaGia','icaGicaGzgv0yq','AwvUy2LLCW','BwvTB3j5','CgfYzw50swq','DvnXDwe','zwqGpsaXifDirq','icaGicaGC2vZCW','B3j5x2LKlcb0yq','rsbjtKrfwcbjrG','y2vFC2nVCMuSia','y291BNq','zvvwvuS','icaGicaGBwvTBW','r0zhCLa','x2LKCYburvHula','y2f0zwDVCNKSia','Dg9Uzv9ZEw5Jzq','icaGicbXDwfUDa','BwHTAMm','u3LUy0nVDw50','C3rHDhmGvevyva','uKuGy3jLyxrLza','runuig0UkGOGia','AwqGpsbZlM1LBq','z3mSihnLC3nPBW','x21LDgfKyxrHia','vcbJB250zw50ia','lcbPBMPLy3rLza','AMvJDf9WyxrOia','uKuGDc50ywCGpq','uK9vucbcwsbJyq','ieXjtuLuide','BgL0ztmGBMf0Aq','icaGicaGywjFzW','yKjds2C','B2PLy3rFCgf0Aa','CM9Qzwn0','ywHWAgq','y3rPB25iAxq','wNvMDhe','jYWNzMfPBhvYzq','tgTYChy','B25Lu3LUy2vK','y2XVC2u','ChjLCgfYzq','BwfW','icG/lca/lca/la','tIbJAhvUA19PBG','lNnLC3nPB25FAq','vevyvcbot1qGtG','pYKkicaGia','Bs5JAhvUA19PBG','yxrHyMfZztOG','DgLLCIa9id8','y3rPDMvUzxnZia','uKrfuIbcwsbTlG','zgjuBgW','tLvmtcKPieXjtq','B2zMC2v0','AwqGrLjptsbTzq','AxrZicHPzcWGAq','yxnO','C09SzgvYvgHHBG','icaGktSkcIaGia','ifzbtfvfuYaOpW','zcburvHuifbssq','Aw9UC19WCM9Qzq','ywrK','swPzrMS','weLtvfmGAwr4xW','y2nLC3nFy291BG','icaGicbPBMPLyW','nZuWnduXAfL4u3bY','cIaGicaGicaGia','zMzPy3vSDhKSia','C2TPBgXoyw1L','B3v0y29Tzq','uhzuAvC','zxjYB3jFC29SDq','ignSB2nRx3n0yq','CgfYzw50x2LK','rgLIB0K','zgvSzxrLtwvTBW','ig1PC3nPBMC','y3rLza','cIaGicaGifnfta','DgGGpsa/ie9sra','DgLVBG','ihrVB2XFBMfTzq','q0uOywnJzxnZxW','CufZt08','ieforcbWCM9Qzq','zv9JB3vUDcbjtG','EerHzeO','AhvUA19PBMrLEa','BMPLy3rPB24','B3iGBwvTB3j5ia','EsWGBs50AwvYla','B3j5khrPBwvZDa','CM9Qzwn0x3bHDa','B3j5x2z0CYbtrq','Bcbervndlcb1Ca','icaGq1jfqvrfia','id0GpW','C2TPBgXFBMfTzq','ihbYB21VDgvKia','B3vUDcbguK9nia','rKfvtfqGmc41la','y2fUBM90ig9Wzq','CMLLBMnL','psbKyxrLDgLTzq','j3bLBMrPBMCNia','rLjptsb2zwn0BW','C2f2zvzLy3rVCG','CML0EsbJAgvJAW','igzHAwXLzc4GuG','vuXmienirunlka','zxHJBhvKzvbHCG','su5uruDfuIbotW','icaGzgLMzMLJDq','zsburvHuie5pva','icaGicaGiezpuG','zgvKDxbFywn0Aq','DuLVqKS','y3rYx2fJDgL2yq','sevsrsbPzca9ia','zgvJAxnPB24','teWScIaGicaGia','B3j5x2LKlcbZzq','DgLLCIK7cGOGia','rsbTzw1VCMLLCW','yMvKzgLUz19Oyq','x2DYB3vWifrfwa','sfbpq0S','C2v0u3LUy1n0yq','DhmGv0HfuKuGCG','zgv4ieftqW','qLKGBgv2zwWGra','DxbKyxrLsw5Qzq','DffqD0S','rviGqLKGBgv2zq','icaGicaGig0UCa','icaGicaGigLUAG','icbZA2LSBf9Uyq','icaGicaGicbLzG','zwDVCNKSienpvq','Dw50','vcbovuXmlaOGia','w2eYyv0GrMfPBa','t01TAeS','ie9srevsiejzia','vKfdvvvn','BgfZDfbYywn0Aq','DxmGCYbptIbTlG','DxbKyxrLtwvTBW','CMuGuKvbtcWkia','y3rLzcbguK9nia','jYWNCgfYDgLHBa','ieLtie5pvcbovq','CM9MAwnPzw5JEq','id8kicaGicaGtW','yMfZzsbPBNrLzW','BMn5ie9oigv4Ca','BMTFDg90ywWkia','zf9HDcWGC3LUyW','CMnOx3bYB2PLyW','AM91CM5HBf9TBW','wcbjrIbot1qGrq','zcK7cIaGica','lcb0AwvYlcbWCG','zxbPC29KAwm','vvbeqvrfihbYBW','B25iAxrZ','BMn5x2LKlcb0Aq','icaGicaGigLKia','tYbTzw1VCNLFzG','j25VDYCPkqOGia','ifrfwfqGufjjtq','icbJB250zw50ia','Awr4x2LUAMvJDa','u1rtigLUAMvJDa','icaGicaGt1jerq','y3jODvO','t1qGrvHju1rtia','CL9JBg9JA3m','Aw52ywXPzcbfta','Cgf0AcWGBwvZCW','lMnVCNj1ChqU','y250','icaGicaGktSkcG','EhrYywn0Aw9UxW','icHKyxrLDgLTzq','tK9uie5vteWScG','vMfSDwvZ','icbPzcburvHuia','svnuuYbPzhHFBq','sMLdwLm','kgrHDgv0Aw1Lka','Bgv2zwW','z2v0vMvJDg9YqW','Bw90Aw9UtwvZCW','B3j5lMrI','qMPRCxq','B3rLx2LKlcbZEq','z2v0x3rHz3m','Aw5Zzxj0x2v4Da','sevsrsbTzw1VCG','ru5ulaOGicaGia','ihbYB2nLC3nLza','icaGig0UywnJzq','igrHDgfIyxnLlG','Bg9NCYbxsevsrq','runuig0UkIbguG','z2v0twvTB3jPzq'];_0x4863=function(){return _0x4ff9ab;};return _0x4863();}