{"version":3,"file":"dom-to-pptx-node.cjs","sources":["../src/node-exporter.js"],"sourcesContent":["import fs from 'fs';\r\nimport os from 'os';\r\nimport path from 'path';\r\nimport { fileURLToPath } from 'url';\r\n\r\n// ─── Platform-aware browser search map ───────────────────────────────────────\r\n// Each entry is { name, product, paths[] }.\r\n// `product` is 'chrome' or 'firefox' — controls puppeteer launch args.\r\n// NOTE: Safari is not listed (it doesn't implement Chrome DevTools Protocol).\r\nconst PLATFORM_BROWSERS = {\r\n  win32: [\r\n    {\r\n      name: 'Google Chrome',\r\n      product: 'chrome',\r\n      paths: [\r\n        'C:\\\\Program Files\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe',\r\n        'C:\\\\Program Files (x86)\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe',\r\n      ],\r\n    },\r\n    {\r\n      name: 'Microsoft Edge',\r\n      product: 'chrome', // Edge is Chromium-based, uses same protocol\r\n      paths: [\r\n        'C:\\\\Program Files (x86)\\\\Microsoft\\\\Edge\\\\Application\\\\msedge.exe',\r\n        'C:\\\\Program Files\\\\Microsoft\\\\Edge\\\\Application\\\\msedge.exe',\r\n      ],\r\n    },\r\n  ],\r\n  linux: [\r\n    {\r\n      name: 'Google Chrome',\r\n      product: 'chrome',\r\n      paths: ['/usr/bin/google-chrome', '/usr/bin/google-chrome-stable', '/snap/bin/google-chrome'],\r\n    },\r\n    {\r\n      name: 'Chromium',\r\n      product: 'chrome',\r\n      paths: ['/usr/bin/chromium-browser', '/usr/bin/chromium', '/snap/bin/chromium'],\r\n    },\r\n    {\r\n      name: 'Firefox',\r\n      product: 'firefox', // Puppeteer supports Firefox via WebDriver BiDi (v21+)\r\n      paths: ['/usr/bin/firefox', '/snap/bin/firefox', '/usr/lib/firefox/firefox'],\r\n    },\r\n  ],\r\n  darwin: [\r\n    {\r\n      name: 'Google Chrome',\r\n      product: 'chrome',\r\n      paths: [\r\n        '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',\r\n        '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary',\r\n      ],\r\n    },\r\n    {\r\n      name: 'Chromium',\r\n      product: 'chrome',\r\n      paths: ['/Applications/Chromium.app/Contents/MacOS/Chromium'],\r\n    },\r\n    // Safari excluded — does not implement Chrome DevTools Protocol\r\n  ],\r\n};\r\n\r\n/**\r\n * Resolves a browser executable. Priority order:\r\n *  1. Puppeteer's bundled Chrome (installed via postinstall or `puppeteer browsers install`)\r\n *  2. Platform-specific system browsers (Chrome/Edge on Windows, Chrome/Chromium/Firefox on Linux,\r\n *     Chrome/Chromium on macOS — Safari excluded, no CDP support)\r\n *  3. Auto-install headless Chrome via @puppeteer/browsers (one-time, ~150 MB)\r\n *\r\n * @param {object} puppeteer - The imported puppeteer module\r\n * @returns {Promise<{ executablePath: string, product: 'chrome' | 'firefox' }>}\r\n */\r\nasync function ensureBrowser(puppeteer) {\r\n  // 1. Puppeteer's bundled Chrome\r\n  try {\r\n    const p = puppeteer.executablePath();\r\n    if (p && fs.existsSync(p)) {\r\n      return { executablePath: p, product: 'chrome' };\r\n    }\r\n  } catch {\r\n    // executablePath() throws if Chrome was never downloaded\r\n  }\r\n\r\n  // 2. Platform-aware system browser search\r\n  const platform = process.platform; // 'win32' | 'linux' | 'darwin'\r\n  const candidates = PLATFORM_BROWSERS[platform] ?? PLATFORM_BROWSERS.linux;\r\n\r\n  for (const browser of candidates) {\r\n    for (const candidate of browser.paths) {\r\n      if (fs.existsSync(candidate)) {\r\n        console.log(`Using system browser: ${browser.name} → ${candidate}`);\r\n        return { executablePath: candidate, product: browser.product };\r\n      }\r\n    }\r\n  }\r\n\r\n  // 3. Auto-install headless Chrome via @puppeteer/browsers\r\n  console.log('No compatible browser found. Installing headless Chrome (one-time ~150 MB)...');\r\n  console.log('This only happens once. Subsequent runs will reuse the cached binary.\\n');\r\n\r\n  const { install, Browser, resolveBuildId, detectBrowserPlatform } = await import('@puppeteer/browsers');\r\n\r\n  const cacheDir = path.join(os.homedir(), '.cache', 'puppeteer');\r\n  const detectedPlatform = detectBrowserPlatform();\r\n\r\n  let buildId;\r\n  try {\r\n    buildId = await resolveBuildId(Browser.CHROME, detectedPlatform, 'stable');\r\n  } catch (err) {\r\n    throw new Error(\r\n      `Unable to resolve stable Chrome build via @puppeteer/browsers: ${err.message}.\\n` +\r\n        `Ensure you have an active internet connection to download the headless browser automatically, ` +\r\n        `or install Chrome/Edge/Firefox locally on your system.`\r\n    );\r\n  }\r\n\r\n  let lastPercent = -1;\r\n  let result;\r\n\r\n  try {\r\n    result = await install({\r\n      browser: Browser.CHROME,\r\n      buildId,\r\n      cacheDir,\r\n      downloadProgressCallback(downloaded, total) {\r\n        if (!total) return;\r\n        const pct = Math.floor((downloaded / total) * 100);\r\n        if (pct !== lastPercent && pct % 5 === 0) {\r\n          lastPercent = pct;\r\n          const filled = Math.floor(pct / 5);\r\n          const bar = '█'.repeat(filled) + '░'.repeat(20 - filled);\r\n          process.stdout.write(\r\n            `\\r  [${bar}] ${pct}%  (${(downloaded / 1e6).toFixed(1)} / ${(total / 1e6).toFixed(1)} MB)`\r\n          );\r\n        }\r\n      },\r\n    });\r\n  } catch (err) {\r\n    throw new Error(\r\n      `Headless Chrome installation failed: ${err.message}.\\n` +\r\n        `Ensure you have an active internet connection and write permissions to ${cacheDir}, ` +\r\n        `or install Chrome/Edge/Firefox locally on your system.`\r\n    );\r\n  }\r\n\r\n  process.stdout.write('\\n');\r\n  console.log(`\\nChrome installed at: ${result.executablePath}\\n`);\r\n  return { executablePath: result.executablePath, product: 'chrome' };\r\n}\r\n\r\n/**\r\n * Headless server-side HTML-to-PPTX exporter.\r\n * Launches a headless browser, navigates to the HTML source,\r\n * handles optional script injections, and extracts the PPTX blob.\r\n *\r\n * @param {string} htmlSource - Path to a local HTML file or a URL.\r\n * @param {Object} [options={}] - Export configuration options.\r\n * @param {string} [options.selector='.slide'] - CSS selector for slide elements.\r\n * @param {boolean} [options.injectBundle=false] - Force injection of the local browser bundle.\r\n * @param {Object} [options.pptxOptions={}] - Settings passed directly to exportToPptx.\r\n * @returns {Promise<Buffer>} - PPTX output buffer.\r\n */\r\nexport async function exportHtmlToPptx(htmlSource, options = {}) {\r\n  const puppeteer = await import('puppeteer').then((m) => m.default || m);\r\n\r\n  // Resolve browser — self-managing, no external setup required\r\n  const { executablePath, product } = await ensureBrowser(puppeteer);\r\n\r\n  // Firefox uses WebDriver BiDi — different launch args than Chrome/Edge\r\n  const launchArgs =\r\n    product === 'firefox'\r\n      ? [] // Firefox manages sandboxing itself\r\n      : ['--no-sandbox', '--disable-setuid-sandbox'];\r\n\r\n  let browser;\r\n  try {\r\n    browser = await puppeteer.launch({\r\n      headless: true,\r\n      executablePath,\r\n      browser: product, // 'chrome' | 'firefox'\r\n      args: launchArgs,\r\n    });\r\n  } catch (err) {\r\n    throw new Error(\r\n      `Failed to launch headless browser (executable: ${executablePath}): ${err.message}.\\n` +\r\n        `Make sure you have all system dependencies for Chrome/Chromium installed.`\r\n    );\r\n  }\r\n\r\n  try {\r\n    const page = await browser.newPage();\r\n\r\n    // 1. Navigate to HTML source (file path or URL)\r\n    if (fs.existsSync(htmlSource)) {\r\n      const absolutePath = path.resolve(htmlSource);\r\n      // Use proper file:// URL (handles Windows drive letters)\r\n      const fileUrl = new URL(`file:///${absolutePath.replace(/\\\\/g, '/')}`).href;\r\n      try {\r\n        await page.goto(fileUrl, { waitUntil: 'networkidle0' });\r\n      } catch (err) {\r\n        throw new Error(`Failed to load local HTML file: ${err.message}`);\r\n      }\r\n    } else if (htmlSource.startsWith('http://') || htmlSource.startsWith('https://')) {\r\n      try {\r\n        await page.goto(htmlSource, { waitUntil: 'networkidle0' });\r\n      } catch (err) {\r\n        throw new Error(`Failed to load URL \"${htmlSource}\": ${err.message}`);\r\n      }\r\n    } else {\r\n      // Inline HTML content fallback\r\n      try {\r\n        await page.setContent(htmlSource, { waitUntil: 'networkidle0' });\r\n      } catch (err) {\r\n        throw new Error(`Failed to set inline HTML content: ${err.message}`);\r\n      }\r\n    }\r\n\r\n    // 2. Check for dom-to-pptx presence\r\n    let hasLib = await page.evaluate(() => typeof window.domToPptx !== 'undefined');\r\n\r\n    if (!hasLib || options.injectBundle) {\r\n      if (!options.injectBundle) {\r\n        console.log('dom-to-pptx library not detected on page. Injecting local bundle...');\r\n      } else {\r\n        console.log('Injecting local bundle (--inject flag)...');\r\n      }\r\n\r\n      const __dirname = path.dirname(fileURLToPath(import.meta.url));\r\n\r\n      // Look for bundle in typical distribution folder paths\r\n      const candidates = [\r\n        path.resolve(__dirname, 'dom-to-pptx.bundle.js'),\r\n        path.resolve(__dirname, '..', 'dist', 'dom-to-pptx.bundle.js'),\r\n        path.resolve(__dirname, 'dist', 'dom-to-pptx.bundle.js'),\r\n      ];\r\n\r\n      const bundlePath = candidates.find((p) => fs.existsSync(p));\r\n      if (!bundlePath) {\r\n        throw new Error(`Browser bundle not found. Please compile the UMD bundle first by running 'pnpm run build'.`);\r\n      }\r\n\r\n      try {\r\n        await page.addScriptTag({ path: bundlePath });\r\n      } catch (err) {\r\n        throw new Error(`Failed to inject local script bundle: ${err.message}`);\r\n      }\r\n\r\n      // Re-verify library is now loaded\r\n      hasLib = await page.evaluate(() => typeof window.domToPptx !== 'undefined');\r\n      if (!hasLib) {\r\n        throw new Error('Failed to load dom-to-pptx library after injecting the bundle.');\r\n      }\r\n    } else {\r\n      console.log('dom-to-pptx library detected on page.');\r\n    }\r\n\r\n    const selector = options.selector || '.slide';\r\n    console.log(`Running programmatic extraction for slide elements matching: ${selector}`);\r\n\r\n    let dataUrl;\r\n    try {\r\n      dataUrl = await page.evaluate(\r\n        async (sel, pptxOpts) => {\r\n          if (!window.domToPptx || !window.domToPptx.exportToPptx) {\r\n            throw new Error('dom-to-pptx library not found on the page context.');\r\n          }\r\n\r\n          const targets = Array.from(document.querySelectorAll(sel));\r\n          if (targets.length === 0) {\r\n            throw new Error(`No elements matching slide selector \"${sel}\" found.`);\r\n          }\r\n\r\n          const blob = await window.domToPptx.exportToPptx(targets, {\r\n            ...pptxOpts,\r\n            skipDownload: true,\r\n          });\r\n\r\n          return new Promise((resolve, reject) => {\r\n            const reader = new FileReader();\r\n            reader.onloadend = () => resolve(reader.result);\r\n            reader.onerror = reject;\r\n            reader.readAsDataURL(blob);\r\n          });\r\n        },\r\n        selector,\r\n        options.pptxOptions || {}\r\n      );\r\n    } catch (err) {\r\n      throw new Error(`Programmatic export failed: ${err.message}`);\r\n    }\r\n\r\n    const base64Data = dataUrl.split(',')[1];\r\n    return Buffer.from(base64Data, 'base64');\r\n  } finally {\r\n    if (browser) {\r\n      await browser.close();\r\n    }\r\n  }\r\n}\r\n"],"names":["fileURLToPath"],"mappings":";;;;;;;;AAKA;AACA;AACA;AACA;AACA,MAAM,iBAAiB,GAAG;AAC1B,EAAE,KAAK,EAAE;AACT,IAAI;AACJ,MAAM,IAAI,EAAE,eAAe;AAC3B,MAAM,OAAO,EAAE,QAAQ;AACvB,MAAM,KAAK,EAAE;AACb,QAAQ,4DAA4D;AACpE,QAAQ,kEAAkE;AAC1E,OAAO;AACP,KAAK;AACL,IAAI;AACJ,MAAM,IAAI,EAAE,gBAAgB;AAC5B,MAAM,OAAO,EAAE,QAAQ;AACvB,MAAM,KAAK,EAAE;AACb,QAAQ,mEAAmE;AAC3E,QAAQ,6DAA6D;AACrE,OAAO;AACP,KAAK;AACL,GAAG;AACH,EAAE,KAAK,EAAE;AACT,IAAI;AACJ,MAAM,IAAI,EAAE,eAAe;AAC3B,MAAM,OAAO,EAAE,QAAQ;AACvB,MAAM,KAAK,EAAE,CAAC,wBAAwB,EAAE,+BAA+B,EAAE,yBAAyB,CAAC;AACnG,KAAK;AACL,IAAI;AACJ,MAAM,IAAI,EAAE,UAAU;AACtB,MAAM,OAAO,EAAE,QAAQ;AACvB,MAAM,KAAK,EAAE,CAAC,2BAA2B,EAAE,mBAAmB,EAAE,oBAAoB,CAAC;AACrF,KAAK;AACL,IAAI;AACJ,MAAM,IAAI,EAAE,SAAS;AACrB,MAAM,OAAO,EAAE,SAAS;AACxB,MAAM,KAAK,EAAE,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,0BAA0B,CAAC;AAClF,KAAK;AACL,GAAG;AACH,EAAE,MAAM,EAAE;AACV,IAAI;AACJ,MAAM,IAAI,EAAE,eAAe;AAC3B,MAAM,OAAO,EAAE,QAAQ;AACvB,MAAM,KAAK,EAAE;AACb,QAAQ,8DAA8D;AACtE,QAAQ,4EAA4E;AACpF,OAAO;AACP,KAAK;AACL,IAAI;AACJ,MAAM,IAAI,EAAE,UAAU;AACtB,MAAM,OAAO,EAAE,QAAQ;AACvB,MAAM,KAAK,EAAE,CAAC,oDAAoD,CAAC;AACnE,KAAK;AACL;AACA,GAAG;AACH,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa,CAAC,SAAS,EAAE;AACxC;AACA,EAAE,IAAI;AACN,IAAI,MAAM,CAAC,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC;AACzC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AAC/B,MAAM,OAAO,EAAE,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AACtD,IAAI,CAAC;AACL,EAAE,CAAC,CAAC,MAAM;AACV;AACA,EAAE,CAAC;AACH;AACA;AACA,EAAE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;AACpC,EAAE,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC;AAC5E;AACA,EAAE,KAAK,MAAM,OAAO,IAAI,UAAU,EAAE;AACpC,IAAI,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,KAAK,EAAE;AAC3C,MAAM,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;AACpC,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,sBAAsB,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAC5E,QAAQ,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;AACvE,MAAM,CAAC;AACP,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA,EAAE,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC;AAC/F,EAAE,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;AACzF;AACA,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,GAAG,MAAM,OAAO,qBAAqB,CAAC,CAAC;AAC1G;AACA,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AAClE,EAAE,MAAM,gBAAgB,GAAG,qBAAqB,EAAE,CAAC;AACnD;AACA,EAAE,IAAI,OAAO,CAAC;AACd,EAAE,IAAI;AACN,IAAI,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;AAC/E,EAAE,CAAC,CAAC,OAAO,GAAG,EAAE;AAChB,IAAI,MAAM,IAAI,KAAK;AACnB,MAAM,CAAC,+DAA+D,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AACxF,QAAQ,CAAC,8FAA8F,CAAC;AACxG,QAAQ,CAAC,sDAAsD,CAAC;AAChE,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA,EAAE,IAAI,WAAW,GAAG,EAAE,CAAC;AACvB,EAAE,IAAI,MAAM,CAAC;AACb;AACA,EAAE,IAAI;AACN,IAAI,MAAM,GAAG,MAAM,OAAO,CAAC;AAC3B,MAAM,OAAO,EAAE,OAAO,CAAC,MAAM;AAC7B,MAAM,OAAO;AACb,MAAM,QAAQ;AACd,MAAM,wBAAwB,CAAC,UAAU,EAAE,KAAK,EAAE;AAClD,QAAQ,IAAI,CAAC,KAAK,EAAE,OAAO;AAC3B,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC;AAC3D,QAAQ,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE;AAClD,UAAU,WAAW,GAAG,GAAG,CAAC;AAC5B,UAAU,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAC7C,UAAU,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;AACnE,UAAU,OAAO,CAAC,MAAM,CAAC,KAAK;AAC9B,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvG,WAAW,CAAC;AACZ,QAAQ,CAAC;AACT,MAAM,CAAC;AACP,KAAK,CAAC,CAAC;AACP,EAAE,CAAC,CAAC,OAAO,GAAG,EAAE;AAChB,IAAI,MAAM,IAAI,KAAK;AACnB,MAAM,CAAC,qCAAqC,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AAC9D,QAAQ,CAAC,uEAAuE,EAAE,QAAQ,CAAC,EAAE,CAAC;AAC9F,QAAQ,CAAC,sDAAsD,CAAC;AAChE,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7B,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,uBAAuB,EAAE,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;AACnE,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AACtE,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,gBAAgB,CAAC,UAAU,EAAE,OAAO,GAAG,EAAE,EAAE;AACjE,EAAE,MAAM,SAAS,GAAG,MAAM,OAAO,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;AAC1E;AACA;AACA,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;AACrE;AACA;AACA,EAAE,MAAM,UAAU;AAClB,IAAI,OAAO,KAAK,SAAS;AACzB,QAAQ,EAAE;AACV,QAAQ,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;AACrD;AACA,EAAE,IAAI,OAAO,CAAC;AACd,EAAE,IAAI;AACN,IAAI,OAAO,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC;AACrC,MAAM,QAAQ,EAAE,IAAI;AACpB,MAAM,cAAc;AACpB,MAAM,OAAO,EAAE,OAAO;AACtB,MAAM,IAAI,EAAE,UAAU;AACtB,KAAK,CAAC,CAAC;AACP,EAAE,CAAC,CAAC,OAAO,GAAG,EAAE;AAChB,IAAI,MAAM,IAAI,KAAK;AACnB,MAAM,CAAC,+CAA+C,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AAC5F,QAAQ,CAAC,yEAAyE,CAAC;AACnF,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA,EAAE,IAAI;AACN,IAAI,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;AACzC;AACA;AACA,IAAI,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;AACnC,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AACpD;AACA,MAAM,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClF,MAAM,IAAI;AACV,QAAQ,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;AAChE,MAAM,CAAC,CAAC,OAAO,GAAG,EAAE;AACpB,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,gCAAgC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1E,MAAM,CAAC;AACP,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;AACtF,MAAM,IAAI;AACV,QAAQ,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;AACnE,MAAM,CAAC,CAAC,OAAO,GAAG,EAAE;AACpB,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,oBAAoB,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9E,MAAM,CAAC;AACP,IAAI,CAAC,MAAM;AACX;AACA,MAAM,IAAI;AACV,QAAQ,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;AACzE,MAAM,CAAC,CAAC,OAAO,GAAG,EAAE;AACpB,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,mCAAmC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC7E,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,OAAO,MAAM,CAAC,SAAS,KAAK,WAAW,CAAC,CAAC;AACpF;AACA,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,YAAY,EAAE;AACzC,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;AACjC,QAAQ,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;AAC3F,MAAM,CAAC,MAAM;AACb,QAAQ,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;AACjE,MAAM,CAAC;AACP;AACA,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAACA,iBAAa,CAAC,sQAAe,CAAC,CAAC,CAAC;AACrE;AACA;AACA,MAAM,MAAM,UAAU,GAAG;AACzB,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,uBAAuB,CAAC;AACxD,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,uBAAuB,CAAC;AACtE,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,uBAAuB,CAAC;AAChE,OAAO,CAAC;AACR;AACA,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,MAAM,IAAI,CAAC,UAAU,EAAE;AACvB,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,0FAA0F,CAAC,CAAC,CAAC;AACtH,MAAM,CAAC;AACP;AACA,MAAM,IAAI;AACV,QAAQ,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AACtD,MAAM,CAAC,CAAC,OAAO,GAAG,EAAE;AACpB,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,sCAAsC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAChF,MAAM,CAAC;AACP;AACA;AACA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,OAAO,MAAM,CAAC,SAAS,KAAK,WAAW,CAAC,CAAC;AAClF,MAAM,IAAI,CAAC,MAAM,EAAE;AACnB,QAAQ,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;AAC1F,MAAM,CAAC;AACP,IAAI,CAAC,MAAM;AACX,MAAM,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;AAC3D,IAAI,CAAC;AACL;AACA,IAAI,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC;AAClD,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,6DAA6D,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5F;AACA,IAAI,IAAI,OAAO,CAAC;AAChB,IAAI,IAAI;AACR,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ;AACnC,QAAQ,OAAO,GAAG,EAAE,QAAQ,KAAK;AACjC,UAAU,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE;AACnE,YAAY,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;AAClF,UAAU,CAAC;AACX;AACA,UAAU,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;AACrE,UAAU,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACpC,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,qCAAqC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnF,UAAU,CAAC;AACX;AACA,UAAU,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE;AACpE,YAAY,GAAG,QAAQ;AACvB,YAAY,YAAY,EAAE,IAAI;AAC9B,WAAW,CAAC,CAAC;AACb;AACA,UAAU,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAClD,YAAY,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;AAC5C,YAAY,MAAM,CAAC,SAAS,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC5D,YAAY,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;AACpC,YAAY,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACvC,UAAU,CAAC,CAAC,CAAC;AACb,QAAQ,CAAC;AACT,QAAQ,QAAQ;AAChB,QAAQ,OAAO,CAAC,WAAW,IAAI,EAAE;AACjC,OAAO,CAAC;AACR,IAAI,CAAC,CAAC,OAAO,GAAG,EAAE;AAClB,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,4BAA4B,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACpE,IAAI,CAAC;AACL;AACA,IAAI,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC7C,EAAE,CAAC,SAAS;AACZ,IAAI,IAAI,OAAO,EAAE;AACjB,MAAM,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;AAC5B,IAAI,CAAC;AACL,EAAE,CAAC;AACH;;;;"}