react-visual-feedback 1.4.9 → 2.2.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sheets.js","sources":["../../src/integrations/config.js","../../src/integrations/sheets.js"],"sourcesContent":["/**\n * Integration Configuration & Default Mappings\n * Users can customize these by passing their own config\n */\n\n// ============================================\n// ATLASSIAN DOCUMENT FORMAT (ADF) HELPER\n// ============================================\n\n/**\n * Convert plain text to Atlassian Document Format\n * Jira Cloud requires descriptions in ADF format\n */\nexport function textToADF(text) {\n const lines = text.split('\\n');\n const content = [];\n let currentParagraph = [];\n\n const flushParagraph = () => {\n if (currentParagraph.length > 0) {\n content.push({\n type: 'paragraph',\n content: currentParagraph\n });\n currentParagraph = [];\n }\n };\n\n lines.forEach((line, index) => {\n // Check if it's a section header (ALL CAPS)\n if (line.match(/^[A-Z][A-Z\\s]+$/) && line.trim().length > 0) {\n flushParagraph();\n content.push({\n type: 'heading',\n attrs: { level: 3 },\n content: [{ type: 'text', text: line }]\n });\n } else if (line === '---') {\n // Horizontal rule\n flushParagraph();\n content.push({ type: 'rule' });\n } else if (line.trim() === '') {\n // Empty line - flush paragraph\n flushParagraph();\n } else {\n // Regular line\n if (currentParagraph.length > 0) {\n currentParagraph.push({ type: 'hardBreak' });\n }\n currentParagraph.push({ type: 'text', text: line });\n }\n });\n\n flushParagraph();\n\n return {\n type: 'doc',\n version: 1,\n content: content.length > 0 ? content : [{ type: 'paragraph', content: [{ type: 'text', text: ' ' }] }]\n };\n}\n\n// ============================================\n// GOOGLE SHEETS COLUMN MAPPING\n// ============================================\n\nexport const DEFAULT_SHEET_COLUMNS = {\n timestamp: {\n key: 'timestamp',\n header: 'Timestamp',\n field: 'timestamp',\n transform: (value) => value || new Date().toISOString()\n },\n id: {\n key: 'id',\n header: 'Feedback ID',\n field: 'id'\n },\n feedback: {\n key: 'feedback',\n header: 'Feedback',\n field: 'feedback'\n },\n type: {\n key: 'type',\n header: 'Type',\n field: 'type',\n transform: (value) => value || 'bug'\n },\n status: {\n key: 'status',\n header: 'Status',\n field: 'status',\n transform: (value) => value || 'new'\n },\n userName: {\n key: 'userName',\n header: 'User Name',\n field: 'userName',\n transform: (value) => value || 'Anonymous'\n },\n userEmail: {\n key: 'userEmail',\n header: 'User Email',\n field: 'userEmail',\n transform: (value) => value || ''\n },\n url: {\n key: 'url',\n header: 'Page URL',\n field: 'url'\n },\n viewport: {\n key: 'viewport',\n header: 'Viewport',\n field: 'viewport',\n transform: (value) => value ? `${value.width}x${value.height}` : ''\n },\n userAgent: {\n key: 'userAgent',\n header: 'Browser',\n field: 'userAgent',\n transform: (value) => {\n if (!value) return '';\n // Simplify user agent\n if (value.includes('Chrome')) return 'Chrome';\n if (value.includes('Firefox')) return 'Firefox';\n if (value.includes('Safari')) return 'Safari';\n if (value.includes('Edge')) return 'Edge';\n return value.substring(0, 50);\n }\n },\n screenshot: {\n key: 'screenshot',\n header: 'Screenshot',\n field: 'screenshot',\n transform: (value) => value ? 'Yes' : 'No' // Don't store base64 in sheets\n },\n video: {\n key: 'video',\n header: 'Video',\n field: 'video',\n transform: (value) => value ? 'Yes' : 'No'\n },\n elementSelector: {\n key: 'elementSelector',\n header: 'Element',\n field: 'elementInfo',\n transform: (value) => value?.selector || ''\n },\n componentName: {\n key: 'componentName',\n header: 'Component',\n field: 'elementInfo',\n transform: (value) => value?.componentStack?.[0] || ''\n },\n sourceFile: {\n key: 'sourceFile',\n header: 'Source File',\n field: 'elementInfo',\n transform: (value) => value?.sourceFile || ''\n },\n jiraKey: {\n key: 'jiraKey',\n header: 'Jira Issue',\n field: 'jiraKey',\n transform: (value) => value || ''\n }\n};\n\n// Default columns to include (order matters)\nexport const DEFAULT_SHEET_COLUMN_ORDER = [\n 'timestamp',\n 'id',\n 'feedback',\n 'type',\n 'status',\n 'userName',\n 'userEmail',\n 'url',\n 'viewport',\n 'screenshot',\n 'video',\n 'jiraKey'\n];\n\n// ============================================\n// JIRA FIELD MAPPING\n// ============================================\n\nexport const DEFAULT_JIRA_FIELDS = {\n summary: {\n key: 'summary',\n source: 'feedback',\n maxLength: 255,\n prefix: '[Feedback] ',\n transform: (data) => {\n const prefix = '[Feedback] ';\n const text = data.feedback || 'User Feedback';\n const maxLen = 255 - prefix.length;\n return prefix + (text.length > maxLen ? text.substring(0, maxLen - 3) + '...' : text);\n }\n },\n description: {\n key: 'description',\n // Build description directly - no wiki markup, clean plain text for ADF\n transform: (data) => {\n const lines = [];\n\n // Feedback Details\n lines.push('FEEDBACK DETAILS');\n lines.push(`Feedback: ${data.feedback || 'No feedback provided'}`);\n lines.push(`Type: ${data.type || 'bug'}`);\n lines.push(`Status: ${data.status || 'new'}`);\n lines.push('');\n\n // User Information\n lines.push('USER INFORMATION');\n lines.push(`Name: ${data.userName || 'Anonymous'}`);\n lines.push(`Email: ${data.userEmail || 'Not provided'}`);\n lines.push('');\n\n // Technical Details\n lines.push('TECHNICAL DETAILS');\n lines.push(`Page URL: ${data.url || 'N/A'}`);\n if (data.viewport) {\n lines.push(`Viewport: ${data.viewport.width}x${data.viewport.height}`);\n }\n if (data.userAgent) {\n // Simplify user agent\n let browser = data.userAgent;\n if (browser.includes('Chrome')) browser = 'Chrome';\n else if (browser.includes('Firefox')) browser = 'Firefox';\n else if (browser.includes('Safari')) browser = 'Safari';\n else if (browser.includes('Edge')) browser = 'Edge';\n lines.push(`Browser: ${browser}`);\n }\n\n // Element info\n if (data.elementInfo) {\n if (data.elementInfo.selector) {\n lines.push(`Element: ${data.elementInfo.selector}`);\n }\n if (data.elementInfo.componentStack?.length) {\n lines.push(`Component: ${data.elementInfo.componentStack.join(' > ')}`);\n }\n if (data.elementInfo.sourceFile) {\n lines.push(`Source: ${data.elementInfo.sourceFile}:${data.elementInfo.lineNumber || ''}`);\n }\n }\n lines.push('');\n\n // Attachments\n const attachments = [];\n if (data.screenshot) attachments.push('Screenshot');\n if (data.video) attachments.push('Screen Recording');\n if (attachments.length > 0) {\n lines.push('ATTACHMENTS');\n lines.push(attachments.join(', ') + ' attached');\n lines.push('');\n }\n\n lines.push('---');\n lines.push('Submitted via React Visual Feedback');\n\n return lines.join('\\n');\n }\n },\n issuetype: {\n key: 'issuetype',\n // Default to 'Task' which exists in most Jira projects\n // Can be overridden via JIRA_ISSUE_TYPE env var or config\n value: 'Task',\n // Map feedback types to Jira issue types (all default to Task for compatibility)\n typeMapping: {\n bug: 'Task',\n feature: 'Task',\n improvement: 'Task',\n question: 'Task',\n other: 'Task'\n },\n transform: (data, config) => {\n // Priority: env var > config value > type mapping > default\n const envIssueType = typeof process !== 'undefined' ? process.env?.JIRA_ISSUE_TYPE : null;\n if (envIssueType) return envIssueType;\n if (config?.value && config.value !== 'Task') return config.value;\n const mapping = config?.typeMapping || DEFAULT_JIRA_FIELDS.issuetype.typeMapping;\n return mapping[data.type] || config?.value || 'Task';\n }\n },\n labels: {\n key: 'labels',\n value: ['user-feedback'],\n transform: (data, config) => {\n const labels = [...(config?.value || ['user-feedback'])];\n if (data.type) labels.push(`type-${data.type}`);\n return labels;\n }\n },\n priority: {\n key: 'priority',\n // Map to Jira priority IDs (user can customize)\n priorityMapping: {\n bug: 'High',\n feature: 'Medium',\n improvement: 'Medium',\n question: 'Low',\n other: 'Low'\n },\n transform: (data, config) => {\n const mapping = config?.priorityMapping || DEFAULT_JIRA_FIELDS.priority.priorityMapping;\n return mapping[data.type] || 'Medium';\n }\n }\n};\n\n// ============================================\n// JIRA STATUS MAPPING (Bidirectional sync)\n// ============================================\n\nexport const DEFAULT_JIRA_STATUS_MAPPING = {\n // Our status -> Jira status\n toJira: {\n new: 'To Do',\n open: 'To Do',\n inProgress: 'In Progress',\n underReview: 'In Review',\n onHold: 'On Hold',\n resolved: 'Done',\n closed: 'Done',\n wontFix: 'Won\\'t Do'\n },\n // Jira status -> Our status\n fromJira: {\n 'To Do': 'open',\n 'Open': 'open',\n 'In Progress': 'inProgress',\n 'In Review': 'underReview',\n 'On Hold': 'onHold',\n 'Done': 'resolved',\n 'Closed': 'closed',\n 'Won\\'t Do': 'wontFix',\n 'Resolved': 'resolved'\n }\n};\n\n// ============================================\n// INTEGRATION TYPES\n// ============================================\n\nexport const INTEGRATION_TYPES = {\n JIRA: {\n SERVER: 'server', // Our server handler\n AUTOMATION: 'jira-automation', // Jira's built-in webhooks\n ZAPIER: 'zapier' // Zapier webhook\n },\n SHEETS: {\n SERVER: 'server', // Our server handler (Service Account)\n OAUTH: 'oauth', // OAuth with refresh\n APPS_SCRIPT: 'google-apps-script', // Google Apps Script\n ZAPIER: 'zapier' // Zapier webhook\n }\n};\n\n// ============================================\n// HELPER FUNCTIONS\n// ============================================\n\n/**\n * Merge user config with defaults\n */\nexport function mergeSheetColumns(userColumns = {}, columnOrder = null) {\n const merged = { ...DEFAULT_SHEET_COLUMNS };\n\n // Apply user overrides\n Object.entries(userColumns).forEach(([key, value]) => {\n if (value === null || value === false) {\n // Remove column\n delete merged[key];\n } else if (typeof value === 'object') {\n // Merge with default\n merged[key] = { ...merged[key], ...value };\n }\n });\n\n // Determine column order\n const order = columnOrder || Object.keys(merged).filter(k =>\n DEFAULT_SHEET_COLUMN_ORDER.includes(k) || userColumns[k]\n );\n\n return { columns: merged, order };\n}\n\n/**\n * Merge user Jira config with defaults\n */\nexport function mergeJiraFields(userFields = {}) {\n const merged = { ...DEFAULT_JIRA_FIELDS };\n\n Object.entries(userFields).forEach(([key, value]) => {\n if (value === null || value === false) {\n delete merged[key];\n } else if (typeof value === 'object') {\n merged[key] = { ...merged[key], ...value };\n }\n });\n\n return merged;\n}\n\n/**\n * Transform feedback data to sheet row\n */\nexport function feedbackToSheetRow(feedbackData, config = {}) {\n const { columns, order } = mergeSheetColumns(config.columns, config.columnOrder);\n\n const row = order.map(key => {\n const col = columns[key];\n if (!col) return '';\n\n const rawValue = feedbackData[col.field];\n if (col.transform) {\n return col.transform(rawValue) || '';\n }\n return rawValue || '';\n });\n\n return row;\n}\n\n/**\n * Get sheet headers\n */\nexport function getSheetHeaders(config = {}) {\n const { columns, order } = mergeSheetColumns(config.columns, config.columnOrder);\n return order.map(key => columns[key]?.header || key);\n}\n\n/**\n * Transform feedback data to Jira issue\n */\nexport function feedbackToJiraIssue(feedbackData, config = {}) {\n const fields = mergeJiraFields(config.fields);\n\n // Get plain text description and convert to ADF\n const plainDescription = fields.description.transform(feedbackData, fields.description);\n const adfDescription = textToADF(plainDescription);\n\n const issue = {\n fields: {\n project: { key: config.projectKey },\n summary: fields.summary.transform(feedbackData, fields.summary),\n description: adfDescription,\n issuetype: { name: fields.issuetype.transform(feedbackData, fields.issuetype) }\n }\n };\n\n // Add labels if configured\n if (fields.labels) {\n issue.fields.labels = fields.labels.transform(feedbackData, fields.labels);\n }\n\n // Add priority if configured and user wants it\n if (config.includePriority && fields.priority) {\n issue.fields.priority = { name: fields.priority.transform(feedbackData, fields.priority) };\n }\n\n // Add custom fields\n if (config.customFields) {\n Object.entries(config.customFields).forEach(([fieldId, fieldConfig]) => {\n if (typeof fieldConfig === 'string') {\n issue.fields[fieldId] = feedbackData[fieldConfig];\n } else if (fieldConfig.transform) {\n issue.fields[fieldId] = fieldConfig.transform(feedbackData);\n } else if (fieldConfig.value) {\n issue.fields[fieldId] = fieldConfig.value;\n }\n });\n }\n\n return issue;\n}\n\n/**\n * Map Jira status to our status\n */\nexport function mapJiraStatusToLocal(jiraStatus, customMapping = {}) {\n const mapping = { ...DEFAULT_JIRA_STATUS_MAPPING.fromJira, ...customMapping };\n return mapping[jiraStatus] || 'open';\n}\n\n/**\n * Map our status to Jira status\n */\nexport function mapLocalStatusToJira(localStatus, customMapping = {}) {\n const mapping = { ...DEFAULT_JIRA_STATUS_MAPPING.toJira, ...customMapping };\n return mapping[localStatus] || 'To Do';\n}\n","/**\n * Google Sheets Integration Server Handler\n *\n * Supports:\n * - Service Account authentication (recommended for servers)\n * - OAuth 2.0 with automatic token refresh\n * - Google Apps Script (no server needed)\n *\n * Usage (Next.js App Router):\n * export { POST } from 'react-visual-feedback/server/sheets';\n *\n * Usage (Express):\n * app.post('/api/sheets', sheetsHandler({ spreadsheetId: '...' }));\n */\n\nimport {\n feedbackToSheetRow,\n getSheetHeaders,\n mergeSheetColumns,\n DEFAULT_SHEET_COLUMN_ORDER\n} from './config.js';\n\n// ============================================\n// GOOGLE SHEETS CLIENT (Service Account)\n// ============================================\n\nclass SheetsClient {\n constructor(config) {\n this.spreadsheetId = config.spreadsheetId || process.env.GOOGLE_SPREADSHEET_ID;\n this.sheetName = config.sheetName || 'Feedback';\n\n // Service Account credentials\n const credentials = config.credentials || process.env.GOOGLE_SERVICE_ACCOUNT;\n\n if (!credentials) {\n throw new Error(\n 'Google credentials missing. Set GOOGLE_SERVICE_ACCOUNT environment variable.'\n );\n }\n\n this.credentials = typeof credentials === 'string'\n ? JSON.parse(credentials)\n : credentials;\n\n if (!this.spreadsheetId) {\n throw new Error(\n 'Spreadsheet ID missing. Set GOOGLE_SPREADSHEET_ID environment variable.'\n );\n }\n\n this.accessToken = null;\n this.tokenExpiry = null;\n }\n\n /**\n * Get access token using Service Account JWT\n */\n async getAccessToken() {\n // Return cached token if still valid\n if (this.accessToken && this.tokenExpiry && Date.now() < this.tokenExpiry) {\n return this.accessToken;\n }\n\n const { client_email, private_key } = this.credentials;\n\n // Create JWT\n const header = {\n alg: 'RS256',\n typ: 'JWT'\n };\n\n const now = Math.floor(Date.now() / 1000);\n const payload = {\n iss: client_email,\n scope: 'https://www.googleapis.com/auth/spreadsheets',\n aud: 'https://oauth2.googleapis.com/token',\n exp: now + 3600,\n iat: now\n };\n\n const jwt = await this.createJWT(header, payload, private_key);\n\n // Exchange JWT for access token\n const response = await fetch('https://oauth2.googleapis.com/token', {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({\n grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',\n assertion: jwt\n })\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Failed to get access token: ${error}`);\n }\n\n const data = await response.json();\n this.accessToken = data.access_token;\n this.tokenExpiry = Date.now() + (data.expires_in - 60) * 1000; // Refresh 1 min early\n\n return this.accessToken;\n }\n\n /**\n * Create JWT for Service Account auth\n */\n async createJWT(header, payload, privateKey) {\n const encoder = new TextEncoder();\n\n const headerB64 = this.base64UrlEncode(JSON.stringify(header));\n const payloadB64 = this.base64UrlEncode(JSON.stringify(payload));\n const signatureInput = `${headerB64}.${payloadB64}`;\n\n // Import private key\n const pemHeader = '-----BEGIN PRIVATE KEY-----';\n const pemFooter = '-----END PRIVATE KEY-----';\n const pemContents = privateKey\n .replace(pemHeader, '')\n .replace(pemFooter, '')\n .replace(/\\s/g, '');\n\n const binaryKey = Buffer.from(pemContents, 'base64');\n\n // Use Node.js crypto for signing\n const crypto = await import('crypto');\n const sign = crypto.createSign('RSA-SHA256');\n sign.update(signatureInput);\n sign.end();\n\n const signature = sign.sign({\n key: privateKey,\n padding: crypto.constants.RSA_PKCS1_PADDING\n });\n\n const signatureB64 = this.base64UrlEncode(signature);\n\n return `${signatureInput}.${signatureB64}`;\n }\n\n base64UrlEncode(data) {\n const str = typeof data === 'string' ? data : Buffer.from(data).toString('base64');\n return Buffer.from(data)\n .toString('base64')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '');\n }\n\n /**\n * Make authenticated request to Sheets API\n */\n async request(endpoint, options = {}) {\n const token = await this.getAccessToken();\n const baseUrl = 'https://sheets.googleapis.com/v4/spreadsheets';\n\n const response = await fetch(`${baseUrl}/${this.spreadsheetId}${endpoint}`, {\n ...options,\n headers: {\n 'Authorization': `Bearer ${token}`,\n 'Content-Type': 'application/json',\n ...options.headers\n }\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Sheets API error (${response.status}): ${error}`);\n }\n\n const text = await response.text();\n return text ? JSON.parse(text) : null;\n }\n\n /**\n * Append row to sheet\n */\n async appendRow(values, sheetName = null) {\n const range = `${sheetName || this.sheetName}!A:Z`;\n\n return this.request(`/values/${encodeURIComponent(range)}:append`, {\n method: 'POST',\n body: JSON.stringify({\n values: [values],\n majorDimension: 'ROWS'\n }) + '?valueInputOption=RAW&insertDataOption=INSERT_ROWS'\n });\n }\n\n /**\n * Get sheet values\n */\n async getValues(range) {\n return this.request(`/values/${encodeURIComponent(range)}`);\n }\n\n /**\n * Update specific cell/range\n */\n async updateValues(range, values) {\n return this.request(`/values/${encodeURIComponent(range)}?valueInputOption=RAW`, {\n method: 'PUT',\n body: JSON.stringify({\n values,\n majorDimension: 'ROWS'\n })\n });\n }\n\n /**\n * Check if headers exist, create if not\n */\n async ensureHeaders(headers) {\n try {\n const existing = await this.getValues(`${this.sheetName}!1:1`);\n\n if (!existing.values || existing.values.length === 0) {\n // No headers, add them\n await this.updateValues(`${this.sheetName}!A1`, [headers]);\n return { created: true };\n }\n\n return { created: false, existing: existing.values[0] };\n } catch (error) {\n // Sheet might not exist, try to create headers anyway\n try {\n await this.updateValues(`${this.sheetName}!A1`, [headers]);\n return { created: true };\n } catch (e) {\n throw new Error(`Failed to set up headers: ${e.message}`);\n }\n }\n }\n\n /**\n * Find row by feedback ID\n */\n async findRowByFeedbackId(feedbackId, idColumn = 'B') {\n const values = await this.getValues(`${this.sheetName}!${idColumn}:${idColumn}`);\n\n if (!values.values) return null;\n\n const rowIndex = values.values.findIndex(row => row[0] === feedbackId);\n return rowIndex >= 0 ? rowIndex + 1 : null; // 1-indexed\n }\n\n /**\n * Update feedback status in sheet\n */\n async updateStatus(feedbackId, newStatus, statusColumn = 'E') {\n const rowNumber = await this.findRowByFeedbackId(feedbackId);\n\n if (!rowNumber) {\n throw new Error(`Feedback ${feedbackId} not found in sheet`);\n }\n\n await this.updateValues(\n `${this.sheetName}!${statusColumn}${rowNumber}`,\n [[newStatus]]\n );\n\n return { success: true, row: rowNumber };\n }\n}\n\n// ============================================\n// OAUTH CLIENT (User Authentication)\n// ============================================\n\nclass SheetsOAuthClient extends SheetsClient {\n constructor(config) {\n super({ spreadsheetId: config.spreadsheetId, sheetName: config.sheetName, credentials: { client_email: '', private_key: '' } });\n\n this.clientId = config.clientId || process.env.GOOGLE_CLIENT_ID;\n this.clientSecret = config.clientSecret || process.env.GOOGLE_CLIENT_SECRET;\n this.redirectUri = config.redirectUri || process.env.GOOGLE_REDIRECT_URI;\n\n // Token storage (user must provide storage mechanism)\n this.getStoredTokens = config.getStoredTokens;\n this.saveTokens = config.saveTokens;\n\n if (!this.clientId || !this.clientSecret) {\n throw new Error('OAuth configuration missing. Required: GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET');\n }\n }\n\n /**\n * Get OAuth authorization URL\n */\n getAuthUrl(state = '') {\n const params = new URLSearchParams({\n client_id: this.clientId,\n redirect_uri: this.redirectUri,\n response_type: 'code',\n scope: 'https://www.googleapis.com/auth/spreadsheets',\n access_type: 'offline',\n prompt: 'consent',\n state\n });\n\n return `https://accounts.google.com/o/oauth2/v2/auth?${params}`;\n }\n\n /**\n * Exchange authorization code for tokens\n */\n async exchangeCode(code) {\n const response = await fetch('https://oauth2.googleapis.com/token', {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({\n client_id: this.clientId,\n client_secret: this.clientSecret,\n code,\n grant_type: 'authorization_code',\n redirect_uri: this.redirectUri\n })\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Failed to exchange code: ${error}`);\n }\n\n const tokens = await response.json();\n\n // Save tokens\n if (this.saveTokens) {\n await this.saveTokens({\n access_token: tokens.access_token,\n refresh_token: tokens.refresh_token,\n expiry: Date.now() + tokens.expires_in * 1000\n });\n }\n\n return tokens;\n }\n\n /**\n * Refresh access token using refresh token\n */\n async refreshAccessToken(refreshToken) {\n const response = await fetch('https://oauth2.googleapis.com/token', {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({\n client_id: this.clientId,\n client_secret: this.clientSecret,\n refresh_token: refreshToken,\n grant_type: 'refresh_token'\n })\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Failed to refresh token: ${error}`);\n }\n\n const data = await response.json();\n\n // Save new access token\n if (this.saveTokens) {\n const stored = await this.getStoredTokens();\n await this.saveTokens({\n access_token: data.access_token,\n refresh_token: stored.refresh_token, // Keep existing refresh token\n expiry: Date.now() + data.expires_in * 1000\n });\n }\n\n return data.access_token;\n }\n\n /**\n * Override getAccessToken to use OAuth\n */\n async getAccessToken() {\n if (!this.getStoredTokens) {\n throw new Error('Token storage not configured. Provide getStoredTokens and saveTokens functions.');\n }\n\n const stored = await this.getStoredTokens();\n\n if (!stored || !stored.refresh_token) {\n throw new Error('Not authenticated. User needs to complete OAuth flow.');\n }\n\n // Check if access token is still valid\n if (stored.access_token && stored.expiry && Date.now() < stored.expiry - 60000) {\n return stored.access_token;\n }\n\n // Refresh the token\n return this.refreshAccessToken(stored.refresh_token);\n }\n}\n\n// ============================================\n// REQUEST HANDLERS\n// ============================================\n\n/**\n * Create Sheets handler with configuration\n */\nexport function createSheetsHandler(config = {}) {\n const handler = async (req, res) => {\n try {\n const body = typeof req.body === 'string' ? JSON.parse(req.body) : req.body;\n const { action = 'append', feedbackData, feedbackId, status, row } = body;\n\n // Choose client type based on config\n const ClientClass = config.oauth ? SheetsOAuthClient : SheetsClient;\n const client = new ClientClass(config);\n\n let result;\n\n switch (action) {\n case 'append':\n result = await handleAppend(client, feedbackData, config);\n break;\n\n case 'updateStatus':\n result = await handleUpdateStatus(client, feedbackId, status, config);\n break;\n\n case 'updateRow':\n result = await handleUpdateRow(client, row, feedbackData, config);\n break;\n\n case 'getHeaders':\n result = { headers: getSheetHeaders(config) };\n break;\n\n case 'ensureHeaders':\n const headers = getSheetHeaders(config);\n result = await client.ensureHeaders(headers);\n break;\n\n // OAuth specific actions\n case 'getAuthUrl':\n if (!(client instanceof SheetsOAuthClient)) {\n throw new Error('OAuth not configured');\n }\n result = { url: client.getAuthUrl(body.state) };\n break;\n\n case 'exchangeCode':\n if (!(client instanceof SheetsOAuthClient)) {\n throw new Error('OAuth not configured');\n }\n result = await client.exchangeCode(body.code);\n break;\n\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n // Send response\n if (res?.json) {\n res.status(200).json(result);\n } else {\n return new Response(JSON.stringify(result), {\n status: 200,\n headers: { 'Content-Type': 'application/json' }\n });\n }\n } catch (error) {\n const errorResponse = {\n success: false,\n error: error.message\n };\n\n if (res?.json) {\n res.status(500).json(errorResponse);\n } else {\n return new Response(JSON.stringify(errorResponse), {\n status: 500,\n headers: { 'Content-Type': 'application/json' }\n });\n }\n }\n };\n\n return handler;\n}\n\n/**\n * Handle append row\n */\nasync function handleAppend(client, feedbackData, config) {\n // Ensure headers exist\n const headers = getSheetHeaders(config);\n await client.ensureHeaders(headers);\n\n // Transform feedback to row\n const row = feedbackToSheetRow(feedbackData, config);\n\n // Append row\n const result = await client.appendRow(row);\n\n return {\n success: true,\n updatedRange: result?.updates?.updatedRange,\n rowNumber: result?.updates?.updatedRange?.match(/:(\\d+)$/)?.[1]\n };\n}\n\n/**\n * Handle status update\n */\nasync function handleUpdateStatus(client, feedbackId, status, config) {\n // Find status column\n const { columns, order } = mergeSheetColumns(config.columns, config.columnOrder);\n const statusIndex = order.indexOf('status');\n const statusColumn = String.fromCharCode(65 + statusIndex); // A, B, C...\n\n const result = await client.updateStatus(feedbackId, status, statusColumn);\n\n return result;\n}\n\n/**\n * Handle row update\n */\nasync function handleUpdateRow(client, rowNumber, feedbackData, config) {\n const row = feedbackToSheetRow(feedbackData, config);\n const range = `${config.sheetName || 'Feedback'}!A${rowNumber}`;\n\n await client.updateValues(range, [row]);\n\n return { success: true, row: rowNumber };\n}\n\n// ============================================\n// FRAMEWORK-SPECIFIC EXPORTS\n// ============================================\n\n/**\n * Next.js App Router handler\n * Returns a function that can be directly exported as POST\n */\nexport function createNextAppHandler(config = {}) {\n const handler = createSheetsHandler(config);\n\n return async (request) => {\n const body = await request.json();\n return handler({ body }, null);\n };\n}\n\n/**\n * Next.js Pages Router handler\n */\nexport function createNextPagesHandler(config = {}) {\n return createSheetsHandler(config);\n}\n\n/**\n * Express middleware\n */\nexport function createExpressMiddleware(config = {}) {\n const handler = createSheetsHandler(config);\n\n return async (req, res, next) => {\n try {\n await handler(req, res);\n } catch (error) {\n next(error);\n }\n };\n}\n\n// ============================================\n// GOOGLE APPS SCRIPT TEMPLATE\n// ============================================\n\n/**\n * Returns the Google Apps Script code that users paste into their sheet\n */\nexport function getAppsScriptTemplate(config = {}) {\n const headers = getSheetHeaders(config);\n\n return `\n/**\n * React Visual Feedback - Google Apps Script Handler\n *\n * Setup:\n * 1. Open your Google Sheet\n * 2. Extensions > Apps Script\n * 3. Paste this code\n * 4. Deploy > New deployment > Web app\n * 5. Execute as: Me, Who has access: Anyone\n * 6. Copy the URL and use in your React app\n */\n\n// Sheet configuration\nconst SHEET_NAME = '${config.sheetName || 'Feedback'}';\nconst HEADERS = ${JSON.stringify(headers)};\n\n/**\n * Handle POST requests\n */\nfunction doPost(e) {\n try {\n const data = JSON.parse(e.postData.contents);\n const action = data.action || 'append';\n\n let result;\n\n switch (action) {\n case 'append':\n result = appendFeedback(data.feedbackData);\n break;\n case 'updateStatus':\n result = updateStatus(data.feedbackId, data.status);\n break;\n case 'getRows':\n result = getRows(data.limit || 100);\n break;\n default:\n throw new Error('Unknown action: ' + action);\n }\n\n return ContentService\n .createTextOutput(JSON.stringify(result))\n .setMimeType(ContentService.MimeType.JSON);\n\n } catch (error) {\n return ContentService\n .createTextOutput(JSON.stringify({ success: false, error: error.message }))\n .setMimeType(ContentService.MimeType.JSON);\n }\n}\n\n/**\n * Handle GET requests (for testing)\n */\nfunction doGet(e) {\n return ContentService\n .createTextOutput(JSON.stringify({ status: 'ok', message: 'Feedback API ready' }))\n .setMimeType(ContentService.MimeType.JSON);\n}\n\n/**\n * Append feedback to sheet\n */\nfunction appendFeedback(feedbackData) {\n const sheet = getOrCreateSheet();\n\n const row = [\n new Date().toISOString(), // Timestamp\n feedbackData.id || '', // ID\n feedbackData.feedback || '', // Feedback\n feedbackData.type || 'bug', // Type\n feedbackData.status || 'new', // Status\n feedbackData.userName || 'Anonymous', // User Name\n feedbackData.userEmail || '', // User Email\n feedbackData.url || '', // Page URL\n feedbackData.viewport ? feedbackData.viewport.width + 'x' + feedbackData.viewport.height : '', // Viewport\n feedbackData.screenshot ? 'Yes' : 'No', // Screenshot\n feedbackData.video ? 'Yes' : 'No', // Video\n feedbackData.jiraKey || '' // Jira Key\n ];\n\n sheet.appendRow(row);\n\n return {\n success: true,\n row: sheet.getLastRow()\n };\n}\n\n/**\n * Update feedback status\n */\nfunction updateStatus(feedbackId, newStatus) {\n const sheet = getOrCreateSheet();\n const data = sheet.getDataRange().getValues();\n\n // Find row with matching ID (column B, index 1)\n for (let i = 1; i < data.length; i++) {\n if (data[i][1] === feedbackId) {\n // Update status (column E, index 4)\n sheet.getRange(i + 1, 5).setValue(newStatus);\n return { success: true, row: i + 1 };\n }\n }\n\n return { success: false, error: 'Feedback not found' };\n}\n\n/**\n * Get rows from sheet\n */\nfunction getRows(limit) {\n const sheet = getOrCreateSheet();\n const data = sheet.getDataRange().getValues();\n\n const rows = data.slice(1, limit + 1).map((row, index) => ({\n rowNumber: index + 2,\n timestamp: row[0],\n id: row[1],\n feedback: row[2],\n type: row[3],\n status: row[4],\n userName: row[5],\n userEmail: row[6],\n url: row[7],\n viewport: row[8],\n hasScreenshot: row[9] === 'Yes',\n hasVideo: row[10] === 'Yes',\n jiraKey: row[11]\n }));\n\n return { success: true, rows };\n}\n\n/**\n * Get or create the feedback sheet\n */\nfunction getOrCreateSheet() {\n const ss = SpreadsheetApp.getActiveSpreadsheet();\n let sheet = ss.getSheetByName(SHEET_NAME);\n\n if (!sheet) {\n sheet = ss.insertSheet(SHEET_NAME);\n sheet.appendRow(HEADERS);\n\n // Format headers\n const headerRange = sheet.getRange(1, 1, 1, HEADERS.length);\n headerRange.setFontWeight('bold');\n headerRange.setBackground('#4285f4');\n headerRange.setFontColor('#ffffff');\n }\n\n return sheet;\n}\n\n/**\n * Update Jira key for a feedback item\n */\nfunction updateJiraKey(feedbackId, jiraKey) {\n const sheet = getOrCreateSheet();\n const data = sheet.getDataRange().getValues();\n\n for (let i = 1; i < data.length; i++) {\n if (data[i][1] === feedbackId) {\n // Update Jira key (column L, index 11)\n sheet.getRange(i + 1, 12).setValue(jiraKey);\n return { success: true, row: i + 1 };\n }\n }\n\n return { success: false, error: 'Feedback not found' };\n}\n`.trim();\n}\n\n// ============================================\n// ZAPIER / WEBHOOK FORMATTERS\n// ============================================\n\n/**\n * Format feedback for Zapier webhook\n */\nexport function formatForZapier(feedbackData) {\n return {\n timestamp: new Date().toISOString(),\n id: feedbackData.id,\n feedback: feedbackData.feedback,\n type: feedbackData.type || 'bug',\n status: feedbackData.status || 'new',\n user_name: feedbackData.userName || 'Anonymous',\n user_email: feedbackData.userEmail || '',\n page_url: feedbackData.url || '',\n viewport: feedbackData.viewport ? `${feedbackData.viewport.width}x${feedbackData.viewport.height}` : '',\n has_screenshot: !!feedbackData.screenshot,\n has_video: !!feedbackData.video,\n element_selector: feedbackData.elementInfo?.selector || '',\n component_name: (feedbackData.elementInfo?.componentStack || [])[0] || ''\n };\n}\n\n// Default export\nexport default createSheetsHandler;\n"],"names":["DEFAULT_SHEET_COLUMNS","timestamp","key","header","field","transform","value","Date","toISOString","id","feedback","type","status","userName","userEmail","url","viewport","concat","width","height","userAgent","includes","substring","screenshot","video","elementSelector","selector","componentName","_value$componentStack","componentStack","sourceFile","jiraKey","DEFAULT_SHEET_COLUMN_ORDER","mergeSheetColumns","userColumns","arguments","length","undefined","columnOrder","merged","_objectSpread","Object","entries","forEach","_ref","_ref2","_slicedToArray","_typeof","order","keys","filter","k","columns","feedbackToSheetRow","feedbackData","config","_mergeSheetColumns","row","map","col","rawValue","getSheetHeaders","_mergeSheetColumns2","_columns$key","SheetsClient","_classCallCheck","spreadsheetId","process","env","GOOGLE_SPREADSHEET_ID","sheetName","credentials","GOOGLE_SERVICE_ACCOUNT","Error","JSON","parse","accessToken","tokenExpiry","_createClass","_getAccessToken","_asyncToGenerator","_regenerator","m","_callee","_this$credentials","client_email","private_key","now","payload","jwt","response","error","data","w","_context","n","a","alg","typ","Math","floor","iss","scope","aud","exp","iat","createJWT","v","fetch","method","headers","body","URLSearchParams","grant_type","assertion","ok","text","json","access_token","expires_in","getAccessToken","apply","_createJWT","_callee2","privateKey","headerB64","payloadB64","signatureInput","pemHeader","pemFooter","pemContents","crypto","sign","signature","signatureB64","_context2","encoder","TextEncoder","base64UrlEncode","stringify","replace","Buffer","from","createSign","update","end","padding","constants","RSA_PKCS1_PADDING","_x","_x2","_x3","toString","_request","_callee3","endpoint","options","token","baseUrl","_args3","_context3","request","_x4","_appendRow","_callee4","values","range","_args4","_context4","encodeURIComponent","majorDimension","appendRow","_x5","_getValues","_callee5","_context5","getValues","_x6","_updateValues","_callee6","_context6","updateValues","_x7","_x8","_ensureHeaders","_callee7","existing","_t2","_context7","p","created","message","ensureHeaders","_x9","_findRowByFeedbackId","_callee8","feedbackId","idColumn","rowIndex","_args8","_context8","findIndex","findRowByFeedbackId","_x0","_updateStatus","_callee9","newStatus","statusColumn","rowNumber","_args9","_context9","success","updateStatus","_x1","_x10","SheetsOAuthClient","_SheetsClient","_this","_callSuper","clientId","GOOGLE_CLIENT_ID","clientSecret","GOOGLE_CLIENT_SECRET","redirectUri","GOOGLE_REDIRECT_URI","getStoredTokens","saveTokens","_inherits","getAuthUrl","state","params","client_id","redirect_uri","response_type","access_type","prompt","_exchangeCode","_callee0","code","tokens","_context0","client_secret","refresh_token","expiry","exchangeCode","_x11","_refreshAccessToken","_callee1","refreshToken","stored","_context1","refreshAccessToken","_x12","_getAccessToken2","_callee10","_context10","createSheetsHandler","handler","_callee11","req","res","_body$action","action","ClientClass","client","result","errorResponse","_t3","_t4","_context11","oauth","handleAppend","handleUpdateStatus","handleUpdateRow","Response","_x13","_x14","_x15","_x16","_x17","_handleAppend","_callee14","_result$updates","_result$updates2","_context14","updatedRange","updates","match","_x18","_x19","_x20","_x21","_handleUpdateStatus","_callee15","statusIndex","_context15","indexOf","String","fromCharCode","_x22","_x23","_x24","_x25","_handleUpdateRow","_callee16","_context16","createNextAppHandler","_callee12","_context12","_x26","createNextPagesHandler","createExpressMiddleware","_ref3","_callee13","next","_t5","_context13","_x27","_x28","_x29","getAppsScriptTemplate","trim","formatForZapier","_feedbackData$element","_feedbackData$element2","user_name","user_email","page_url","has_screenshot","has_video","element_selector","elementInfo","component_name"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DA;AACA;AACA;;AAEO,IAAMA,qBAAqB,GAAG;AACnCC,EAAAA,SAAS,EAAE;AACTC,IAAAA,GAAG,EAAE,WAAW;AAChBC,IAAAA,MAAM,EAAE,WAAW;AACnBC,IAAAA,KAAK,EAAE,WAAW;AAClBC,IAAAA,SAAS,EAAE,SAAXA,SAASA,CAAGC,KAAK,EAAA;MAAA,OAAKA,KAAK,IAAI,IAAIC,IAAI,EAAE,CAACC,WAAW,EAAE;AAAA,IAAA;GACxD;AACDC,EAAAA,EAAE,EAAE;AACFP,IAAAA,GAAG,EAAE,IAAI;AACTC,IAAAA,MAAM,EAAE,aAAa;AACrBC,IAAAA,KAAK,EAAE;GACR;AACDM,EAAAA,QAAQ,EAAE;AACRR,IAAAA,GAAG,EAAE,UAAU;AACfC,IAAAA,MAAM,EAAE,UAAU;AAClBC,IAAAA,KAAK,EAAE;GACR;AACDO,EAAAA,IAAI,EAAE;AACJT,IAAAA,GAAG,EAAE,MAAM;AACXC,IAAAA,MAAM,EAAE,MAAM;AACdC,IAAAA,KAAK,EAAE,MAAM;AACbC,IAAAA,SAAS,EAAE,SAAXA,SAASA,CAAGC,KAAK,EAAA;MAAA,OAAKA,KAAK,IAAI,KAAK;AAAA,IAAA;GACrC;AACDM,EAAAA,MAAM,EAAE;AACNV,IAAAA,GAAG,EAAE,QAAQ;AACbC,IAAAA,MAAM,EAAE,QAAQ;AAChBC,IAAAA,KAAK,EAAE,QAAQ;AACfC,IAAAA,SAAS,EAAE,SAAXA,SAASA,CAAGC,KAAK,EAAA;MAAA,OAAKA,KAAK,IAAI,KAAK;AAAA,IAAA;GACrC;AACDO,EAAAA,QAAQ,EAAE;AACRX,IAAAA,GAAG,EAAE,UAAU;AACfC,IAAAA,MAAM,EAAE,WAAW;AACnBC,IAAAA,KAAK,EAAE,UAAU;AACjBC,IAAAA,SAAS,EAAE,SAAXA,SAASA,CAAGC,KAAK,EAAA;MAAA,OAAKA,KAAK,IAAI,WAAW;AAAA,IAAA;GAC3C;AACDQ,EAAAA,SAAS,EAAE;AACTZ,IAAAA,GAAG,EAAE,WAAW;AAChBC,IAAAA,MAAM,EAAE,YAAY;AACpBC,IAAAA,KAAK,EAAE,WAAW;AAClBC,IAAAA,SAAS,EAAE,SAAXA,SAASA,CAAGC,KAAK,EAAA;MAAA,OAAKA,KAAK,IAAI,EAAE;AAAA,IAAA;GAClC;AACDS,EAAAA,GAAG,EAAE;AACHb,IAAAA,GAAG,EAAE,KAAK;AACVC,IAAAA,MAAM,EAAE,UAAU;AAClBC,IAAAA,KAAK,EAAE;GACR;AACDY,EAAAA,QAAQ,EAAE;AACRd,IAAAA,GAAG,EAAE,UAAU;AACfC,IAAAA,MAAM,EAAE,UAAU;AAClBC,IAAAA,KAAK,EAAE,UAAU;AACjBC,IAAAA,SAAS,EAAE,SAAXA,SAASA,CAAGC,KAAK,EAAA;AAAA,MAAA,OAAKA,KAAK,GAAA,EAAA,CAAAW,MAAA,CAAMX,KAAK,CAACY,KAAK,EAAA,GAAA,CAAA,CAAAD,MAAA,CAAIX,KAAK,CAACa,MAAM,IAAK,EAAE;AAAA,IAAA;GACpE;AACDC,EAAAA,SAAS,EAAE;AACTlB,IAAAA,GAAG,EAAE,WAAW;AAChBC,IAAAA,MAAM,EAAE,SAAS;AACjBC,IAAAA,KAAK,EAAE,WAAW;AAClBC,IAAAA,SAAS,EAAE,SAAXA,SAASA,CAAGC,KAAK,EAAK;AACpB,MAAA,IAAI,CAACA,KAAK,EAAE,OAAO,EAAE;AACrB;MACA,IAAIA,KAAK,CAACe,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,QAAQ;MAC7C,IAAIf,KAAK,CAACe,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,SAAS;MAC/C,IAAIf,KAAK,CAACe,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,QAAQ;MAC7C,IAAIf,KAAK,CAACe,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,MAAM;AACzC,MAAA,OAAOf,KAAK,CAACgB,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;AAC/B,IAAA;GACD;AACDC,EAAAA,UAAU,EAAE;AACVrB,IAAAA,GAAG,EAAE,YAAY;AACjBC,IAAAA,MAAM,EAAE,YAAY;AACpBC,IAAAA,KAAK,EAAE,YAAY;AACnBC,IAAAA,SAAS,EAAE,SAAXA,SAASA,CAAGC,KAAK,EAAA;AAAA,MAAA,OAAKA,KAAK,GAAG,KAAK,GAAG,IAAI;IAAA,CAAA;GAC3C;AACDkB,EAAAA,KAAK,EAAE;AACLtB,IAAAA,GAAG,EAAE,OAAO;AACZC,IAAAA,MAAM,EAAE,OAAO;AACfC,IAAAA,KAAK,EAAE,OAAO;AACdC,IAAAA,SAAS,EAAE,SAAXA,SAASA,CAAGC,KAAK,EAAA;AAAA,MAAA,OAAKA,KAAK,GAAG,KAAK,GAAG,IAAI;AAAA,IAAA;GAC3C;AACDmB,EAAAA,eAAe,EAAE;AACfvB,IAAAA,GAAG,EAAE,iBAAiB;AACtBC,IAAAA,MAAM,EAAE,SAAS;AACjBC,IAAAA,KAAK,EAAE,aAAa;AACpBC,IAAAA,SAAS,EAAE,SAAXA,SAASA,CAAGC,KAAK,EAAA;MAAA,OAAK,CAAAA,KAAK,KAAA,IAAA,IAALA,KAAK,uBAALA,KAAK,CAAEoB,QAAQ,KAAI,EAAE;AAAA,IAAA;GAC5C;AACDC,EAAAA,aAAa,EAAE;AACbzB,IAAAA,GAAG,EAAE,eAAe;AACpBC,IAAAA,MAAM,EAAE,WAAW;AACnBC,IAAAA,KAAK,EAAE,aAAa;AACpBC,IAAAA,SAAS,EAAE,SAAXA,SAASA,CAAGC,KAAK,EAAA;AAAA,MAAA,IAAAsB,qBAAA;AAAA,MAAA,OAAK,CAAAtB,KAAK,KAAA,IAAA,IAALA,KAAK,KAAA,MAAA,IAAA,CAAAsB,qBAAA,GAALtB,KAAK,CAAEuB,cAAc,MAAA,IAAA,IAAAD,qBAAA,KAAA,MAAA,GAAA,MAAA,GAArBA,qBAAA,CAAwB,CAAC,CAAC,KAAI,EAAE;AAAA,IAAA;GACvD;AACDE,EAAAA,UAAU,EAAE;AACV5B,IAAAA,GAAG,EAAE,YAAY;AACjBC,IAAAA,MAAM,EAAE,aAAa;AACrBC,IAAAA,KAAK,EAAE,aAAa;AACpBC,IAAAA,SAAS,EAAE,SAAXA,SAASA,CAAGC,KAAK,EAAA;MAAA,OAAK,CAAAA,KAAK,KAAA,IAAA,IAALA,KAAK,uBAALA,KAAK,CAAEwB,UAAU,KAAI,EAAE;AAAA,IAAA;GAC9C;AACDC,EAAAA,OAAO,EAAE;AACP7B,IAAAA,GAAG,EAAE,SAAS;AACdC,IAAAA,MAAM,EAAE,YAAY;AACpBC,IAAAA,KAAK,EAAE,SAAS;AAChBC,IAAAA,SAAS,EAAE,SAAXA,SAASA,CAAGC,KAAK,EAAA;MAAA,OAAKA,KAAK,IAAI,EAAE;AAAA,IAAA;AACnC;AACF,CAAC;;AAED;AACO,IAAM0B,0BAA0B,GAAG,CACxC,WAAW,EACX,IAAI,EACJ,UAAU,EACV,MAAM,EACN,QAAQ,EACR,UAAU,EACV,WAAW,EACX,KAAK,EACL,UAAU,EACV,YAAY,EACZ,OAAO,EACP,SAAS,CACV;;AAoLD;AACA;AACA;;AAEA;AACA;AACA;AACO,SAASC,iBAAiBA,GAAuC;AAAA,EAAA,IAAtCC,WAAW,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAAA,EAAA,IAAEG,WAAW,GAAAH,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,IAAI;AACpE,EAAA,IAAMI,MAAM,GAAAC,cAAA,CAAA,EAAA,EAAQxC,qBAAqB,CAAE;;AAE3C;EACAyC,MAAM,CAACC,OAAO,CAACR,WAAW,CAAC,CAACS,OAAO,CAAC,UAAAC,IAAA,EAAkB;AAAA,IAAA,IAAAC,KAAA,GAAAC,cAAA,CAAAF,IAAA,EAAA,CAAA,CAAA;AAAhB1C,MAAAA,GAAG,GAAA2C,KAAA,CAAA,CAAA,CAAA;AAAEvC,MAAAA,KAAK,GAAAuC,KAAA,CAAA,CAAA,CAAA;AAC9C,IAAA,IAAIvC,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAK,KAAK,EAAE;AACrC;MACA,OAAOiC,MAAM,CAACrC,GAAG,CAAC;AACpB,IAAA,CAAC,MAAM,IAAI6C,OAAA,CAAOzC,KAAK,CAAA,KAAK,QAAQ,EAAE;AACpC;AACAiC,MAAAA,MAAM,CAACrC,GAAG,CAAC,GAAAsC,cAAA,CAAAA,cAAA,CAAA,EAAA,EAAQD,MAAM,CAACrC,GAAG,CAAC,CAAA,EAAKI,KAAK,CAAE;AAC5C,IAAA;AACF,EAAA,CAAC,CAAC;;AAEF;AACA,EAAA,IAAM0C,KAAK,GAAGV,WAAW,IAAIG,MAAM,CAACQ,IAAI,CAACV,MAAM,CAAC,CAACW,MAAM,CAAC,UAAAC,CAAC,EAAA;IAAA,OACvDnB,0BAA0B,CAACX,QAAQ,CAAC8B,CAAC,CAAC,IAAIjB,WAAW,CAACiB,CAAC,CAAC;AAAA,EAAA,CAC1D,CAAC;EAED,OAAO;AAAEC,IAAAA,OAAO,EAAEb,MAAM;AAAES,IAAAA,KAAK,EAALA;GAAO;AACnC;;AAmBA;AACA;AACA;AACO,SAASK,kBAAkBA,CAACC,YAAY,EAAe;AAAA,EAAA,IAAbC,MAAM,GAAApB,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;EAC1D,IAAAqB,kBAAA,GAA2BvB,iBAAiB,CAACsB,MAAM,CAACH,OAAO,EAAEG,MAAM,CAACjB,WAAW,CAAC;IAAxEc,OAAO,GAAAI,kBAAA,CAAPJ,OAAO;IAAEJ,KAAK,GAAAQ,kBAAA,CAALR,KAAK;EAEtB,IAAMS,GAAG,GAAGT,KAAK,CAACU,GAAG,CAAC,UAAAxD,GAAG,EAAI;AAC3B,IAAA,IAAMyD,GAAG,GAAGP,OAAO,CAAClD,GAAG,CAAC;AACxB,IAAA,IAAI,CAACyD,GAAG,EAAE,OAAO,EAAE;AAEnB,IAAA,IAAMC,QAAQ,GAAGN,YAAY,CAACK,GAAG,CAACvD,KAAK,CAAC;IACxC,IAAIuD,GAAG,CAACtD,SAAS,EAAE;AACjB,MAAA,OAAOsD,GAAG,CAACtD,SAAS,CAACuD,QAAQ,CAAC,IAAI,EAAE;AACtC,IAAA;IACA,OAAOA,QAAQ,IAAI,EAAE;AACvB,EAAA,CAAC,CAAC;AAEF,EAAA,OAAOH,GAAG;AACZ;;AAEA;AACA;AACA;AACO,SAASI,eAAeA,GAAc;AAAA,EAAA,IAAbN,MAAM,GAAApB,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;EACzC,IAAA2B,mBAAA,GAA2B7B,iBAAiB,CAACsB,MAAM,CAACH,OAAO,EAAEG,MAAM,CAACjB,WAAW,CAAC;IAAxEc,OAAO,GAAAU,mBAAA,CAAPV,OAAO;IAAEJ,KAAK,GAAAc,mBAAA,CAALd,KAAK;AACtB,EAAA,OAAOA,KAAK,CAACU,GAAG,CAAC,UAAAxD,GAAG,EAAA;AAAA,IAAA,IAAA6D,YAAA;AAAA,IAAA,OAAI,CAAA,CAAAA,YAAA,GAAAX,OAAO,CAAClD,GAAG,CAAC,MAAA,IAAA,IAAA6D,YAAA,KAAA,MAAA,GAAA,MAAA,GAAZA,YAAA,CAAc5D,MAAM,KAAID,GAAG;EAAA,CAAA,CAAC;AACtD;;AC9ZA;AACA;AACA;AAAA,IAEM8D,YAAY,gBAAA,YAAA;EAChB,SAAAA,YAAAA,CAAYT,MAAM,EAAE;AAAAU,IAAAA,eAAA,OAAAD,YAAA,CAAA;IAClB,IAAI,CAACE,aAAa,GAAGX,MAAM,CAACW,aAAa,IAAIC,OAAO,CAACC,GAAG,CAACC,qBAAqB;AAC9E,IAAA,IAAI,CAACC,SAAS,GAAGf,MAAM,CAACe,SAAS,IAAI,UAAU;;AAE/C;IACA,IAAMC,WAAW,GAAGhB,MAAM,CAACgB,WAAW,IAAIJ,OAAO,CAACC,GAAG,CAACI,sBAAsB;IAE5E,IAAI,CAACD,WAAW,EAAE;AAChB,MAAA,MAAM,IAAIE,KAAK,CACb,8EACF,CAAC;AACH,IAAA;AAEA,IAAA,IAAI,CAACF,WAAW,GAAG,OAAOA,WAAW,KAAK,QAAQ,GAC9CG,IAAI,CAACC,KAAK,CAACJ,WAAW,CAAC,GACvBA,WAAW;AAEf,IAAA,IAAI,CAAC,IAAI,CAACL,aAAa,EAAE;AACvB,MAAA,MAAM,IAAIO,KAAK,CACb,yEACF,CAAC;AACH,IAAA;IAEA,IAAI,CAACG,WAAW,GAAG,IAAI;IACvB,IAAI,CAACC,WAAW,GAAG,IAAI;AACzB,EAAA;;AAEA;AACF;AACA;EAFE,OAAAC,YAAA,CAAAd,YAAA,EAAA,CAAA;IAAA9D,GAAA,EAAA,gBAAA;IAAAI,KAAA,GAAA,YAAA;MAAA,IAAAyE,eAAA,GAAAC,iBAAA,cAAAC,YAAA,EAAA,CAAAC,CAAA,CAGA,SAAAC,OAAAA,GAAA;AAAA,QAAA,IAAAC,iBAAA,EAAAC,YAAA,EAAAC,WAAA,EAAAnF,MAAA,EAAAoF,GAAA,EAAAC,OAAA,EAAAC,GAAA,EAAAC,QAAA,EAAAC,KAAA,EAAAC,IAAA;AAAA,QAAA,OAAAX,YAAA,EAAA,CAAAY,CAAA,CAAA,UAAAC,QAAA,EAAA;UAAA,OAAA,CAAA,EAAA,QAAAA,QAAA,CAAAC,CAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,IAAA,EAEM,IAAI,CAACnB,WAAW,IAAI,IAAI,CAACC,WAAW,IAAItE,IAAI,CAACgF,GAAG,EAAE,GAAG,IAAI,CAACV,WAAW,CAAA,EAAA;AAAAiB,gBAAAA,QAAA,CAAAC,CAAA,GAAA,CAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAAA,OAAAD,QAAA,CAAAE,CAAA,CAAA,CAAA,EAChE,IAAI,CAACpB,WAAW,CAAA;AAAA,YAAA,KAAA,CAAA;AAAAQ,cAAAA,iBAAA,GAGa,IAAI,CAACb,WAAW,EAA9Cc,YAAY,GAAAD,iBAAA,CAAZC,YAAY,EAAEC,WAAW,GAAAF,iBAAA,CAAXE,WAAW,CAAA;AAG3BnF,cAAAA,MAAM,GAAG;AACb8F,gBAAAA,GAAG,EAAE,OAAO;AACZC,gBAAAA,GAAG,EAAE;eACN;AAEKX,cAAAA,GAAG,GAAGY,IAAI,CAACC,KAAK,CAAC7F,IAAI,CAACgF,GAAG,EAAE,GAAG,IAAI,CAAC;AACnCC,cAAAA,OAAO,GAAG;AACda,gBAAAA,GAAG,EAAEhB,YAAY;AACjBiB,gBAAAA,KAAK,EAAE,8CAA8C;AACrDC,gBAAAA,GAAG,EAAE,qCAAqC;gBAC1CC,GAAG,EAAEjB,GAAG,GAAG,IAAI;AACfkB,gBAAAA,GAAG,EAAElB;eACN;AAAAO,cAAAA,QAAA,CAAAC,CAAA,GAAA,CAAA;cAAA,OAEiB,IAAI,CAACW,SAAS,CAACvG,MAAM,EAAEqF,OAAO,EAAEF,WAAW,CAAC;AAAA,YAAA,KAAA,CAAA;cAAxDG,GAAG,GAAAK,QAAA,CAAAa,CAAA;AAAAb,cAAAA,QAAA,CAAAC,CAAA,GAAA,CAAA;cAAA,OAGca,KAAK,CAAC,qCAAqC,EAAE;AAClEC,gBAAAA,MAAM,EAAE,MAAM;AACdC,gBAAAA,OAAO,EAAE;AAAE,kBAAA,cAAc,EAAE;iBAAqC;gBAChEC,IAAI,EAAE,IAAIC,eAAe,CAAC;AACxBC,kBAAAA,UAAU,EAAE,6CAA6C;AACzDC,kBAAAA,SAAS,EAAEzB;iBACZ;AACH,eAAC,CAAC;AAAA,YAAA,KAAA,CAAA;cAPIC,QAAQ,GAAAI,QAAA,CAAAa,CAAA;cAAA,IASTjB,QAAQ,CAACyB,EAAE,EAAA;AAAArB,gBAAAA,QAAA,CAAAC,CAAA,GAAA,CAAA;AAAA,gBAAA;AAAA,cAAA;AAAAD,cAAAA,QAAA,CAAAC,CAAA,GAAA,CAAA;AAAA,cAAA,OACML,QAAQ,CAAC0B,IAAI,EAAE;AAAA,YAAA,KAAA,CAAA;cAA7BzB,KAAK,GAAAG,QAAA,CAAAa,CAAA;AAAA,cAAA,MACL,IAAIlC,KAAK,CAAA,8BAAA,CAAAxD,MAAA,CAAgC0E,KAAK,CAAE,CAAC;AAAA,YAAA,KAAA,CAAA;AAAAG,cAAAA,QAAA,CAAAC,CAAA,GAAA,CAAA;AAAA,cAAA,OAGtCL,QAAQ,CAAC2B,IAAI,EAAE;AAAA,YAAA,KAAA,CAAA;cAA5BzB,IAAI,GAAAE,QAAA,CAAAa,CAAA;AACV,cAAA,IAAI,CAAC/B,WAAW,GAAGgB,IAAI,CAAC0B,YAAY;AACpC,cAAA,IAAI,CAACzC,WAAW,GAAGtE,IAAI,CAACgF,GAAG,EAAE,GAAG,CAACK,IAAI,CAAC2B,UAAU,GAAG,EAAE,IAAI,IAAI,CAAC;AAAC,cAAA,OAAAzB,QAAA,CAAAE,CAAA,CAAA,CAAA,EAExD,IAAI,CAACpB,WAAW,CAAA;AAAA;AAAA,QAAA,CAAA,EAAAO,OAAA,EAAA,IAAA,CAAA;MAAA,CACxB,CAAA,CAAA;AAAA,MAAA,SA7CKqC,cAAcA,GAAA;AAAA,QAAA,OAAAzC,eAAA,CAAA0C,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA;AAAA,MAAA;AAAA,MAAA,OAAdqF,cAAc;AAAA,IAAA,CAAA;AA+CpB;AACF;AACA;AAFE;AAAA,GAAA,EAAA;IAAAtH,GAAA,EAAA,WAAA;IAAAI,KAAA,GAAA,YAAA;AAAA,MAAA,IAAAoH,UAAA,GAAA1C,iBAAA,cAAAC,YAAA,EAAA,CAAAC,CAAA,CAGA,SAAAyC,QAAAA,CAAgBxH,MAAM,EAAEqF,OAAO,EAAEoC,UAAU,EAAA;QAAA,IAAAC,SAAA,CAAA,CAAAC,UAAA,CAAA,CAAAC,cAAA,CAAA,CAAAC,SAAA,CAAA,CAAAC,SAAA,EAAAC,WAAA,CAAA,CAAAC,MAAA,EAAAC,IAAA,CAAA,CAAAC,SAAA,CAAA,CAAAC;AAAA,QAAA,OAAArD,YAAA,EAAA,CAAAY,CAAA,CAAA,UAAA0C,SAAA,EAAA;UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAxC,CAAA;AAAA,YAAA,KAAA,CAAA;AACnCyC,cAAU,IAAIC,WAAW,EAAE;cAE3BZ,SAAS,GAAG,IAAI,CAACa,eAAe,CAAChE,IAAI,CAACiE,SAAS,CAACxI,MAAM,CAAC,CAAC;cACxD2H,UAAU,GAAG,IAAI,CAACY,eAAe,CAAChE,IAAI,CAACiE,SAAS,CAACnD,OAAO,CAAC,CAAC;cAC1DuC,cAAc,GAAA,EAAA,CAAA9G,MAAA,CAAM4G,SAAS,OAAA5G,MAAA,CAAI6G,UAAU,CAAA,CAAA;AAG3CE,cAAAA,SAAS,GAAG,6BAA6B;AACzCC,cAAAA,SAAS,GAAG,2BAA2B;cACvCC,WAAW,GAAGN,UAAU,CAC3BgB,OAAO,CAACZ,SAAS,EAAE,EAAE,CAAC,CACtBY,OAAO,CAACX,SAAS,EAAE,EAAE,CAAC,CACtBW,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;cAEHC,MAAM,CAACC,IAAI,CAACZ,WAAW,EAAE,QAAQ,CAAC,CAAA;AAEpDK,cAAAA,SAAA,CAAAxC,CAAA,GAAA,CAAA;cAAA,OACqB,OAAO,QAAQ,CAAC;AAAA,YAAA,KAAA,CAAA;cAA/BoC,MAAM,GAAAI,SAAA,CAAA5B,CAAA;AACNyB,cAAAA,IAAI,GAAGD,MAAM,CAACY,UAAU,CAAC,YAAY,CAAC;AAC5CX,cAAAA,IAAI,CAACY,MAAM,CAACjB,cAAc,CAAC;cAC3BK,IAAI,CAACa,GAAG,EAAE;AAEJZ,cAAAA,SAAS,GAAGD,IAAI,CAACA,IAAI,CAAC;AAC1BlI,gBAAAA,GAAG,EAAE0H,UAAU;AACfsB,gBAAAA,OAAO,EAAEf,MAAM,CAACgB,SAAS,CAACC;AAC5B,eAAC,CAAC;AAEId,cAAAA,YAAY,GAAG,IAAI,CAACI,eAAe,CAACL,SAAS,CAAC;cAAA,OAAAE,SAAA,CAAAvC,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA/E,MAAA,CAE1C8G,cAAc,EAAA,GAAA,CAAA,CAAA9G,MAAA,CAAIqH,YAAY,CAAA,CAAA;AAAA;AAAA,QAAA,CAAA,EAAAX,QAAA,EAAA,IAAA,CAAA;MAAA,CACzC,CAAA,CAAA;AAAA,MAAA,SA/BKjB,SAASA,CAAA2C,EAAA,EAAAC,GAAA,EAAAC,GAAA,EAAA;AAAA,QAAA,OAAA7B,UAAA,CAAAD,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA;AAAA,MAAA;AAAA,MAAA,OAATuE,SAAS;AAAA,IAAA,CAAA,EAAA;AAAA,GAAA,EAAA;IAAAxG,GAAA,EAAA,iBAAA;AAAAI,IAAAA,KAAA,EAiCf,SAAAoI,eAAeA,CAAC9C,IAAI,EAAE;AACpB,MAAY,OAAOA,IAAI,KAAK,QAAQ,GAAGA,IAAI,GAAGiD,MAAM,CAACC,IAAI,CAAClD,IAAI,CAAC,CAAC4D,QAAQ,CAAC,QAAQ;AACjF,MAAA,OAAOX,MAAM,CAACC,IAAI,CAAClD,IAAI,CAAC,CACrB4D,QAAQ,CAAC,QAAQ,CAAC,CAClBZ,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CACnBA,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CACnBA,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;AACtB,IAAA;;AAEA;AACF;AACA;AAFE,GAAA,EAAA;IAAA1I,GAAA,EAAA,SAAA;IAAAI,KAAA,GAAA,YAAA;MAAA,IAAAmJ,QAAA,GAAAzE,iBAAA,cAAAC,YAAA,GAAAC,CAAA,CAGA,SAAAwE,QAAAA,CAAcC,QAAQ,EAAA;AAAA,QAAA,IAAAC,OAAA;UAAAC,KAAA;UAAAC,OAAA;UAAApE,QAAA;UAAAC,KAAA;UAAAyB,IAAA;AAAA2C,UAAAA,MAAA,GAAA5H,SAAA;AAAA,QAAA,OAAA8C,YAAA,EAAA,CAAAY,CAAA,CAAA,UAAAmE,SAAA,EAAA;UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAjE,CAAA;AAAA,YAAA,KAAA,CAAA;AAAE6D,cAAAA,OAAO,GAAAG,MAAA,CAAA3H,MAAA,GAAA,CAAA,IAAA2H,MAAA,CAAA,CAAA,CAAA,KAAA1H,SAAA,GAAA0H,MAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAAAC,cAAAA,SAAA,CAAAjE,CAAA,GAAA,CAAA;AAAA,cAAA,OACd,IAAI,CAACyB,cAAc,EAAE;AAAA,YAAA,KAAA,CAAA;cAAnCqC,KAAK,GAAAG,SAAA,CAAArD,CAAA;AACLmD,cAAAA,OAAO,GAAG,+CAA+C;AAAAE,cAAAA,SAAA,CAAAjE,CAAA,GAAA,CAAA;cAAA,OAExCa,KAAK,IAAA3F,MAAA,CAAI6I,OAAO,EAAA,GAAA,CAAA,CAAA7I,MAAA,CAAI,IAAI,CAACiD,aAAa,CAAA,CAAAjD,MAAA,CAAG0I,QAAQ,CAAA,EAAAnH,cAAA,CAAAA,cAAA,KACnEoH,OAAO,CAAA,EAAA,EAAA,EAAA;AACV9C,gBAAAA,OAAO,EAAAtE,cAAA,CAAA;AACL,kBAAA,eAAe,EAAA,SAAA,CAAAvB,MAAA,CAAY4I,KAAK,CAAE;AAClC,kBAAA,cAAc,EAAE;iBAAkB,EAC/BD,OAAO,CAAC9C,OAAO;AACnB,eAAA,CACF,CAAC;AAAA,YAAA,KAAA,CAAA;cAPIpB,QAAQ,GAAAsE,SAAA,CAAArD,CAAA;cAAA,IASTjB,QAAQ,CAACyB,EAAE,EAAA;AAAA6C,gBAAAA,SAAA,CAAAjE,CAAA,GAAA,CAAA;AAAA,gBAAA;AAAA,cAAA;AAAAiE,cAAAA,SAAA,CAAAjE,CAAA,GAAA,CAAA;AAAA,cAAA,OACML,QAAQ,CAAC0B,IAAI,EAAE;AAAA,YAAA,KAAA,CAAA;cAA7BzB,KAAK,GAAAqE,SAAA,CAAArD,CAAA;AAAA,cAAA,MACL,IAAIlC,KAAK,CAAA,oBAAA,CAAAxD,MAAA,CAAsByE,QAAQ,CAAC9E,MAAM,EAAA,KAAA,CAAA,CAAAK,MAAA,CAAM0E,KAAK,CAAE,CAAC;AAAA,YAAA,KAAA,CAAA;AAAAqE,cAAAA,SAAA,CAAAjE,CAAA,GAAA,CAAA;AAAA,cAAA,OAGjDL,QAAQ,CAAC0B,IAAI,EAAE;AAAA,YAAA,KAAA,CAAA;cAA5BA,IAAI,GAAA4C,SAAA,CAAArD,CAAA;AAAA,cAAA,OAAAqD,SAAA,CAAAhE,CAAA,CAAA,CAAA,EACHoB,IAAI,GAAG1C,IAAI,CAACC,KAAK,CAACyC,IAAI,CAAC,GAAG,IAAI,CAAA;AAAA;AAAA,QAAA,CAAA,EAAAsC,QAAA,EAAA,IAAA,CAAA;MAAA,CACtC,CAAA,CAAA;MAAA,SApBKO,OAAOA,CAAAC,GAAA,EAAA;AAAA,QAAA,OAAAT,QAAA,CAAAhC,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA;AAAA,MAAA;AAAA,MAAA,OAAP8H,OAAO;AAAA,IAAA,CAAA;AAsBb;AACF;AACA;AAFE;AAAA,GAAA,EAAA;IAAA/J,GAAA,EAAA,WAAA;IAAAI,KAAA,GAAA,YAAA;MAAA,IAAA6J,UAAA,GAAAnF,iBAAA,cAAAC,YAAA,GAAAC,CAAA,CAGA,SAAAkF,QAAAA,CAAgBC,MAAM,EAAA;AAAA,QAAA,IAAA/F,SAAA;UAAAgG,KAAA;AAAAC,UAAAA,MAAA,GAAApI,SAAA;AAAA,QAAA,OAAA8C,YAAA,EAAA,CAAAY,CAAA,CAAA,UAAA2E,SAAA,EAAA;UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAzE,CAAA;AAAA,YAAA,KAAA,CAAA;cAAEzB,SAAS,GAAAiG,MAAA,CAAAnI,MAAA,GAAA,CAAA,IAAAmI,MAAA,CAAA,CAAA,CAAA,KAAAlI,SAAA,GAAAkI,MAAA,CAAA,CAAA,CAAA,GAAG,IAAI;AAChCD,cAAAA,KAAK,MAAArJ,MAAA,CAAMqD,SAAS,IAAI,IAAI,CAACA,SAAS,EAAA,MAAA,CAAA;AAAA,cAAA,OAAAkG,SAAA,CAAAxE,CAAA,CAAA,CAAA,EAErC,IAAI,CAACiE,OAAO,CAAA,UAAA,CAAAhJ,MAAA,CAAYwJ,kBAAkB,CAACH,KAAK,CAAC,EAAA,SAAA,CAAA,EAAW;AACjEzD,gBAAAA,MAAM,EAAE,MAAM;AACdE,gBAAAA,IAAI,EAAErC,IAAI,CAACiE,SAAS,CAAC;kBACnB0B,MAAM,EAAE,CAACA,MAAM,CAAC;AAChBK,kBAAAA,cAAc,EAAE;AAClB,iBAAC,CAAC,GAAG;AACP,eAAC,CAAC,CAAA;AAAA;AAAA,QAAA,CAAA,EAAAN,QAAA,EAAA,IAAA,CAAA;MAAA,CACH,CAAA,CAAA;MAAA,SAVKO,SAASA,CAAAC,GAAA,EAAA;AAAA,QAAA,OAAAT,UAAA,CAAA1C,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA;AAAA,MAAA;AAAA,MAAA,OAATwI,SAAS;AAAA,IAAA,CAAA;AAYf;AACF;AACA;AAFE;AAAA,GAAA,EAAA;IAAAzK,GAAA,EAAA,WAAA;IAAAI,KAAA,GAAA,YAAA;MAAA,IAAAuK,UAAA,GAAA7F,iBAAA,cAAAC,YAAA,GAAAC,CAAA,CAGA,SAAA4F,QAAAA,CAAgBR,KAAK,EAAA;AAAA,QAAA,OAAArF,YAAA,EAAA,CAAAY,CAAA,CAAA,UAAAkF,SAAA,EAAA;UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAhF,CAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,OAAAgF,SAAA,CAAA/E,CAAA,CAAA,CAAA,EACZ,IAAI,CAACiE,OAAO,CAAA,UAAA,CAAAhJ,MAAA,CAAYwJ,kBAAkB,CAACH,KAAK,CAAC,CAAE,CAAC,CAAA;AAAA;AAAA,QAAA,CAAA,EAAAQ,QAAA,EAAA,IAAA,CAAA;MAAA,CAC5D,CAAA,CAAA;MAAA,SAFKE,SAASA,CAAAC,GAAA,EAAA;AAAA,QAAA,OAAAJ,UAAA,CAAApD,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA;AAAA,MAAA;AAAA,MAAA,OAAT6I,SAAS;AAAA,IAAA,CAAA;AAIf;AACF;AACA;AAFE;AAAA,GAAA,EAAA;IAAA9K,GAAA,EAAA,cAAA;IAAAI,KAAA,GAAA,YAAA;AAAA,MAAA,IAAA4K,aAAA,GAAAlG,iBAAA,cAAAC,YAAA,EAAA,CAAAC,CAAA,CAGA,SAAAiG,QAAAA,CAAmBb,KAAK,EAAED,MAAM,EAAA;AAAA,QAAA,OAAApF,YAAA,EAAA,CAAAY,CAAA,CAAA,UAAAuF,SAAA,EAAA;UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAArF,CAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,OAAAqF,SAAA,CAAApF,CAAA,CAAA,CAAA,EACvB,IAAI,CAACiE,OAAO,CAAA,UAAA,CAAAhJ,MAAA,CAAYwJ,kBAAkB,CAACH,KAAK,CAAC,EAAA,uBAAA,CAAA,EAAyB;AAC/EzD,gBAAAA,MAAM,EAAE,KAAK;AACbE,gBAAAA,IAAI,EAAErC,IAAI,CAACiE,SAAS,CAAC;AACnB0B,kBAAAA,MAAM,EAANA,MAAM;AACNK,kBAAAA,cAAc,EAAE;iBACjB;AACH,eAAC,CAAC,CAAA;AAAA;AAAA,QAAA,CAAA,EAAAS,QAAA,EAAA,IAAA,CAAA;MAAA,CACH,CAAA,CAAA;AAAA,MAAA,SARKE,YAAYA,CAAAC,GAAA,EAAAC,GAAA,EAAA;AAAA,QAAA,OAAAL,aAAA,CAAAzD,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA;AAAA,MAAA;AAAA,MAAA,OAAZkJ,YAAY;AAAA,IAAA,CAAA;AAUlB;AACF;AACA;AAFE;AAAA,GAAA,EAAA;IAAAnL,GAAA,EAAA,eAAA;IAAAI,KAAA,GAAA,YAAA;MAAA,IAAAkL,cAAA,GAAAxG,iBAAA,cAAAC,YAAA,GAAAC,CAAA,CAGA,SAAAuG,QAAAA,CAAoB3E,OAAO,EAAA;AAAA,QAAA,IAAA4E,QAAA,CAAA,CAAAC;AAAA,QAAA,OAAA1G,YAAA,EAAA,CAAAY,CAAA,CAAA,UAAA+F,SAAA,EAAA;AAAA,UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAC,CAAA,GAAAD,SAAA,CAAA7F,CAAA;AAAA,YAAA,KAAA,CAAA;AAAA6F,cAAAA,SAAA,CAAAC,CAAA,GAAA,CAAA;AAAAD,cAAAA,SAAA,CAAA7F,CAAA,GAAA,CAAA;cAAA,OAEA,IAAI,CAACiF,SAAS,CAAA,EAAA,CAAA/J,MAAA,CAAI,IAAI,CAACqD,SAAS,EAAA,MAAA,CAAM,CAAC;AAAA,YAAA,KAAA,CAAA;cAAxDoH,QAAQ,GAAAE,SAAA,CAAAjF,CAAA;cAAA,IAAA,EAEV,CAAC+E,QAAQ,CAACrB,MAAM,IAAIqB,QAAQ,CAACrB,MAAM,CAACjI,MAAM,KAAK,CAAC,CAAA,EAAA;AAAAwJ,gBAAAA,SAAA,CAAA7F,CAAA,GAAA,CAAA;AAAA,gBAAA;AAAA,cAAA;AAAA6F,cAAAA,SAAA,CAAA7F,CAAA,GAAA,CAAA;AAAA,cAAA,OAE5C,IAAI,CAACsF,YAAY,CAAA,EAAA,CAAApK,MAAA,CAAI,IAAI,CAACqD,SAAS,EAAA,KAAA,CAAA,EAAO,CAACwC,OAAO,CAAC,CAAC;AAAA,YAAA,KAAA,CAAA;cAAA,OAAA8E,SAAA,CAAA5F,CAAA,CAAA,CAAA,EACnD;AAAE8F,gBAAAA,OAAO,EAAE;eAAM,CAAA;AAAA,YAAA,KAAA,CAAA;cAAA,OAAAF,SAAA,CAAA5F,CAAA,CAAA,CAAA,EAGnB;AAAE8F,gBAAAA,OAAO,EAAE,KAAK;AAAEJ,gBAAAA,QAAQ,EAAEA,QAAQ,CAACrB,MAAM,CAAC,CAAC;eAAG,CAAA;AAAA,YAAA,KAAA,CAAA;AAAAuB,cAAAA,SAAA,CAAAC,CAAA,GAAA,CAAA;cAAAD,SAAA,CAAAjF,CAAA;AAAAiF,cAAAA,SAAA,CAAAC,CAAA,GAAA,CAAA;AAAAD,cAAAA,SAAA,CAAA7F,CAAA,GAAA,CAAA;AAAA,cAAA,OAI/C,IAAI,CAACsF,YAAY,CAAA,EAAA,CAAApK,MAAA,CAAI,IAAI,CAACqD,SAAS,EAAA,KAAA,CAAA,EAAO,CAACwC,OAAO,CAAC,CAAC;AAAA,YAAA,KAAA,CAAA;cAAA,OAAA8E,SAAA,CAAA5F,CAAA,CAAA,CAAA,EACnD;AAAE8F,gBAAAA,OAAO,EAAE;eAAM,CAAA;AAAA,YAAA,KAAA,CAAA;AAAAF,cAAAA,SAAA,CAAAC,CAAA,GAAA,CAAA;cAAAF,GAAA,GAAAC,SAAA,CAAAjF,CAAA;cAAA,MAElB,IAAIlC,KAAK,CAAA,4BAAA,CAAAxD,MAAA,CAA8B0K,GAAA,CAAEI,OAAO,CAAE,CAAC;AAAA,YAAA,KAAA,CAAA;cAAA,OAAAH,SAAA,CAAA5F,CAAA,CAAA,CAAA,CAAA;AAAA;AAAA,QAAA,CAAA,EAAAyF,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;MAAA,CAG9D,CAAA,CAAA;MAAA,SApBKO,aAAaA,CAAAC,GAAA,EAAA;AAAA,QAAA,OAAAT,cAAA,CAAA/D,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA;AAAA,MAAA;AAAA,MAAA,OAAb6J,aAAa;AAAA,IAAA,CAAA;AAsBnB;AACF;AACA;AAFE;AAAA,GAAA,EAAA;IAAA9L,GAAA,EAAA,qBAAA;IAAAI,KAAA,GAAA,YAAA;MAAA,IAAA4L,oBAAA,GAAAlH,iBAAA,cAAAC,YAAA,GAAAC,CAAA,CAGA,SAAAiH,QAAAA,CAA0BC,UAAU,EAAA;AAAA,QAAA,IAAAC,QAAA;UAAAhC,MAAA;UAAAiC,QAAA;AAAAC,UAAAA,MAAA,GAAApK,SAAA;AAAA,QAAA,OAAA8C,YAAA,EAAA,CAAAY,CAAA,CAAA,UAAA2G,SAAA,EAAA;UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAzG,CAAA;AAAA,YAAA,KAAA,CAAA;cAAEsG,QAAQ,GAAAE,MAAA,CAAAnK,MAAA,GAAA,CAAA,IAAAmK,MAAA,CAAA,CAAA,CAAA,KAAAlK,SAAA,GAAAkK,MAAA,CAAA,CAAA,CAAA,GAAG,GAAG;AAAAC,cAAAA,SAAA,CAAAzG,CAAA,GAAA,CAAA;AAAA,cAAA,OAC7B,IAAI,CAACiF,SAAS,IAAA/J,MAAA,CAAI,IAAI,CAACqD,SAAS,EAAA,GAAA,CAAA,CAAArD,MAAA,CAAIoL,QAAQ,EAAA,GAAA,CAAA,CAAApL,MAAA,CAAIoL,QAAQ,CAAE,CAAC;AAAA,YAAA,KAAA,CAAA;cAA1EhC,MAAM,GAAAmC,SAAA,CAAA7F,CAAA;cAAA,IAEP0D,MAAM,CAACA,MAAM,EAAA;AAAAmC,gBAAAA,SAAA,CAAAzG,CAAA,GAAA,CAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAAA,OAAAyG,SAAA,CAAAxG,CAAA,CAAA,CAAA,EAAS,IAAI,CAAA;AAAA,YAAA,KAAA,CAAA;cAEzBsG,QAAQ,GAAGjC,MAAM,CAACA,MAAM,CAACoC,SAAS,CAAC,UAAAhJ,GAAG,EAAA;AAAA,gBAAA,OAAIA,GAAG,CAAC,CAAC,CAAC,KAAK2I,UAAU;cAAA,CAAA,CAAC;AAAA,cAAA,OAAAI,SAAA,CAAAxG,CAAA,CAAA,CAAA,EAC/DsG,QAAQ,IAAI,CAAC,GAAGA,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAA;AAAA;AAAA,QAAA,CAAA,EAAAH,QAAA,EAAA,IAAA,CAAA;MAAA,CAC3C,CAAA,CAAA;MAAA,SAPKO,mBAAmBA,CAAAC,GAAA,EAAA;AAAA,QAAA,OAAAT,oBAAA,CAAAzE,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA;AAAA,MAAA;AAAA,MAAA,OAAnBuK,mBAAmB;AAAA,IAAA,CAAA;AASzB;AACF;AACA;AAFE;AAAA,GAAA,EAAA;IAAAxM,GAAA,EAAA,cAAA;IAAAI,KAAA,GAAA,YAAA;AAAA,MAAA,IAAAsM,aAAA,GAAA5H,iBAAA,cAAAC,YAAA,EAAA,CAAAC,CAAA,CAGA,SAAA2H,QAAAA,CAAmBT,UAAU,EAAEU,SAAS,EAAA;AAAA,QAAA,IAAAC,YAAA;UAAAC,SAAA;AAAAC,UAAAA,MAAA,GAAA9K,SAAA;AAAA,QAAA,OAAA8C,YAAA,EAAA,CAAAY,CAAA,CAAA,UAAAqH,SAAA,EAAA;UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAnH,CAAA;AAAA,YAAA,KAAA,CAAA;cAAEgH,YAAY,GAAAE,MAAA,CAAA7K,MAAA,GAAA,CAAA,IAAA6K,MAAA,CAAA,CAAA,CAAA,KAAA5K,SAAA,GAAA4K,MAAA,CAAA,CAAA,CAAA,GAAG,GAAG;AAAAC,cAAAA,SAAA,CAAAnH,CAAA,GAAA,CAAA;AAAA,cAAA,OAClC,IAAI,CAAC2G,mBAAmB,CAACN,UAAU,CAAC;AAAA,YAAA,KAAA,CAAA;cAAtDY,SAAS,GAAAE,SAAA,CAAAvG,CAAA;AAAA,cAAA,IAEVqG,SAAS,EAAA;AAAAE,gBAAAA,SAAA,CAAAnH,CAAA,GAAA,CAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAAA,MACN,IAAItB,KAAK,CAAA,WAAA,CAAAxD,MAAA,CAAamL,UAAU,wBAAqB,CAAC;AAAA,YAAA,KAAA,CAAA;AAAAc,cAAAA,SAAA,CAAAnH,CAAA,GAAA,CAAA;cAAA,OAGxD,IAAI,CAACsF,YAAY,CAAA,EAAA,CAAApK,MAAA,CAClB,IAAI,CAACqD,SAAS,EAAA,GAAA,CAAA,CAAArD,MAAA,CAAI8L,YAAY,CAAA,CAAA9L,MAAA,CAAG+L,SAAS,CAAA,EAC7C,CAAC,CAACF,SAAS,CAAC,CACd,CAAC;AAAA,YAAA,KAAA,CAAA;cAAA,OAAAI,SAAA,CAAAlH,CAAA,CAAA,CAAA,EAEM;AAAEmH,gBAAAA,OAAO,EAAE,IAAI;AAAE1J,gBAAAA,GAAG,EAAEuJ;eAAW,CAAA;AAAA;AAAA,QAAA,CAAA,EAAAH,QAAA,EAAA,IAAA,CAAA;MAAA,CACzC,CAAA,CAAA;AAAA,MAAA,SAbKO,YAAYA,CAAAC,GAAA,EAAAC,IAAA,EAAA;AAAA,QAAA,OAAAV,aAAA,CAAAnF,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA;AAAA,MAAA;AAAA,MAAA,OAAZiL,YAAY;AAAA,IAAA,CAAA,EAAA;AAAA,GAAA,CAAA,CAAA;AAAA,CAAA,EAAA,CAAA;AAiBpB;AACA;AAAA,IAEMG,iBAAiB,0BAAAC,aAAA,EAAA;EACrB,SAAAD,iBAAAA,CAAYhK,MAAM,EAAE;AAAA,IAAA,IAAAkK,KAAA;AAAAxJ,IAAAA,eAAA,OAAAsJ,iBAAA,CAAA;AAClBE,IAAAA,KAAA,GAAAC,UAAA,CAAA,IAAA,EAAAH,iBAAA,EAAA,CAAM;MAAErJ,aAAa,EAAEX,MAAM,CAACW,aAAa;MAAEI,SAAS,EAAEf,MAAM,CAACe,SAAS;AAAEC,MAAAA,WAAW,EAAE;AAAEc,QAAAA,YAAY,EAAE,EAAE;AAAEC,QAAAA,WAAW,EAAE;AAAG;KAAG,CAAA,CAAA;IAE9HmI,KAAA,CAAKE,QAAQ,GAAGpK,MAAM,CAACoK,QAAQ,IAAIxJ,OAAO,CAACC,GAAG,CAACwJ,gBAAgB;IAC/DH,KAAA,CAAKI,YAAY,GAAGtK,MAAM,CAACsK,YAAY,IAAI1J,OAAO,CAACC,GAAG,CAAC0J,oBAAoB;IAC3EL,KAAA,CAAKM,WAAW,GAAGxK,MAAM,CAACwK,WAAW,IAAI5J,OAAO,CAACC,GAAG,CAAC4J,mBAAmB;;AAExE;AACAP,IAAAA,KAAA,CAAKQ,eAAe,GAAG1K,MAAM,CAAC0K,eAAe;AAC7CR,IAAAA,KAAA,CAAKS,UAAU,GAAG3K,MAAM,CAAC2K,UAAU;IAEnC,IAAI,CAACT,KAAA,CAAKE,QAAQ,IAAI,CAACF,KAAA,CAAKI,YAAY,EAAE;AACxC,MAAA,MAAM,IAAIpJ,KAAK,CAAC,+EAA+E,CAAC;AAClG,IAAA;AAAC,IAAA,OAAAgJ,KAAA;AACH,EAAA;;AAEA;AACF;AACA;EAFEU,SAAA,CAAAZ,iBAAA,EAAAC,aAAA,CAAA;EAAA,OAAA1I,YAAA,CAAAyI,iBAAA,EAAA,CAAA;IAAArN,GAAA,EAAA,YAAA;AAAAI,IAAAA,KAAA,EAGA,SAAA8N,UAAUA,GAAa;AAAA,MAAA,IAAZC,KAAK,GAAAlM,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AACnB,MAAA,IAAMmM,MAAM,GAAG,IAAItH,eAAe,CAAC;QACjCuH,SAAS,EAAE,IAAI,CAACZ,QAAQ;QACxBa,YAAY,EAAE,IAAI,CAACT,WAAW;AAC9BU,QAAAA,aAAa,EAAE,MAAM;AACrBnI,QAAAA,KAAK,EAAE,8CAA8C;AACrDoI,QAAAA,WAAW,EAAE,SAAS;AACtBC,QAAAA,MAAM,EAAE,SAAS;AACjBN,QAAAA,KAAK,EAALA;AACF,OAAC,CAAC;MAEF,OAAA,+CAAA,CAAApN,MAAA,CAAuDqN,MAAM,CAAA;AAC/D,IAAA;;AAEA;AACF;AACA;AAFE,GAAA,EAAA;IAAApO,GAAA,EAAA,cAAA;IAAAI,KAAA,GAAA,YAAA;MAAA,IAAAsO,aAAA,GAAA5J,iBAAA,cAAAC,YAAA,GAAAC,CAAA,CAGA,SAAA2J,QAAAA,CAAmBC,IAAI,EAAA;AAAA,QAAA,IAAApJ,QAAA,EAAAC,KAAA,EAAAoJ,MAAA;AAAA,QAAA,OAAA9J,YAAA,EAAA,CAAAY,CAAA,CAAA,UAAAmJ,SAAA,EAAA;UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAjJ,CAAA;AAAA,YAAA,KAAA,CAAA;AAAAiJ,cAAAA,SAAA,CAAAjJ,CAAA,GAAA,CAAA;cAAA,OACEa,KAAK,CAAC,qCAAqC,EAAE;AAClEC,gBAAAA,MAAM,EAAE,MAAM;AACdC,gBAAAA,OAAO,EAAE;AAAE,kBAAA,cAAc,EAAE;iBAAqC;gBAChEC,IAAI,EAAE,IAAIC,eAAe,CAAC;kBACxBuH,SAAS,EAAE,IAAI,CAACZ,QAAQ;kBACxBsB,aAAa,EAAE,IAAI,CAACpB,YAAY;AAChCiB,kBAAAA,IAAI,EAAJA,IAAI;AACJ7H,kBAAAA,UAAU,EAAE,oBAAoB;kBAChCuH,YAAY,EAAE,IAAI,CAACT;iBACpB;AACH,eAAC,CAAC;AAAA,YAAA,KAAA,CAAA;cAVIrI,QAAQ,GAAAsJ,SAAA,CAAArI,CAAA;cAAA,IAYTjB,QAAQ,CAACyB,EAAE,EAAA;AAAA6H,gBAAAA,SAAA,CAAAjJ,CAAA,GAAA,CAAA;AAAA,gBAAA;AAAA,cAAA;AAAAiJ,cAAAA,SAAA,CAAAjJ,CAAA,GAAA,CAAA;AAAA,cAAA,OACML,QAAQ,CAAC0B,IAAI,EAAE;AAAA,YAAA,KAAA,CAAA;cAA7BzB,KAAK,GAAAqJ,SAAA,CAAArI,CAAA;AAAA,cAAA,MACL,IAAIlC,KAAK,CAAA,2BAAA,CAAAxD,MAAA,CAA6B0E,KAAK,CAAE,CAAC;AAAA,YAAA,KAAA,CAAA;AAAAqJ,cAAAA,SAAA,CAAAjJ,CAAA,GAAA,CAAA;AAAA,cAAA,OAGjCL,QAAQ,CAAC2B,IAAI,EAAE;AAAA,YAAA,KAAA,CAAA;cAA9B0H,MAAM,GAAAC,SAAA,CAAArI,CAAA;cAAA,IAAA,CAGR,IAAI,CAACuH,UAAU,EAAA;AAAAc,gBAAAA,SAAA,CAAAjJ,CAAA,GAAA,CAAA;AAAA,gBAAA;AAAA,cAAA;AAAAiJ,cAAAA,SAAA,CAAAjJ,CAAA,GAAA,CAAA;cAAA,OACX,IAAI,CAACmI,UAAU,CAAC;gBACpB5G,YAAY,EAAEyH,MAAM,CAACzH,YAAY;gBACjC4H,aAAa,EAAEH,MAAM,CAACG,aAAa;gBACnCC,MAAM,EAAE5O,IAAI,CAACgF,GAAG,EAAE,GAAGwJ,MAAM,CAACxH,UAAU,GAAG;AAC3C,eAAC,CAAC;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,OAAAyH,SAAA,CAAAhJ,CAAA,CAAA,CAAA,EAGG+I,MAAM,CAAA;AAAA;AAAA,QAAA,CAAA,EAAAF,QAAA,EAAA,IAAA,CAAA;MAAA,CACd,CAAA,CAAA;MAAA,SA9BKO,YAAYA,CAAAC,IAAA,EAAA;AAAA,QAAA,OAAAT,aAAA,CAAAnH,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA;AAAA,MAAA;AAAA,MAAA,OAAZiN,YAAY;AAAA,IAAA,CAAA;AAgClB;AACF;AACA;AAFE;AAAA,GAAA,EAAA;IAAAlP,GAAA,EAAA,oBAAA;IAAAI,KAAA,GAAA,YAAA;MAAA,IAAAgP,mBAAA,GAAAtK,iBAAA,cAAAC,YAAA,GAAAC,CAAA,CAGA,SAAAqK,QAAAA,CAAyBC,YAAY,EAAA;AAAA,QAAA,IAAA9J,QAAA,EAAAC,KAAA,EAAAC,IAAA,EAAA6J,MAAA;AAAA,QAAA,OAAAxK,YAAA,EAAA,CAAAY,CAAA,CAAA,UAAA6J,SAAA,EAAA;UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAA3J,CAAA;AAAA,YAAA,KAAA,CAAA;AAAA2J,cAAAA,SAAA,CAAA3J,CAAA,GAAA,CAAA;cAAA,OACZa,KAAK,CAAC,qCAAqC,EAAE;AAClEC,gBAAAA,MAAM,EAAE,MAAM;AACdC,gBAAAA,OAAO,EAAE;AAAE,kBAAA,cAAc,EAAE;iBAAqC;gBAChEC,IAAI,EAAE,IAAIC,eAAe,CAAC;kBACxBuH,SAAS,EAAE,IAAI,CAACZ,QAAQ;kBACxBsB,aAAa,EAAE,IAAI,CAACpB,YAAY;AAChCqB,kBAAAA,aAAa,EAAEM,YAAY;AAC3BvI,kBAAAA,UAAU,EAAE;iBACb;AACH,eAAC,CAAC;AAAA,YAAA,KAAA,CAAA;cATIvB,QAAQ,GAAAgK,SAAA,CAAA/I,CAAA;cAAA,IAWTjB,QAAQ,CAACyB,EAAE,EAAA;AAAAuI,gBAAAA,SAAA,CAAA3J,CAAA,GAAA,CAAA;AAAA,gBAAA;AAAA,cAAA;AAAA2J,cAAAA,SAAA,CAAA3J,CAAA,GAAA,CAAA;AAAA,cAAA,OACML,QAAQ,CAAC0B,IAAI,EAAE;AAAA,YAAA,KAAA,CAAA;cAA7BzB,KAAK,GAAA+J,SAAA,CAAA/I,CAAA;AAAA,cAAA,MACL,IAAIlC,KAAK,CAAA,2BAAA,CAAAxD,MAAA,CAA6B0E,KAAK,CAAE,CAAC;AAAA,YAAA,KAAA,CAAA;AAAA+J,cAAAA,SAAA,CAAA3J,CAAA,GAAA,CAAA;AAAA,cAAA,OAGnCL,QAAQ,CAAC2B,IAAI,EAAE;AAAA,YAAA,KAAA,CAAA;cAA5BzB,IAAI,GAAA8J,SAAA,CAAA/I,CAAA;cAAA,IAAA,CAGN,IAAI,CAACuH,UAAU,EAAA;AAAAwB,gBAAAA,SAAA,CAAA3J,CAAA,GAAA,CAAA;AAAA,gBAAA;AAAA,cAAA;AAAA2J,cAAAA,SAAA,CAAA3J,CAAA,GAAA,CAAA;AAAA,cAAA,OACI,IAAI,CAACkI,eAAe,EAAE;AAAA,YAAA,KAAA,CAAA;cAArCwB,MAAM,GAAAC,SAAA,CAAA/I,CAAA;AAAA+I,cAAAA,SAAA,CAAA3J,CAAA,GAAA,CAAA;cAAA,OACN,IAAI,CAACmI,UAAU,CAAC;gBACpB5G,YAAY,EAAE1B,IAAI,CAAC0B,YAAY;gBAC/B4H,aAAa,EAAEO,MAAM,CAACP,aAAa;AAAE;gBACrCC,MAAM,EAAE5O,IAAI,CAACgF,GAAG,EAAE,GAAGK,IAAI,CAAC2B,UAAU,GAAG;AACzC,eAAC,CAAC;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,OAAAmI,SAAA,CAAA1J,CAAA,CAAA,CAAA,EAGGJ,IAAI,CAAC0B,YAAY,CAAA;AAAA;AAAA,QAAA,CAAA,EAAAiI,QAAA,EAAA,IAAA,CAAA;MAAA,CACzB,CAAA,CAAA;MAAA,SA9BKI,kBAAkBA,CAAAC,IAAA,EAAA;AAAA,QAAA,OAAAN,mBAAA,CAAA7H,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA;AAAA,MAAA;AAAA,MAAA,OAAlBwN,kBAAkB;AAAA,IAAA,CAAA;AAgCxB;AACF;AACA;AAFE;AAAA,GAAA,EAAA;IAAAzP,GAAA,EAAA,gBAAA;IAAAI,KAAA,GAAA,YAAA;MAAA,IAAAuP,gBAAA,GAAA7K,iBAAA,cAAAC,YAAA,EAAA,CAAAC,CAAA,CAGA,SAAA4K,SAAAA,GAAA;AAAA,QAAA,IAAAL,MAAA;AAAA,QAAA,OAAAxK,YAAA,EAAA,CAAAY,CAAA,CAAA,UAAAkK,UAAA,EAAA;UAAA,OAAA,CAAA,EAAA,QAAAA,UAAA,CAAAhK,CAAA;AAAA,YAAA,KAAA,CAAA;cAAA,IACO,IAAI,CAACkI,eAAe,EAAA;AAAA8B,gBAAAA,UAAA,CAAAhK,CAAA,GAAA,CAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAAA,MACjB,IAAItB,KAAK,CAAC,iFAAiF,CAAC;AAAA,YAAA,KAAA,CAAA;AAAAsL,cAAAA,UAAA,CAAAhK,CAAA,GAAA,CAAA;AAAA,cAAA,OAG/E,IAAI,CAACkI,eAAe,EAAE;AAAA,YAAA,KAAA,CAAA;cAArCwB,MAAM,GAAAM,UAAA,CAAApJ,CAAA;AAAA,cAAA,IAAA,EAER,CAAC8I,MAAM,IAAI,CAACA,MAAM,CAACP,aAAa,CAAA,EAAA;AAAAa,gBAAAA,UAAA,CAAAhK,CAAA,GAAA,CAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAAA,MAC5B,IAAItB,KAAK,CAAC,uDAAuD,CAAC;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,IAAA,EAItEgL,MAAM,CAACnI,YAAY,IAAImI,MAAM,CAACN,MAAM,IAAI5O,IAAI,CAACgF,GAAG,EAAE,GAAGkK,MAAM,CAACN,MAAM,GAAG,KAAK,CAAA,EAAA;AAAAY,gBAAAA,UAAA,CAAAhK,CAAA,GAAA,CAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAAA,OAAAgK,UAAA,CAAA/J,CAAA,CAAA,CAAA,EACrEyJ,MAAM,CAACnI,YAAY,CAAA;AAAA,YAAA,KAAA,CAAA;cAAA,OAAAyI,UAAA,CAAA/J,CAAA,CAAA,CAAA,EAIrB,IAAI,CAAC2J,kBAAkB,CAACF,MAAM,CAACP,aAAa,CAAC,CAAA;AAAA;AAAA,QAAA,CAAA,EAAAY,SAAA,EAAA,IAAA,CAAA;MAAA,CACrD,CAAA,CAAA;AAAA,MAAA,SAlBKtI,cAAcA,GAAA;AAAA,QAAA,OAAAqI,gBAAA,CAAApI,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA;AAAA,MAAA;AAAA,MAAA,OAAdqF,cAAc;AAAA,IAAA,CAAA,EAAA;AAAA,GAAA,CAAA,CAAA;AAAA,CAAA,CA3GUxD,YAAY,CAAA,CAAA;AAiI5C;AACA;AAEA;AACA;AACA;AACO,SAASgM,mBAAmBA,GAAc;AAAA,EAAA,IAAbzM,MAAM,GAAApB,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAC7C,EAAA,IAAM8N,OAAO,gBAAA,YAAA;AAAA,IAAA,IAAArN,IAAA,GAAAoC,iBAAA,cAAAC,YAAA,EAAA,CAAAC,CAAA,CAAG,SAAAgL,SAAAA,CAAOC,GAAG,EAAEC,GAAG,EAAA;MAAA,IAAArJ,IAAA,EAAAsJ,YAAA,EAAAC,MAAA,EAAAhN,YAAA,EAAA8I,UAAA,EAAAxL,MAAA,EAAA6C,GAAA,EAAA8M,WAAA,EAAAC,MAAA,EAAAC,MAAA,EAAA3J,OAAA,EAAA4J,aAAA,EAAAC,GAAA,EAAAC,GAAA;AAAA,MAAA,OAAA3L,YAAA,EAAA,CAAAY,CAAA,CAAA,UAAAgL,UAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA,QAAAA,UAAA,CAAAhF,CAAA,GAAAgF,UAAA,CAAA9K,CAAA;AAAA,UAAA,KAAA,CAAA;AAAA8K,YAAAA,UAAA,CAAAhF,CAAA,GAAA,CAAA;AAErB9E,YAAAA,IAAI,GAAG,OAAOoJ,GAAG,CAACpJ,IAAI,KAAK,QAAQ,GAAGrC,IAAI,CAACC,KAAK,CAACwL,GAAG,CAACpJ,IAAI,CAAC,GAAGoJ,GAAG,CAACpJ,IAAI;AAAAsJ,YAAAA,YAAA,GACNtJ,IAAI,CAAjEuJ,MAAM,EAANA,MAAM,GAAAD,YAAA,KAAA,MAAA,GAAG,QAAQ,GAAAA,YAAA,EAAE/M,YAAY,GAA8ByD,IAAI,CAA9CzD,YAAY,EAAE8I,UAAU,GAAkBrF,IAAI,CAAhCqF,UAAU,EAAExL,MAAM,GAAUmG,IAAI,CAApBnG,MAAM,EAAE6C,GAAG,GAAKsD,IAAI,CAAZtD,GAAG,CAAA;AAG1D8M,YAAAA,WAAW,GAAGhN,MAAM,CAACuN,KAAK,GAAGvD,iBAAiB,GAAGvJ,YAAY;AAC7DwM,YAAAA,MAAM,GAAG,IAAID,WAAW,CAAChN,MAAM,CAAC;AAAAoN,YAAAA,GAAA,GAI9BL,MAAM;AAAAO,YAAAA,UAAA,CAAA9K,CAAA,GAAA4K,GAAA,KACP,QAAQ,GAAA,CAAA,GAAAA,GAAA,KAIR,cAAc,GAAA,CAAA,GAAAA,GAAA,KAId,WAAW,GAAA,CAAA,GAAAA,GAAA,KAIX,YAAY,GAAA,CAAA,GAAAA,GAAA,KAIZ,eAAe,GAAA,CAAA,GAAAA,GAAA,KAMf,YAAY,GAAA,EAAA,GAAAA,GAAA,KAOZ,cAAc,GAAA,EAAA,GAAA,EAAA;AAAA,YAAA;AAAA,UAAA,KAAA,CAAA;AAAAE,YAAAA,UAAA,CAAA9K,CAAA,GAAA,CAAA;AAAA,YAAA,OA5BFgL,YAAY,CAACP,MAAM,EAAElN,YAAY,EAAEC,MAAM,CAAC;AAAA,UAAA,KAAA,CAAA;YAAzDkN,MAAM,GAAAI,UAAA,CAAAlK,CAAA;YAAA,OAAAkK,UAAA,CAAA7K,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA;AAAA,UAAA,KAAA,CAAA;AAAA6K,YAAAA,UAAA,CAAA9K,CAAA,GAAA,CAAA;YAAA,OAISiL,kBAAkB,CAACR,MAAM,EAAEpE,UAAU,EAAExL,MAAM,EAAE2C,MAAM,CAAC;AAAA,UAAA,KAAA,CAAA;YAArEkN,MAAM,GAAAI,UAAA,CAAAlK,CAAA;YAAA,OAAAkK,UAAA,CAAA7K,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA;AAAA,UAAA,KAAA,CAAA;AAAA6K,YAAAA,UAAA,CAAA9K,CAAA,GAAA,CAAA;YAAA,OAISkL,eAAe,CAACT,MAAM,EAAE/M,GAAG,EAAEH,YAAY,EAAEC,MAAM,CAAC;AAAA,UAAA,KAAA,CAAA;YAAjEkN,MAAM,GAAAI,UAAA,CAAAlK,CAAA;YAAA,OAAAkK,UAAA,CAAA7K,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA;AAAA,UAAA,KAAA,CAAA;AAINyK,YAAAA,MAAM,GAAG;cAAE3J,OAAO,EAAEjD,eAAe,CAACN,MAAM;aAAG;YAAC,OAAAsN,UAAA,CAAA7K,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA;AAAA,UAAA,KAAA,CAAA;AAIxCc,YAAAA,OAAO,GAAGjD,eAAe,CAACN,MAAM,CAAC;AAAAsN,YAAAA,UAAA,CAAA9K,CAAA,GAAA,CAAA;AAAA,YAAA,OACxByK,MAAM,CAACxE,aAAa,CAAClF,OAAO,CAAC;AAAA,UAAA,KAAA,CAAA;YAA5C2J,MAAM,GAAAI,UAAA,CAAAlK,CAAA;YAAA,OAAAkK,UAAA,CAAA7K,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA;AAAA,UAAA,KAAA,EAAA;YAAA,IAKAwK,MAAM,YAAYjD,iBAAiB,EAAA;AAAAsD,cAAAA,UAAA,CAAA9K,CAAA,GAAA,EAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAAA,MACjC,IAAItB,KAAK,CAAC,sBAAsB,CAAC;AAAA,UAAA,KAAA,EAAA;AAEzCgM,YAAAA,MAAM,GAAG;AAAE1P,cAAAA,GAAG,EAAEyP,MAAM,CAACpC,UAAU,CAACrH,IAAI,CAACsH,KAAK;aAAG;YAAC,OAAAwC,UAAA,CAAA7K,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA;AAAA,UAAA,KAAA,EAAA;YAAA,IAI1CwK,MAAM,YAAYjD,iBAAiB,EAAA;AAAAsD,cAAAA,UAAA,CAAA9K,CAAA,GAAA,EAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAAA,MACjC,IAAItB,KAAK,CAAC,sBAAsB,CAAC;AAAA,UAAA,KAAA,EAAA;AAAAoM,YAAAA,UAAA,CAAA9K,CAAA,GAAA,EAAA;AAAA,YAAA,OAE1ByK,MAAM,CAACpB,YAAY,CAACrI,IAAI,CAAC+H,IAAI,CAAC;AAAA,UAAA,KAAA,EAAA;YAA7C2B,MAAM,GAAAI,UAAA,CAAAlK,CAAA;YAAA,OAAAkK,UAAA,CAAA7K,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA;AAAA,UAAA,KAAA,EAAA;AAAA,YAAA,MAIA,IAAIvB,KAAK,CAAA,kBAAA,CAAAxD,MAAA,CAAoBqP,MAAM,CAAE,CAAC;AAAA,UAAA,KAAA,EAAA;AAAA,YAAA,IAAA,EAI5CF,GAAG,KAAA,IAAA,IAAHA,GAAG,KAAA,MAAA,IAAHA,GAAG,CAAE/I,IAAI,CAAA,EAAA;AAAAwJ,cAAAA,UAAA,CAAA9K,CAAA,GAAA,EAAA;AAAA,cAAA;AAAA,YAAA;YACXqK,GAAG,CAACxP,MAAM,CAAC,GAAG,CAAC,CAACyG,IAAI,CAACoJ,MAAM,CAAC;AAACI,YAAAA,UAAA,CAAA9K,CAAA,GAAA,EAAA;AAAA,YAAA;AAAA,UAAA,KAAA,EAAA;AAAA,YAAA,OAAA8K,UAAA,CAAA7K,CAAA,CAAA,CAAA,EAEtB,IAAIkL,QAAQ,CAACxM,IAAI,CAACiE,SAAS,CAAC8H,MAAM,CAAC,EAAE;AAC1C7P,cAAAA,MAAM,EAAE,GAAG;AACXkG,cAAAA,OAAO,EAAE;AAAE,gBAAA,cAAc,EAAE;AAAmB;AAChD,aAAC,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;AAAA+J,YAAAA,UAAA,CAAA9K,CAAA,GAAA,EAAA;AAAA,YAAA;AAAA,UAAA,KAAA,EAAA;AAAA8K,YAAAA,UAAA,CAAAhF,CAAA,GAAA,EAAA;YAAA+E,GAAA,GAAAC,UAAA,CAAAlK,CAAA;AAGE+J,YAAAA,aAAa,GAAG;AACpBvD,cAAAA,OAAO,EAAE,KAAK;cACdxH,KAAK,EAAEiL,GAAA,CAAM7E;aACd;AAAA,YAAA,IAAA,EAEGqE,GAAG,KAAA,IAAA,IAAHA,GAAG,KAAA,MAAA,IAAHA,GAAG,CAAE/I,IAAI,CAAA,EAAA;AAAAwJ,cAAAA,UAAA,CAAA9K,CAAA,GAAA,EAAA;AAAA,cAAA;AAAA,YAAA;YACXqK,GAAG,CAACxP,MAAM,CAAC,GAAG,CAAC,CAACyG,IAAI,CAACqJ,aAAa,CAAC;AAACG,YAAAA,UAAA,CAAA9K,CAAA,GAAA,EAAA;AAAA,YAAA;AAAA,UAAA,KAAA,EAAA;AAAA,YAAA,OAAA8K,UAAA,CAAA7K,CAAA,CAAA,CAAA,EAE7B,IAAIkL,QAAQ,CAACxM,IAAI,CAACiE,SAAS,CAAC+H,aAAa,CAAC,EAAE;AACjD9P,cAAAA,MAAM,EAAE,GAAG;AACXkG,cAAAA,OAAO,EAAE;AAAE,gBAAA,cAAc,EAAE;AAAmB;AAChD,aAAC,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;YAAA,OAAA+J,UAAA,CAAA7K,CAAA,CAAA,CAAA,CAAA;AAAA;AAAA,MAAA,CAAA,EAAAkK,SAAA,EAAA,IAAA,EAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA;IAAA,CAGP,CAAA,CAAA;AAAA,IAAA,OAAA,SA5EKD,OAAOA,CAAAkB,IAAA,EAAAC,IAAA,EAAA;AAAA,MAAA,OAAAxO,IAAA,CAAA6E,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA;AAAA,IAAA,CAAA;EAAA,CAAA,EA4EZ;AAED,EAAA,OAAO8N,OAAO;AAChB;;AAEA;AACA;AACA;AAFA,SAGec,YAAYA,CAAAM,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAA;AAAA,EAAA,OAAAC,aAAA,CAAA/J,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA;AAAA;AAkB3B;AACA;AACA;AAFA,SAAAqP,aAAAA,GAAA;AAAAA,EAAAA,aAAA,GAAAxM,iBAAA,cAAAC,YAAA,EAAA,CAAAC,CAAA,CAlBA,SAAAuM,SAAAA,CAA4BjB,MAAM,EAAElN,YAAY,EAAEC,MAAM,EAAA;IAAA,IAAAmO,eAAA,EAAAC,gBAAA;AAAA,IAAA,IAAA7K,OAAA,EAAArD,GAAA,EAAAgN,MAAA;AAAA,IAAA,OAAAxL,YAAA,EAAA,CAAAY,CAAA,CAAA,UAAA+L,UAAA,EAAA;MAAA,OAAA,CAAA,EAAA,QAAAA,UAAA,CAAA7L,CAAA;AAAA,QAAA,KAAA,CAAA;AACtD;AACMe,UAAAA,OAAO,GAAGjD,eAAe,CAACN,MAAM,CAAC;AAAAqO,UAAAA,UAAA,CAAA7L,CAAA,GAAA,CAAA;AAAA,UAAA,OACjCyK,MAAM,CAACxE,aAAa,CAAClF,OAAO,CAAC;AAAA,QAAA,KAAA,CAAA;AAEnC;AACMrD,UAAAA,GAAG,GAAGJ,kBAAkB,CAACC,YAAY,EAAEC,MAAM,CAAC,CAAA;AAEpDqO,UAAAA,UAAA,CAAA7L,CAAA,GAAA,CAAA;AAAA,UAAA,OACqByK,MAAM,CAAC7F,SAAS,CAAClH,GAAG,CAAC;AAAA,QAAA,KAAA,CAAA;UAApCgN,MAAM,GAAAmB,UAAA,CAAAjL,CAAA;UAAA,OAAAiL,UAAA,CAAA5L,CAAA,CAAA,CAAA,EAEL;AACLmH,YAAAA,OAAO,EAAE,IAAI;AACb0E,YAAAA,YAAY,EAAEpB,MAAM,KAAA,IAAA,IAANA,MAAM,gBAAAiB,eAAA,GAANjB,MAAM,CAAEqB,OAAO,MAAA,IAAA,IAAAJ,eAAA,KAAA,MAAA,GAAA,MAAA,GAAfA,eAAA,CAAiBG,YAAY;AAC3C7E,YAAAA,SAAS,EAAEyD,MAAM,KAAA,IAAA,IAANA,MAAM,gBAAAkB,gBAAA,GAANlB,MAAM,CAAEqB,OAAO,MAAA,IAAA,IAAAH,gBAAA,KAAA,MAAA,IAAA,CAAAA,gBAAA,GAAfA,gBAAA,CAAiBE,YAAY,MAAA,IAAA,IAAAF,gBAAA,KAAA,MAAA,IAAA,CAAAA,gBAAA,GAA7BA,gBAAA,CAA+BI,KAAK,CAAC,SAAS,CAAC,MAAA,IAAA,IAAAJ,gBAAA,KAAA,MAAA,GAAA,MAAA,GAA/CA,gBAAA,CAAkD,CAAC;WAC/D,CAAA;AAAA;AAAA,IAAA,CAAA,EAAAF,SAAA,CAAA;EAAA,CACF,CAAA,CAAA;AAAA,EAAA,OAAAD,aAAA,CAAA/J,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA;AAAA;AAAA,SAKc6O,kBAAkBA,CAAAgB,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAA;AAAA,EAAA,OAAAC,mBAAA,CAAA3K,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA;AAAA;AAWjC;AACA;AACA;AAFA,SAAAiQ,mBAAAA,GAAA;AAAAA,EAAAA,mBAAA,GAAApN,iBAAA,cAAAC,YAAA,GAAAC,CAAA,CAXA,SAAAmN,SAAAA,CAAkC7B,MAAM,EAAEpE,UAAU,EAAExL,MAAM,EAAE2C,MAAM,EAAA;IAAA,IAAAC,kBAAA,CAAA,CAAAR,KAAA,EAAAsP,WAAA,CAAA,CAAAvF,YAAA,CAAA,CAAA0D;AAAA,IAAA,OAAAxL,YAAA,EAAA,CAAAY,CAAA,CAAA,UAAA0M,UAAA,EAAA;MAAA,OAAA,CAAA,EAAA,QAAAA,UAAA,CAAAxM,CAAA;AAAA,QAAA,KAAA,CAAA;AAClE;UAAAvC,kBAAA,GAC2BvB,iBAAiB,CAACsB,MAAM,CAACH,OAAO,EAAEG,MAAM,CAACjB,WAAW,CAAC,EAAjEkB,kBAAA,CAAPJ,OAAO,EAAEJ,KAAK,GAAAQ,kBAAA,CAALR,KAAK;AAChBsP,UAAAA,WAAW,GAAGtP,KAAK,CAACwP,OAAO,CAAC,QAAQ,CAAC;UACrCzF,YAAY,GAAG0F,MAAM,CAACC,YAAY,CAAC,EAAE,GAAGJ,WAAW,CAAC,CAAA;AAAEC,UAAAA,UAAA,CAAAxM,CAAA,GAAA,CAAA;UAAA,OAEvCyK,MAAM,CAACpD,YAAY,CAAChB,UAAU,EAAExL,MAAM,EAAEmM,YAAY,CAAC;AAAA,QAAA,KAAA,CAAA;UAApE0D,MAAM,GAAA8B,UAAA,CAAA5L,CAAA;AAAA,UAAA,OAAA4L,UAAA,CAAAvM,CAAA,CAAA,CAAA,EAELyK,MAAM,CAAA;AAAA;AAAA,IAAA,CAAA,EAAA4B,SAAA,CAAA;EAAA,CACd,CAAA,CAAA;AAAA,EAAA,OAAAD,mBAAA,CAAA3K,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA;AAAA;AAAA,SAKc8O,eAAeA,CAAA0B,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAA;AAAA,EAAA,OAAAC,gBAAA,CAAAtL,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA;AAAA,CAAA;AAU9B;AACA;AAEA;AACA;AACA;AACA;AAHA,SAAA4Q,gBAAAA,GAAA;AAAAA,EAAAA,gBAAA,GAAA/N,iBAAA,cAAAC,YAAA,GAAAC,CAAA,CAbA,SAAA8N,SAAAA,CAA+BxC,MAAM,EAAExD,SAAS,EAAE1J,YAAY,EAAEC,MAAM,EAAA;IAAA,IAAAE,GAAA,EAAA6G,KAAA;AAAA,IAAA,OAAArF,YAAA,EAAA,CAAAY,CAAA,CAAA,UAAAoN,UAAA,EAAA;MAAA,OAAA,CAAA,EAAA,QAAAA,UAAA,CAAAlN,CAAA;AAAA,QAAA,KAAA,CAAA;AAC9DtC,UAAAA,GAAG,GAAGJ,kBAAkB,CAACC,YAAY,EAAEC,MAAM,CAAC;UAC9C+G,KAAK,GAAA,EAAA,CAAArJ,MAAA,CAAMsC,MAAM,CAACe,SAAS,IAAI,UAAU,EAAA,IAAA,CAAA,CAAArD,MAAA,CAAK+L,SAAS,CAAA;AAAAiG,UAAAA,UAAA,CAAAlN,CAAA,GAAA,CAAA;UAAA,OAEvDyK,MAAM,CAACnF,YAAY,CAACf,KAAK,EAAE,CAAC7G,GAAG,CAAC,CAAC;AAAA,QAAA,KAAA,CAAA;UAAA,OAAAwP,UAAA,CAAAjN,CAAA,CAAA,CAAA,EAEhC;AAAEmH,YAAAA,OAAO,EAAE,IAAI;AAAE1J,YAAAA,GAAG,EAAEuJ;WAAW,CAAA;AAAA;AAAA,IAAA,CAAA,EAAAgG,SAAA,CAAA;EAAA,CACzC,CAAA,CAAA;AAAA,EAAA,OAAAD,gBAAA,CAAAtL,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA;AAAA;AAUM,SAAS+Q,oBAAoBA,GAAc;AAAA,EAAA,IAAb3P,MAAM,GAAApB,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAC9C,EAAA,IAAM8N,OAAO,GAAGD,mBAAmB,CAACzM,MAAM,CAAC;AAE3C,EAAA,oBAAA,YAAA;IAAA,IAAAV,KAAA,GAAAmC,iBAAA,cAAAC,YAAA,GAAAC,CAAA,CAAO,SAAAiO,SAAAA,CAAOlJ,OAAO,EAAA;AAAA,MAAA,IAAAlD,IAAA;AAAA,MAAA,OAAA9B,YAAA,EAAA,CAAAY,CAAA,CAAA,UAAAuN,UAAA,EAAA;QAAA,OAAA,CAAA,EAAA,QAAAA,UAAA,CAAArN,CAAA;AAAA,UAAA,KAAA,CAAA;AAAAqN,YAAAA,UAAA,CAAArN,CAAA,GAAA,CAAA;AAAA,YAAA,OACAkE,OAAO,CAAC5C,IAAI,EAAE;AAAA,UAAA,KAAA,CAAA;YAA3BN,IAAI,GAAAqM,UAAA,CAAAzM,CAAA;AAAA,YAAA,OAAAyM,UAAA,CAAApN,CAAA,CAAA,CAAA,EACHiK,OAAO,CAAC;AAAElJ,cAAAA,IAAI,EAAJA;aAAM,EAAE,IAAI,CAAC,CAAA;AAAA;AAAA,MAAA,CAAA,EAAAoM,SAAA,CAAA;IAAA,CAC/B,CAAA,CAAA;AAAA,IAAA,OAAA,UAAAE,IAAA,EAAA;AAAA,MAAA,OAAAxQ,KAAA,CAAA4E,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA;AAAA,IAAA,CAAA;AAAA,EAAA,CAAA,EAAA;AACH;;AAEA;AACA;AACA;AACO,SAASmR,sBAAsBA,GAAc;AAAA,EAAA,IAAb/P,MAAM,GAAApB,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;EAChD,OAAO6N,mBAAmB,CAACzM,MAAM,CAAC;AACpC;;AAEA;AACA;AACA;AACO,SAASgQ,uBAAuBA,GAAc;AAAA,EAAA,IAAbhQ,MAAM,GAAApB,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AACjD,EAAA,IAAM8N,OAAO,GAAGD,mBAAmB,CAACzM,MAAM,CAAC;AAE3C,EAAA,oBAAA,YAAA;AAAA,IAAA,IAAAiQ,KAAA,GAAAxO,iBAAA,cAAAC,YAAA,EAAA,CAAAC,CAAA,CAAO,SAAAuO,SAAAA,CAAOtD,GAAG,EAAEC,GAAG,EAAEsD,IAAI,EAAA;AAAA,MAAA,IAAAC,GAAA;AAAA,MAAA,OAAA1O,YAAA,EAAA,CAAAY,CAAA,CAAA,UAAA+N,UAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA,QAAAA,UAAA,CAAA/H,CAAA,GAAA+H,UAAA,CAAA7N,CAAA;AAAA,UAAA,KAAA,CAAA;AAAA6N,YAAAA,UAAA,CAAA/H,CAAA,GAAA,CAAA;AAAA+H,YAAAA,UAAA,CAAA7N,CAAA,GAAA,CAAA;AAAA,YAAA,OAElBkK,OAAO,CAACE,GAAG,EAAEC,GAAG,CAAC;AAAA,UAAA,KAAA,CAAA;AAAAwD,YAAAA,UAAA,CAAA7N,CAAA,GAAA,CAAA;AAAA,YAAA;AAAA,UAAA,KAAA,CAAA;AAAA6N,YAAAA,UAAA,CAAA/H,CAAA,GAAA,CAAA;YAAA8H,GAAA,GAAAC,UAAA,CAAAjN,CAAA;YAEvB+M,IAAI,CAAAC,GAAM,CAAC;AAAC,UAAA,KAAA,CAAA;YAAA,OAAAC,UAAA,CAAA5N,CAAA,CAAA,CAAA,CAAA;AAAA;AAAA,MAAA,CAAA,EAAAyN,SAAA,EAAA,IAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;IAAA,CAEf,CAAA,CAAA;AAAA,IAAA,OAAA,UAAAI,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAA;AAAA,MAAA,OAAAP,KAAA,CAAA/L,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA;AAAA,IAAA,CAAA;AAAA,EAAA,CAAA,EAAA;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACO,SAAS6R,qBAAqBA,GAAc;AAAA,EAAA,IAAbzQ,MAAM,GAAApB,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAC/C,EAAA,IAAM2E,OAAO,GAAGjD,eAAe,CAACN,MAAM,CAAC;EAEvC,OAAO,4VAAA,CAAAtC,MAAA,CAcasC,MAAM,CAACe,SAAS,IAAI,UAAU,EAAA,sBAAA,CAAA,CAAArD,MAAA,CAClCyD,IAAI,CAACiE,SAAS,CAAC7B,OAAO,CAAC,EAAA,qvIAAA,CAAA,CA8JvCmN,IAAI,EAAE;AACR;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACO,SAASC,eAAeA,CAAC5Q,YAAY,EAAE;EAAA,IAAA6Q,qBAAA,EAAAC,sBAAA;EAC5C,OAAO;IACLnU,SAAS,EAAE,IAAIM,IAAI,EAAE,CAACC,WAAW,EAAE;IACnCC,EAAE,EAAE6C,YAAY,CAAC7C,EAAE;IACnBC,QAAQ,EAAE4C,YAAY,CAAC5C,QAAQ;AAC/BC,IAAAA,IAAI,EAAE2C,YAAY,CAAC3C,IAAI,IAAI,KAAK;AAChCC,IAAAA,MAAM,EAAE0C,YAAY,CAAC1C,MAAM,IAAI,KAAK;AACpCyT,IAAAA,SAAS,EAAE/Q,YAAY,CAACzC,QAAQ,IAAI,WAAW;AAC/CyT,IAAAA,UAAU,EAAEhR,YAAY,CAACxC,SAAS,IAAI,EAAE;AACxCyT,IAAAA,QAAQ,EAAEjR,YAAY,CAACvC,GAAG,IAAI,EAAE;IAChCC,QAAQ,EAAEsC,YAAY,CAACtC,QAAQ,MAAAC,MAAA,CAAMqC,YAAY,CAACtC,QAAQ,CAACE,KAAK,EAAA,GAAA,CAAA,CAAAD,MAAA,CAAIqC,YAAY,CAACtC,QAAQ,CAACG,MAAM,CAAA,GAAK,EAAE;AACvGqT,IAAAA,cAAc,EAAE,CAAC,CAAClR,YAAY,CAAC/B,UAAU;AACzCkT,IAAAA,SAAS,EAAE,CAAC,CAACnR,YAAY,CAAC9B,KAAK;AAC/BkT,IAAAA,gBAAgB,EAAE,CAAA,CAAAP,qBAAA,GAAA7Q,YAAY,CAACqR,WAAW,MAAA,IAAA,IAAAR,qBAAA,KAAA,MAAA,GAAA,MAAA,GAAxBA,qBAAA,CAA0BzS,QAAQ,KAAI,EAAE;AAC1DkT,IAAAA,cAAc,EAAE,CAAC,CAAA,CAAAR,sBAAA,GAAA9Q,YAAY,CAACqR,WAAW,MAAA,IAAA,IAAAP,sBAAA,KAAA,MAAA,GAAA,MAAA,GAAxBA,sBAAA,CAA0BvS,cAAc,KAAI,EAAE,EAAE,CAAC,CAAC,IAAI;GACxE;AACH;;;;"}
package/package.json CHANGED
@@ -1,10 +1,32 @@
1
1
  {
2
2
  "name": "react-visual-feedback",
3
- "version": "1.4.9",
4
- "description": "A visual feedback widget for React applications with element selection, screenshot capture, and professional dashboard",
3
+ "version": "2.2.0",
4
+ "description": "A visual feedback widget for React applications with element selection, screenshot capture, professional dashboard, and Jira/Google Sheets integrations",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",
7
7
  "type": "module",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.esm.js",
11
+ "require": "./dist/index.js"
12
+ },
13
+ "./server": {
14
+ "import": "./dist/server/index.js",
15
+ "require": "./dist/server/index.js"
16
+ },
17
+ "./server/jira": {
18
+ "import": "./dist/server/jira.js",
19
+ "require": "./dist/server/jira.js"
20
+ },
21
+ "./server/sheets": {
22
+ "import": "./dist/server/sheets.js",
23
+ "require": "./dist/server/sheets.js"
24
+ },
25
+ "./integrations": {
26
+ "import": "./dist/integrations/index.js",
27
+ "require": "./dist/integrations/index.js"
28
+ }
29
+ },
8
30
  "files": [
9
31
  "dist"
10
32
  ],
@@ -21,7 +43,12 @@
21
43
  "dashboard",
22
44
  "feedback-management",
23
45
  "status-tracking",
24
- "issue-tracker"
46
+ "issue-tracker",
47
+ "jira",
48
+ "jira-integration",
49
+ "google-sheets",
50
+ "zapier",
51
+ "screen-recording"
25
52
  ],
26
53
  "author": "Murali <murali.g@hyperverge.co>",
27
54
  "license": "MIT",