zapcode-figma-mcp 1.3.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -18
- package/build/index.js +1 -334
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -1,20 +1,26 @@
|
|
|
1
1
|
# ZapCode Figma MCP Server
|
|
2
2
|
|
|
3
|
-
<p align="center"><img src="
|
|
3
|
+
<p align="center"><img src="https://raw.githubusercontent.com/Zapcode-FTC/Zapcode-Figma-MCP/main/assets/Zapcode.png" alt="ZapCode Logo" width="400"></p>
|
|
4
4
|
|
|
5
5
|
# Zapcode Figma MCP Server
|
|
6
6
|
|
|
7
7
|
[](https://www.npmjs.com/package/zapcode-figma-mcp)
|
|
8
|
-
[](https://discord.com/invite/
|
|
8
|
+
[](https://discord.com/invite/FsNCCxSGRR)
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
Connect your Figma designs directly to AI tools like Claude Desktop, Claude Code, Cursor, and Cline. Get real-time HTML, CSS, images, and assets from selected Figma frames through the Model Context Protocol.
|
|
11
|
+
Connect your Figma designs directly to AI tools like Claude Desktop, Claude Code, Cursor, and Cline. Get real-time HTML, CSS, images, and assets from selected Figma frames — and now **fully control Figma** with 57 tools through the Model Context Protocol.
|
|
12
12
|
|
|
13
13
|
> **Get Started:** Visit [**https://zapcode.pages.dev/**](https://zapcode.pages.dev/) for complete documentation, tutorials, and live examples.
|
|
14
14
|
|
|
15
|
+
## What's New in v2.0
|
|
16
|
+
|
|
17
|
+
The biggest release yet — massively expanded Figma control. AI can now create, edit, style, and manage your entire Figma design, not just read it.
|
|
18
|
+
|
|
15
19
|
## Features
|
|
16
20
|
|
|
17
21
|
- **Real-time Design Context** - Fetches live data from your currently selected Figma frame
|
|
22
|
+
- **Full Design Control** - Create, edit, move, style, and delete any Figma element via AI
|
|
23
|
+
- **Design System Support** - Manage components, styles, and variables
|
|
18
24
|
- **Complete Asset Export** - Supports SVG, PNG, JPG, PDF, and all Figma asset types
|
|
19
25
|
- **Configurable Storage** - Save assets to custom paths or default workspace location
|
|
20
26
|
- **Auto-organized Assets** - Assets grouped by type (svg/, png/, jpg/, etc.)
|
|
@@ -122,21 +128,6 @@ Add to your Windsurf MCP configuration:
|
|
|
122
128
|
}
|
|
123
129
|
```
|
|
124
130
|
|
|
125
|
-
### Zed Editor
|
|
126
|
-
|
|
127
|
-
Add to your Zed settings (MCP support currently in preview):
|
|
128
|
-
|
|
129
|
-
```json
|
|
130
|
-
{
|
|
131
|
-
"context_servers": {
|
|
132
|
-
"zapcode-figma": {
|
|
133
|
-
"command": "npx",
|
|
134
|
-
"args": ["-y", "zapcode-figma-mcp", "--figma-port", "61234"]
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
```
|
|
139
|
-
|
|
140
131
|
### Continue (VS Code/JetBrains)
|
|
141
132
|
|
|
142
133
|
Add to Continue's configuration:
|
package/build/index.js
CHANGED
|
@@ -1,335 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { createServer as createHttpServer } from "http";
|
|
3
|
-
import { Server as SocketIOServer } from "socket.io";
|
|
4
|
-
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
5
|
-
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
6
|
-
import * as fs from "fs";
|
|
7
|
-
import * as path from "path";
|
|
8
|
-
// --- Default Port for Figma Connection ---
|
|
9
|
-
const DEFAULT_FIGMA_SOCKET_IO_PORT = 32896;
|
|
10
|
-
// --- Allowed Ports (must match Figma plugin manifest) ---
|
|
11
|
-
const ALLOWED_PORTS = [
|
|
12
|
-
3000, 3001, 5000, 5173, 8000, 8080, 8888, 9000,
|
|
13
|
-
32044, 32896, 32897, 32898, 32899,
|
|
14
|
-
40000, 50000, 54321, 60000, 61234, 62000, 63000
|
|
15
|
-
];
|
|
16
|
-
// --- Global Variables for Figma Connection ---
|
|
17
|
-
let figmaHttpServer = null;
|
|
18
|
-
let io = null;
|
|
19
|
-
let connectedFigmaClient = null;
|
|
20
|
-
const figmaContextRequests = new Map();
|
|
21
|
-
// --- Argument Parsing ---
|
|
22
|
-
function parseArgs() {
|
|
23
|
-
const args = process.argv.slice(2);
|
|
24
|
-
let figmaPort = DEFAULT_FIGMA_SOCKET_IO_PORT;
|
|
25
|
-
const figmaPortArgIndex = args.findIndex((arg) => arg === "--figma-port");
|
|
26
|
-
if (figmaPortArgIndex !== -1 && args[figmaPortArgIndex + 1]) {
|
|
27
|
-
const port = parseInt(args[figmaPortArgIndex + 1], 10);
|
|
28
|
-
if (!isNaN(port)) {
|
|
29
|
-
// Validate port is in allowed list
|
|
30
|
-
if (!ALLOWED_PORTS.includes(port)) {
|
|
31
|
-
console.error(`Zapcode: Warning - Port ${port} is not in the allowed ports list.`);
|
|
32
|
-
console.error(`Zapcode: Allowed ports: ${ALLOWED_PORTS.join(', ')}`);
|
|
33
|
-
console.error(`Zapcode: The Figma plugin may not be able to connect to this port.`);
|
|
34
|
-
}
|
|
35
|
-
figmaPort = port;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return { figmaPort };
|
|
39
|
-
}
|
|
40
|
-
// --- Helper: Find Available Port ---
|
|
41
|
-
async function findAvailablePort(startPort, maxAttempts = 4) {
|
|
42
|
-
// Find the starting port in the allowed ports list
|
|
43
|
-
const startIndex = ALLOWED_PORTS.indexOf(startPort);
|
|
44
|
-
const portsToTry = startIndex >= 0
|
|
45
|
-
? ALLOWED_PORTS.slice(startIndex, startIndex + maxAttempts)
|
|
46
|
-
: ALLOWED_PORTS.slice(0, maxAttempts);
|
|
47
|
-
for (let i = 0; i < portsToTry.length; i++) {
|
|
48
|
-
const port = portsToTry[i];
|
|
49
|
-
try {
|
|
50
|
-
const testServer = createHttpServer();
|
|
51
|
-
await new Promise((resolve, reject) => {
|
|
52
|
-
testServer.once('error', (err) => {
|
|
53
|
-
testServer.close();
|
|
54
|
-
if (err.code === 'EADDRINUSE') {
|
|
55
|
-
console.error(`Zapcode: Port ${port} is already in use, trying next allowed port...`);
|
|
56
|
-
reject(err);
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
reject(err);
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
testServer.listen(port, () => {
|
|
63
|
-
testServer.close();
|
|
64
|
-
resolve();
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
return port;
|
|
68
|
-
}
|
|
69
|
-
catch (err) {
|
|
70
|
-
if (err.code !== 'EADDRINUSE' || i === portsToTry.length - 1) {
|
|
71
|
-
throw new Error(`No available ports found in allowed ports list. Tried: ${portsToTry.join(', ')}`);
|
|
72
|
-
}
|
|
73
|
-
// Continue to next port
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
throw new Error('Unexpected error in port detection');
|
|
77
|
-
}
|
|
78
|
-
// --- Socket.IO Server Logic ---
|
|
79
|
-
function startSocketIOServer(port) {
|
|
80
|
-
return new Promise((resolve, reject) => {
|
|
81
|
-
// IMPORTANT: All logging must go to stderr to not interfere with MCP on stdout.
|
|
82
|
-
console.error(`Zapcode: Attempting to start Socket.IO server for Figma on port ${port}...`);
|
|
83
|
-
try {
|
|
84
|
-
figmaHttpServer = createHttpServer();
|
|
85
|
-
io = new SocketIOServer(figmaHttpServer, {
|
|
86
|
-
maxHttpBufferSize: 1e8,
|
|
87
|
-
cors: { origin: "*" },
|
|
88
|
-
});
|
|
89
|
-
io.on("connection", (socket) => {
|
|
90
|
-
console.error(`Zapcode: Figma plugin connected: ${socket.id}`);
|
|
91
|
-
if (connectedFigmaClient) {
|
|
92
|
-
connectedFigmaClient.disconnect(true);
|
|
93
|
-
}
|
|
94
|
-
connectedFigmaClient = socket;
|
|
95
|
-
socket.on("context_response", (data) => {
|
|
96
|
-
if (!data?.requestId)
|
|
97
|
-
return;
|
|
98
|
-
const request = figmaContextRequests.get(data.requestId);
|
|
99
|
-
if (request) {
|
|
100
|
-
if (data.error)
|
|
101
|
-
request.reject(new Error(data.error));
|
|
102
|
-
else if (data.payload)
|
|
103
|
-
request.resolve(data.payload);
|
|
104
|
-
else
|
|
105
|
-
request.reject(new Error("Invalid context_response from Figma"));
|
|
106
|
-
figmaContextRequests.delete(data.requestId);
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
socket.on("disconnect", (reason) => {
|
|
110
|
-
console.error(`Zapcode: Figma plugin disconnected: ${socket.id}. Reason: ${reason}`);
|
|
111
|
-
if (connectedFigmaClient === socket) {
|
|
112
|
-
connectedFigmaClient = null;
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
socket.on("error", (err) => console.error(`Zapcode: Figma Socket.IO error: ${err.message}`));
|
|
116
|
-
});
|
|
117
|
-
figmaHttpServer.on("error", (err) => {
|
|
118
|
-
console.error(`Zapcode: Figma HTTP server error: ${err.message}`);
|
|
119
|
-
reject(err);
|
|
120
|
-
});
|
|
121
|
-
figmaHttpServer.listen(port, () => {
|
|
122
|
-
console.error(`Zapcode: ✅ Figma Socket.IO server is listening on port ${port}`);
|
|
123
|
-
resolve();
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
catch (error) {
|
|
127
|
-
console.error(`Zapcode: Error creating Figma Socket.IO server: ${error}`);
|
|
128
|
-
reject(error);
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
// --- MCP Server Logic for Stdio ---
|
|
133
|
-
async function startMcpServer() {
|
|
134
|
-
console.error("Zapcode: Initializing MCP server for Stdio transport.");
|
|
135
|
-
const serverInfo = {
|
|
136
|
-
name: "zapcode-figma-mcp-server",
|
|
137
|
-
title: "Zapcode Figma MCP",
|
|
138
|
-
version: "1.1.0",
|
|
139
|
-
};
|
|
140
|
-
const mcpServerInstance = new McpServer(serverInfo, {
|
|
141
|
-
capabilities: { tools: {} },
|
|
142
|
-
});
|
|
143
|
-
mcpServerInstance.tool("get_figma_context", "Retrieves the selected Figma frame context (HTML, CSS, prompt, image, assets). Saves any provided assets to the local directory. Accepts an optional 'assets_path' parameter to specify where assets should be saved.", {
|
|
144
|
-
assets_path: {
|
|
145
|
-
type: "string",
|
|
146
|
-
description: "Optional absolute or relative path where assets should be saved. Defaults to 'assets' in the current working directory.",
|
|
147
|
-
},
|
|
148
|
-
}, async (params) => {
|
|
149
|
-
console.error("Zapcode: MCP Tool 'get_figma_context' invoked.");
|
|
150
|
-
if (!connectedFigmaClient?.connected) {
|
|
151
|
-
console.error("Zapcode: Error - Figma plugin not connected.");
|
|
152
|
-
return {
|
|
153
|
-
isError: true,
|
|
154
|
-
content: [
|
|
155
|
-
{
|
|
156
|
-
type: "text",
|
|
157
|
-
text: "Error: Figma plugin is not connected. Please connect the plugin in Figma.",
|
|
158
|
-
},
|
|
159
|
-
],
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
const requestId = `figma-ctx-${Date.now()}`;
|
|
163
|
-
try {
|
|
164
|
-
console.error(`Zapcode: Emitting 'request_context' to Figma (ID: ${requestId})`);
|
|
165
|
-
connectedFigmaClient.emit("request_context", { requestId });
|
|
166
|
-
const context = await new Promise((resolve, reject) => {
|
|
167
|
-
figmaContextRequests.set(requestId, { resolve, reject });
|
|
168
|
-
setTimeout(() => {
|
|
169
|
-
if (figmaContextRequests.has(requestId)) {
|
|
170
|
-
reject(new Error("Request to Figma plugin timed out after 30 seconds."));
|
|
171
|
-
figmaContextRequests.delete(requestId);
|
|
172
|
-
}
|
|
173
|
-
}, 30000);
|
|
174
|
-
});
|
|
175
|
-
console.error("Zapcode: Successfully received context from Figma.");
|
|
176
|
-
// Determine the base path for assets
|
|
177
|
-
const workspacePath = process.cwd();
|
|
178
|
-
const assetsBasePath = params.assets_path
|
|
179
|
-
? path.isAbsolute(params.assets_path)
|
|
180
|
-
? params.assets_path
|
|
181
|
-
: path.join(workspacePath, params.assets_path)
|
|
182
|
-
: path.join(workspacePath, "assets");
|
|
183
|
-
const assetResults = await saveAssets(context.assets, assetsBasePath);
|
|
184
|
-
const mcpContent = [];
|
|
185
|
-
if (context.image) {
|
|
186
|
-
mcpContent.push({
|
|
187
|
-
type: "image",
|
|
188
|
-
data: context.image,
|
|
189
|
-
mimeType: "image/png",
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
// Format assets information by type
|
|
193
|
-
let assetsInfo = "";
|
|
194
|
-
if (assetResults.savedFiles.length > 0) {
|
|
195
|
-
assetsInfo = `\n\nAssets (Saved to ${assetsBasePath}):\n`;
|
|
196
|
-
assetResults.assetsByType.forEach((files, type) => {
|
|
197
|
-
assetsInfo += `\n${type.toUpperCase()} Files:\n`;
|
|
198
|
-
files.forEach((filePath) => {
|
|
199
|
-
assetsInfo += `- ${path.basename(filePath)}\n`;
|
|
200
|
-
});
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
else {
|
|
204
|
-
assetsInfo = "\n\nAssets: (None saved)";
|
|
205
|
-
}
|
|
206
|
-
const textDetails = `Figma Context Details:\n\nPrompt Suggestion:\n${context.prompt}\n\nTechnology Configuration:\n\`\`\`json\n${JSON.stringify(context.tech_config, null, 2)}\n\`\`\`${assetsInfo}\n\nHTML:\n\`\`\`html\n${context.HTML}\n\`\`\`\n\nCSS:\n\`\`\`css\n${context.CSS}\n\`\`\``;
|
|
207
|
-
mcpContent.push({ type: "text", text: textDetails });
|
|
208
|
-
return { content: mcpContent };
|
|
209
|
-
}
|
|
210
|
-
catch (error) {
|
|
211
|
-
console.error(`Zapcode: Error during Figma context request: ${error.message}`);
|
|
212
|
-
return {
|
|
213
|
-
isError: true,
|
|
214
|
-
content: [
|
|
215
|
-
{
|
|
216
|
-
type: "text",
|
|
217
|
-
text: `Error getting Figma context: ${error.message}`,
|
|
218
|
-
},
|
|
219
|
-
],
|
|
220
|
-
};
|
|
221
|
-
}
|
|
222
|
-
});
|
|
223
|
-
// Use the Stdio transport
|
|
224
|
-
const transport = new StdioServerTransport();
|
|
225
|
-
await mcpServerInstance.connect(transport);
|
|
226
|
-
console.error("Zapcode: ✅ MCP server connected and listening on stdio.");
|
|
227
|
-
}
|
|
228
|
-
// --- Utility Functions ---
|
|
229
|
-
async function saveAssets(assets, basePath) {
|
|
230
|
-
const savedFiles = [];
|
|
231
|
-
const errors = [];
|
|
232
|
-
const assetsByType = new Map();
|
|
233
|
-
if (!Array.isArray(assets))
|
|
234
|
-
return { savedFiles, errors: ["No assets provided"], assetsByType };
|
|
235
|
-
try {
|
|
236
|
-
for (const asset of assets) {
|
|
237
|
-
if (!asset.type || !asset.name || !asset.data) {
|
|
238
|
-
console.error(`Zapcode: Skipping invalid asset: ${JSON.stringify(asset)}`);
|
|
239
|
-
continue;
|
|
240
|
-
}
|
|
241
|
-
// Create subdirectory for this asset type
|
|
242
|
-
const typeDir = path.join(basePath, asset.type);
|
|
243
|
-
if (!fs.existsSync(typeDir)) {
|
|
244
|
-
fs.mkdirSync(typeDir, { recursive: true });
|
|
245
|
-
}
|
|
246
|
-
// Sanitize filename and add appropriate extension
|
|
247
|
-
const sanitizedName = asset.name.replace(/[^a-z0-9]/gi, "_").toLowerCase();
|
|
248
|
-
const fileName = `${sanitizedName}.${asset.type}`;
|
|
249
|
-
const filePath = path.join(typeDir, fileName);
|
|
250
|
-
// Handle base64-encoded data
|
|
251
|
-
let fileContent;
|
|
252
|
-
if (asset.data.startsWith("data:")) {
|
|
253
|
-
// Extract base64 content from data URL
|
|
254
|
-
const base64Data = asset.data.split(",")[1];
|
|
255
|
-
fileContent = Buffer.from(base64Data, "base64");
|
|
256
|
-
}
|
|
257
|
-
else if (asset.type === "svg") {
|
|
258
|
-
// SVG might be plain text
|
|
259
|
-
fileContent = asset.data;
|
|
260
|
-
}
|
|
261
|
-
else {
|
|
262
|
-
// Assume it's already base64 string
|
|
263
|
-
fileContent = Buffer.from(asset.data, "base64");
|
|
264
|
-
}
|
|
265
|
-
fs.writeFileSync(filePath, fileContent);
|
|
266
|
-
savedFiles.push(filePath);
|
|
267
|
-
// Track assets by type
|
|
268
|
-
if (!assetsByType.has(asset.type)) {
|
|
269
|
-
assetsByType.set(asset.type, []);
|
|
270
|
-
}
|
|
271
|
-
assetsByType.get(asset.type).push(filePath);
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
catch (err) {
|
|
275
|
-
errors.push(`Failed to save assets: ${err.message}`);
|
|
276
|
-
}
|
|
277
|
-
return { savedFiles, errors, assetsByType };
|
|
278
|
-
}
|
|
279
|
-
// --- Main Execution Logic ---
|
|
280
|
-
async function main() {
|
|
281
|
-
const { figmaPort } = parseArgs();
|
|
282
|
-
try {
|
|
283
|
-
// Find an available port starting from the specified port
|
|
284
|
-
const availablePort = await findAvailablePort(figmaPort);
|
|
285
|
-
console.error(`Zapcode: ✅ Found available port ${availablePort}`);
|
|
286
|
-
await startSocketIOServer(availablePort);
|
|
287
|
-
await startMcpServer();
|
|
288
|
-
}
|
|
289
|
-
catch (error) {
|
|
290
|
-
console.error("Zapcode: 💥 Failed to start servers:", error);
|
|
291
|
-
process.exit(1);
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
// --- Graceful Shutdown ---
|
|
295
|
-
let isShuttingDown = false;
|
|
296
|
-
async function shutdown() {
|
|
297
|
-
if (isShuttingDown) {
|
|
298
|
-
// Second Ctrl+C forces immediate exit
|
|
299
|
-
process.exit(0);
|
|
300
|
-
return;
|
|
301
|
-
}
|
|
302
|
-
isShuttingDown = true;
|
|
303
|
-
console.error("\nZapcode: Gracefully shutting down...");
|
|
304
|
-
// Cleanup pending Figma context requests
|
|
305
|
-
figmaContextRequests.forEach((request) => {
|
|
306
|
-
request.reject(new Error("Server shutting down"));
|
|
307
|
-
});
|
|
308
|
-
figmaContextRequests.clear();
|
|
309
|
-
// Forcefully disconnect all Socket.IO clients
|
|
310
|
-
if (io) {
|
|
311
|
-
io.disconnectSockets(true);
|
|
312
|
-
}
|
|
313
|
-
if (connectedFigmaClient) {
|
|
314
|
-
connectedFigmaClient.disconnect(true);
|
|
315
|
-
connectedFigmaClient = null;
|
|
316
|
-
}
|
|
317
|
-
// Force immediate shutdown - don't wait for callbacks
|
|
318
|
-
setImmediate(() => {
|
|
319
|
-
if (io) {
|
|
320
|
-
io.close();
|
|
321
|
-
}
|
|
322
|
-
if (figmaHttpServer) {
|
|
323
|
-
figmaHttpServer.close();
|
|
324
|
-
}
|
|
325
|
-
console.error("Zapcode: Server shutdown complete.");
|
|
326
|
-
process.exit(0);
|
|
327
|
-
});
|
|
328
|
-
// Safety timeout - exit after 500ms no matter what
|
|
329
|
-
setTimeout(() => {
|
|
330
|
-
process.exit(0);
|
|
331
|
-
}, 500);
|
|
332
|
-
}
|
|
333
|
-
process.on("SIGINT", shutdown);
|
|
334
|
-
process.on("SIGTERM", shutdown);
|
|
335
|
-
main();
|
|
2
|
+
(function(_0x3eee45,_0x2e03ea){const _0x5b069b=a0_0x35a9,_0x4bad00=_0x3eee45();while(!![]){try{const _0x23eee0=-parseInt(_0x5b069b(0x1c9))/0x1*(-parseInt(_0x5b069b(0x6f))/0x2)+parseInt(_0x5b069b(0x189))/0x3+parseInt(_0x5b069b(0x10c))/0x4+parseInt(_0x5b069b(0xbb))/0x5*(parseInt(_0x5b069b(0x13d))/0x6)+parseInt(_0x5b069b(0x1aa))/0x7+parseInt(_0x5b069b(0xda))/0x8+parseInt(_0x5b069b(0xd8))/0x9*(-parseInt(_0x5b069b(0xd1))/0xa);if(_0x23eee0===_0x2e03ea)break;else _0x4bad00['push'](_0x4bad00['shift']());}catch(_0x11a8c4){_0x4bad00['push'](_0x4bad00['shift']());}}}(a0_0x25f4,0x84b54));import{createServer as a0_0x187ef1}from'http';import{Server as a0_0x41346c}from'socket.io';import{McpServer}from'@modelcontextprotocol/sdk/server/mcp.js';import{StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';import*as a0_0x2c0b59 from'fs';function a0_0x25f4(){const _0x3fb7ef=['y2XLyxi','z3jVDxbFBM9Kzxm','Bw92zv9UB2rL','q3jLyxrLigeGBMv3ihzHCMLHyMXLignVBgXLy3rPB24GkgrLC2LNBIb0B2TLBIbNCM91CcKGD2L0AcbUyw1LzcbTB2rLCY4','z2v0','t3b0Aw9UywWGywjZB2X1DguGB3iGCMvSyxrPDMuGCgf0Acb3AgvYzsbHC3nLDhmGC2HVDwXKigjLihnHDMvKlIbezwzHDwX0CYb0BYaNyxnZzxrZjYbPBIb0AguGy3vYCMvUDcb3B3jRAw5NigrPCMvJDg9YEs4','wMfWy29KztOGu3vJy2vZC2z1BgX5ihjLy2vPDMvKignVBNrLEhqGzNjVBsbgAwDTys4','u3r5BguGBMfTzsbLlMCUicDqCMLTyxj5lZuWmcC','C2vHCMnO','sgv4ihn0CM9RzsbJB2XVCG','rMLSBcbOzxGGy29SB3iGzs5NlIaJnKi3q0zg','r2v0igz1BgWGChjVCgvYDgLLCYbVzIbHihnWzwnPzMLJiezPz21Hig5Vzgu6ihbVC2L0Aw9UlcbZAxPLlcbMAwXSCYWGC3rYB2TLCYWGzwzMzwn0CYWGy29UC3rYywLUDhmSigf1Dg8TBgf5B3v0ihnLDhrPBMDZlcbVCgfJAxr5lcbIBgvUzcbTB2rLlcb2AxnPyMLSAxr5lcbMB250igrLDgfPBhmSigfUzcbJAgLSzhjLBIbJB3vUDc4GvxnLihrOAxmGywz0zxiGy3jLyxrPBMCGB3iGBw9KAwz5Aw5Nig5VzgvZihrVihzLCMLMEsb0AguGCMvZDwX0lG','rNjHBwuGD2LKDgGGAw4GCgL4zwXZ','C2vHCMnOx25VzgvZ','u2vSzwn0igfUzcbZy3jVBgWGDg8GysbZCgvJAwzPyYbUB2rLigLUiezPz21HlG','u2vYDMvYihnODxr0Aw5NigrVD24','zgf0ytO','CMvWBgfJzq','wMfWy29KztOG4PYfie1ducbZzxj2zxiGy29UBMvJDgvKigfUzcbSAxn0zw5PBMCGB24GC3rKAw8U','ve9qlcbct1rut00SienftLrfuIWGu0nbteuSig9YifnuuKvuq0GGkhrVCcTIB3r0B20P','t3bHy2L0EsaWlteGkgrLzMf1BhqGmsK','mtbcB3LxzeG','y3jLyxrLx2zPz21Hx3jLy3rHBMDSzq','vgv4DcbZDhLSzsbjrcaOzNjVBsbNzxrFzMLNBwfFC3r5BgvZkq','uMvJDgfUz2XLig5HBwu','Aw5KzxHpzG','tMv3igzVBNqGzMfTAwX5','ue5hlcbkueCSifnwrYWGB3iGuergicHKzwzHDwX0ifborYK','tMv3ihzHBhvLicHOzxGGC3rYAw5NigzVCIbdt0XpuIK','tg9HzcbHzgrPDgLVBMfSiezPz21HihrVB2XZigzVCIbHihnWzwnPzMLJihrHC2SGy2f0zwDVCNKUienHBgWGDgHPCYbIzwzVCMuGCgvYzM9YBwLUzYb0yxnRCYb0Agf0ig5LzwqGC3bLy2LHBgL6zwqGDg9VBhmUcGPbDMfPBgfIBguGy2f0zwDVCMLLCZOklsbWywDLCYaGicaGiokgKIbJCMvHDgvFzMLNBwfFCgfNzsWGBgLZDf9MAwDTyv9WywDLCYWGC2v0x2n1CNjLBNrFCgfNzqOTihnOyxbLCYaGicaG4OAsignYzwf0zv9MAwDTyv9MCMfTzsWGy3jLyxrLx2zPz21Hx3jLy3rHBMDSzsWGy3jLyxrLx2zPz21Hx3rLEhqSignYzwf0zv9MAwDTyv9LBgXPChnLcI0GC3r5BgLUzYaGicdIHPiGC2v0x2zPBgXFy29SB3iSihnLDf9ZDhjVA2uSihnLDf9JB3jUzxjFCMfKAxvZlcbZzxrFB3bHy2L0EsWGywrKx2vMzMvJDcWGC2v0x2DYywrPzw50x2zPBgWSihnLDf9PBwfNzv9MAwXScI0GBgf5B3v0icaGicdIHPiGC2v0x2f1Dg9FBgf5B3v0lcbTB3zLx25VzguSihjLC2L6zv9UB2rLlcbHBgLNBL9UB2rLCYWGzgLZDhjPyNv0zv9UB2rLCYWGC2v0x2nVBNn0CMfPBNrZlcbZzxrFBgf5B3v0x3nPEMLUzWOTig5VzgvZicaGicaG4OAsihjLBMfTzv9UB2rLlcbKzwXLDgvFBM9KzsWGz3jVDxbFBM9KzxmSihvUz3jVDxbFBM9KzxmSigr1CgXPy2f0zv9UB2rLlcbZzxrFDMLZAwjPBgL0EsWGBg9JA19UB2rLlcbZzwfYy2HFBM9KzxmSihnLBgvJDf9UB2rLlcbNzxrFBM9Kzv90CMvLcI0GDgv4DcaGicaGicdIHPiGDxbKyxrLx3rLEhrFy29UDgvUDcWGC2v0x3rLEhrFChjVCgvYDgLLCWOTignVBxbVBMvUDhmG4OAsigDLDf9MAwDTyv9JB21WB25LBNrZlcbJCMvHDgvFy29TCg9Uzw50x2LUC3rHBMnLlcbHChbSEv90zxH0x3n0EwXLlcbHChbSEv9JB2XVCL9ZDhLSzsWGy3jLyxrLx2nVBxbVBMvUDcWGy3jLyxrLx2nVBxbVBMvUDf9ZzxqSihnLDf9JB21WB25LBNrFChjVCgvYDhKklsbZDhLSzxmGicaGiokgKIbNzxrFzMLNBwfFC3r5BgvZlcbJCMvHDgvFy29SB3jFC3r5BguSignYzwf0zv90zxH0x3n0EwXLlcb1CgrHDgvFy29SB3jFC3r5BguSihvWzgf0zv90zxH0x3n0EwXLcI0GDMfYAwfIBgvZicdIHPiGz2v0x2XVy2fSx3zHCMLHyMXLCYWGy3jLyxrLx3zHCMLHyMXLx2nVBgXLy3rPB24SignYzwf0zv92yxjPywjSzsWGC2v0x3zHCMLHyMXLx3zHBhvLlcbHChbSEv92yxjPywjSzqOTigv4Cg9YDcaGicaG4OAsigv4Cg9YDf9UB2rLcGPoB3rLoIbMBgf0DgvUlcbIBgvUzcbTB2rLCYWGEI1VCMrLCIWGzgv0ywnOigLUC3rHBMnLlcbSAw5LCYWGyw5KigrLBgv0zsbZDhLSzsbHCMuGyxzHAwXHyMXLihzPysbLEgvJDxrLx2zPz21Hx2nVzguU','qxbWBhKGysbSB2nHBcb0zxH0ihn0EwXLihrVigeGDgv4DcbUB2rLlG','vg9WlxjPz2H0ihjHzgL1CW','Dhj1zsb0BYbZAg93lcbMywXZzsb0BYbOAwrLicHVBwL0ihrVihrVz2DSzsK','rML4zwqGD2LKDgGGkgvUywjSzxmGDgv4Dcb3CMfWCgLUzYK','rgvSzxrLigeGrMLNBweGBM9Kzs4','ChvZAa','t3b0Aw9UywWGBM9Kzsbjrcb0BYbHBgLNBIb0BYaOB3rOzxj3AxnLigfSAwDUCYb0BYbIB3vUzgLUzYbIB3GGB2yGC2vSzwn0Aw9Ukq','qxjYyxKGB2yGBM9KzsbjrhmGDg8Gz3jVDxa','u2v0igfKDMfUy2vKihrLEhqGChjVCgvYDgLLCYbVBIbHBIbLEgLZDgLUzYb0zxH0ig5Vzgu6igXLDhrLCIbZCgfJAw5NlcbSAw5LigHLAwDODcWGCgfYywDYyxbOihnWywnPBMCSigLUzgvUDcWGDgv4DcbJyxnLicHvufbfuI9mt1DfuI9usvrmrsKSigfUzcb0zxH0igrLy29YyxrPB24GkfvorevsteLors9tvfjjs0vusfjpvuDiks4','rfjpuf9tsefet1CSieLotKvsx1niqurpvYWGB3iGtefzrvjFqKXvuG','BwTKAxjtEw5J','u2HHzg93ignVBg9YigHLEcaOzM9YihnOywrVDYb0ExbLCYK','r2fWigjLDhDLzw4Gy2HPBgrYzw4GkgL0zw1tCgfJAw5Nkq','nZbvsfn6z3q','C2v0x2XHEw91Df9ZAxPPBMC','tw9KzsbUyw1LCYbLlMCUifSNtgLNAhqNlcaNrgfYAYDDicHMAxjZDcbPCYbKzwzHDwX0kq','tMv3igzVBNqGD2vPz2H0','wMfWy29KztOGrxjYB3iGy3jLyxrPBMCGrMLNBweGu29JA2v0lKLpihnLCNzLCJOG','y3jLyxrLx2zPz21Hx3rLEhq','y2XVC2u','mtqYnZC3ohbRu1HlsG','vxbKyxrLigfUigv4Axn0Aw5NigXVy2fSihbHAw50l2nVBg9Yihn0EwXLlG','mZm3mdi4mgHhvfzIBG','u2v0ihrOzsbZDhjVA2uGkgjVCMrLCIKGB2yGysbgAwDTysbUB2rLlG','C2v0x2zPBgXFy29SB3i','D3jPDgvgAwXLu3LUyW','wMfWy29KztOGsw5PDgLHBgL6Aw5Nie1ducbZzxj2zxiGzM9Yifn0zgLVihrYyw5ZCg9YDc4','yxnZzxrZqNLuExbL','DxbKyxrLx3rLEhrFy29UDgvUDa','CYaOy29TBwfUzdOG','C2v0x2nVBxbVBMvUDf9WCM9Wzxj0Eq','zxHWB3j0','zNjVBq','zgLZy29UBMvJDa','Cgf5Bg9Hza','y29UC3rYDwn0B3i','zw51Bq','r3jVDxaGBgf5zxiGBMfTzq','yxnZzxrZ','Bg9HzgvK','Bgf5B3v0','BgvMDcWGy2vUDgvYlcbYAwDODcWGB3iGANvZDgLMAwvK','u3r5BguGsuqGkgzYB20Gz2v0x2zPz21Hx3n0EwXLCYK','tMfTzsbMB3iGDgHLig5LDYbWywDL','u2v0ihrOzsbMAwXSignVBg9Yig9MigfUEsbgAwDTysbUB2rLlG','C3r5BgvZ','wMfWy29KztOGrMLNBweGsfruucbZzxj2zxiGzxjYB3i6ia','vMfYAwfIBguGsuqGDg8GyMLUza','BMfTzq','C3r5BgLUzW','tMv3igXHEwvYig5HBwu','ruferfjjtLvtrq','u2v0ihrOzsbVCgfJAxr5ig9MigeGrMLNBweGBM9KzsaOmca9igLUDMLZAwjSzsWGmsa9igz1BgX5ihzPC2LIBguPlG','qxjYyxKGB2yGq09nue9oru5uig5VzguGsurZihrVignVBwjPBMu','DMfYAwfIBgvZ','tMv3ifKGCg9ZAxrPB24','q3jLyxrLigeGCMvJDgfUz2XLihnOyxbLigLUiezPz21HlIbvC2uGzM9YigjHy2TNCM91BMrZlcbJyxjKCYWGAw5WDxrZlcbKAxzPzgvYCYWGzxrJlG','tMv3ihrLEhqGy29UDgvUDa','ywXYzwfKEv9SB2fKzwq','sgvPz2H0igLUihbPEgvSCW','zMLUzeLUzgv4','u3r5BguGzgvZy3jPChrPB24','u2v0igfUigLTywDLigfZihrOzsbMAwXSig9MigeGrMLNBweGBM9Kzsb1C2LUzYbIyxnLnJqGAw1Hz2uGzgf0ys4','vgv4DcbUB2rLieLe','z2v0x2XVy2fSx3zHCMLHyMXLCW','BNvTyMvY','C2v0x2f1Dg9FBgf5B3v0','jYb3yxmGywXYzwfKEsbSB2fKzwqUifrVB2XZoIa','kcGOlISPkYKRksSK','qMf0y2GTy3jLyxrLigeGy29TCgXLDguGD2LYzwzYyw1LigzYB20GysbZDhj1y3r1CMvKig5VzguGBgLZDc4GrwfJAcbUB2rLignHBIbYzwzLCMvUy2uGysbWCMv2Aw91C2X5ignYzwf0zwqGBM9Kzsb2AweGDgvTCeLKl3bHCMvUDeLKlIbvC2uGDgHPCYb0BYbJCMvHDguGyw4Gzw50AxjLihnJCMvLBIbSyxLVDxqGAw4GysbZAw5NBguGy2fSBcbPBNn0zwfKig9MignHBgXPBMCGAw5KAxzPzhvHBcb0B29SCYbYzxbLyxrLzgX5lG','zxHPC3rZu3LUyW','DgvTCeLKig9MihrOzsbWyxjLBNqGBM9Kzq','mJi4mdGWDwzIANDq','tM9Kzsbjrcb0BYbKDxbSAwnHDgu','rMLNBweGCgX1z2LUigLZig5VDcbJB25Uzwn0zwqUifbSzwfZzsbVCgvUihrOzsbAyxbdB2rLihbSDwDPBIbPBIbgAwDTys4','C2v0x2nVCM5LCL9YywrPDxm','C2v0x2DYywrPzw50x2zPBgW','t3jKzxjLzcbHCNjHEsbVzIbUB2rLigrLC2nYAxb0B3jZ','C2v0','tw9Kzsbjrcb0BYbZzxqGDMfSDwuGzM9YicHKzwzHDwX0CYb0BYbJB2XSzwn0Aw9UigrLzMf1BhqGBw9KzsK','q291BNrLCIbHEgLZoIbZDgfYDcWGy2vUDgvYlcbLBMqSigjHC2vSAw5L','qMfZzty0igvUy29KzwqGAw1Hz2uGzgf0ysaOD2L0AcbVCIb3AxrOB3v0igrHDge6ihbYzwzPEcK','C2v0x3zPC2LIAwXPDhK','wMfWy29KztOGvgHLiezPz21HihbSDwDPBIbTyxKGBM90igjLigfIBguGDg8Gy29UBMvJDcb0BYb0AgLZihbVCNqU','rgLZDhjPyNv0zsbUB2rLCYb3AxrOigvXDwfSihnWywnPBMCGyMv0D2vLBIb0AgvTlIbxB3jRCYbOB3jPEM9UDgfSBhKGB3iGDMvYDgLJywXSEs4','rM9UDcbMyw1PBhKGzs5NlIbjBNrLCG','B2jQzwn0','CMvXDwvZDeLK','C3zN','vgv4DcbOzxGGy29SB3iGzs5NlIaJmZmZmZmZ','zxHWB3j0x25Vzgu','sgv4ignVBg9YiguUzY4Gi0zgntCZmW','y3jLyxrLx2zPz21Hx2zYyw1L','vw5NCM91CcbHigDYB3vWig5VzguSig1VDMLUzYbHBgWGy2HPBgrYzw4GDg8GDgHLihbHCMvUDcbJB250ywLUzxiU','CgfNzxm','B3b0Aw9UywW','y29Kzq','yxbWBhK','C3rHCNrZv2L0Aa','Dhj1zsb0BYbSB2nRlcbMywXZzsb0BYb1BMXVy2SGkg9TAxqGDg8GDg9Nz2XLkq','yxbWBhLFDMfYAwfIBgu','sgv4ignVBg9YigzVCIb0AgLZihn0B3a','y3jLyxrLx3DPCMvMCMfTzq','CMvZAxPLx25Vzgu','vxbKyxrLihrOzsb0zxH0ignVBNrLBNqGyw5Kl29Yihr5Cg9NCMfWAhKGB2yGyw4GzxHPC3rPBMCGDgv4DcbUB2rLlIbdyw4Gy2HHBMDLihrLEhqGC3rYAw5NlcbMB250igzHBwLSEsWGzM9UDcb3zwLNAhqSigzVBNqGC2L6zsWGyw5KignVBg9YigLUzgvWzw5Kzw50BhKU','ywrKx2vMzMvJDa','rMLNBweGCgfNzsbUB2rLieLeicHVChrPB25HBcbPzIbWywDLtMfTzsbNAxzLBIK','q3jLyxrLigfUigvSBgLWC2uVy2LYy2XLihnOyxbLigLUiezPz21HlIbvC2uGzM9Yigf2yxrHCNmSigLJB25ZlcbZDgf0DxmGAw5KAwnHDg9YCY4','z2v0x2zPz21Hx3nLBgvJDgLVBG','q29YBMvYihjHzgL1CYbPBIbWAxHLBhm','rM9UDcbMyw1PBhKGkgrLzMf1BhqGsw50zxiP','y3jLyxrLx2nVBg9Yx3n0EwXL','yxbWBhLFy29SB3jFC3r5Bgu','AM9PBG','q29TBwfUzcbUyw1LiguUzY4Gy3jLyxrLx2zPz21Hx2zYyw1L','cGPive1moGPGygbODg1ScG','rMfPBgvKihrVihnHDMuGyxnZzxrZoIa','qMLUzcbHihzHCMLHyMXLihrVigeGBM9KzsbWCM9Wzxj0Es4Gu3vWCg9YDhmGzMLSBcbJB2XVCIWGB3bHy2L0EsWGD2LKDgGSigHLAwDODcWGy29YBMvYihjHzgL1CYWGCgfKzgLUzYWGz2fWlG','z2v0x2zPz21Hx2nVBxbVBMvUDhm','CgfZC3rOCM91z2G','ugfYzw50ig5VzguGsuqGkg9WDgLVBMfSkq','mtq1otC0A3risenV','wMfWy29KztOGrw1PDhrPBMCGj3jLCxvLC3rFy29UDgv4DcCGDg8GrMLNBweGkeLeoIa','zMLNBwfFy29TBwfUzf9YzxnWB25Zzq','ms4YlJa','rxjYB3iGz2v0DgLUzYbgAwDTysbJB250zxH0oIa','C3rYAw5NAwz5','r3jVDxaGBM9Kzsbjrcb0BYb1BMDYB3vW','Aw1Hz2uVCg5N','rKLyruqSieHvrYWGB3iGrKLmta','se9ssvPptLrbtcbVCIbwrvjusunbta','zw1PDa','zxHPDa','zgvZy3jPyMu','C3bSAxq','rw5HyMXLief1Dg8Gtgf5B3v0ig9UigeGzNjHBwuG4OcuigXPA2uGq1ntigzSzxHIB3GUifnLDcbKAxjLy3rPB24SihbHzgrPBMCSigDHCcWGyw5KigfSAwDUBwvUDc4','cGPuzwnOBM9SB2D5ienVBMzPz3vYyxrPB246cMbGygPZB24k','zgLZDhjPyNv0zv9UB2rLCW','ywrK','rM9UDcb3zwLNAhqGzs5NlIbszwD1BgfYlcbcB2XK','Dg9VBa','zhvWBgLJyxrLx25Vzgu','vgfYz2v0ig5VzguGsuq','r2v0ihrOzsbMDwXSig5VzguGDhjLzsbVzIbHiezPz21Hig5VzguGD2L0AcbHBgWGy2HPBgqGsurZicH1C2vMDwWGzM9YigzPBMrPBMCGBM9KzsbjrhmGDg8Gy29SB3jPEMuGBMvZDgvKigvSzw1LBNrZks4','qMfJA2DYB3vUzcbOzxGGy29SB3iGzs5NlIaJrKzgrKzg','wMfWy29KztOGrxjYB3iGzhvYAw5NiezPz21HignVBNrLEhqGCMvXDwvZDdOG','wMfWy29KztOGrxjYB3iGlsbgAwDTysbWBhvNAw4GBM90ignVBM5Ly3rLzc4','wMfWy29KztOGqwXSB3DLzcbWB3j0CZOG','DxbKyxrLx3rLEhrFC3r5Bgu','cGPbC3nLDhm6icHoB25LihnHDMvKkq','tgLZDcbHBgWGCgfNzxmGAw4GDgHLign1CNjLBNqGrMLNBweGzg9JDw1LBNqU','zM9YrwfJAa','q3jLyxrLigeGBMv3ihzHCMLHyMXLicHKzxnPz24GDg9Rzw4PigLUigeGy29SBgvJDgLVBI4','BgLZDgvU','twf4igrLChrOihrVihrYyxzLCNnLicHKzwzHDwX0idqP','wsbVzMzZzxqGzNjVBsbVCMLNAw5HBcaOzgvMyxvSDcaXmcK','y3jLyxrLx2nVBxbVBMvUDf9Zzxq','AgfZ','y3jLyxrLx2nVBxbVBMvUDf9PBNn0yw5Jzq','DxbKyxrLx2nVBg9Yx3n0EwXL','vw5PzM9YBsbJB3jUzxiGCMfKAxvZicH1C2uGDgHPCYbpuIbPBMrPDMLKDwfSignVCM5LCNmP','teLorufslcbsqurjquWSig9Yiefor1vmqvi','C2v0x3rLEhrFChjVCgvYDgLLCW','u2v0ig9YihvWzgf0zsb0AguGDMfSDwuGB2yGysb2yxjPywjSzsbMB3iGysbZCgvJAwzPyYbTB2rLlG','zgvSzxrL','iezPBgvZoGO','uhjPBwfYEsbHEgLZoIbZDgfYDcWGy2vUDgvYlcbLBMqSihnWywnLlwjLDhDLzw4','Dgv4Da','zMLNBweTy3r4lq','vgv4DcbUB2rLieLeihrVihvWzgf0zq','B25Jzq','Bg9JA19UB2rL','q29TCg9Uzw50igLUC3rHBMnLig5VzguGsuq','qM90Dg9TlwXLzNqGCMfKAxvZ','BwvZC2fNzq','sgv4ignVBg9YiguUzY4GiZzcn0ngrG','tgf5zxiGBMfTzsaOzgvMyxvSDhmGDg8Gy29UDgvUDcK','y3jLyxrLx2nVBxbVBMvUDa','C2vSzwn0x25Vzgu','AxnbyNnVBhv0zq','rwXSAxbZzsbUyw1L','vg9WlwXLzNqGCMfKAxvZ','tM9Kzsb0ExbLigzPBhrLCIbLlMCUiezsqu1flcburvHulcbsrunuqu5hteuSienptvbptKvovcWGsu5tvefoq0u','u3bHy2uGyMv0D2vLBIbWyxjHz3jHCgHZ','tM9Kzsbjrcb0BYbLEhbVCNq','uhjVCgvYDhKGBMfTzsbLlMCUicDtDgf0zsCSicDtAxPLjYWGj1r5CguN','tgv0DgvYihnWywnPBMCGAw4GCgL4zwXZ','ueLyruXtlcbqrvjdru5ulcbVCIbbvvrpicHKzwzHDwX0ifbjwevmuYK','tMv3ig9WywnPDhKGmc0X','Dg9mB3DLCKnHC2u','tM9Kzsbjrcb0BYbNzxqGDhjLzsbMB3i','vMfYAwfIBguGBMfTzsbLlMCUicDWCMLTyxj5lZuWmcC','z2v0x2zPz21Hx2nVBNrLEhq','wMfWy29KztOGqxr0zw1WDgLUzYb0BYbZDgfYDcbtB2nRzxqUsu8GC2vYDMvYigzVCIbgAwDTysbVBIbWB3j0ia','yxjNDG','u2v0ihjLC2L6zsbJB25ZDhjHAw50CYaOCgLUBMLUzYKGzM9YigeGBM9Kzsb3AxrOAw4GAxrZihbHCMvUDcbMCMfTzs4Gq29UDhjVBhmGAg93ihrOzsbUB2rLihjLC3bVBMrZihDOzw4GDgHLihbHCMvUDcbPCYbYzxnPEMvKlG','tMv3igHLAwDODcbPBIbWAxHLBhm','mZa5ntu4zwvcA3Dv','q3jLyxrLigeGDgv4DcbUB2rLigLUiezPz21HlIbvC2uGzM9YigXHyMvSCYWGAgvHzgLUz3mSihbHCMfNCMfWAhmSigj1DhrVBIb0zxH0lcbLDgmU','rM9UDcbZAxPLigLUihbPEgvSCW','tMv3ihn0EwXLig5HBwu','C2f2zwrgAwXLCW','ywXPz25FBM9Kzxm','sw5PDgLHBcb2ywX1zsaOAgv4igzVCIbdt0XpuIWGBNvTyMvYigzVCIbovu1crviSigv0yY4P','zgLZy29UBMvJDfnVy2TLDhm','vw5PzM9YBsbWywrKAw5NicHVDMvYCMLKzxmGAw5KAxzPzhvHBcbWywrKAw5NCYK','q29SBgvJDgLVBIbUyw1LiguUzY4Gj0nVBg9YCYCSicDtCgfJAw5NjW','BgLZDf9MAwDTyv9WywDLCW','C2v0x2n1CNjLBNrFCgfNzq','yMfZzw5HBwu','vMfYAwfIBguGy29SBgvJDgLVBIbjra','wMfWy29KztOGvxnLigXVywrFDg9VBf9JyxrLz29YEsb0BYb1BMXVy2S6ihbHz2vZlcbZAgfWzxmSihn0EwXPBMCSigXHEw91DcWGBM9KzxmSihrLEhqSignVBxbVBMvUDhmSihn0EwXLCYWGDMfYAwfIBgvZlcbLEhbVCNq','CMvQzwn0','C2v0x2nVBNn0CMfPBNrZ','Dw5PB24','tMv3igHLEcbJB2XVCG','AxnbCNjHEq','z2v0x25VzgvFChjVCgvYDgLLCW','BM9Kzxm','r2v0ihrOzsbJDxjYzw50BhKGC2vSzwn0zwqGBM9KzxmGAw4GrMLNBweU','q3jLyxrLigeGBMv3igXVy2fSihbHAw50l2nVBg9Yihn0EwXLigLUihrOzsbgAwDTysbKB2n1BwvUDc4','u2v0igeGDMfYAwfUDcbWCM9Wzxj0EsbVBIbHignVBxbVBMvUDcbPBNn0yw5JzsbLlMCUihn3AxrJAcbtDgf0zsbMCM9TierLzMf1BhqGDg8Gsg92zxiU','y29UDgv4Df9YzxnWB25Zzq','C2XPy2u','zMLNBweTy21Klq','rNjHBwuGAgvPz2H0igLUihbPEgvSCW','u2HHzg93ig9WywnPDhKGmc0XicHKzwzHDwX0idaUmJuP','C2v0x29WywnPDhK','yMfZzty0','vg9VBcbJyxrLz29YEsb0BYbSB2fK','mJa2mJGWmLHuwMHYAq','rNjHBwuGB3iGz3jVDxaGBM9Kzsbjrcb0BYbJB252zxj0','zxHLy3v0zv9MAwDTyv9JB2rL','q29TCg9Uzw50ig5HBwu','ls1MAwDTys1WB3j0','q2f0zwDVCNKGjW','zMLNBwfFy29TBwfUza','qxjYyxKGB2yGBM9KzsbjrhmGDg8GzgLZDhjPyNv0zsaOBwLUAw11BsaZigzVCIbNyxaGzgLZDhjPyNv0Aw9Ukq','vg9WihbHzgrPBMC','rxHLy3v0zsbYyxCGrMLNBweGugX1z2LUiefqssbkyxzHu2nYAxb0ignVzguGzgLYzwn0BhKGAw4GrMLNBweUifrOzsbJB2rLihj1BNmGAw4GDgHLihbSDwDPBIDZig1HAw4GDgHYzwfKihDOzxjLicDMAwDTysCGAxmGysbNBg9IywWUifvZzsb0AgLZigzVCIbJB21WBgv4igrLC2LNBNmSigXVB3bZlcbNCMfKAwvUDhmSihzHCMLHyMXLCYWGCM90yxrPB25ZlcbIB29SzwfUig9WzxjHDgLVBNmSihjLB3jKzxjPBMCGkhbHCMvUDc5PBNnLCNrdAgLSzcKSigzSyxr0zw5PBMCGkg5VzguUzMXHDhrLBIGPksWGyMXLBMqGBw9KzxmGkg5VzguUyMXLBMrnB2rLksWGzgv0ywnOAw5NigLUC3rHBMnLCYaOAw5ZDgfUy2uUzgv0ywnOrNjVBunVBxbVBMvUDcGPksWGy3jLyxrPBMCGBgLUzxmSigrLBgv0Aw5Nihn0EwXLCYaOC3r5BguUCMvTB3zLkcKPlcbVCIbHBNL0AgLUzYbUB3qGy292zxjLzcbIEsbPBMrPDMLKDwfSihrVB2XZlIbgB3iGyxn5BMmGB3bLCMf0Aw9UCYaOBgLRzsbSB2fKrM9UDefZEw5JksWGD3jPDguGyxn5BMmGy29KzsdIGjqGAxqGAxmGyxv0B21HDgLJywXSEsbHD2fPDgvKlIbszxr1CM5ZihrOzsbYzxn1BhqGB2yGDgHLigXHC3qGzxHWCMvZC2LVBIbVCIbHihn1y2nLC3mGBwvZC2fNzs4','wMfWy29KztOG4PYfiezPz21HifnVy2TLDc5jtYbZzxj2zxiGAxmGBgLZDgvUAw5Nig9UihbVCNqG','BM93','u3rYB2TLihDPzhrOigLUihbPEgvSCYaOzgvMyxvSDcaXkq','yxjYyxK','ueLyruXtig9YifbfuKnftLqGkgrLzMf1BhqGueLyruXtkq','wMfWy29KztOGug9YDca','uMLNAhqGCgfKzgLUzW','tMv3ifGGCg9ZAxrPB24','t3bHy2L0Esb2ywX1zsaWlte','y3DK','v2LKDgGGAw4GCgL4zwXZ','t1jjr0LoquWSifvquevslcbmt1DfuIWGB3iGveLuteu','C3rYAw5N','rxHWB3j0igeGrMLNBweGBM9KzsbHCYbqtKCSiePqrYWGu1zhlcbVCIbqreyUifjLDhvYBNmGyMfZzty0igvUy29KzwqGAw1Hz2uGzgf0ys4','wMfWy29KztOGrMLNBweGCgX1z2LUigrPC2nVBM5Ly3rLzdOG','ugfPBNqGC3r5BguGsuqGkgzYB20Gz2v0x2zPz21Hx3n0EwXLCYK','yM9VBgvHBG','rhvWBgLJyxrLigeGrMLNBweGBM9Kzs4GuMv0DxjUCYb0AguGBMv3ig5VzguGsuqUie9WDgLVBMfSBhKGB2zMC2v0ig9YihnLDcbHyNnVBhv0zsbWB3nPDgLVBI4','igLZig5VDcbPBIb0AguGywXSB3DLzcbWB3j0CYbSAxn0lG','tgLZDcbHBgWGBg9JywWGDMfYAwfIBguGy29SBgvJDgLVBNmGyw5KihzHCMLHyMXLCYaOzgvZAwDUihrVA2vUCYKGAw4GDgHLigrVy3vTzw50lG','y3jLyxrLx3zHCMLHyMXLx2nVBgXLy3rPB24','mwrWr05Pwq','qwjZB2X1DguGwsbWB3nPDgLVBIbMB3iGDgHLigr1CgXPy2f0zsaOB3zLCNjPzgvZig9MzNnLDfKP','rNjHBwuGBMfTzq','q29TCg9Uzw50ihnLDcbUyw1L','Dg9tDhjPBMC','EMfWy29Kzs1MAwDTys1Ty3aTC2vYDMvY','y29TCg9Uzw50CW','yxbWBhLFDgv4Df9ZDhLSzq','zxjYB3i','rM9UDcb3zwLNAhqGzs5NlIbszwD1BgfYlcbnzwrPDw0SiejVBgq','wcbVzMzZzxqGzNjVBsbVCMLNAw5HBcaOzgvMyxvSDcaXmcK','wsbWB3nPDgLVBG','u2HHzg93ifKGB2zMC2v0icHKzwzHDwX0idqP','vgvTCg9Yyxj5ieLeihnVigXHDgvYig5VzgvZignHBIbYzwzLCMvUy2uGDgHPCYbHCYbWyxjLBNrjza','tMv3ihDPzhrOigLUihbPEgvSCW','cMbGya','Bg9Hzf90B29Sx2nHDgvNB3j5','tevgvcWGuKLhsfqSienftLrfuIWGu0nbteuSig9YifnuuKvuq0GGkgXLzNqRCMLNAhqP','igLZigfSCMvHzhKGAw4GDxnLlcb0CNLPBMCGBMv4DcbHBgXVD2vKihbVCNqUlI4','tw92zsbHiezPz21Hig5VzguGDg8GBMv3ihGVEsbJB29YzgLUyxrLCY4','sw52ywXPzcbJB250zxH0x3jLC3bVBNnLigzYB20GrMLNBwe','tw9KzsbjrcaOzgvMyxvSDhmGDg8Gy29SBgvJDgLVBIbKzwzHDwX0ig1VzguP','rM9UDcbZAxPLigLUihbPEgvSCYaOzgvMyxvSDcaXncK','BgvUz3rO','wcbWB3nPDgLVBG','rMLNBweGy29TBwfUzcb0Aw1LzcbVDxqGywz0zxiG','mtq1odq2mLnZBKHJEG','u2HHzg93ifGGB2zMC2v0icHKzwzHDwX0idaP','C2v0x3n0CM9Rzq','tgLTAxqGC2vHCMnOihrVihn1yNrYzwuGB2yGDgHPCYbUB2rLicHKzwzHDwX0oIbJDxjYzw50ihbHz2uP','uMv0CMLLDMvZihrOzsbZzwXLy3rLzcbgAwDTysbMCMfTzsbJB250zxH0icHive1mlcbdu1mSihbYB21WDcWGAw1Hz2uSigfZC2v0CYKUifnHDMvZigfUEsbWCM92AwrLzcbHC3nLDhmGDg8GDgHLigXVy2fSigrPCMvJDg9YEs4GqwnJzxb0CYbHBIbVChrPB25HBcaNyxnZzxrZx3bHDgGNihbHCMfTzxrLCIb0BYbZCgvJAwz5ihDOzxjLigfZC2v0CYbZAg91BgqGyMuGC2f2zwqU','tM9Kzsbjrcb0BYbPBNnWzwn0','qwXPz24GBxvSDgLWBguGBM9KzxmGCMvSyxrPDMuGDg8GzwfJAcbVDgHLCIbVCIb0BYbHihjLzMvYzw5JzsbUB2rLlIbbBgLNBM1LBNqGB3b0Aw9UCZOGtevgvcWGq0vovevslcbssuDivcWGve9qlcbnsureteuSiejpvfrpts4','wMfWy29KzsbgAwDTysbnq1a','C2HHCgvZ','u2v0ignVCM5LCIbYywrPDxmGB24GysbYzwn0yw5NBguGB3iGzNjHBwuU','y3jLyxrLx3rLEhrFC3r5Bgu','q29UDMvYDcbHBIbLEgLZDgLUzYbguKfnrsbVCIbhuK9vucbUB2rLigLUDg8GysbYzxvZywjSzsbgAwDTysbJB21WB25LBNqU','ugfYzw50ig5VzguGsuqGkg9WDgLVBMfSlcbKzwzHDwX0CYb0BYbJDxjYzw50ihbHz2uP','DhLWzq','u2v0ihrOzsbZAxPPBMCGBw9KzsbVzIbHig5VzguGAw4Gyw4Gyxv0BY1SyxLVDxqGy29UDgv4DdOGrKLyruqGkhnWzwnPzMLJihnPEMuPlcbivuCGkhnOCMLUAYb0BYbJB250zw50ksWGB3iGrKLmtcaOzxHWyw5KihrVigzPBgWGCgfYzw50ks4','Aw5ZAwrLlcbVDxrZAwrLlcbVCIbJzw50zxiGkgrLzMf1BhqGAw5ZAwrLkq','C2v0x2LTywDLx2zPBgW','C2v0x3zHCMLHyMXLx3zHBhvL','tevgvcWGq0vovevslcbssuDivcWGve9qlcbnsureteuSig9Yiejpvfrptq','wMfWy29KztOGv2fYBMLUzYaTifbVCNqG','wMfWy29KztOGrMLNBweGu29JA2v0lKLpigvYCM9YoIa','CMvUyw1Lx25Vzgu','ktOk','CMvZB2X2zq','rMLNBweGCgfNzsbUyw1LicHVChrPB25HBcbPzIbWywDLswqGz2L2zw4P','tM9Kzsbjra','vgv4DcbJB250zw50ihrVigrPC3bSyxK','z2v0x25VzgvFDhjLzq','Aw5JBhvKzxm','ugfYzw50igzYyw1Ll2DYB3vWig5VzguGsuq','sfrnta','lI4U','y3jLyxrLx2zPz21Hx2vSBgLWC2u','uMvZAxPLigeGrMLNBweGBM9Kzsb0BYbUzxCGzgLTzw5ZAw9UCY4','yxnZzxrZx3bHDgG','zgvSzxrLx25Vzgu','Aw1Hz2u','ChjVBxb0','cMbGyaOkq1ntoGPGygbJC3mk','twf4Aw11BsbYzxn1BhrZihrVihjLDhvYBIaOzgvMyxvSDca1mcK','u2v0igeGz3jHzgLLBNqGzMLSBcbVBIbHiezPz21Hig5VzguUifn1ChbVCNrZieXjtKvbuIWGuKfesufmlcbHBMqGqu5hvuXbuIbNCMfKAwvUDhmGD2L0AcbTDwX0AxbSzsbJB2XVCIbZDg9WCY4','ihrVB2XZigfYzsbUB3CGyxzHAwXHyMXLoIa','y3jLyxrLx3zHCMLHyMXL','tgLUzsbOzwLNAhqGAw4GCgL4zwXZ','y29UBMvJDgLVBG','qxbWBhKGysbSB2nHBcbWywLUDc9JB2XVCIbZDhLSzsb0BYbHig5VzguNCYbMAwXSlG','Dw5NCM91Cf9UB2rLCW','zgf0yq','y29UBMvJDgvK','DgvJAf9JB25MAwC','r3jHzgLLBNqGy29SB3iGC3rVChm','z2v0x2zPz21Hx3n0EwXLCW','ugXHy2uGyw4GAw5ZDgfUy2uGB2yGyw4GzxHPC3rPBMCGrMLNBweGy29TCg9Uzw50lG','qw5NBguGAw4GzgvNCMvLCYbMB3iGteLorufsigDYywrPzw50icHKzwzHDwX0idKWkq','vxbKyxrLigfUigv4Axn0Aw5NigXVy2fSihrLEhqGC3r5BguU'];a0_0x25f4=function(){return _0x3fb7ef;};return a0_0x25f4();}import*as a0_0x1fb13f from'path';import{z}from'zod';const DEFAULT_FIGMA_SOCKET_IO_PORT=0x8080,ALLOWED_PORTS=[0xbb8,0xbb9,0x1388,0x1435,0x1f40,0x1f90,0x22b8,0x2328,0x7d2c,0x8080,0x8081,0x8082,0x8083,0x9c40,0xc350,0xd431,0xea60,0xef32,0xf230,0xf618];let figmaHttpServer=null,io=null,connectedFigmaClient=null;const figmaContextRequests=new Map();function parseArgs(){const _0x5c5851=a0_0x35a9,_0x4952cd=process[_0x5c5851(0x186)][_0x5c5851(0x1a3)](0x2);let _0x54632=DEFAULT_FIGMA_SOCKET_IO_PORT;const _0x22f547=_0x4952cd[_0x5c5851(0x100)](_0x430983=>_0x430983===_0x5c5851(0x1ae));if(_0x22f547!==-0x1&&_0x4952cd[_0x22f547+0x1]){const _0x32edbe=parseInt(_0x4952cd[_0x22f547+0x1],0xa);!isNaN(_0x32edbe)&&(!ALLOWED_PORTS[_0x5c5851(0x8b)](_0x32edbe)&&(console['error'](_0x5c5851(0x82)+_0x32edbe+_0x5c5851(0x1c6)),console[_0x5c5851(0x1d1)](_0x5c5851(0x157)+ALLOWED_PORTS[_0x5c5851(0x135)](',\x20')),console[_0x5c5851(0x1d1)](_0x5c5851(0x117))),_0x54632=_0x32edbe);}return{'figmaPort':_0x54632};}async function findAvailablePort(_0x220143,_0x4cc2cc=0x4){const _0x1ffe2e=a0_0x35a9,_0x39a394=ALLOWED_PORTS[_0x1ffe2e(0xbf)](_0x220143),_0x592e97=_0x39a394>=0x0?ALLOWED_PORTS[_0x1ffe2e(0x1a3)](_0x39a394,_0x39a394+_0x4cc2cc):ALLOWED_PORTS[_0x1ffe2e(0x1a3)](0x0,_0x4cc2cc);for(let _0x354a32=0x0;_0x354a32<_0x592e97[_0x1ffe2e(0x6c)];_0x354a32++){const _0x2c48e2=_0x592e97[_0x354a32];try{const _0x10fca3=a0_0x187ef1();return await new Promise((_0x1aa230,_0x318472)=>{const _0x518b57=_0x1ffe2e;_0x10fca3[_0x518b57(0x16e)](_0x518b57(0x1d1),_0x2fbd6f=>{const _0x1306bd=_0x518b57;_0x10fca3['close'](),_0x2fbd6f['code']==='EADDRINUSE'?(console[_0x1306bd(0x1d1)](_0x1306bd(0x1b9)+_0x2c48e2+_0x1306bd(0x67)),_0x318472(_0x2fbd6f)):_0x318472(_0x2fbd6f);}),_0x10fca3[_0x518b57(0x15d)](_0x2c48e2,()=>{const _0x27a5f2=_0x518b57;_0x10fca3[_0x27a5f2(0xd7)](),_0x1aa230();});}),_0x2c48e2;}catch(_0x17b59d){if(_0x17b59d[_0x1ffe2e(0x124)]!==_0x1ffe2e(0xf7)||_0x354a32===_0x592e97[_0x1ffe2e(0x6c)]-0x1)throw new Error('No\x20available\x20ports\x20found\x20in\x20allowed\x20ports\x20list.\x20Tried:\x20'+_0x592e97['join'](',\x20'));}}throw new Error('Unexpected\x20error\x20in\x20port\x20detection');}function startSocketIOServer(_0x20f170){return new Promise((_0x4d2b53,_0x3e3617)=>{const _0x2a75bb=a0_0x35a9;console[_0x2a75bb(0x1d1)](_0x2a75bb(0x185)+_0x20f170+_0x2a75bb(0x8e));try{figmaHttpServer=a0_0x187ef1(),io=new a0_0x41346c(figmaHttpServer,{'maxHttpBufferSize':0x5f5e100,'cors':{'origin':'*'}}),io['on'](_0x2a75bb(0x9b),_0x12898e=>{const _0x147e8b=_0x2a75bb;console[_0x147e8b(0x1d1)]('Zapcode:\x20Figma\x20plugin\x20connected:\x20'+_0x12898e['id']),connectedFigmaClient&&connectedFigmaClient[_0x147e8b(0xe5)](!![]),connectedFigmaClient=_0x12898e,_0x12898e['on'](_0x147e8b(0x1a2),_0xbc8bd8=>{const _0x74461=_0x147e8b;if(!_0xbc8bd8?.[_0x74461(0x11b)])return;const _0x242b8a=figmaContextRequests[_0x74461(0xaa)](_0xbc8bd8[_0x74461(0x11b)]);if(_0x242b8a){if(_0xbc8bd8[_0x74461(0x1d1)])_0x242b8a[_0x74461(0x198)](new Error(_0xbc8bd8[_0x74461(0x1d1)]));else{if(_0xbc8bd8['payload'])_0x242b8a[_0x74461(0x86)](_0xbc8bd8[_0x74461(0xe6)]);else _0x242b8a['reject'](new Error(_0x74461(0x69)));}figmaContextRequests[_0x74461(0x168)](_0xbc8bd8[_0x74461(0x11b)]);}}),_0x12898e['on'](_0x147e8b(0x13f),_0x2530d1=>{const _0x57cdf8=_0x147e8b;if(!_0x2530d1?.[_0x57cdf8(0x11b)])return;const _0xa3e7cf=figmaContextRequests[_0x57cdf8(0xaa)](_0x2530d1[_0x57cdf8(0x11b)]);if(_0xa3e7cf){if(_0x2530d1['error'])_0xa3e7cf[_0x57cdf8(0x198)](new Error(_0x2530d1[_0x57cdf8(0x1d1)]));else _0xa3e7cf[_0x57cdf8(0x86)](_0x2530d1['result']);figmaContextRequests[_0x57cdf8(0x168)](_0x2530d1[_0x57cdf8(0x11b)]);}}),_0x12898e['on'](_0x147e8b(0xe5),_0x9f6e9f=>{const _0x4ccbd4=_0x147e8b;console[_0x4ccbd4(0x1d1)](_0x4ccbd4(0x1c2)+_0x12898e['id']+'.\x20Reason:\x20'+_0x9f6e9f),connectedFigmaClient===_0x12898e&&(connectedFigmaClient=null);}),_0x12898e['on'](_0x147e8b(0x1d1),_0x31d936=>console[_0x147e8b(0x1d1)](_0x147e8b(0x83)+_0x31d936[_0x147e8b(0x172)]));}),figmaHttpServer['on']('error',_0x332962=>{const _0x4bc256=_0x2a75bb;console[_0x4bc256(0x1d1)](_0x4bc256(0xf2)+_0x332962[_0x4bc256(0x172)]),_0x3e3617(_0x332962);}),figmaHttpServer[_0x2a75bb(0x15d)](_0x20f170,()=>{const _0x58ebae=_0x2a75bb;console[_0x58ebae(0x1d1)](_0x58ebae(0x1b4)+_0x20f170),_0x4d2b53();});}catch(_0x56f7a7){console[_0x2a75bb(0x1d1)](_0x2a75bb(0xd5)+_0x56f7a7),_0x3e3617(_0x56f7a7);}});}async function startMcpServer(){const _0x4861ed=a0_0x35a9;console['error'](_0x4861ed(0xde));const _0x3dc08e={'name':_0x4861ed(0x1ce),'title':_0x4861ed(0x76),'version':_0x4861ed(0x140)},_0x22f338=new McpServer(_0x3dc08e,{'capabilities':{'tools':{}}});_0x22f338[_0x4861ed(0x150)](_0x4861ed(0x184),_0x4861ed(0x73),{'assets_path':z['string']()[_0x4861ed(0x149)](_0x4861ed(0xab))[_0x4861ed(0x123)]()},async _0x5069e0=>{const _0x2c7e1c=_0x4861ed;console[_0x2c7e1c(0x1d1)]('Zapcode:\x20MCP\x20Tool\x20\x27get_figma_context\x27\x20invoked.');if(!connectedFigmaClient?.[_0x2c7e1c(0x9f)])return console[_0x2c7e1c(0x1d1)](_0x2c7e1c(0x156)),{'isError':!![],'content':[{'type':_0x2c7e1c(0x16b),'text':'Error:\x20Figma\x20plugin\x20is\x20not\x20connected.\x20Please\x20connect\x20the\x20plugin\x20in\x20Figma.'}]};const _0x2844e3=_0x2c7e1c(0x16c)+Date[_0x2c7e1c(0x1b5)]();try{console[_0x2c7e1c(0x1d1)](_0x2c7e1c(0x13e)+_0x2844e3+')'),connectedFigmaClient[_0x2c7e1c(0x147)]('request_context',{'requestId':_0x2844e3});const _0x296e9b=await new Promise((_0x390a1f,_0x2d8a3e)=>{const _0x4690a3=_0x2c7e1c;figmaContextRequests[_0x4690a3(0x112)](_0x2844e3,{'resolve':_0x390a1f,'reject':_0x2d8a3e}),setTimeout(()=>{const _0x1df411=_0x4690a3;figmaContextRequests[_0x1df411(0x161)](_0x2844e3)&&(_0x2d8a3e(new Error('Request\x20to\x20Figma\x20plugin\x20timed\x20out\x20after\x2030\x20seconds.')),figmaContextRequests[_0x1df411(0x168)](_0x2844e3));},0x7530);});console[_0x2c7e1c(0x1d1)](_0x2c7e1c(0xac));const _0x1b7ba9=process[_0x2c7e1c(0x1bd)](),_0x570be0=_0x5069e0[_0x2c7e1c(0x91)]?a0_0x1fb13f[_0x2c7e1c(0x177)](_0x5069e0[_0x2c7e1c(0x91)])?_0x5069e0['assets_path']:a0_0x1fb13f[_0x2c7e1c(0x135)](_0x1b7ba9,_0x5069e0['assets_path']):a0_0x1fb13f[_0x2c7e1c(0x135)](_0x1b7ba9,_0x2c7e1c(0xea)),_0x25cd32=await saveAssets(_0x296e9b['assets'],_0x570be0),_0x3de80f=[];_0x296e9b[_0x2c7e1c(0x93)]&&_0x3de80f[_0x2c7e1c(0xc9)]({'type':'image','data':_0x296e9b[_0x2c7e1c(0x93)],'mimeType':_0x2c7e1c(0x144)});let _0x2c0215='';_0x25cd32[_0x2c7e1c(0x18d)][_0x2c7e1c(0x6c)]>0x0?(_0x2c0215='\x0a\x0aAssets\x20(Saved\x20to\x20'+_0x570be0+_0x2c7e1c(0x85),_0x25cd32[_0x2c7e1c(0xdf)][_0x2c7e1c(0x15b)]((_0x207282,_0x14873c)=>{const _0x24f45a=_0x2c7e1c;_0x2c0215+='\x0a'+_0x14873c['toUpperCase']()+_0x24f45a(0x169),_0x207282['forEach'](_0x1700f9=>{const _0x3e18e7=_0x24f45a;_0x2c0215+='-\x20'+a0_0x1fb13f[_0x3e18e7(0x195)](_0x1700f9)+'\x0a';});})):_0x2c0215=_0x2c7e1c(0x159);const _0x2fa9c6='Figma\x20Context\x20Details:\x0a\x0aPrompt\x20Suggestion:\x0a'+_0x296e9b[_0x2c7e1c(0x94)]+_0x2c7e1c(0x14c)+JSON[_0x2c7e1c(0x142)](_0x296e9b[_0x2c7e1c(0xa0)],null,0x2)+_0x2c7e1c(0x1d8)+_0x2c0215+_0x2c7e1c(0x137)+_0x296e9b[_0x2c7e1c(0x8d)]+_0x2c7e1c(0x95)+_0x296e9b['CSS']+'\x0a```';return _0x3de80f[_0x2c7e1c(0xc9)]({'type':_0x2c7e1c(0x16b),'text':_0x2fa9c6}),{'content':_0x3de80f};}catch(_0x1be8a1){return console['error'](_0x2c7e1c(0x155)+_0x1be8a1[_0x2c7e1c(0x172)]),{'isError':!![],'content':[{'type':_0x2c7e1c(0x16b),'text':_0x2c7e1c(0x141)+_0x1be8a1[_0x2c7e1c(0x172)]}]};}});async function _0x455c3d(_0xec653c,_0x4adf6e,_0x2d0a1a=0x7530){const _0x2c5575=_0x4861ed;if(!connectedFigmaClient?.[_0x2c5575(0x9f)])throw new Error(_0x2c5575(0x10e));const _0x4085f4=_0x2c5575(0x1a4)+Date['now']()+'-'+Math['random']()[_0x2c5575(0x1cd)](0x24)[_0x2c5575(0x1a3)](0x2);return new Promise((_0x44ed1b,_0x3c2a4a)=>{const _0x20fbed=_0x2c5575;figmaContextRequests[_0x20fbed(0x112)](_0x4085f4,{'resolve':_0x44ed1b,'reject':_0x3c2a4a}),connectedFigmaClient['emit'](_0x20fbed(0x1b0),{'requestId':_0x4085f4,'command':_0xec653c,'params':_0x4adf6e}),setTimeout(()=>{const _0x5a19bc=_0x20fbed;figmaContextRequests['has'](_0x4085f4)&&(figmaContextRequests[_0x5a19bc(0x168)](_0x4085f4),_0x3c2a4a(new Error(_0x5a19bc(0x6e)+_0x2d0a1a/0x3e8+_0x5a19bc(0xe1)+_0xec653c+')')));},_0x2d0a1a);});}function _0xebb3c8(_0x1df88a){const _0x181fdc=_0x4861ed;return{'content':[{'type':_0x181fdc(0x16b),'text':JSON[_0x181fdc(0x142)](_0x1df88a,null,0x2)}]};}function _0x740266(_0x326d5f){const _0x4f8bd1=_0x4861ed,_0x367db5=_0x326d5f instanceof Error?_0x326d5f['message']:String(_0x326d5f);return{'isError':!![],'content':[{'type':_0x4f8bd1(0x16b),'text':'Error:\x20'+_0x367db5}]};}_0x22f338[_0x4861ed(0x150)](_0x4861ed(0x12a),_0x4861ed(0x109),{'nodes':z[_0x4861ed(0x1b7)](z[_0x4861ed(0x11a)]({'type':z[_0x4861ed(0x1c0)]()[_0x4861ed(0x149)](_0x4861ed(0x136)),'tempId':z[_0x4861ed(0x1c0)]()[_0x4861ed(0x149)](_0x4861ed(0x1d6))[_0x4861ed(0x123)](),'parentId':z[_0x4861ed(0x1c0)]()[_0x4861ed(0x149)](_0x4861ed(0x10b))[_0x4861ed(0x123)](),'name':z[_0x4861ed(0x1c0)]()['optional'](),'x':z[_0x4861ed(0x105)]()[_0x4861ed(0x123)](),'y':z[_0x4861ed(0x105)]()['optional'](),'width':z[_0x4861ed(0x105)]()[_0x4861ed(0x123)](),'height':z[_0x4861ed(0x105)]()[_0x4861ed(0x123)](),'fillColor':z[_0x4861ed(0x1c0)]()[_0x4861ed(0x123)](),'cornerRadius':z[_0x4861ed(0x105)]()[_0x4861ed(0x123)](),'content':z[_0x4861ed(0x1c0)]()[_0x4861ed(0x123)](),'fontSize':z[_0x4861ed(0x105)]()[_0x4861ed(0x123)](),'fontFamily':z[_0x4861ed(0x1c0)]()[_0x4861ed(0x123)](),'fontWeight':z['string']()[_0x4861ed(0x123)](),'color':z[_0x4861ed(0x1c0)]()['optional'](),'textAlign':z[_0x4861ed(0x1c0)]()['optional']()})[_0x4861ed(0x13b)]())[_0x4861ed(0x149)](_0x4861ed(0x111))},async _0x55c4fa=>{try{return _0xebb3c8(await _0x455c3d('create_wireframe',_0x55c4fa));}catch(_0x18033c){return _0x740266(_0x18033c);}}),_0x22f338[_0x4861ed(0x150)](_0x4861ed(0x1ac),_0x4861ed(0x1b3),{'code':z[_0x4861ed(0x1c0)]()[_0x4861ed(0x149)]('JavaScript\x20code\x20to\x20execute.\x20The\x20figma\x20global\x20is\x20available.\x20For\x20async\x20ops\x20use\x20await\x20(the\x20runner\x20wraps\x20in\x20async\x20function\x20automatically).\x20Example:\x20const\x20f\x20=\x20figma.createFrame();\x20f.resize(375,\x20812);\x20f.name\x20=\x20\x27Screen\x27;\x20return\x20f.id;')},async _0x48ff65=>{const _0x3413af=_0x4861ed;try{return _0xebb3c8(await _0x455c3d(_0x3413af(0x1ac),{'code':_0x48ff65[_0x3413af(0x124)]},0xea60));}catch(_0x5ee641){return _0x740266(_0x5ee641);}}),_0x22f338['tool'](_0x4861ed(0x130),_0x4861ed(0x19f),{},async()=>{try{return _0xebb3c8(await _0x455c3d('get_figma_selection',{}));}catch(_0x4c3d1b){return _0x740266(_0x4c3d1b);}}),_0x22f338[_0x4861ed(0x150)](_0x4861ed(0x19d),_0x4861ed(0xb1),{'nodeId':z['string']()[_0x4861ed(0x149)](_0x4861ed(0x74))},async _0x44b33f=>{const _0xbf8b06=_0x4861ed;try{return _0xebb3c8(await _0x455c3d(_0xbf8b06(0x19d),_0x44b33f));}catch(_0xeca41f){return _0x740266(_0xeca41f);}});const _0x24b15f=new Set(),_0x43fdb6={'pages':['create_figma_page',_0x4861ed(0x193),'set_current_page'],'shapes':[_0x4861ed(0x120),'create_figma_rectangle',_0x4861ed(0xd6),_0x4861ed(0x8f)],'styling':[_0x4861ed(0xdc),_0x4861ed(0x71),_0x4861ed(0x10f),_0x4861ed(0x1a7),_0x4861ed(0x12d),_0x4861ed(0x110),_0x4861ed(0x7f)],'layout':[_0x4861ed(0x106),_0x4861ed(0xa8),_0x4861ed(0x12b),'align_nodes',_0x4861ed(0x14d),'set_constraints',_0x4861ed(0xd2)],'nodes':[_0x4861ed(0x84),_0x4861ed(0x92),_0x4861ed(0xa7),_0x4861ed(0x9d),_0x4861ed(0x151),_0x4861ed(0x116),_0x4861ed(0x16f),_0x4861ed(0xb3),_0x4861ed(0x176),'get_node_tree'],'text':[_0x4861ed(0xe0),_0x4861ed(0x166)],'components':[_0x4861ed(0x13a),'create_component_instance',_0x4861ed(0x1d0),_0x4861ed(0x134),_0x4861ed(0x175),_0x4861ed(0x160),_0x4861ed(0xe2)],'styles':[_0x4861ed(0xa2),'create_color_style',_0x4861ed(0x79),_0x4861ed(0x163),_0x4861ed(0x158)],'variables':[_0x4861ed(0x104),_0x4861ed(0x1c8),'create_variable',_0x4861ed(0x80),_0x4861ed(0x128)],'export':[_0x4861ed(0x11e)]};function _0x14a142(_0x478d2c){const _0x3fc1c8=_0x4861ed;if(_0x24b15f[_0x3fc1c8(0x161)](_0x478d2c))return;_0x24b15f[_0x3fc1c8(0x14e)](_0x478d2c);switch(_0x478d2c){case _0x3fc1c8(0x122):_0x22f338[_0x3fc1c8(0x150)]('create_figma_page','Create\x20a\x20new\x20page\x20in\x20the\x20Figma\x20document.',{'name':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0xef))[_0x3fc1c8(0x123)]()},async _0x24b3ae=>{try{return _0xebb3c8(await _0x455c3d('create_figma_page',_0x24b3ae));}catch(_0x5306a2){return _0x740266(_0x5306a2);}}),_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x193),_0x3fc1c8(0x15a),{},async()=>{const _0x63faf4=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x63faf4(0x193),{}));}catch(_0x1ce3c7){return _0x740266(_0x1ce3c7);}}),_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x194),'Switch\x20to\x20a\x20specific\x20page\x20in\x20Figma\x20by\x20ID\x20or\x20name.',{'pageId':z['string']()[_0x3fc1c8(0x149)](_0x3fc1c8(0x12e))['optional'](),'pageName':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x87))[_0x3fc1c8(0x123)]()},async _0x50b1bc=>{const _0x34f514=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x34f514(0x194),_0x50b1bc));}catch(_0x1dd96b){return _0x740266(_0x1dd96b);}});break;case _0x3fc1c8(0x77):_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x120),'Create\x20a\x20new\x20frame\x20(artboard)\x20in\x20Figma.\x20Returns\x20nodeId\x20for\x20use\x20as\x20parentId\x20in\x20subsequent\x20calls.',{'name':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x1cb))[_0x3fc1c8(0x123)](),'x':z['number']()[_0x3fc1c8(0x149)](_0x3fc1c8(0x6d))[_0x3fc1c8(0x123)](),'y':z['number']()[_0x3fc1c8(0x149)]('Y\x20position')['optional'](),'width':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0xb2))[_0x3fc1c8(0x123)](),'height':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x1a5))[_0x3fc1c8(0x123)](),'fillColor':z[_0x3fc1c8(0x1c0)]()['describe'](_0x3fc1c8(0x154))[_0x3fc1c8(0x123)](),'parentId':z['string']()[_0x3fc1c8(0x149)](_0x3fc1c8(0x7b))['optional']()},async _0x3c6d0d=>{const _0x5471c5=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x5471c5(0x120),_0x3c6d0d));}catch(_0x5d6b23){return _0x740266(_0x5d6b23);}}),_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0xbc),_0x3fc1c8(0xfc),{'name':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0xbe))[_0x3fc1c8(0x123)](),'x':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x6d))[_0x3fc1c8(0x123)](),'y':z['number']()[_0x3fc1c8(0x149)](_0x3fc1c8(0x1d4))[_0x3fc1c8(0x123)](),'width':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x1be))[_0x3fc1c8(0x123)](),'height':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0xff))[_0x3fc1c8(0x123)](),'fillColor':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0xb0))[_0x3fc1c8(0x123)](),'cornerRadius':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x131))['optional'](),'parentId':z[_0x3fc1c8(0x1c0)]()['describe'](_0x3fc1c8(0x8c))[_0x3fc1c8(0x123)]()},async _0x6de971=>{try{return _0xebb3c8(await _0x455c3d('create_figma_rectangle',_0x6de971));}catch(_0x5f1573){return _0x740266(_0x5f1573);}}),_0x22f338[_0x3fc1c8(0x150)]('create_figma_text',_0x3fc1c8(0x18a),{'content':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x89))[_0x3fc1c8(0x123)](),'name':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x174))[_0x3fc1c8(0x123)](),'x':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x6d))[_0x3fc1c8(0x123)](),'y':z['number']()[_0x3fc1c8(0x149)](_0x3fc1c8(0x1d4))[_0x3fc1c8(0x123)](),'fontSize':z['number']()[_0x3fc1c8(0x149)](_0x3fc1c8(0x6b))[_0x3fc1c8(0x123)](),'fontFamily':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x132))['optional'](),'fontWeight':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)]('Font\x20weight\x20style\x20e.g.\x20Regular,\x20Medium,\x20SemiBold,\x20Bold')[_0x3fc1c8(0x123)](),'color':z['string']()[_0x3fc1c8(0x149)](_0x3fc1c8(0x11d))[_0x3fc1c8(0x123)](),'textAlign':z['string']()[_0x3fc1c8(0x149)](_0x3fc1c8(0xed))['optional'](),'width':z['number']()[_0x3fc1c8(0x149)](_0x3fc1c8(0xc7))[_0x3fc1c8(0x123)](),'parentId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x8c))[_0x3fc1c8(0x123)]()},async _0x939841=>{try{return _0xebb3c8(await _0x455c3d('create_figma_text',_0x939841));}catch(_0x12f5d3){return _0x740266(_0x12f5d3);}}),_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x8f),_0x3fc1c8(0x12f),{'name':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x178))[_0x3fc1c8(0x123)](),'x':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)]('X\x20position')[_0x3fc1c8(0x123)](),'y':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)]('Y\x20position')[_0x3fc1c8(0x123)](),'width':z['number']()['describe']('Width\x20in\x20pixels')[_0x3fc1c8(0x123)](),'height':z['number']()['describe'](_0x3fc1c8(0xff))['optional'](),'fillColor':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)]('Fill\x20hex\x20color')['optional'](),'parentId':z['string']()[_0x3fc1c8(0x149)](_0x3fc1c8(0x8c))[_0x3fc1c8(0x123)]()},async _0x2b8d9c=>{const _0x539640=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x539640(0x8f),_0x2b8d9c));}catch(_0xb5047e){return _0x740266(_0xb5047e);}});break;case'styling':_0x22f338[_0x3fc1c8(0x150)]('set_fill_color',_0x3fc1c8(0xf0),{'nodeId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x152))[_0x3fc1c8(0x123)](),'color':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x11f))['optional'](),'opacity':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)]('Opacity\x200-1\x20(default\x201)')[_0x3fc1c8(0x123)]()},async _0x5f4e8a=>{try{return _0xebb3c8(await _0x455c3d('set_fill_color',_0x5f4e8a));}catch(_0x85732d){return _0x740266(_0x85732d);}}),_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x71),_0x3fc1c8(0xdb),{'nodeId':z['string']()[_0x3fc1c8(0x149)](_0x3fc1c8(0x152))[_0x3fc1c8(0x123)](),'color':z['string']()[_0x3fc1c8(0x149)](_0x3fc1c8(0xaf))[_0x3fc1c8(0x123)](),'weight':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x1b6))[_0x3fc1c8(0x123)](),'align':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x7e))[_0x3fc1c8(0x123)]()},async _0x41c51e=>{const _0x43ebb8=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x43ebb8(0x71),_0x41c51e));}catch(_0x108681){return _0x740266(_0x108681);}}),_0x22f338[_0x3fc1c8(0x150)]('set_corner_radius',_0x3fc1c8(0x78),{'nodeId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x152))[_0x3fc1c8(0x123)](),'radius':z['number']()['describe'](_0x3fc1c8(0x164))[_0x3fc1c8(0x123)](),'topLeft':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x179))[_0x3fc1c8(0x123)](),'topRight':z['number']()['describe'](_0x3fc1c8(0xc5))[_0x3fc1c8(0x123)](),'bottomRight':z['number']()[_0x3fc1c8(0x149)]('Bottom-right\x20radius')[_0x3fc1c8(0x123)](),'bottomLeft':z['number']()[_0x3fc1c8(0x149)](_0x3fc1c8(0x171))[_0x3fc1c8(0x123)]()},async _0x5d17cc=>{const _0x48c672=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x48c672(0x10f),_0x5d17cc));}catch(_0x58c33b){return _0x740266(_0x58c33b);}}),_0x22f338[_0x3fc1c8(0x150)]('set_opacity',_0x3fc1c8(0xf8),{'nodeId':z['string']()[_0x3fc1c8(0x149)](_0x3fc1c8(0x152))[_0x3fc1c8(0x123)](),'opacity':z[_0x3fc1c8(0x105)]()['describe'](_0x3fc1c8(0x1bc))[_0x3fc1c8(0x123)]()},async _0x5db6d5=>{const _0x3e28e5=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x3e28e5(0x1a7),_0x5db6d5));}catch(_0x3128e3){return _0x740266(_0x3128e3);}}),_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x12d),'Add\x20a\x20shadow\x20or\x20blur\x20effect\x20to\x20a\x20Figma\x20node.',{'nodeId':z['string']()[_0x3fc1c8(0x149)]('Target\x20node\x20ID')['optional'](),'type':z[_0x3fc1c8(0x1c0)]()['describe'](_0x3fc1c8(0xcd))[_0x3fc1c8(0x123)](),'color':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0xcf))[_0x3fc1c8(0x123)](),'alpha':z[_0x3fc1c8(0x105)]()['describe'](_0x3fc1c8(0x1a6))[_0x3fc1c8(0x123)](),'offsetX':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x70))[_0x3fc1c8(0x123)](),'offsetY':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x1d5))['optional'](),'radius':z['number']()['describe']('Blur\x20radius\x20(default\x208)')[_0x3fc1c8(0x123)](),'spread':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)]('Shadow\x20spread\x20(default\x200)')[_0x3fc1c8(0x123)]()},async _0xba4672=>{const _0x5e9267=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x5e9267(0x12d),_0xba4672));}catch(_0x3275af){return _0x740266(_0x3275af);}}),_0x22f338[_0x3fc1c8(0x150)]('set_gradient_fill',_0x3fc1c8(0x97),{'nodeId':z[_0x3fc1c8(0x1c0)]()['describe'](_0x3fc1c8(0x88)),'type':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x165))[_0x3fc1c8(0x123)](),'stops':z[_0x3fc1c8(0x1b7)](z[_0x3fc1c8(0x11a)]({'color':z['string']()[_0x3fc1c8(0x149)](_0x3fc1c8(0x129)),'position':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)]('Position\x200.0\x20to\x201.0'),'opacity':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0xba))[_0x3fc1c8(0x123)]()}))[_0x3fc1c8(0x149)](_0x3fc1c8(0xa1)),'angle':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0xa4))[_0x3fc1c8(0x123)]()},async _0x6381f1=>{try{return _0xebb3c8(await _0x455c3d('set_gradient_fill',_0x6381f1));}catch(_0x2e6d93){return _0x740266(_0x2e6d93);}}),_0x22f338[_0x3fc1c8(0x150)]('set_image_fill',_0x3fc1c8(0x102),{'nodeId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x88)),'data':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x115)),'scaleMode':z['string']()['describe']('FILL,\x20FIT,\x20CROP,\x20or\x20TILE\x20(default\x20FILL)')[_0x3fc1c8(0x123)]()},async _0x4516d8=>{const _0x103474=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x103474(0x7f),_0x4516d8));}catch(_0x185d2a){return _0x740266(_0x185d2a);}});break;case _0x3fc1c8(0xec):_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x106),_0x3fc1c8(0x14b),{'nodeId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)]('Frame\x20node\x20ID')[_0x3fc1c8(0x123)](),'direction':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x146))[_0x3fc1c8(0x123)](),'padding':z['number']()[_0x3fc1c8(0x149)](_0x3fc1c8(0x191))['optional'](),'paddingTop':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x1b2))[_0x3fc1c8(0x123)](),'paddingBottom':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)]('Bottom\x20padding')[_0x3fc1c8(0x123)](),'paddingLeft':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)]('Left\x20padding')[_0x3fc1c8(0x123)](),'paddingRight':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x1ba))[_0x3fc1c8(0x123)](),'gap':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0xd0))[_0x3fc1c8(0x123)](),'alignment':z[_0x3fc1c8(0x1c0)]()['describe'](_0x3fc1c8(0x16a))[_0x3fc1c8(0x123)](),'counterAlignment':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x114))['optional']()},async _0x39cefa=>{const _0x24ef19=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x24ef19(0x106),_0x39cefa));}catch(_0x2870f7){return _0x740266(_0x2870f7);}}),_0x22f338['tool'](_0x3fc1c8(0xa8),_0x3fc1c8(0x68),{'nodeId':z[_0x3fc1c8(0x1c0)]()['describe'](_0x3fc1c8(0x152))[_0x3fc1c8(0x123)](),'x':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x1bb))[_0x3fc1c8(0x123)](),'y':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0xfb))[_0x3fc1c8(0x123)]()},async _0x5bb3e5=>{const _0x34ad09=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x34ad09(0xa8),_0x5bb3e5));}catch(_0x1df10e){return _0x740266(_0x1df10e);}}),_0x22f338['tool'](_0x3fc1c8(0x12b),_0x3fc1c8(0x90),{'nodeId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)]('Target\x20node\x20ID')[_0x3fc1c8(0x123)](),'width':z[_0x3fc1c8(0x105)]()['describe'](_0x3fc1c8(0x1d7))['optional'](),'height':z['number']()[_0x3fc1c8(0x149)](_0x3fc1c8(0x188))['optional']()},async _0x5e307b=>{try{return _0xebb3c8(await _0x455c3d('resize_node',_0x5e307b));}catch(_0x5a5b64){return _0x740266(_0x5a5b64);}}),_0x22f338['tool'](_0x3fc1c8(0x18e),_0x3fc1c8(0x75),{'nodeIds':z[_0x3fc1c8(0x1b7)](z[_0x3fc1c8(0x1c0)]())[_0x3fc1c8(0x149)]('Array\x20of\x20node\x20IDs\x20to\x20align'),'alignment':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x81)),'referenceId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0xca))[_0x3fc1c8(0x123)]()},async _0x19a9c1=>{const _0x128bbe=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x128bbe(0x18e),_0x19a9c1));}catch(_0x44def2){return _0x740266(_0x44def2);}}),_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x14d),_0x3fc1c8(0x118),{'nodeIds':z['array'](z[_0x3fc1c8(0x1c0)]())[_0x3fc1c8(0x149)](_0x3fc1c8(0x1b1)),'direction':z[_0x3fc1c8(0x1c0)]()['describe']('HORIZONTAL\x20or\x20VERTICAL')},async _0x4af4a4=>{try{return _0xebb3c8(await _0x455c3d('distribute_nodes',_0x4af4a4));}catch(_0x53c7d3){return _0x740266(_0x53c7d3);}}),_0x22f338['tool'](_0x3fc1c8(0x199),_0x3fc1c8(0x187),{'nodeId':z['string']()[_0x3fc1c8(0x149)](_0x3fc1c8(0x88)),'horizontal':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x66))['optional'](),'vertical':z[_0x3fc1c8(0x1c0)]()['describe'](_0x3fc1c8(0xb9))[_0x3fc1c8(0x123)]()},async _0x189528=>{const _0x4128bd=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x4128bd(0x199),_0x189528));}catch(_0x5bafba){return _0x740266(_0x5bafba);}}),_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0xd2),_0x3fc1c8(0x7d),{'nodeId':z['string']()[_0x3fc1c8(0x149)](_0x3fc1c8(0x88)),'horizontal':z['string']()[_0x3fc1c8(0x149)]('FIXED,\x20HUG,\x20or\x20FILL')[_0x3fc1c8(0x123)](),'vertical':z[_0x3fc1c8(0x1c0)]()['describe'](_0x3fc1c8(0x145))[_0x3fc1c8(0x123)]()},async _0xe5a489=>{try{return _0xebb3c8(await _0x455c3d('set_layout_sizing',_0xe5a489));}catch(_0x17632f){return _0x740266(_0x17632f);}});break;case'nodes':_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x84),'Rename\x20a\x20Figma\x20node\x20layer.',{'nodeId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x152))[_0x3fc1c8(0x123)](),'name':z['string']()[_0x3fc1c8(0x149)](_0x3fc1c8(0xf6))[_0x3fc1c8(0x123)]()},async _0x353a53=>{const _0x4ed144=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x4ed144(0x84),_0x353a53));}catch(_0x22ae1f){return _0x740266(_0x22ae1f);}}),_0x22f338['tool'](_0x3fc1c8(0x92),_0x3fc1c8(0xc8),{'nodeId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)]('Node\x20ID\x20to\x20delete')[_0x3fc1c8(0x123)]()},async _0xfbe7e1=>{const _0x424237=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x424237(0x92),_0xfbe7e1));}catch(_0x2f32ca){return _0x740266(_0x2f32ca);}}),_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0xa7),'Group\x20multiple\x20Figma\x20nodes\x20together.',{'nodeIds':z[_0x3fc1c8(0x1b7)](z['string']())[_0x3fc1c8(0x149)](_0x3fc1c8(0xcb))['optional'](),'name':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0xe9))[_0x3fc1c8(0x123)](),'parentId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x13c))['optional']()},async _0x47b42d=>{const _0x59f382=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x59f382(0xa7),_0x47b42d));}catch(_0x120c1b){return _0x740266(_0x120c1b);}}),_0x22f338['tool'](_0x3fc1c8(0x9d),_0x3fc1c8(0x121),{'nodeId':z['string']()[_0x3fc1c8(0x149)](_0x3fc1c8(0x143))},async _0x42e152=>{const _0x5408bc=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x5408bc(0x9d),_0x42e152));}catch(_0xe2c987){return _0x740266(_0xe2c987);}}),_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x151),_0x3fc1c8(0x1c5),{'nodeId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x10d)),'offsetX':z['number']()['describe'](_0x3fc1c8(0x1d3))['optional'](),'offsetY':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x15f))[_0x3fc1c8(0x123)](),'x':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)]('Absolute\x20X\x20position\x20for\x20the\x20duplicate\x20(overrides\x20offsetX)')[_0x3fc1c8(0x123)](),'y':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x1ca))[_0x3fc1c8(0x123)](),'name':z['string']()['describe']('Name\x20for\x20the\x20duplicate\x20layer')[_0x3fc1c8(0x123)]()},async _0x2347a4=>{const _0x81b759=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x81b759(0x151),_0x2347a4));}catch(_0x29ea33){return _0x740266(_0x29ea33);}}),_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x116),'Show\x20or\x20hide\x20a\x20Figma\x20node.\x20If\x20\x27visible\x27\x20is\x20omitted,\x20toggles\x20current\x20state.',{'nodeId':z['string']()[_0x3fc1c8(0x149)](_0x3fc1c8(0x88)),'visible':z[_0x3fc1c8(0x1c4)]()['describe'](_0x3fc1c8(0xc6))[_0x3fc1c8(0x123)]()},async _0x5a8bf1=>{const _0x4187b3=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x4187b3(0x116),_0x5a8bf1));}catch(_0xe83061){return _0x740266(_0xe83061);}}),_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x16f),'Lock\x20or\x20unlock\x20a\x20Figma\x20node.\x20If\x20\x27locked\x27\x20is\x20omitted,\x20toggles\x20current\x20state.',{'nodeId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x88)),'locked':z[_0x3fc1c8(0x1c4)]()['describe'](_0x3fc1c8(0x127))[_0x3fc1c8(0x123)]()},async _0x31ac47=>{try{return _0xebb3c8(await _0x455c3d('lock_node',_0x31ac47));}catch(_0x21fd9f){return _0x740266(_0x21fd9f);}}),_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0xb3),'Search\x20for\x20nodes\x20by\x20name\x20(partial\x20match)\x20and/or\x20type.\x20Returns\x20id,\x20name,\x20type,\x20x,\x20y\x20for\x20each\x20match.\x20Use\x20to\x20find\x20nodes\x20before\x20modifying\x20them.',{'name':z['string']()[_0x3fc1c8(0x149)]('Partial\x20name\x20to\x20search\x20for\x20(case-insensitive)')[_0x3fc1c8(0x123)](),'type':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x17a))[_0x3fc1c8(0x123)](),'rootNodeId':z[_0x3fc1c8(0x1c0)]()['describe'](_0x3fc1c8(0x72))[_0x3fc1c8(0x123)](),'maxResults':z[_0x3fc1c8(0x105)]()['describe'](_0x3fc1c8(0x96))[_0x3fc1c8(0x123)]()},async _0x18e1fa=>{const _0x388c33=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x388c33(0xb3),_0x18e1fa));}catch(_0xf852ee){return _0x740266(_0xf852ee);}}),_0x22f338['tool'](_0x3fc1c8(0x176),_0x3fc1c8(0xb4),{'nodeId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)]('Node\x20ID\x20to\x20select')[_0x3fc1c8(0x123)]()},async _0x4daa19=>{try{return _0xebb3c8(await _0x455c3d('select_node',_0x4daa19));}catch(_0x4258bc){return _0x740266(_0x4258bc);}}),_0x22f338[_0x3fc1c8(0x150)]('get_node_tree',_0x3fc1c8(0x153),{'nodeId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x182)),'maxDepth':z['number']()[_0x3fc1c8(0x123)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x15e))},async _0x52e283=>{const _0x816860=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x816860(0x8a),_0x52e283));}catch(_0x20c478){return _0x740266(_0x20c478);}});break;case _0x3fc1c8(0x16b):_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0xe0),_0x3fc1c8(0x12c),{'nodeId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x16d)),'content':z[_0x3fc1c8(0x1c0)]()['describe'](_0x3fc1c8(0xfd))[_0x3fc1c8(0x123)](),'fontFamily':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x119))[_0x3fc1c8(0x123)](),'fontWeight':z['string']()[_0x3fc1c8(0x149)](_0x3fc1c8(0x1d2))[_0x3fc1c8(0x123)](),'fontSize':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)]('Font\x20size\x20in\x20pixels')[_0x3fc1c8(0x123)](),'color':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)]('Text\x20hex\x20color\x20e.g.\x20#333333')[_0x3fc1c8(0x123)]()},async _0x1eab08=>{const _0x5d2d8=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x5d2d8(0xe0),_0x1eab08));}catch(_0x4c846f){return _0x740266(_0x4c846f);}}),_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x166),_0x3fc1c8(0xcc),{'nodeId':z['string']()['describe'](_0x3fc1c8(0x103)),'letterSpacing':z[_0x3fc1c8(0x105)]()['describe'](_0x3fc1c8(0x17e))[_0x3fc1c8(0x123)](),'letterSpacingUnit':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x1b8))[_0x3fc1c8(0x123)](),'lineHeight':z['number']()[_0x3fc1c8(0x149)]('Line\x20height\x20value')['optional'](),'lineHeightUnit':z['string']()['describe'](_0x3fc1c8(0x17f))[_0x3fc1c8(0x123)](),'paragraphSpacing':z['number']()[_0x3fc1c8(0x149)](_0x3fc1c8(0x17b))[_0x3fc1c8(0x123)](),'paragraphIndent':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)]('First\x20line\x20indent')[_0x3fc1c8(0x123)](),'textCase':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x1bf))['optional'](),'textDecoration':z[_0x3fc1c8(0x1c0)]()['describe']('NONE,\x20UNDERLINE,\x20or\x20STRIKETHROUGH')['optional']()},async _0x21832d=>{const _0x5056b6=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x5056b6(0x166),_0x21832d));}catch(_0xbaded5){return _0x740266(_0xbaded5);}});break;case _0x3fc1c8(0x1cf):_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x13a),'Get\x20all\x20local\x20components\x20available\x20in\x20the\x20Figma\x20document.',{},async()=>{const _0x2a7467=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x2a7467(0x13a),{}));}catch(_0x11b04b){return _0x740266(_0x11b04b);}}),_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x162),_0x3fc1c8(0xa3),{'componentId':z[_0x3fc1c8(0x1c0)]()['describe']('Component\x20node\x20ID')['optional'](),'x':z[_0x3fc1c8(0x105)]()['describe'](_0x3fc1c8(0x6d))[_0x3fc1c8(0x123)](),'y':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x1d4))[_0x3fc1c8(0x123)](),'parentId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)]('Parent\x20frame\x20node\x20ID\x20(optional)')[_0x3fc1c8(0x123)]()},async _0x556068=>{const _0x9c46c9=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x9c46c9(0x162),_0x556068));}catch(_0x4dfa59){return _0x740266(_0x4dfa59);}}),_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x1d0),_0x3fc1c8(0xc4),{'nodeId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x103))[_0x3fc1c8(0x123)](),'styleId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0xbd))['optional']()},async _0x3922bb=>{const _0x136ba4=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x136ba4(0x1d0),_0x3922bb));}catch(_0x14d613){return _0x740266(_0x14d613);}}),_0x22f338['tool'](_0x3fc1c8(0x134),_0x3fc1c8(0x9c),{'nodeId':z['string']()[_0x3fc1c8(0x149)](_0x3fc1c8(0x152))[_0x3fc1c8(0x123)](),'styleId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x1c3))[_0x3fc1c8(0x123)]()},async _0x551ccd=>{const _0x48db6f=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x48db6f(0x134),_0x551ccd));}catch(_0x41ae5e){return _0x740266(_0x41ae5e);}}),_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x175),_0x3fc1c8(0x7a),{'nodeId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x1ab)),'name':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x1ad))[_0x3fc1c8(0x123)]()},async _0x1cee4d=>{const _0x4d03f4=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x4d03f4(0x175),_0x1cee4d));}catch(_0x2e300d){return _0x740266(_0x2e300d);}}),_0x22f338['tool']('create_component_set','Combine\x20multiple\x20component\x20nodes\x20into\x20a\x20variant\x20set\x20(component\x20set\x20with\x20variants).',{'nodeIds':z[_0x3fc1c8(0x1b7)](z['string']())[_0x3fc1c8(0x149)](_0x3fc1c8(0xf9)),'name':z[_0x3fc1c8(0x1c0)]()['describe'](_0x3fc1c8(0x1cc))['optional']()},async _0x157a92=>{const _0x52c227=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x52c227(0x160),_0x157a92));}catch(_0x37836a){return _0x740266(_0x37836a);}}),_0x22f338['tool']('set_component_property',_0x3fc1c8(0x1a1),{'nodeId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x170)),'property':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x17d)),'value':z['union']([z[_0x3fc1c8(0x1c0)](),z[_0x3fc1c8(0x1c4)](),z['number']()])[_0x3fc1c8(0x149)]('Property\x20value')},async _0x5bdad9=>{try{return _0xebb3c8(await _0x455c3d('set_component_property',_0x5bdad9));}catch(_0x5bd3e8){return _0x740266(_0x5bd3e8);}});break;case _0x3fc1c8(0xf1):_0x22f338[_0x3fc1c8(0x150)]('get_figma_styles','Get\x20all\x20local\x20styles\x20(colors,\x20text,\x20effects)\x20from\x20the\x20Figma\x20document.',{},async()=>{try{return _0xebb3c8(await _0x455c3d('get_figma_styles',{}));}catch(_0x431104){return _0x740266(_0x431104);}}),_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x133),_0x3fc1c8(0x1a0),{'name':z['string']()[_0x3fc1c8(0x149)](_0x3fc1c8(0xad)),'color':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x173))[_0x3fc1c8(0x123)](),'opacity':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0xba))[_0x3fc1c8(0x123)](),'description':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x101))[_0x3fc1c8(0x123)]()},async _0x46e1d5=>{const _0x300d77=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x300d77(0x133),_0x46e1d5));}catch(_0x49238f){return _0x740266(_0x49238f);}}),_0x22f338['tool'](_0x3fc1c8(0x79),'Create\x20a\x20new\x20local\x20text\x20style\x20in\x20the\x20Figma\x20document.',{'name':z['string']()[_0x3fc1c8(0x149)]('Style\x20name\x20e.g.\x20\x27Heading/H1\x27'),'fontFamily':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)]('Font\x20family\x20e.g.\x20Inter')[_0x3fc1c8(0x123)](),'fontWeight':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x14f))['optional'](),'fontSize':z[_0x3fc1c8(0x105)]()['describe'](_0x3fc1c8(0x18b))['optional'](),'letterSpacing':z[_0x3fc1c8(0x105)]()['describe'](_0x3fc1c8(0x17e))[_0x3fc1c8(0x123)](),'lineHeight':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x9a))[_0x3fc1c8(0x123)](),'description':z['string']()['describe'](_0x3fc1c8(0x101))[_0x3fc1c8(0x123)]()},async _0x30b212=>{const _0x13f05f=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x13f05f(0x79),_0x30b212));}catch(_0x5e016a){return _0x740266(_0x5e016a);}}),_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x163),_0x3fc1c8(0xd9),{'styleId':z['string']()[_0x3fc1c8(0x149)]('Style\x20ID\x20(from\x20get_figma_styles)'),'name':z[_0x3fc1c8(0x1c0)]()['describe']('New\x20style\x20name')[_0x3fc1c8(0x123)](),'color':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x19b))[_0x3fc1c8(0x123)](),'opacity':z['number']()[_0x3fc1c8(0x149)](_0x3fc1c8(0x180))[_0x3fc1c8(0x123)]()},async _0x32e617=>{const _0x3f2774=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x3f2774(0x163),_0x32e617));}catch(_0x5b5cf0){return _0x740266(_0x5b5cf0);}}),_0x22f338[_0x3fc1c8(0x150)]('update_text_style',_0x3fc1c8(0xa5),{'styleId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0xee)),'name':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x18c))[_0x3fc1c8(0x123)](),'fontFamily':z['string']()['describe'](_0x3fc1c8(0xc0))['optional'](),'fontWeight':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0xd4))[_0x3fc1c8(0x123)](),'fontSize':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)]('New\x20font\x20size\x20in\x20pixels')['optional']()},async _0x33c022=>{const _0x17a3f3=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x17a3f3(0x158),_0x33c022));}catch(_0xc280b1){return _0x740266(_0xc280b1);}});break;case _0x3fc1c8(0xfa):_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x104),_0x3fc1c8(0x1c7),{},async()=>{try{return _0xebb3c8(await _0x455c3d('get_local_variables',{}));}catch(_0x241596){return _0x740266(_0x241596);}}),_0x22f338[_0x3fc1c8(0x150)]('create_variable_collection',_0x3fc1c8(0xa9),{'name':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x192)),'modes':z['array'](z[_0x3fc1c8(0x1c0)]())[_0x3fc1c8(0x149)](_0x3fc1c8(0xd3))[_0x3fc1c8(0x123)]()},async _0x36a6d7=>{try{return _0xebb3c8(await _0x455c3d('create_variable_collection',_0x36a6d7));}catch(_0x139d3f){return _0x740266(_0x139d3f);}}),_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x99),_0x3fc1c8(0x15c),{'collectionId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x196)),'name':z['string']()['describe'](_0x3fc1c8(0x183)),'type':z['string']()[_0x3fc1c8(0x149)]('COLOR,\x20NUMBER,\x20STRING,\x20or\x20BOOLEAN'),'value':z[_0x3fc1c8(0x19a)]([z['string'](),z[_0x3fc1c8(0x105)](),z[_0x3fc1c8(0x1c4)]()])[_0x3fc1c8(0x149)](_0x3fc1c8(0x18f))[_0x3fc1c8(0x123)](),'modeId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x113))[_0x3fc1c8(0x123)]()},async _0x27177e=>{const _0x4c022f=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x4c022f(0x99),_0x27177e));}catch(_0x237eea){return _0x740266(_0x237eea);}}),_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x80),_0x3fc1c8(0x167),{'variableId':z[_0x3fc1c8(0x1c0)]()['describe']('Variable\x20ID'),'value':z['union']([z[_0x3fc1c8(0x1c0)](),z[_0x3fc1c8(0x105)](),z[_0x3fc1c8(0x1c4)]()])[_0x3fc1c8(0x149)](_0x3fc1c8(0xc2)),'modeId':z[_0x3fc1c8(0x1c0)]()['describe'](_0x3fc1c8(0x6a))[_0x3fc1c8(0x123)]()},async _0x17c5b2=>{const _0x2f343e=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x2f343e(0x80),_0x17c5b2));}catch(_0xb53897){return _0x740266(_0xb53897);}}),_0x22f338[_0x3fc1c8(0x150)](_0x3fc1c8(0x128),_0x3fc1c8(0x139),{'nodeId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x88)),'variableId':z['string']()[_0x3fc1c8(0x149)](_0x3fc1c8(0xf3)),'property':z[_0x3fc1c8(0x1c0)]()['describe']('Property\x20to\x20bind:\x20fill_color,\x20opacity,\x20width,\x20height,\x20corner_radius,\x20padding_top,\x20padding_bottom,\x20padding_left,\x20padding_right,\x20item_spacing')},async _0xf9ebb6=>{const _0x20d4db=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x20d4db(0x128),_0xf9ebb6));}catch(_0x5d7902){return _0x740266(_0x5d7902);}});break;case _0x3fc1c8(0xe3):_0x22f338['tool'](_0x3fc1c8(0x11e),_0x3fc1c8(0x1c1),{'nodeId':z[_0x3fc1c8(0x1c0)]()[_0x3fc1c8(0x149)](_0x3fc1c8(0x17c)),'format':z['string']()[_0x3fc1c8(0x149)](_0x3fc1c8(0xc1))['optional'](),'scale':z[_0x3fc1c8(0x105)]()[_0x3fc1c8(0x149)]('Export\x20scale\x20multiplier\x20e.g.\x201,\x202,\x203\x20(default\x201)')[_0x3fc1c8(0x123)]()},async _0x516c32=>{const _0x269e61=_0x3fc1c8;try{return _0xebb3c8(await _0x455c3d(_0x269e61(0x11e),_0x516c32));}catch(_0x2b1639){return _0x740266(_0x2b1639);}});break;}}_0x22f338[_0x4861ed(0x150)](_0x4861ed(0x1d9),_0x4861ed(0xc3),{'category':z[_0x4861ed(0xe8)](['pages',_0x4861ed(0x77),_0x4861ed(0xf5),_0x4861ed(0xec),_0x4861ed(0x19e),'text','components',_0x4861ed(0xf1),_0x4861ed(0xfa),_0x4861ed(0xe3)])[_0x4861ed(0x149)](_0x4861ed(0x1a9))},async _0xb19abd=>{const _0x3a574e=_0x4861ed,{category:_0x4cf41f}=_0xb19abd,_0x172c53=_0x24b15f['has'](_0x4cf41f);_0x14a142(_0x4cf41f);const _0x4732df=_0x43fdb6[_0x4cf41f];return _0xebb3c8({'status':_0x172c53?_0x3a574e(0xfe):_0x3a574e(0xeb),'category':_0x4cf41f,'tools_available':_0x4732df,'message':_0x172c53?_0x3a574e(0x1af)+_0x4cf41f+_0x3a574e(0x107)+_0x4732df[_0x3a574e(0x135)](',\x20'):_0x3a574e(0x1af)+_0x4cf41f+'\x27\x20loaded.\x20'+_0x4732df[_0x3a574e(0x6c)]+_0x3a574e(0x98)+_0x4732df[_0x3a574e(0x135)](',\x20')});});const _0x3268cb=new StdioServerTransport();await _0x22f338['connect'](_0x3268cb),console[_0x4861ed(0x1d1)](_0x4861ed(0xb8)),console[_0x4861ed(0x1d1)]('Zapcode:\x20Core\x20tools\x20active\x20(6):\x20get_figma_context,\x20create_wireframe,\x20execute_figma_code,\x20get_figma_selection,\x20get_node_properties,\x20load_tool_category'),console[_0x4861ed(0x1d1)](_0x4861ed(0x197));}async function saveAssets(_0xbfc8b0,_0x4526d5){const _0x4ff43c=a0_0x35a9,_0x3b93b4=[],_0x232fa9=[],_0x1e92e3=new Map();if(!Array[_0x4ff43c(0x19c)](_0xbfc8b0))return{'savedFiles':_0x3b93b4,'errors':['No\x20assets\x20provided'],'assetsByType':_0x1e92e3};try{for(const _0x1a5c34 of _0xbfc8b0){if(!_0x1a5c34[_0x4ff43c(0x7c)]||!_0x1a5c34['name']||!_0x1a5c34['data']){console[_0x4ff43c(0x1d1)]('Zapcode:\x20Skipping\x20invalid\x20asset:\x20'+JSON[_0x4ff43c(0x142)](_0x1a5c34));continue;}const _0x201425=a0_0x1fb13f[_0x4ff43c(0x135)](_0x4526d5,_0x1a5c34[_0x4ff43c(0x7c)]);!a0_0x2c0b59[_0x4ff43c(0x10a)](_0x201425)&&a0_0x2c0b59[_0x4ff43c(0xce)](_0x201425,{'recursive':!![]});const _0x432517=_0x1a5c34[_0x4ff43c(0xf4)][_0x4ff43c(0xb7)](/[^a-z0-9]/gi,'_')[_0x4ff43c(0x181)](),_0x5eb214=_0x432517+'.'+_0x1a5c34['type'],_0x4fd02b=a0_0x1fb13f['join'](_0x201425,_0x5eb214);let _0x5b413f;if(_0x1a5c34[_0x4ff43c(0x9e)][_0x4ff43c(0x126)](_0x4ff43c(0xb6))){const _0x307a03=_0x1a5c34['data'][_0x4ff43c(0x14a)](',')[0x1];_0x5b413f=Buffer[_0x4ff43c(0xe4)](_0x307a03,_0x4ff43c(0x1a8));}else _0x1a5c34['type']===_0x4ff43c(0x11c)?_0x5b413f=_0x1a5c34[_0x4ff43c(0x9e)]:_0x5b413f=Buffer['from'](_0x1a5c34[_0x4ff43c(0x9e)],_0x4ff43c(0x1a8));a0_0x2c0b59[_0x4ff43c(0xdd)](_0x4fd02b,_0x5b413f),_0x3b93b4[_0x4ff43c(0xc9)](_0x4fd02b),!_0x1e92e3['has'](_0x1a5c34[_0x4ff43c(0x7c)])&&_0x1e92e3[_0x4ff43c(0x112)](_0x1a5c34['type'],[]),_0x1e92e3[_0x4ff43c(0xaa)](_0x1a5c34[_0x4ff43c(0x7c)])[_0x4ff43c(0xc9)](_0x4fd02b);}}catch(_0x5adca4){_0x232fa9[_0x4ff43c(0xc9)](_0x4ff43c(0x138)+_0x5adca4[_0x4ff43c(0x172)]);}return{'savedFiles':_0x3b93b4,'errors':_0x232fa9,'assetsByType':_0x1e92e3};}async function main(){const _0x25bae3=a0_0x35a9,_0x2516e0=(function(){let _0x355de7=!![];return function(_0x1007d6,_0x33351b){const _0x3e5143=_0x355de7?function(){const _0x2f853b=a0_0x35a9;if(_0x33351b){const _0x4eb04d=_0x33351b[_0x2f853b(0x125)](_0x1007d6,arguments);return _0x33351b=null,_0x4eb04d;}}:function(){};return _0x355de7=![],_0x3e5143;};}()),_0xaa92a9=_0x2516e0(this,function(){const _0x5caeed=a0_0x35a9;return _0xaa92a9[_0x5caeed(0x1cd)]()[_0x5caeed(0xae)](_0x5caeed(0x108))[_0x5caeed(0x1cd)]()[_0x5caeed(0xe7)](_0xaa92a9)['search'](_0x5caeed(0x108));});_0xaa92a9();const {figmaPort:_0x480a49}=parseArgs();try{const _0x6f7d02=await findAvailablePort(_0x480a49);console[_0x25bae3(0x1d1)]('Zapcode:\x20✅\x20Found\x20available\x20port\x20'+_0x6f7d02),await startSocketIOServer(_0x6f7d02),await startMcpServer();}catch(_0xe9e7b8){console[_0x25bae3(0x1d1)]('Zapcode:\x20💥\x20Failed\x20to\x20start\x20servers:',_0xe9e7b8),process['exit'](0x1);}}function a0_0x35a9(_0x322c14,_0x512405){_0x322c14=_0x322c14-0x66;const _0x3a56e7=a0_0x25f4();let _0x320781=_0x3a56e7[_0x322c14];if(a0_0x35a9['ZphyGZ']===undefined){var _0x4a87b1=function(_0x2173ab){const _0x1fc821='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x57d2a9='',_0x18d6c3='',_0x11202d=_0x57d2a9+_0x4a87b1;for(let _0x187ef1=0x0,_0x41346c,_0x2c0b59,_0x1fb13f=0x0;_0x2c0b59=_0x2173ab['charAt'](_0x1fb13f++);~_0x2c0b59&&(_0x41346c=_0x187ef1%0x4?_0x41346c*0x40+_0x2c0b59:_0x2c0b59,_0x187ef1++%0x4)?_0x57d2a9+=_0x11202d['charCodeAt'](_0x1fb13f+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x41346c>>(-0x2*_0x187ef1&0x6)):_0x187ef1:0x0){_0x2c0b59=_0x1fc821['indexOf'](_0x2c0b59);}for(let _0x4952cd=0x0,_0x54632=_0x57d2a9['length'];_0x4952cd<_0x54632;_0x4952cd++){_0x18d6c3+='%'+('00'+_0x57d2a9['charCodeAt'](_0x4952cd)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x18d6c3);};a0_0x35a9['nLPZQb']=_0x4a87b1,a0_0x35a9['FedOGa']={},a0_0x35a9['ZphyGZ']=!![];}const _0x25f41c=_0x3a56e7[0x0],_0x35a9ca=_0x322c14+_0x25f41c,_0x3cfcf1=a0_0x35a9['FedOGa'][_0x35a9ca];if(!_0x3cfcf1){const _0x22f547=function(_0x430983){this['LtGCJT']=_0x430983,this['JetHlr']=[0x1,0x0,0x0],this['jCARSj']=function(){return'newState';},this['LtUGYg']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['BcuOBx']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x22f547['prototype']['PtwnEi']=function(){const _0x32edbe=new RegExp(this['LtUGYg']+this['BcuOBx']),_0x220143=_0x32edbe['test'](this['jCARSj']['toString']())?--this['JetHlr'][0x1]:--this['JetHlr'][0x0];return this['HDgjMk'](_0x220143);},_0x22f547['prototype']['HDgjMk']=function(_0x4cc2cc){if(!Boolean(~_0x4cc2cc))return _0x4cc2cc;return this['WIFMmY'](this['LtGCJT']);},_0x22f547['prototype']['WIFMmY']=function(_0x39a394){for(let _0x592e97=0x0,_0x354a32=this['JetHlr']['length'];_0x592e97<_0x354a32;_0x592e97++){this['JetHlr']['push'](Math['round'](Math['random']())),_0x354a32=this['JetHlr']['length'];}return _0x39a394(this['JetHlr'][0x0]);},new _0x22f547(a0_0x35a9)['PtwnEi'](),_0x320781=a0_0x35a9['nLPZQb'](_0x320781),a0_0x35a9['FedOGa'][_0x35a9ca]=_0x320781;}else _0x320781=_0x3cfcf1;return _0x320781;}let isShuttingDown=![];async function shutdown(){const _0x1788c7=a0_0x35a9;if(isShuttingDown){process[_0x1788c7(0x148)](0x0);return;}isShuttingDown=!![],console[_0x1788c7(0x1d1)]('\x0aZapcode:\x20Gracefully\x20shutting\x20down...'),figmaContextRequests['forEach'](_0x3a4fb3=>{const _0xca007d=_0x1788c7;_0x3a4fb3[_0xca007d(0x198)](new Error(_0xca007d(0xb5)));}),figmaContextRequests[_0x1788c7(0xa6)](),io&&io[_0x1788c7(0x190)](!![]),connectedFigmaClient&&(connectedFigmaClient[_0x1788c7(0xe5)](!![]),connectedFigmaClient=null),setImmediate(()=>{const _0x4bffa0=_0x1788c7;io&&io[_0x4bffa0(0xd7)](),figmaHttpServer&&figmaHttpServer['close'](),console['error']('Zapcode:\x20Server\x20shutdown\x20complete.'),process[_0x4bffa0(0x148)](0x0);}),setTimeout(()=>{const _0x46b466=_0x1788c7;process[_0x46b466(0x148)](0x0);},0x1f4);}process['on']('SIGINT',shutdown),process['on']('SIGTERM',shutdown),main();
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zapcode-figma-mcp",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "An MCP server that exposes Figma context via a plugin and saves assets, from Zapcode.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"zapcode-figma-mcp": "./build/index.js"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
|
-
"build": "tsc",
|
|
10
|
+
"build": "tsc && javascript-obfuscator build/index.js --output build/index.js --compact true --string-array true --string-array-encoding base64 --rename-globals false --self-defending true",
|
|
11
11
|
"start": "node build/index.js",
|
|
12
12
|
"prepublishOnly": "npm run build"
|
|
13
13
|
},
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@types/node": "^20.12.12",
|
|
44
|
+
"javascript-obfuscator": "^5.3.0",
|
|
44
45
|
"typescript": "^5.4.5"
|
|
45
46
|
}
|
|
46
47
|
}
|