@privacyscrubber/mcp-server 1.7.2 → 1.7.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.
package/scrubber-core.cjs CHANGED
@@ -1,15 +1,1423 @@
1
1
  /**
2
- * @license
3
- * PrivacyScrubber Core Processing Engine (ZTDS)
4
- * Copyright (c) 2026 PrivacyScrubber. All Rights Reserved.
2
+ * PrivacyScrubber Core Engine — Shared Module
3
+ * Pure JavaScript, zero DOM dependencies.
4
+ * Used by both the Chrome Extension and (via extraction) the main website.
5
+ *
6
+ * Zero-server rule: No fetch(), no XMLHttpRequest, no external calls.
7
+ * Airplane Mode Verified: works with no network after load.
8
+ */
9
+
10
+ // ─── Regex Rules ─────────────────────────────────────────────────────────────
11
+ (function() {
12
+ if (typeof window !== 'undefined' && window.PrivacyScrubberCore && window.PrivacyScrubberCore.isInitialized) return;
13
+
14
+ function getEngine() {
15
+ if (typeof window !== 'undefined' && window.PrivacyScrubberEngine) return window.PrivacyScrubberEngine;
16
+ if (typeof global !== 'undefined' && global.PrivacyScrubberEngine) return global.PrivacyScrubberEngine;
17
+ if (typeof require === 'function') {
18
+ try { return require('./ps-pii-engine.cjs'); } catch(e) {}
19
+ try { return require('./ps-pii-engine.js'); } catch(e) {}
20
+ try { return require('../chrome-extension/ps-pii-engine.js'); } catch(e) {}
21
+ }
22
+ return null;
23
+ }
24
+
25
+ /**
26
+ * Runtime Initialization for dynamic rule synchronization.
27
+ * @param {Object} config - { regexes, profiles, names }
28
+ */
29
+ function init(config) {
30
+ if (!config) return;
31
+ const engine = getEngine();
32
+ if (engine) engine.init(config);
33
+ if (typeof window !== 'undefined' && window.PrivacyScrubberCore) {
34
+ window.PrivacyScrubberCore.isInitialized = true;
35
+ }
36
+ }
37
+
38
+ // Stitcher runs for ALL profiles — LEGAL_STARTERS guard prevents false positives.
39
+
40
+ // Signal A: line ends with a name fragment (all-caps or mixed-case caps word or initial+dot)
41
+ // e.g. "KKKKK I.", "John I.", "JOHNSON", or "Johnson"
42
+ const RE_LINE_ENDS_AS_NAME = /(?:^|[ ,])(?:[A-Z]{2,}(?:[A-Z'-]*[A-Z])?|[A-Z][a-z]+(?:[' -][A-Z][a-z]+)*)(?:\s+[A-Z]\s*\.?)*\s*$/m;
43
+
44
+ // Signal B: next line starts with a surname (all-caps or mixed-case) — supports short surnames (e.g. Li, Wu)
45
+ const RE_LINE_STARTS_AS_SURNAME = /^(?:[A-Z][a-z]+(?:[A-Za-z'-]*)?|[A-Z]{2,}(?:[A-Z'-]*[A-Z])?)(?:'[sS])?(?:[,\s]|$)/;
46
+
47
+ // Signal C: line is exactly a middle initial + optional dot
48
+ const RE_MIDDLE_INITIAL = /^[A-Z]\s*\.?,?\s*$/;
49
+
50
+ // Guard: if next line starts with one of these words, it is a legal/structural paragraph
51
+ // starter — NOT a surname. Skip stitching to avoid false positives.
52
+ const LEGAL_STARTERS = new Set([
53
+ // Mixed-case legal clause starters
54
+ 'Wherein','That','This','The','Said','Dated','Whereas','Now','Therefore',
55
+ 'Hereby','Herein','Hereto','Herewith','Hereafter','Upon','Pursuant',
56
+ 'Between','Among','Under','Within','Without','During','After','Before',
57
+ 'Each','Any','All','Such','Both','Either','Neither','No','Not','If','When',
58
+ // ALL-CAPS equivalents (trust/deed documents often use all-caps paragraphs)
59
+ 'WHEREIN','THAT','THIS','WHEREAS','NOW','THEREFORE','HEREBY','HEREIN',
60
+ 'PURSUANT','BETWEEN','AMONG','UNDER','DURING','AFTER','BEFORE',
61
+ 'TRUST','AGREEMENT','DEED','SCHEDULE','EXHIBIT','ARTICLE','SECTION'
62
+ ]);
63
+
64
+ function stitchOrphanedNameLines(text, profile) {
65
+ // Normalize line endings: \r\n (Windows) and \r (old Mac) → \n
66
+ // Prevents stitcher from silently failing on PDFs with non-Unix line endings
67
+ text = text.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
68
+ // Only run on multi-line text (single-line paste has nothing to stitch)
69
+ if (!text.includes('\n')) return text;
70
+ const lines = text.split('\n');
71
+ if (lines.length < 2) return text;
72
+ const result = [];
73
+ let i = 0;
74
+ while (i < lines.length) {
75
+ const line = lines[i];
76
+ const next1 = lines[i + 1];
77
+ const next2 = lines[i + 2];
78
+
79
+ // 1. Try 3-line stitch first: Firstname \n MiddleInitial \n Surname
80
+ if (next1 !== undefined && next2 !== undefined &&
81
+ RE_LINE_ENDS_AS_NAME.test(line) &&
82
+ RE_MIDDLE_INITIAL.test(next1.trim()) &&
83
+ RE_LINE_STARTS_AS_SURNAME.test(next2.trimStart())) {
84
+
85
+ const firstWord = (next2.trimStart().match(/^[A-Za-z]+/) || [''])[0];
86
+ if (LEGAL_STARTERS.has(firstWord)) {
87
+ result.push(line);
88
+ i++;
89
+ } else {
90
+ result.push(line.trimEnd() + ' ' + next1.trim() + ' ' + next2.trimStart());
91
+ i += 3;
92
+ }
93
+ }
94
+ // 2. Fall back to 2-line stitch
95
+ else if (next1 !== undefined && RE_LINE_ENDS_AS_NAME.test(line) && RE_LINE_STARTS_AS_SURNAME.test(next1.trimStart())) {
96
+ const firstWord = (next1.trimStart().match(/^[A-Za-z]+/) || [''])[0];
97
+ if (LEGAL_STARTERS.has(firstWord)) {
98
+ result.push(line);
99
+ i++;
100
+ } else {
101
+ result.push(line.trimEnd() + ' ' + next1.trimStart());
102
+ i += 2;
103
+ }
104
+ } else {
105
+ result.push(line);
106
+ i++;
107
+ }
108
+ }
109
+ return result.join('\n');
110
+ }
111
+
112
+ /**
113
+ * Protect PII from plain text.
114
+ *
115
+ * @param {string} text - Raw input text
116
+ * @param {Array<{label: string, pattern: string}>} [customRules=[]] - Optional PRO regex rules or exact text
117
+ * @returns {{ scrubbedText: string, tokenMap: Object, count: number }}
118
+ * scrubbedText: text with PII replaced by tokens like [NAME_1]
119
+ * tokenMap: { "[NAME_1]": "John Doe", ... } — for data reveal
120
+ * count: total number of items protected
121
+ * uniqueUnmasked: Set of unmasked values
122
+ */
123
+ function scrubText(text, customRules = [], tokenLabelMap = {}, profile = 'General', existingSessionMap = {}, isPro = false) {
124
+ if (!text) return { scrubbedText: "", tokenMap: {}, count: 0, uniqueUnmasked: new Set(), trialMeta: null, executionMs: 0 };
125
+
126
+ const executionStartMs = (typeof performance !== 'undefined' && typeof performance.now === 'function') ? performance.now() : Date.now();
127
+ // Stitch PDF-split name fragments across line breaks (all profiles)
128
+ text = stitchOrphanedNameLines(text, profile);
129
+
130
+ // Protect system prompt from being scrubbed or counted
131
+ let extractedSystemPrompt = "";
132
+ let textToProcess = text.replace(/[\u200b\u200c\u200d\ufeff]/g, '');
133
+
134
+ const isSpecialized = profile && profile.toLowerCase() !== 'general';
135
+
136
+ // SDK / Core Engine Limits Enforcer (Free Tier)
137
+ if (!isPro) {
138
+ const charLimit = isSpecialized ? 5000 : 15000;
139
+ if (textToProcess.length > charLimit) {
140
+ throw new Error(`PrivacyScrubber Free Tier limit exceeded (${charLimit.toLocaleString()} chars). Please upgrade to PRO or TEAMS.`);
141
+ }
142
+ }
143
+
144
+ let trialMeta = null;
145
+
146
+ // Split attached table labels/headers (e.g. Sarah MitchellEmail: -> Sarah Mitchell Email:)
147
+ // Specifically matches a letter followed directly by field names and a colon
148
+ textToProcess = textToProcess.replace(/([a-zA-Z])(Email|Phone|Mobile|Tel|Address|IP|ID|URL|SSN|Date):/g, '$1 $2:');
149
+
150
+ const sysMarker = "[Privacy Scrubber Mode]";
151
+ const oldMarker = "[SYSTEM INSTRUCTION: DATA PRIVACY MODE]";
152
+ const newMarker = "[Context: identifiers";
153
+ if (textToProcess.includes(sysMarker) || textToProcess.includes(oldMarker) || textToProcess.includes(newMarker)) {
154
+ const sysPromptRegex = /(?:----------------------\s*)?(?:\[SYSTEM INSTRUCTION: DATA PRIVACY MODE\]|\[Privacy Scrubber Mode\]|\[Context: identifiers)[\s\S]*/;
155
+ const match = textToProcess.match(sysPromptRegex);
156
+ if (match) {
157
+ extractedSystemPrompt = match[0];
158
+ textToProcess = textToProcess.replace(sysPromptRegex, '');
159
+ }
160
+ }
161
+ const sessionMap = {};
162
+ const counters = { NAME: 0, EMAIL: 0, PHONE: 0, ID: 0, FINANCIAL: 0, SECRET: 0, ADDRESS: 0, CUSTOM: 0, SSN: 0, DATE: 0, PHI: 0 };
163
+ const customCounters = {};
164
+ const plaintextToTokenAtlas = {};
165
+
166
+ // Seed counters and atlas from existing session map to prevent overwrites
167
+ if (existingSessionMap && typeof existingSessionMap === 'object') {
168
+ Object.entries(existingSessionMap).forEach(([token, value]) => {
169
+ const match = token.match(/^\[([A-Z_a-z0-9]+)_(\d+)\]$/);
170
+ if (match) {
171
+ const type = match[1];
172
+ const idx = parseInt(match[2], 10);
173
+ if (counters[type] !== undefined) {
174
+ counters[type] = Math.max(counters[type], idx);
175
+ } else {
176
+ customCounters[type] = Math.max(customCounters[type] || 0, idx);
177
+ }
178
+ }
179
+ plaintextToTokenAtlas[value.toLowerCase()] = token;
180
+ plaintextToTokenAtlas[value] = token;
181
+ });
182
+ }
183
+
184
+
185
+ // Default labels
186
+ const labels = {
187
+ NAME: 'NAME', EMAIL: 'EMAIL', PHONE: 'PHONE', ID: 'ID',
188
+ FINANCIAL: 'FINANCIAL', SECRET: 'SECRET', ADDRESS: 'ADDRESS', CUSTOM: 'CUSTOM',
189
+ SSN: 'SSN', DATE: 'DATE', PHI: 'PHI',
190
+ ...tokenLabelMap
191
+ };
192
+
193
+
194
+ const PROFILE_ALIAS_MAP = (getEngine() && getEngine().PROFILE_ALIAS_MAP) ? getEngine().PROFILE_ALIAS_MAP : {};
195
+
196
+ // Node.js local license key validation enforcement (ZTDS Compliance)
197
+ if (typeof process !== 'undefined' && process.env && typeof require === 'function' && profile && profile.toLowerCase() !== 'general') {
198
+ try {
199
+ const key = (process.env.PRIVACYSCRUBBER_KEY || "").trim();
200
+ let isPro = false;
201
+ if (key) {
202
+ const PUBLIC_KEY = `-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw3f37srO402PU4++Baf8\nFG8LY4l/IA3NKLlBnYmNHRTjfI/O/w5PDZn1xPcUQevojA1J+A5moKcjXsJ5b21X\nhJoYSkE4vLpcVYOt1FhRwEHs1APDSyss0HixboLz2eW2XQf2NbwajWtNlyxvgczO\nKE6ClnLomtsaKywwqB4alzdYnnnFJttFPjwmgPSO7D9AgN9sYaVkXOaOFrIZ90Ng\nTRhSHUeL7ReltWlCHwz9xf5m2FrKtxr2VBlEoyPjsFzalHMey1EX+yXe81zM7IIi\nt1Z8agLzo7WIfNBAIWmRlerTplaFFZrQgdF5g/Y0n8IIMZOtadgoY8E855psDNZV\n7wIDAQAB\n-----END PUBLIC KEY-----`;
203
+ const crypto = require('crypto');
204
+ const [payloadBase64, signatureBase64] = key.split('.');
205
+ if (payloadBase64 && signatureBase64) {
206
+ const verifier = crypto.createVerify('SHA256');
207
+ verifier.update(payloadBase64);
208
+ const isVerified = verifier.verify(PUBLIC_KEY, signatureBase64, 'base64');
209
+ if (isVerified) {
210
+ const payload = JSON.parse(Buffer.from(payloadBase64, 'base64').toString('utf8'));
211
+ if (!payload.expires || payload.expires > Math.floor(Date.now() / 1000)) {
212
+ isPro = true;
213
+ }
214
+ }
215
+ }
216
+ }
217
+ if (!isPro) {
218
+ profile = 'General';
219
+ }
220
+ } catch (e) {
221
+ profile = 'General';
222
+ }
223
+ }
224
+
225
+ const engine = getEngine();
226
+ if (!engine) {
227
+ return { scrubbedText: textToProcess, count: 0, tokenMap: {}, piiBreakdown: {}, uniqueUnmasked: new Set(), trialMeta: null, executionMs: 0 };
228
+ }
229
+ const detectResult = engine.detectMatches(textToProcess, profile, customRules, [], null);
230
+ let filtered = detectResult.filteredMatches;
231
+ textToProcess = detectResult.processedText;
232
+
233
+ // Assign tokens in left-to-right order
234
+
235
+ const uniqueUnmasked = new Set();
236
+
237
+ filtered.forEach(m => {
238
+ // Deduplication Check: Reuse tokens for identical values (case-insensitive for core types)
239
+ const matchKey = m.type === 'CUSTOM' || m.type === 'ID' || m.type === 'SECRET' ? m.value : m.value.toLowerCase();
240
+
241
+ uniqueUnmasked.add(matchKey);
242
+
243
+ if (plaintextToTokenAtlas[matchKey]) {
244
+ m.token = plaintextToTokenAtlas[matchKey];
245
+ return;
246
+ }
247
+
248
+ // Generate unique token using custom labels if provided
249
+ const label = m.customLabel || labels[m.type] || m.type;
250
+ const isBuiltIn = counters[m.type] !== undefined;
251
+
252
+ if (isBuiltIn && !m.customLabel) {
253
+ // Built-in type (NAME, EMAIL, PHONE, etc.) — use seeded counters[] for collision prevention
254
+ counters[m.type]++;
255
+ m.token = `[${label}_${counters[m.type]}]`;
256
+ } else {
257
+ // Custom label (PRO rule) — use customCounters[]
258
+ customCounters[label] = (customCounters[label] || 0) + 1;
259
+ m.token = `[${label}_${customCounters[label]}]`;
260
+ }
261
+
262
+ plaintextToTokenAtlas[matchKey] = m.token;
263
+ sessionMap[m.token] = m.value;
264
+ });
265
+
266
+ // Replace from end → start (preserves string indices while mutating result)
267
+ const rightToLeft = [...filtered].sort((a, b) => b.start - a.start);
268
+ let result = textToProcess;
269
+ rightToLeft.forEach(m => {
270
+ result = result.substring(0, m.start) + m.token + result.substring(m.end);
271
+ });
272
+
273
+ const piiBreakdown = {};
274
+ Object.keys(sessionMap).forEach(k => {
275
+ let t = k.split('_')[0].replace('[', '');
276
+ piiBreakdown[t] = (piiBreakdown[t] || 0) + 1;
277
+ });
278
+
279
+ const executionEndMs = (typeof performance !== 'undefined' && typeof performance.now === 'function') ? performance.now() : Date.now();
280
+
281
+ return {
282
+ scrubbedText: extractedSystemPrompt + result,
283
+ tokenMap: sessionMap,
284
+ count: Object.keys(sessionMap).length,
285
+ uniqueUnmasked: uniqueUnmasked,
286
+ piiBreakdown: piiBreakdown,
287
+ trialMeta: trialMeta,
288
+ executionMs: Math.max(0, executionEndMs - executionStartMs)
289
+ };
290
+ }
291
+
292
+ const LABEL_ALIASES = {
293
+ NAME: ['NAME', 'NAMES', 'USERNAME', 'USER_NAME', 'CLIENTNAME', 'CLIENT_NAME', 'CANDIDATE_NAME', 'FULL_NAME', 'FIRSTNAME', 'FIRST_NAME', 'LASTNAME', 'LAST_NAME', 'SURNAME', 'ИМЯ', 'ИМЕНА', 'ПОЛЬЗОВАТЕЛЬ', 'ФИО', 'КЛИЕНТ', 'NOMBRE', 'NOMBRES', 'USUARIO', 'CLIENTE', 'NOM', 'NOMS', 'UTILISATEUR', 'NAME', 'NAMEN', 'BENUTZER', 'KUNDE', 'NOME', 'COGNOME', 'UTENTE', 'NAAM', 'GEBRUIKER', 'KLANT'],
294
+ EMAIL: ['EMAIL', 'EMAILS', 'EMAILADDR', 'EMAIL_ADDR', 'EMAILADDRESS', 'EMAIL_ADDRESS', 'EMAIL_ADR', 'MAIL', 'MAILS', 'ПОЧТА', 'ЭЛ_ПОЧТА', 'АДРЕС_ПОЧТЫ', 'МЕЙЛ', 'МАЙЛ', 'CORREO', 'COURRIEL', 'CORREO_ELECTRONICO', 'MEL'],
295
+ PHONE: ['PHONE', 'PHONES', 'PHONENUM', 'PHONE_NUM', 'PHONENUMBER', 'PHONE_NUMBER', 'TEL', 'TELS', 'TELEPHONE', 'TELEPHONES', 'MOBILE', 'CELL', 'ТЕЛЕФОН', 'ТЕЛЕФОНЫ', 'НОМЕР_ТЕЛЕФОНА', 'НОМЕР', 'MOVIL', 'PORTABLE', 'HANDY', 'TELEFONI', 'CELLULARE'],
296
+ ID: ['ID', 'IDS', 'IDNUM', 'ID_NUM', 'IDNUMBER', 'ID_NUMBER', 'IDENTIFIER', 'IDENTIFIERS', 'PASSPORT', 'SSN', 'EIN', 'TAXID', 'TAX_ID', 'LICENSE', 'LICENSE_PLATE', 'ИД', 'ИДЕНТИФИКАТОР', 'ПАСПОРТ', 'СНИЛС', 'ИНН', 'IDENTIFICADOR', 'PASAPORTE', 'IDENTIFIANT', 'PASSEPORT', 'IDENTIFIKATOR', 'PASS', 'IDENTIFICATORE', 'PASSAPORTO'],
297
+ FINANCIAL: ['FINANCIAL', 'FINANCIALS', 'MONEY', 'AMOUNT', 'PRICE', 'COST', 'CARD', 'CREDITCARD', 'DEBITCARD', 'ACCOUNT', 'IBAN', 'BIC', 'ДЕНЬГИ', 'СУММА', 'КАРТА', 'СЧЕТ', 'БАНК', 'DINERO', 'CANTIDAD', 'TARJETA', 'CUENTA', 'ARGENT', 'MONTANT', 'COMPTE', 'GELD', 'BETRAG', 'KONTO'],
298
+ ADDRESS: ['ADDRESS', 'ADDRESSES', 'STREET', 'STREET_ADDRESS', 'CITY', 'STATE', 'ZIP', 'ZIPCODE', 'ZIP_CODE', 'COUNTRY', 'LOCATION', 'АДРЕС', 'АДРЕСА', 'УЛИЦА', 'ГОРОД', 'СТРАНА', 'DIRECCION', 'DIRECCIONES', 'CALLE', 'CIUDAD', 'PAIS', 'ADRESSE', 'ADRESSES', 'RUE', 'VILLE', 'STRASSE', 'STADT', 'LAND'],
299
+ DATE: ['DATE', 'DATES', 'BIRTHDAY', 'DOB', 'ДАТА', 'ДАТЫ', 'ДЕНЬ_РОЖДЕНИЯ', 'FECHA', 'FECHAS', 'CUMPLEANOS', 'ANNIVERSAIRE', 'DATUM', 'DATEN', 'GEBURTSTAG'],
300
+ PHI: ['PHI', 'MRN', 'NHS', 'HEALTH', 'MEDICAL', 'PATIENT', 'МЕД', 'ПАЦИЕНТ', 'PACIENTE'],
301
+ SECRET: ['SECRET', 'SECRETS', 'KEY', 'KEYS', 'TOKEN', 'TOKENS', 'PASSWORD', 'PASSWORDS', 'AUTH', 'APIKEY', 'API_KEY', 'КЛЮЧ', 'КЛЮЧИ', 'ПАРОЛЬ', 'ПАРОЛИ', 'ТОКЕН', 'CLAVE', 'CONTRASENA', 'CLE', 'MOT_DE_PASSE', 'SCHLUESSEL', 'PASSWORT'],
302
+ CUSTOM: ['CUSTOM', 'CUSTOMS', 'RULE', 'RULES', 'КАСТОМ', 'ПРАВИЛО']
303
+ };
304
+
305
+ function getLabelAliases(label) {
306
+ const upper = label.toUpperCase();
307
+ if (LABEL_ALIASES[upper]) {
308
+ return LABEL_ALIASES[upper];
309
+ }
310
+ const aliases = new Set([label, upper, label.toLowerCase()]);
311
+ aliases.add(label.replace(/_/g, ' '));
312
+ aliases.add(label.replace(/_/g, '-'));
313
+ aliases.add(label.replace(/ /g, '_'));
314
+ aliases.add(label.replace(/-/g, '_'));
315
+ return Array.from(aliases);
316
+ }
317
+
318
+ function buildRestorationRegexAndRules(tokenMap) {
319
+ const keys = Object.keys(tokenMap);
320
+ if (keys.length === 0) {
321
+ return { compositeRegex: null, looseRules: [] };
322
+ }
323
+
324
+ const sortedKeys = [...keys].sort((a, b) => {
325
+ const innerA = a.replace(/^\[|\]$/g, '');
326
+ const innerB = b.replace(/^\[|\]$/g, '');
327
+ const matchA = innerA.match(/^([A-Za-z_0-9]+?)[-_]?(\d+)$/);
328
+ const matchB = innerB.match(/^([A-Za-z_0-9]+?)[-_]?(\d+)$/);
329
+
330
+ if (matchA && matchB) {
331
+ const idxA = parseInt(matchA[2], 10);
332
+ const idxB = parseInt(matchB[2], 10);
333
+ const labelA = matchA[1];
334
+ const labelB = matchB[1];
335
+
336
+ if (idxA !== idxB) {
337
+ return idxB - idxA;
338
+ }
339
+ if (labelA.length !== labelB.length) {
340
+ return labelB.length - labelA.length;
341
+ }
342
+ }
343
+ return b.length - a.length;
344
+ });
345
+
346
+ const looseRules = [];
347
+ const regexParts = [];
348
+
349
+ sortedKeys.forEach(k => {
350
+ const inner = k.replace(/^\[|\]$/g, '');
351
+ const match = inner.match(/^([A-Za-z_0-9]+?)[-_]?(\d+)$/);
352
+ if (match) {
353
+ const label = match[1];
354
+ const baseIndex = parseInt(match[2], 10);
355
+ const aliases = getLabelAliases(label);
356
+
357
+ const escapedAliases = aliases.map(a => a.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
358
+ const aliasesGroup = `(?:${escapedAliases.join('|')})`;
359
+
360
+ const looseRegex = '\\[?\\s*' + aliasesGroup + '[-_\\s]*0*' + baseIndex + '\\s*\\]?';
361
+ looseRules.push({ patternStr: looseRegex, originalKey: k });
362
+ regexParts.push(looseRegex);
363
+ } else {
364
+ const safe = k.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
365
+ looseRules.push({ patternStr: safe, originalKey: k });
366
+ regexParts.push(safe);
367
+ }
368
+ });
369
+
370
+ const compositeRegex = new RegExp('(?<=^|[^a-zA-Z0-9_А-Яа-яЁё])(' + regexParts.join('|') + ')(?=$|[^a-zA-Z0-9_А-Яа-яЁё])', 'gi');
371
+
372
+ return { compositeRegex, looseRules };
373
+ }
374
+
375
+ /**
376
+ * Clean AI prompt prefix (e.g., "Claude responded:", "ChatGPT:") from the text.
5
377
  *
6
- * WARNING: This is proprietary, commercial software.
7
- * Unauthorized copying, modification, distribution, or use of this source code,
8
- * via any medium, is strictly prohibited. Protected by international copyright
9
- * laws and treaties.
378
+ * @param {string} text
379
+ * @returns {string}
380
+ */
381
+ function cleanAIPromptPrefix(text) {
382
+ if (!text) return "";
383
+ let cleaned = text.replace(/^\s*(Claude responded|Claude|ChatGPT|Gemini|Grok|DeepSeek|Kimi|Copilot|Assistant|User)\s*(?::|\bsaid\b|\bresponded\b)\s*/i, "");
384
+ cleaned = cleaned.replace(/^\s*Edit\s*\n+/i, "");
385
+ cleaned = cleaned.replace(/\s*\bEdit\s+in\s+a\s+page\b\s*$/i, "");
386
+ return cleaned;
387
+ }
388
+
389
+ /**
390
+ * Reverse-protect: replace tokens in AI response with originals from tokenMap.
391
+ *
392
+ * @param {string} aiResponse - Text containing tokens like [NAME_1]
393
+ * @param {Object} tokenMap - { "[NAME_1]": "John Doe", ... }
394
+ * @returns {{ restoredText: string, restoredCount: number }}
395
+ */
396
+ function unscrubText(aiResponse, tokenMap) {
397
+ let text = cleanAIPromptPrefix(aiResponse);
398
+ let restoredCount = 0;
399
+
400
+ const { compositeRegex, looseRules } = buildRestorationRegexAndRules(tokenMap);
401
+ if (compositeRegex) {
402
+ text = text.replace(compositeRegex, (match) => {
403
+ restoredCount++;
404
+ let origKey = match;
405
+ for (const rule of looseRules) {
406
+ if (new RegExp('^' + rule.patternStr + '$', 'i').test(match)) {
407
+ origKey = rule.originalKey;
408
+ break;
409
+ }
410
+ }
411
+ return tokenMap[origKey] || match;
412
+ });
413
+ }
414
+
415
+ return { restoredText: text, restoredCount };
416
+ }
417
+
418
+ /**
419
+ * Reverse-protect with HTML highlighting: replace tokens in AI response with originals wrapped in span.
10
420
  *
11
- * For enterprise licensing inquiries: legal@privacyscrubber.com
12
- * Domain Execution Restricted: This engine will intentionally halt if executed
13
- * outside an authorized PrivacyScrubber environment.
421
+ * @param {string} aiResponse - Text containing tokens like [NAME_1]
422
+ * @param {Object} tokenMap - { "[NAME_1]": "John Doe", ... }
423
+ * @returns {{ restoredHTML: string, restoredCount: number }}
14
424
  */
15
- function _0x4336(_0x14333d,_0x4c416c){_0x14333d=_0x14333d-(0x1*-0x49+0x1*0x21b1+-0x20e7*0x1);const _0x732068=_0x431c();let _0x15ef20=_0x732068[_0x14333d];if(_0x4336['obHFmB']===undefined){var _0xb2796b=function(_0x18c230){const _0x53c307='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x7af8a8='',_0x46143e='';for(let _0xda1f84=-0x2f*-0x37+0x2529+-0x2f42,_0x5b34c4,_0x223354,_0x2559e5=0x85*-0x41+0x17f8+0x9cd;_0x223354=_0x18c230['charAt'](_0x2559e5++);~_0x223354&&(_0x5b34c4=_0xda1f84%(0x3*-0x43f+-0x1ff4+0x2cb5)?_0x5b34c4*(-0xf1*0x17+0x3c*-0x83+0x1189*0x3)+_0x223354:_0x223354,_0xda1f84++%(0xa49*-0x3+-0x1b2*0x15+-0x5b*-0xbb))?_0x7af8a8+=String['fromCharCode'](0x1*-0x13f+0x1396*-0x1+0x15d4&_0x5b34c4>>(-(-0x1c5*-0xd+-0x20e4+0x9e5)*_0xda1f84&0x2*-0x7dc+-0x1*-0x1bd7+-0xc19)):-0xc5d+-0xa15+-0xa9*-0x22){_0x223354=_0x53c307['indexOf'](_0x223354);}for(let _0x9772f9=0x228e+-0x1eda+0x1da*-0x2,_0x59a9aa=_0x7af8a8['length'];_0x9772f9<_0x59a9aa;_0x9772f9++){_0x46143e+='%'+('00'+_0x7af8a8['charCodeAt'](_0x9772f9)['toString'](-0x1*0x106c+0x25ae*-0x1+0x362a))['slice'](-(-0x57*-0x13+-0xb*0x67+0x7*-0x4a));}return decodeURIComponent(_0x46143e);};_0x4336['xdtRoG']=_0xb2796b,_0x4336['PJMooE']={},_0x4336['obHFmB']=!![];}const _0x72a9e=_0x732068[-0x2*-0x607+0x1*0x2019+-0x2c27],_0x25091a=_0x14333d+_0x72a9e,_0x239b33=_0x4336['PJMooE'][_0x25091a];return!_0x239b33?(_0x15ef20=_0x4336['xdtRoG'](_0x15ef20),_0x4336['PJMooE'][_0x25091a]=_0x15ef20):_0x15ef20=_0x239b33,_0x15ef20;}(function(_0x25d5c8,_0x4539d1){const _0x131048={_0x1f4a19:0xa4,_0x152e48:0x1d4,_0x2a0930:0x22d,_0x41815b:0x2dd,_0x2c6bea:0x26b,_0x1c0cea:0x244,_0x4ede35:0x93,_0x142532:0x2fe,_0x20cfe1:0x313},_0x3cd27f=_0x4336,_0x4a3c72=_0x25d5c8();while(!![]){try{const _0x4afdf9=-parseInt(_0x3cd27f(_0x131048._0x1f4a19))/(-0x126f+0x2e*-0x5+0x1356)*(-parseInt(_0x3cd27f(_0x131048._0x152e48))/(0xca*-0x4+-0x14db+0x1805))+parseInt(_0x3cd27f(0x2b3))/(0x73*-0xd+0x3*-0x9aa+-0x1*-0x22d8)*(-parseInt(_0x3cd27f(_0x131048._0x2a0930))/(0x2*-0x1173+0x1fc7+0x323*0x1))+-parseInt(_0x3cd27f(_0x131048._0x41815b))/(0x9*0x1c1+-0x15*-0xb5+-0x1e9d)*(-parseInt(_0x3cd27f(0xd8))/(-0x14ac+0x4ab*-0x3+-0xbd*-0x2f))+-parseInt(_0x3cd27f(_0x131048._0x2c6bea))/(0x7*0x42c+-0x103f*0x1+0x2*-0x677)*(parseInt(_0x3cd27f(0x171))/(0xf3a+0x122c+0x1*-0x215e))+-parseInt(_0x3cd27f(_0x131048._0x1c0cea))/(0x4d2+-0x1*-0x789+0x13*-0xa6)+parseInt(_0x3cd27f(_0x131048._0x4ede35))/(-0x1dd4+-0x2469+0x4247)+parseInt(_0x3cd27f(_0x131048._0x142532))/(0x26*0xc5+-0x21b7+0x484)*(parseInt(_0x3cd27f(_0x131048._0x20cfe1))/(0x1933*-0x1+0x20fb*0x1+-0x7bc));if(_0x4afdf9===_0x4539d1)break;else _0x4a3c72['push'](_0x4a3c72['shift']());}catch(_0x57fa3d){_0x4a3c72['push'](_0x4a3c72['shift']());}}}(_0x431c,-0x38887+-0x79cd*0x25+-0x8276*-0x3b),(function(){const _0x34dd8f={_0x53968a:0xd9,_0x54dbff:0xd6,_0x15f047:0x1ee,_0x3aad29:0x1b0,_0x4d5651:0x24d,_0x88892f:0x1bd,_0xf08c05:0x231,_0x4eb7be:0x18f,_0x4f4884:0x186,_0x20d37b:0x2a6,_0x11db71:0x1fc,_0x433994:0x2f4,_0x15229b:0x151,_0xdad4d3:0x270,_0x2fe8d9:0x18b,_0x52d5c:0x19a,_0x4b5269:0x298,_0x551c45:0x29f,_0x187577:0x11d,_0xf5bee2:0x21b,_0x4827f0:0x288,_0xe6b4ee:0x1ec,_0xc6948c:0x148,_0x2373f8:0x99,_0x23b4df:0x2ef,_0x342766:0x22e,_0x5c8776:0x24b,_0x3917e6:0x2ac,_0x59e45a:0x1c3,_0x554f8e:0xa5,_0x1c0a42:0x1cb,_0x125547:0x2fd,_0x2ede59:0x212,_0x47e787:0xbf,_0x248560:0x1c0,_0x6aacd8:0x141,_0x53ed0d:0xd2,_0x3285e9:0x1c5,_0x145229:0x205,_0x4c295c:0x22b,_0x18f695:0xcb,_0x575c71:0x2cc,_0x2027c3:0x30a,_0x248eb3:0x222,_0x5ae1f7:0x1ae,_0x589239:0x227,_0xb173ff:0x28c,_0x6abe53:0x192,_0x37ef4d:0x118,_0x352179:0x8f,_0x5970a6:0x12c,_0xfa2df7:0x202,_0x180a76:0x179,_0x2f57f0:0x19f,_0x4238b2:0x146,_0x47e8c4:0x83,_0x473bb5:0x228,_0x3223f9:0x18d,_0x4bcc2f:0x178,_0x3e34ca:0x292,_0x4d1093:0x14d,_0x5ab466:0x241,_0x5ed95d:0x226,_0x56ea2f:0xc6,_0x50c46d:0x152,_0x210eba:0x2d7,_0x215681:0x251,_0x8ca645:0x1aa,_0x30b33b:0xdc,_0x203af1:0x314,_0x5469a6:0x2b7,_0x21441d:0x225,_0x3b6476:0x1e5,_0x3b3b0f:0xf2,_0x11ac00:0x285,_0x3db2e2:0x301,_0x264d6c:0x156,_0xbf9ddc:0x216,_0x117a8f:0x1a3,_0x143aa0:0x1b5,_0x2047f3:0x299,_0x312015:0x163,_0x41a9ee:0xf0,_0x2a278d:0x19e,_0x148ef1:0x2cf,_0x897138:0x2a9,_0x4e5fac:0x1a1,_0x5ab60d:0xd0,_0x346d4a:0x253,_0x113497:0x30f,_0x52e594:0x246,_0x1393f6:0x214,_0x1cd342:0x19c,_0x22a310:0x29b,_0x49910e:0xa7,_0x50e761:0x140,_0x2668ad:0x23e,_0x23c4b0:0x175,_0x2c8cdc:0xf4,_0x28b8cd:0x117,_0x5f5904:0x269,_0x11e780:0x232,_0x2d29a1:0x242,_0x105c39:0x92,_0x360b5f:0xfc,_0x5e6f9b:0x252,_0x138ff6:0x16d,_0x410867:0x1a8,_0xc5d27e:0x311,_0x21c521:0x85,_0x2b1d2e:0x23c,_0x268c50:0x239,_0x546400:0x305,_0x1828c1:0xc2,_0x451a2e:0x2c3,_0x3ed6e1:0x15a,_0x97c415:0x1a9,_0x14167d:0x2da,_0x5ed182:0x12a,_0x3fa99b:0x1f6,_0x50f5cc:0x9a,_0x2a1509:0x23b,_0x22b709:0x2dc,_0x459f18:0x247,_0x4bed50:0x247,_0x5a6ebb:0x1dc,_0x317839:0x23b},_0x21516a={_0xf77bb8:0x1c2,_0x2d9d87:0x2cb},_0x58eb0c={_0x4a9de1:0x111,_0x42f4e3:0x1c2,_0x508c84:0x2cb,_0x1b8131:0x2cb},_0x1d312b={_0x2ec032:0xa9},_0x5bf8d4={_0x298c45:0x1c2},_0x546e19={_0x4f1cc2:0x2cb},_0xa25bda={_0x2aea7a:0xaf,_0x513084:0x103,_0x389bf1:0x2ea,_0x21ca21:0x21f,_0x250b07:0x293,_0x1144db:0x2e3,_0x4e5d34:0x2a3,_0x11c01c:0x150,_0x3db05a:0x2b9,_0x396d98:0xaf,_0xdb239a:0x1ca,_0x615fdb:0x184,_0x57cfa1:0x2a5,_0x4e55dc:0x190,_0x4dac0d:0x282},_0x4e468b={_0x55d351:0x161,_0xa1038f:0x1e7,_0x5b2862:0x125,_0x4e062c:0x278,_0x26b003:0x2dc},_0x44e9e1={_0x412057:0x197,_0x34cdf3:0x21a,_0x10e6a8:0xe3,_0x49de0a:0x230,_0x33ac4c:0xae,_0x4f36a8:0x2d2,_0x2c69b8:0x234,_0x1553e1:0xda,_0x4d7425:0x106,_0x2692ec:0x2d3,_0x1d1a6b:0x113,_0x25a5f6:0xb1,_0x5bf63a:0x27e,_0x248777:0x2a3,_0x243b44:0x1b4},_0x249fcb={_0x3c57c2:0x273,_0x39ee31:0x109,_0x77e276:0x1a5,_0x5a7609:0x27e,_0x353327:0x196,_0x3c9c59:0x240,_0x1ed016:0x240,_0x3baca5:0xf9,_0x29fb56:0x224,_0x4c7a68:0x1b6,_0x1dffcb:0x1b6,_0x25210f:0x30d,_0x3c873c:0x27e,_0x58681f:0x107,_0x188541:0x190,_0x594df3:0xb3,_0x10de03:0x1a5,_0x256518:0x2b0,_0x208b22:0x276,_0x2345cb:0x27e,_0x57de8f:0x107,_0x1426ac:0x1b6,_0x31773b:0x17d},_0x4b4604={_0x5c9978:0x296,_0x1d1235:0x8e,_0x5d9c5f:0x310,_0x49a6cf:0x101,_0x347772:0x92,_0x4b4990:0x101,_0x235fc9:0x1a5,_0x57b0cd:0x2bc,_0x52c7f4:0x101,_0x390566:0x101,_0x5b7fe1:0xd7,_0x2e2a37:0x1a5,_0x285105:0x2c2,_0x648629:0x296,_0x58ec4d:0x2e4},_0x43aa2f={_0x5c8ef5:0x1cf,_0x5ba389:0x2e2,_0x10450e:0x123,_0x1d2211:0x2e2,_0x1797bd:0x1cf},_0x49a309={_0x30ac92:0xb3,_0x21df3b:0x1b2,_0x1348b6:0x309,_0x3254c5:0x1a5,_0x45717a:0x1a5,_0x561b11:0x193,_0x35ec7e:0x1eb,_0xed052e:0x11c,_0x8b6b8e:0x1e9,_0x575d71:0xdf,_0x3cbe3c:0x276,_0x37f5e8:0x13d,_0x59b989:0x2a2,_0x546398:0x223,_0x12b1a4:0x107,_0x5d8051:0x281,_0x5cb91c:0x21a,_0x1ec067:0x1b4,_0x2dddc2:0x281,_0xcb050:0x281},_0x46131e={_0x1eac69:0x211,_0x2c61f9:0x23f,_0x17c4d8:0x2b5,_0x3fee9c:0x149,_0x5dda19:0x110,_0x1043c5:0x2b5,_0x1169cb:0xb4,_0x5daf8d:0x294,_0x6693dc:0x182,_0x51be16:0xd4,_0x57193d:0x121,_0x5c89b1:0x188,_0x3bf567:0x195,_0x525685:0x19d,_0x1d663c:0xfa,_0x384028:0x191,_0x589459:0xe4,_0x5782d0:0x25d,_0x573ee6:0x248,_0x26c129:0xe5,_0x1a496d:0x1f3,_0x4db55c:0x100,_0x9e0342:0x317},_0x14bfbb={_0x46ec76:0x277,_0xd98bc2:0x149,_0x6d15d7:0x110,_0x3cf28f:0x188,_0x4c81bc:0xec,_0x3bd93d:0x229,_0x1dee2c:0x147,_0x6d50e5:0x1a6,_0x251bbd:0x249,_0x47b3f5:0x161,_0x312fd8:0x12d,_0xe26b10:0x16b,_0xec7fbb:0x195,_0x2e5fb1:0x164,_0x38dab6:0x1c2,_0x184da3:0x234,_0x44f09f:0x1f3,_0x3b7634:0x2a4,_0x3a7295:0x129,_0x38ca14:0x2ed,_0x534188:0x128,_0x3b8c32:0x306,_0x392ca8:0x2a4,_0x3c53ec:0x1df,_0x11b7ea:0x18a,_0x5effa4:0x2a3,_0x20902b:0x129,_0x855471:0x234,_0x3c92d3:0x84,_0xcf101:0x2a3,_0x282b5a:0x234,_0x5b47a9:0x195,_0x43f68c:0x100,_0x50b401:0x263,_0x12a65:0x2f1,_0x28b5e1:0x1e2,_0x223155:0xd3,_0x1b1aad:0x206,_0x43c026:0xe2,_0x306d81:0x1ff,_0x370d1b:0x25e,_0x3ac868:0x195,_0x5af741:0x10d,_0x5c3ea0:0x110,_0x2f389a:0x110,_0x5244ec:0x1f3,_0x56a450:0x21c,_0xa2ee36:0x195,_0xddad16:0x90,_0x1d6415:0x14e,_0x401f15:0xb1,_0x34b152:0x2e8,_0x29a912:0x2b0,_0x39a73f:0x318,_0x1998d1:0x110,_0x5c25f4:0x206,_0x2d8fe2:0x234,_0x47881b:0x2e3,_0x110d23:0x2f9,_0x414b00:0x1f7,_0x4a4796:0x195,_0x23ab3c:0x182,_0x1959c7:0x2eb,_0x58229a:0x2b0,_0x2781b8:0xb8,_0x512826:0x2a3,_0x36ba47:0x1eb,_0x2aaaa5:0x150,_0x2cf482:0x279,_0x272172:0x150},_0x1f7d10={_0x474f2e:0x1f7},_0x468a45={_0x387036:0x318,_0x2cb6e0:0x27b,_0x56cd8e:0x223,_0x5dc373:0x1a7},_0x4d6482={_0x1d9448:0x195},_0x1bf80c={_0x173aa2:0x23a,_0x499260:0x23f,_0x524392:0x20a,_0x39069a:0x23a},_0x175b10={_0x1572ad:0x243,_0x21d437:0x1ab,_0x3e2e19:0x223,_0x2b0624:0x223},_0x2cea20={_0x24f129:0x20b,_0x4b4a60:0x1d6,_0x1ddf6f:0x1b1,_0x10914d:0x219,_0x4a7351:0x143,_0x562196:0x223,_0x422c29:0xce},_0x5b9930={_0x4a1f23:0x300,_0x43a9aa:0x223,_0x2abbb8:0x1a5},_0x1a994a={_0x18c271:0x126,_0x4e6b5a:0x13a,_0x388fb5:0x104,_0x2bb37a:0x318,_0x33f0ec:0x150,_0x2649a9:0x1a7,_0x50a2b6:0x1d6,_0x44d171:0x15f},_0x25309f={_0x44e32c:0xa3,_0x40d8c8:0x10f,_0x4c04a2:0x1b6,_0x3d64bf:0x20f,_0x33e8bf:0x272,_0x2afcda:0x2a2},_0x35bbde={_0x1d28aa:0x223,_0x5cc00c:0x2ee,_0x33f0f6:0x1f1,_0x5f4201:0x1b6,_0x1da7bf:0x20c,_0xaf71b8:0xde,_0x2c6bd9:0x2a2,_0x22969e:0x2a2},_0x22b753={_0x3bda76:0x276,_0x41c76d:0x2bd,_0x452da8:0x1d8,_0xcfdb9a:0x116,_0x457ed1:0x143,_0x1ac973:0x1b6},_0x3921d8={_0x2e7566:0x2cd,_0xc32e51:0x223,_0x58e82b:0x2bc,_0x17342e:0x223,_0x3cb889:0x1fe,_0x3be0c0:0x166,_0x46937b:0x1e0,_0x37a9d1:0x15b},_0x130072={_0x55f440:0xcd,_0x5cb57e:0x23a,_0x42c99d:0x1c8,_0x2bd6c3:0x2ce,_0x2a0b65:0x23f,_0x44b520:0x2a5,_0x513d1f:0x20a,_0x2bdba6:0x1b6,_0x5c9b50:0x119,_0x44ab41:0x319,_0x32d219:0x2b0,_0x324907:0xf5,_0x40643f:0x1cf,_0x35936a:0x14c,_0x860a1a:0x2e2,_0x1ae470:0x223,_0x1005b0:0x258,_0x25afb8:0xf5,_0x1793d7:0x1c4,_0x20e231:0x223,_0xc7d9f2:0x257,_0xfbb767:0x1b4,_0x523f57:0x21a,_0x58ef3f:0x317,_0x2a7936:0x22b,_0x56c4e8:0x227,_0x379f8f:0x202,_0x5d2677:0x1a3,_0x3a3766:0x92,_0x920096:0x226,_0x4ee468:0x160,_0x501499:0x1e4,_0x22038f:0x87,_0x3dc2f0:0x107,_0x248867:0x149,_0x367a5c:0xcc,_0x2e7d57:0x219,_0x52889f:0x1b1,_0x4d1e8d:0xc9,_0x4c56cb:0x1fa,_0x1e65a9:0x217,_0x126b9d:0x2d0,_0x5293cf:0x1fa,_0x5943d3:0x17a,_0x2c1a81:0x235,_0x5ac1e5:0x127,_0x23ee78:0xaf,_0x1426a5:0x2e4,_0x3d4d4c:0x11f,_0x4fa39a:0x234,_0x49e05e:0x1ca,_0x5d2f2f:0xaf,_0x22675f:0x1d2,_0xd4a2de:0x24a,_0x33f4ac:0x219,_0x4b28de:0x1d0,_0x54bead:0x2a7,_0x20fdce:0x1d3,_0x2d9250:0x30e,_0x24bccd:0x10f},_0x364bff={_0x4d56b2:0x2e0,_0x3e0b8c:0x2a2},_0x57c225={_0x2e6bf3:0x1ab,_0x5e8dd1:0x276,_0x4e72c9:0x271,_0x2513eb:0x15b},_0x18c84c={_0x36fa17:0x157,_0x5d289a:0x157,_0x166100:0x318,_0x391d81:0x167,_0xd4d592:0x1d6,_0x46d06d:0x107,_0xcf435e:0x1e0,_0x59a4aa:0x276,_0x2729be:0x1a5,_0x256146:0x254,_0x3cd6ea:0x26e,_0x375679:0x2a2,_0x208800:0x1d5,_0x2efc19:0x107,_0x4d277b:0x304,_0xbf5bc3:0x1b2,_0x362795:0x276,_0x32cfea:0x2a2,_0x27be7f:0x284},_0x5a56dc={_0x2269cb:0x17c,_0x38c946:0x173,_0x399eb9:0xba,_0x2211b2:0xd9,_0x47d9a2:0x1be,_0x4fd041:0x296,_0xaa3705:0x149},_0x428091={_0x25efc3:0x15e,_0x58327c:0x23b,_0x2491c9:0x1de,_0x2be350:0x1de,_0x57d37f:0x296,_0x445f8e:0x271,_0x381c2d:0x15b,_0x5c2c30:0x215,_0x1ad649:0x27d,_0x315c81:0xa2,_0x1f6fd9:0x2cb,_0x384696:0x16e,_0x29bee8:0x1b4,_0x117e45:0x189,_0x2e4a98:0x169},_0x5d6749=_0x4336;if(typeof window!=='undefined'&&window['PrivacyScrubberCore']&&window[_0x5d6749(_0x34dd8f._0x53968a)][_0x5d6749(_0x34dd8f._0x54dbff)])return;function _0x4e0e9d(){const _0x24075c=_0x5d6749;if(_0x24075c(_0x428091._0x25efc3)==='CPRIK'){if(typeof window!==_0x24075c(_0x428091._0x58327c)&&window[_0x24075c(_0x428091._0x2491c9)])return window[_0x24075c(_0x428091._0x2be350)];if(typeof global!==_0x24075c(0x23b)&&global[_0x24075c(_0x428091._0x2491c9)])return global[_0x24075c(_0x428091._0x2be350)];if(typeof require===_0x24075c(_0x428091._0x57d37f)){if(_0x24075c(0x187)!=='pZDzl'){const _0x1e69b7=_0x1f448e['match'](/^\[([A-Z_a-z0-9]+)_(\d+)\]$/);if(_0x1e69b7){const _0x25ef6f=_0x1e69b7[-0x25*0xcc+-0x1675+0x33f2],_0xb81559=_0x415875(_0x1e69b7[-0x257*-0xb+-0x30*-0x20+-0x1*0x1fbb],-0x14e*-0x3+0x1*-0xfd9+0x1*0xbf9);_0x34671a[_0x25ef6f]!==_0x4e5235?_0x1b7b2e[_0x25ef6f]=_0x4fd466[_0x24075c(_0x428091._0x445f8e)](_0x1697fe[_0x25ef6f],_0xb81559):_0x2bc354[_0x25ef6f]=_0x15cc56[_0x24075c(0x271)](_0x1fd529[_0x25ef6f]||-0x2*0x22+0x1dd3+-0x1d8f*0x1,_0xb81559);}_0x152466[_0x413265[_0x24075c(_0x428091._0x381c2d)]()]=_0x46867f,_0x17d68c[_0x3a332f]=_0x1cbd8f;}else{try{return require('./ps-pii-engine.cjs');}catch(_0x2bfe7f){}try{return require(_0x24075c(0x220));}catch(_0x9ee6ca){}try{if(_0x24075c(0x158)!==_0x24075c(_0x428091._0x5c2c30))return require('../chrome-extension/ps-pii-engine.js');else!_0x2ec5d3&&_0x13578c['scrubbedText']!==_0x4c002d&&(_0x18f0b7[_0x24075c(_0x428091._0x1ad649)]=_0x3e197f[_0x24075c(_0x428091._0x315c81)]),_0x31cfc7[_0x24075c(_0x428091._0x1f6fd9)]>-0x1*0x2f2+-0x1b*-0x87+-0xb4b&&(_0x1d8bde={..._0x390680,..._0x11f265['tokenMap']}),_0x57d685[_0x24075c(_0x428091._0x384696)][_0x24075c(_0x428091._0x29bee8)](_0xcfa94b=>_0x4bc324[_0x24075c(0x2bc)](_0xcfa94b));}catch(_0x1210a8){}}}return null;}else{if(_0x4c85e2[_0x24075c(0x1cf)](_0x24075c(_0x428091._0x117e45)))return![];if(_0xd0d90b[_0x24075c(0x1cf)](_0x24075c(_0x428091._0x2e4a98)))return![];}}function init(_0xda139b){const _0x110ab6=_0x5d6749;if(_0x110ab6(_0x5a56dc._0x2269cb)!==_0x110ab6(_0x5a56dc._0x38c946)){if(!_0xda139b)return;const engine=_0x4e0e9d();if(engine)engine[_0x110ab6(_0x5a56dc._0x399eb9)](_0xda139b);typeof window!==_0x110ab6(0x23b)&&window[_0x110ab6(_0x5a56dc._0x2211b2)]&&(_0x110ab6(_0x5a56dc._0x47d9a2)==='iAQhE'?(typeof _0x11cd41===_0x110ab6(_0x5a56dc._0x4fd041)&&_0x58fd11(_0x110ab6(0x8b)+_0x225bd9['label'],_0x110ab6(0x26e)),_0x3053f9[_0x110ab6(_0x5a56dc._0xaa3705)](),typeof _0x307bf1==='function'&&_0x36d7b5(_0x90126c['id'])):window['PrivacyScrubberCore'][_0x110ab6(0xd6)]=!![]);}else _0x1971d5=_0x3d1ec3['substring'](0x2*-0xb79+0x2437+0xd45*-0x1,_0x4411e6['start'])+_0x5e72fd[_0x110ab6(0xd7)]+_0x27902d[_0x110ab6(0x23f)](_0x685967['end']);}const _0x284557=/(?:^|[ ,])(?:[A-Z]{2,}(?:[A-Z'-]*[A-Z])?|[A-Z][a-z]+(?:[' -][A-Z][a-z]+)*)(?:\s+[A-Z]\s*\.?)*\s*$/m,_0x26187a=/^(?:[A-Z][a-z]+(?:[A-Za-z'-]*)?|[A-Z]{2,}(?:[A-Z'-]*[A-Z])?)(?:'[sS])?(?:[,\s]|$)/,_0x5e1ca0=/^[A-Z]\s*\.?,?\s*$/,_0x245e50=new Set([_0x5d6749(_0x34dd8f._0x15f047),_0x5d6749(0x9c),_0x5d6749(0x1f0),_0x5d6749(0x25a),_0x5d6749(_0x34dd8f._0x3aad29),_0x5d6749(0x297),_0x5d6749(_0x34dd8f._0x4d5651),_0x5d6749(0x29a),_0x5d6749(0x275),_0x5d6749(_0x34dd8f._0x88892f),_0x5d6749(_0x34dd8f._0xf08c05),_0x5d6749(0x2f3),_0x5d6749(_0x34dd8f._0x4eb7be),_0x5d6749(_0x34dd8f._0x4f4884),_0x5d6749(_0x34dd8f._0x20d37b),_0x5d6749(_0x34dd8f._0x11db71),_0x5d6749(0xbe),_0x5d6749(0x20d),_0x5d6749(0x130),'Within',_0x5d6749(_0x34dd8f._0x433994),'During',_0x5d6749(_0x34dd8f._0x15229b),_0x5d6749(0x2e9),_0x5d6749(_0x34dd8f._0xdad4d3),_0x5d6749(_0x34dd8f._0x2fe8d9),'All',_0x5d6749(0x132),'Both',_0x5d6749(0x2bf),'Neither','No',_0x5d6749(_0x34dd8f._0x52d5c),'If',_0x5d6749(0x1f2),'WHEREIN',_0x5d6749(_0x34dd8f._0x4b5269),_0x5d6749(_0x34dd8f._0x551c45),_0x5d6749(_0x34dd8f._0x187577),_0x5d6749(0x1d9),'THEREFORE','HEREBY','HEREIN',_0x5d6749(_0x34dd8f._0xf5bee2),_0x5d6749(0x2ca),'AMONG',_0x5d6749(0x25f),_0x5d6749(0x114),_0x5d6749(0x102),_0x5d6749(0xe1),_0x5d6749(_0x34dd8f._0x4827f0),_0x5d6749(_0x34dd8f._0xe6b4ee),'DEED',_0x5d6749(0x245),_0x5d6749(0x1ac),_0x5d6749(_0x34dd8f._0xc6948c),_0x5d6749(_0x34dd8f._0x2373f8)]);function stitchOrphanedNameLines(_0x122ffd,_0x29e234){const _0xe29617=_0x5d6749;if(_0xe29617(_0x18c84c._0x36fa17)!==_0xe29617(_0x18c84c._0x5d289a))_0x428df7[_0xe29617(_0x18c84c._0x166100)]=![],_0x146270['style'][_0xe29617(0x315)]='none';else{_0x122ffd=_0x122ffd[_0xe29617(0x223)](/\r\n/g,'\x0a')[_0xe29617(0x223)](/\r/g,'\x0a');if(!_0x122ffd[_0xe29617(0x1c4)]('\x0a'))return _0x122ffd;const _0x254404=_0x122ffd['split']('\x0a');if(_0x254404[_0xe29617(0x1b6)]<-0x24b9+-0xe89+0x11*0x304)return _0x122ffd;const _0x5376d6=[];let _0x46cfcd=0x7ab*0x3+-0x5f5+-0x110c;while(_0x46cfcd<_0x254404['length']){if(_0xe29617(0x167)===_0xe29617(_0x18c84c._0x391d81)){const _0x4875c0=_0x254404[_0x46cfcd],_0x34cca0=_0x254404[_0x46cfcd+(0x1dc4+-0x1b39+-0x28a)],_0x3cb847=_0x254404[_0x46cfcd+(0x13d2+-0x161f+0x24f)];if(_0x34cca0!==undefined&&_0x3cb847!==undefined&&_0x284557[_0xe29617(0x1d6)](_0x4875c0)&&_0x5e1ca0[_0xe29617(_0x18c84c._0xd4d592)](_0x34cca0[_0xe29617(_0x18c84c._0x46d06d)]())&&_0x26187a[_0xe29617(0x1d6)](_0x3cb847[_0xe29617(0x1e0)]())){const _0x4dbd22=(_0x3cb847[_0xe29617(_0x18c84c._0xcf435e)]()[_0xe29617(_0x18c84c._0x59a4aa)](/^[A-Za-z]+/)||[''])[0xcf*-0x2f+-0x683*0x5+0x4690];if(_0x245e50[_0xe29617(0x13e)](_0x4dbd22)){if('iMylf'==='poETb'){const _0x55a8b9=_0x20af7e[_0xe29617(_0x18c84c._0x2729be)]||'';if(!_0x55a8b9[_0xe29617(0x107)]())return{'count':0x0,'tokenMap':_0xf82ffe||{}};const _0x286f6d=scrubText(_0x55a8b9,_0x5057ed,_0x3609d6,_0x9c9af3,_0x536e8e||{});return _0x286f6d['uniqueUnmasked']['size']>-0x158c+-0x91f+0xa39*0x3&&!_0x2c4b4a&&(_0x20fbf6[_0xe29617(0x1a5)]=_0x286f6d[_0xe29617(0xa2)],_0xad33a6['dispatchEvent'](new _0x4e473d('input',{'bubbles':!![],'cancelable':!![]}))),{'count':_0x286f6d[_0xe29617(0x16e)][_0xe29617(0x281)],'tokenMap':{..._0x465eaf||{},..._0x286f6d['tokenMap']}};}else _0x5376d6[_0xe29617(0x2a2)](_0x4875c0),_0x46cfcd++;}else{if(_0xe29617(0x2c9)!=='HjMbQ'){if(typeof _0x58f7fc===_0xe29617(0x296))_0x22ed17(_0xe29617(_0x18c84c._0x256146),_0xe29617(_0x18c84c._0x3cd6ea));}else _0x5376d6[_0xe29617(_0x18c84c._0x375679)](_0x4875c0[_0xe29617(_0x18c84c._0x208800)]()+'\x20'+_0x34cca0[_0xe29617(_0x18c84c._0x2efc19)]()+'\x20'+_0x3cb847[_0xe29617(_0x18c84c._0xcf435e)]()),_0x46cfcd+=0x8e6+-0x288+0x65b*-0x1;}}else{if(_0x34cca0!==undefined&&_0x284557['test'](_0x4875c0)&&_0x26187a['test'](_0x34cca0[_0xe29617(_0x18c84c._0xcf435e)]())){const _0x4f98e4=(_0x34cca0['trimStart']()[_0xe29617(0x276)](/^[A-Za-z]+/)||[''])[-0x1e64+-0x9c6+0x282a];if(_0x245e50[_0xe29617(0x13e)](_0x4f98e4)){if(_0xe29617(_0x18c84c._0x4d277b)==='EDbWq')_0x5376d6['push'](_0x4875c0),_0x46cfcd++;else{const _0x2c540c=_0x36dba8['tagName']===_0xe29617(_0x18c84c._0xbf5bc3)||_0x1d9476['tagName']===_0xe29617(0x27f)?_0x366f7d['value']||'':_0x2c9e05[_0xe29617(0x27e)]||_0xb93946['textContent']||'',_0x37edc7=_0x2c540c[_0xe29617(_0x18c84c._0x362795)](/\[[A-Z]+_[0-9]+\]/g)||[],_0x338cdd=new _0x1ab290(_0x37edc7)[_0xe29617(0x281)];(_0x338cdd>_0x342e3b||_0x338cdd===_0x68d84b&&_0x338cdd>-0x1ea6+-0x2d4*0x6+0x2f9e&&_0x2c540c[_0xe29617(0x1b6)]>_0x35e489)&&(_0x58c03d=_0x338cdd,_0x3e7d81=_0x2c540c[_0xe29617(0x1b6)],_0x147110=_0x2c3e0d);}}else _0x5376d6['push'](_0x4875c0[_0xe29617(_0x18c84c._0x208800)]()+'\x20'+_0x34cca0[_0xe29617(_0x18c84c._0xcf435e)]()),_0x46cfcd+=-0x15*0x1c1+-0x1ce1+-0x15e8*-0x3;}else _0x5376d6[_0xe29617(_0x18c84c._0x32cfea)](_0x4875c0),_0x46cfcd++;}}else try{_0x1d3d90[_0xe29617(0x190)][_0xe29617(_0x18c84c._0x27be7f)](_0x5e5d3e,_0x897bb7);}catch(_0x40f30a){}}return _0x5376d6[_0xe29617(0x162)]('\x0a');}}function scrubText(_0xbe3aa7,_0x50fccc=[],_0x2a58f3={},_0x45205a='General',_0x3751c8={},_0x561760=![]){const _0x5b05fa={_0x27e9eb:0x17b,_0x9c4bfe:0x101,_0x468294:0x1a5,_0x51b9c3:0x15b,_0x279793:0x2bc,_0x3455a6:0x20e,_0x3cdc0c:0x107,_0x280763:0x1e0,_0x46b3d2:0x101,_0x514f25:0xd7,_0x4c9fdf:0x235},_0x5bd865=_0x5d6749;if(_0x5bd865(_0x130072._0x55f440)==='nyuvV'){if(_0x3769e8&&typeof _0x277c00[_0x5bd865(_0x130072._0x5cb57e)]===_0x5bd865(_0x130072._0x42c99d)&&_0x88da1e[_0x5bd865(0x23a)][_0x5bd865(_0x130072._0x2bd6c3)]('/'))try{const _0x3f9743=_0x4bee83[_0x5bd865(_0x130072._0x5cb57e)]['lastIndexOf']('/'),_0x2aa3be=_0x57fc74['regex'][_0x5bd865(0x23f)](0xd*-0x2f9+-0x11*-0x2b+0x23cb,_0x3f9743),_0x4e6e05=_0x4d5c3d['regex'][_0x5bd865(_0x130072._0x2a0b65)](_0x3f9743+(-0x2709+0xd8b+0x3d*0x6b));return{..._0x5c5acf,'regex':new _0x495f03(_0x2aa3be,_0x4e6e05)};}catch(_0x23c423){return _0xd60fb9[_0x5bd865(_0x130072._0x44b520)](_0x5bd865(_0x130072._0x513d1f),_0x38143c[_0x5bd865(0x23a)],_0x23c423),_0x5d7518;}return _0x811df5;}else{if(!_0xbe3aa7)return{'scrubbedText':'','tokenMap':{},'count':0x0,'uniqueUnmasked':new Set(),'trialMeta':null};_0xbe3aa7=stitchOrphanedNameLines(_0xbe3aa7,_0x45205a);let _0x1fc261='',_0x178de5=_0xbe3aa7['replace'](/[\u200b\u200c\u200d\ufeff]/g,'');const _0xb9545=_0x45205a&&_0x45205a[_0x5bd865(0x15b)]()!=='general';if(!_0x561760){if(_0x5bd865(0xb2)!==_0x5bd865(0x17f)){const _0x570ff0=_0xb9545?0x21c9*0x1+0x4d9*0x2+-0x17f3:-0x3*-0xdc3+-0x24ae+0x35fd;if(_0x178de5[_0x5bd865(_0x130072._0x2bdba6)]>_0x570ff0){if(_0x5bd865(0x119)===_0x5bd865(_0x130072._0x5c9b50))throw new Error(_0x5bd865(0xf9)+_0x570ff0[_0x5bd865(0x224)]()+_0x5bd865(_0x130072._0x44ab41));else{const _0x2b37ac=_0xf1246c['parentElement'][_0x5bd865(_0x130072._0x32d219)];_0x2b37ac&&_0x2b37ac[_0x5bd865(_0x130072._0x2bdba6)]<0x2163*-0x1+0x1*0x29e6+0x1*0x16bd&&(_0x2b37ac['includes'](_0x5bd865(_0x130072._0x324907))||_0x2b37ac[_0x5bd865(0x1c4)](_0x5bd865(0x282)))&&(_0x205eae=!![]);}}}else{if(!_0x41b297||!_0x55eb64[_0x5bd865(_0x130072._0x40643f)])return![];if(_0x2a56eb['closest'](_0x205135))return!![];const _0x451bbb=_0x55ee80[_0x5bd865(_0x130072._0x35936a)]();if(_0x451bbb instanceof _0x38eddb&&_0x451bbb['host']){if(_0x451bbb['host'][_0x5bd865(0x123)]&&_0x451bbb[_0x5bd865(_0x130072._0x860a1a)]['matches'](_0x1254c9))return!![];if(_0x451bbb[_0x5bd865(0x2e2)][_0x5bd865(_0x130072._0x40643f)]&&_0x451bbb['host'][_0x5bd865(_0x130072._0x40643f)](_0xfb2b57))return!![];}return![];}}let _0x30bc2a=null;_0x178de5=_0x178de5[_0x5bd865(_0x130072._0x1ae470)](/([a-zA-Z])(Email|Phone|Mobile|Tel|Address|IP|ID|URL|SSN|Date):/g,_0x5bd865(_0x130072._0x1005b0));const _0x4c722=_0x5bd865(_0x130072._0x25afb8),_0x70663='[SYSTEM\x20INSTRUCTION:\x20DATA\x20PRIVACY\x20MODE]',_0x3ed1ab='[Context:\x20identifiers';if(_0x178de5[_0x5bd865(0x1c4)](_0x4c722)||_0x178de5[_0x5bd865(_0x130072._0x1793d7)](_0x70663)||_0x178de5['includes'](_0x3ed1ab)){const _0x353db2=/(?:----------------------\s*)?(?:\[SYSTEM INSTRUCTION: DATA PRIVACY MODE\]|\[Privacy Scrubber Mode\]|\[Context: identifiers)[\s\S]*/,_0x1ee575=_0x178de5[_0x5bd865(0x276)](_0x353db2);_0x1ee575&&(_0x1fc261=_0x1ee575[0x200*-0x6+0x1c17+-0x1017*0x1],_0x178de5=_0x178de5[_0x5bd865(_0x130072._0x20e231)](_0x353db2,''));}const sessionMap={},_0x1f4e11={'NAME':0x0,'EMAIL':0x0,'PHONE':0x0,'ID':0x0,'FINANCIAL':0x0,'SECRET':0x0,'ADDRESS':0x0,'CUSTOM':0x0,'SSN':0x0,'DATE':0x0,'PHI':0x0},_0x4fd2d8={},_0xc51c80={};if(_0x3751c8&&typeof _0x3751c8===_0x5bd865(_0x130072._0xc7d9f2)){if('vWtZI'==='vWtZI')Object[_0x5bd865(0x1fd)](_0x3751c8)[_0x5bd865(_0x130072._0xfbb767)](([_0xd8343c,_0x139b4f])=>{const _0x46ca54=_0x5bd865;if('JvZUT'!=='JvZUT')_0x2b0d36(_0x77f850[_0x46ca54(_0x57c225._0x2e6bf3)]);else{const _0x480ba6=_0xd8343c[_0x46ca54(_0x57c225._0x5e8dd1)](/^\[([A-Z_a-z0-9]+)_(\d+)\]$/);if(_0x480ba6){const _0x15500c=_0x480ba6[-0x4*-0x793+0x5*0x795+-0x4434],_0x52161e=parseInt(_0x480ba6[-0x4*-0x713+0x18d+0x1*-0x1dd7],0x1*0x373+0x2*0xe27+-0x17*0x161);_0x1f4e11[_0x15500c]!==undefined?_0x1f4e11[_0x15500c]=Math[_0x46ca54(_0x57c225._0x4e72c9)](_0x1f4e11[_0x15500c],_0x52161e):_0x4fd2d8[_0x15500c]=Math[_0x46ca54(0x271)](_0x4fd2d8[_0x15500c]||0x26cd+-0x23c*-0xc+-0x419d,_0x52161e);}_0xc51c80[_0x139b4f[_0x46ca54(_0x57c225._0x2513eb)]()]=_0xd8343c,_0xc51c80[_0x139b4f]=_0xd8343c;}});else try{const _0x3285f5=_0x1b95d3[_0x5bd865(_0x130072._0x523f57)]||_0x2c62a6[_0x5bd865(0xe3)]?.['document'];_0x3285f5&&_0x3285f5[_0x5bd865(0x317)]&&_0x5bffb5(_0x3285f5[_0x5bd865(_0x130072._0x58ef3f)]);}catch(_0x33586b){}}const _0x560054={'NAME':_0x5bd865(_0x130072._0x2a7936),'EMAIL':_0x5bd865(_0x130072._0x56c4e8),'PHONE':_0x5bd865(_0x130072._0x379f8f),'ID':'ID','FINANCIAL':_0x5bd865(0x1d7),'SECRET':_0x5bd865(0x23e),'ADDRESS':_0x5bd865(_0x130072._0x5d2677),'CUSTOM':_0x5bd865(_0x130072._0x3a3766),'SSN':_0x5bd865(_0x130072._0x920096),'DATE':_0x5bd865(0x1a0),'PHI':_0x5bd865(_0x130072._0x4ee468),..._0x2a58f3},PROFILE_ALIAS_MAP=_0x4e0e9d()&&_0x4e0e9d()[_0x5bd865(0x1e4)]?_0x4e0e9d()[_0x5bd865(_0x130072._0x501499)]:{};if(typeof process!==_0x5bd865(0x23b)&&process.env&&typeof require===_0x5bd865(0x296)&&_0x45205a&&_0x45205a[_0x5bd865(0x15b)]()!==_0x5bd865(_0x130072._0x22038f))try{const _0x3c0b93=(process.env.PRIVACYSCRUBBER_KEY||'')[_0x5bd865(_0x130072._0x3dc2f0)]();let _0x131296=![];if(_0x3c0b93){if('FJCcE'!=='FJCcE'){typeof _0xd1e7f==='function'&&_0x31761a('Specialized\x20Profiles\x20require\x20PRO\x20upgrade.',_0x5bd865(0xc3));_0x292bfe[_0x5bd865(_0x130072._0x248867)]();return;}else{const _0x2d3436='-----BEGIN\x20PUBLIC\x20KEY-----\x0aMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw3f37srO402PU4++Baf8\x0aFG8LY4l/IA3NKLlBnYmNHRTjfI/O/w5PDZn1xPcUQevojA1J+A5moKcjXsJ5b21X\x0ahJoYSkE4vLpcVYOt1FhRwEHs1APDSyss0HixboLz2eW2XQf2NbwajWtNlyxvgczO\x0aKE6ClnLomtsaKywwqB4alzdYnnnFJttFPjwmgPSO7D9AgN9sYaVkXOaOFrIZ90Ng\x0aTRhSHUeL7ReltWlCHwz9xf5m2FrKtxr2VBlEoyPjsFzalHMey1EX+yXe81zM7IIi\x0at1Z8agLzo7WIfNBAIWmRlerTplaFFZrQgdF5g/Y0n8IIMZOtadgoY8E855psDNZV\x0a7wIDAQAB\x0a-----END\x20PUBLIC\x20KEY-----',_0x44219f=require(_0x5bd865(_0x130072._0x367a5c)),[_0x15f690,_0x4d2837]=_0x3c0b93[_0x5bd865(0x2ec)]('.');if(_0x15f690&&_0x4d2837){if('XBTee'!==_0x5bd865(0x303)){if(_0x2a6a3f[_0x5bd865(_0x130072._0x40643f)]('[class*=\x22thinking\x22],\x20[class*=\x22reasoning\x22],\x20[class*=\x22Thinking\x22],\x20[class*=\x22chain-of-thought\x22]'))return![];if(_0x73f3[_0x5bd865(0x1b1)][_0x5bd865(_0x130072._0x2e7d57)]('thinking')||_0x5b94cc[_0x5bd865(_0x130072._0x52889f)]['contains'](_0x5bd865(_0x130072._0x4d1e8d)))return![];}else{const _0x59622a=_0x44219f[_0x5bd865(0x21e)](_0x5bd865(0x1ce));_0x59622a['update'](_0x15f690);const _0x1727a1=_0x59622a['verify'](_0x2d3436,_0x4d2837,_0x5bd865(_0x130072._0x4c56cb));if(_0x1727a1){const _0x59f5d4=JSON[_0x5bd865(_0x130072._0x1e65a9)](Buffer[_0x5bd865(_0x130072._0x126b9d)](_0x15f690,_0x5bd865(_0x130072._0x5293cf))[_0x5bd865(0x2c4)](_0x5bd865(_0x130072._0x5943d3)));(!_0x59f5d4[_0x5bd865(0x1f9)]||_0x59f5d4['expires']>Math['floor'](Date['now']()/(-0xccb*-0x3+-0x22bd+0x44)))&&(_0x131296=!![]);}}}}}!_0x131296&&(_0x45205a=_0x5bd865(_0x130072._0x2c1a81));}catch(_0x38cc3f){if(_0x5bd865(_0x130072._0x5ac1e5)===_0x5bd865(0x98)){if(!sessionMap||_0x31fd97[_0x5bd865(0x10f)](sessionMap)['length']===-0x1bb*0x3+-0x266*0x1+-0x797*-0x1){if(_0xbbd71f[_0x5bd865(_0x130072._0x23ee78)])_0xe27737['showInPageToast'](_0x5bd865(0x103),_0x5bd865(_0x130072._0x1426a5));return;}try{const _0x48d28d={'version':'1.6.4','timestamp':new _0x41fc42()[_0x5bd865(0x21f)](),'sessionMap':sessionMap,'context':_0x244d6b},_0x2cf665=new _0x27b67b([_0x4397c4[_0x5bd865(_0x130072._0x3d4d4c)](_0x48d28d,null,0x57d+0xc*-0x52+-0x1*0x1a3)],{'type':'application/json'}),_0x2d45c0=_0x3db89e[_0x5bd865(0x293)](_0x2cf665),_0x23dd75=_0x4fee2f[_0x5bd865(_0x130072._0x4fa39a)]('a');_0x23dd75['href']=_0x2d45c0,_0x23dd75[_0x5bd865(0x1a4)]=_0x31f1e0+'-'+_0x37286f[_0x5bd865(0x29c)]()+'.json',_0x57ca5d['body'][_0x5bd865(0x2a3)](_0x23dd75),_0x23dd75[_0x5bd865(0x150)](),_0x40af58[_0x5bd865(0x317)]['removeChild'](_0x23dd75),_0x28e745(()=>_0x24d3ff[_0x5bd865(0x262)](_0x2d45c0),0x1bec*0x1+-0xb*0x11b+-0x5*-0xc1);if(_0x71c2ff['showInPageToast'])_0x23a1ca[_0x5bd865(0xaf)](_0x5bd865(0x1ef),'success');}catch(_0x1032d6){_0x5f3110[_0x5bd865(_0x130072._0x44b520)](_0x5bd865(_0x130072._0x49e05e),_0x1032d6);if(_0xd1e601[_0x5bd865(_0x130072._0x23ee78)])_0x1f0928[_0x5bd865(_0x130072._0x5d2f2f)]('❌\x20Export\x20failed.',_0x5bd865(_0x130072._0x44b520));}}else _0x45205a=_0x5bd865(0x235);}const engine=_0x4e0e9d();if(!engine){if(_0x5bd865(_0x130072._0x22675f)===_0x5bd865(_0x130072._0xd4a2de)){if(_0x1e9a21['classList']&&(_0x5f5988['classList'][_0x5bd865(_0x130072._0x33f4ac)](_0x5bd865(_0x130072._0x4b28de))||_0xb42393['getAttribute'](_0x5bd865(_0x130072._0x54bead))===_0x5bd865(_0x130072._0x4b28de)))return![];_0x32fe9b=_0x44bac2[_0x5bd865(0x143)]||_0x445f24[_0x5bd865(0x2e2)];}else return{'scrubbedText':_0x178de5,'count':0x0,'sessionMap':{},'piiBreakdown':{},'tokensUsed':[]};}const _0x27d542=engine[_0x5bd865(0x172)](_0x178de5,_0x45205a,_0x50fccc,[],null);let _0x40f5e0=_0x27d542[_0x5bd865(_0x130072._0x20fdce)];_0x178de5=_0x27d542[_0x5bd865(_0x130072._0x2d9250)];const _0x198ed0=new Set();_0x40f5e0['forEach'](_0xf818c0=>{const _0x47e3dd=_0x5bd865;if(_0x47e3dd(0x17b)===_0x47e3dd(_0x5b05fa._0x27e9eb)){const _0x1ddb75=_0xf818c0[_0x47e3dd(0x101)]===_0x47e3dd(0x92)||_0xf818c0[_0x47e3dd(0x101)]==='ID'||_0xf818c0[_0x47e3dd(_0x5b05fa._0x9c4bfe)]==='SECRET'?_0xf818c0['value']:_0xf818c0[_0x47e3dd(_0x5b05fa._0x468294)][_0x47e3dd(_0x5b05fa._0x51b9c3)]();_0x198ed0[_0x47e3dd(_0x5b05fa._0x279793)](_0x1ddb75);if(_0xc51c80[_0x1ddb75]){_0xf818c0[_0x47e3dd(0xd7)]=_0xc51c80[_0x1ddb75];return;}const _0xb38a0b=_0xf818c0[_0x47e3dd(0x181)]||_0x560054[_0xf818c0[_0x47e3dd(0x101)]]||_0xf818c0[_0x47e3dd(_0x5b05fa._0x9c4bfe)],_0x5b9cce=_0x1f4e11[_0xf818c0[_0x47e3dd(0x101)]]!==undefined;_0x5b9cce&&!_0xf818c0[_0x47e3dd(0x181)]?'ESsPv'===_0x47e3dd(_0x5b05fa._0x3455a6)?(_0x11e7ba['push'](_0x52dade[_0x47e3dd(0x1d5)]()+'\x20'+_0x59ac03[_0x47e3dd(_0x5b05fa._0x3cdc0c)]()+'\x20'+_0x1ba49f[_0x47e3dd(_0x5b05fa._0x280763)]()),_0x1b3205+=-0x3e*0x73+-0x26b9+-0x6*-0xb19):(_0x1f4e11[_0xf818c0[_0x47e3dd(_0x5b05fa._0x9c4bfe)]]++,_0xf818c0[_0x47e3dd(0xd7)]='['+_0xb38a0b+'_'+_0x1f4e11[_0xf818c0[_0x47e3dd(_0x5b05fa._0x46b3d2)]]+']'):'CYNnR'===_0x47e3dd(0x1dd)?_0x3c894c[_0x47e3dd(0x150)]():(_0x4fd2d8[_0xb38a0b]=(_0x4fd2d8[_0xb38a0b]||-0x1f9*-0x6+-0x275*-0xb+-0x1*0x26dd)+(-0x120f+-0x151f+0x599*0x7),_0xf818c0[_0x47e3dd(0xd7)]='['+_0xb38a0b+'_'+_0x4fd2d8[_0xb38a0b]+']'),_0xc51c80[_0x1ddb75]=_0xf818c0[_0x47e3dd(_0x5b05fa._0x514f25)],sessionMap[_0xf818c0['token']]=_0xf818c0['value'];}else _0x5d0963=_0x47e3dd(_0x5b05fa._0x4c9fdf);});const _0x204d96=[..._0x40f5e0][_0x5bd865(0x20f)]((_0x186b6b,_0x4d0ecc)=>_0x4d0ecc['start']-_0x186b6b[_0x5bd865(0x14f)]);let _0x5bd394=_0x178de5;_0x204d96['forEach'](_0xb1a085=>{const _0x4efdc9=_0x5bd865;_0x4efdc9(_0x364bff._0x4d56b2)==='tQbqC'?(_0x53c307[_0x4efdc9(_0x364bff._0x3e0b8c)](_0x7af8a8),_0x46143e++):_0x5bd394=_0x5bd394['substring'](0x95e+0x7*0x189+-0x10f*0x13,_0xb1a085[_0x4efdc9(0x14f)])+_0xb1a085['token']+_0x5bd394[_0x4efdc9(0x23f)](_0xb1a085[_0x4efdc9(0xe6)]);});const _0x426bd3={};return Object[_0x5bd865(0x10f)](sessionMap)['forEach'](_0x5b9d66=>{let _0x1d68de=_0x5b9d66['split']('_')[0x279*-0x9+-0x13*0x1ca+0x383f]['replace']('[','');_0x426bd3[_0x1d68de]=(_0x426bd3[_0x1d68de]||-0x1bc5+-0x7*0x329+0x31e4)+(0x1*-0x1c33+0x1*-0x653+0x1*0x2287);}),{'scrubbedText':_0x1fc261+_0x5bd394,'tokenMap':sessionMap,'count':Object[_0x5bd865(_0x130072._0x24bccd)](sessionMap)[_0x5bd865(0x1b6)],'uniqueUnmasked':_0x198ed0,'piiBreakdown':_0x426bd3,'trialMeta':_0x30bc2a};}}const LABEL_ALIASES={'NAME':[_0x5d6749(0x22b),_0x5d6749(_0x34dd8f._0x23b4df),'USERNAME',_0x5d6749(_0x34dd8f._0x342766),_0x5d6749(_0x34dd8f._0x5c8776),_0x5d6749(_0x34dd8f._0x3917e6),_0x5d6749(_0x34dd8f._0x59e45a),'FULL_NAME',_0x5d6749(_0x34dd8f._0x554f8e),_0x5d6749(_0x34dd8f._0x1c0a42),_0x5d6749(0x261),_0x5d6749(_0x34dd8f._0x125547),_0x5d6749(_0x34dd8f._0x2ede59),_0x5d6749(0x16c),_0x5d6749(_0x34dd8f._0x47e787),_0x5d6749(_0x34dd8f._0x248560),'ФИО',_0x5d6749(_0x34dd8f._0x6aacd8),_0x5d6749(_0x34dd8f._0x53ed0d),_0x5d6749(_0x34dd8f._0x3285e9),_0x5d6749(0x13c),_0x5d6749(0xfd),_0x5d6749(_0x34dd8f._0x145229),_0x5d6749(0x154),'UTILISATEUR',_0x5d6749(_0x34dd8f._0x4c295c),_0x5d6749(_0x34dd8f._0x18f695),_0x5d6749(_0x34dd8f._0x575c71),_0x5d6749(_0x34dd8f._0x2027c3),_0x5d6749(0x2d5),'COGNOME',_0x5d6749(_0x34dd8f._0x248eb3),'NAAM',_0x5d6749(_0x34dd8f._0x5ae1f7),_0x5d6749(0x30c)],'EMAIL':[_0x5d6749(_0x34dd8f._0x589239),_0x5d6749(0x2fc),_0x5d6749(_0x34dd8f._0xb173ff),_0x5d6749(_0x34dd8f._0x6abe53),'EMAILADDRESS',_0x5d6749(0x1b7),_0x5d6749(0xc0),'MAIL',_0x5d6749(_0x34dd8f._0x37ef4d),'ПОЧТА','ЭЛ_ПОЧТА',_0x5d6749(_0x34dd8f._0x352179),'МЕЙЛ',_0x5d6749(0x2de),_0x5d6749(_0x34dd8f._0x5970a6),'COURRIEL','CORREO_ELECTRONICO',_0x5d6749(0x250)],'PHONE':[_0x5d6749(_0x34dd8f._0xfa2df7),_0x5d6749(_0x34dd8f._0x180a76),_0x5d6749(_0x34dd8f._0x2f57f0),'PHONE_NUM',_0x5d6749(_0x34dd8f._0x4238b2),_0x5d6749(0xed),_0x5d6749(0x29e),_0x5d6749(0x142),_0x5d6749(0x86),_0x5d6749(0x10e),_0x5d6749(0x2b6),_0x5d6749(0xef),_0x5d6749(0xb5),_0x5d6749(_0x34dd8f._0x47e8c4),_0x5d6749(0x1af),_0x5d6749(0x14a),_0x5d6749(0xca),_0x5d6749(0xbb),_0x5d6749(_0x34dd8f._0x473bb5),_0x5d6749(_0x34dd8f._0x3223f9),'CELLULARE'],'ID':['ID','IDS',_0x5d6749(_0x34dd8f._0x4bcc2f),_0x5d6749(_0x34dd8f._0x3e34ca),_0x5d6749(_0x34dd8f._0x4d1093),_0x5d6749(0x233),_0x5d6749(0xe9),_0x5d6749(_0x34dd8f._0x5ab466),_0x5d6749(0xf6),_0x5d6749(_0x34dd8f._0x5ed95d),_0x5d6749(_0x34dd8f._0x56ea2f),_0x5d6749(0x165),_0x5d6749(0x2c7),_0x5d6749(_0x34dd8f._0x50c46d),_0x5d6749(_0x34dd8f._0x210eba),'ИД',_0x5d6749(_0x34dd8f._0x215681),_0x5d6749(_0x34dd8f._0x8ca645),'СНИЛС','ИНН','IDENTIFICADOR',_0x5d6749(0x136),_0x5d6749(0x213),'PASSEPORT','IDENTIFIKATOR',_0x5d6749(0x207),_0x5d6749(0x112),_0x5d6749(_0x34dd8f._0x30b33b)],'FINANCIAL':[_0x5d6749(0x1d7),'FINANCIALS',_0x5d6749(_0x34dd8f._0x203af1),_0x5d6749(0x2e5),_0x5d6749(_0x34dd8f._0x5469a6),'COST',_0x5d6749(_0x34dd8f._0x21441d),'CREDITCARD','DEBITCARD','ACCOUNT','IBAN',_0x5d6749(0xa0),_0x5d6749(0xbc),_0x5d6749(_0x34dd8f._0x3b6476),_0x5d6749(_0x34dd8f._0x3b3b0f),_0x5d6749(0x259),'БАНК','DINERO',_0x5d6749(_0x34dd8f._0x11ac00),_0x5d6749(_0x34dd8f._0x3db2e2),_0x5d6749(_0x34dd8f._0x264d6c),_0x5d6749(0x2f2),'MONTANT',_0x5d6749(0x208),_0x5d6749(_0x34dd8f._0xbf9ddc),_0x5d6749(0x2b8),_0x5d6749(0x115)],'ADDRESS':[_0x5d6749(_0x34dd8f._0x117a8f),_0x5d6749(_0x34dd8f._0x143aa0),_0x5d6749(0x2ab),_0x5d6749(0x274),_0x5d6749(0x13b),_0x5d6749(0x96),_0x5d6749(_0x34dd8f._0x2047f3),'ZIPCODE',_0x5d6749(0x1cd),_0x5d6749(0x18c),_0x5d6749(_0x34dd8f._0x312015),'АДРЕС',_0x5d6749(_0x34dd8f._0x41a9ee),'УЛИЦА','ГОРОД',_0x5d6749(_0x34dd8f._0x2a278d),_0x5d6749(_0x34dd8f._0x148ef1),'DIRECCIONES',_0x5d6749(_0x34dd8f._0x897138),_0x5d6749(0x238),_0x5d6749(0x256),'ADRESSE',_0x5d6749(0x218),_0x5d6749(0x95),_0x5d6749(0x1e8),_0x5d6749(_0x34dd8f._0x4e5fac),_0x5d6749(_0x34dd8f._0x5ab60d),_0x5d6749(_0x34dd8f._0x346d4a)],'DATE':[_0x5d6749(0x1a0),_0x5d6749(0x135),'BIRTHDAY',_0x5d6749(0x1bc),_0x5d6749(_0x34dd8f._0x113497),'ДАТЫ',_0x5d6749(_0x34dd8f._0x52e594),_0x5d6749(0x12b),_0x5d6749(_0x34dd8f._0x1393f6),'CUMPLEANOS',_0x5d6749(0x28f),'DATUM',_0x5d6749(_0x34dd8f._0x1cd342),_0x5d6749(_0x34dd8f._0x22a310)],'PHI':[_0x5d6749(0x160),_0x5d6749(0xc1),_0x5d6749(0xad),'HEALTH',_0x5d6749(_0x34dd8f._0x49910e),_0x5d6749(_0x34dd8f._0x50e761),'МЕД',_0x5d6749(0x2e7),_0x5d6749(0x2a8)],'SECRET':[_0x5d6749(_0x34dd8f._0x2668ad),_0x5d6749(0xa1),_0x5d6749(0x2db),'KEYS','TOKEN',_0x5d6749(_0x34dd8f._0x23c4b0),_0x5d6749(0xea),_0x5d6749(_0x34dd8f._0x2c8cdc),'AUTH',_0x5d6749(_0x34dd8f._0x28b8cd),_0x5d6749(0x12f),'КЛЮЧ','КЛЮЧИ',_0x5d6749(_0x34dd8f._0x5f5904),_0x5d6749(_0x34dd8f._0x11e780),'ТОКЕН',_0x5d6749(_0x34dd8f._0x2d29a1),_0x5d6749(0x25c),'CLE',_0x5d6749(0xb6),'SCHLUESSEL','PASSWORT'],'CUSTOM':[_0x5d6749(_0x34dd8f._0x105c39),_0x5d6749(0x1e3),_0x5d6749(_0x34dd8f._0x360b5f),_0x5d6749(_0x34dd8f._0x5e6f9b),_0x5d6749(_0x34dd8f._0x138ff6),_0x5d6749(0x209)]};function getLabelAliases(_0x1ed038){const _0x35f2e1=_0x5d6749;if(_0x35f2e1(_0x3921d8._0x2e7566)!==_0x35f2e1(0x2cd)){const _0x4d85a1=_0x5227c9[_0x35f2e1(0x1fe)]();if(LABEL_ALIASES[_0x4d85a1])return LABEL_ALIASES[_0x4d85a1];const _0x3964be=new _0x1673f2([_0x5edb19,_0x4d85a1,_0x22916c[_0x35f2e1(0x15b)]()]);return _0x3964be[_0x35f2e1(0x2bc)](_0x5a5660[_0x35f2e1(_0x3921d8._0xc32e51)](/_/g,'\x20')),_0x3964be[_0x35f2e1(_0x3921d8._0x58e82b)](_0x3c3cef[_0x35f2e1(_0x3921d8._0xc32e51)](/_/g,'-')),_0x3964be[_0x35f2e1(_0x3921d8._0x58e82b)](_0x42d5d5['replace'](/ /g,'_')),_0x3964be[_0x35f2e1(_0x3921d8._0x58e82b)](_0x3fe37c[_0x35f2e1(_0x3921d8._0x17342e)](/-/g,'_')),_0xd94b8f['from'](_0x3964be);}else{const _0x5ef5c3=_0x1ed038[_0x35f2e1(_0x3921d8._0x3cb889)]();if(LABEL_ALIASES[_0x5ef5c3]){if(_0x35f2e1(_0x3921d8._0x3be0c0)===_0x35f2e1(0x166))return LABEL_ALIASES[_0x5ef5c3];else _0x9772f9[_0x35f2e1(0x2a2)](_0x59a9aa[_0x35f2e1(0x1d5)]()+'\x20'+_0x18cb86[_0x35f2e1(_0x3921d8._0x46937b)]()),_0x5db69b+=0x288+0x16d+-0x3f3;}const _0x36c983=new Set([_0x1ed038,_0x5ef5c3,_0x1ed038[_0x35f2e1(_0x3921d8._0x37a9d1)]()]);return _0x36c983[_0x35f2e1(_0x3921d8._0x58e82b)](_0x1ed038['replace'](/_/g,'\x20')),_0x36c983['add'](_0x1ed038['replace'](/_/g,'-')),_0x36c983['add'](_0x1ed038[_0x35f2e1(0x223)](/ /g,'_')),_0x36c983[_0x35f2e1(0x2bc)](_0x1ed038[_0x35f2e1(_0x3921d8._0x17342e)](/-/g,'_')),Array[_0x35f2e1(0x2d0)](_0x36c983);}}function buildRestorationRegexAndRules(_0x554b1a){const _0x2324f2=_0x5d6749;if(_0x2324f2(_0x25309f._0x44e32c)===_0x2324f2(0xa3)){const _0x2ba79c=Object[_0x2324f2(_0x25309f._0x40d8c8)](_0x554b1a);if(_0x2ba79c[_0x2324f2(_0x25309f._0x4c04a2)]===-0x1116*0x2+-0x901+-0x62b*-0x7)return{'compositeRegex':null,'looseRules':[]};const _0x396519=[..._0x2ba79c][_0x2324f2(_0x25309f._0x3d64bf)]((_0x138e02,_0x396fcd)=>{const _0x456b51=_0x2324f2,_0x168ea1=_0x138e02[_0x456b51(0x223)](/^\[|\]$/g,''),_0xc5cf9=_0x396fcd[_0x456b51(0x223)](/^\[|\]$/g,''),_0x290d4a=_0x168ea1[_0x456b51(0x276)](/^([A-Za-z_0-9]+?)[-_]?(\d+)$/),_0x29d6d9=_0xc5cf9[_0x456b51(_0x22b753._0x3bda76)](/^([A-Za-z_0-9]+?)[-_]?(\d+)$/);if(_0x290d4a&&_0x29d6d9){if(_0x456b51(_0x22b753._0x41c76d)===_0x456b51(0x25b)){if(_0x21dab6[_0x456b51(0x21d)]&&_0x5d7250[_0x456b51(0x21d)][_0x456b51(_0x22b753._0x452da8)]===_0x456b51(_0x22b753._0xcfdb9a))return![];_0xfca94c=_0x3ee2ab[_0x456b51(_0x22b753._0x457ed1)]||_0x435d67[_0x456b51(0x2e2)];}else{const _0x586e18=parseInt(_0x290d4a[0xc73+0xb94+-0x1805],0xaa7+-0x1e86+0x13e9),_0x11e8d2=parseInt(_0x29d6d9[-0xf62+0x16af+-0x74b],0x1fd9+-0x932+-0x169d),_0x3c3398=_0x290d4a[0x1*0x607+-0x2625+0x201f],_0x356d5d=_0x29d6d9[-0x1*-0x11d2+-0x8b*0x2b+0x1d8*0x3];if(_0x586e18!==_0x11e8d2)return _0x11e8d2-_0x586e18;if(_0x3c3398['length']!==_0x356d5d[_0x456b51(_0x22b753._0x1ac973)])return _0x356d5d['length']-_0x3c3398[_0x456b51(_0x22b753._0x1ac973)];}}return _0x396fcd[_0x456b51(_0x22b753._0x1ac973)]-_0x138e02[_0x456b51(0x1b6)];}),_0x2a41ec=[],_0xe1250a=[];_0x396519[_0x2324f2(0x1b4)](_0x44d88b=>{const _0x4d3f85=_0x2324f2,_0x1c8c04=_0x44d88b[_0x4d3f85(_0x35bbde._0x1d28aa)](/^\[|\]$/g,''),_0x490ab1=_0x1c8c04[_0x4d3f85(0x276)](/^([A-Za-z_0-9]+?)[-_]?(\d+)$/);if(_0x490ab1){if(_0x4d3f85(_0x35bbde._0x5cc00c)===_0x4d3f85(_0x35bbde._0x33f0f6)){const _0x4dd365=_0x5111fd[_0x4d3f85(0x223)](/^\[|\]$/g,''),_0x2250c7=_0x175533[_0x4d3f85(0x223)](/^\[|\]$/g,''),_0x4244c7=_0x4dd365['match'](/^([A-Za-z_0-9]+?)[-_]?(\d+)$/),_0x5ec060=_0x2250c7['match'](/^([A-Za-z_0-9]+?)[-_]?(\d+)$/);if(_0x4244c7&&_0x5ec060){const _0x1c490e=_0x5844e4(_0x4244c7[0xfe0+-0x196*-0xd+0x14*-0x1d3],-0x7*0x56f+-0x1*-0x24be+-0xb*-0x1f),_0x5ba460=_0x301864(_0x5ec060[-0x196a+0xf39+0xa33*0x1],-0x2375+-0x99a+0x2d19),_0x407422=_0x4244c7[-0xf47*0x2+0x1611+0x43f*0x2],_0xf1f4ef=_0x5ec060[-0x1*0x2256+-0x188*0xe+0x37c7];if(_0x1c490e!==_0x5ba460)return _0x5ba460-_0x1c490e;if(_0x407422['length']!==_0xf1f4ef['length'])return _0xf1f4ef['length']-_0x407422['length'];}return _0x56dd69['length']-_0x480d08[_0x4d3f85(_0x35bbde._0x5f4201)];}else{const _0x2b47c0=_0x490ab1[-0xc77*-0x3+0x1e65+-0x7*0x9af],_0x29b8a6=parseInt(_0x490ab1[0x25fd+-0x2*-0x1142+-0x487f],-0x1dc6+0x3*-0x149+0x21ab),_0x13c88e=getLabelAliases(_0x2b47c0),_0x1088c2=_0x13c88e[_0x4d3f85(_0x35bbde._0x1da7bf)](_0x51c46b=>_0x51c46b['replace'](/[.*+?^${}()|[\]\\]/g,'\x5c$&')),_0x2fa055=_0x4d3f85(0x200)+_0x1088c2[_0x4d3f85(0x162)]('|')+')',_0x523b43='\x5c[?\x5cs*'+_0x2fa055+_0x4d3f85(0x13d)+_0x29b8a6+_0x4d3f85(_0x35bbde._0xaf71b8);_0x2a41ec['push']({'patternStr':_0x523b43,'originalKey':_0x44d88b}),_0xe1250a[_0x4d3f85(_0x35bbde._0x2c6bd9)](_0x523b43);}}else{const _0x50e8d3=_0x44d88b[_0x4d3f85(0x223)](/[.*+?^${}()|[\]\\]/g,_0x4d3f85(0xf3));_0x2a41ec[_0x4d3f85(0x2a2)]({'patternStr':_0x50e8d3,'originalKey':_0x44d88b}),_0xe1250a[_0x4d3f85(_0x35bbde._0x22969e)](_0x50e8d3);}});const _0x3a1f5c=new RegExp(_0x2324f2(0x14b)+_0xe1250a[_0x2324f2(0x162)]('|')+_0x2324f2(_0x25309f._0x33e8bf),'gi');return{'compositeRegex':_0x3a1f5c,'looseRules':_0x2a41ec};}else{if(_0x8c448c[_0x2324f2(0x123)]&&_0x526c10['matches'](_0x320d01))_0x58189d[_0x2324f2(_0x25309f._0x2afcda)](_0x14d4f3);}}function cleanAIPromptPrefix(_0x44f405){const _0x1869f7=_0x5d6749;if(!_0x44f405)return'';let _0x5c431d=_0x44f405['replace'](/^\s*(Claude responded|Claude|ChatGPT|Gemini|Grok|DeepSeek|Kimi|Copilot|Assistant|User)\s*(?::|\bsaid\b|\bresponded\b)\s*/i,'');return _0x5c431d=_0x5c431d[_0x1869f7(0x223)](/^\s*Edit\s*\n+/i,''),_0x5c431d=_0x5c431d[_0x1869f7(0x223)](/\s*\bEdit\s+in\s+a\s+page\b\s*$/i,''),_0x5c431d;}function unscrubText(_0x466012,_0xc9185f){const _0x6fa480=_0x5d6749;if(_0x6fa480(0x185)!==_0x6fa480(_0x5b9930._0x4a1f23)){let _0x4d91b0=cleanAIPromptPrefix(_0x466012),_0x2e46aa=-0x165*0x18+0x2630+0x8*-0x97;const {compositeRegex:_0x413a02,looseRules:_0x2706cf}=buildRestorationRegexAndRules(_0xc9185f);return _0x413a02&&(_0x4d91b0=_0x4d91b0[_0x6fa480(_0x5b9930._0x43a9aa)](_0x413a02,_0x2fb856=>{const _0x470572=_0x6fa480;if(_0x470572(_0x1a994a._0x18c271)===_0x470572(_0x1a994a._0x4e6b5a)){if(_0x21e96e[_0x470572(_0x1a994a._0x388fb5)]===_0x470572(0x2d9)&&!_0xe25249[_0x470572(_0x1a994a._0x2bb37a)])_0x11a632[_0x470572(_0x1a994a._0x33f0ec)]();else _0x1e662d[_0x470572(_0x1a994a._0x388fb5)]===_0x470572(_0x1a994a._0x2649a9)&&_0x1e4aa3();}else{_0x2e46aa++;let _0x44071b=_0x2fb856;for(const _0x29e818 of _0x2706cf){if(new RegExp('^'+_0x29e818['patternStr']+'$','i')[_0x470572(_0x1a994a._0x50a2b6)](_0x2fb856)){_0x44071b=_0x29e818[_0x470572(_0x1a994a._0x44d171)];break;}}return _0xc9185f[_0x44071b]||_0x2fb856;}})),{'restoredText':_0x4d91b0,'restoredCount':_0x2e46aa};}else{if(!_0x167948['disabled']){const _0x42ee35=_0x316239[_0x6fa480(_0x5b9930._0x2abbb8)]['trim']();_0x580add();if(_0x43c68b)_0x3f8c18({'passphrase':_0x42ee35,'shouldClearSession':![],'shouldSaveLocal':![]});}}}function unscrubTextAsHTML(_0x52852c,_0x3d10be){const _0x35596a=_0x5d6749;if(_0x35596a(_0x175b10._0x1572ad)==='EhBZn')_0x391c83(_0x5a947c),_0x1d0c13[_0x35596a(_0x175b10._0x21d437)]&&_0x4158c5(_0x2cf110[_0x35596a(0x1ab)]);else{let _0xcf55ba=-0x1c92+-0x1*0x1e8b+-0x3b1d*-0x1;const _0x2556b1=cleanAIPromptPrefix(_0x52852c);let _0x2fbeab=_0x2556b1[_0x35596a(_0x175b10._0x3e2e19)](/[&<>'"]/g,_0x42e9ae=>({'&':_0x35596a(0x81),'<':_0x35596a(0x308),'>':_0x35596a(0x10a),'\x27':_0x35596a(0xdd),'\x22':_0x35596a(0x1b8)}[_0x42e9ae]||_0x42e9ae));const {compositeRegex:_0x397237,looseRules:_0x38a698}=buildRestorationRegexAndRules(_0x3d10be);return _0x397237&&(_0x2fbeab=_0x2fbeab[_0x35596a(_0x175b10._0x2b0624)](_0x397237,_0x2194cf=>{const _0x706ec9=_0x35596a;_0xcf55ba++;let _0x1c8e4c=_0x2194cf;for(const _0x31efdc of _0x38a698){if('ruNBv'===_0x706ec9(0xab)){if(new RegExp('^'+_0x31efdc[_0x706ec9(_0x2cea20._0x24f129)]+'$','i')[_0x706ec9(_0x2cea20._0x4b4a60)](_0x2194cf)){_0x1c8e4c=_0x31efdc['originalKey'];break;}}else{let _0x2853b7=_0x58828e['parentNode'];while(_0x2853b7){if(_0x2853b7[_0x706ec9(_0x2cea20._0x1ddf6f)]&&(_0x2853b7[_0x706ec9(0x1b1)][_0x706ec9(_0x2cea20._0x10914d)](_0x706ec9(0x1d0))||_0x2853b7[_0x706ec9(0x26c)]('data-testid')===_0x706ec9(0x1d0)))return![];_0x2853b7=_0x2853b7[_0x706ec9(_0x2cea20._0x4a7351)]||_0x2853b7[_0x706ec9(0x2e2)];}}}const _0x4b2a93=_0x3d10be[_0x1c8e4c]||_0x2194cf,_0x1b8e80=_0x4b2a93[_0x706ec9(_0x2cea20._0x562196)](/[&<>'"]/g,_0x1f3b1e=>({'&':_0x706ec9(0x81),'<':_0x706ec9(0x308),'>':'&gt;','\x27':_0x706ec9(0xdd),'\x22':_0x706ec9(0x1b8)}[_0x1f3b1e]||_0x1f3b1e));return _0x706ec9(_0x2cea20._0x422c29)+_0x1b8e80+_0x706ec9(0x170);})),{'restoredHTML':_0x2fbeab,'restoredCount':_0xcf55ba};}}function hydrateRegex(_0x1ad827){const _0x22fa69=_0x5d6749;if(_0x1ad827&&typeof _0x1ad827['regex']===_0x22fa69(0x1c8)&&_0x1ad827[_0x22fa69(0x23a)][_0x22fa69(0x2ce)]('/'))try{const _0x306b16=_0x1ad827[_0x22fa69(0x23a)][_0x22fa69(0xfb)]('/'),_0x4adb00=_0x1ad827[_0x22fa69(_0x1bf80c._0x173aa2)]['substring'](-0x1d9b+-0xfb*-0x9+0x14c9,_0x306b16),_0x5af0ce=_0x1ad827['regex'][_0x22fa69(_0x1bf80c._0x499260)](_0x306b16+(0x19c6+-0x815+-0x236*0x8));return{..._0x1ad827,'regex':new RegExp(_0x4adb00,_0x5af0ce)};}catch(_0x35a39a){return console[_0x22fa69(0x2a5)](_0x22fa69(_0x1bf80c._0x524392),_0x1ad827[_0x22fa69(_0x1bf80c._0x39069a)],_0x35a39a),_0x1ad827;}return _0x1ad827;}function _0x16c4b3(_0x1b87c1){const _0x15e3a5={_0x344f61:0x107},_0x2541e3={_0xfe6c79:0x1b6,_0x2e2190:0x1d6,_0x419f49:0x1d6,_0x216bb3:0x1db,_0x1d10b7:0x255,_0x4b6cd3:0x2ae,_0xdfcb44:0x8d,_0xaa736e:0x2af,_0x35aa7e:0x1e1,_0x460883:0x280,_0x3d30ef:0x2b0,_0x5468a1:0x318,_0x17c704:0x315,_0x5cb872:0xbd,_0x101a52:0x195,_0x2848e3:0xb9,_0x5a387c:0x318},_0x3cb56b=_0x5d6749,_0x24f93a=document[_0x3cb56b(0x161)](_0x3cb56b(_0x14bfbb._0x46ec76));if(_0x24f93a)_0x24f93a[_0x3cb56b(_0x14bfbb._0xd98bc2)]();const _0x49a113=document[_0x3cb56b(0x234)](_0x3cb56b(_0x14bfbb._0x6d15d7));_0x49a113['id']='ps-teams-modal',Object[_0x3cb56b(_0x14bfbb._0x3cf28f)](_0x49a113[_0x3cb56b(0x195)],{'position':_0x3cb56b(0x19d),'top':'0','left':'0','width':_0x3cb56b(_0x14bfbb._0x4c81bc),'height':_0x3cb56b(0x1f5),'background':_0x3cb56b(0x1ed),'backdropFilter':'blur(10px)','zIndex':_0x3cb56b(0x25d),'display':_0x3cb56b(0x82),'alignItems':_0x3cb56b(_0x14bfbb._0x3bd93d),'justifyContent':_0x3cb56b(0x229),'fontFamily':_0x3cb56b(_0x14bfbb._0x1dee2c)});const _0x3c17ac=document[_0x3cb56b(0x234)](_0x3cb56b(_0x14bfbb._0x6d15d7));Object[_0x3cb56b(_0x14bfbb._0x3cf28f)](_0x3c17ac['style'],{'background':'rgba(15,23,42,0.9)','border':_0x3cb56b(0x1fb),'borderRadius':'16px','padding':_0x3cb56b(0xfa),'width':_0x3cb56b(_0x14bfbb._0x6d50e5),'maxWidth':_0x3cb56b(_0x14bfbb._0x251bbd),'boxShadow':_0x3cb56b(0xac),'color':'#f8fafc','display':'flex','flexDirection':'column','gap':'16px','animation':_0x3cb56b(0x2a1)});if(!document[_0x3cb56b(_0x14bfbb._0x47b3f5)]('ps-modal-styles')){if(_0x3cb56b(_0x14bfbb._0x312fd8)!==_0x3cb56b(_0x14bfbb._0xe26b10)){const _0x1ae9ca=document[_0x3cb56b(0x234)](_0x3cb56b(_0x14bfbb._0xec7fbb));_0x1ae9ca['id']='ps-modal-styles',_0x1ae9ca[_0x3cb56b(0x2b0)]=_0x3cb56b(0x97),document[_0x3cb56b(_0x14bfbb._0x2e5fb1)][_0x3cb56b(0x2a3)](_0x1ae9ca);}else{if(!engine)return null;const _0x1a149e=engine[_0x3cb56b(0x111)](_0x15a67d,sessionMap,_0x4a66d);return _0x1a149e?{'restoredText':_0x1a149e[_0x3cb56b(_0x14bfbb._0x38dab6)],'text':_0x1a149e['text'],'restoredCount':_0x1a149e[_0x3cb56b(0x2cb)],'count':_0x1a149e['count']}:null;}}const _0x38f251=document[_0x3cb56b(_0x14bfbb._0x184da3)](_0x3cb56b(0x110));Object[_0x3cb56b(0x188)](_0x38f251[_0x3cb56b(0x195)],{'display':'flex','alignItems':_0x3cb56b(_0x14bfbb._0x3bd93d),'gap':_0x3cb56b(_0x14bfbb._0x44f09f)});const _0x3c73e3=document[_0x3cb56b(_0x14bfbb._0x3b7634)]('http://www.w3.org/2000/svg','svg');_0x3c73e3['setAttribute']('width','24'),_0x3c73e3[_0x3cb56b(0x129)](_0x3cb56b(0x287),'24'),_0x3c73e3[_0x3cb56b(_0x14bfbb._0x3a7295)](_0x3cb56b(0x11a),_0x3cb56b(_0x14bfbb._0x38ca14)),_0x3c73e3[_0x3cb56b(0x129)](_0x3cb56b(_0x14bfbb._0x534188),_0x3cb56b(0x2eb)),_0x3c73e3[_0x3cb56b(0x129)](_0x3cb56b(_0x14bfbb._0x3b8c32),'#06b6d4'),_0x3c73e3['setAttribute']('stroke-width','2');const _0x281afc=document[_0x3cb56b(_0x14bfbb._0x392ca8)](_0x3cb56b(_0x14bfbb._0x3c53ec),'path');_0x281afc[_0x3cb56b(0x129)]('d',_0x3cb56b(_0x14bfbb._0x11b7ea)),_0x3c73e3[_0x3cb56b(_0x14bfbb._0x5effa4)](_0x281afc);const _0x11e2a7=document[_0x3cb56b(0x2a4)](_0x3cb56b(0x1df),_0x3cb56b(0x2b1));_0x11e2a7[_0x3cb56b(0x129)]('cx','9'),_0x11e2a7[_0x3cb56b(0x129)]('cy','7'),_0x11e2a7[_0x3cb56b(_0x14bfbb._0x20902b)]('r','4'),_0x3c73e3['appendChild'](_0x11e2a7);const _0x534f15=document[_0x3cb56b(_0x14bfbb._0x855471)]('h3');_0x534f15[_0x3cb56b(0x2b0)]=_0x3cb56b(_0x14bfbb._0x3c92d3),Object['assign'](_0x534f15[_0x3cb56b(0x195)],{'margin':'0','fontSize':'18px','fontWeight':_0x3cb56b(0x221)}),_0x38f251[_0x3cb56b(_0x14bfbb._0xcf101)](_0x3c73e3),_0x38f251['appendChild'](_0x534f15);const _0x2f14d3=document[_0x3cb56b(_0x14bfbb._0x282b5a)]('p');_0x2f14d3[_0x3cb56b(0x2b0)]=_0x3cb56b(0x153),Object['assign'](_0x2f14d3[_0x3cb56b(_0x14bfbb._0x5b47a9)],{'margin':'0','fontSize':_0x3cb56b(_0x14bfbb._0x43f68c),'color':_0x3cb56b(_0x14bfbb._0x50b401),'lineHeight':_0x3cb56b(0x18e)});const _0x1c8f1e=document[_0x3cb56b(0x234)]('div'),_0x24bf02=document[_0x3cb56b(0x234)](_0x3cb56b(0x1eb));_0x24bf02['type']=_0x3cb56b(_0x14bfbb._0x12a65),_0x24bf02['id']=_0x3cb56b(_0x14bfbb._0x28b5e1),_0x24bf02[_0x3cb56b(0xb1)]=_0x3cb56b(0x19b),_0x24bf02[_0x3cb56b(0x2c6)]=_0x3cb56b(0xe8);const _0x2b0347=document[_0x3cb56b(0x234)]('div');_0x2b0347['id']=_0x3cb56b(_0x14bfbb._0x223155),Object[_0x3cb56b(0x188)](_0x2b0347[_0x3cb56b(_0x14bfbb._0x5b47a9)],{'height':_0x3cb56b(_0x14bfbb._0x1b1aad),'borderRadius':_0x3cb56b(0x2c0),'background':'rgba(255,255,255,0.05)','marginTop':_0x3cb56b(_0x14bfbb._0x43c026),'overflow':_0x3cb56b(_0x14bfbb._0x306d81)});const _0x48f168=document[_0x3cb56b(0x234)](_0x3cb56b(0x110));_0x48f168['id']=_0x3cb56b(_0x14bfbb._0x370d1b),Object[_0x3cb56b(0x188)](_0x48f168[_0x3cb56b(_0x14bfbb._0x3ac868)],{'height':'100%','width':'0%','transition':_0x3cb56b(_0x14bfbb._0x5af741)}),_0x2b0347['appendChild'](_0x48f168);const _0x59cb10=document['createElement'](_0x3cb56b(_0x14bfbb._0x5c3ea0));_0x59cb10['id']=_0x3cb56b(0x1cc),Object[_0x3cb56b(0x188)](_0x59cb10[_0x3cb56b(0x195)],{'fontSize':_0x3cb56b(0x90),'textTransform':_0x3cb56b(0xcf),'fontWeight':'bold','marginTop':_0x3cb56b(0x206),'textAlign':_0x3cb56b(_0x14bfbb._0x3bd93d)}),_0x59cb10[_0x3cb56b(0x2b0)]='\u00a0';const _0x15afed=document['createElement'](_0x3cb56b(_0x14bfbb._0x2f389a));_0x15afed['id']=_0x3cb56b(0x201),Object[_0x3cb56b(0x188)](_0x15afed[_0x3cb56b(0x195)],{'color':'#ef4444','fontSize':_0x3cb56b(_0x14bfbb._0x5244ec),'marginTop':_0x3cb56b(0x206),'display':_0x3cb56b(0x2eb),'textAlign':'center'}),_0x15afed[_0x3cb56b(0x2b0)]=_0x3cb56b(_0x14bfbb._0x56a450),_0x1c8f1e[_0x3cb56b(0x2a3)](_0x24bf02),_0x1c8f1e['appendChild'](_0x2b0347),_0x1c8f1e['appendChild'](_0x59cb10),_0x1c8f1e[_0x3cb56b(0x2a3)](_0x15afed);const _0x45a64f=document[_0x3cb56b(0x234)](_0x3cb56b(0x110));Object[_0x3cb56b(_0x14bfbb._0x3cf28f)](_0x45a64f[_0x3cb56b(_0x14bfbb._0xa2ee36)],{'display':'flex','gap':_0x3cb56b(_0x14bfbb._0xddad16),'marginTop':_0x3cb56b(0x206)});const _0x4dd0b1=document['createElement'](_0x3cb56b(0x2fb));_0x4dd0b1['id']=_0x3cb56b(_0x14bfbb._0x1d6415),_0x4dd0b1[_0x3cb56b(_0x14bfbb._0x401f15)]=_0x3cb56b(_0x14bfbb._0x34b152),_0x4dd0b1[_0x3cb56b(_0x14bfbb._0x29a912)]='Cancel';const _0x3d6e93=document[_0x3cb56b(0x234)](_0x3cb56b(0x2fb));_0x3d6e93['id']=_0x3cb56b(0x2c8),_0x3d6e93['className']=_0x3cb56b(0x183),_0x3d6e93[_0x3cb56b(_0x14bfbb._0x39a73f)]=!![],_0x3d6e93['textContent']=_0x3cb56b(0x2f5),_0x45a64f['appendChild'](_0x4dd0b1),_0x45a64f['appendChild'](_0x3d6e93);const _0x3f3c13=document[_0x3cb56b(0x234)](_0x3cb56b(_0x14bfbb._0x1998d1));Object[_0x3cb56b(0x188)](_0x3f3c13['style'],{'textAlign':_0x3cb56b(_0x14bfbb._0x3bd93d),'marginTop':_0x3cb56b(_0x14bfbb._0x5c25f4)});const _0x5203c0=document[_0x3cb56b(_0x14bfbb._0x2d8fe2)]('a');_0x5203c0[_0x3cb56b(_0x14bfbb._0x47881b)]=_0x3cb56b(_0x14bfbb._0x110d23),_0x5203c0[_0x3cb56b(_0x14bfbb._0x414b00)]=_0x3cb56b(0x8a),Object['assign'](_0x5203c0[_0x3cb56b(_0x14bfbb._0x4a4796)],{'color':_0x3cb56b(_0x14bfbb._0x23ab3c),'fontSize':'12px','textDecoration':_0x3cb56b(_0x14bfbb._0x1959c7)}),_0x5203c0[_0x3cb56b(_0x14bfbb._0x58229a)]=_0x3cb56b(_0x14bfbb._0x2781b8),_0x3f3c13[_0x3cb56b(0x2a3)](_0x5203c0),_0x3c17ac[_0x3cb56b(0x2a3)](_0x38f251),_0x3c17ac[_0x3cb56b(_0x14bfbb._0x5effa4)](_0x2f14d3),_0x3c17ac[_0x3cb56b(0x2a3)](_0x1c8f1e),_0x3c17ac[_0x3cb56b(0x2a3)](_0x45a64f),_0x3c17ac[_0x3cb56b(_0x14bfbb._0x512826)](_0x3f3c13),_0x49a113['appendChild'](_0x3c17ac),document['body']['appendChild'](_0x49a113),_0x24bf02[_0x3cb56b(0x198)](),_0x24bf02[_0x3cb56b(0xfe)](_0x3cb56b(_0x14bfbb._0x36ba47),()=>{const _0x4fd208=_0x3cb56b,_0x33cede=_0x24bf02[_0x4fd208(0x1a5)];let _0x4528a4=0xbcb*-0x1+-0x2*-0x839+-0x4a7;if(_0x33cede[_0x4fd208(_0x2541e3._0xfe6c79)]>=0x43*0x1+0x1c6e+0x1d*-0xfd)_0x4528a4++;if(_0x33cede[_0x4fd208(0x1b6)]>=0x13a5+0x13b4+-0x274b)_0x4528a4++;if(/[A-Z]/['test'](_0x33cede)&&/[a-z]/[_0x4fd208(_0x2541e3._0x2e2190)](_0x33cede))_0x4528a4++;if(/[0-9]/[_0x4fd208(_0x2541e3._0x419f49)](_0x33cede))_0x4528a4++;if(/[^A-Za-z0-9]/[_0x4fd208(_0x2541e3._0x419f49)](_0x33cede))_0x4528a4++;_0x4528a4=Math[_0x4fd208(0x15d)](_0x4528a4,0x1*-0x1+0x2096+-0x7*0x4a7);const _0x148045=[{'pct':'0%','color':_0x4fd208(0x9f),'text':''},{'pct':_0x4fd208(0xe0),'color':_0x4fd208(0x122),'text':'Weak'},{'pct':_0x4fd208(0x2c1),'color':_0x4fd208(0x290),'text':_0x4fd208(0x30b)},{'pct':_0x4fd208(0xe7),'color':_0x4fd208(_0x2541e3._0x216bb3),'text':_0x4fd208(_0x2541e3._0x1d10b7)},{'pct':'80%','color':_0x4fd208(_0x2541e3._0x4b6cd3),'text':_0x4fd208(_0x2541e3._0xdfcb44)},{'pct':_0x4fd208(_0x2541e3._0xaa736e),'color':_0x4fd208(0xb4),'text':_0x4fd208(0x267)}],_0x41f930=_0x33cede[_0x4fd208(_0x2541e3._0xfe6c79)]===0x1b92+0xdbc+-0x11*0x26e?_0x148045[0x1f61*-0x1+0xe2f+-0x2*-0x899]:_0x148045[_0x4528a4];_0x48f168[_0x4fd208(0x195)][_0x4fd208(0x131)]=_0x41f930[_0x4fd208(_0x2541e3._0x35aa7e)],_0x48f168['style'][_0x4fd208(0x177)]=_0x41f930[_0x4fd208(_0x2541e3._0x460883)],_0x59cb10[_0x4fd208(_0x2541e3._0x3d30ef)]=_0x41f930[_0x4fd208(0x1c2)]||'\u00a0',_0x59cb10['style'][_0x4fd208(0x280)]=_0x41f930['color'];if(_0x4528a4>=0x2a*-0x77+-0x10ef+0x2477)_0x3d6e93[_0x4fd208(_0x2541e3._0x5468a1)]=![],_0x15afed[_0x4fd208(0x195)][_0x4fd208(_0x2541e3._0x17c704)]=_0x4fd208(0x2eb);else{if('BWRhf'!==_0x4fd208(_0x2541e3._0x5cb872))_0x3a0e99[_0x4fd208(_0x2541e3._0x101a52)][_0x4fd208(_0x2541e3._0x2848e3)]='0',_0x3efb56(()=>_0x50c2a4['remove'](),0x221a+0x17b*-0xd+0xe13*-0x1);else{_0x3d6e93[_0x4fd208(_0x2541e3._0x5a387c)]=!![];if(_0x33cede[_0x4fd208(0x1b6)]>-0x23cf+0x695+-0x102*-0x1d)_0x15afed['style'][_0x4fd208(0x315)]=_0x4fd208(0x22c);else _0x15afed['style'][_0x4fd208(0x315)]=_0x4fd208(0x2eb);}}});const _0x2ca9f6=()=>{const _0x5772c8=_0x3cb56b;_0x49a113[_0x5772c8(_0x4d6482._0x1d9448)][_0x5772c8(0xb9)]='0',setTimeout(()=>_0x49a113[_0x5772c8(0x149)](),0x3b2+-0x20a0+0x1db6);};_0x4dd0b1[_0x3cb56b(0xfe)](_0x3cb56b(0x150),_0x2ca9f6),_0x3d6e93[_0x3cb56b(0xfe)](_0x3cb56b(_0x14bfbb._0x2aaaa5),()=>{const _0x7374ca=_0x3cb56b;if(!_0x3d6e93[_0x7374ca(0x318)]){const _0x28960c=_0x24bf02[_0x7374ca(0x1a5)][_0x7374ca(_0x15e3a5._0x344f61)]();_0x2ca9f6();if(_0x1b87c1)_0x1b87c1({'passphrase':_0x28960c,'shouldClearSession':![],'shouldSaveLocal':![]});}}),_0x24bf02['addEventListener'](_0x3cb56b(_0x14bfbb._0x2cf482),_0x43ea1e=>{const _0xb92009=_0x3cb56b;if(_0x43ea1e['key']==='Enter'&&!_0x3d6e93[_0xb92009(_0x468a45._0x387036)])'nkwlO'===_0xb92009(_0x468a45._0x2cb6e0)?_0x3d6e93['click']():(_0x48b9c7=_0x2bc3b6[0x1dff+0x156c*0x1+-0x336b],_0x37407d=_0x26274f[_0xb92009(_0x468a45._0x56cd8e)](_0x561b43,''));else _0x43ea1e['key']===_0xb92009(_0x468a45._0x5dc373)&&_0x2ca9f6();}),_0x49a113[_0x3cb56b(0xfe)](_0x3cb56b(_0x14bfbb._0x272172),_0x117c1f=>{const _0x595d10=_0x3cb56b;if(_0x117c1f[_0x595d10(_0x1f7d10._0x474f2e)]===_0x49a113)_0x2ca9f6();});}function _0x2205c1(_0x2c4629,_0x58114d=_0x5d6749(0x26e)){const _0xc06c5={_0x37840f:0x195,_0x37ddd5:0xb9},_0x8fb68f=_0x5d6749;if(_0x8fb68f(0x266)===_0x8fb68f(0x16f))_0x1f1753[_0x8fb68f(0x2a3)](_0x3b1456[_0x8fb68f(_0x46131e._0x1eac69)](_0x181015[_0x8fb68f(_0x46131e._0x2c61f9)](_0x6f7364)));else{const _0x5e586b=document[_0x8fb68f(0x161)](_0x8fb68f(_0x46131e._0x17c4d8));if(_0x5e586b)_0x5e586b[_0x8fb68f(_0x46131e._0x3fee9c)]();const _0x43beb3=document[_0x8fb68f(0x234)](_0x8fb68f(_0x46131e._0x5dda19));_0x43beb3['id']=_0x8fb68f(_0x46131e._0x1043c5),_0x43beb3['textContent']=_0x2c4629;const _0x51096c={'success':{'bg':'rgba(16,185,129,0.12)','border':_0x8fb68f(0x2f0),'color':_0x8fb68f(_0x46131e._0x1169cb)},'info':{'bg':_0x8fb68f(0x180),'border':_0x8fb68f(_0x46131e._0x5daf8d),'color':_0x8fb68f(_0x46131e._0x6693dc)},'warning':{'bg':_0x8fb68f(_0x46131e._0x51be16),'border':_0x8fb68f(_0x46131e._0x57193d),'color':_0x8fb68f(0x290)},'error':{'bg':_0x8fb68f(0xaa),'border':'rgba(239,68,68,0.35)','color':_0x8fb68f(0x122)}},{bg:_0x4287d4,border:_0x5abf1c,color:_0x18cd05}=_0x51096c[_0x58114d]||_0x51096c[_0x8fb68f(0x2e4)];Object[_0x8fb68f(_0x46131e._0x5c89b1)](_0x43beb3[_0x8fb68f(_0x46131e._0x3bf567)],{'position':_0x8fb68f(_0x46131e._0x525685),'top':_0x8fb68f(_0x46131e._0x1d663c),'left':_0x8fb68f(_0x46131e._0x384028),'transform':_0x8fb68f(_0x46131e._0x589459),'zIndex':_0x8fb68f(_0x46131e._0x5782d0),'background':_0x4287d4,'border':_0x8fb68f(_0x46131e._0x573ee6)+_0x5abf1c,'color':_0x18cd05,'padding':_0x8fb68f(_0x46131e._0x26c129),'borderRadius':_0x8fb68f(_0x46131e._0x1a496d),'fontSize':_0x8fb68f(_0x46131e._0x4db55c),'fontFamily':_0x8fb68f(0x2e6),'fontWeight':'500','boxShadow':'0\x208px\x2030px\x20rgba(0,0,0,0.3)','backdropFilter':_0x8fb68f(0x120),'transition':'opacity\x200.3s\x20ease','opacity':'1','textAlign':'center'}),document[_0x8fb68f(_0x46131e._0x9e0342)]['appendChild'](_0x43beb3),setTimeout(()=>{const _0x40c0b8=_0x8fb68f;_0x43beb3[_0x40c0b8(_0xc06c5._0x37840f)][_0x40c0b8(_0xc06c5._0x37ddd5)]='0',setTimeout(()=>_0x43beb3[_0x40c0b8(0x149)](),-0x2*-0xa1d+0x1*0x8e9+-0x1bc5);},-0x2301+-0x87*0x2b+0x4372);}}function _0x48ffd0(_0x48df77,_0x5660ef,_0x4ce127,_0x2eedfe,_0x468ebd,_0x4c2a55=![]){const _0x4ed6be={_0x293a50:0x16e,_0x45be21:0x145,_0x709f3e:0x1ad,_0x20bf27:0x16e},_0x16ae26=_0x5d6749;if(!_0x48df77)return null;if(_0x48df77[_0x16ae26(0xb3)]==='TEXTAREA'||_0x48df77[_0x16ae26(_0x49a309._0x30ac92)]===_0x16ae26(_0x49a309._0x21df3b)){if(_0x16ae26(_0x49a309._0x1348b6)===_0x16ae26(0x309)){const _0x2f61a7=_0x48df77[_0x16ae26(_0x49a309._0x3254c5)]||'';if(!_0x2f61a7[_0x16ae26(0x107)]())return{'count':0x0,'tokenMap':_0x468ebd||{}};const _0x1ed441=scrubText(_0x2f61a7,_0x5660ef,_0x4ce127,_0x2eedfe,_0x468ebd||{});return _0x1ed441[_0x16ae26(0x16e)][_0x16ae26(0x281)]>0xa*-0x313+-0x1c49+0xdb*0x45&&!_0x4c2a55&&(_0x48df77[_0x16ae26(_0x49a309._0x45717a)]=_0x1ed441[_0x16ae26(0xa2)],_0x48df77[_0x16ae26(_0x49a309._0x561b11)](new Event(_0x16ae26(_0x49a309._0x35ec7e),{'bubbles':!![],'cancelable':!![]}))),{'count':_0x1ed441[_0x16ae26(0x16e)][_0x16ae26(0x281)],'tokenMap':{..._0x468ebd||{},..._0x1ed441['tokenMap']}};}else!_0x370417['contains'](_0x536976['target'])&&_0x4d4519['target']!==_0x289c69&&(_0x4a883b[_0x16ae26(0x149)](),_0x507c63[_0x16ae26(_0x49a309._0xed052e)]('click',_0x1ea977),_0x5dbb0b['removeEventListener'](_0x16ae26(_0x49a309._0x8b6b8e),_0x2de260));}if(_0x4c2a55){if(_0x16ae26(_0x49a309._0x575d71)!=='LeqPo'){const _0x4e8390=_0x453445[_0x16ae26(0x223)](/^\[|\]$/g,''),_0x57ba9f=_0x4e8390[_0x16ae26(_0x49a309._0x3cbe3c)](/^([A-Za-z_0-9]+?)[-_]?(\d+)$/);if(_0x57ba9f){const _0x4e47cf=_0x57ba9f[0x1*0x107f+0xd90+-0x1e0e*0x1],_0x56cf17=_0x3c5de5(_0x57ba9f[0xfef*0x1+-0x12c2+-0x19*-0x1d],0x2*0x17+0x623+-0x647),_0x510827=getLabelAliases(_0x4e47cf),_0x1ee3fb=_0x510827['map'](_0x38f5d2=>_0x38f5d2['replace'](/[.*+?^${}()|[\]\\]/g,_0x16ae26(0xf3))),_0x1c0f25=_0x16ae26(0x200)+_0x1ee3fb[_0x16ae26(0x162)]('|')+')',_0x331337=_0x16ae26(0x194)+_0x1c0f25+_0x16ae26(_0x49a309._0x37f5e8)+_0x56cf17+'\x5cs*\x5c]?';_0x2159ee[_0x16ae26(0x2a2)]({'patternStr':_0x331337,'originalKey':_0x407d02}),_0x3a2b5b[_0x16ae26(_0x49a309._0x59b989)](_0x331337);}else{const _0x54a5d4=_0x8dfb51[_0x16ae26(_0x49a309._0x546398)](/[.*+?^${}()|[\]\\]/g,'\x5c$&');_0x6828bc[_0x16ae26(0x2a2)]({'patternStr':_0x54a5d4,'originalKey':_0x38a753}),_0x93ab63['push'](_0x54a5d4);}}else{const _0x29dab2=_0x48df77[_0x16ae26(0x27e)]||_0x48df77[_0x16ae26(0x2b0)]||'';if(!_0x29dab2[_0x16ae26(_0x49a309._0x12b1a4)]())return{'count':0x0,'tokenMap':_0x468ebd||{}};const _0x478158=scrubText(_0x29dab2,_0x5660ef,_0x4ce127,_0x2eedfe,_0x468ebd||{});return{'count':_0x478158[_0x16ae26(0x16e)][_0x16ae26(_0x49a309._0x5d8051)],'tokenMap':_0x468ebd||{}};}}const _0x1c970b=document[_0x16ae26(0x1ea)](_0x48df77,NodeFilter['SHOW_TEXT'],null,![]),_0x125605=[];let _0x87fc76;while(_0x87fc76=_0x1c970b[_0x16ae26(0xee)]()){if(_0x16ae26(0x1c6)!==_0x16ae26(0x1c6)){const _0x288629=_0x1dfaa1[_0x16ae26(_0x49a309._0x5cb91c)]||_0x2f21ff[_0x16ae26(0xe3)]?.[_0x16ae26(0x230)];if(_0x288629)_0x30b662(_0x288629);}else{if(!_0x87fc76[_0x16ae26(0x27d)][_0x16ae26(_0x49a309._0x12b1a4)]())continue;_0x125605['push'](_0x87fc76);}}let _0x2c4d37={..._0x468ebd},_0x3d6738=new Set();return _0x125605[_0x16ae26(_0x49a309._0x1ec067)](_0x166008=>{const _0x52d386=_0x16ae26,_0x1948a8=_0x166008[_0x52d386(0x27d)],_0x4638f2=scrubText(_0x1948a8,_0x5660ef,_0x4ce127,_0x2eedfe,_0x2c4d37);if(_0x4638f2[_0x52d386(_0x4ed6be._0x293a50)]['size']>0x8*-0xda+-0x6e6*-0x4+-0x14c8){if(!_0x4c2a55&&_0x4638f2[_0x52d386(0xa2)]!==_0x1948a8){if(_0x52d386(_0x4ed6be._0x45be21)===_0x52d386(_0x4ed6be._0x709f3e)){const engine=_0x31a279();if(engine)return engine[_0x52d386(0xc4)](_0x3ecd49);return[];}else _0x166008['nodeValue']=_0x4638f2['scrubbedText'];}_0x4638f2[_0x52d386(0x2cb)]>0x5c*-0x37+0x219+0x11ab&&(_0x2c4d37={..._0x2c4d37,..._0x4638f2[_0x52d386(0x2f8)]}),_0x4638f2[_0x52d386(_0x4ed6be._0x20bf27)][_0x52d386(0x1b4)](_0x404182=>_0x3d6738[_0x52d386(0x2bc)](_0x404182));}}),_0x3d6738[_0x16ae26(_0x49a309._0x2dddc2)]>0x2*-0x3f+0xb45+-0x1f*0x59&&!_0x4c2a55&&_0x48df77[_0x16ae26(0x193)](new Event(_0x16ae26(0x1eb),{'bubbles':!![],'cancelable':!![]})),{'count':_0x3d6738[_0x16ae26(_0x49a309._0xcb050)],'tokenMap':_0x2c4d37};}const _0xe4a82d=[_0x5d6749(_0x34dd8f._0x410867),_0x5d6749(0x22a),_0x5d6749(_0x34dd8f._0xc5d27e),_0x5d6749(0x159),_0x5d6749(_0x34dd8f._0x21c521),_0x5d6749(_0x34dd8f._0x2b1d2e),_0x5d6749(0x28e),'model-response','.font-claude-message',_0x5d6749(_0x34dd8f._0x268c50),_0x5d6749(0xc5),'.model-response-text__content',_0x5d6749(_0x34dd8f._0x546400),_0x5d6749(0x2b2),_0x5d6749(_0x34dd8f._0x1828c1),'[class*=\x22GrokResponseMessage\x22]',_0x5d6749(0x133),_0x5d6749(_0x34dd8f._0x451a2e),'[class*=\x22AIMessageContent\x22]',_0x5d6749(0x24c),_0x5d6749(_0x34dd8f._0x3ed6e1),'[class*=\x22BotMessage\x22]','.ac-textBlock',_0x5d6749(0x2f6),_0x5d6749(_0x34dd8f._0x97c415),_0x5d6749(_0x34dd8f._0x14167d),_0x5d6749(0x283),_0x5d6749(0x2df),_0x5d6749(_0x34dd8f._0x5ed182),'div[role=\x22article\x22]',_0x5d6749(_0x34dd8f._0x3fa99b),_0x5d6749(0x203),_0x5d6749(0x204),_0x5d6749(0x12e),_0x5d6749(0x2d8),_0x5d6749(_0x34dd8f._0x50f5cc)][_0x5d6749(0x162)](',\x20');function _0x4ef068(_0x4ecdba){const _0x40533e={_0x4e79c4:0x2aa,_0x2e50ae:0x271,_0x27f159:0x28d,_0x59d8ea:0x16a,_0x13501e:0x1d6,_0x7bf2b1:0x15f,_0x38930d:0x234,_0x12d7ba:0xb1,_0x416d40:0x195,_0x2749ca:0x1f4,_0x3232d1:0x2bb,_0x45a39e:0x236,_0x55c588:0xeb,_0x2a5e34:0x2b0,_0x17614f:0x2a3,_0x403974:0x137,_0x11e042:0x23f,_0x247656:0x284},_0x5564c1={_0x516eb2:0xf7,_0x5a8e45:0x89,_0x58a9e5:0x1c1,_0x7fe2da:0x2d0,_0x1572c0:0x1fa,_0x54ce68:0x210,_0x4a4f86:0x23d,_0x320e84:0x2d1,_0x365a1b:0x1b2,_0xa55152:0x1da,_0x2556c3:0x2b0,_0xc2fcc5:0x107,_0xbf9d8a:0x16e,_0x489512:0x281,_0x5ab492:0xa6,_0x3e4e82:0x190,_0x481e62:0x1c4,_0x261d41:0x10b,_0x562648:0x235,_0x4b355b:0x1d6,_0x1d0896:0x316,_0x4eb1d:0x1c4,_0x56aa68:0x1cf,_0x44707d:0x27d,_0xf249f7:0x1a5,_0x414465:0xa2,_0x430467:0x27c,_0x32d035:0x27c,_0xccd992:0x1e0,_0x164530:0x276,_0x521fcc:0x2a2,_0x3a45d5:0x1d1,_0x33db3c:0x105,_0x3f06d4:0x1c4,_0x2b9249:0x29d,_0x2dc8a2:0x317,_0x4f5460:0x174,_0x397549:0x28b,_0x452915:0x2f7,_0x5f12f4:0x199,_0x450d3d:0x108,_0x4d95ad:0x1ab,_0x128a74:0x8e,_0x79be2f:0xfb,_0x49940f:0x23f},_0x31421c={_0x11a6f9:0x1cf,_0x4e451f:0x21d,_0xa2cc4f:0x143},_0x478f98=_0x5d6749,{compositeRegex:_0x590130,looseRules:_0x13f083}=buildRestorationRegexAndRules(_0x4ecdba);if(!_0x590130){if(typeof _0x2205c1===_0x478f98(_0x4b4604._0x5c9978))_0x2205c1(_0x478f98(_0x4b4604._0x1d1235),_0x478f98(0x2e4));return 0x23f1+-0xac2+-0x133*0x15;}let _0x4c01db=-0x1ec+0x2249+-0x5*0x679;const _0x5050f9=[],_0x2113ce=_0xe4a82d;function _0x145d57(_0x2e6db5){const _0x3e393e=_0x478f98;if(!_0x2e6db5)return![];if(_0x2e6db5[_0x3e393e(0x1cf)])return!!_0x2e6db5[_0x3e393e(_0x31421c._0x11a6f9)]('[data-ps-attached=\x22true\x22]');let _0x396980=_0x2e6db5;while(_0x396980){if(_0x396980[_0x3e393e(_0x31421c._0x4e451f)]&&_0x396980[_0x3e393e(0x21d)]['psAttached']===_0x3e393e(0x116))return!![];_0x396980=_0x396980[_0x3e393e(_0x31421c._0xa2cc4f)]||_0x396980[_0x3e393e(0x2e2)];}return![];}function _0xf83afa(_0x4c9b79){const _0x50a09f=_0x478f98;if(!_0x4c9b79||!_0x4c9b79[_0x50a09f(_0x43aa2f._0x5c8ef5)])return![];if(_0x4c9b79[_0x50a09f(0x1cf)](_0x2113ce))return!![];const _0x59d1dc=_0x4c9b79['getRootNode']();if(_0x59d1dc instanceof ShadowRoot&&_0x59d1dc[_0x50a09f(_0x43aa2f._0x5ba389)]){if(_0x59d1dc[_0x50a09f(0x2e2)]['matches']&&_0x59d1dc[_0x50a09f(0x2e2)][_0x50a09f(_0x43aa2f._0x10450e)](_0x2113ce))return!![];if(_0x59d1dc[_0x50a09f(_0x43aa2f._0x1d2211)][_0x50a09f(_0x43aa2f._0x1797bd)]&&_0x59d1dc[_0x50a09f(0x2e2)][_0x50a09f(_0x43aa2f._0x5c8ef5)](_0x2113ce))return!![];}return![];}function _0x30c740(_0x5cd4d9){const _0x2ae671=_0x478f98;if(!_0x5cd4d9)return;if(_0x5cd4d9['shadowRoot']){if(_0x2ae671(0xf7)!==_0x2ae671(_0x5564c1._0x516eb2)){const _0x497e5c=_0x2ae671(0xc7),_0x40c732=_0xd0e779(_0x2ae671(0xcc)),[_0x2b0072,_0x4b357f]=_0x3c92e6[_0x2ae671(0x2ec)]('.');if(_0x2b0072&&_0x4b357f){const _0xbcddf8=_0x40c732[_0x2ae671(0x21e)](_0x2ae671(0x1ce));_0xbcddf8[_0x2ae671(_0x5564c1._0x5a8e45)](_0x2b0072);const _0x1d0364=_0xbcddf8[_0x2ae671(_0x5564c1._0x58a9e5)](_0x497e5c,_0x4b357f,_0x2ae671(0x1fa));if(_0x1d0364){const _0x503bdc=_0x5c30e7[_0x2ae671(0x217)](_0x3140c2[_0x2ae671(_0x5564c1._0x7fe2da)](_0x2b0072,_0x2ae671(_0x5564c1._0x1572c0))['toString']('utf8'));(!_0x503bdc['expires']||_0x503bdc[_0x2ae671(0x1f9)]>_0xf774b8[_0x2ae671(_0x5564c1._0x54ce68)](_0x2df5af[_0x2ae671(0x29c)]()/(0x1*-0x717+0x7*0x423+-0x11f6)))&&(_0x53b6af=!![]);}}}else _0x30c740(_0x5cd4d9[_0x2ae671(0x1ab)]);}let _0x41ce3e=_0x5cd4d9['firstChild'];while(_0x41ce3e){if(_0x2ae671(0x144)!=='XhHec'){const _0x5aceb8=_0x41ce3e[_0x2ae671(0x108)];if(_0x41ce3e[_0x2ae671(_0x5564c1._0x4a4f86)]===Node['TEXT_NODE']){if(_0x2ae671(0x1e6)!==_0x2ae671(_0x5564c1._0x320e84)){if(_0x41ce3e['parentElement']){const _0xea1acd=_0x41ce3e['parentElement'][_0x2ae671(0xb3)];if(!['SCRIPT',_0x2ae671(0x1d1),'TEXTAREA',_0x2ae671(_0x5564c1._0x365a1b),'NOSCRIPT']['includes'](_0xea1acd)){if(_0x2ae671(_0x5564c1._0xa55152)===_0x2ae671(0x1bb)){const _0x13bf6b=_0x46b9ca[_0x2ae671(0x27e)]||_0x525da5[_0x2ae671(_0x5564c1._0x2556c3)]||'';if(!_0x13bf6b[_0x2ae671(_0x5564c1._0xc2fcc5)]())return{'count':0x0,'tokenMap':_0x44be3b||{}};const _0x10ecc0=scrubText(_0x13bf6b,_0x3c0a80,_0x31cf44,_0x27ae87,_0xe1b43f||{});return{'count':_0x10ecc0[_0x2ae671(_0x5564c1._0xbf9d8a)][_0x2ae671(_0x5564c1._0x489512)],'tokenMap':_0x477630||{}};}else{const _0x34c3fc=_0xf83afa(_0x41ce3e['parentElement']);let _0x47a2df=![];if(!_0x34c3fc){const _0xc14e42=_0x145d57(_0x41ce3e[_0x2ae671(0x190)]);if(_0xc14e42)_0x47a2df=!![];else{if(_0x2ae671(_0x5564c1._0x5ab492)===_0x2ae671(0x291)){if(typeof _0x49c2aa===_0x2ae671(0x296))_0x10788c(_0x2ae671(0x15c),_0x2ae671(0x2e4));}else{const _0x48e36=_0x41ce3e[_0x2ae671(_0x5564c1._0x3e4e82)][_0x2ae671(0x2b0)];_0x48e36&&_0x48e36[_0x2ae671(0x1b6)]<0x1182+0x2cdb+-0x3*0xa5f&&(_0x48e36[_0x2ae671(0x1c4)](_0x2ae671(0xf5))||_0x48e36[_0x2ae671(_0x5564c1._0x481e62)](_0x2ae671(0x282)))&&(_0x2ae671(_0x5564c1._0x261d41)!=='kxsZc'?_0x47a2df=!![]:_0x4bea48=_0x2ae671(_0x5564c1._0x562648));}}}if(!_0x47a2df){_0x590130['lastIndex']=0x9f4+-0x158f*0x1+0xb9b;const _0x33dd34=_0x590130[_0x2ae671(_0x5564c1._0x4b355b)](_0x41ce3e[_0x2ae671(0x27d)]);if(_0x33dd34){if(['PRE',_0x2ae671(_0x5564c1._0x1d0896)][_0x2ae671(_0x5564c1._0x4eb1d)](_0xea1acd)||_0x41ce3e[_0x2ae671(_0x5564c1._0x3e4e82)]['closest']&&_0x41ce3e['parentElement'][_0x2ae671(_0x5564c1._0x56aa68)](_0x2ae671(0x307))){const {restoredText:_0x4ddf53,restoredCount:_0x366842}=unscrubText(_0x41ce3e[_0x2ae671(_0x5564c1._0x44707d)],_0x4ecdba);_0x366842>-0x826+-0x3*-0x694+-0xb96&&('GqyOZ'===_0x2ae671(0x94)?(_0x41ce3e[_0x2ae671(_0x5564c1._0x44707d)]=_0x4ddf53,_0x4c01db+=_0x366842):(_0xa20459[_0x2ae671(_0x5564c1._0xf249f7)]=_0x1c7306[_0x2ae671(_0x5564c1._0x414465)],_0x11e090[_0x2ae671(0x193)](new _0x34eb54(_0x2ae671(0x1eb),{'bubbles':!![],'cancelable':!![]}))));}else{if(_0x2ae671(_0x5564c1._0x430467)!==_0x2ae671(_0x5564c1._0x32d035)){const _0xeaa764=(_0x4a8af4[_0x2ae671(_0x5564c1._0xccd992)]()[_0x2ae671(_0x5564c1._0x164530)](/^[A-Za-z]+/)||[''])[0x26b*0xb+0x1da4*0x1+-0x383d];_0x17e8ea['has'](_0xeaa764)?(_0x30f183[_0x2ae671(_0x5564c1._0x521fcc)](_0x111b3e),_0x14333d++):(_0x4c416c[_0x2ae671(0x2a2)](_0x732068[_0x2ae671(0x1d5)]()+'\x20'+_0x15ef20[_0x2ae671(0x1e0)]()),_0xb2796b+=0x13c7+0x1441+-0x5e*0x6d);}else _0x5050f9[_0x2ae671(0x2a2)](_0x41ce3e);}}}}}}}else return!!_0x11338e[_0x2ae671(0x1cf)](_0x2ae671(0x13f));}else{if(_0x41ce3e[_0x2ae671(0x23d)]===Node[_0x2ae671(0x176)]){const _0x1a88d5=_0x41ce3e[_0x2ae671(0xb3)];if(!['SCRIPT',_0x2ae671(_0x5564c1._0x3a45d5),_0x2ae671(0x27f),_0x2ae671(0x1b2),_0x2ae671(_0x5564c1._0x33db3c)][_0x2ae671(_0x5564c1._0x3f06d4)](_0x1a88d5)){if(_0x1a88d5===_0x2ae671(_0x5564c1._0x2b9249))try{if(_0x2ae671(0x2a0)!==_0x2ae671(0x2a0))_0x5a20f6[_0x2ae671(0x2a2)](_0x211af5);else{const _0x24759a=_0x41ce3e[_0x2ae671(0x21a)]||_0x41ce3e[_0x2ae671(0xe3)]?.['document'];if(_0x24759a&&_0x24759a[_0x2ae671(0x317)]){if(_0x2ae671(0xd5)!=='dwLuQ')return!![];else _0x30c740(_0x24759a[_0x2ae671(_0x5564c1._0x2dc8a2)]);}}}catch(_0x2f6208){}else{if(_0x2ae671(_0x5564c1._0x4f5460)!==_0x2ae671(_0x5564c1._0x397549)){const _0x513fb8=_0xf83afa(_0x41ce3e);let _0x21d3c6=![];if(!_0x513fb8){if(_0x2ae671(_0x5564c1._0x452915)==='rdtUL')_0x33888f=_0x16e474[_0x2ae671(0x27e)]||_0x4d0a95[_0x2ae671(0x2b0)]||'';else{const _0x50a9dd=_0x145d57(_0x41ce3e);_0x50a9dd&&(_0x21d3c6=!![]);}}!_0x21d3c6&&(_0x2ae671(0x199)!==_0x2ae671(_0x5564c1._0x5f12f4)?(_0xd2953c(_0x26717b),_0x44c245=_0x251ad4[_0x2ae671(_0x5564c1._0x450d3d)]):(_0x30c740(_0x41ce3e),_0x41ce3e[_0x2ae671(_0x5564c1._0x4d95ad)]&&_0x30c740(_0x41ce3e[_0x2ae671(0x1ab)])));}else{if(typeof _0x224a82===_0x2ae671(0x296))_0x3cc83d(_0x2ae671(_0x5564c1._0x128a74),_0x2ae671(0x2e4));return-0x1274+-0x257+-0x1*-0x14cb;}}}}}_0x41ce3e=_0x5aceb8;}else{const _0x7ebf7d=_0x3d9637['regex'][_0x2ae671(_0x5564c1._0x79be2f)]('/'),_0x590ce9=_0x3d6d18[_0x2ae671(0x23a)][_0x2ae671(_0x5564c1._0x49940f)](-0x203f+-0x5*-0x724+0x1*-0x374,_0x7ebf7d),_0x2d93ab=_0x5e0cd2['regex']['substring'](_0x7ebf7d+(-0x71*0x39+0x1d8c*0x1+-0x462));return{..._0x35de39,'regex':new _0x7cf82e(_0x590ce9,_0x2d93ab)};}}}_0x30c740(document[_0x478f98(_0x4b4604._0x5d9c5f)]),_0x5050f9[_0x478f98(0x1b4)](_0x18f851=>{const _0x5875d3=_0x478f98;if('qpZzw'===_0x5875d3(_0x40533e._0x4e79c4))_0x276719[_0x3d35d8]=_0x5cf822[_0x5875d3(_0x40533e._0x2e50ae)](_0x4c2dd0[_0x1813c5],_0x4d8891);else{const _0x255df4=_0x18f851['nodeValue'],_0x8cc9b4=document[_0x5875d3(_0x40533e._0x27f159)]();let _0x557df3=-0x23d0+-0x175d*0x1+0x3b2d*0x1,_0x3a5bcd;_0x590130[_0x5875d3(0x137)]=0x3*-0x6a3+0x26ce+0x1*-0x12e5;while((_0x3a5bcd=_0x590130['exec'](_0x255df4))!==null){_0x3a5bcd[_0x5875d3(0x16a)]>_0x557df3&&_0x8cc9b4[_0x5875d3(0x2a3)](document[_0x5875d3(0x211)](_0x255df4[_0x5875d3(0x23f)](_0x557df3,_0x3a5bcd[_0x5875d3(_0x40533e._0x59d8ea)])));let _0x5cabf7=_0x3a5bcd[-0x2676+0xdf*-0xa+0x2f2c];for(const _0x6f6410 of _0x13f083){if(new RegExp('^'+_0x6f6410['patternStr']+'$','i')[_0x5875d3(_0x40533e._0x13501e)](_0x3a5bcd[-0xbcd*0x3+0x3*0x39f+-0x12*-0x15d])){_0x5cabf7=_0x6f6410[_0x5875d3(_0x40533e._0x7bf2b1)];break;}}const _0x5b7f0b=_0x4ecdba[_0x5cabf7]||_0x3a5bcd[-0x20*0x1e+-0x1*0xdee+-0x92*-0x1f],_0x20c149=document[_0x5875d3(_0x40533e._0x38930d)](_0x5875d3(0x134));_0x20c149[_0x5875d3(_0x40533e._0x12d7ba)]='ps-restored-data',_0x20c149['title']='Decrypted\x20Locally.\x20LLMs\x20cannot\x20see\x20this.',Object['assign'](_0x20c149[_0x5875d3(_0x40533e._0x416d40)],{'borderBottom':_0x5875d3(_0x40533e._0x2749ca),'color':_0x5875d3(0xb4),'cursor':'help','paddingBottom':'1px','fontWeight':_0x5875d3(_0x40533e._0x3232d1),'position':_0x5875d3(_0x40533e._0x45a39e),'zIndex':'1','textShadow':_0x5875d3(_0x40533e._0x55c588)}),_0x20c149[_0x5875d3(_0x40533e._0x2a5e34)]=_0x5b7f0b,_0x8cc9b4[_0x5875d3(_0x40533e._0x17614f)](_0x20c149),_0x4c01db++,_0x557df3=_0x590130[_0x5875d3(_0x40533e._0x403974)];}_0x557df3<_0x255df4['length']&&_0x8cc9b4['appendChild'](document[_0x5875d3(0x211)](_0x255df4[_0x5875d3(_0x40533e._0x11e042)](_0x557df3)));if(_0x18f851['parentElement'])try{_0x18f851['parentElement'][_0x5875d3(_0x40533e._0x247656)](_0x8cc9b4,_0x18f851);}catch(_0x3daa9d){}}});if(_0x4c01db>0x16*0x43+-0x1ba3+-0x1*-0x15e1){if(_0x478f98(0x302)==='DbFkV'){if(typeof _0x2205c1==='function')_0x2205c1('✅\x20Decrypted\x20Locally!\x20Your\x20data\x20is\x20now\x20safe\x20to\x20copy.',_0x478f98(0x26e));}else{const _0x57892e=_0x2e9b00[_0x478f98(_0x4b4604._0x49a6cf)]===_0x478f98(_0x4b4604._0x347772)||_0x86d980[_0x478f98(0x101)]==='ID'||_0x54572b[_0x478f98(_0x4b4604._0x4b4990)]===_0x478f98(0x23e)?_0x4579e2[_0x478f98(_0x4b4604._0x235fc9)]:_0x7f2e0[_0x478f98(0x1a5)]['toLowerCase']();_0x10c835[_0x478f98(_0x4b4604._0x57b0cd)](_0x57892e);if(_0x539d58[_0x57892e]){_0x447435[_0x478f98(0xd7)]=_0x4c635b[_0x57892e];return;}const _0x422001=_0x17ac7e[_0x478f98(0x181)]||_0x3bca9f[_0xb5f0db[_0x478f98(0x101)]]||_0x17959a[_0x478f98(_0x4b4604._0x49a6cf)],_0x18a26f=_0x2adc5e[_0x42605c[_0x478f98(_0x4b4604._0x52c7f4)]]!==_0x202002;_0x18a26f&&!_0x2e3447[_0x478f98(0x181)]?(_0x5ac854[_0x2a6785[_0x478f98(0x101)]]++,_0x1299b6[_0x478f98(0xd7)]='['+_0x422001+'_'+_0x38acde[_0x1212c0[_0x478f98(_0x4b4604._0x390566)]]+']'):(_0x206205[_0x422001]=(_0x48ccb1[_0x422001]||-0x52*0x1+-0x1a17+-0x1a69*-0x1)+(0xf45+0x1a68+0x3*-0xde4),_0x1139fa[_0x478f98(_0x4b4604._0x5b7fe1)]='['+_0x422001+'_'+_0x217919[_0x422001]+']'),_0x30b3c4[_0x57892e]=_0x4530b2[_0x478f98(0xd7)],sessionMap[_0x50e841[_0x478f98(0xd7)]]=_0x3b065f[_0x478f98(_0x4b4604._0x2e2a37)];}}else{if(_0x478f98(_0x4b4604._0x285105)!=='bJvFX'){if(typeof _0x2205c1===_0x478f98(_0x4b4604._0x648629))_0x2205c1(_0x478f98(0x15c),_0x478f98(_0x4b4604._0x58ec4d));}else return _0x34747b[_0x478f98(0x1b6)]-_0x2d5cc1[_0x478f98(0x1b6)];}return _0x4c01db;}function _0x108373(){const _0x34d35d={_0x5def29:0x17e,_0x1345f6:0x105,_0x475d8a:0xb3,_0x5df207:0x1b2,_0x15b753:0x27e,_0x4e7324:0x2b0,_0xeb9044:0x1cf,_0x501ca7:0x307,_0x296117:0x27d,_0x3b79e3:0x2a2},_0x516919={_0x3f18ac:0x8c,_0x22b8a7:0x287,_0x394cc3:0x1cf,_0x9b2f7e:0x189,_0x5511ce:0x237,_0x2712ed:0x219,_0x464556:0x15b,_0x3b6a4d:0x289,_0x3aab4c:0x26d,_0x174922:0x1cf,_0x15f1b5:0x1c7,_0x59e1ab:0x219,_0x1af8f8:0x1d0,_0x5f493c:0x11e,_0x43a72a:0x24e,_0x234912:0x143,_0x55081f:0x1b1,_0xa4d04a:0x219,_0x81eaac:0x26c,_0x2467ba:0x91,_0x4a3716:0x27d},_0x3fdf63=_0x5d6749;try{if('QdVYg'===_0x3fdf63(_0x249fcb._0x3c57c2)){function _0x55498c(_0x539dc0,_0x469536){const _0x55446d={_0x47a089:0x176,_0x106dad:0x1ab,_0x37a1e8:0xb3,_0x1dcf44:0x23a,_0x3fb5c4:0x23a,_0x308147:0x21a,_0x3c5ab1:0xe3,_0x48aec9:0x230,_0x288477:0x265,_0x5772bd:0x260,_0x3c59eb:0x108},_0x205825=[];if(!_0x539dc0)return _0x205825;function _0x401db5(_0x2fa8ed){const _0x52d7ec=_0x4336;if(!_0x2fa8ed)return;if(_0x2fa8ed[_0x52d7ec(0x23d)]===Node[_0x52d7ec(_0x55446d._0x47a089)]){try{if(_0x2fa8ed['matches']&&_0x2fa8ed[_0x52d7ec(0x123)](_0x469536))_0x205825[_0x52d7ec(0x2a2)](_0x2fa8ed);}catch(_0x32e5cc){}if(_0x2fa8ed[_0x52d7ec(_0x55446d._0x106dad)])_0x401db5(_0x2fa8ed[_0x52d7ec(0x1ab)]);if(_0x2fa8ed[_0x52d7ec(_0x55446d._0x37a1e8)]==='IFRAME'){if('RwSea'==='TNpyY')try{const _0x2ff246=_0x569fae[_0x52d7ec(0x23a)][_0x52d7ec(0xfb)]('/'),_0x44d8c9=_0x3e86ed[_0x52d7ec(_0x55446d._0x1dcf44)]['substring'](-0x72d*-0x5+0x1*0x2445+-0x4825,_0x2ff246),_0x58088c=_0x1f8b5c[_0x52d7ec(_0x55446d._0x3fb5c4)][_0x52d7ec(0x23f)](_0x2ff246+(0xe83+0x19*-0x8d+-0xbd*0x1));return{..._0xa4369c,'regex':new _0xf85de1(_0x44d8c9,_0x58088c)};}catch(_0xba8f62){return _0x376b22['error']('PS:\x20Failed\x20to\x20hydrate\x20regex:',_0x3a272a[_0x52d7ec(0x23a)],_0xba8f62),_0x270489;}else{try{const _0x4e4392=_0x2fa8ed[_0x52d7ec(_0x55446d._0x308147)]||_0x2fa8ed[_0x52d7ec(_0x55446d._0x3c5ab1)]?.[_0x52d7ec(_0x55446d._0x48aec9)];if(_0x4e4392)_0x401db5(_0x4e4392);}catch(_0x24ce62){}return;}}}else{if(_0x2fa8ed[_0x52d7ec(0x23d)]!==Node[_0x52d7ec(0x2e1)]&&_0x2fa8ed[_0x52d7ec(0x23d)]!==Node['DOCUMENT_FRAGMENT_NODE']){if(_0x52d7ec(_0x55446d._0x288477)!==_0x52d7ec(0x265))_0x5b6c35(_0x518d11['shadowRoot']);else return;}}let _0x6dec82=_0x2fa8ed[_0x52d7ec(_0x55446d._0x5772bd)];while(_0x6dec82){_0x401db5(_0x6dec82),_0x6dec82=_0x6dec82[_0x52d7ec(_0x55446d._0x3c59eb)];}}return _0x401db5(_0x539dc0),_0x205825;}const _0x46263e=_0x55498c(document,_0x3fdf63(_0x249fcb._0x39ee31)),_0x5b2102=_0x46263e[_0x3fdf63(0x1b3)](_0x20ed95=>_0x20ed95['offsetParent']!==null&&_0x20ed95[_0x3fdf63(0x2ff)]>-0x1ed7+0x175e+0x779&&!_0x20ed95[_0x3fdf63(0x1cf)]('.ps-toolbar-container')),_0x1e5118=_0x5b2102?_0x5b2102[_0x3fdf63(_0x249fcb._0x77e276)]||_0x5b2102[_0x3fdf63(_0x249fcb._0x5a7609)]||_0x5b2102[_0x3fdf63(0x2b0)]||'':'';let _0x2ba5cd='';const _0x19d81d=_0xe4a82d,_0x20b647=_0x55498c(document,_0x19d81d),_0x40fed0=Array[_0x3fdf63(0x2d0)](_0x20b647)[_0x3fdf63(_0x249fcb._0x353327)](_0x427d80=>{const _0x1d6271=_0x3fdf63,_0x21adcf=_0x427d80[_0x1d6271(0xda)]?_0x427d80[_0x1d6271(0xda)]():null,_0x1c5a45=_0x427d80[_0x1d6271(_0x516919._0x3f18ac)]!==null&&_0x427d80['offsetHeight']>-0x590*-0x3+0x761+-0x1811*0x1||_0x21adcf&&_0x21adcf[_0x1d6271(_0x516919._0x22b8a7)]>0x25aa+0x1c9*-0x10+-0x48d*0x2&&_0x21adcf['width']>0x133*-0x13+0x247c+0x15*-0xa7;if(!_0x1c5a45)return![];if(_0x427d80[_0x1d6271(0x1cf)]){if(_0x427d80[_0x1d6271(_0x516919._0x394cc3)](_0x1d6271(_0x516919._0x9b2f7e)))return![];if(_0x427d80[_0x1d6271(0x1cf)](_0x1d6271(0x169)))return![];}if(_0x427d80[_0x1d6271(0x1cf)]){if(_0x427d80['closest'](_0x1d6271(_0x516919._0x5511ce)))return![];if(_0x427d80[_0x1d6271(0x1b1)]['contains']('thinking')||_0x427d80['classList'][_0x1d6271(_0x516919._0x2712ed)](_0x1d6271(0xc9)))return![];}{const _0x56c602=(_0x427d80[_0x1d6271(0x27e)]||_0x427d80['textContent']||'')['trim']();if(_0x56c602[_0x1d6271(0x15b)]()==='thinking\x20completed'||_0x56c602[_0x1d6271(_0x516919._0x464556)]()===_0x1d6271(_0x516919._0x3b6a4d))return![];}if(_0x5b2102&&_0x427d80['contains'](_0x5b2102))return![];const _0x32d0a3=_0x427d80['getAttribute'](_0x1d6271(_0x516919._0x3aab4c));if(_0x32d0a3===_0x1d6271(0xff))return![];if(_0x427d80[_0x1d6271(0x1cf)]){if(_0x427d80[_0x1d6271(_0x516919._0x174922)](_0x1d6271(_0x516919._0x15f1b5))||_0x427d80[_0x1d6271(0x1b1)][_0x1d6271(_0x516919._0x59e1ab)](_0x1d6271(_0x516919._0x1af8f8)))return![];if(_0x427d80['closest'](_0x1d6271(0x9e)))return![];if(_0x427d80[_0x1d6271(_0x516919._0x174922)](_0x1d6271(_0x516919._0x5f493c)))return![];}else{if(_0x1d6271(_0x516919._0x43a72a)!==_0x1d6271(0x2ba)){let _0x142f6d=_0x427d80[_0x1d6271(_0x516919._0x234912)];while(_0x142f6d){if(_0x142f6d[_0x1d6271(_0x516919._0x55081f)]&&(_0x142f6d['classList'][_0x1d6271(_0x516919._0xa4d04a)]('user-message')||_0x142f6d[_0x1d6271(_0x516919._0x81eaac)](_0x1d6271(0x2a7))===_0x1d6271(0x1d0))){if(_0x1d6271(_0x516919._0x2467ba)===_0x1d6271(0x91))return![];else _0xcc4f21[_0x1d6271(_0x516919._0x4a3716)]=_0x36f03a['scrubbedText'];}_0x142f6d=_0x142f6d[_0x1d6271(0x143)]||_0x142f6d[_0x1d6271(0x2e2)];}}else _0x3e74a3[_0x1d6271(0x195)][_0x1d6271(0xb9)]='0',_0x2323da(()=>_0x5b64eb['remove'](),-0x1308+0x3*-0x945+-0x1*-0x3035);}return!![];});if(_0x40fed0['length']>0x78*-0x34+0x131*-0x9+0x2319){if(_0x3fdf63(_0x249fcb._0x3c9c59)!==_0x3fdf63(_0x249fcb._0x1ed016))throw new _0x2fee53(_0x3fdf63(_0x249fcb._0x3baca5)+_0x26254b[_0x3fdf63(_0x249fcb._0x29fb56)]()+_0x3fdf63(0x319));else{const _0x3c3c05=_0x40fed0[_0x3fdf63(0x196)]((_0xb5b70b,_0x2223be,_0x343b68)=>!_0x343b68[_0x3fdf63(0x1f8)](_0x3c06a4=>_0x3c06a4!==_0xb5b70b&&_0xb5b70b[_0x3fdf63(0x219)](_0x3c06a4))),_0x5aff87=_0x3c3c05[_0x3fdf63(0x1b6)]>-0x1*0x1431+0x9f7+-0x4d*-0x22?_0x3c3c05:_0x40fed0,_0x3eaf8a=_0x5aff87[_0x5aff87[_0x3fdf63(_0x249fcb._0x4c7a68)]-(0x1d35+-0x727+-0x5*0x469)];let _0x4673d2=![];if(_0x5aff87[_0x3fdf63(_0x249fcb._0x1dffcb)]>-0x1378+0xa3*0x3+0x232*0x8){let _0x181710=_0x3eaf8a[_0x3fdf63(0x190)];for(let _0x27c5c9=-0x72e+0x1346+0x56*-0x24;_0x27c5c9<0x663+0x1bd4+-0x2235&&_0x181710;_0x27c5c9++){if(_0x5b2102&&_0x181710[_0x3fdf63(0x219)](_0x5b2102))break;if(_0x181710['tagName']==='BODY')break;const _0x33fdf3=_0x5aff87[_0x3fdf63(_0x249fcb._0x353327)](_0x3bd9eb=>_0x181710[_0x3fdf63(0x219)](_0x3bd9eb));if(_0x33fdf3[_0x3fdf63(0x1b6)]>=0x1*0x80b+-0x1*0x1cad+0x14a4){if(_0x3fdf63(_0x249fcb._0x25210f)!=='nPKSa'){let _0x45a791=_0x355a8d[_0x3fdf63(0x2ec)]('_')[0x1*-0x4eb+-0x575+0xa60][_0x3fdf63(0x223)]('[','');_0x4246ad[_0x45a791]=(_0xe7bcb5[_0x45a791]||0xd3d*0x1+-0x8e1+0xba*-0x6)+(0xcb4+-0x18c0+0x5*0x269);}else{_0x2ba5cd=_0x181710[_0x3fdf63(0x27e)]||_0x181710['textContent']||'',_0x4673d2=!![];break;}}_0x181710=_0x181710[_0x3fdf63(0x190)];}}!_0x4673d2&&(_0x2ba5cd=_0x3eaf8a[_0x3fdf63(_0x249fcb._0x3c873c)]||_0x3eaf8a['textContent']||'');}}if(!_0x2ba5cd[_0x3fdf63(_0x249fcb._0x58681f)]()){const _0x1632f2=_0x55498c(document,_0x3fdf63(0x295)),_0x57800a=_0x1632f2[_0x3fdf63(0x196)](_0x36479a=>{const _0x2c2c84=_0x3fdf63;if(_0x2c2c84(_0x34d35d._0x5def29)!==_0x2c2c84(0x10c)){if(_0x36479a['closest']&&_0x36479a[_0x2c2c84(0x1cf)](_0x2c2c84(0x9b)))return![];if(_0x5b2102&&_0x36479a[_0x2c2c84(0x219)](_0x5b2102))return![];let _0x389a3a=_0x36479a;while(_0x389a3a){if(_0x389a3a[_0x2c2c84(0x21d)]&&_0x389a3a[_0x2c2c84(0x21d)]['psAttached']==='true')return![];_0x389a3a=_0x389a3a[_0x2c2c84(0x143)]||_0x389a3a[_0x2c2c84(0x2e2)];}if([_0x2c2c84(0x138),_0x2c2c84(0x1d1),_0x2c2c84(_0x34d35d._0x1345f6)][_0x2c2c84(0x1c4)](_0x36479a['tagName']))return![];const _0x4b2595=_0x36479a[_0x2c2c84(_0x34d35d._0x475d8a)]===_0x2c2c84(_0x34d35d._0x5df207)||_0x36479a['tagName']===_0x2c2c84(0x27f)?_0x36479a[_0x2c2c84(0x1a5)]||'':_0x36479a[_0x2c2c84(_0x34d35d._0x15b753)]||_0x36479a[_0x2c2c84(_0x34d35d._0x4e7324)]||'';return/\[[A-Z]+_[0-9]+\]/[_0x2c2c84(0x1d6)](_0x4b2595);}else{if(['PRE','CODE']['includes'](_0x4a37b1)||_0x22eec9[_0x2c2c84(0x190)][_0x2c2c84(_0x34d35d._0xeb9044)]&&_0x4b9f5d[_0x2c2c84(0x190)]['closest'](_0x2c2c84(_0x34d35d._0x501ca7))){const {restoredText:_0x11b543,restoredCount:_0x3c3e17}=unscrubText(_0x36fe07[_0x2c2c84(_0x34d35d._0x296117)],_0x90253e);_0x3c3e17>-0xf53+0x1*0x12da+-0x387&&(_0x3c4221['nodeValue']=_0x11b543,_0x3bd72d+=_0x3c3e17);}else _0x514b84[_0x2c2c84(_0x34d35d._0x3b79e3)](_0x25d793);}});let _0x4589e8=null,_0x439aa6=-0x1937+0x1*-0xc1+0x19f8,_0xc6e732=-0x77a+0x102d+-0x8b3;for(const _0x499074 of _0x57800a){if(_0x3fdf63(0x155)!==_0x3fdf63(0x155))_0x140c7e[_0x3fdf63(_0x249fcb._0x188541)]['replaceChild'](_0x51088c,_0x39bcb3);else{const _0x27ee9b=_0x499074['tagName']===_0x3fdf63(0x1b2)||_0x499074[_0x3fdf63(_0x249fcb._0x594df3)]==='TEXTAREA'?_0x499074[_0x3fdf63(_0x249fcb._0x10de03)]||'':_0x499074[_0x3fdf63(0x27e)]||_0x499074[_0x3fdf63(_0x249fcb._0x256518)]||'',_0x4e1447=_0x27ee9b[_0x3fdf63(_0x249fcb._0x208b22)](/\[[A-Z]+_[0-9]+\]/g)||[],_0x314bef=new Set(_0x4e1447)[_0x3fdf63(0x281)];(_0x314bef>_0x439aa6||_0x314bef===_0x439aa6&&_0x314bef>0x69c+0x1c1c+-0x22b8&&_0x27ee9b[_0x3fdf63(0x1b6)]>_0xc6e732)&&(_0x439aa6=_0x314bef,_0xc6e732=_0x27ee9b['length'],_0x4589e8=_0x499074);}}_0x4589e8&&(_0x2ba5cd=_0x4589e8[_0x3fdf63(0xb3)]===_0x3fdf63(0x1b2)||_0x4589e8['tagName']==='TEXTAREA'?_0x4589e8[_0x3fdf63(0x1a5)]||'':_0x4589e8[_0x3fdf63(_0x249fcb._0x2345cb)]||_0x4589e8[_0x3fdf63(_0x249fcb._0x256518)]||'');}return{'inputText':_0x1e5118[_0x3fdf63(0x107)](),'outputText':cleanAIPromptPrefix(_0x2ba5cd)[_0x3fdf63(_0x249fcb._0x57de8f)]()};}else{const _0x26e0a6=_0x10c3bb(_0x33c41d[0x144b+-0x9e9*0x1+-0xa60],0x296+-0x1*-0x16e5+-0x27*0xa7),_0x2941de=_0x22089e(_0x32efd8[-0x3*0xadb+-0x30*0x35+-0x2a83*-0x1],0xfc+-0x434*-0x4+-0x11c2),_0x51fbd6=_0x235807[-0x10c6+0x1*-0xb74+0x1c3b],_0x394f29=_0x33d456[-0x1a3c+-0x8*0x13c+0x241d];if(_0x26e0a6!==_0x2941de)return _0x2941de-_0x26e0a6;if(_0x51fbd6[_0x3fdf63(_0x249fcb._0x1dffcb)]!==_0x394f29[_0x3fdf63(_0x249fcb._0x1426ac)])return _0x394f29[_0x3fdf63(0x1b6)]-_0x51fbd6[_0x3fdf63(0x1b6)];}}catch(_0x3d9622){return console[_0x3fdf63(0x2a5)](_0x3fdf63(_0x249fcb._0x31773b),_0x3d9622),{'inputText':'','outputText':''};}}function _0x2ab1a6(_0x2ff497){const _0x25b504=_0x5d6749,engine=_0x4e0e9d();if(engine)return engine[_0x25b504(0xc4)](_0x2ff497);return[];}function _0x1091b3(_0x43b0a4,_0x192064,_0x13f5bf){const _0x26c008={_0x3a1a9b:0x1a2,_0x316b85:0x110,_0x2e4121:0x1b1,_0x611d5a:0x2bc,_0x73bc9:0x11b,_0x43a1c3:0x1bf,_0x184962:0x27e,_0x599b65:0x2fa,_0x3f9f49:0x150,_0x36a0d9:0x26a},_0xa2f239=_0x5d6749;let _0x4127b3=document[_0xa2f239(_0x4e468b._0x55d351)](_0xa2f239(0x168));if(_0x4127b3){if(_0xa2f239(0x2d4)==='AHYYp')return _0x2fef0f-_0x471119;else{_0x4127b3[_0xa2f239(0x149)]();return;}}const _0x1f1bc1=[{'id':_0xa2f239(0x235),'label':_0xa2f239(0x235)},{'id':'Engineering','label':_0xa2f239(0x1ba)},{'id':_0xa2f239(_0x4e468b._0xa1038f),'label':_0xa2f239(0x1e7)},{'id':_0xa2f239(0x312),'label':_0xa2f239(0x312)},{'id':_0xa2f239(_0x4e468b._0x5b2862),'label':_0xa2f239(_0x4e468b._0x4e062c)},{'id':'HR','label':'HR'}];chrome[_0xa2f239(_0x4e468b._0x26b003)][_0xa2f239(0x247)][_0xa2f239(0x1dc)](['ps_active_profile','ps_is_pro',_0xa2f239(0x2d2)],_0x59c476=>{const _0x17fe2a={_0x9f9a57:0xfe,_0x37c67e:0x150,_0x5292eb:0xfe},_0x125043={_0x42dae5:0x219,_0x238593:0x150,_0x2ce06f:0x11c,_0x1f82c6:0x1e9,_0x472fb3:0x2e2,_0x145c9e:0x123,_0x3da29c:0x2e2,_0xcddd0b:0x1cf,_0x59afe2:0x138,_0x5a1595:0x1d1,_0x37bcf0:0xb3,_0x20ab44:0x1a5,_0x507e4f:0x1d6},_0xe5e7ea=_0xa2f239;if(_0xe5e7ea(_0x44e9e1._0x412057)===_0xe5e7ea(0x1c9)){try{const _0x5b71b7=_0x5a2ecc[_0xe5e7ea(_0x44e9e1._0x34cdf3)]||_0x1c5966[_0xe5e7ea(_0x44e9e1._0x10e6a8)]?.[_0xe5e7ea(_0x44e9e1._0x49de0a)];if(_0x5b71b7)_0x5a2782(_0x5b71b7);}catch(_0x39483e){}return;}else{const _0x1e5c8f=_0x59c476[_0xe5e7ea(0x124)]||'General',_0x33ada6=_0x59c476[_0xe5e7ea(_0x44e9e1._0x33ac4c)]||_0x59c476[_0xe5e7ea(_0x44e9e1._0x4f36a8)]||![],_0x322811=document[_0xe5e7ea(_0x44e9e1._0x2c69b8)]('div');_0x322811['id']=_0xe5e7ea(0x168),_0x322811[_0xe5e7ea(0xb1)]=_0xe5e7ea(0x168);const _0x5ce759=_0x192064[_0xe5e7ea(_0x44e9e1._0x1553e1)]();_0x322811[_0xe5e7ea(0x195)]['top']=_0x5ce759[_0xe5e7ea(_0x44e9e1._0x4d7425)]+window[_0xe5e7ea(_0x44e9e1._0x2692ec)]+(0xc4*0x5+0x11b0+-0x157f*0x1)+'px',_0x322811[_0xe5e7ea(0x195)][_0xe5e7ea(_0x44e9e1._0x1d1a6b)]=_0x5ce759[_0xe5e7ea(0x24f)]+window[_0xe5e7ea(0x268)]-(-0x5c*0x3b+0x5d6*-0x5+0x32f8)+'px';const _0x106efc=document[_0xe5e7ea(_0x44e9e1._0x2c69b8)](_0xe5e7ea(0x110));_0x106efc[_0xe5e7ea(_0x44e9e1._0x25a5f6)]=_0xe5e7ea(0x26f),_0x106efc[_0xe5e7ea(_0x44e9e1._0x5bf63a)]=_0xe5e7ea(0x27a),_0x322811[_0xe5e7ea(_0x44e9e1._0x248777)](_0x106efc),_0x1f1bc1[_0xe5e7ea(_0x44e9e1._0x243b44)](_0x33ceae=>{const _0x112a45={_0x9af6bd:0x88,_0x1306ba:0x235,_0xfbbd07:0x296,_0x18ff86:0x264,_0x5ecc44:0x2dc,_0x4a17b6:0x247},_0x44de16={_0x18655b:0x2be,_0x541c30:0x296,_0x2ccd49:0xd1,_0x17dce2:0x23a,_0x4bb88f:0xb0},_0x18054f=_0xe5e7ea;if(_0x18054f(_0x26c008._0x3a1a9b)===_0x18054f(0x1a2)){const _0xc474ed=document[_0x18054f(0x234)](_0x18054f(_0x26c008._0x316b85));_0xc474ed['className']=_0x18054f(0x2c5);if(_0x33ceae['id']===_0x1e5c8f)_0xc474ed[_0x18054f(_0x26c008._0x2e4121)][_0x18054f(_0x26c008._0x611d5a)](_0x18054f(_0x26c008._0x73bc9));let _0x51b47a=_0x33ceae['label'];_0xc474ed[_0x18054f(0x27e)]=_0x51b47a;if(!_0x33ada6&&_0x33ceae['id']!==_0x18054f(0x235))_0xc474ed[_0x18054f(0x195)]['opacity']='0.5',_0xc474ed[_0x18054f(0x195)]['cursor']=_0x18054f(_0x26c008._0x43a1c3),_0xc474ed[_0x18054f(0x9d)]=_0x18054f(0xf1),_0xc474ed[_0x18054f(_0x26c008._0x184962)]=_0x51b47a+_0x18054f(_0x26c008._0x599b65);else _0x33ceae['id']===_0x1e5c8f&&(_0xc474ed['innerText']=_0x51b47a+'\x20✓');_0xc474ed['addEventListener'](_0x18054f(_0x26c008._0x3f9f49),_0x5c1fa2=>{const _0x183782=_0x18054f;if(_0x183782(_0x112a45._0x9af6bd)!==_0x183782(_0x112a45._0x9af6bd))return{'compositeRegex':null,'looseRules':[]};else{_0x5c1fa2[_0x183782(0x22f)]();if(!_0x33ada6&&_0x33ceae['id']!==_0x183782(_0x112a45._0x1306ba)){typeof _0x2205c1===_0x183782(_0x112a45._0xfbbd07)&&('mtuUI'!==_0x183782(0x28a)?_0x2205c1(_0x183782(_0x112a45._0x18ff86),_0x183782(0xc3)):(_0x236273[_0x183782(0x2a2)](_0x21f27b),_0x2ce3dd++));_0x322811['remove']();return;}chrome[_0x183782(_0x112a45._0x5ecc44)][_0x183782(_0x112a45._0x4a17b6)][_0x183782(0xc8)]({'ps_active_profile':_0x33ceae['id']},()=>{const _0x4ae373=_0x183782;if('vGVCp'===_0x4ae373(_0x44de16._0x18655b)){_0x5c55e5[_0x4ae373(0x149)]();return;}else{if(typeof _0x2205c1===_0x4ae373(_0x44de16._0x541c30)){if('fQDWA'===_0x4ae373(_0x44de16._0x2ccd49))return _0x1399db[_0x4ae373(0x2a5)](_0x4ae373(0x20a),_0x391949[_0x4ae373(_0x44de16._0x17dce2)],_0x1068c1),_0x310972;else _0x2205c1(_0x4ae373(0x8b)+_0x33ceae[_0x4ae373(_0x44de16._0x4bb88f)],_0x4ae373(0x26e));}_0x322811['remove'](),typeof _0x13f5bf===_0x4ae373(0x296)&&_0x13f5bf(_0x33ceae['id']);}});}}),_0x322811[_0x18054f(0x2a3)](_0xc474ed);}else{const _0x9d80b3=(_0x1972ae[_0x18054f(0x27e)]||_0x46286e['textContent']||'')[_0x18054f(0x107)]();if(_0x9d80b3['toLowerCase']()===_0x18054f(_0x26c008._0x36a0d9)||_0x9d80b3['toLowerCase']()==='thinking...')return![];}}),document['body']['appendChild'](_0x322811);const _0x1a9cba=_0x10bc60=>{const _0xda7801=_0xe5e7ea;if('xADgt'!==_0xda7801(0x139)){if(!_0x322811[_0xda7801(_0x125043._0x42dae5)](_0x10bc60[_0xda7801(0x1f7)])&&_0x10bc60[_0xda7801(0x1f7)]!==_0x192064){if(_0xda7801(0x2d6)!=='IOTiz')_0x322811[_0xda7801(0x149)](),document['removeEventListener'](_0xda7801(_0x125043._0x238593),_0x1a9cba),document[_0xda7801(_0x125043._0x2ce06f)](_0xda7801(_0x125043._0x1f82c6),_0x1a9cba);else{if(_0x2740a1[_0xda7801(_0x125043._0x472fb3)][_0xda7801(_0x125043._0x145c9e)]&&_0x7b470c[_0xda7801(0x2e2)]['matches'](_0x4d2c51))return!![];if(_0x49356b[_0xda7801(0x2e2)][_0xda7801(0x1cf)]&&_0x176267[_0xda7801(_0x125043._0x3da29c)]['closest'](_0x15e7b1))return!![];}}}else{if(_0x1b499e['closest']&&_0x2223ce[_0xda7801(_0x125043._0xcddd0b)]('nav,\x20aside,\x20header,\x20[role=\x22navigation\x22],\x20[role=\x22complementary\x22],\x20[role=\x22banner\x22]'))return![];if(_0x25f1f0&&_0x53adf5[_0xda7801(0x219)](_0x5b3d37))return![];let _0x486990=_0xa990ac;while(_0x486990){if(_0x486990[_0xda7801(0x21d)]&&_0x486990['dataset'][_0xda7801(0x1d8)]===_0xda7801(0x116))return![];_0x486990=_0x486990['parentNode']||_0x486990['host'];}if([_0xda7801(_0x125043._0x59afe2),_0xda7801(_0x125043._0x5a1595),_0xda7801(0x105)]['includes'](_0x19e059[_0xda7801(0xb3)]))return![];const _0x4dab88=_0x2f4457[_0xda7801(_0x125043._0x37bcf0)]===_0xda7801(0x1b2)||_0x17570e[_0xda7801(_0x125043._0x37bcf0)]===_0xda7801(0x27f)?_0x6052b5[_0xda7801(_0x125043._0x20ab44)]||'':_0x20902a[_0xda7801(0x27e)]||_0x3f3010['textContent']||'';return/\[[A-Z]+_[0-9]+\]/[_0xda7801(_0x125043._0x507e4f)](_0x4dab88);}};setTimeout(()=>{const _0x46bcfb=_0xe5e7ea;if('tQNNx'!=='TsDbB')document[_0x46bcfb(_0x17fe2a._0x9f9a57)](_0x46bcfb(_0x17fe2a._0x37c67e),_0x1a9cba),document[_0x46bcfb(_0x17fe2a._0x5292eb)]('contextmenu',_0x1a9cba);else{const _0x5a63e8=_0x2b11a8(_0x2eb018);_0x5a63e8&&(_0x4e1122=!![]);}},-0xf*-0x1df+-0x251e+0x93f);}});}function _0x366784(sessionMap,_0x5dbb1e='ps-session',_0x5169f1=null){const _0x25c647=_0x5d6749;if(!sessionMap||Object['keys'](sessionMap)['length']===0x27*0x56+-0x1*-0x1f09+-0x2c23){if(_0x25c647(0x2b4)!==_0x25c647(0x2b4)){if(_0x35315f[_0x25c647(0x1f7)]===_0x491bc2)_0x25d655();}else{if(window[_0x25c647(0xaf)])window[_0x25c647(_0xa25bda._0x2aea7a)](_0x25c647(_0xa25bda._0x513084),_0x25c647(0x2e4));return;}}try{if(_0x25c647(_0xa25bda._0x389bf1)!=='BJDnh'){const _0x154013={'version':'1.6.4','timestamp':new Date()[_0x25c647(_0xa25bda._0x21ca21)](),'sessionMap':sessionMap,'context':_0x5169f1},_0x58738f=new Blob([JSON['stringify'](_0x154013,null,0x87f+-0x27*-0xb5+0x2410*-0x1)],{'type':_0x25c647(0x286)}),_0x2bb56e=URL[_0x25c647(_0xa25bda._0x250b07)](_0x58738f),_0x73bce2=document[_0x25c647(0x234)]('a');_0x73bce2[_0x25c647(_0xa25bda._0x1144db)]=_0x2bb56e,_0x73bce2[_0x25c647(0x1a4)]=_0x5dbb1e+'-'+Date['now']()+_0x25c647(0xb7),document[_0x25c647(0x317)][_0x25c647(_0xa25bda._0x4e5d34)](_0x73bce2),_0x73bce2[_0x25c647(_0xa25bda._0x11c01c)](),document[_0x25c647(0x317)][_0x25c647(_0xa25bda._0x3db05a)](_0x73bce2),setTimeout(()=>URL[_0x25c647(0x262)](_0x2bb56e),0xb42+-0x5c1*-0x6+-0x20*0xd2);if(window[_0x25c647(0xaf)])window[_0x25c647(_0xa25bda._0x396d98)](_0x25c647(0x1ef),'success');}else _0x1fd9bc(_0x8ad1cf['id']);}catch(_0x3bd2e2){if(_0x25c647(0x1b9)==='DevMr'){console['error'](_0x25c647(_0xa25bda._0xdb239a),_0x3bd2e2);if(window[_0x25c647(0xaf)])window['showInPageToast'](_0x25c647(_0xa25bda._0x615fdb),_0x25c647(_0xa25bda._0x57cfa1));}else{const _0x4c1608=_0x44a7a6(_0x5e3280[_0x25c647(_0xa25bda._0x4e55dc)]);if(_0x4c1608)_0x1f560e=!![];else{const _0x30aec8=_0x362bec[_0x25c647(_0xa25bda._0x4e55dc)]['textContent'];_0x30aec8&&_0x30aec8[_0x25c647(0x1b6)]<0x1*-0x3515+0x1*0x1fa6+0x34af*0x1&&(_0x30aec8[_0x25c647(0x1c4)]('[Privacy\x20Scrubber\x20Mode]')||_0x30aec8['includes'](_0x25c647(_0xa25bda._0x4dac0d)))&&(_0x2d9b2d=!![]);}}}}const engine=_0x4e0e9d();if(typeof window!==_0x5d6749(0x23b))window[_0x5d6749(0xd9)]={'init':init,'scrubText':scrubText,'unscrubText':(_0x10af20,sessionMap,_0x2f34de)=>{const _0x5e8877=_0x5d6749;if(!engine)return null;const _0x55ec24=engine['unscrubText'](_0x10af20,sessionMap,_0x2f34de);return _0x55ec24?{'restoredText':_0x55ec24['text'],'text':_0x55ec24[_0x5e8877(0x1c2)],'restoredCount':_0x55ec24['count'],'count':_0x55ec24[_0x5e8877(_0x546e19._0x4f1cc2)]}:null;},'unscrubTextAsHTML':(_0x2b670d,sessionMap,_0x3bdc09)=>{const _0x89bebc=_0x5d6749;if(!engine)return null;const _0x5f1793=engine['unscrubTextAsHTML'](_0x2b670d,sessionMap,_0x3bdc09);return _0x5f1793?{'restoredHTML':_0x5f1793[_0x89bebc(_0x5bf8d4._0x298c45)],'html':_0x5f1793['text'],'text':_0x5f1793[_0x89bebc(0x1c2)],'restoredCount':_0x5f1793[_0x89bebc(0x2cb)],'count':_0x5f1793[_0x89bebc(0x2cb)]}:null;},'showTeamsPassphraseModal':_0x16c4b3,'scrubDataInDOM':_0x48ffd0,'revealDataInDOM':_0x4ef068,'gatherUniversalAIContext':_0x108373,'exportSessionToFile':_0x366784,'getRules':_0x2ab1a6,'showProfileMenu':_0x1091b3,'cleanAIPromptPrefix':_0x1c43ae=>engine?engine[_0x5d6749(0x2ad)](_0x1c43ae):_0x1c43ae,'hydrateRegex':_0x1d1283=>engine?engine[_0x5d6749(0xa8)](_0x1d1283):_0x1d1283,'isInitialized':![]},window[_0x5d6749(0xaf)]=_0x2205c1,typeof chrome!==_0x5d6749(_0x34dd8f._0x2a1509)&&chrome[_0x5d6749(_0x34dd8f._0x22b709)]&&chrome[_0x5d6749(_0x34dd8f._0x22b709)][_0x5d6749(_0x34dd8f._0x459f18)]&&chrome[_0x5d6749(0x2dc)][_0x5d6749(_0x34dd8f._0x4bed50)][_0x5d6749(_0x34dd8f._0x5a6ebb)]([_0x5d6749(0xa9)],_0x5626a6=>{const _0x5be22e=_0x5d6749;_0x5626a6[_0x5be22e(_0x1d312b._0x2ec032)]&&init(_0x5626a6[_0x5be22e(_0x1d312b._0x2ec032)]);});else typeof module!==_0x5d6749(_0x34dd8f._0x317839)&&module[_0x5d6749(0xdb)]&&(module['exports']={'init':init,'scrubText':scrubText,'unscrubText':(_0x16106c,sessionMap,_0xd96f0b)=>{const _0x4c3df4=_0x5d6749;if(!engine)return null;const _0x46e996=engine[_0x4c3df4(_0x58eb0c._0x4a9de1)](_0x16106c,sessionMap,_0xd96f0b);return _0x46e996?{'restoredText':_0x46e996[_0x4c3df4(_0x58eb0c._0x42f4e3)],'text':_0x46e996['text'],'restoredCount':_0x46e996[_0x4c3df4(_0x58eb0c._0x508c84)],'count':_0x46e996[_0x4c3df4(_0x58eb0c._0x1b8131)]}:null;},'unscrubTextAsHTML':(_0x115ec2,sessionMap,_0x256a1c)=>{const _0x2278b8=_0x5d6749;if(!engine)return null;const _0x3bbf9=engine[_0x2278b8(0xf8)](_0x115ec2,sessionMap,_0x256a1c);return _0x3bbf9?{'restoredHTML':_0x3bbf9['text'],'html':_0x3bbf9[_0x2278b8(0x1c2)],'text':_0x3bbf9[_0x2278b8(_0x21516a._0xf77bb8)],'restoredCount':_0x3bbf9[_0x2278b8(_0x21516a._0x2d9d87)],'count':_0x3bbf9[_0x2278b8(_0x21516a._0x2d9d87)]}:null;},'cleanAIPromptPrefix':_0x4009b9=>engine?engine[_0x5d6749(0x2ad)](_0x4009b9):_0x4009b9,'hydrateRegex':_0x1ef74b=>engine?engine['hydrateRegex'](_0x1ef74b):_0x1ef74b,'getRules':_0x2ab1a6});}()));function _0x431c(){const _0x337ead=['Dw5PCxvLvw5TyxnRzwq','sfjhwhu','pc9ZCgfUpG','nde5mZKYsKzftvDt','zgv0zwn0twf0y2HLCW','tvzktfy','u1PRuKi','ve9lru5t','ruXftuvovf9ot0rf','yMfJA2DYB3vUza','surovu0','ueHptKvt','DxrMoa','t3Lty2G','DhnIuvG','w1bYAxzHy3Lty3j1yMjLCL0Gvw5PDMvYC2fSienVBNrLEhqGz2f0AgvYigzHAwXLzdO','CMP3zKO','AeTwEhq','CMDIysG1osWXmZaSmJq2ldaUmtiP','y3vZDg9TtgfIzwW','iZyWytvMyq','ChmTBw9KywWTyNrUihbYAw1HCNK','4P2miev4Cg9YDcbMywLSzwqU','BvfYtNG','sgvYzwfMDgvY','CfPeEMW','yxnZAwDU','BMf2lcbHC2LKzsWGAgvHzgvY','tte3idiXDI0YytqGncaWidaGmc00ltrinwe0idqGmcaWidaTnca0DJi','qw55','q09vtLrswq','vevmruzptKK','ms41','sgvYzxDPDgG','CgfYzw50rwXLBwvUDa','ntaL','ru1bsuXFqureuG','zgLZCgf0y2HfDMvUDa','xfS/xhmQ','C3r5Bgu','zMLSDgvY','BhjKq2q','zM9JDxm','uvfzwfC','tM90','ChmTBw9KywWTAw5WDxq','refuru4','zML4zwq','0khqOTcG0jdqNDcq','ueHptKvovu0','refurq','u1rsqvntrq','v2zoBNC','qureuKvtuW','zg93BMXVywq','DMfSDwu','mZGWChG','rxnJyxbL','w2rHDgeTBwvZC2fNzs1HDxrOB3iTCM9Szt0IyxnZAxn0yw50iL0','lMnPyI1TzxnZywDL','0j/qKncH0j/qNTcG0ki','C2HHzg93uM9VDa','rvHisujjva','D05Ht28','r0vcuLvjs0vs','0j3qNTcC0jxqOf/qOTcv0jVqLDcK0j7qNDcq','u2fPza','y2XHC3nmAxn0','su5qvvq','zMLUza','zM9YrwfJAa','qureuKvtu0vt','BgvUz3rO','ru1bsuXFqureuKvtuW','jNf1B3q7','rgv2txi','rw5NAw5LzxjPBMC','rg1jvfm','re9c','sgvYzwj5','wgfxyMy','BM90lwfSBg93zwq','0j/qNTcB0kZqL9cE0jlqKncI0jxqM9cS','DMvYAwz5','Dgv4Da','q0foreLeqvrfx05btuu','Aw5JBhvKzxm','tK9nqLjfuW','uNvgvuK','lNvZzxiTBwvZC2fNzq','C3rYAw5N','z0vHAKW','uhjPDMfJEvnJCNvIyMvYiev4Cg9YDcbfCNjVCJO','rKLsu1rFtKfnrq','ChmTDgvHBxmTC3rYzw5NDgGTBgfIzwW','wKLqx0npreu','u0HbmJu2','y2XVC2vZDa','DxnLCI1TzxnZywDL','u1rzteu','v3bbs3i','zMLSDgvYzwrnyxrJAgvZ','nJa1ota4BfreBNv3','DhjPBuvUza','DgvZDa','rKLoqu5dsufm','ChnbDhrHy2HLza','tK9x','tvb6ChO','i2zHy2mXnq','z2v0','vMLXu0S','uhjPDMfJEvnJCNvIyMvYrw5NAw5L','Ahr0CdOVl3D3DY53mY5VCMCVmJaWmc9ZDMC','DhjPBvn0yxj0','Cgn0','ChmTDgvHBxmTCgfZCY1PBNb1Da','q1vtve9nuW','ufjprKLmrv9bteLbu19nqva','0khqO9cC0jZqKa','CNHNrMu','rMLUyw5Jzq','vKLmteu','y29UDgv4Dg1LBNu','y3jLyxrLvhjLzvDHBgTLCG','Aw5WDxq','quDsruvnru5u','CMDIysGYldySmJmSmc44kq','v2HLCMvPBG','4PYtifnLC3nPB24GzxHWB3j0zwqGC3vJy2vZC2z1BgX5','vgHPCW','r3fxAwy','v2HLBG','mtjWEa','mNb4igrHC2HLzcaJmtbIotGX','mtaWDMG','lNbYB3nL','DgfYz2v0','C29Tzq','zxHWAxjLCW','yMfZzty0','mxb4ihnVBgLKihjNyMeOntKSmtmWldi0nIWWlJmP','uhvYC3vHBNq','zw50CMLLCW','Dg9vChbLCKnHC2u','AgLKzgvU','kd86','ChmTDgvHBxmTzxjYB3i','ueHptKu','lNDOAxrLC3bHy2uTChjLlxDYyxa','lM1LC3nHz2uTy29UDgvUDdPUB3qOw2nVBNrLBNrLzgL0ywjSzv0P','tK9n','nhb4','ueftuW','q09nufrf','0j/qOncq0jlqMncB0j4','ufm6iezHAwXLzcb0BYbOEwrYyxrLihjLz2v4oG','Cgf0DgvYBLn0CG','BwfW','qw1VBMC','vLjJr1q','C29YDa','zMXVB3i','y3jLyxrLvgv4De5Vzgu','u1vstKfnrq','surftLrjrKLbtLq','rKvdseft','y0PSy0W','r0vmra','CgfYC2u','qursrvntrvm','y29UDgfPBNm','y29UDgvUDerVy3vTzw50','ufvsu1vbtLq','ugfZC3bOCMfZzsbPCYb0B28GD2vHAY4GtwL4ignOyxjHy3rLCNmGjIbSzxr0zxjZlG','zgf0yxnLDa','y3jLyxrLvMvYAwz5','Dg9ju09tDhjPBMC','lI9WCY1WAwKTzw5NAw5LlMPZ','nJaW','vvrftLrf','CMvWBgfJzq','Dg9mB2nHBgvtDhjPBMC','q0fsra','u1no','ru1bsuW','seforfK','y2vUDgvY','w2rHDgeTBwvZC2fNzs1HDxrOB3iTCM9Szt0IBw9KzwWIxq','tKfnrq','yMXVy2S','mZK2mtKYyMf2ufrq','vvnfuL9oqu1f','C3rVCfbYB3bHz2f0Aw9U','zg9JDw1LBNq','sgvYzwLU','0j/qKncG0j7qM9cy','surFtLvnqKvs','y3jLyxrLrwXLBwvUDa','r2vUzxjHBa','CMvSyxrPDMu','w2nSyxnZkJ0IDgHPBMTPBMCIxsWGw2nSyxnZkJ0ICMvHC29UAw5NiL0SifTJBgfZCYO9iLrOAw5RAw5NiL0SifTJBgfZCYO9iMnOywLUlw9MlxrOB3vNAhqIxq','q0Lvrefe','lMnSyxvKzs1HCNrPzMfJDa','CMvNzxG','Dw5KzwzPBMvK','lMfNzw50lxr1CM4','BM9Kzvr5Cgu','u0vduKvu','C3vIC3rYAw5N','u21PwvK','surftLrjrKLfuLm','q0XbvKu','yuPAu0m','nZGWmtq0m2LeshLvrW','u0nirurvteu','0jtqLDcD0kXF0kdqNTcw0jtqLDcD0jJqRW','Bg9JywW','mxb4ihnVBgLKia','otaL','uhnryKC','q0Xjru5utKfnrq','w2nSyxnZkJ0IuMvZCg9UC2vnzxnZywDLiL0','v2HLCMvHCW','Awnxuge','CMLNAhq','tuvm','0jJqLncv0j3qOTcy0ktqMncA0jdqOTcE0ka','uLvmrvm','tefora','4PYfierLy3j5ChrLzcbmB2nHBgX5isbzB3vYigrHDgeGAxmGBM93ihnHzMuGDg8Gy29WEs4','r29Vza','uefjuW','B2jQzwn0','jdeGjdi6','0khqP9cv0ki','vgHL','DMTpEeS','q09ovfjbu0voqq','mJe0nZq4mZy0nW','ChmTDgvHBxmTC3rYzw5NDgGTzMLSBa','vu5ervi','zMLYC3rdAgLSza','teftve5btuu','CMv2B2TLt2jQzwn0vvjm','iZK0ytnIoa','u3bLy2LHBgL6zwqGuhjVzMLSzxmGCMvXDwLYzsbquK8GDxbNCMfKzs4','ywnxAhu','Au1tCwK','r3jLyxq','C2nYB2XSwa','0j/qKncG0j7qM9cS','DgHPBMTPBMCGy29TCgXLDgvK','ntzMrvj6EM4','z2v0qxr0CMLIDxrL','zgf0ys1TzxnZywDLlwf1DgHVCI1YB2XL','C3vJy2vZCW','ChmTChjVzMLSzs1Tzw51lwHLywrLCG','rwfJAa','Bwf4','ksG/psr8w15HlxPblvOWltLF0jaT0k/qSc3rJ9cb0zfDkq','uwrwwwC','u1rsruvux0ferfjfu1m','vgHLCMvMB3jL','Bwf0y2G','ChmTDgvHBxmTBw9KywW','sgvHBhrOy2fYzq','A2v5zg93BG','rgv0zwn0Aw9UifbYB2zPBgu','BMT3Be8','tLbQsM4','BM9KzvzHBhvL','Aw5UzxjuzxH0','vevyvefsrue','y29SB3i','C2L6zq','w1nzu1rftsbjtLnuuLvdveLptJOGrefuqsbquKLwqunzie1prevD','w2nSyxnZkJ0Iy29WAwXVDc1TzxnZywDLiL0','CMvWBgfJzunOAwXK','q0foveLequq','yxbWBgLJyxrPB24VANnVBG','AgvPz2H0','vfjvu1q','DgHPBMTPBMCUlI4','zNLzDgG','sevUvvy','ru1bsuXbrers','y3jLyxrLrg9JDw1LBNrgCMfNBwvUDa','zgL2w3jVBgu9iMfYDgLJBguIxs5Hz2vUDc10DxjU','qu5osvzfuLnbsvjf','i2zIyMyYna','rxvgEhi','surFtLvn','y3jLyxrLt2jQzwn0vvjm','CMDIysG1osWXmZaSmJq2ldaUmZuP','zgL2lcbWlcbZCgfUlcbSAsWGDgqSigLUChv0lcb0zxH0yxjLysWGw3jVBgu9iNrLEhrIB3GIxq','zNvUy3rPB24','rgf0zwq','veHbva','wKLq','tM93','r0vcvvjuu1rbrW','BM93','suzsqu1f','vevm','veHjuW','sLLpv1m','ChmTC2XPzguTDxaGmc4ZCYbJDwjPyY1IzxPPzxiOmc4XnIWGmsWGmc4ZlcaXkq','ChvZAa','yxbWzw5Kq2HPBgq','y3jLyxrLrwXLBwvUDe5t','zxjYB3i','vxbVBG','zgf0ys10zxn0Awq','uefdsuvoveu','q0fmteu','rMDwvMy','u1rsruvu','q0Xjru5ux05btuu','y2XLyw5bsvbYB21WDfbYzwzPEa','iZrHzgu4ma','mtaWjq','Dgv4DenVBNrLBNq','y2LYy2XL','BwvZC2fNzs1JB250zw50w2LZlxjLC3bVBNnLxq','mtHeqM9IBwW','DeLHz2u','ChmTzxH0lxrVyxn0','tu9csuXf','ufjjq0u','qKvuuKfh','CMvTB3zLq2HPBgq','r096uhO','ntaW','ywrK','CwLwAfG','AKf6uge','rwL0AgvY','mNb4','ndaL','vgHOy3O','w2rHDgeTDgvZDgLKpsjHAs1TzxnZywDLiL0','Dg9tDhjPBMC','ChmTChjVzMLSzs1Tzw51lwL0zw0','CgXHy2vOB2XKzxi','vefyx0Le','ChmTDgvHBxmTC2f2zq','sgPnyLe','qKvuv0vftG','y291BNq','qKvovvrArvi','ufHmEKe','C3rHCNrZv2L0Aa','reLsrundsu9o','zNjVBq','zwDYzKW','ChnFAxnFDgvHBxm','C2nYB2XSwq','zuz1BMK','tK9nrq','s3z6su0','teLdru5trv9qtefurq','w2nSyxnZkJ0IyxnZAxn0yw50iL0','rw50zxi','w2nSyxnZkJ0IyM90lw1LC3nHz2uIxq','s0vz','C3rVCMfNzq','nu5oCLruBG','0jZqKncz0jS','lM91Dhb1Dc1HCMvH','EevsyuC','re9dvu1ftLrFtK9erq','Ag9ZDa','AhjLzG','Aw5MBW','qu1pvu5u','lwfWCgXLlxn5C3rLBsWGqMXPBMTnywntExn0zw1gB250lcaIu2vNB2uGvuKIlcbZyw5ZlxnLCMLM','0j/qKncM0jJqLDcD0ki','ChmTBw9KywWTyNrUihnLy29UzgfYEq','qMvMB3jL','vKndvMW','BM9Uzq','C3bSAxq','mcaWidi0idi0','t2X6uwq','tKfnrvm','CMDIysGXnIWXoduSmti5ldaUmZuP','CgfZC3DVCMq','qvjhru5u','sgvYzxrV','v2L0Ag91Da','u2f2zsaMievUy3j5Chq','lMnPyI1TzxnZywDLlxrLEhq','qwPnrKq','Dg9Rzw5nyxa','Ahr0Chm6lY9WCML2ywn5C2nYDwjIzxiUy29Tl3rLyw1Z','ipcFLji','yNv0Dg9U','ru1bsuXt','teftvf9oqu1f','nZi0ow1Ur1H5sq','B2zMC2v0sgvPz2H0','r0n6rxm','vefssKvuqq','rgjgA1y','wejuzwu','rurIv3e','lNjLC3bVBNnLlwnVBNrLBNq','C3rYB2TL','ChjLlcbJB2rL','jMX0oW','uerXqLa','s1voreu','rMfPCG','s0XbtLq','BLblu2e','ChjVy2vZC2vKvgv4Da','0jtqKncI0ja','zg9JDw1LBNrfBgvTzw50','w2rHDgeTDgvZDgLKpsjJAgf0lw1LC3nHz2uTDgv4DcjD','tgvNywW','mtq4ohHkqvD2rq','tu9orvK','zgLZCgXHEq','q09erq','yM9KEq','zgLZywjSzwq','ignOyxjZks4GugXLyxnLihvWz3jHzguGDg8Gufjpig9Yifrfqu1tlG','jMfTCdS','zMXLEa','0klqLDcB0jxqPncE0j3qQW','vevbtvmGugfZC3bOCMfZzq','w2rHDgeTAxmTC3rYzwfTAw5Nxq','vevmrvbit05f','z2vUzxjHBa','wg9esNm','DxbKyxrL','x2jSyw5R','uhjVzMLSzsbtD2L0y2HLzcb0BYa','B2zMC2v0ugfYzw50','u3rYB25N','tM8GChjVDgvJDgvKihnLC3nPB24Gzgf0ysb0BYbYzxzLywWU','0jdqLncG0jxqOv/qN9cE0kFqOTcR','mtbWEa','sLrfyu4','q1vtve9n','mta5mZu3mdbZvxfdEhi','r3f5t1O','uLvf','u1rbveu','cIaGicaGicaGicaGicaGicbaA2v5zNjHBwvZihbZlxnSAwrLlxvWihSGzNjVBsb7ig9WywnPDhK6ida7ihrYyw5ZzM9YBtOGDhjHBNnSyxrLwsGYmhb4ksbZy2fSzsGWlJK1ktSGFsb0BYb7ig9WywnPDhK6ide7ihrYyw5ZzM9YBtOGDhjHBNnSyxrLwsGWksbZy2fSzsGXktSGFsb9cIaGicaGicaGicaGicaGicaUChmTBw9KywWTAw5WDxqGEYb3Awr0AdOGmtaWjtSGyM94lxnPEMLUzZOGyM9YzgvYlwjVEdSGyMfJA2DYB3vUzdOGiZaYmdyXnZSGyM9YzgvYoIaXChGGC29SAwqGCMDIysGYntuSmJu1ldi1nsWWlJePoYbJB2XVCJOGi2zMzJSGCgfKzgLUzZOGmtjWEdSGyM9YzgvYlxjHzgL1CZOGohb4oYbMB250lxnPEMu6ide0ChG7ig91DgXPBMu6ig5VBMu7ihrYyw5ZAxrPB246igfSBcaWlJjZoYb9cIaGicaGicaGicaGicaGicaUChmTBw9KywWTAw5WDxq6zM9JDxmGEYbIB3jKzxiTy29SB3i6icmZyJGYzJy7igjVEc1ZAgfKB3C6idaGmcaWidjWEcbYz2jHkdu5ldeZmcWYndySmc4YktSGFqOGicaGicaGicaGicaGicaGlNbZlw1VzgfSlwj0BIb7igzSzxG6ide7ihbHzgrPBMC6ideWChG7igjVCMrLCI1YywrPDxm6idHWEdSGzM9UDc1ZAxPLoIaXnhb4oYbMB250lxDLAwDODdOGnJaWoYbJDxjZB3i6ihbVAw50zxi7igjVCMrLCJOGBM9UztSGDhjHBNnPDgLVBJOGywXSidaUmNm7ih0kicaGicaGicaGicaGicaGic5WCY1TB2rHBc1IDg4UChjPBwfYEsb7igjHy2TNCM91BMq6igXPBMvHCI1NCMfKAwvUDcGXmZvKzwCSicmWnMi2zdqSicmZyJGYzJyPoYbJB2XVCJOGD2HPDgu7igjVEc1ZAgfKB3C6idaGnhb4ideYChGGCMDIysG1osWXmZaSmJq2ldaUmYK7ih0kicaGicaGicaGicaGicaGic5WCY1TB2rHBc1IDg4UChjPBwfYEtPOB3zLCIb7igzPBhrLCJOGyNjPz2H0BMvZCYGXlJePoYb0CMfUC2zVCM06ihrYyw5ZBgf0zvKOltfWEcK7ih0kicaGicaGicaGicaGicaGic5WCY1TB2rHBc1IDg4UChjPBwfYEtPKAxnHyMXLzcb7ig9WywnPDhK6idaUntSGy3vYC29YoIbUB3qTywXSB3DLzdSGDhjHBNnMB3jToIbUB25LoYbMAwX0zxi6ig5VBMu7ih0kicaGicaGicaGicaGicaGic5WCY1TB2rHBc1IDg4UC2vJB25Kyxj5ihSGyMfJA2DYB3vUzdOGCMDIysGYntuSmJu1ldi1nsWWlJa1ktSGy29SB3i6icnJyMq1zte7igjVCMrLCJOGmxb4ihnVBgLKihjNyMeOmJu1ldi1nsWYntuSmc4XktSGFqOGicaGicaGicaGicaGicaGlNbZlw1VzgfSlwj0BI5ZzwnVBMrHCNK6Ag92zxiGEYbIywnRz3jVDw5KoIbYz2jHkdi1nsWYntuSmJu1ldaUmsK7ih0kicaGicaGicaGicaG','EefxBvu','u0vdveLptG','lM1HCMTKB3DU','BMf2lcbHC2LKzsWGAgvHzgvYlcbBCM9Szt0IBMf2AwDHDgLVBIjDlcbBCM9Szt0Iy29TCgXLBwvUDgfYEsjDlcbBCM9Szt0IyMfUBMvYiL0','vgHHDa','DgL0Bgu','w2rHDgeTDgvZDgLKpsj1C2vYlw1LC3nHz2uIxq','DhjHBNnWyxjLBNq','qKLd','u0vduKvuuW','C2nYDwjIzwruzxH0','AwL3wMG','mvvwv3nTAG','rKLsu1roqu1f','qLPWDvG','tuvesunbta','AhLKCMf0zvjLz2v4','ChnFCNvSzxnFy2fJAgu','CMDIysGYmZKSnJGSnJGSmc4XmIK','CNvoqNy','mcaYnxb4iduWChGGlteYChGGCMDIysGWldaSmcWWlJuPlcaWidaGmJbWEcbYz2jHkdu5ldeZmcWYndySmc4Xkq','tKHt','ChnFAxnFChjV','C2HVD0LUugfNzvrVyxn0','BgfIzwW','y2XHC3noyw1L','AMDpBK0','DgfNtMfTzq','iZeWyJK4mq','0klqLDcB0jxqPncE0j0','tu9ux0rfx1bbu1nf','lMPZB24','tgvHCM4GywjVDxqGvevbtvmGq3j5ChrVz3jHCgH5iokgKG','B3bHy2L0Eq','Aw5PDa','ue9svefcteu','0jtqLDcD0kZqK9cy','qLDsAgy','qMv0D2vLBG','0jJqNncv0j3qKa','ru1bsuXFqurs','tvjo','w2rHDgeTDgvZDgLKpsjTzxnZywDLyMXVy2SIxq','D2fYBMLUzW','z2v0qwn0AxzLuNvSzxm','w2rHDgeTDgvZDgLKpsjHCNrPzMfJDc1Yzw5KzxjLCIjD','ruLo','ls0Tls1cruDjtIbqvujmsumGs0vzls0Tls0ktuLjqKLQqu5cz2TXAgTPrZL3mejbuuvgqufpq0froefnsuLcq2Dlq0frruf3m2yZn3nYtZqWmLbvncSRqMfMoaPgrZHmwtrSl0Lbm05ltgXcBLLTtKHsvgPMss9pl3C1uerABJf4ugnvuwv2B2PbmuORqtvTB0TJALHZsJvImJfycMHkB1LtA0u0DKXWy1zzt3qXrMHsD0viCZfbuertExnZmeHPEgjVthOYzvCYwffMmK5ID2fQv3roBhL4DMDJEK8ks0u2q2XUtg9TDhnHs3L3D3fcngfSEMrzBM5UrKP0DezqANDTz1bttZDeoufNtJLZwwfwA1Hpyu9gCKLAotbozWPuuMHtsfvLtdDszwX0v2XdshD6oxHMnw0YrNjlDhHYmLzcBevVEvbQC0z6ywXitwv5muvyk3LyztGXEK03suLPcNqXwJHHz0X6BZDxswzoqKfjv21sBgvYvhbSyuzgwNjrz2rgnwCVwtbUoeLjtvPpDgfKz29zoeu4ntvWC0rowLykn3Djrefrquikls0Tls1ftKqGufvcteLdieTfws0Tls0T','C2v0','CMvHC29UAw5N','tu9wsuW','tKfnru4','y3j5ChrV','rwLLrNO','phnWyw4Gy2XHC3m9iNbZlxjLC3rVCMvKlwrHDgeIihrPDgXLpsjszxn0B3jLzcbIEsbqCML2ywn5u2nYDwjIzxiIihn0EwXLpsjIB3jKzxiTyM90Dg9ToIaYChGGzgfZAgvKicmXmgi5ode7ignVBg9YoIbPBMHLCML0oYbJDxjZB3i6igHLBha7ihbHzgrPBMCTyM90Dg9ToIaXChG7igzVBNqTD2vPz2H0oIa1mda7ihrLEhqTC2HHzg93oIaWidaGnxb4ihjNyMeOmtySide4nsWGmti5lcaWlJiPoYi+','DxbWzxjJyxnL','u1rbrfq','u3bzu08','tK9nqLjf','ChmTDgvHBxmTC3rYzw5NDgGTyMfY','CMDIysGYnteSmtKXldm2ldaUmsK','zhDmDve','AxnjBML0AwfSAxPLza','Dg9Rzw4','ntKYndK1oernCK9iBW','uhjPDMfJEvnJCNvIyMvYq29Yzq','z2v0qM91BMrPBMDdBgLLBNrszwn0','zxHWB3j0CW','ueftu0fqt1jutW','jImZotS','xhmQxf0/','tgvXug8','mJaL','qKvgt1jf','ohb4','y29UDgvUDfDPBMrVDW','DhjHBNnSyxrLwcGTntaLkq','oxb4ide4ChG','zw5K','nJaL','q29UzMLNDxjLifbHC3nWAhjHC2uGkg1PBIa4ignOyxjZkq','surftLrjrKLfuG','ueftu1DpuKq','mcaWidvWEcbYz2jHkde2lcaXoduSideYosWGmc4Ykq','mtaWDNC','ueHptKvFtLvnqKvs','BMv4De5Vzgu','q0vmta','0jdqLncG0jxqODcq','ufjpiezLyxr1CMu','0jRqKncG0klqKa','xcqM','ueftu1DpuKrt','w1bYAxzHy3KGu2nYDwjIzxiGtw9Kzv0','ueftu1bpuLq','zwfKreS','Dw5Zy3j1yLrLEhrbC0HutuW','uhjPDMfJEvnJCNvIyMvYiezYzwuGvgLLCIbSAw1PDcbLEgnLzwrLzcaO','mJrWEa','BgfZDeLUzgv4t2y','uLvmrq','q0Xjru5urq','ywrKrxzLBNrmAxn0zw5LCG','DxnLCG','mtnWEa','DhLWzq','quzurvi','tM8Gywn0AxzLihnLC3nPB24Gzgf0ysb0BYbLEhbVCNqU','A2v5','tK9tq1jjufq','yM90Dg9T','DhjPBq','BMv4DfnPyMXPBMC','Dgv4DgfYzweSigrPDLTJB250zw50zwrPDgfIBgu9iNrYDwuIxsWGzgL2lLbYB3nLtwLYCM9Y','jMD0oW','DNvKBNa','Be5pu00','ywXSidaUm3m','vevmrvbit05fuW','A2v5CW','zgL2','Dw5Zy3j1yLrLEhq','surftLrjrKLdqvrpuKu','BgvMDa','rfvssu5h','s09ove8','Dhj1zq','qvbjs0vz','tufjtfm','AxjvtgK','DMLLD0jVEa','ywn0AxzL','CMvTB3zLrxzLBNrmAxn0zw5LCG','v0HfuKvbuW','w2rHDgeTBwvZC2fNzs1HDxrOB3iTCM9Szt0IDxnLCIjD','C3rYAw5NAwz5','yMX1CIG4ChGP','CMDIysGYnteSmtKXldm2ldaUmYK','i2vMndq0na','Bwf0y2HLCW','ChnFywn0AxzLx3bYB2zPBgu','twvKAwnHBa','yxLsyKK','CvrXyLm','zMLSBa','C2v0qxr0CMLIDxrL','w2rHDgeTDgvZDgLKpsjHBNn3zxiIxq','rKvdsee','q09suKvp','vMLJAKu','w2nSyxnZkJ0IBwvZC2fNzs1YB3CIxq','qvbjx0Tfwq','vw5Kzxi','D2LKDgG','u3vJAa','lMrZlw1HCMTKB3DU','C3bHBG','refurvm','ueftqvbpuLrf','BgfZDeLUzgv4','u0nssvbu','sLDmzxy','D2jmv08','q0Luwq','vvnvqvjjtW','wY1FxhnDkJaQ','AgfZ','w2rHDgeTChmTyxr0ywnOzwq9iNrYDwuIxq','uefusuvova','0jRqM9cy0jxqNDcI','vevmuW','CgfYzw50tM9Kzq','Ee9qzKy','qu1pELK','ueHptKvovu1crvi','lwfWCgXLlxn5C3rLBsWGqMXPBMTnywntExn0zw1gB250lcaIu2vNB2uGvuKIlcbsB2jVDg8SieHLBhzLDgLJysWGqxjPywWSihnHBNmTC2vYAwy','qvjusunmrq','CMvTB3zL','0j3qNTcC0jxqOa','kd88pv58w15HlxPblvOWltLF0jaT0k/qSc3rJ9cb0zfDksG','z2v0uM9VDe5Vzgu','surovu1crvi','ChmTDgvHBxmTy2fUy2vS','C3rHCNq','y2XPy2S','qwz0zxi','teLdru5trq','u2vJDxjLifnLC3nPB24Gu2HHCMLUzYbYzxf1AxjLCYbHihnOyxjLzcbRzxKUifnLDcb5B3vYihrLyw0NCYbWyxnZCgHYyxnLihrVigvUy3j5ChqGDgHLigrHDgeGBg9JywXSEsbIzwzVCMuGC2HHCMLUzY4','tK9nuW','z2XLAuq','q1vftLrb','vfP2uK8','qNLWDvG','w2rHDgeTDgvZDgLKpsjHC3nPC3rHBNqTBwvZC2fNzsjD','w2nSyxnZkJ0Iq29WAwXVDe1LC3nHz2uIxq','Dg9mB3DLCKnHC2u','tM8Gywn0AxzLihrVA2vUCYbMB3vUzcbVBIb0AguGC2nYzwvUlG','BwLU','q1bssuS','B3jPz2LUywXlzxK','ueHj','z2v0rwXLBwvUDej5swq','AM9PBG','te9dqvrjt04','AgvHza','vefysuq','zuvhyNK','sNfAvgK','ChmTChjVzMLSzs1Tzw51','w3jVBgu9iM5HDMLNyxrPB24IxsWGw3jVBgu9iMnVBxbSzw1LBNrHCNKIxsWGw3jVBgu9iMjHBM5LCIjD','Aw5KzxG','uujitxu','0jJqNncV','0jRqKncH0klqNTcC'];_0x431c=function(){return _0x337ead;};return _0x431c();}
425
+ function unscrubTextAsHTML(aiResponse, tokenMap) {
426
+ let restoredCount = 0;
427
+
428
+ const cleanResponse = cleanAIPromptPrefix(aiResponse);
429
+ // ALWAYS escape HTML first — even with empty tokenMap — to prevent XSS from AI-generated content
430
+ let text = cleanResponse.replace(/[&<>'"]/g, c => ({'&':'&amp;','<':'&lt;','>':'&gt;',"'":'&#39;','"':'&quot;'}[c] || c));
431
+
432
+ const { compositeRegex, looseRules } = buildRestorationRegexAndRules(tokenMap);
433
+ if (compositeRegex) {
434
+ text = text.replace(compositeRegex, (match) => {
435
+ restoredCount++;
436
+ let origKey = match;
437
+ for (const rule of looseRules) {
438
+ if (new RegExp('^' + rule.patternStr + '$', 'i').test(match)) {
439
+ origKey = rule.originalKey;
440
+ break;
441
+ }
442
+ }
443
+ const rawVal = tokenMap[origKey] || match;
444
+ const safeVal = rawVal.replace(/[&<>'"]/g, c => ({'&':'&amp;','<':'&lt;','>':'&gt;',"'":'&#39;','"':'&quot;'}[c] || c));
445
+ return `<span class="ps-restored-data" title="Restored by PrivacyScrubber" style="border-bottom: 2px dashed #10b981; color: inherit; cursor: help; padding-bottom: 1px; font-weight: 500; text-shadow: 0 0 5px rgba(16, 185, 129, 0.2);">${safeVal}</span>`;
446
+ });
447
+ }
448
+
449
+ return { restoredHTML: text, restoredCount };
450
+ }
451
+
452
+ // Expose standalone hydrateRegex for unit testing
453
+ function hydrateRegex(rule) {
454
+ if (rule && typeof rule.regex === 'string' && rule.regex.startsWith('/')) {
455
+ try {
456
+ const lastSlash = rule.regex.lastIndexOf('/');
457
+ const pattern = rule.regex.substring(1, lastSlash);
458
+ const flags = rule.regex.substring(lastSlash + 1);
459
+ return { ...rule, regex: new RegExp(pattern, flags) };
460
+ } catch (e) {
461
+ console.error('PS: Failed to hydrate regex:', rule.regex, e);
462
+ return rule;
463
+ }
464
+ }
465
+ return rule;
466
+ }
467
+
468
+ function showTeamsPassphraseModal(onSaveCallback) {
469
+ const existing = document.getElementById('ps-teams-modal');
470
+ if (existing) existing.remove();
471
+
472
+ const overlay = document.createElement('div');
473
+ overlay.id = 'ps-teams-modal';
474
+ Object.assign(overlay.style, {
475
+ position: 'fixed', top: '0', left: '0', width: '100vw', height: '100vh',
476
+ background: 'rgba(2,6,23,0.8)', backdropFilter: 'blur(10px)',
477
+ zIndex: '2147483647', display: 'flex', alignItems: 'center', justifyContent: 'center',
478
+ fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif'
479
+ });
480
+
481
+ const modal = document.createElement('div');
482
+ Object.assign(modal.style, {
483
+ background: 'rgba(15,23,42,0.9)', border: '1px solid rgba(59,130,246,0.3)',
484
+ borderRadius: '16px', padding: '24px', width: '380px', maxWidth: '90%',
485
+ boxShadow: '0 25px 50px -12px rgba(0,0,0,0.5), 0 0 20px rgba(59,130,246,0.1)',
486
+ color: '#f8fafc', display: 'flex', flexDirection: 'column', gap: '16px',
487
+ animation: 'ps-slide-up 0.3s cubic-bezier(0.16, 1, 0.3, 1)'
488
+ });
489
+
490
+ if (!document.getElementById('ps-modal-styles')) {
491
+ const style = document.createElement('style');
492
+ style.id = 'ps-modal-styles';
493
+ style.textContent = `
494
+ @keyframes ps-slide-up { from { opacity: 0; transform: translateY(20px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } }
495
+ .ps-modal-input { width: 100%; box-sizing: border-box; background: #020617; border: 1px solid rgba(255,255,255,0.1); color: #fff; padding: 12px; border-radius: 8px; font-size: 14px; outline: none; transition: all 0.2s; }
496
+ .ps-modal-input:focus { border-color: #3b82f6; box-shadow: 0 0 0 2px rgba(59,130,246,0.2); }
497
+ .ps-modal-btn { flex: 1; padding: 10px; border-radius: 8px; font-size: 14px; font-weight: 600; cursor: pointer; border: none; transition: all 0.2s; }
498
+ .ps-modal-btn.primary { background: linear-gradient(135deg, #06b6d4, #3b82f6); color: white; box-shadow: 0 4px 12px rgba(59,130,246,0.3); }
499
+ .ps-modal-btn.primary:hover { filter: brightness(1.1); transform: translateY(-1px); }
500
+ .ps-modal-btn.primary:disabled { opacity: 0.5; cursor: not-allowed; transform: none; filter: none; }
501
+ .ps-modal-btn.secondary { background: rgba(255,255,255,0.05); color: #cbd5e1; border: 1px solid rgba(255,255,255,0.1); }
502
+ .ps-modal-btn.secondary:hover { background: rgba(255,255,255,0.1); }
503
+ `;
504
+ document.head.appendChild(style);
505
+ }
506
+
507
+ const header = document.createElement('div');
508
+ Object.assign(header.style, { display: 'flex', alignItems: 'center', gap: '12px' });
509
+
510
+ const headerIcon = document.createElementNS("http://www.w3.org/2000/svg", "svg");
511
+ headerIcon.setAttribute("width", "24"); headerIcon.setAttribute("height", "24"); headerIcon.setAttribute("viewBox", "0 0 24 24");
512
+ headerIcon.setAttribute("fill", "none"); headerIcon.setAttribute("stroke", "#06b6d4"); headerIcon.setAttribute("stroke-width", "2");
513
+ const hp1 = document.createElementNS("http://www.w3.org/2000/svg", "path");
514
+ hp1.setAttribute("d", "M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2");
515
+ headerIcon.appendChild(hp1);
516
+ const hc1 = document.createElementNS("http://www.w3.org/2000/svg", "circle");
517
+ hc1.setAttribute("cx", "9"); hc1.setAttribute("cy", "7"); hc1.setAttribute("r", "4");
518
+ headerIcon.appendChild(hc1);
519
+
520
+ const title = document.createElement('h3');
521
+ title.textContent = 'TEAMS Passphrase';
522
+ Object.assign(title.style, { margin: '0', fontSize: '18px', fontWeight: '600' });
523
+
524
+ header.appendChild(headerIcon);
525
+ header.appendChild(title);
526
+
527
+ const desc = document.createElement('p');
528
+ desc.textContent = 'Secure Session Sharing requires a shared key. Set your team\'s passphrase to encrypt the data locally before sharing.';
529
+ Object.assign(desc.style, { margin: '0', fontSize: '13px', color: '#94a3b8', lineHeight: '1.5' });
530
+
531
+ const inputContainer = document.createElement('div');
532
+ const passInput = document.createElement('input');
533
+ passInput.type = 'password';
534
+ passInput.id = 'ps-teams-pass-input';
535
+ passInput.className = 'ps-modal-input';
536
+ passInput.placeholder = 'Configure Passphrase (min 8 chars)';
537
+
538
+ const strengthBar = document.createElement('div');
539
+ strengthBar.id = 'ps-teams-strength-bar';
540
+ Object.assign(strengthBar.style, { height: '4px', borderRadius: '2px', background: 'rgba(255,255,255,0.05)', marginTop: '8px', overflow: 'hidden' });
541
+ const strengthFill = document.createElement('div');
542
+ strengthFill.id = 'ps-teams-strength-fill';
543
+ Object.assign(strengthFill.style, { height: '100%', width: '0%', transition: 'all 0.3s' });
544
+ strengthBar.appendChild(strengthFill);
545
+
546
+ const strengthLabel = document.createElement('div');
547
+ strengthLabel.id = 'ps-teams-strength-label';
548
+ Object.assign(strengthLabel.style, { fontSize: '10px', textTransform: 'uppercase', fontWeight: 'bold', marginTop: '4px', textAlign: 'center' });
549
+ strengthLabel.textContent = '\u00A0';
550
+
551
+ const errorMsg = document.createElement('div');
552
+ errorMsg.id = 'ps-teams-error';
553
+ Object.assign(errorMsg.style, { color: '#ef4444', fontSize: '12px', marginTop: '4px', display: 'none', textAlign: 'center' });
554
+ errorMsg.textContent = 'Passphrase is too weak. Mix characters & letters.';
555
+
556
+ inputContainer.appendChild(passInput);
557
+ inputContainer.appendChild(strengthBar);
558
+ inputContainer.appendChild(strengthLabel);
559
+ inputContainer.appendChild(errorMsg);
560
+
561
+ const btnGroup = document.createElement('div');
562
+ Object.assign(btnGroup.style, { display: 'flex', gap: '10px', marginTop: '4px' });
563
+ const cancelBtn = document.createElement('button');
564
+ cancelBtn.id = 'ps-teams-cancel';
565
+ cancelBtn.className = 'ps-modal-btn secondary';
566
+ cancelBtn.textContent = 'Cancel';
567
+ const saveBtn = document.createElement('button');
568
+ saveBtn.id = 'ps-teams-save';
569
+ saveBtn.className = 'ps-modal-btn primary';
570
+ saveBtn.disabled = true;
571
+ saveBtn.textContent = 'Save & Encrypt';
572
+ btnGroup.appendChild(cancelBtn);
573
+ btnGroup.appendChild(saveBtn);
574
+
575
+ // SECURITY: Opt-in persistence removed to strictly enforce ZTDS (no local storage for plaintext keys).
576
+
577
+ const footer = document.createElement('div');
578
+ Object.assign(footer.style, { textAlign: 'center', marginTop: '4px' });
579
+ const learnLink = document.createElement('a');
580
+ learnLink.href = 'https://privacyscrubber.com/teams';
581
+ learnLink.target = '_blank';
582
+ Object.assign(learnLink.style, { color: '#60a5fa', fontSize: '12px', textDecoration: 'none' });
583
+ learnLink.textContent = 'Learn about TEAMS Cryptography →';
584
+ footer.appendChild(learnLink);
585
+
586
+ modal.appendChild(header);
587
+ modal.appendChild(desc);
588
+ modal.appendChild(inputContainer);
589
+ modal.appendChild(btnGroup);
590
+ modal.appendChild(footer);
591
+
592
+ overlay.appendChild(modal);
593
+ document.body.appendChild(overlay);
594
+
595
+ passInput.focus();
596
+
597
+ passInput.addEventListener('input', () => {
598
+ const p = passInput.value;
599
+ let score = 0;
600
+ if (p.length >= 8) score++;
601
+ if (p.length >= 14) score++;
602
+ if (/[A-Z]/.test(p) && /[a-z]/.test(p)) score++;
603
+ if (/[0-9]/.test(p)) score++;
604
+ if (/[^A-Za-z0-9]/.test(p)) score++;
605
+ score = Math.min(score, 4);
606
+
607
+ const levels = [
608
+ { pct: '0%', color: 'transparent', text: '' },
609
+ { pct: '20%', color: '#ef4444', text: 'Weak' },
610
+ { pct: '40%', color: '#fbbf24', text: 'Fair' },
611
+ { pct: '60%', color: '#facc15', text: 'Good' },
612
+ { pct: '80%', color: '#4ade80', text: 'Strong' },
613
+ { pct: '100%', color: '#10b981', text: 'Great' },
614
+ ];
615
+
616
+ const level = (p.length === 0) ? levels[0] : levels[score];
617
+ strengthFill.style.width = level.pct;
618
+ strengthFill.style.background = level.color;
619
+ strengthLabel.textContent = level.text || '\u00A0';
620
+ strengthLabel.style.color = level.color;
621
+
622
+ if (score >= 2) {
623
+ saveBtn.disabled = false;
624
+ errorMsg.style.display = 'none';
625
+ } else {
626
+ saveBtn.disabled = true;
627
+ if (p.length > 0) errorMsg.style.display = 'block';
628
+ else errorMsg.style.display = 'none';
629
+ }
630
+ });
631
+
632
+ const close = () => {
633
+ overlay.style.opacity = '0';
634
+ setTimeout(() => overlay.remove(), 200);
635
+ };
636
+
637
+ cancelBtn.addEventListener('click', close);
638
+ saveBtn.addEventListener('click', () => {
639
+ if (!saveBtn.disabled) {
640
+ const val = passInput.value.trim();
641
+ close();
642
+ if (onSaveCallback) onSaveCallback({
643
+ passphrase: val,
644
+ shouldClearSession: false,
645
+ shouldSaveLocal: false
646
+ });
647
+ }
648
+ });
649
+ passInput.addEventListener('keydown', (e) => {
650
+ if (e.key === 'Enter' && !saveBtn.disabled) {
651
+ saveBtn.click();
652
+ } else if (e.key === 'Escape') {
653
+ close();
654
+ }
655
+ });
656
+ overlay.addEventListener('click', (e) => {
657
+ if (e.target === overlay) close();
658
+ });
659
+ }
660
+ function showInPageToast(text, variant = 'success') {
661
+ const existing = document.getElementById('ps-ext-toast');
662
+ if (existing) existing.remove();
663
+
664
+ const toast = document.createElement('div');
665
+ toast.id = 'ps-ext-toast';
666
+ toast.textContent = text;
667
+
668
+ const colors = {
669
+ success: { bg: 'rgba(16,185,129,0.12)', border: 'rgba(16,185,129,0.35)', color: '#10b981' },
670
+ info: { bg: 'rgba(59,130,246,0.12)', border: 'rgba(59,130,246,0.35)', color: '#60a5fa' },
671
+ warning: { bg: 'rgba(251,191,36,0.1)', border: 'rgba(251,191,36,0.3)', color: '#fbbf24' },
672
+ error: { bg: 'rgba(239,68,68,0.12)', border: 'rgba(239,68,68,0.35)', color: '#ef4444' },
673
+ };
674
+ const { bg, border, color } = colors[variant] || colors.info;
675
+
676
+ Object.assign(toast.style, {
677
+ position: 'fixed', top: '24px', left: '50%', transform: 'translateX(-50%)', zIndex: '2147483647',
678
+ background: bg, border: `1px solid ${border}`, color,
679
+ padding: '9px 18px', borderRadius: '12px', fontSize: '13px',
680
+ fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',
681
+ fontWeight: '500', boxShadow: '0 8px 30px rgba(0,0,0,0.3)',
682
+ backdropFilter: 'blur(8px)', transition: 'opacity 0.3s ease', opacity: '1',
683
+ textAlign: 'center'
684
+ });
685
+
686
+ document.body.appendChild(toast);
687
+ setTimeout(() => {
688
+ toast.style.opacity = '0';
689
+ setTimeout(() => toast.remove(), 350);
690
+ }, 2500);
691
+ }
692
+
693
+ /**
694
+ * Natively walks DOM to replace Tokens with Original text natively inside SPAs.
695
+ * Guaranteed safe for React/Angular since we only manipulate target TextNodes.
696
+ */
697
+
698
+ /**
699
+ * Natively walks DOM to replace Original Text with Tokens natively inside SPAs.
700
+ * Guaranteed safe for React/Angular input fields via MutationObserver syncs.
701
+ */
702
+ function scrubDataInDOM(rootElement, customRules, globalTokenLabels, activeProfile, existingSessionMap, detectOnly = false, isPro = false) {
703
+ if (!rootElement) return null;
704
+
705
+ // ── TEXTAREA / INPUT fast path ────────────────────────────────────────
706
+ // Native <textarea> and <input> store their content in .value — it is
707
+ // NOT a child text node, so createTreeWalker finds nothing and always
708
+ // returns count=0. Handle them directly here.
709
+ if (rootElement.tagName === 'TEXTAREA' || rootElement.tagName === 'INPUT') {
710
+ const text = rootElement.value || '';
711
+ if (!text.trim()) return { count: 0, tokenMap: existingSessionMap || {} };
712
+ const result = scrubText(text, customRules, globalTokenLabels, activeProfile, existingSessionMap || {}, isPro);
713
+ if (result.uniqueUnmasked.size > 0 && !detectOnly) {
714
+ rootElement.value = result.scrubbedText;
715
+ rootElement.dispatchEvent(new Event('input', { bubbles: true, cancelable: true }));
716
+ }
717
+ return { count: result.uniqueUnmasked.size, tokenMap: { ...(existingSessionMap || {}), ...result.tokenMap } };
718
+ }
719
+ // ─────────────────────────────────────────────────────────────────────
720
+
721
+ // ── DETECT ONLY fast path ─────────────────────────────────────────────
722
+ // If we only need to update the badge counter (no DOM mutation), evaluate
723
+ // the full text string at once. This bypasses text node splitting issues
724
+ // in ProseMirror/contenteditable and guarantees a 100% accurate count.
725
+ if (detectOnly) {
726
+ const fullText = rootElement.innerText || rootElement.textContent || '';
727
+ if (!fullText.trim()) return { count: 0, tokenMap: existingSessionMap || {} };
728
+ const fullResult = scrubText(fullText, customRules, globalTokenLabels, activeProfile, existingSessionMap || {}, isPro);
729
+ return { count: fullResult.uniqueUnmasked.size, tokenMap: existingSessionMap || {} };
730
+ }
731
+ // ─────────────────────────────────────────────────────────────────────
732
+
733
+ // ── ACTUAL DOM MUTATION (TreeWalker for AutoScrub) ────────────────────
734
+
735
+ const walker = document.createTreeWalker(rootElement, NodeFilter.SHOW_TEXT, null, false);
736
+ const nodesToProcess = [];
737
+ let node;
738
+ while(node = walker.nextNode()) {
739
+ if (!node.nodeValue.trim()) continue;
740
+ nodesToProcess.push(node);
741
+ }
742
+
743
+ let globalTokenMap = { ...existingSessionMap };
744
+ let allUniqueUnmasked = new Set();
745
+
746
+ nodesToProcess.forEach(node => {
747
+ const originalText = node.nodeValue;
748
+ const result = scrubText(originalText, customRules, globalTokenLabels, activeProfile, globalTokenMap, isPro);
749
+
750
+ if (result.uniqueUnmasked.size > 0) {
751
+ if (!detectOnly && result.scrubbedText !== originalText) {
752
+ node.nodeValue = result.scrubbedText;
753
+ }
754
+ if (result.count > 0) {
755
+ globalTokenMap = { ...globalTokenMap, ...result.tokenMap };
756
+ }
757
+ result.uniqueUnmasked.forEach(k => allUniqueUnmasked.add(k));
758
+ }
759
+ });
760
+
761
+ // Force React/ProseMirror to notice the change
762
+ if (allUniqueUnmasked.size > 0 && !detectOnly) {
763
+ rootElement.dispatchEvent(new Event('input', { bubbles: true, cancelable: true }));
764
+ }
765
+
766
+ return {
767
+ count: allUniqueUnmasked.size,
768
+ tokenMap: globalTokenMap
769
+ };
770
+ }
771
+
772
+ const GLOBAL_ASSISTANT_SELECTORS = [
773
+ // ChatGPT
774
+ '[data-message-author-role="assistant"]',
775
+ '[data-message-author-role="model"]',
776
+ '[data-testid="chat-message-text"]',
777
+ '[data-testid="assistant-message"]',
778
+ '[data-is-streaming]',
779
+ '.agent-turn',
780
+ 'div[role="article"].agent-turn',
781
+ // Claude
782
+ 'model-response',
783
+ '.font-claude-message',
784
+ '.claude-artifact',
785
+ '[data-testid="artifact-renderer"]',
786
+ // Gemini
787
+ '.model-response-text__content',
788
+ '.response-content',
789
+ 'message-content[is-response]',
790
+ // Grok (x.com)
791
+ '[data-testid="messageblock"]',
792
+ '[class*="GrokResponseMessage"]',
793
+ // DeepSeek
794
+ '.ds-markdown',
795
+ // Copilot — NEW React UI (copilot.microsoft.com as of 2025)
796
+ '[data-testid="ai-message"]',
797
+ '[class*="AIMessageContent"]',
798
+ '[class*="ResponseMessage"]',
799
+ '[class*="CopilotMessage"]',
800
+ '[class*="BotMessage"]',
801
+ // Copilot — legacy cib-serp Shadow DOM + Adaptive Cards
802
+ '.ac-textBlock',
803
+ '.cib-message-text',
804
+ '.cib-message',
805
+ '[class*="bot-message"]',
806
+ '[class*="copilot-message"]',
807
+ // Qwen / Tongyi
808
+ '.output-area',
809
+ // Perplexity
810
+ '[data-testid="answer"]',
811
+ // Generic article-based message wrappers (used by many platforms)
812
+ // Excluded from sidebar via nav/aside filter in gatherUniversalAIContext()
813
+ 'div[role="article"]',
814
+ // Conservative generic fallbacks — nav/aside exclusion filter prevents sidebar matches
815
+ '.prose',
816
+ '.whitespace-pre-wrap',
817
+ '.message-content:not([contenteditable])',
818
+ '[class*="message-row"]',
819
+ '[class*="assistant"]',
820
+ '.markdown'
821
+ ].join(', ');
822
+
823
+ function revealDataInDOM(tokenMap) {
824
+ const { compositeRegex, looseRules } = buildRestorationRegexAndRules(tokenMap);
825
+ if (!compositeRegex) {
826
+ if (typeof showInPageToast === 'function') showInPageToast("No protected session data to reveal.", "info");
827
+ return 0;
828
+ }
829
+
830
+ let restoredCount = 0;
831
+ const nodesToReplace = [];
832
+
833
+ const ASSISTANT_SELECTORS = GLOBAL_ASSISTANT_SELECTORS;
834
+
835
+ function isPromptInput(el) {
836
+ if (!el) return false;
837
+ if (el.closest) {
838
+ return !!el.closest('[data-ps-attached="true"]');
839
+ }
840
+ let parent = el;
841
+ while (parent) {
842
+ if (parent.dataset && parent.dataset.psAttached === 'true') {
843
+ return true;
844
+ }
845
+ parent = parent.parentNode || parent.host;
846
+ }
847
+ return false;
848
+ }
849
+
850
+ // Shadow-DOM-aware assistant container detection:
851
+ // .closest() cannot cross shadow boundaries, so if it returns null
852
+ // we check whether the node lives inside a ShadowRoot whose host
853
+ // (or host ancestor) matches an AI response selector.
854
+ function isInsideAssistant(el) {
855
+ if (!el || !el.closest) return false;
856
+ if (el.closest(ASSISTANT_SELECTORS)) return true;
857
+ // Shadow DOM fallback
858
+ const root = el.getRootNode();
859
+ if (root instanceof ShadowRoot && root.host) {
860
+ // Check if the shadow host itself matches, or has an ancestor that does
861
+ if (root.host.matches && root.host.matches(ASSISTANT_SELECTORS)) return true;
862
+ if (root.host.closest && root.host.closest(ASSISTANT_SELECTORS)) return true;
863
+ }
864
+ return false;
865
+ }
866
+
867
+ function walkTextNodes(root) {
868
+ if (!root) return;
869
+
870
+ // Handle elements with shadow roots if the root itself has one
871
+ if (root.shadowRoot) {
872
+ walkTextNodes(root.shadowRoot);
873
+ }
874
+
875
+ // Standard node iteration
876
+ let child = root.firstChild;
877
+ while (child) {
878
+ const next = child.nextSibling;
879
+ if (child.nodeType === Node.TEXT_NODE) {
880
+ if (child.parentElement) {
881
+ const tag = child.parentElement.tagName;
882
+ if (!['SCRIPT', 'STYLE', 'TEXTAREA', 'INPUT', 'NOSCRIPT'].includes(tag)) {
883
+ // Determine if node is inside an AI assistant response container.
884
+ // If so, ALWAYS process it — skip both inPromptInput and isInstructionNode checks.
885
+ const isAssistant = isInsideAssistant(child.parentElement);
886
+
887
+ let shouldSkip = false;
888
+ if (!isAssistant) {
889
+ // Ignore user input areas where user types prompts actively.
890
+ // Precise check via isPromptInput helper (looks for data-ps-attached attribute).
891
+ const inPromptInput = isPromptInput(child.parentElement);
892
+ if (inPromptInput) {
893
+ shouldSkip = true;
894
+ } else {
895
+ // Check if inside the instruction block itself.
896
+ const parentTc = child.parentElement.textContent;
897
+ if (parentTc && parentTc.length < 8000 && (parentTc.includes('[Privacy Scrubber Mode]') || parentTc.includes('[SYSTEM INSTRUCTION: DATA PRIVACY MODE]'))) {
898
+ shouldSkip = true;
899
+ }
900
+ }
901
+ }
902
+
903
+
904
+ if (!shouldSkip) {
905
+ compositeRegex.lastIndex = 0;
906
+ const hasMatch = compositeRegex.test(child.nodeValue);
907
+ if (hasMatch) {
908
+ if (['PRE', 'CODE'].includes(tag) || (child.parentElement.closest && child.parentElement.closest('pre, code'))) {
909
+ const { restoredText, restoredCount: count } = unscrubText(child.nodeValue, tokenMap);
910
+ if (count > 0) {
911
+ child.nodeValue = restoredText;
912
+ restoredCount += count;
913
+ }
914
+ } else {
915
+ nodesToReplace.push(child);
916
+ }
917
+ }
918
+ }
919
+ }
920
+ }
921
+ } else if (child.nodeType === Node.ELEMENT_NODE) {
922
+ const tag = child.tagName;
923
+ if (!['SCRIPT', 'STYLE', 'TEXTAREA', 'INPUT', 'NOSCRIPT'].includes(tag)) {
924
+ if (tag === 'IFRAME') {
925
+ try {
926
+ const iframeDoc = child.contentDocument || child.contentWindow?.document;
927
+ if (iframeDoc && iframeDoc.body) {
928
+ walkTextNodes(iframeDoc.body);
929
+ }
930
+ } catch (e) {
931
+ // ignore cross-origin
932
+ }
933
+ } else {
934
+ // Check if inside an AI assistant response — always walk those.
935
+ const isAssistantEl = isInsideAssistant(child);
936
+
937
+ let shouldSkipEl = false;
938
+ if (!isAssistantEl) {
939
+ const inPromptInput = isPromptInput(child);
940
+ if (inPromptInput) {
941
+ shouldSkipEl = true;
942
+ }
943
+ // NOTE: We intentionally do NOT check textContent for
944
+ // '[Privacy Scrubber Mode]' at the element level because
945
+ // textContent aggregates ALL descendant text. A parent
946
+ // container (like <main>) would match the user prompt's
947
+ // instruction block and skip the entire subtree including
948
+ // AI responses. The instruction check is only safe at the
949
+ // TEXT_NODE level where parentElement scope is narrow.
950
+ }
951
+
952
+ if (!shouldSkipEl) {
953
+ walkTextNodes(child);
954
+ if (child.shadowRoot) {
955
+ walkTextNodes(child.shadowRoot);
956
+ }
957
+ }
958
+ }
959
+ }
960
+ }
961
+ child = next;
962
+ }
963
+ }
964
+
965
+ walkTextNodes(document.documentElement);
966
+
967
+ nodesToReplace.forEach(node => {
968
+ const text = node.nodeValue;
969
+ const fragment = document.createDocumentFragment();
970
+ let lastIndex = 0;
971
+ let match;
972
+
973
+ compositeRegex.lastIndex = 0;
974
+ while ((match = compositeRegex.exec(text)) !== null) {
975
+ if (match.index > lastIndex) {
976
+ fragment.appendChild(document.createTextNode(text.substring(lastIndex, match.index)));
977
+ }
978
+ let origKey = match[0];
979
+ for (const rule of looseRules) {
980
+ if (new RegExp('^' + rule.patternStr + '$', 'i').test(match[0])) {
981
+ origKey = rule.originalKey;
982
+ break;
983
+ }
984
+ }
985
+ const rawVal = tokenMap[origKey] || match[0];
986
+
987
+ const span = document.createElement('span');
988
+ span.className = 'ps-restored-data';
989
+ span.title = 'Decrypted Locally. LLMs cannot see this.';
990
+ Object.assign(span.style, {
991
+ borderBottom: '2px dashed #10b981',
992
+ color: '#10b981',
993
+ cursor: 'help',
994
+ paddingBottom: '1px',
995
+ fontWeight: '500',
996
+ position: 'relative',
997
+ zIndex: '1',
998
+ textShadow: '0 0 5px rgba(16, 185, 129, 0.2)'
999
+ });
1000
+ span.textContent = rawVal;
1001
+
1002
+ fragment.appendChild(span);
1003
+ restoredCount++;
1004
+ lastIndex = compositeRegex.lastIndex;
1005
+ }
1006
+ if (lastIndex < text.length) {
1007
+ fragment.appendChild(document.createTextNode(text.substring(lastIndex)));
1008
+ }
1009
+
1010
+ if (node.parentElement) {
1011
+ try {
1012
+ node.parentElement.replaceChild(fragment, node);
1013
+ } catch (e) {
1014
+ // Fail silently
1015
+ }
1016
+ }
1017
+ });
1018
+
1019
+ if (restoredCount > 0) {
1020
+ if (typeof showInPageToast === 'function') showInPageToast(`✅ Decrypted Locally! Your data is now safe to copy.`, "success");
1021
+ } else {
1022
+ if (typeof showInPageToast === 'function') showInPageToast("No active tokens found on the screen.", "info");
1023
+ }
1024
+ return restoredCount;
1025
+ }
1026
+
1027
+ function gatherUniversalAIContext() {
1028
+ try {
1029
+ // Helper function to recursively find elements matching selectors across shadow DOMs and same-origin iframes
1030
+ function querySelectorAllRecursive(root, selector) {
1031
+ // Single depth-first traversal that crosses shadow DOM boundaries.
1032
+ // Does NOT use root.querySelectorAll() to avoid duplicating shadow DOM results.
1033
+ const results = [];
1034
+ if (!root) return results;
1035
+
1036
+ function walk(node) {
1037
+ if (!node) return;
1038
+ if (node.nodeType === Node.ELEMENT_NODE) {
1039
+ try {
1040
+ if (node.matches && node.matches(selector)) results.push(node);
1041
+ } catch (e) {}
1042
+ // Recurse into shadow DOM (depth-first before light children)
1043
+ if (node.shadowRoot) walk(node.shadowRoot);
1044
+ // Recurse into same-origin iframes
1045
+ if (node.tagName === 'IFRAME') {
1046
+ try {
1047
+ const iframeDoc = node.contentDocument || node.contentWindow?.document;
1048
+ if (iframeDoc) walk(iframeDoc);
1049
+ } catch (e) {}
1050
+ return; // children handled above
1051
+ }
1052
+ } else if (node.nodeType !== Node.DOCUMENT_NODE && node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {
1053
+ return; // text node, comment, etc
1054
+ }
1055
+ // Walk light DOM / document children
1056
+ let child = node.firstChild;
1057
+ while (child) { walk(child); child = child.nextSibling; }
1058
+ }
1059
+
1060
+ walk(root);
1061
+ return results;
1062
+ }
1063
+
1064
+
1065
+ // 1. Gather Input Text
1066
+ const inputs = querySelectorAllRecursive(document, 'textarea, div[contenteditable="true"], div.ProseMirror');
1067
+ // Find the active visible input, ignoring our own injected toolbar
1068
+ const activeInput = inputs.find(el => el.offsetParent !== null && el.offsetHeight > 0 && !el.closest('.ps-toolbar-container'));
1069
+ const inputText = activeInput ? (activeInput.value || activeInput.innerText || activeInput.textContent || "") : "";
1070
+
1071
+ // 2. Gather Output Text (Last AI Response)
1072
+ let outputText = "";
1073
+
1074
+ // Universal selectors covering major AI models + Claude Artifacts
1075
+ const knownSelectors = GLOBAL_ASSISTANT_SELECTORS;
1076
+
1077
+ const candidateNodes = querySelectorAllRecursive(document, knownSelectors);
1078
+
1079
+ // Filter out nodes that obviously belong to the user or sidebar/navigation
1080
+ const validResponses = Array.from(candidateNodes).filter(el => {
1081
+ // If it is inside a shadow DOM, offsetParent might be null, check offsetHeight/getBoundingClientRect
1082
+ const rect = el.getBoundingClientRect ? el.getBoundingClientRect() : null;
1083
+ const isVisible = (el.offsetParent !== null && el.offsetHeight > 0) || (rect && rect.height > 0 && rect.width > 0);
1084
+ if (!isVisible) return false;
1085
+
1086
+ // SIDEBAR/NAV EXCLUSION: exclude elements inside navigation or sidebar areas.
1087
+ // This prevents Kimi sidebar, Grok left panel, and similar from being captured.
1088
+ if (el.closest) {
1089
+ if (el.closest('nav, aside, header')) return false;
1090
+ if (el.closest('[role="navigation"], [role="complementary"], [role="banner"]')) return false;
1091
+ }
1092
+
1093
+ // QWEN THINKING FILTER: exclude Qwen/DeepSeek "Thinking completed" reasoning blocks.
1094
+ // These are collapsible sections shown before the actual response.
1095
+ if (el.closest) {
1096
+ if (el.closest('[class*="thinking"], [class*="reasoning"], [class*="Thinking"], [class*="chain-of-thought"]')) return false;
1097
+ if (el.classList.contains('thinking') || el.classList.contains('reasoning')) return false;
1098
+ }
1099
+ // Also exclude by text heuristic: element whose ONLY content is the thinking header
1100
+ {
1101
+ const rawText = (el.innerText || el.textContent || '').trim();
1102
+ if (rawText.toLowerCase() === 'thinking completed' || rawText.toLowerCase() === 'thinking...') return false;
1103
+ }
1104
+
1105
+ // KEY EXCLUSION: elements that contain the active textarea are page/chat wrappers,
1106
+ // never AI responses. This is the definitive fix for Kimi (and similar platforms)
1107
+ // where a large wrapper div matches a generic selector and includes the entire
1108
+ // sidebar + chat area + user input field.
1109
+ if (activeInput && el.contains(activeInput)) return false;
1110
+
1111
+ // Exclude user messages that share generic classes like .message-content
1112
+ const role = el.getAttribute('data-message-author-role');
1113
+ if (role === 'user') return false;
1114
+
1115
+ // Exclude explicit user classes
1116
+ if (el.closest) {
1117
+ if (el.closest('.user-message') || el.classList.contains('user-message')) return false;
1118
+ if (el.closest('[data-testid="user-message"]')) return false;
1119
+ if (el.closest('[data-message-author-role="user"]')) return false;
1120
+ } else {
1121
+ let parent = el.parentNode;
1122
+ while (parent) {
1123
+ if (parent.classList && (parent.classList.contains('user-message') || parent.getAttribute('data-testid') === 'user-message')) {
1124
+ return false;
1125
+ }
1126
+ parent = parent.parentNode || parent.host;
1127
+ }
1128
+ }
1129
+
1130
+ return true;
1131
+ });
1132
+
1133
+ if (validResponses.length > 0) {
1134
+ // Return the text of the very last valid response on the page.
1135
+ // De-ancestor: if element A contains element B (both matched), prefer B (more specific).
1136
+ const leafResponses = validResponses.filter((el, _, arr) =>
1137
+ !arr.some(other => other !== el && el.contains(other))
1138
+ );
1139
+ const candidates = leafResponses.length > 0 ? leafResponses : validResponses;
1140
+ const lastLeaf = candidates[candidates.length - 1];
1141
+
1142
+ // MULTI-LEAF AGGREGATION (fixes Copilot partial response):
1143
+ // When multiple leaf elements exist, check if they share a close ancestor
1144
+ // within 2 DOM levels of the last leaf. If yes, use the ancestor's full text
1145
+ // (groups same-message paragraphs). Depth limit of 2 prevents merging Kimi's
1146
+ // separate user + AI message elements whose common ancestor is 4+ levels up.
1147
+ let found = false;
1148
+ if (candidates.length > 1) {
1149
+ let probe = lastLeaf.parentElement;
1150
+ for (let depth = 0; depth < 2 && probe; depth++) {
1151
+ if (activeInput && probe.contains(activeInput)) break;
1152
+ if (probe.tagName === 'BODY') break;
1153
+ const contained = candidates.filter(el => probe.contains(el));
1154
+ if (contained.length >= 2) {
1155
+ outputText = probe.innerText || probe.textContent || '';
1156
+ found = true;
1157
+ break;
1158
+ }
1159
+ probe = probe.parentElement;
1160
+ }
1161
+ }
1162
+ if (!found) {
1163
+ outputText = lastLeaf.innerText || lastLeaf.textContent || '';
1164
+ }
1165
+ }
1166
+
1167
+
1168
+ if (!outputText.trim()) {
1169
+ // Fallback: look for any element containing tokens, excluding prompt inputs and nav/sidebar areas
1170
+ const allElements = querySelectorAllRecursive(document, 'div, p, span, li, td, input, textarea, [role="textbox"]');
1171
+ const tokenContainingElements = allElements.filter(el => {
1172
+ // Exclude navigation/sidebar areas (same as primary filter)
1173
+ if (el.closest && el.closest('nav, aside, header, [role="navigation"], [role="complementary"], [role="banner"]')) return false;
1174
+ // Exclude page/chat wrappers that contain the active input
1175
+ if (activeInput && el.contains(activeInput)) return false;
1176
+ // Exclude prompt inputs (active ones with data-ps-attached attribute)
1177
+ let parent = el;
1178
+ while (parent) {
1179
+ if (parent.dataset && parent.dataset.psAttached === 'true') return false;
1180
+ parent = parent.parentNode || parent.host;
1181
+ }
1182
+ if (['SCRIPT', 'STYLE', 'NOSCRIPT'].includes(el.tagName)) return false;
1183
+ const text = (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA') ? (el.value || "") : (el.innerText || el.textContent || "");
1184
+ return /\[[A-Z]+_[0-9]+\]/.test(text);
1185
+ });
1186
+
1187
+ let bestEl = null;
1188
+ let maxTokens = 0;
1189
+ let bestTextLength = 0;
1190
+
1191
+ for (const el of tokenContainingElements) {
1192
+ const text = (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA') ? (el.value || "") : (el.innerText || el.textContent || "");
1193
+ const matches = text.match(/\[[A-Z]+_[0-9]+\]/g) || [];
1194
+ const uniqueTokens = new Set(matches).size;
1195
+ if (uniqueTokens > maxTokens || (uniqueTokens === maxTokens && uniqueTokens > 0 && text.length > bestTextLength)) {
1196
+ maxTokens = uniqueTokens;
1197
+ bestTextLength = text.length;
1198
+ bestEl = el;
1199
+ }
1200
+ }
1201
+ if (bestEl) {
1202
+ outputText = (bestEl.tagName === 'INPUT' || bestEl.tagName === 'TEXTAREA') ? (bestEl.value || "") : (bestEl.innerText || bestEl.textContent || "");
1203
+ }
1204
+ }
1205
+
1206
+ return {
1207
+ inputText: inputText.trim(),
1208
+ outputText: cleanAIPromptPrefix(outputText).trim()
1209
+ };
1210
+ } catch (e) {
1211
+ console.error("[PrivacyScrubber] Universal Context gather failed:", e);
1212
+ return { inputText: "", outputText: "" };
1213
+ }
1214
+ }
1215
+
1216
+ // Export to window for content scripts
1217
+ // Expose for OCR and advanced usage
1218
+ function getRules(profile) {
1219
+ const engine = getEngine();
1220
+ if (engine) {
1221
+ return engine.getActiveRules(profile);
1222
+ }
1223
+ return [];
1224
+ }
1225
+
1226
+ /**
1227
+ * Show a right-click context menu for Profile Switching
1228
+ */
1229
+ function showProfileMenu(e, anchorElement, onProfileChange) {
1230
+ // Remove existing menu if any
1231
+ let existing = document.getElementById('ps-profile-menu');
1232
+ if (existing) {
1233
+ existing.remove();
1234
+ return; // Act as a toggle
1235
+ }
1236
+
1237
+ const PROFILES = [
1238
+ { id: 'General', label: 'General' },
1239
+ { id: 'Engineering', label: 'Engineering' },
1240
+ { id: 'Finance', label: 'Finance' },
1241
+ { id: 'Legal', label: 'Legal' },
1242
+ { id: 'Medical', label: 'Healthcare' },
1243
+ { id: 'HR', label: 'HR' }
1244
+ ];
1245
+
1246
+ chrome.storage.local.get(['ps_active_profile', 'ps_is_pro', 'ps_is_teams'], (data) => {
1247
+ const activeProfile = data.ps_active_profile || 'General';
1248
+ const isPro = data.ps_is_pro || data.ps_is_teams || false;
1249
+
1250
+ const menu = document.createElement('div');
1251
+ menu.id = 'ps-profile-menu';
1252
+ menu.className = 'ps-profile-menu';
1253
+
1254
+ // Positioning
1255
+ const rect = anchorElement.getBoundingClientRect();
1256
+ // Try to position it below and to the left of the button
1257
+ menu.style.top = (rect.bottom + window.scrollY + 5) + 'px';
1258
+ menu.style.left = (rect.right + window.scrollX - 150) + 'px';
1259
+
1260
+ const header = document.createElement('div');
1261
+ header.className = 'ps-profile-menu-header';
1262
+ header.innerText = 'Detection Profile';
1263
+ menu.appendChild(header);
1264
+
1265
+ PROFILES.forEach(p => {
1266
+ const item = document.createElement('div');
1267
+ item.className = 'ps-profile-menu-item';
1268
+ if (p.id === activeProfile) item.classList.add('active');
1269
+
1270
+ let labelText = p.label;
1271
+ item.innerText = labelText;
1272
+
1273
+ if (!isPro && p.id !== 'General') {
1274
+ item.style.opacity = '0.5';
1275
+ item.style.cursor = 'not-allowed';
1276
+ item.title = 'PRO Feature';
1277
+ item.innerText = labelText + ' 🔒';
1278
+ } else if (p.id === activeProfile) {
1279
+ item.innerText = labelText + ' ✓';
1280
+ }
1281
+
1282
+ item.addEventListener('click', (ev) => {
1283
+ ev.stopPropagation();
1284
+ if (!isPro && p.id !== 'General') {
1285
+ if (typeof showInPageToast === 'function') {
1286
+ showInPageToast('Specialized Profiles require PRO upgrade.', 'warning');
1287
+ }
1288
+ menu.remove();
1289
+ return;
1290
+ }
1291
+
1292
+ chrome.storage.local.set({ ps_active_profile: p.id }, () => {
1293
+ if (typeof showInPageToast === 'function') {
1294
+ showInPageToast(`Profile Switched to ${p.label}`, 'success');
1295
+ }
1296
+ menu.remove();
1297
+
1298
+ // Trigger immediate re-scrub if callback provided
1299
+ if (typeof onProfileChange === 'function') {
1300
+ onProfileChange(p.id);
1301
+ }
1302
+ });
1303
+ });
1304
+
1305
+ menu.appendChild(item);
1306
+ });
1307
+
1308
+ document.body.appendChild(menu);
1309
+
1310
+ // Close on click outside
1311
+ const closeMenu = (ev) => {
1312
+ if (!menu.contains(ev.target) && ev.target !== anchorElement) {
1313
+ menu.remove();
1314
+ document.removeEventListener('click', closeMenu);
1315
+ document.removeEventListener('contextmenu', closeMenu);
1316
+ }
1317
+ };
1318
+
1319
+ setTimeout(() => {
1320
+ document.addEventListener('click', closeMenu);
1321
+ document.addEventListener('contextmenu', closeMenu);
1322
+ }, 50);
1323
+ });
1324
+ }
1325
+
1326
+ /**
1327
+ * exportSessionToFile — Downloads the current session map as a JSON file
1328
+ */
1329
+ function exportSessionToFile(sessionMap, filename = 'ps-session', extraContext = null) {
1330
+ if (!sessionMap || Object.keys(sessionMap).length === 0) {
1331
+ if (window.showInPageToast) window.showInPageToast("No active session data to export.", "info");
1332
+ return;
1333
+ }
1334
+ try {
1335
+ const data = {
1336
+ version: "1.6.4",
1337
+ timestamp: new Date().toISOString(),
1338
+ sessionMap: sessionMap,
1339
+ context: extraContext
1340
+ };
1341
+ const jsonStr = JSON.stringify(data, null, 2);
1342
+ if (typeof downloadFile === 'function') {
1343
+ downloadFile(jsonStr, `${filename}-${Date.now()}.json`, 'application/json');
1344
+ } else {
1345
+ const blob = new Blob([jsonStr], { type: 'application/json' });
1346
+ const url = URL.createObjectURL(blob);
1347
+ if (typeof chrome !== 'undefined' && chrome.downloads) {
1348
+ chrome.downloads.download({ url: url, filename: `${filename}-${Date.now()}.json` });
1349
+ } else {
1350
+ const a = document.createElement('a');
1351
+ a.href = url;
1352
+ a.download = `${filename}-${Date.now()}.json`;
1353
+ document.body.appendChild(a);
1354
+ a.click();
1355
+ document.body.removeChild(a);
1356
+ }
1357
+ }
1358
+ if (window.showInPageToast) window.showInPageToast("✓ Session exported successfully", "success");
1359
+ } catch (e) {
1360
+ console.error("PrivacyScrubber Export Error:", e);
1361
+ if (window.showInPageToast) window.showInPageToast("❌ Export failed.", "error");
1362
+ }
1363
+ }
1364
+
1365
+ const engine = getEngine();
1366
+
1367
+ if (typeof window !== 'undefined') {
1368
+ window.PrivacyScrubberCore = {
1369
+ init,
1370
+ scrubText,
1371
+ unscrubText: (text, sessionMap, opts) => {
1372
+ if (!engine) return null;
1373
+ const res = engine.unscrubText(text, sessionMap, opts);
1374
+ return res ? { restoredText: res.text, text: res.text, restoredCount: res.count, count: res.count } : null;
1375
+ },
1376
+ unscrubTextAsHTML: (text, sessionMap, opts) => {
1377
+ if (!engine) return null;
1378
+ const res = engine.unscrubTextAsHTML(text, sessionMap, opts);
1379
+ return res ? { restoredHTML: res.text, html: res.text, text: res.text, restoredCount: res.count, count: res.count } : null;
1380
+ },
1381
+ showTeamsPassphraseModal,
1382
+ scrubDataInDOM,
1383
+ revealDataInDOM,
1384
+ gatherUniversalAIContext,
1385
+ exportSessionToFile,
1386
+ getRules,
1387
+ showProfileMenu,
1388
+ cleanAIPromptPrefix: (text) => engine ? engine.cleanAIPromptPrefix(text) : text,
1389
+ hydrateRegex: (rule) => engine ? engine.hydrateRegex(rule) : rule,
1390
+ isInitialized: false
1391
+ };
1392
+ window.showInPageToast = showInPageToast;
1393
+
1394
+ // v1.4.4: Automatic re-hydration on boot from local storage cache
1395
+ if (typeof chrome !== 'undefined' && chrome.storage && chrome.storage.local) {
1396
+ chrome.storage.local.get(['ps_rules_cache'], (data) => {
1397
+ if (data.ps_rules_cache) {
1398
+ init(data.ps_rules_cache);
1399
+ }
1400
+ });
1401
+ }
1402
+ }
1403
+ if (typeof module !== 'undefined' && module.exports) {
1404
+ module.exports = {
1405
+ init,
1406
+ scrubText,
1407
+ unscrubText: (text, sessionMap, opts) => {
1408
+ if (!engine) return null;
1409
+ const res = engine.unscrubText(text, sessionMap, opts);
1410
+ return res ? { restoredText: res.text, text: res.text, restoredCount: res.count, count: res.count } : null;
1411
+ },
1412
+ unscrubTextAsHTML: (text, sessionMap, opts) => {
1413
+ if (!engine) return null;
1414
+ const res = engine.unscrubTextAsHTML(text, sessionMap, opts);
1415
+ return res ? { restoredHTML: res.text, html: res.text, text: res.text, restoredCount: res.count, count: res.count } : null;
1416
+ },
1417
+ cleanAIPromptPrefix: (text) => engine ? engine.cleanAIPromptPrefix(text) : text,
1418
+ hydrateRegex: (rule) => engine ? engine.hydrateRegex(rule) : rule,
1419
+ getRules
1420
+ };
1421
+ }
1422
+ })();
1423
+