diff --git a/src/apps/cli/src/account.rs b/src/apps/cli/src/account.rs index b7058fad9b..c672b29a74 100644 --- a/src/apps/cli/src/account.rs +++ b/src/apps/cli/src/account.rs @@ -394,6 +394,15 @@ async fn handle_relay_event( RelayEvent::AuthError { message } => { tracing::warn!("Device routing auth error: {message}"); TOKEN_EXPIRED.store(true, Ordering::Relaxed); + // Keep CLI/daemon semantics aligned with Desktop: a relay-rejected + // token is no longer a usable local login and must not be restored + // again on the next process start. Preserve the non-secret hint so + // the re-login form can still be prefilled. + relay_client.disconnect().await; + *session_arc.write().await = None; + *account_relay_url().write().await = None; + PENDING_SYNC_CHOICE.store(false, Ordering::Relaxed); + session_store::clear_session(); crate::peer_host::update_controller_presence(Vec::new()).await; } RelayEvent::DevicePresence { devices } => { diff --git a/src/apps/desktop/src/api/remote_connect_api.rs b/src/apps/desktop/src/api/remote_connect_api.rs index c3c8404cc4..92cbc241e8 100644 --- a/src/apps/desktop/src/api/remote_connect_api.rs +++ b/src/apps/desktop/src/api/remote_connect_api.rs @@ -320,11 +320,17 @@ async fn invalidate_local_account_session(reason: &str) { TOKEN_EXPIRED.store(true, std::sync::atomic::Ordering::Relaxed); if let Some(service) = get_service_holder().read().await.as_ref() { service.stop_device_connection().await; + service.clear_account_pairing_context().await; + service.clear_trusted_mobile_identity().await; } *get_account_session().write().await = None; *get_account_relay_url().write().await = None; session_store::clear_session(); sync_account_login_capability(false); + emit_account_event( + "account://login-state", + serde_json::json!({ "logged_in": false, "reason": "session_expired" }), + ); log::warn!("Invalidated local account session after relay auth failure: {reason}"); } @@ -504,11 +510,25 @@ async fn register_account_pairing_context(service: &RemoteConnectService) { let session_arc = get_account_session().clone(); let relay_url_arc = get_account_relay_url().clone(); + let pairing_attempts = Arc::new(tokio::sync::Mutex::new((0_u32, None::))); service .set_account_pairing_verifier(move |username, password| { let session_arc = session_arc.clone(); let relay_url_arc = relay_url_arc.clone(); + let pairing_attempts = pairing_attempts.clone(); async move { + { + let mut attempts = pairing_attempts.lock().await; + if let Some(locked_until) = attempts.1 { + if locked_until > std::time::Instant::now() { + return Err( + "Too many pairing attempts. Wait one minute and scan again." + .to_string(), + ); + } + *attempts = (0, None); + } + } let session = session_arc .read() .await @@ -519,20 +539,29 @@ async fn register_account_pairing_context(service: &RemoteConnectService) { .await .clone() .ok_or_else(|| "Desktop is not logged into a BitFun account".to_string())?; - AccountClient::new() + let verification = AccountClient::new() .verify_password_for_master_key( &relay_url, &username, &password, &session.master_key, ) - .await - .map_err(|e| { - // Keep the real cause in desktop logs (network vs bad - // credentials); the mobile only gets the unified message. - log::warn!("Account pairing verification failed: {e}"); - "Invalid username or password".to_string() - })?; + .await; + if let Err(error) = verification { + // Keep the real cause in desktop logs (network vs bad + // credentials); the mobile only gets the unified message. + log::warn!("Account pairing verification failed: {error}"); + let mut attempts = pairing_attempts.lock().await; + attempts.0 = attempts.0.saturating_add(1); + if attempts.0 >= 5 { + attempts.1 = + Some(std::time::Instant::now() + std::time::Duration::from_secs(60)); + return Err("Too many pairing attempts. Wait one minute and scan again." + .to_string()); + } + return Err("Invalid username or password".to_string()); + } + *pairing_attempts.lock().await = (0, None); Ok(session.user_id) } }) @@ -1474,19 +1503,24 @@ pub async fn account_status() -> Result { }) } -#[tauri::command] -pub async fn account_logout() -> Result<(), String> { +/// Stop account-backed runtime services and clear all local login state. +/// +/// `revoke_relay_token` is false after deleting this device because the relay +/// deletion already revoked the current token along with the device row. +async fn clear_account_login(revoke_relay_token: bool) { // Disconnect device routing before clearing the session. if let Some(service) = get_service_holder().read().await.as_ref() { service.stop_device_connection().await; service.clear_account_pairing_context().await; service.clear_trusted_mobile_identity().await; } - // Revoke the token on the relay (best-effort — don't block on failure) - if let Ok((session, relay_url)) = read_account_context().await { - let _ = AccountClient::new() - .revoke_token(&relay_url, &session) - .await; + if revoke_relay_token { + // Best-effort relay revocation must not prevent local logout. + if let Ok((session, relay_url)) = read_account_context().await { + let _ = AccountClient::new() + .revoke_token(&relay_url, &session) + .await; + } } *get_account_session().write().await = None; *get_account_relay_url().write().await = None; @@ -1501,6 +1535,11 @@ pub async fn account_logout() -> Result<(), String> { "account://login-state", serde_json::json!({ "logged_in": false }), ); +} + +#[tauri::command] +pub async fn account_logout() -> Result<(), String> { + clear_account_login(true).await; log::info!("Account logged out"); Ok(()) } @@ -1602,8 +1641,11 @@ pub async fn account_connect_devices() -> Result, String> } RelayEvent::AuthError { message } => { log::warn!("Device routing auth error: {message}"); - // Token expired or invalid — mark for re-login prompt - TOKEN_EXPIRED.store(true, std::sync::atomic::Ordering::Relaxed); + // The socket can be rejected while the account panel is + // closed. Fully invalidate local state here so desktop + // capabilities and every UI surface agree immediately. + invalidate_local_account_session(&message).await; + break; } RelayEvent::DevicePresence { devices } => { log::info!("Device presence updated: {} online", devices.len()); @@ -1730,7 +1772,7 @@ pub async fn account_connect_devices() -> Result, String> // Execute the command locally and send back // the encrypted response (including errors). log::info!( - "RPC request from relay: {cmd:?} corr={correlation_id}" + "RPC request received from relay: corr={correlation_id}" ); match execute_local_remote_command(&cmd).await { Ok(resp_value) => { @@ -1749,7 +1791,8 @@ pub async fn account_connect_devices() -> Result, String> } } Ok(cmd) => { - log::info!("Received device command: {cmd:?}"); + let _ = cmd; + log::info!("Received device command"); } Err(e) => { log::warn!("Could not parse device command: {e}"); @@ -2386,11 +2429,22 @@ pub async fn account_list_devices() -> Result, String> { #[tauri::command] pub async fn account_delete_device(targetDeviceId: String) -> Result<(), String> { let (session, relay_url) = read_account_context().await?; - AccountClient::new() + let is_current_device = current_device_identity()?.device_id == targetDeviceId; + if let Err(error) = AccountClient::new() .delete_device(&relay_url, &session, &targetDeviceId) .await - .map_err(|e| format!("{e}"))?; + { + let message = error.to_string(); + if error_indicates_expired_token(&message) { + invalidate_local_account_session(&message).await; + } + return Err(message); + } log::info!("Device {targetDeviceId} removed from account"); + if is_current_device { + clear_account_login(false).await; + log::info!("Current device removed; local account session cleared"); + } Ok(()) } diff --git a/src/apps/desktop/src/computer_use/desktop_host/macos.rs b/src/apps/desktop/src/computer_use/desktop_host/macos.rs index 6ef88bc651..979446bd31 100644 --- a/src/apps/desktop/src/computer_use/desktop_host/macos.rs +++ b/src/apps/desktop/src/computer_use/desktop_host/macos.rs @@ -37,7 +37,7 @@ unsafe extern "C" { /// a `BitFunError` we can return to the caller. The closure must itself /// return a `BitFunResult` so we can flatten the two error sources /// (ObjC exception + Rust-side error) into one. -pub fn run_on_main_for_enigo(f: F) -> BitFunResult +pub(super) fn run_on_main_for_enigo(f: F) -> BitFunResult where F: FnOnce() -> BitFunResult + Send, T: Send, @@ -71,7 +71,7 @@ where /// /// If we're already on the main thread we run inline (avoids /// `dispatch_sync(main)` deadlock). -pub fn catch_objc(f: F) -> BitFunResult +pub(super) fn catch_objc(f: F) -> BitFunResult where F: FnOnce() -> BitFunResult + Send, T: Send, @@ -91,7 +91,7 @@ where /// non-`Send` data and that are guaranteed not to reach AppKit's /// main-thread-only AX callbacks (e.g. Vision OCR on an in-memory /// screenshot buffer). -pub fn catch_objc_local(f: F) -> BitFunResult +pub(super) fn catch_objc_local(f: F) -> BitFunResult where F: FnOnce() -> BitFunResult, { @@ -125,7 +125,7 @@ unsafe extern "C" { } /// Mouse location in Quartz global coordinates (same space as `CGEvent` / `CGWarpMouseCursorPosition`). -pub fn quartz_mouse_location() -> BitFunResult<(f64, f64)> { +pub(super) fn quartz_mouse_location() -> BitFunResult<(f64, f64)> { unsafe { let ev = CGEventCreate(std::ptr::null()); if ev.is_null() { @@ -139,15 +139,15 @@ pub fn quartz_mouse_location() -> BitFunResult<(f64, f64)> { } } -pub fn ax_trusted() -> bool { +pub(super) fn ax_trusted() -> bool { unsafe { AXIsProcessTrusted() } } -pub fn screen_capture_preflight() -> bool { +pub(super) fn screen_capture_preflight() -> bool { unsafe { CGPreflightScreenCaptureAccess() } } -pub fn request_ax_prompt() { +pub(super) fn request_ax_prompt() { let key = CFString::new("AXTrustedCheckOptionPrompt"); let val = CFBoolean::true_value(); let dict = CFDictionary::from_CFType_pairs(&[(key.as_CFType(), val.as_CFType())]); @@ -156,7 +156,7 @@ pub fn request_ax_prompt() { } } -pub fn request_screen_capture() -> bool { +pub(super) fn request_screen_capture() -> bool { unsafe { CGRequestScreenCaptureAccess() } } @@ -173,7 +173,7 @@ pub fn request_screen_capture() -> bool { /// all WebView subtree nodes."`), so each call site keeps its own precise /// guidance while the shared boilerplate (check + prompt + explanation) /// cannot drift between call sites. -pub fn require_ax_trust_for(retry_hint: &str) -> BitFunResult<()> { +pub(super) fn require_ax_trust_for(retry_hint: &str) -> BitFunResult<()> { if ax_trusted() { return Ok(()); } diff --git a/src/apps/desktop/src/computer_use/macos_ax_dump.rs b/src/apps/desktop/src/computer_use/macos_ax_dump.rs index 85669b99bd..7298eeffb7 100644 --- a/src/apps/desktop/src/computer_use/macos_ax_dump.rs +++ b/src/apps/desktop/src/computer_use/macos_ax_dump.rs @@ -139,22 +139,26 @@ pub(crate) fn cached_ref_loose(pid: i32, idx: u32) -> Option { // to keep the older locate path self-contained and untouched) ────────── unsafe fn ax_release(v: CFTypeRef) { - if !v.is_null() { - core_foundation::base::CFRelease(v); + unsafe { + if !v.is_null() { + core_foundation::base::CFRelease(v); + } } } unsafe fn ax_copy_attr(elem: AXUIElementRef, key: &str) -> Option { - let mut val: CFTypeRef = std::ptr::null(); - let k = CFString::new(key); - let st = AXUIElementCopyAttributeValue(elem, k.as_concrete_TypeRef(), &mut val); - if st != 0 || val.is_null() { - if !val.is_null() { - ax_release(val); + unsafe { + let mut val: CFTypeRef = std::ptr::null(); + let k = CFString::new(key); + let st = AXUIElementCopyAttributeValue(elem, k.as_concrete_TypeRef(), &mut val); + if st != 0 || val.is_null() { + if !val.is_null() { + ax_release(val); + } + return None; } - return None; + Some(val) } - Some(val) } /// Safely convert a CF object to a Rust `String`. **MUST type-check first**: @@ -169,14 +173,16 @@ unsafe fn ax_copy_attr(elem: AXUIElementRef, key: &str) -> Option { /// `CFNumber`, on bool attributes is a `CFBoolean`, and on geometric /// attributes is an opaque `AXValueRef` — none of which are strings. unsafe fn cfstring_to_string(cf: CFTypeRef) -> Option { - if cf.is_null() { - return None; - } - if CFGetTypeID(cf) != CFStringGetTypeID() { - return None; + unsafe { + if cf.is_null() { + return None; + } + if CFGetTypeID(cf) != CFStringGetTypeID() { + return None; + } + let s = CFString::wrap_under_get_rule(cf as CFStringRef); + Some(s.to_string()) } - let s = CFString::wrap_under_get_rule(cf as CFStringRef); - Some(s.to_string()) } /// Best-effort: read an attribute and coerce *whatever* CF type comes back @@ -186,150 +192,166 @@ unsafe fn cfstring_to_string(cf: CFTypeRef) -> Option { /// else (e.g. an AXUIElementRef returned for `AXValue` on a tab group) /// becomes `None` rather than blowing up. unsafe fn cf_to_display_string(cf: CFTypeRef) -> Option { - if cf.is_null() { - return None; - } - let tid = CFGetTypeID(cf); - if tid == CFStringGetTypeID() { - let s = CFString::wrap_under_get_rule(cf as CFStringRef); - return Some(s.to_string()); - } - if tid == CFBooleanGetTypeID() { - return Some(if CFBooleanGetValue(cf as CFBooleanRef) != 0 { - "true".to_string() - } else { - "false".to_string() - }); - } - if tid == CFNumberGetTypeID() { - let nref = cf as CFNumberRef; - if CFNumberIsFloatType(nref) != 0 { - let mut d: f64 = 0.0; - if CFNumberGetValue( - nref, - K_CF_NUMBER_DOUBLE_TYPE, - &mut d as *mut _ as *mut c_void, - ) != 0 - { - // Trim trailing zeros for cleaner display (1.0 → "1"). - let s = format!("{}", d); - return Some(s); - } + unsafe { + if cf.is_null() { return None; - } else { - let mut i: i64 = 0; - if CFNumberGetValue( - nref, - K_CF_NUMBER_LONG_LONG_TYPE, - &mut i as *mut _ as *mut c_void, - ) != 0 - { - return Some(i.to_string()); + } + let tid = CFGetTypeID(cf); + if tid == CFStringGetTypeID() { + let s = CFString::wrap_under_get_rule(cf as CFStringRef); + return Some(s.to_string()); + } + if tid == CFBooleanGetTypeID() { + return Some(if CFBooleanGetValue(cf as CFBooleanRef) != 0 { + "true".to_string() + } else { + "false".to_string() + }); + } + if tid == CFNumberGetTypeID() { + let nref = cf as CFNumberRef; + if CFNumberIsFloatType(nref) != 0 { + let mut d: f64 = 0.0; + if CFNumberGetValue( + nref, + K_CF_NUMBER_DOUBLE_TYPE, + &mut d as *mut _ as *mut c_void, + ) != 0 + { + // Trim trailing zeros for cleaner display (1.0 → "1"). + let s = format!("{}", d); + return Some(s); + } + return None; + } else { + let mut i: i64 = 0; + if CFNumberGetValue( + nref, + K_CF_NUMBER_LONG_LONG_TYPE, + &mut i as *mut _ as *mut c_void, + ) != 0 + { + return Some(i.to_string()); + } + return None; } - return None; } + // CGPoint / CGSize / CGRect / CFRange via AXValueRef. + if let Some(p) = ax_value_to_point(cf) { + return Some(format!("({}, {})", p.x, p.y)); + } + if let Some(s) = ax_value_to_size(cf) { + return Some(format!("({} x {})", s.width, s.height)); + } + None } - // CGPoint / CGSize / CGRect / CFRange via AXValueRef. - if let Some(p) = ax_value_to_point(cf) { - return Some(format!("({}, {})", p.x, p.y)); - } - if let Some(s) = ax_value_to_size(cf) { - return Some(format!("({} x {})", s.width, s.height)); - } - None } unsafe fn read_cf_string_attr(elem: AXUIElementRef, key: &str) -> Option { - let v = ax_copy_attr(elem, key)?; - let s = cfstring_to_string(v); - ax_release(v); - s + unsafe { + let v = ax_copy_attr(elem, key)?; + let s = cfstring_to_string(v); + ax_release(v); + s + } } /// Like `read_cf_string_attr` but accepts numbers / booleans / AXValues too /// (used for `AXValue`, which on macOS can be almost anything depending on /// the role). unsafe fn read_cf_value_attr(elem: AXUIElementRef, key: &str) -> Option { - let v = ax_copy_attr(elem, key)?; - let s = cf_to_display_string(v); - ax_release(v); - s + unsafe { + let v = ax_copy_attr(elem, key)?; + let s = cf_to_display_string(v); + ax_release(v); + s + } } unsafe fn read_cf_bool_attr(elem: AXUIElementRef, key: &str) -> Option { - let v = ax_copy_attr(elem, key)?; - let mut out = None; - if CFGetTypeID(v) == CFBooleanGetTypeID() { - out = Some(CFBooleanGetValue(v as CFBooleanRef) != 0); + unsafe { + let v = ax_copy_attr(elem, key)?; + let mut out = None; + if CFGetTypeID(v) == CFBooleanGetTypeID() { + out = Some(CFBooleanGetValue(v as CFBooleanRef) != 0); + } + ax_release(v); + out } - ax_release(v); - out } /// Returns `Some(point)` only if `v` is a non-null AXValueRef encoding a /// CGPoint. Safe to call on any CFTypeRef — non-AXValue inputs return `None`. unsafe fn ax_value_to_point(v: CFTypeRef) -> Option { - if v.is_null() { - return None; - } - let av = v as AXValueRef; - if AXValueGetType(av) != K_AX_VALUE_CGPOINT { - return None; - } - let mut pt = CGPoint { x: 0.0, y: 0.0 }; - if !AXValueGetValue(av, K_AX_VALUE_CGPOINT, &mut pt as *mut _ as *mut c_void) { - return None; + unsafe { + if v.is_null() { + return None; + } + let av = v as AXValueRef; + if AXValueGetType(av) != K_AX_VALUE_CGPOINT { + return None; + } + let mut pt = CGPoint { x: 0.0, y: 0.0 }; + if !AXValueGetValue(av, K_AX_VALUE_CGPOINT, &mut pt as *mut _ as *mut c_void) { + return None; + } + Some(pt) } - Some(pt) } unsafe fn ax_value_to_size(v: CFTypeRef) -> Option { - if v.is_null() { - return None; - } - let av = v as AXValueRef; - if AXValueGetType(av) != K_AX_VALUE_CGSIZE { - return None; - } - let mut sz = CGSize { - width: 0.0, - height: 0.0, - }; - if !AXValueGetValue(av, K_AX_VALUE_CGSIZE, &mut sz as *mut _ as *mut c_void) { - return None; + unsafe { + if v.is_null() { + return None; + } + let av = v as AXValueRef; + if AXValueGetType(av) != K_AX_VALUE_CGSIZE { + return None; + } + let mut sz = CGSize { + width: 0.0, + height: 0.0, + }; + if !AXValueGetValue(av, K_AX_VALUE_CGSIZE, &mut sz as *mut _ as *mut c_void) { + return None; + } + Some(sz) } - Some(sz) } unsafe fn read_global_frame(elem: AXUIElementRef) -> Option<(f64, f64, f64, f64)> { - let pos = ax_copy_attr(elem, "AXPosition")?; - let size = ax_copy_attr(elem, "AXSize")?; - let pt = ax_value_to_point(pos); - let sz = ax_value_to_size(size); - ax_release(pos); - ax_release(size); - let pt = pt?; - let sz = sz?; - Some((pt.x, pt.y, sz.width, sz.height)) + unsafe { + let pos = ax_copy_attr(elem, "AXPosition")?; + let size = ax_copy_attr(elem, "AXSize")?; + let pt = ax_value_to_point(pos); + let sz = ax_value_to_size(size); + ax_release(pos); + ax_release(size); + let pt = pt?; + let sz = sz?; + Some((pt.x, pt.y, sz.width, sz.height)) + } } unsafe fn read_action_names(elem: AXUIElementRef) -> Vec { - let mut names: CFArrayRef = std::ptr::null(); - let st = AXUIElementCopyActionNames(elem, &mut names); - if st != 0 || names.is_null() { - return vec![]; - } - let arr = CFArray::<*const c_void>::wrap_under_create_rule(names); - let mut out = Vec::with_capacity(arr.len() as usize); - for i in 0..arr.len() { - if let Some(s) = arr.get(i) { - let p = *s; - if !p.is_null() { - out.push(CFString::wrap_under_get_rule(p as CFStringRef).to_string()); + unsafe { + let mut names: CFArrayRef = std::ptr::null(); + let st = AXUIElementCopyActionNames(elem, &mut names); + if st != 0 || names.is_null() { + return vec![]; + } + let arr = CFArray::<*const c_void>::wrap_under_create_rule(names); + let mut out = Vec::with_capacity(arr.len() as usize); + for i in 0..arr.len() { + if let Some(s) = arr.get(i) { + let p = *s; + if !p.is_null() { + out.push(CFString::wrap_under_get_rule(p as CFStringRef).to_string()); + } } } + out } - out } // ── Chromium AX tree enablement ─────────────────────────────────────────── @@ -360,31 +382,33 @@ fn enabled_pids() -> &'static Mutex> { /// the tree needs a settle delay). Native Cocoa apps reject the attribute /// and return `false` — they pay no settle cost. unsafe fn enable_chromium_accessibility(app_element: AXUIElementRef) -> bool { - // Try the modern attribute first (no screen-reader side effects). - let key = CFString::new("AXManualAccessibility"); - let val = CFBoolean::true_value(); - let st = AXUIElementSetAttributeValue( - app_element, - key.as_concrete_TypeRef(), - val.as_concrete_TypeRef() as CFTypeRef, - ); - if st == 0 { - return true; - } - // `kAXErrorAttributeUnsupported` = -25205. Anything other than that - // is a transient error (timeout / app busy) — don't bother with the - // legacy fallback, and don't claim enablement happened. - if st != -25205 { - return false; - } - // Legacy fallback for older Electron builds. - let key2 = CFString::new("AXEnhancedUserInterface"); - let val2 = CFBoolean::true_value(); - AXUIElementSetAttributeValue( - app_element, - key2.as_concrete_TypeRef(), - val2.as_concrete_TypeRef() as CFTypeRef, - ) == 0 + unsafe { + // Try the modern attribute first (no screen-reader side effects). + let key = CFString::new("AXManualAccessibility"); + let val = CFBoolean::true_value(); + let st = AXUIElementSetAttributeValue( + app_element, + key.as_concrete_TypeRef(), + val.as_concrete_TypeRef() as CFTypeRef, + ); + if st == 0 { + return true; + } + // `kAXErrorAttributeUnsupported` = -25205. Anything other than that + // is a transient error (timeout / app busy) — don't bother with the + // legacy fallback, and don't claim enablement happened. + if st != -25205 { + return false; + } + // Legacy fallback for older Electron builds. + let key2 = CFString::new("AXEnhancedUserInterface"); + let val2 = CFBoolean::true_value(); + AXUIElementSetAttributeValue( + app_element, + key2.as_concrete_TypeRef(), + val2.as_concrete_TypeRef() as CFTypeRef, + ) == 0 + } } /// Briefly pump the CF run loop to let a freshly-enabled Chromium app @@ -403,7 +427,7 @@ struct Queued { /// Configurable knobs for the dump. Defaults mirror what the dispatch layer /// will call with: depth 32, focus_window_only false, capped at 4000 nodes. -pub struct DumpOpts { +pub(super) struct DumpOpts { pub max_depth: u32, pub max_nodes: usize, pub focus_window_only: bool, @@ -419,7 +443,7 @@ impl Default for DumpOpts { } } -pub fn dump_app_ax(pid: i32, opts: DumpOpts) -> BitFunResult { +pub(super) fn dump_app_ax(pid: i32, opts: DumpOpts) -> BitFunResult { let app = unsafe { AXUIElementCreateApplication(pid) }; if app.is_null() { return Err(BitFunError::tool(format!( @@ -619,16 +643,18 @@ pub fn dump_app_ax(pid: i32, opts: DumpOpts) -> BitFunResult { /// Best-effort: prefer `AXFocusedWindow`, then `AXMainWindow`. Returns a /// retained ref the caller must release (or hand to the cache). unsafe fn try_focused_window(app: AXUIElementRef) -> Option { - for key in ["AXFocusedWindow", "AXMainWindow"] { - if let Some(v) = ax_copy_attr(app, key) { - let elem = v as AXUIElementRef; - if !elem.is_null() { - return Some(elem); + unsafe { + for key in ["AXFocusedWindow", "AXMainWindow"] { + if let Some(v) = ax_copy_attr(app, key) { + let elem = v as AXUIElementRef; + if !elem.is_null() { + return Some(elem); + } + ax_release(v); } - ax_release(v); } + None } - None } /// Render a Codex-style indented tree. diff --git a/src/apps/desktop/src/computer_use/macos_ax_shortcuts.rs b/src/apps/desktop/src/computer_use/macos_ax_shortcuts.rs index 5143badee4..f442859d81 100644 --- a/src/apps/desktop/src/computer_use/macos_ax_shortcuts.rs +++ b/src/apps/desktop/src/computer_use/macos_ax_shortcuts.rs @@ -54,70 +54,82 @@ const MAX_DEPTH: u32 = 12; const MAX_VISITED: usize = 3_000; unsafe fn ax_release(v: CFTypeRef) { - if !v.is_null() { - core_foundation::base::CFRelease(v); + unsafe { + if !v.is_null() { + core_foundation::base::CFRelease(v); + } } } unsafe fn ax_copy_attr(elem: AXUIElementRef, key: &str) -> Option { - let mut val: CFTypeRef = std::ptr::null(); - let k = CFString::new(key); - let st = AXUIElementCopyAttributeValue(elem, k.as_concrete_TypeRef(), &mut val); - if st != 0 || val.is_null() { - if !val.is_null() { - ax_release(val); + unsafe { + let mut val: CFTypeRef = std::ptr::null(); + let k = CFString::new(key); + let st = AXUIElementCopyAttributeValue(elem, k.as_concrete_TypeRef(), &mut val); + if st != 0 || val.is_null() { + if !val.is_null() { + ax_release(val); + } + return None; } - return None; + Some(val) } - Some(val) } /// See `macos_ax_dump.rs::cfstring_to_string` for why the type check is /// mandatory before treating a CFTypeRef as a CFString. unsafe fn cfstring_to_string(cf: CFTypeRef) -> Option { - if cf.is_null() || CFGetTypeID(cf) != CFStringGetTypeID() { - return None; + unsafe { + if cf.is_null() || CFGetTypeID(cf) != CFStringGetTypeID() { + return None; + } + Some(CFString::wrap_under_get_rule(cf as CFStringRef).to_string()) } - Some(CFString::wrap_under_get_rule(cf as CFStringRef).to_string()) } unsafe fn read_cf_string_attr(elem: AXUIElementRef, key: &str) -> Option { - let v = ax_copy_attr(elem, key)?; - let s = cfstring_to_string(v); - ax_release(v); - s + unsafe { + let v = ax_copy_attr(elem, key)?; + let s = cfstring_to_string(v); + ax_release(v); + s + } } unsafe fn read_cf_bool_attr(elem: AXUIElementRef, key: &str) -> Option { - let v = ax_copy_attr(elem, key)?; - let out = if CFGetTypeID(v) == CFBooleanGetTypeID() { - Some(CFBooleanGetValue(v as CFBooleanRef) != 0) - } else { - None - }; - ax_release(v); - out + unsafe { + let v = ax_copy_attr(elem, key)?; + let out = if CFGetTypeID(v) == CFBooleanGetTypeID() { + Some(CFBooleanGetValue(v as CFBooleanRef) != 0) + } else { + None + }; + ax_release(v); + out + } } unsafe fn read_cf_number_attr(elem: AXUIElementRef, key: &str) -> Option { - let v = ax_copy_attr(elem, key)?; - let out = if CFGetTypeID(v) == CFNumberGetTypeID() { - let mut i: i64 = 0; - if CFNumberGetValue( - v as CFNumberRef, - K_CF_NUMBER_LONG_LONG_TYPE, - &mut i as *mut _ as *mut c_void, - ) != 0 - { - Some(i) + unsafe { + let v = ax_copy_attr(elem, key)?; + let out = if CFGetTypeID(v) == CFNumberGetTypeID() { + let mut i: i64 = 0; + if CFNumberGetValue( + v as CFNumberRef, + K_CF_NUMBER_LONG_LONG_TYPE, + &mut i as *mut _ as *mut c_void, + ) != 0 + { + Some(i) + } else { + None + } } else { None - } - } else { - None - }; - ax_release(v); - out + }; + ax_release(v); + out + } } /// Decode `AXMenuItemCmdModifiers` bitmask into canonical lowercase @@ -425,7 +437,7 @@ fn walk(elem: AXUIElementRef, path: &[String], depth: u32, state: &mut WalkState /// Returns an empty result (not an error) when the app has no menu bar /// (e.g. background-only agents) — that is a legitimate "no shortcuts" /// answer, not a failure. -pub fn dump_app_menu_shortcuts(pid: i32) -> BitFunResult<(Vec, u32)> { +pub(super) fn dump_app_menu_shortcuts(pid: i32) -> BitFunResult<(Vec, u32)> { let app = unsafe { AXUIElementCreateApplication(pid) }; if app.is_null() { return Err(BitFunError::tool(format!( diff --git a/src/apps/desktop/src/computer_use/macos_ax_ui.rs b/src/apps/desktop/src/computer_use/macos_ax_ui.rs index 400b4f477d..9fe652335c 100644 --- a/src/apps/desktop/src/computer_use/macos_ax_ui.rs +++ b/src/apps/desktop/src/computer_use/macos_ax_ui.rs @@ -69,22 +69,26 @@ fn frontmost_pid() -> BitFunResult { } unsafe fn ax_release(v: CFTypeRef) { - if !v.is_null() { - core_foundation::base::CFRelease(v); + unsafe { + if !v.is_null() { + core_foundation::base::CFRelease(v); + } } } unsafe fn ax_copy_attr(elem: AXUIElementRef, key: &str) -> Option { - let mut val: CFTypeRef = std::ptr::null(); - let k = CFString::new(key); - let st = AXUIElementCopyAttributeValue(elem, k.as_concrete_TypeRef(), &mut val); - if st != 0 || val.is_null() { - if !val.is_null() { - ax_release(val); + unsafe { + let mut val: CFTypeRef = std::ptr::null(); + let k = CFString::new(key); + let st = AXUIElementCopyAttributeValue(elem, k.as_concrete_TypeRef(), &mut val); + if st != 0 || val.is_null() { + if !val.is_null() { + ax_release(val); + } + return None; } - return None; + Some(val) } - Some(val) } /// Safely convert a CF object to `String`. @@ -96,77 +100,87 @@ unsafe fn ax_copy_attr(elem: AXUIElementRef, key: &str) -> Option { /// boundary — Rust then aborts with `fatal runtime error: Rust cannot catch foreign exceptions`. /// Always type-check first. unsafe fn cfstring_to_string(cf: CFTypeRef) -> Option { - if cf.is_null() { - return None; - } - if CFGetTypeID(cf) != CFStringGetTypeID() { - return None; + unsafe { + if cf.is_null() { + return None; + } + if CFGetTypeID(cf) != CFStringGetTypeID() { + return None; + } + let s = CFString::wrap_under_get_rule(cf as CFStringRef); + Some(s.to_string()) } - let s = CFString::wrap_under_get_rule(cf as CFStringRef); - Some(s.to_string()) } unsafe fn ax_value_to_point(v: CFTypeRef) -> Option { - let v = v as AXValueRef; - let t = AXValueGetType(v); - if t != K_AX_VALUE_CGPOINT { - return None; - } - let mut pt = CGPoint { x: 0.0, y: 0.0 }; - if !AXValueGetValue(v, K_AX_VALUE_CGPOINT, &mut pt as *mut _ as *mut c_void) { - return None; + unsafe { + let v = v as AXValueRef; + let t = AXValueGetType(v); + if t != K_AX_VALUE_CGPOINT { + return None; + } + let mut pt = CGPoint { x: 0.0, y: 0.0 }; + if !AXValueGetValue(v, K_AX_VALUE_CGPOINT, &mut pt as *mut _ as *mut c_void) { + return None; + } + Some(pt) } - Some(pt) } unsafe fn ax_value_to_size(v: CFTypeRef) -> Option { - let v = v as AXValueRef; - let t = AXValueGetType(v); - if t != K_AX_VALUE_CGSIZE { - return None; - } - let mut sz = CGSize { - width: 0.0, - height: 0.0, - }; - if !AXValueGetValue(v, K_AX_VALUE_CGSIZE, &mut sz as *mut _ as *mut c_void) { - return None; + unsafe { + let v = v as AXValueRef; + let t = AXValueGetType(v); + if t != K_AX_VALUE_CGSIZE { + return None; + } + let mut sz = CGSize { + width: 0.0, + height: 0.0, + }; + if !AXValueGetValue(v, K_AX_VALUE_CGSIZE, &mut sz as *mut _ as *mut c_void) { + return None; + } + Some(sz) } - Some(sz) } unsafe fn ax_copy_action_names(elem: AXUIElementRef) -> Vec { - let mut names: CFArrayRef = std::ptr::null(); - let st = AXUIElementCopyActionNames(elem, &mut names); - if st != 0 || names.is_null() { - return vec![]; - } - let arr = CFArray::<*const c_void>::wrap_under_create_rule(names); - let mut res = Vec::new(); - for i in 0..arr.len() { - if let Some(s) = arr.get(i) { - let p = *s; - if !p.is_null() { - let cf_str = CFString::wrap_under_get_rule(p as CFStringRef); - res.push(cf_str.to_string()); + unsafe { + let mut names: CFArrayRef = std::ptr::null(); + let st = AXUIElementCopyActionNames(elem, &mut names); + if st != 0 || names.is_null() { + return vec![]; + } + let arr = CFArray::<*const c_void>::wrap_under_create_rule(names); + let mut res = Vec::new(); + for i in 0..arr.len() { + if let Some(s) = arr.get(i) { + let p = *s; + if !p.is_null() { + let cf_str = CFString::wrap_under_get_rule(p as CFStringRef); + res.push(cf_str.to_string()); + } } } + res } - res } unsafe fn is_ax_enabled(elem: AXUIElementRef) -> bool { - let Some(val) = ax_copy_attr(elem, "AXEnabled") else { - return false; - }; - let mut enabled: bool = false; - let type_id = core_foundation::base::CFGetTypeID(val); - if type_id == core_foundation::boolean::CFBooleanGetTypeID() { - let b = val as core_foundation::boolean::CFBooleanRef; - enabled = core_foundation::number::CFBooleanGetValue(b); + unsafe { + let Some(val) = ax_copy_attr(elem, "AXEnabled") else { + return false; + }; + let mut enabled: bool = false; + let type_id = core_foundation::base::CFGetTypeID(val); + if type_id == core_foundation::boolean::CFBooleanGetTypeID() { + let b = val as core_foundation::boolean::CFBooleanRef; + enabled = core_foundation::number::CFBooleanGetValue(b); + } + ax_release(val); + enabled } - ax_release(val); - enabled } /// All text-bearing AX attributes a single element exposes — read in one pass so the BFS @@ -183,22 +197,26 @@ pub(crate) struct NodeText { } unsafe fn ax_copy_string_attr(elem: AXUIElementRef, key: &str) -> Option { - ax_copy_attr(elem, key).and_then(|v| { - let s = cfstring_to_string(v); - ax_release(v); - s - }) + unsafe { + ax_copy_attr(elem, key).and_then(|v| { + let s = cfstring_to_string(v); + ax_release(v); + s + }) + } } pub(crate) unsafe fn read_node_text(elem: AXUIElementRef) -> NodeText { - NodeText { - role: ax_copy_string_attr(elem, "AXRole"), - subrole: ax_copy_string_attr(elem, "AXSubrole"), - title: ax_copy_string_attr(elem, "AXTitle"), - value: ax_copy_string_attr(elem, "AXValue"), - description: ax_copy_string_attr(elem, "AXDescription"), - identifier: ax_copy_string_attr(elem, "AXIdentifier"), - help: ax_copy_string_attr(elem, "AXHelp"), + unsafe { + NodeText { + role: ax_copy_string_attr(elem, "AXRole"), + subrole: ax_copy_string_attr(elem, "AXSubrole"), + title: ax_copy_string_attr(elem, "AXTitle"), + value: ax_copy_string_attr(elem, "AXValue"), + description: ax_copy_string_attr(elem, "AXDescription"), + identifier: ax_copy_string_attr(elem, "AXIdentifier"), + help: ax_copy_string_attr(elem, "AXHelp"), + } } } @@ -207,35 +225,41 @@ pub(crate) unsafe fn read_node_text(elem: AXUIElementRef) -> NodeText { unsafe fn read_role_title_id( elem: AXUIElementRef, ) -> (Option, Option, Option) { - let role = ax_copy_string_attr(elem, "AXRole"); - let title = ax_copy_string_attr(elem, "AXTitle"); - let ident = ax_copy_string_attr(elem, "AXIdentifier"); - (role, title, ident) + unsafe { + let role = ax_copy_string_attr(elem, "AXRole"); + let title = ax_copy_string_attr(elem, "AXTitle"); + let ident = ax_copy_string_attr(elem, "AXIdentifier"); + (role, title, ident) + } } /// Legacy two-field reader used by `enumerate_ui_tree_text`. Prefer [`read_node_text`]. unsafe fn read_value_desc(elem: AXUIElementRef) -> (Option, Option) { - let value = ax_copy_string_attr(elem, "AXValue"); - let desc = ax_copy_string_attr(elem, "AXDescription"); - (value, desc) + unsafe { + let value = ax_copy_string_attr(elem, "AXValue"); + let desc = ax_copy_string_attr(elem, "AXDescription"); + (value, desc) + } } /// Global center and axis-aligned bounds from `AXPosition` + `AXSize`. unsafe fn element_frame_global(elem: AXUIElementRef) -> Option<(f64, f64, f64, f64, f64, f64)> { - let pos = ax_copy_attr(elem, "AXPosition")?; - let size = ax_copy_attr(elem, "AXSize")?; - let pt = ax_value_to_point(pos)?; - let sz = ax_value_to_size(size)?; - ax_release(pos); - ax_release(size); - if sz.width <= 0.0 || sz.height <= 0.0 { - return None; + unsafe { + let pos = ax_copy_attr(elem, "AXPosition")?; + let size = ax_copy_attr(elem, "AXSize")?; + let pt = ax_value_to_point(pos)?; + let sz = ax_value_to_size(size)?; + ax_release(pos); + ax_release(size); + if sz.width <= 0.0 || sz.height <= 0.0 { + return None; + } + let left = pt.x; + let top = pt.y; + let w = sz.width; + let h = sz.height; + Some((left + w / 2.0, top + h / 2.0, left, top, w, h)) } - let left = pt.x; - let top = pt.y; - let w = sz.width; - let h = sz.height; - Some((left + w / 2.0, top + h / 2.0, left, top, w, h)) } struct Queued { @@ -458,51 +482,56 @@ unsafe fn climb_to_clickable_ancestor( start: AXUIElementRef, max_steps: u32, ) -> Option<(AXUIElementRef, NodeText, (f64, f64, f64, f64, f64, f64))> { - let mut cur = start; - let mut owns_cur = false; - for _ in 0..max_steps { - let parent_val = ax_copy_attr(cur, "AXParent"); - if owns_cur { - ax_release(cur as CFTypeRef); - } - let Some(parent_val) = parent_val else { - return None; - }; - let parent = parent_val as AXUIElementRef; - if parent.is_null() { - ax_release(parent_val); - return None; - } - // We now own `parent_val`; treat it as our retained ref. - cur = parent; - owns_cur = true; - - let nt = read_node_text(cur); - if let Some(role) = nt.role.as_deref() { - if is_clickable_role(role) { - if let Some(frame) = element_frame_global(cur) { - if frame.4 > 0.0 && frame.5 > 0.0 { - return Some((cur, nt, frame)); + unsafe { + let mut cur = start; + let mut owns_cur = false; + for _ in 0..max_steps { + let parent_val = ax_copy_attr(cur, "AXParent"); + if owns_cur { + ax_release(cur as CFTypeRef); + } + let Some(parent_val) = parent_val else { + return None; + }; + let parent = parent_val as AXUIElementRef; + if parent.is_null() { + ax_release(parent_val); + return None; + } + // We now own `parent_val`; treat it as our retained ref. + cur = parent; + owns_cur = true; + + let nt = read_node_text(cur); + if let Some(role) = nt.role.as_deref() { + if is_clickable_role(role) { + if let Some(frame) = element_frame_global(cur) { + if frame.4 > 0.0 && frame.5 > 0.0 { + return Some((cur, nt, frame)); + } } } } } + if owns_cur { + ax_release(cur as CFTypeRef); + } + None } - if owns_cur { - ax_release(cur as CFTypeRef); - } - None } /// Check if an AX element has `AXHidden` set to true. unsafe fn is_ax_hidden(elem: AXUIElementRef) -> bool { - let Some(val) = ax_copy_attr(elem, "AXHidden") else { - return false; // No AXHidden attribute = not hidden - }; - // AXHidden is a CFBoolean - let hidden = val as *const c_void == core_foundation::boolean::kCFBooleanTrue as *const c_void; - ax_release(val); - hidden + unsafe { + let Some(val) = ax_copy_attr(elem, "AXHidden") else { + return false; // No AXHidden attribute = not hidden + }; + // AXHidden is a CFBoolean + let hidden = + val as *const c_void == core_foundation::boolean::kCFBooleanTrue as *const c_void; + ax_release(val); + hidden + } } /// Build a short description string for an element (for use as parent context). @@ -518,7 +547,7 @@ const MAX_CANDIDATES: usize = 10; /// Search the **frontmost** app's accessibility tree (BFS) for elements matching filters. /// Collects all matches, filters invisible/off-screen ones, ranks by relevance, returns the best. -pub fn locate_ui_element_center( +pub(super) fn locate_ui_element_center( query: &UiElementLocateQuery, ) -> BitFunResult { ui_locate_common::validate_query(query)?; @@ -838,45 +867,47 @@ pub fn locate_ui_element_center( } unsafe fn is_ax_interactive(elem: AXUIElementRef, role: &str) -> bool { - let actions = ax_copy_action_names(elem); - let interactive_actions = [ - "AXPress", - "AXShowMenu", - "AXIncrement", - "AXDecrement", - "AXConfirm", - "AXCancel", - "AXRaise", - "AXSetValue", - "AXScrollLeftByPage", - "AXScrollRightByPage", - "AXScrollUpByPage", - "AXScrollDownByPage", - ]; - - let mut has_interactive = false; - for a in &actions { - if interactive_actions.contains(&a.as_str()) { - has_interactive = true; - break; + unsafe { + let actions = ax_copy_action_names(elem); + let interactive_actions = [ + "AXPress", + "AXShowMenu", + "AXIncrement", + "AXDecrement", + "AXConfirm", + "AXCancel", + "AXRaise", + "AXSetValue", + "AXScrollLeftByPage", + "AXScrollRightByPage", + "AXScrollUpByPage", + "AXScrollDownByPage", + ]; + + let mut has_interactive = false; + for a in &actions { + if interactive_actions.contains(&a.as_str()) { + has_interactive = true; + break; + } } - } - if actions.iter().any(|a| a == "AXSetValue") && role == "AXTextField" { - return is_ax_enabled(elem); - } + if actions.iter().any(|a| a == "AXSetValue") && role == "AXTextField" { + return is_ax_enabled(elem); + } - if actions.iter().any(|a| a == "AXPress") && (role == "AXButton" || role == "AXLink") { - return is_ax_enabled(elem); - } + if actions.iter().any(|a| a == "AXPress") && (role == "AXButton" || role == "AXLink") { + return is_ax_enabled(elem); + } - has_interactive + has_interactive + } } /// Enumerate visible interactive elements in the frontmost app's AX tree /// and return a condensed text representation of the UI for context (no /// numbered labels rendered on the screenshot). -pub fn enumerate_ui_tree_text(max_elements: usize) -> Option { +pub(super) fn enumerate_ui_tree_text(max_elements: usize) -> Option { let pid = frontmost_pid().ok()?; let root = unsafe { AXUIElementCreateApplication(pid) }; if root.is_null() { @@ -1036,19 +1067,21 @@ pub fn enumerate_ui_tree_text(max_elements: usize) -> Option { } unsafe fn ax_parent_context_line(elem: AXUIElementRef) -> Option { - let parent_val = ax_copy_attr(elem, "AXParent")?; - let parent = parent_val as AXUIElementRef; - if parent.is_null() { + unsafe { + let parent_val = ax_copy_attr(elem, "AXParent")?; + let parent = parent_val as AXUIElementRef; + if parent.is_null() { + ax_release(parent_val); + return None; + } + let (r, t, _) = read_role_title_id(parent); ax_release(parent_val); - return None; + Some(element_short_desc(r.as_deref(), t.as_deref())) } - let (r, t, _) = read_role_title_id(parent); - ax_release(parent_val); - Some(element_short_desc(r.as_deref(), t.as_deref())) } /// Hit-test the accessibility element at global screen coordinates (OCR `move_to_text` disambiguation). -pub fn accessibility_hit_at_global_point(gx: f64, gy: f64) -> Option { +pub(super) fn accessibility_hit_at_global_point(gx: f64, gy: f64) -> Option { unsafe { let sys = AXUIElementCreateSystemWide(); if sys.is_null() { @@ -1087,13 +1120,13 @@ pub fn accessibility_hit_at_global_point(gx: f64, gy: f64) -> Option BitFunResult<(i32, i32, u32, u32)> { +pub(super) fn frontmost_window_bounds_global() -> BitFunResult<(i32, i32, u32, u32)> { let pid = frontmost_pid()?; window_bounds_global_for_pid(pid) } /// Bounds of the selected app's focused or main window in global screen coordinates. -pub fn window_bounds_global_for_pid(pid: i32) -> BitFunResult<(i32, i32, u32, u32)> { +pub(super) fn window_bounds_global_for_pid(pid: i32) -> BitFunResult<(i32, i32, u32, u32)> { let app = unsafe { AXUIElementCreateApplication(pid) }; if app.is_null() { return Err(BitFunError::tool( @@ -1129,16 +1162,18 @@ pub fn window_bounds_global_for_pid(pid: i32) -> BitFunResult<(i32, i32, u32, u3 } unsafe fn try_frontmost_window_element(app: AXUIElementRef) -> Option { - for key in ["AXFocusedWindow", "AXMainWindow"] { - if let Some(w) = ax_copy_attr(app, key) { - let elem = w as AXUIElementRef; - if !elem.is_null() && element_frame_global(elem).is_some() { - return Some(elem); + unsafe { + for key in ["AXFocusedWindow", "AXMainWindow"] { + if let Some(w) = ax_copy_attr(app, key) { + let elem = w as AXUIElementRef; + if !elem.is_null() && element_frame_global(elem).is_some() { + return Some(elem); + } + ax_release(w); } - ax_release(w); } + first_ax_window_from_ax_windows(app) } - first_ax_window_from_ax_windows(app) } #[allow(dead_code)] // legacy: text-caret crop is gone; kept for completeness @@ -1151,26 +1186,28 @@ fn is_text_editing_ax_role(role: &str) -> bool { #[allow(dead_code)] unsafe fn ax_focused_element_from_system_wide() -> Option { - let sys = AXUIElementCreateSystemWide(); - if sys.is_null() { - return None; - } - let mut focused: CFTypeRef = std::ptr::null(); - let k = CFString::new("AXFocusedUIElement"); - let st = AXUIElementCopyAttributeValue(sys, k.as_concrete_TypeRef(), &mut focused); - if st != 0 || focused.is_null() { - if !focused.is_null() { - ax_release(focused); + unsafe { + let sys = AXUIElementCreateSystemWide(); + if sys.is_null() { + return None; } - return None; + let mut focused: CFTypeRef = std::ptr::null(); + let k = CFString::new("AXFocusedUIElement"); + let st = AXUIElementCopyAttributeValue(sys, k.as_concrete_TypeRef(), &mut focused); + if st != 0 || focused.is_null() { + if !focused.is_null() { + ax_release(focused); + } + return None; + } + Some(focused as AXUIElementRef) } - Some(focused as AXUIElementRef) } /// Best-effort global (x, y) for a 500×500 screenshot centered near the focused text field (AX element center). /// Returns `None` if no suitable focused text UI; caller should fall back to the mouse position. #[allow(dead_code)] -pub fn global_point_for_text_caret_screenshot(mx: f64, my: f64) -> (f64, f64) { +pub(super) fn global_point_for_text_caret_screenshot(mx: f64, my: f64) -> (f64, f64) { unsafe { let Some(el) = ax_focused_element_from_system_wide() else { return (mx, my); @@ -1194,27 +1231,29 @@ pub fn global_point_for_text_caret_screenshot(mx: f64, my: f64) -> (f64, f64) { } unsafe fn first_ax_window_from_ax_windows(app: AXUIElementRef) -> Option { - let arr_ref = ax_copy_attr(app, "AXWindows")?; - let arr = CFArray::<*const c_void>::wrap_under_create_rule(arr_ref as CFArrayRef); - for i in 0..arr.len() { - let Some(w) = arr.get(i) else { - continue; - }; - let child = *w as AXUIElementRef; - if child.is_null() { - continue; - } - let retained = CFRetain(child as CFTypeRef) as AXUIElementRef; - if retained.is_null() { - continue; - } - let (role, _, _) = read_role_title_id(retained); - if role.as_deref() == Some("AXWindow") && element_frame_global(retained).is_some() { - return Some(retained); + unsafe { + let arr_ref = ax_copy_attr(app, "AXWindows")?; + let arr = CFArray::<*const c_void>::wrap_under_create_rule(arr_ref as CFArrayRef); + for i in 0..arr.len() { + let Some(w) = arr.get(i) else { + continue; + }; + let child = *w as AXUIElementRef; + if child.is_null() { + continue; + } + let retained = CFRetain(child as CFTypeRef) as AXUIElementRef; + if retained.is_null() { + continue; + } + let (role, _, _) = read_role_title_id(retained); + if role.as_deref() == Some("AXWindow") && element_frame_global(retained).is_some() { + return Some(retained); + } + ax_release(retained as CFTypeRef); } - ax_release(retained as CFTypeRef); + None } - None } #[cfg(test)] diff --git a/src/apps/desktop/src/computer_use/macos_ax_write.rs b/src/apps/desktop/src/computer_use/macos_ax_write.rs index 7b294e2e98..3388dcda2c 100644 --- a/src/apps/desktop/src/computer_use/macos_ax_write.rs +++ b/src/apps/desktop/src/computer_use/macos_ax_write.rs @@ -32,7 +32,7 @@ unsafe extern "C" { /// Result of an AX-first attempt. #[derive(Debug)] -pub enum AxWriteOutcome { +pub(super) enum AxWriteOutcome { /// The AX call succeeded — no fallback needed. Ok, /// AX rejected the call (status non-zero or unsupported). Caller should @@ -42,7 +42,7 @@ pub enum AxWriteOutcome { /// Try to "click" via AXPress. Most controls (NSButton, links, menu items) /// implement this; many text fields and webviews do not. -pub fn try_ax_press(target: AxRef) -> AxWriteOutcome { +pub(super) fn try_ax_press(target: AxRef) -> AxWriteOutcome { if target.0.is_null() { return AxWriteOutcome::Unavailable(-1); } @@ -57,7 +57,7 @@ pub fn try_ax_press(target: AxRef) -> AxWriteOutcome { /// Try to set the AXValue of a text field. `value` is sent as a CFString. /// Caller is responsible for any subsequent focus / commit (Tab, Return). -pub fn try_ax_set_value(target: AxRef, value: &str) -> AxWriteOutcome { +pub(super) fn try_ax_set_value(target: AxRef, value: &str) -> AxWriteOutcome { if target.0.is_null() { return AxWriteOutcome::Unavailable(-1); } @@ -78,7 +78,7 @@ pub fn try_ax_set_value(target: AxRef, value: &str) -> AxWriteOutcome { } /// Try a generic AX action by name (e.g. `"AXShowMenu"`, `"AXIncrement"`). -pub fn try_ax_action(target: AxRef, action_name: &str) -> AxWriteOutcome { +pub(super) fn try_ax_action(target: AxRef, action_name: &str) -> AxWriteOutcome { if target.0.is_null() { return AxWriteOutcome::Unavailable(-1); } @@ -98,7 +98,7 @@ pub fn try_ax_action(target: AxRef, action_name: &str) -> AxWriteOutcome { /// Returns `Ok` even when the AX call fails — focus errors are treated as /// benign because the subsequent key event may still land in the right place /// via pid-scoped delivery. (Ported from cua-driver-rs `ax_actions.rs:32-43`.) -pub fn try_ax_focus(target: AxRef) -> AxWriteOutcome { +pub(super) fn try_ax_focus(target: AxRef) -> AxWriteOutcome { if target.0.is_null() { return AxWriteOutcome::Unavailable(-1); } diff --git a/src/apps/desktop/src/computer_use/macos_bg_input.rs b/src/apps/desktop/src/computer_use/macos_bg_input.rs index 22368a3fe9..092c716063 100644 --- a/src/apps/desktop/src/computer_use/macos_bg_input.rs +++ b/src/apps/desktop/src/computer_use/macos_bg_input.rs @@ -39,7 +39,7 @@ use std::time::{Duration, Instant}; /// Logical mouse button for `bg_click`. #[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum BgMouseButton { +pub(super) enum BgMouseButton { Left, Right, Middle, @@ -74,7 +74,7 @@ impl BgMouseButton { /// Maps to the standard macOS modifier flag bits. We deliberately do not /// touch `CapsLock` here. #[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum BgModifier { +pub(super) enum BgModifier { Command, Shift, Option, // alias: alt @@ -83,7 +83,7 @@ pub enum BgModifier { } impl BgModifier { - pub fn from_str(s: &str) -> Option { + pub(super) fn from_str(s: &str) -> Option { match s.to_ascii_lowercase().as_str() { "cmd" | "command" | "meta" | "super" => Some(Self::Command), "shift" => Some(Self::Shift), @@ -125,7 +125,7 @@ impl BgModifier { /// `CGEventSource` create + `CGEventPostToPid` round-trip on every call. /// A `false` result is NOT cached so callers can re-probe after the user /// grants Accessibility permission without restarting the host. -pub fn supports_background_input() -> bool { +pub(super) fn supports_background_input() -> bool { use std::sync::atomic::{AtomicBool, Ordering}; static CACHED_OK: AtomicBool = AtomicBool::new(false); if CACHED_OK.load(Ordering::Relaxed) { @@ -161,14 +161,14 @@ pub fn supports_background_input() -> bool { /// Whether the SkyLight SPI bridge is available for dual-post delivery. /// When `true`, Chromium/Catalyst/Electron background targets are reachable. -pub fn supports_skylight_post() -> bool { +pub(super) fn supports_skylight_post() -> bool { super::macos_skylight::is_available() } /// Whether the focus-without-raise SPI is available. /// When `true`, we can activate a window without raising it or stealing /// focus/Space. -pub fn supports_focus_without_raise() -> bool { +pub(super) fn supports_focus_without_raise() -> bool { super::macos_skylight::is_focus_without_raise_available() } @@ -294,7 +294,7 @@ fn stamp_chromium_fields( /// /// `point` is in Quartz global pointer coordinates (origin top-left of main /// display, same space as the existing screenshot pipeline). -pub fn bg_click( +pub(super) fn bg_click( pid: i32, point: (f64, f64), button: BgMouseButton, @@ -387,7 +387,7 @@ pub fn bg_click( /// Best-effort lookup of the macOS frontmost-application pid via NSWorkspace. /// Returns `None` when the AppKit lookup is not available (e.g. headless tests /// or non-main-thread contexts where we don't want to assert). -pub fn frontmost_pid_macos() -> Option { +pub(super) fn frontmost_pid_macos() -> Option { use objc2::msg_send; use objc2::runtime::AnyObject; unsafe { @@ -425,7 +425,7 @@ pub fn frontmost_pid_macos() -> Option { /// /// Returns `Ok(true)` when activation succeeded, `Ok(false)` when the app /// could not be found, and `Err(_)` on AppKit FFI failures. -pub fn activate_pid_macos(pid: i32) -> BitFunResult { +pub(super) fn activate_pid_macos(pid: i32) -> BitFunResult { // Without a window_id we can't use the focus-without-raise SPI. // Fall through to the public API. activate_pid_macos_with_window(pid, None) @@ -433,7 +433,10 @@ pub fn activate_pid_macos(pid: i32) -> BitFunResult { /// Like `activate_pid_macos` but uses the focus-without-raise SPI when a /// `window_id` is provided and the SkyLight SPI is available. -pub fn activate_pid_macos_with_window(pid: i32, window_id: Option) -> BitFunResult { +pub(super) fn activate_pid_macos_with_window( + pid: i32, + window_id: Option, +) -> BitFunResult { // Try focus-without-raise first when we have a window id. if let Some(wid) = window_id { if super::macos_skylight::is_focus_without_raise_available() { @@ -489,7 +492,7 @@ pub fn activate_pid_macos_with_window(pid: i32, window_id: Option) -> BitFu /// Pixel-delta scroll inside the focused scroll container of the target /// pid's frontmost window. Positive `dy` scrolls content down (matches /// trackpad / `wheel1>0` direction). -pub fn bg_scroll(pid: i32, dx: i32, dy: i32) -> BitFunResult<()> { +pub(super) fn bg_scroll(pid: i32, dx: i32, dy: i32) -> BitFunResult<()> { info!( target: "computer_use::bg_input", "bg_scroll.enter pid={} dx={} dy={}", @@ -509,7 +512,7 @@ pub fn bg_scroll(pid: i32, dx: i32, dy: i32) -> BitFunResult<()> { /// `kCGEventKeyboardEventUnicodeString` field. This bypasses keymap /// translation entirely, so it correctly handles emoji, CJK and other /// non-Latin input without touching the system IME. -pub fn bg_type_text(pid: i32, text: &str) -> BitFunResult<()> { +pub(super) fn bg_type_text(pid: i32, text: &str) -> BitFunResult<()> { if text.is_empty() { return Ok(()); } @@ -551,7 +554,7 @@ pub fn bg_type_text(pid: i32, text: &str) -> BitFunResult<()> { /// Send a key chord (modifier+key combo) to the target pid using the /// private event source. `key` is the AX / Carbon virtual keycode; callers /// can use `keycode_for_char` for ASCII letters or pass a literal keycode. -pub fn bg_key_chord(pid: i32, modifiers: &[BgModifier], key: u16) -> BitFunResult<()> { +pub(super) fn bg_key_chord(pid: i32, modifiers: &[BgModifier], key: u16) -> BitFunResult<()> { info!( target: "computer_use::bg_input", "bg_key_chord.enter pid={} keycode={} modifiers={:?}", @@ -613,7 +616,7 @@ pub fn bg_key_chord(pid: i32, modifiers: &[BgModifier], key: u16) -> BitFunResul /// /// Uses both SkyLight `SLEventPostToPid` AND `CGEvent::post_to_pid` /// (belt+suspenders) for AppKit/Catalyst target coverage. -pub fn bg_click_chromium( +pub(super) fn bg_click_chromium( pid: i32, screen_x: f64, screen_y: f64, @@ -747,7 +750,7 @@ pub fn bg_click_chromium( /// Mouse button for drag gestures. #[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum BgDragButton { +pub(super) enum BgDragButton { Left, Right, Middle, @@ -790,7 +793,7 @@ impl BgDragButton { /// `duration_ms` is the wall-clock budget; `steps` is the number of /// intermediate `leftMouseDragged` events linearly interpolated along the /// path. Modifiers are held across the entire gesture. -pub fn bg_drag( +pub(super) fn bg_drag( pid: i32, from_x: f64, from_y: f64, @@ -883,7 +886,11 @@ pub fn bg_drag( /// sees those events. Without the envelope the path goes through /// IOHIDPostEvent so `NSApplication.sendEvent:` dispatches NSMenu key /// equivalents. -pub fn bg_key_chord_no_auth(pid: i32, modifiers: &[BgModifier], key: u16) -> BitFunResult<()> { +pub(super) fn bg_key_chord_no_auth( + pid: i32, + modifiers: &[BgModifier], + key: u16, +) -> BitFunResult<()> { info!( target: "computer_use::bg_input", "bg_key_chord_no_auth.enter pid={} keycode={} modifiers={:?}", @@ -925,7 +932,11 @@ pub fn bg_key_chord_no_auth(pid: i32, modifiers: &[BgModifier], key: u16) -> Bit } /// Right-click at `(x, y)` screen coordinates, posted to `pid` via dual-post. -pub fn bg_right_click(pid: i32, point: (f64, f64), modifiers: &[BgModifier]) -> BitFunResult<()> { +pub(super) fn bg_right_click( + pid: i32, + point: (f64, f64), + modifiers: &[BgModifier], +) -> BitFunResult<()> { let src = private_source("right_click")?; let pt = CGPoint { x: point.0, @@ -963,7 +974,11 @@ pub fn bg_right_click(pid: i32, point: (f64, f64), modifiers: &[BgModifier]) -> } /// Middle-click at `(x, y)` screen coordinates, posted to `pid` via dual-post. -pub fn bg_middle_click(pid: i32, point: (f64, f64), modifiers: &[BgModifier]) -> BitFunResult<()> { +pub(super) fn bg_middle_click( + pid: i32, + point: (f64, f64), + modifiers: &[BgModifier], +) -> BitFunResult<()> { let src = private_source("middle_click")?; let pt = CGPoint { x: point.0, @@ -1003,7 +1018,7 @@ pub fn bg_middle_click(pid: i32, point: (f64, f64), modifiers: &[BgModifier]) -> /// Parse a key spec the dispatch layer might pass us, of the form /// `"command+shift+p"` / `"return"` / `"escape"` / `"a"`. Returns the /// modifier list and the resolved keycode. -pub fn parse_key_spec(spec: &str) -> BitFunResult<(Vec, u16)> { +pub(super) fn parse_key_spec(spec: &str) -> BitFunResult<(Vec, u16)> { let mut mods = Vec::new(); let parts: Vec<&str> = spec.split('+').map(str::trim).collect(); if parts.is_empty() { @@ -1031,7 +1046,7 @@ pub fn parse_key_spec(spec: &str) -> BitFunResult<(Vec, u16)> { /// Parse the ControlHub/Codex chord shape: `["command", "shift", "p"]`, /// `["command+shift+p"]`, or `["return"]`. -pub fn parse_key_sequence(keys: &[String]) -> BitFunResult<(Vec, u16)> { +pub(super) fn parse_key_sequence(keys: &[String]) -> BitFunResult<(Vec, u16)> { if keys.is_empty() { return Err(BitFunError::tool("empty key sequence".to_string())); } @@ -1060,7 +1075,7 @@ pub fn parse_key_sequence(keys: &[String]) -> BitFunResult<(Vec, u16 } /// Map common named keys (Codex parity) to AX / Carbon keycodes. -pub fn keycode_for_named(name: &str) -> Option { +pub(super) fn keycode_for_named(name: &str) -> Option { Some(match name.to_ascii_lowercase().as_str() { "return" | "enter" => 36, "tab" => 48, @@ -1094,7 +1109,7 @@ pub fn keycode_for_named(name: &str) -> Option { /// Map a single ASCII character to the **US-keyboard** keycode. This is the /// same table Codex / enigo use; the user's actual keymap is irrelevant for /// our chord injection because we set explicit modifier flags ourselves. -pub fn keycode_for_char(c: char) -> Option { +pub(super) fn keycode_for_char(c: char) -> Option { let upper = c.to_ascii_uppercase(); Some(match upper { 'A' => 0, @@ -1186,7 +1201,7 @@ const TERMINAL_NAME_HINTS: &[&str] = &[ /// Check if the target pid is a terminal emulator by looking up its /// bundle id via `NSRunningApplication`. Returns `true` when the app is /// a known terminal emulator that may silently drop Unicode string events. -pub fn is_terminal_emulator(pid: i32) -> bool { +pub(super) fn is_terminal_emulator(pid: i32) -> bool { use objc2::msg_send; use objc2::runtime::AnyObject; let bundle_id = unsafe { @@ -1237,7 +1252,7 @@ pub fn is_terminal_emulator(pid: i32) -> bool { /// /// Only works for ASCII characters that have direct keycodes. Non-ASCII text /// (CJK, emoji) should use `bg_type_text` (Unicode string) or `paste` instead. -pub fn bg_type_text_terminal_safe(pid: i32, text: &str) -> BitFunResult<()> { +pub(super) fn bg_type_text_terminal_safe(pid: i32, text: &str) -> BitFunResult<()> { if text.is_empty() { return Ok(()); } @@ -1296,7 +1311,7 @@ pub fn bg_type_text_terminal_safe(pid: i32, text: &str) -> BitFunResult<()> { /// Type text with automatic terminal detection: routes to /// `bg_type_text_terminal_safe` when the target is a terminal emulator, /// otherwise uses the standard `bg_type_text` (Unicode string injection). -pub fn bg_type_text_auto(pid: i32, text: &str) -> BitFunResult<()> { +pub(super) fn bg_type_text_auto(pid: i32, text: &str) -> BitFunResult<()> { if is_terminal_emulator(pid) { debug!( target: "computer_use::bg_input", @@ -1330,7 +1345,7 @@ const kCGNullWindowID: u32 = 0; /// window owned by `pid`. Uses `CGWindowListCopyWindowInfo` — the same API /// `screencapture -l ` consumes. Returns `None` when no matching /// window is found. -pub fn frontmost_window_id_for_pid(pid: i32) -> Option { +pub(super) fn frontmost_window_id_for_pid(pid: i32) -> Option { use core_foundation::array::CFArray; use core_foundation::base::{CFGetTypeID, CFTypeRef, TCFType}; use core_foundation::dictionary::CFDictionary; @@ -1405,7 +1420,7 @@ const CHROMIUM_BUNDLE_KEYWORDS: &[&str] = &[ /// Returns `true` when the bundle_id indicates a Chromium-based or /// Electron-based application. These apps need the `bg_click_chromium` /// 5-event recipe for reliable background clicks. -pub fn is_chromium_electron(bundle_id: Option<&str>) -> bool { +pub(super) fn is_chromium_electron(bundle_id: Option<&str>) -> bool { if let Some(bid) = bundle_id { let lc = bid.to_ascii_lowercase(); CHROMIUM_BUNDLE_KEYWORDS.iter().any(|&kw| lc.contains(kw)) @@ -1415,7 +1430,7 @@ pub fn is_chromium_electron(bundle_id: Option<&str>) -> bool { } /// Convenience: look up the bundle_id for a pid via NSRunningApplication. -pub fn bundle_id_for_pid(pid: i32) -> Option { +pub(super) fn bundle_id_for_pid(pid: i32) -> Option { use objc2::msg_send; use objc2::runtime::AnyObject; unsafe { diff --git a/src/apps/desktop/src/computer_use/macos_list_apps.rs b/src/apps/desktop/src/computer_use/macos_list_apps.rs index 3cc38f31fd..602d283cc1 100644 --- a/src/apps/desktop/src/computer_use/macos_list_apps.rs +++ b/src/apps/desktop/src/computer_use/macos_list_apps.rs @@ -62,7 +62,7 @@ end tell return out "#; -pub fn list_running_apps(include_hidden: bool) -> BitFunResult> { +pub(super) fn list_running_apps(include_hidden: bool) -> BitFunResult> { if let Ok(guard) = CACHE.lock() { if let Some((ts, cached_hidden, ref apps)) = *guard { if cached_hidden == include_hidden && ts.elapsed() < CACHE_TTL { @@ -127,7 +127,7 @@ pub fn list_running_apps(include_hidden: bool) -> BitFunResult> { /// Drop the cached `list_running_apps` result so the next call re-probes /// `osascript`. Used when the agent has just launched / quit an app and /// needs the freshest pid set. -pub fn invalidate_cache() { +pub(super) fn invalidate_cache() { if let Ok(mut guard) = CACHE.lock() { *guard = None; } diff --git a/src/apps/desktop/src/computer_use/macos_skylight.rs b/src/apps/desktop/src/computer_use/macos_skylight.rs index be85571cbb..b3cdd2a444 100644 --- a/src/apps/desktop/src/computer_use/macos_skylight.rs +++ b/src/apps/desktop/src/computer_use/macos_skylight.rs @@ -114,7 +114,7 @@ fn find_sym(name: &[u8]) -> Option<*mut c_void> { /// # Safety /// Caller guarantees T matches the symbol's actual signature. unsafe fn as_fn(ptr: *mut c_void) -> T { - std::mem::transmute_copy::<*mut c_void, T>(&ptr) + unsafe { std::mem::transmute_copy::<*mut c_void, T>(&ptr) } } // ── Lazily-resolved handles ──────────────────────────────────────────────── @@ -180,12 +180,12 @@ fn get_process_for_pid_fn() -> Option { } /// `true` when `SLEventPostToPid` resolved. -pub fn is_available() -> bool { +pub(super) fn is_available() -> bool { post_to_pid_fn().is_some() } /// `true` when all three focus-without-raise SPIs resolved. -pub fn is_focus_without_raise_available() -> bool { +pub(super) fn is_focus_without_raise_available() -> bool { get_front_process_fn().is_some() && get_process_for_pid_fn().is_some() && post_event_record_to_fn().is_some() @@ -243,14 +243,16 @@ fn class_responds_to_selector(cls: *mut c_void, sel: *mut c_void) -> bool { /// On 64-bit: CFRuntimeBase=16, uint32=4, 4 bytes pad -> record pointer at offset 24. /// We probe offsets 24, 32, 16 for resilience across OS versions. unsafe fn extract_event_record(event_ptr: *mut c_void) -> *mut c_void { - for &offset in &[24usize, 32, 16] { - let slot = (event_ptr as *const u8).add(offset).cast::<*mut c_void>(); - let p = std::ptr::read_unaligned(slot); - if !p.is_null() { - return p; + unsafe { + for &offset in &[24usize, 32, 16] { + let slot = (event_ptr as *const u8).add(offset).cast::<*mut c_void>(); + let p = std::ptr::read_unaligned(slot); + if !p.is_null() { + return p; + } } + std::ptr::null_mut() } - std::ptr::null_mut() } // ── Public entry points ──────────────────────────────────────────────────── @@ -263,7 +265,7 @@ unsafe fn extract_event_record(event_ptr: *mut c_void) -> *mut c_void { /// Returns `true` when `SLEventPostToPid` resolved and the post was attempted. /// Returns `false` when the SPI is absent — caller falls back to /// `CGEvent::post_to_pid`. -pub fn post_to_pid(pid: i32, event_ptr: *mut c_void, attach_auth_message: bool) -> bool { +pub(super) fn post_to_pid(pid: i32, event_ptr: *mut c_void, attach_auth_message: bool) -> bool { let post_fn = match post_to_pid_fn() { Some(f) => f, None => return false, @@ -295,7 +297,7 @@ pub fn post_to_pid(pid: i32, event_ptr: *mut c_void, attach_auth_message: bool) /// Stamp a window-local `(x, y)` point onto `event_ptr` via the private /// `CGEventSetWindowLocation` SPI. Returns `true` when the SPI resolved. -pub fn set_window_location(event_ptr: *mut c_void, x: f64, y: f64) -> bool { +pub(super) fn set_window_location(event_ptr: *mut c_void, x: f64, y: f64) -> bool { match set_window_loc_fn() { Some(f) => { unsafe { f(event_ptr, x, y) }; @@ -307,7 +309,7 @@ pub fn set_window_location(event_ptr: *mut c_void, x: f64, y: f64) -> bool { /// Stamp `value` onto `event_ptr` at raw SkyLight field index `field` via /// `SLEventSetIntegerValueField`. Returns `false` when SPI absent. -pub fn set_integer_field(event_ptr: *mut c_void, field: u32, value: i64) -> bool { +pub(super) fn set_integer_field(event_ptr: *mut c_void, field: u32, value: i64) -> bool { match set_int_field_fn() { Some(f) => { unsafe { f(event_ptr, field, value) }; @@ -318,7 +320,7 @@ pub fn set_integer_field(event_ptr: *mut c_void, field: u32, value: i64) -> bool } /// Return the SkyLight main connection ID for the current process. -pub fn main_connection_id() -> Option { +pub(super) fn main_connection_id() -> Option { connection_id_fn().map(|f| unsafe { f() }) } @@ -336,7 +338,7 @@ pub fn main_connection_id() -> Option { /// `bytes[0x3c..0x3f]` = `target_wid` little-endian). /// /// Returns `true` when all SPIs resolved and both posts succeeded. -pub fn activate_without_raise(target_pid: i32, target_wid: u32) -> bool { +pub(super) fn activate_without_raise(target_pid: i32, target_wid: u32) -> bool { let post_fn = match post_event_record_to_fn() { Some(f) => f, None => return false, @@ -385,7 +387,7 @@ pub fn activate_without_raise(target_pid: i32, target_wid: u32) -> bool { /// Gets the PSN for the process that owns `window_id`. /// Uses `CGSMainConnectionID` + `SLSGetWindowOwner` + `SLSGetConnectionPSN`. /// Falls back to `GetProcessForPID(pid)` when the SkyLight path fails. -pub fn get_process_psn_for_window(window_id: u32, pid: i32, out_psn: &mut [u8; 8]) -> bool { +pub(super) fn get_process_psn_for_window(window_id: u32, pid: i32, out_psn: &mut [u8; 8]) -> bool { if let (Some(get_owner), Some(get_psn), Some(conn_id_fn)) = ( get_window_owner_fn(), get_connection_psn_fn(), @@ -416,7 +418,7 @@ pub fn get_process_psn_for_window(window_id: u32, pid: i32, out_psn: &mut [u8; 8 /// /// Returns `Ok(true)` when activation succeeded, `Ok(false)` when SPIs /// unavailable (action still ran). -pub fn with_menu_shortcut_activation( +pub(super) fn with_menu_shortcut_activation( target_pid: i32, target_wid: u32, action: impl FnOnce() -> BitFunResult<()>, diff --git a/src/apps/desktop/src/embedded_relay_host.rs b/src/apps/desktop/src/embedded_relay_host.rs index 9fa3b04bf3..1c1a6f2438 100644 --- a/src/apps/desktop/src/embedded_relay_host.rs +++ b/src/apps/desktop/src/embedded_relay_host.rs @@ -110,6 +110,9 @@ impl EmbeddedRelayHost for DesktopEmbeddedRelayHost { .layer(axum::middleware::from_fn(static_cache_headers)); app = app.fallback_service(static_app); } + app = app.layer(axum::middleware::from_fn( + bitfun_relay_service::relay_security_headers, + )); info!("Embedded relay started on 0.0.0.0:{port}"); @@ -123,12 +126,15 @@ impl EmbeddedRelayHost for DesktopEmbeddedRelayHost { let (shutdown, shutdown_rx) = tokio::sync::oneshot::channel::<()>(); let server_task = tokio::spawn(async move { - axum::serve(listener, app) - .with_graceful_shutdown(async { - let _ = shutdown_rx.await; - }) - .await - .ok(); + axum::serve( + listener, + app.into_make_service_with_connect_info::(), + ) + .with_graceful_shutdown(async { + let _ = shutdown_rx.await; + }) + .await + .ok(); }); // Keep the candidate local until readiness completes. If the start diff --git a/src/apps/desktop/src/theme.rs b/src/apps/desktop/src/theme.rs index adf8d48658..bc9ba23dc2 100644 --- a/src/apps/desktop/src/theme.rs +++ b/src/apps/desktop/src/theme.rs @@ -1074,6 +1074,7 @@ pub async fn show_main_window(app: tauri::AppHandle) -> Result<(), String> { #[cfg(test)] mod tests { + #[cfg(target_os = "windows")] use super::*; #[cfg(target_os = "windows")] diff --git a/src/apps/relay-server/README.md b/src/apps/relay-server/README.md index 3e56382f5c..5a37873b04 100644 --- a/src/apps/relay-server/README.md +++ b/src/apps/relay-server/README.md @@ -343,8 +343,16 @@ See `Caddyfile` for the Caddy equivalent. | `RELAY_PORT` | `9700` | Server listen port | | `RELAY_STATIC_DIR` | _(none)_ | Path to mobile web static files fallback SPA. When unset, no fallback static files are served. Docker Compose sets this to `/app/static`. | | `RELAY_ROOM_WEB_DIR` | `/tmp/bitfun-room-web` | Directory for per-room uploaded mobile-web files. Docker Compose uses a named volume mounted at `/app/room-web`. | -| `RELAY_ROOM_TTL` | `3600` | Room TTL in seconds (0 = no expiry) | +| `RELAY_ASSET_STORE_MAX_BYTES` | `1073741824` | Global content-addressed asset capacity (1 GiB by default). New uploads return HTTP 507 after the limit is reached; existing content remains readable. | +| `RELAY_ROOM_TTL` | `300` | Idle room TTL in seconds (0 = no expiry). Active heartbeats and commands refresh activity. | | `RELAY_DB_PATH` | _(none)_ | SQLite path for account storage. **Unset = pure relay (no login).** Set a persistent path (Compose: `/app/data/bitfun_relay.db`) to enable login, device routing, and sync. Accounts are provisioned only via `relay-admin`. | +| `RELAY_CORS_ALLOW_ORIGINS` | _(none)_ | Comma-separated browser origin allowlist, for example `https://remote.example.com`. Empty means same-origin only. `*` is rejected when account APIs are enabled. | + +When `RELAY_DB_PATH` is set, database open or migration failure is fatal: the +process exits instead of silently starting without account protection. The +`/health` response reports account capability, room/device connection counts, +pending bridge requests, and asset-store used/capacity bytes for operational +checks and capacity alerts. ## API Endpoints diff --git a/src/apps/relay-server/docker-compose.yml b/src/apps/relay-server/docker-compose.yml index 44339881b7..fe31ba805d 100644 --- a/src/apps/relay-server/docker-compose.yml +++ b/src/apps/relay-server/docker-compose.yml @@ -19,7 +19,8 @@ services: - RELAY_STATIC_DIR=/app/static # Room mobile-web assets and BitFun Pages (`pages/{user_id}/{slug}/`) share this dir. - RELAY_ROOM_WEB_DIR=/app/room-web - - RELAY_ROOM_TTL=3600 + - RELAY_ROOM_TTL=300 + - RELAY_ASSET_STORE_MAX_BYTES=1073741824 - RELAY_DB_PATH=/app/data/bitfun_relay.db volumes: - ./static:/app/static:ro diff --git a/src/apps/relay-server/src/config.rs b/src/apps/relay-server/src/config.rs index fdf446202b..08b0bbae22 100644 --- a/src/apps/relay-server/src/config.rs +++ b/src/apps/relay-server/src/config.rs @@ -12,6 +12,8 @@ pub(super) struct RelayConfig { pub static_dir: Option, /// Directory where per-room uploaded mobile-web files are stored. pub room_web_dir: String, + /// Global capacity for content-addressed room and Page assets. + pub asset_store_max_bytes: u64, pub cors_allow_origins: Vec, /// Path to the SQLite database file used for account storage. /// When None, account features are disabled (relay acts as pure relay only). @@ -22,13 +24,14 @@ impl Default for RelayConfig { fn default() -> Self { Self { listen_addr: ([0, 0, 0, 0], 9700).into(), - room_ttl_secs: 3600, + room_ttl_secs: 300, heartbeat_interval_secs: 30, heartbeat_timeout_secs: 90, static_dir: None, // Also stores published BitFun Pages under `{room_web_dir}/pages/{user_id}/{slug}/`. room_web_dir: "/tmp/bitfun-room-web".to_string(), - cors_allow_origins: vec!["*".to_string()], + asset_store_max_bytes: bitfun_relay_service::DEFAULT_DISK_ASSET_STORE_MAX_BYTES, + cors_allow_origins: Vec::new(), db_path: None, } } @@ -48,6 +51,11 @@ impl RelayConfig { if let Ok(dir) = std::env::var("RELAY_ROOM_WEB_DIR") { cfg.room_web_dir = dir; } + if let Ok(limit) = std::env::var("RELAY_ASSET_STORE_MAX_BYTES") { + if let Ok(bytes) = limit.parse::() { + cfg.asset_store_max_bytes = bytes; + } + } if let Ok(ttl) = std::env::var("RELAY_ROOM_TTL") { if let Ok(t) = ttl.parse() { cfg.room_ttl_secs = t; @@ -60,6 +68,14 @@ impl RelayConfig { cfg.db_path = Some(path); } } + if let Ok(origins) = std::env::var("RELAY_CORS_ALLOW_ORIGINS") { + cfg.cors_allow_origins = origins + .split(',') + .map(str::trim) + .filter(|origin| !origin.is_empty()) + .map(str::to_string) + .collect(); + } cfg } } diff --git a/src/apps/relay-server/src/main.rs b/src/apps/relay-server/src/main.rs index c5bbe92d1f..07fc5648dc 100644 --- a/src/apps/relay-server/src/main.rs +++ b/src/apps/relay-server/src/main.rs @@ -3,6 +3,7 @@ //! Standalone binary that runs the relay as a network service. //! Uses `DiskAssetStore` for filesystem-backed mobile-web file storage. +use anyhow::Context; use std::sync::Arc; use tracing::info; @@ -14,14 +15,20 @@ use config::RelayConfig; #[tokio::main] async fn main() -> anyhow::Result<()> { tracing_subscriber::fmt() - .with_max_level(tracing::Level::DEBUG) + .with_env_filter( + tracing_subscriber::EnvFilter::try_from_default_env() + .unwrap_or_else(|_| tracing_subscriber::EnvFilter::new("info")), + ) .init(); let cfg = RelayConfig::from_env(); info!("BitFun Relay Server v{}", env!("CARGO_PKG_VERSION")); let room_manager = RoomManager::new(); - let asset_store = Arc::new(DiskAssetStore::new(&cfg.room_web_dir)); + let asset_store = Arc::new(DiskAssetStore::new_with_max_bytes( + &cfg.room_web_dir, + cfg.asset_store_max_bytes, + )); let cleanup_rm = room_manager.clone(); let cleanup_ttl = cfg.room_ttl_secs; @@ -39,28 +46,31 @@ async fn main() -> anyhow::Result<()> { let start_time = std::time::Instant::now(); let db = if let Some(path) = &cfg.db_path { - match bitfun_relay_service::db::connect(path).await { - Ok(pool) => Some(Arc::new(pool)), - Err(e) => { - tracing::error!( - "Failed to init account database at {path}: {e}; account features disabled" - ); - None - } - } + let pool = bitfun_relay_service::db::connect(path) + .await + .with_context(|| { + format!("failed to initialize configured account database at {path}") + })?; + Some(Arc::new(pool)) } else { info!("RELAY_DB_PATH not set — account features disabled (pure relay mode)"); None }; + if db.is_some() && cfg.cors_allow_origins.iter().any(|origin| origin == "*") { + anyhow::bail!( + "RELAY_CORS_ALLOW_ORIGINS=* is not allowed when RELAY_DB_PATH enables account APIs" + ); + } let page_data_dir = std::path::PathBuf::from(&cfg.room_web_dir).join("page-data"); - let mut app = bitfun_relay_service::build_relay_router_with_page_data( + let mut app = bitfun_relay_service::build_relay_router_with_page_data_and_origins( room_manager, asset_store, start_time, db, env!("CARGO_PKG_VERSION"), Some(page_data_dir), + cfg.cors_allow_origins.clone(), ); if let Some(static_dir) = &cfg.static_dir { @@ -69,13 +79,23 @@ async fn main() -> anyhow::Result<()> { tower_http::services::ServeDir::new(static_dir).append_index_html_on_directories(true), ); } + // Re-apply after installing the optional fallback so static files receive + // the same browser hardening as relay API responses. + app = app.layer(axum::middleware::from_fn( + bitfun_relay_service::relay_security_headers, + )); info!("Room web upload dir: {}", cfg.room_web_dir); + info!("Asset store capacity: {} bytes", cfg.asset_store_max_bytes); let listener = tokio::net::TcpListener::bind(cfg.listen_addr).await?; info!("Relay server listening on {}", cfg.listen_addr); info!("WebSocket endpoint: ws://{}/ws", cfg.listen_addr); - axum::serve(listener, app).await?; + axum::serve( + listener, + app.into_make_service_with_connect_info::(), + ) + .await?; Ok(()) } diff --git a/src/apps/relay-server/static/assets/ChatPage-BFmDVI_t.js b/src/apps/relay-server/static/assets/ChatPage-BFmDVI_t.js new file mode 100644 index 0000000000..cbb1651cf7 --- /dev/null +++ b/src/apps/relay-server/static/assets/ChatPage-BFmDVI_t.js @@ -0,0 +1,39 @@ +import{g as de,j as h,R as rt,c as cn,u as Je,a as Ot,b as Uo,r as N,S as Bs,_ as $s,m as qs}from"./index-rYAMdehH.js";function Us(e,t){const n={};return(e[e.length-1]===""?[...e,""]:e).join((n.padRight?" ":"")+","+(n.padLeft===!1?"":" ")).trim()}const Hs=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,Ws=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,Vs={};function Ui(e,t){return(Vs.jsx?Ws:Hs).test(e)}const Gs=/[ \t\n\f\r]/g;function Zs(e){return typeof e=="object"?e.type==="text"?Hi(e.value):!1:Hi(e)}function Hi(e){return e.replace(Gs,"")===""}class Zt{constructor(t,n,r){this.normal=n,this.property=t,r&&(this.space=r)}}Zt.prototype.normal={};Zt.prototype.property={};Zt.prototype.space=void 0;function Ho(e,t){const n={},r={};for(const i of e)Object.assign(n,i.property),Object.assign(r,i.normal);return new Zt(n,r,t)}function Xr(e){return e.toLowerCase()}class ze{constructor(t,n){this.attribute=n,this.property=t}}ze.prototype.attribute="";ze.prototype.booleanish=!1;ze.prototype.boolean=!1;ze.prototype.commaOrSpaceSeparated=!1;ze.prototype.commaSeparated=!1;ze.prototype.defined=!1;ze.prototype.mustUseProperty=!1;ze.prototype.number=!1;ze.prototype.overloadedBoolean=!1;ze.prototype.property="";ze.prototype.spaceSeparated=!1;ze.prototype.space=void 0;let Ks=0;const X=mt(),ve=mt(),Yr=mt(),M=mt(),pe=mt(),_t=mt(),$e=mt();function mt(){return 2**++Ks}const Qr=Object.freeze(Object.defineProperty({__proto__:null,boolean:X,booleanish:ve,commaOrSpaceSeparated:$e,commaSeparated:_t,number:M,overloadedBoolean:Yr,spaceSeparated:pe},Symbol.toStringTag,{value:"Module"})),An=Object.keys(Qr);class gi extends ze{constructor(t,n,r,i){let o=-1;if(super(t,n),Wi(this,"space",i),typeof r=="number")for(;++o4&&n.slice(0,4)==="data"&&eu.test(t)){if(t.charAt(4)==="-"){const o=t.slice(5).replace(Vi,ru);r="data"+o.charAt(0).toUpperCase()+o.slice(1)}else{const o=t.slice(4);if(!Vi.test(o)){let a=o.replace(Js,nu);a.charAt(0)!=="-"&&(a="-"+a),t="data"+a}}i=gi}return new i(r,t)}function nu(e){return"-"+e.toLowerCase()}function ru(e){return e.charAt(1).toUpperCase()}const iu=Ho([Wo,Xs,Zo,Ko,Xo],"html"),mi=Ho([Wo,Ys,Zo,Ko,Xo],"svg");function au(e){return e.join(" ").trim()}var kt={},Ln,Gi;function ou(){if(Gi)return Ln;Gi=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,t=/\n/g,n=/^\s*/,r=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,i=/^:\s*/,o=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,a=/^[;\s]*/,l=/^\s+|\s+$/g,s=` +`,u="/",p="*",c="",f="comment",d="declaration";function m(S,k){if(typeof S!="string")throw new TypeError("First argument must be a string");if(!S)return[];k=k||{};var x=1,b=1;function _(P){var F=P.match(t);F&&(x+=F.length);var q=P.lastIndexOf(s);b=~q?P.length-q:b+P.length}function E(){var P={line:x,column:b};return function(F){return F.position=new g(P),A(),F}}function g(P){this.start=P,this.end={line:x,column:b},this.source=k.source}g.prototype.content=S;function T(P){var F=new Error(k.source+":"+x+":"+b+": "+P);if(F.reason=P,F.filename=k.source,F.line=x,F.column=b,F.source=S,!k.silent)throw F}function O(P){var F=P.exec(S);if(F){var q=F[0];return _(q),S=S.slice(q.length),F}}function A(){O(n)}function C(P){var F;for(P=P||[];F=R();)F!==!1&&P.push(F);return P}function R(){var P=E();if(!(u!=S.charAt(0)||p!=S.charAt(1))){for(var F=2;c!=S.charAt(F)&&(p!=S.charAt(F)||u!=S.charAt(F+1));)++F;if(F+=2,c===S.charAt(F-1))return T("End of comment missing");var q=S.slice(2,F-2);return b+=2,_(q),S=S.slice(F),b+=2,P({type:f,comment:q})}}function z(){var P=E(),F=O(r);if(F){if(R(),!O(i))return T("property missing ':'");var q=O(o),Y=P({type:d,property:w(F[0].replace(e,c)),value:q?w(q[0].replace(e,c)):c});return O(a),Y}}function U(){var P=[];C(P);for(var F;F=z();)F!==!1&&(P.push(F),C(P));return P}return A(),U()}function w(S){return S?S.replace(l,c):c}return Ln=m,Ln}var Zi;function lu(){if(Zi)return kt;Zi=1;var e=kt&&kt.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(kt,"__esModule",{value:!0}),kt.default=n;const t=e(ou());function n(r,i){let o=null;if(!r||typeof r!="string")return o;const a=(0,t.default)(r),l=typeof i=="function";return a.forEach(s=>{if(s.type!=="declaration")return;const{property:u,value:p}=s;l?i(u,p,s):p&&(o=o||{},o[u]=p)}),o}return kt}var Dt={},Ki;function su(){if(Ki)return Dt;Ki=1,Object.defineProperty(Dt,"__esModule",{value:!0}),Dt.camelCase=void 0;var e=/^--[a-zA-Z0-9_-]+$/,t=/-([a-z])/g,n=/^[^-]+$/,r=/^-(webkit|moz|ms|o|khtml)-/,i=/^-(ms)-/,o=function(u){return!u||n.test(u)||e.test(u)},a=function(u,p){return p.toUpperCase()},l=function(u,p){return"".concat(p,"-")},s=function(u,p){return p===void 0&&(p={}),o(u)?u:(u=u.toLowerCase(),p.reactCompat?u=u.replace(i,l):u=u.replace(r,l),u.replace(t,a))};return Dt.camelCase=s,Dt}var Mt,Xi;function uu(){if(Xi)return Mt;Xi=1;var e=Mt&&Mt.__importDefault||function(i){return i&&i.__esModule?i:{default:i}},t=e(lu()),n=su();function r(i,o){var a={};return!i||typeof i!="string"||(0,t.default)(i,function(l,s){l&&s&&(a[(0,n.camelCase)(l,o)]=s)}),a}return r.default=r,Mt=r,Mt}var cu=uu();const pu=de(cu),Yo=Qo("end"),bi=Qo("start");function Qo(e){return t;function t(n){const r=n&&n.position&&n.position[e]||{};if(typeof r.line=="number"&&r.line>0&&typeof r.column=="number"&&r.column>0)return{line:r.line,column:r.column,offset:typeof r.offset=="number"&&r.offset>-1?r.offset:void 0}}}function du(e){const t=bi(e),n=Yo(e);if(t&&n)return{start:t,end:n}}function Pt(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?Yi(e.position):"start"in e||"end"in e?Yi(e):"line"in e||"column"in e?Jr(e):""}function Jr(e){return Qi(e&&e.line)+":"+Qi(e&&e.column)}function Yi(e){return Jr(e&&e.start)+"-"+Jr(e&&e.end)}function Qi(e){return e&&typeof e=="number"?e:1}class Re extends Error{constructor(t,n,r){super(),typeof n=="string"&&(r=n,n=void 0);let i="",o={},a=!1;if(n&&("line"in n&&"column"in n?o={place:n}:"start"in n&&"end"in n?o={place:n}:"type"in n?o={ancestors:[n],place:n.position}:o={...n}),typeof t=="string"?i=t:!o.cause&&t&&(a=!0,i=t.message,o.cause=t),!o.ruleId&&!o.source&&typeof r=="string"){const s=r.indexOf(":");s===-1?o.ruleId=r:(o.source=r.slice(0,s),o.ruleId=r.slice(s+1))}if(!o.place&&o.ancestors&&o.ancestors){const s=o.ancestors[o.ancestors.length-1];s&&(o.place=s.position)}const l=o.place&&"start"in o.place?o.place.start:o.place;this.ancestors=o.ancestors||void 0,this.cause=o.cause||void 0,this.column=l?l.column:void 0,this.fatal=void 0,this.file="",this.message=i,this.line=l?l.line:void 0,this.name=Pt(o.place)||"1:1",this.place=o.place||void 0,this.reason=this.message,this.ruleId=o.ruleId||void 0,this.source=o.source||void 0,this.stack=a&&o.cause&&typeof o.cause.stack=="string"?o.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}Re.prototype.file="";Re.prototype.name="";Re.prototype.reason="";Re.prototype.message="";Re.prototype.stack="";Re.prototype.column=void 0;Re.prototype.line=void 0;Re.prototype.ancestors=void 0;Re.prototype.cause=void 0;Re.prototype.fatal=void 0;Re.prototype.place=void 0;Re.prototype.ruleId=void 0;Re.prototype.source=void 0;const yi={}.hasOwnProperty,fu=new Map,hu=/[A-Z]/g,gu=new Set(["table","tbody","thead","tfoot","tr"]),mu=new Set(["td","th"]),Jo="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function bu(e,t){if(!t||t.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const n=t.filePath||void 0;let r;if(t.development){if(typeof t.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");r=Eu(n,t.jsxDEV)}else{if(typeof t.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof t.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");r=_u(n,t.jsx,t.jsxs)}const i={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:r,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:n,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space==="svg"?mi:iu,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},o=el(i,e,void 0);return o&&typeof o!="string"?o:i.create(e,i.Fragment,{children:o||void 0},void 0)}function el(e,t,n){if(t.type==="element")return yu(e,t,n);if(t.type==="mdxFlowExpression"||t.type==="mdxTextExpression")return xu(e,t);if(t.type==="mdxJsxFlowElement"||t.type==="mdxJsxTextElement")return vu(e,t,n);if(t.type==="mdxjsEsm")return ku(e,t);if(t.type==="root")return wu(e,t,n);if(t.type==="text")return Su(e,t)}function yu(e,t,n){const r=e.schema;let i=r;t.tagName.toLowerCase()==="svg"&&r.space==="html"&&(i=mi,e.schema=i),e.ancestors.push(t);const o=nl(e,t.tagName,!1),a=Cu(e,t);let l=ki(e,t);return gu.has(t.tagName)&&(l=l.filter(function(s){return typeof s=="string"?!Zs(s):!0})),tl(e,a,o,t),xi(a,l),e.ancestors.pop(),e.schema=r,e.create(t,o,a,n)}function xu(e,t){if(t.data&&t.data.estree&&e.evaluater){const r=t.data.estree.body[0];return r.type,e.evaluater.evaluateExpression(r.expression)}Ht(e,t.position)}function ku(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);Ht(e,t.position)}function vu(e,t,n){const r=e.schema;let i=r;t.name==="svg"&&r.space==="html"&&(i=mi,e.schema=i),e.ancestors.push(t);const o=t.name===null?e.Fragment:nl(e,t.name,!0),a=Tu(e,t),l=ki(e,t);return tl(e,a,o,t),xi(a,l),e.ancestors.pop(),e.schema=r,e.create(t,o,a,n)}function wu(e,t,n){const r={};return xi(r,ki(e,t)),e.create(t,e.Fragment,r,n)}function Su(e,t){return t.value}function tl(e,t,n,r){typeof n!="string"&&n!==e.Fragment&&e.passNode&&(t.node=r)}function xi(e,t){if(t.length>0){const n=t.length>1?t:t[0];n&&(e.children=n)}}function _u(e,t,n){return r;function r(i,o,a,l){const u=Array.isArray(a.children)?n:t;return l?u(o,a,l):u(o,a)}}function Eu(e,t){return n;function n(r,i,o,a){const l=Array.isArray(o.children),s=bi(r);return t(i,o,a,l,{columnNumber:s?s.column-1:void 0,fileName:e,lineNumber:s?s.line:void 0},void 0)}}function Cu(e,t){const n={};let r,i;for(i in t.properties)if(i!=="children"&&yi.call(t.properties,i)){const o=Au(e,i,t.properties[i]);if(o){const[a,l]=o;e.tableCellAlignToStyle&&a==="align"&&typeof l=="string"&&mu.has(t.tagName)?r=l:n[a]=l}}if(r){const o=n.style||(n.style={});o[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=r}return n}function Tu(e,t){const n={};for(const r of t.attributes)if(r.type==="mdxJsxExpressionAttribute")if(r.data&&r.data.estree&&e.evaluater){const o=r.data.estree.body[0];o.type;const a=o.expression;a.type;const l=a.properties[0];l.type,Object.assign(n,e.evaluater.evaluateExpression(l.argument))}else Ht(e,t.position);else{const i=r.name;let o;if(r.value&&typeof r.value=="object")if(r.value.data&&r.value.data.estree&&e.evaluater){const l=r.value.data.estree.body[0];l.type,o=e.evaluater.evaluateExpression(l.expression)}else Ht(e,t.position);else o=r.value===null?!0:r.value;n[i]=o}return n}function ki(e,t){const n=[];let r=-1;const i=e.passKeys?new Map:fu;for(;++ri?0:i+t:t=t>i?i:t,n=n>0?n:0,r.length<1e4)a=Array.from(r),a.unshift(t,n),e.splice(...a);else for(n&&e.splice(t,n);o0?(qe(e,e.length,0,t),e):t}const ta={}.hasOwnProperty;function il(e){const t={};let n=-1;for(;++n13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||(n&65535)===65535||(n&65535)===65534||n>1114111?"�":String.fromCodePoint(n)}function Ze(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const De=st(/[A-Za-z]/),je=st(/[\dA-Za-z]/),Fu=st(/[#-'*+\--9=?A-Z^-~]/);function pn(e){return e!==null&&(e<32||e===127)}const ei=st(/\d/),zu=st(/[\dA-Fa-f]/),Pu=st(/[!-/:-@[-`{-~]/);function W(e){return e!==null&&e<-2}function ue(e){return e!==null&&(e<0||e===32)}function J(e){return e===-2||e===-1||e===32}const xn=st(new RegExp("\\p{P}|\\p{S}","u")),gt=st(/\s/);function st(e){return t;function t(n){return n!==null&&n>-1&&e.test(String.fromCharCode(n))}}function Nt(e){const t=[];let n=-1,r=0,i=0;for(;++n55295&&o<57344){const l=e.charCodeAt(n+1);o<56320&&l>56319&&l<57344?(a=String.fromCharCode(o,l),i=1):a="�"}else a=String.fromCharCode(o);a&&(t.push(e.slice(r,n),encodeURIComponent(a)),r=n+i+1,a=""),i&&(n+=i,i=0)}return t.join("")+e.slice(r)}function ie(e,t,n,r){const i=r?r-1:Number.POSITIVE_INFINITY;let o=0;return a;function a(s){return J(s)?(e.enter(n),l(s)):t(s)}function l(s){return J(s)&&o++a))return;const T=t.events.length;let O=T,A,C;for(;O--;)if(t.events[O][0]==="exit"&&t.events[O][1].type==="chunkFlow"){if(A){C=t.events[O][1].end;break}A=!0}for(k(r),g=T;gb;){const E=n[_];t.containerState=E[1],E[0].exit.call(t,e)}n.length=b}function x(){i.write([null]),o=void 0,i=void 0,t.containerState._closeFlow=void 0}}function Hu(e,t,n){return ie(e,e.attempt(this.parser.constructs.document,t,n),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Tt(e){if(e===null||ue(e)||gt(e))return 1;if(xn(e))return 2}function kn(e,t,n){const r=[];let i=-1;for(;++i1&&e[n][1].end.offset-e[n][1].start.offset>1?2:1;const c={...e[r][1].end},f={...e[n][1].start};ra(c,-s),ra(f,s),a={type:s>1?"strongSequence":"emphasisSequence",start:c,end:{...e[r][1].end}},l={type:s>1?"strongSequence":"emphasisSequence",start:{...e[n][1].start},end:f},o={type:s>1?"strongText":"emphasisText",start:{...e[r][1].end},end:{...e[n][1].start}},i={type:s>1?"strong":"emphasis",start:{...a.start},end:{...l.end}},e[r][1].end={...a.start},e[n][1].start={...l.end},u=[],e[r][1].end.offset-e[r][1].start.offset&&(u=Ve(u,[["enter",e[r][1],t],["exit",e[r][1],t]])),u=Ve(u,[["enter",i,t],["enter",a,t],["exit",a,t],["enter",o,t]]),u=Ve(u,kn(t.parser.constructs.insideSpan.null,e.slice(r+1,n),t)),u=Ve(u,[["exit",o,t],["enter",l,t],["exit",l,t],["exit",i,t]]),e[n][1].end.offset-e[n][1].start.offset?(p=2,u=Ve(u,[["enter",e[n][1],t],["exit",e[n][1],t]])):p=0,qe(e,r-1,n-r+3,u),n=r+u.length-p-2;break}}for(n=-1;++n0&&J(g)?ie(e,x,"linePrefix",o+1)(g):x(g)}function x(g){return g===null||W(g)?e.check(ia,w,_)(g):(e.enter("codeFlowValue"),b(g))}function b(g){return g===null||W(g)?(e.exit("codeFlowValue"),x(g)):(e.consume(g),b)}function _(g){return e.exit("codeFenced"),t(g)}function E(g,T,O){let A=0;return C;function C(F){return g.enter("lineEnding"),g.consume(F),g.exit("lineEnding"),R}function R(F){return g.enter("codeFencedFence"),J(F)?ie(g,z,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(F):z(F)}function z(F){return F===l?(g.enter("codeFencedFenceSequence"),U(F)):O(F)}function U(F){return F===l?(A++,g.consume(F),U):A>=a?(g.exit("codeFencedFenceSequence"),J(F)?ie(g,P,"whitespace")(F):P(F)):O(F)}function P(F){return F===null||W(F)?(g.exit("codeFencedFence"),T(F)):O(F)}}}function nc(e,t,n){const r=this;return i;function i(a){return a===null?n(a):(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),o)}function o(a){return r.parser.lazy[r.now().line]?n(a):t(a)}}const In={name:"codeIndented",tokenize:ic},rc={partial:!0,tokenize:ac};function ic(e,t,n){const r=this;return i;function i(u){return e.enter("codeIndented"),ie(e,o,"linePrefix",5)(u)}function o(u){const p=r.events[r.events.length-1];return p&&p[1].type==="linePrefix"&&p[2].sliceSerialize(p[1],!0).length>=4?a(u):n(u)}function a(u){return u===null?s(u):W(u)?e.attempt(rc,a,s)(u):(e.enter("codeFlowValue"),l(u))}function l(u){return u===null||W(u)?(e.exit("codeFlowValue"),a(u)):(e.consume(u),l)}function s(u){return e.exit("codeIndented"),t(u)}}function ac(e,t,n){const r=this;return i;function i(a){return r.parser.lazy[r.now().line]?n(a):W(a)?(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),i):ie(e,o,"linePrefix",5)(a)}function o(a){const l=r.events[r.events.length-1];return l&&l[1].type==="linePrefix"&&l[2].sliceSerialize(l[1],!0).length>=4?t(a):W(a)?i(a):n(a)}}const oc={name:"codeText",previous:sc,resolve:lc,tokenize:uc};function lc(e){let t=e.length-4,n=3,r,i;if((e[n][1].type==="lineEnding"||e[n][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(r=n;++r=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return tthis.left.length?this.right.slice(this.right.length-r+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-r+this.left.length).reverse())}splice(t,n,r){const i=n||0;this.setCursor(Math.trunc(t));const o=this.right.splice(this.right.length-i,Number.POSITIVE_INFINITY);return r&&Ft(this.left,r),o.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),Ft(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),Ft(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t=4?t(a):e.interrupt(r.parser.constructs.flow,n,t)(a)}}function cl(e,t,n,r,i,o,a,l,s){const u=s||Number.POSITIVE_INFINITY;let p=0;return c;function c(k){return k===60?(e.enter(r),e.enter(i),e.enter(o),e.consume(k),e.exit(o),f):k===null||k===32||k===41||pn(k)?n(k):(e.enter(r),e.enter(a),e.enter(l),e.enter("chunkString",{contentType:"string"}),w(k))}function f(k){return k===62?(e.enter(o),e.consume(k),e.exit(o),e.exit(i),e.exit(r),t):(e.enter(l),e.enter("chunkString",{contentType:"string"}),d(k))}function d(k){return k===62?(e.exit("chunkString"),e.exit(l),f(k)):k===null||k===60||W(k)?n(k):(e.consume(k),k===92?m:d)}function m(k){return k===60||k===62||k===92?(e.consume(k),d):d(k)}function w(k){return!p&&(k===null||k===41||ue(k))?(e.exit("chunkString"),e.exit(l),e.exit(a),e.exit(r),t(k)):p999||d===null||d===91||d===93&&!s||d===94&&!l&&"_hiddenFootnoteSupport"in a.parser.constructs?n(d):d===93?(e.exit(o),e.enter(i),e.consume(d),e.exit(i),e.exit(r),t):W(d)?(e.enter("lineEnding"),e.consume(d),e.exit("lineEnding"),p):(e.enter("chunkString",{contentType:"string"}),c(d))}function c(d){return d===null||d===91||d===93||W(d)||l++>999?(e.exit("chunkString"),p(d)):(e.consume(d),s||(s=!J(d)),d===92?f:c)}function f(d){return d===91||d===92||d===93?(e.consume(d),l++,c):c(d)}}function dl(e,t,n,r,i,o){let a;return l;function l(f){return f===34||f===39||f===40?(e.enter(r),e.enter(i),e.consume(f),e.exit(i),a=f===40?41:f,s):n(f)}function s(f){return f===a?(e.enter(i),e.consume(f),e.exit(i),e.exit(r),t):(e.enter(o),u(f))}function u(f){return f===a?(e.exit(o),s(a)):f===null?n(f):W(f)?(e.enter("lineEnding"),e.consume(f),e.exit("lineEnding"),ie(e,u,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),p(f))}function p(f){return f===a||f===null||W(f)?(e.exit("chunkString"),u(f)):(e.consume(f),f===92?c:p)}function c(f){return f===a||f===92?(e.consume(f),p):p(f)}}function Bt(e,t){let n;return r;function r(i){return W(i)?(e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),n=!0,r):J(i)?ie(e,r,n?"linePrefix":"lineSuffix")(i):t(i)}}const bc={name:"definition",tokenize:xc},yc={partial:!0,tokenize:kc};function xc(e,t,n){const r=this;let i;return o;function o(d){return e.enter("definition"),a(d)}function a(d){return pl.call(r,e,l,n,"definitionLabel","definitionLabelMarker","definitionLabelString")(d)}function l(d){return i=Ze(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)),d===58?(e.enter("definitionMarker"),e.consume(d),e.exit("definitionMarker"),s):n(d)}function s(d){return ue(d)?Bt(e,u)(d):u(d)}function u(d){return cl(e,p,n,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(d)}function p(d){return e.attempt(yc,c,c)(d)}function c(d){return J(d)?ie(e,f,"whitespace")(d):f(d)}function f(d){return d===null||W(d)?(e.exit("definition"),r.parser.defined.push(i),t(d)):n(d)}}function kc(e,t,n){return r;function r(l){return ue(l)?Bt(e,i)(l):n(l)}function i(l){return dl(e,o,n,"definitionTitle","definitionTitleMarker","definitionTitleString")(l)}function o(l){return J(l)?ie(e,a,"whitespace")(l):a(l)}function a(l){return l===null||W(l)?t(l):n(l)}}const vc={name:"hardBreakEscape",tokenize:wc};function wc(e,t,n){return r;function r(o){return e.enter("hardBreakEscape"),e.consume(o),i}function i(o){return W(o)?(e.exit("hardBreakEscape"),t(o)):n(o)}}const Sc={name:"headingAtx",resolve:_c,tokenize:Ec};function _c(e,t){let n=e.length-2,r=3,i,o;return e[r][1].type==="whitespace"&&(r+=2),n-2>r&&e[n][1].type==="whitespace"&&(n-=2),e[n][1].type==="atxHeadingSequence"&&(r===n-1||n-4>r&&e[n-2][1].type==="whitespace")&&(n-=r+1===n?2:4),n>r&&(i={type:"atxHeadingText",start:e[r][1].start,end:e[n][1].end},o={type:"chunkText",start:e[r][1].start,end:e[n][1].end,contentType:"text"},qe(e,r,n-r+1,[["enter",i,t],["enter",o,t],["exit",o,t],["exit",i,t]])),e}function Ec(e,t,n){let r=0;return i;function i(p){return e.enter("atxHeading"),o(p)}function o(p){return e.enter("atxHeadingSequence"),a(p)}function a(p){return p===35&&r++<6?(e.consume(p),a):p===null||ue(p)?(e.exit("atxHeadingSequence"),l(p)):n(p)}function l(p){return p===35?(e.enter("atxHeadingSequence"),s(p)):p===null||W(p)?(e.exit("atxHeading"),t(p)):J(p)?ie(e,l,"whitespace")(p):(e.enter("atxHeadingText"),u(p))}function s(p){return p===35?(e.consume(p),s):(e.exit("atxHeadingSequence"),l(p))}function u(p){return p===null||p===35||ue(p)?(e.exit("atxHeadingText"),l(p)):(e.consume(p),u)}}const Cc=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],oa=["pre","script","style","textarea"],Tc={concrete:!0,name:"htmlFlow",resolveTo:Nc,tokenize:Ic},Ac={partial:!0,tokenize:Rc},Lc={partial:!0,tokenize:jc};function Nc(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function Ic(e,t,n){const r=this;let i,o,a,l,s;return u;function u(y){return p(y)}function p(y){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(y),c}function c(y){return y===33?(e.consume(y),f):y===47?(e.consume(y),o=!0,w):y===63?(e.consume(y),i=3,r.interrupt?t:v):De(y)?(e.consume(y),a=String.fromCharCode(y),S):n(y)}function f(y){return y===45?(e.consume(y),i=2,d):y===91?(e.consume(y),i=5,l=0,m):De(y)?(e.consume(y),i=4,r.interrupt?t:v):n(y)}function d(y){return y===45?(e.consume(y),r.interrupt?t:v):n(y)}function m(y){const Z="CDATA[";return y===Z.charCodeAt(l++)?(e.consume(y),l===Z.length?r.interrupt?t:z:m):n(y)}function w(y){return De(y)?(e.consume(y),a=String.fromCharCode(y),S):n(y)}function S(y){if(y===null||y===47||y===62||ue(y)){const Z=y===47,re=a.toLowerCase();return!Z&&!o&&oa.includes(re)?(i=1,r.interrupt?t(y):z(y)):Cc.includes(a.toLowerCase())?(i=6,Z?(e.consume(y),k):r.interrupt?t(y):z(y)):(i=7,r.interrupt&&!r.parser.lazy[r.now().line]?n(y):o?x(y):b(y))}return y===45||je(y)?(e.consume(y),a+=String.fromCharCode(y),S):n(y)}function k(y){return y===62?(e.consume(y),r.interrupt?t:z):n(y)}function x(y){return J(y)?(e.consume(y),x):C(y)}function b(y){return y===47?(e.consume(y),C):y===58||y===95||De(y)?(e.consume(y),_):J(y)?(e.consume(y),b):C(y)}function _(y){return y===45||y===46||y===58||y===95||je(y)?(e.consume(y),_):E(y)}function E(y){return y===61?(e.consume(y),g):J(y)?(e.consume(y),E):b(y)}function g(y){return y===null||y===60||y===61||y===62||y===96?n(y):y===34||y===39?(e.consume(y),s=y,T):J(y)?(e.consume(y),g):O(y)}function T(y){return y===s?(e.consume(y),s=null,A):y===null||W(y)?n(y):(e.consume(y),T)}function O(y){return y===null||y===34||y===39||y===47||y===60||y===61||y===62||y===96||ue(y)?E(y):(e.consume(y),O)}function A(y){return y===47||y===62||J(y)?b(y):n(y)}function C(y){return y===62?(e.consume(y),R):n(y)}function R(y){return y===null||W(y)?z(y):J(y)?(e.consume(y),R):n(y)}function z(y){return y===45&&i===2?(e.consume(y),q):y===60&&i===1?(e.consume(y),Y):y===62&&i===4?(e.consume(y),K):y===63&&i===3?(e.consume(y),v):y===93&&i===5?(e.consume(y),ae):W(y)&&(i===6||i===7)?(e.exit("htmlFlowData"),e.check(Ac,V,U)(y)):y===null||W(y)?(e.exit("htmlFlowData"),U(y)):(e.consume(y),z)}function U(y){return e.check(Lc,P,V)(y)}function P(y){return e.enter("lineEnding"),e.consume(y),e.exit("lineEnding"),F}function F(y){return y===null||W(y)?U(y):(e.enter("htmlFlowData"),z(y))}function q(y){return y===45?(e.consume(y),v):z(y)}function Y(y){return y===47?(e.consume(y),a="",$):z(y)}function $(y){if(y===62){const Z=a.toLowerCase();return oa.includes(Z)?(e.consume(y),K):z(y)}return De(y)&&a.length<8?(e.consume(y),a+=String.fromCharCode(y),$):z(y)}function ae(y){return y===93?(e.consume(y),v):z(y)}function v(y){return y===62?(e.consume(y),K):y===45&&i===2?(e.consume(y),v):z(y)}function K(y){return y===null||W(y)?(e.exit("htmlFlowData"),V(y)):(e.consume(y),K)}function V(y){return e.exit("htmlFlow"),t(y)}}function jc(e,t,n){const r=this;return i;function i(a){return W(a)?(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),o):n(a)}function o(a){return r.parser.lazy[r.now().line]?n(a):t(a)}}function Rc(e,t,n){return r;function r(i){return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),e.attempt(Kt,t,n)}}const Oc={name:"htmlText",tokenize:Dc};function Dc(e,t,n){const r=this;let i,o,a;return l;function l(v){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(v),s}function s(v){return v===33?(e.consume(v),u):v===47?(e.consume(v),E):v===63?(e.consume(v),b):De(v)?(e.consume(v),O):n(v)}function u(v){return v===45?(e.consume(v),p):v===91?(e.consume(v),o=0,m):De(v)?(e.consume(v),x):n(v)}function p(v){return v===45?(e.consume(v),d):n(v)}function c(v){return v===null?n(v):v===45?(e.consume(v),f):W(v)?(a=c,Y(v)):(e.consume(v),c)}function f(v){return v===45?(e.consume(v),d):c(v)}function d(v){return v===62?q(v):v===45?f(v):c(v)}function m(v){const K="CDATA[";return v===K.charCodeAt(o++)?(e.consume(v),o===K.length?w:m):n(v)}function w(v){return v===null?n(v):v===93?(e.consume(v),S):W(v)?(a=w,Y(v)):(e.consume(v),w)}function S(v){return v===93?(e.consume(v),k):w(v)}function k(v){return v===62?q(v):v===93?(e.consume(v),k):w(v)}function x(v){return v===null||v===62?q(v):W(v)?(a=x,Y(v)):(e.consume(v),x)}function b(v){return v===null?n(v):v===63?(e.consume(v),_):W(v)?(a=b,Y(v)):(e.consume(v),b)}function _(v){return v===62?q(v):b(v)}function E(v){return De(v)?(e.consume(v),g):n(v)}function g(v){return v===45||je(v)?(e.consume(v),g):T(v)}function T(v){return W(v)?(a=T,Y(v)):J(v)?(e.consume(v),T):q(v)}function O(v){return v===45||je(v)?(e.consume(v),O):v===47||v===62||ue(v)?A(v):n(v)}function A(v){return v===47?(e.consume(v),q):v===58||v===95||De(v)?(e.consume(v),C):W(v)?(a=A,Y(v)):J(v)?(e.consume(v),A):q(v)}function C(v){return v===45||v===46||v===58||v===95||je(v)?(e.consume(v),C):R(v)}function R(v){return v===61?(e.consume(v),z):W(v)?(a=R,Y(v)):J(v)?(e.consume(v),R):A(v)}function z(v){return v===null||v===60||v===61||v===62||v===96?n(v):v===34||v===39?(e.consume(v),i=v,U):W(v)?(a=z,Y(v)):J(v)?(e.consume(v),z):(e.consume(v),P)}function U(v){return v===i?(e.consume(v),i=void 0,F):v===null?n(v):W(v)?(a=U,Y(v)):(e.consume(v),U)}function P(v){return v===null||v===34||v===39||v===60||v===61||v===96?n(v):v===47||v===62||ue(v)?A(v):(e.consume(v),P)}function F(v){return v===47||v===62||ue(v)?A(v):n(v)}function q(v){return v===62?(e.consume(v),e.exit("htmlTextData"),e.exit("htmlText"),t):n(v)}function Y(v){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(v),e.exit("lineEnding"),$}function $(v){return J(v)?ie(e,ae,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(v):ae(v)}function ae(v){return e.enter("htmlTextData"),a(v)}}const Si={name:"labelEnd",resolveAll:Pc,resolveTo:Bc,tokenize:$c},Mc={tokenize:qc},Fc={tokenize:Uc},zc={tokenize:Hc};function Pc(e){let t=-1;const n=[];for(;++t=3&&(u===null||W(u))?(e.exit("thematicBreak"),t(u)):n(u)}function s(u){return u===i?(e.consume(u),r++,s):(e.exit("thematicBreakSequence"),J(u)?ie(e,l,"whitespace")(u):l(u))}}const Fe={continuation:{tokenize:ep},exit:np,name:"list",tokenize:Jc},Yc={partial:!0,tokenize:rp},Qc={partial:!0,tokenize:tp};function Jc(e,t,n){const r=this,i=r.events[r.events.length-1];let o=i&&i[1].type==="linePrefix"?i[2].sliceSerialize(i[1],!0).length:0,a=0;return l;function l(d){const m=r.containerState.type||(d===42||d===43||d===45?"listUnordered":"listOrdered");if(m==="listUnordered"?!r.containerState.marker||d===r.containerState.marker:ei(d)){if(r.containerState.type||(r.containerState.type=m,e.enter(m,{_container:!0})),m==="listUnordered")return e.enter("listItemPrefix"),d===42||d===45?e.check(ln,n,u)(d):u(d);if(!r.interrupt||d===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),s(d)}return n(d)}function s(d){return ei(d)&&++a<10?(e.consume(d),s):(!r.interrupt||a<2)&&(r.containerState.marker?d===r.containerState.marker:d===41||d===46)?(e.exit("listItemValue"),u(d)):n(d)}function u(d){return e.enter("listItemMarker"),e.consume(d),e.exit("listItemMarker"),r.containerState.marker=r.containerState.marker||d,e.check(Kt,r.interrupt?n:p,e.attempt(Yc,f,c))}function p(d){return r.containerState.initialBlankLine=!0,o++,f(d)}function c(d){return J(d)?(e.enter("listItemPrefixWhitespace"),e.consume(d),e.exit("listItemPrefixWhitespace"),f):n(d)}function f(d){return r.containerState.size=o+r.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(d)}}function ep(e,t,n){const r=this;return r.containerState._closeFlow=void 0,e.check(Kt,i,o);function i(l){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,ie(e,t,"listItemIndent",r.containerState.size+1)(l)}function o(l){return r.containerState.furtherBlankLines||!J(l)?(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,a(l)):(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(Qc,t,a)(l))}function a(l){return r.containerState._closeFlow=!0,r.interrupt=void 0,ie(e,e.attempt(Fe,t,n),"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(l)}}function tp(e,t,n){const r=this;return ie(e,i,"listItemIndent",r.containerState.size+1);function i(o){const a=r.events[r.events.length-1];return a&&a[1].type==="listItemIndent"&&a[2].sliceSerialize(a[1],!0).length===r.containerState.size?t(o):n(o)}}function np(e){e.exit(this.containerState.type)}function rp(e,t,n){const r=this;return ie(e,i,"listItemPrefixWhitespace",r.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function i(o){const a=r.events[r.events.length-1];return!J(o)&&a&&a[1].type==="listItemPrefixWhitespace"?t(o):n(o)}}const la={name:"setextUnderline",resolveTo:ip,tokenize:ap};function ip(e,t){let n=e.length,r,i,o;for(;n--;)if(e[n][0]==="enter"){if(e[n][1].type==="content"){r=n;break}e[n][1].type==="paragraph"&&(i=n)}else e[n][1].type==="content"&&e.splice(n,1),!o&&e[n][1].type==="definition"&&(o=n);const a={type:"setextHeading",start:{...e[r][1].start},end:{...e[e.length-1][1].end}};return e[i][1].type="setextHeadingText",o?(e.splice(i,0,["enter",a,t]),e.splice(o+1,0,["exit",e[r][1],t]),e[r][1].end={...e[o][1].end}):e[r][1]=a,e.push(["exit",a,t]),e}function ap(e,t,n){const r=this;let i;return o;function o(u){let p=r.events.length,c;for(;p--;)if(r.events[p][1].type!=="lineEnding"&&r.events[p][1].type!=="linePrefix"&&r.events[p][1].type!=="content"){c=r.events[p][1].type==="paragraph";break}return!r.parser.lazy[r.now().line]&&(r.interrupt||c)?(e.enter("setextHeadingLine"),i=u,a(u)):n(u)}function a(u){return e.enter("setextHeadingLineSequence"),l(u)}function l(u){return u===i?(e.consume(u),l):(e.exit("setextHeadingLineSequence"),J(u)?ie(e,s,"lineSuffix")(u):s(u))}function s(u){return u===null||W(u)?(e.exit("setextHeadingLine"),t(u)):n(u)}}const op={tokenize:lp};function lp(e){const t=this,n=e.attempt(Kt,r,e.attempt(this.parser.constructs.flowInitial,i,ie(e,e.attempt(this.parser.constructs.flow,i,e.attempt(dc,i)),"linePrefix")));return n;function r(o){if(o===null){e.consume(o);return}return e.enter("lineEndingBlank"),e.consume(o),e.exit("lineEndingBlank"),t.currentConstruct=void 0,n}function i(o){if(o===null){e.consume(o);return}return e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),t.currentConstruct=void 0,n}}const sp={resolveAll:hl()},up=fl("string"),cp=fl("text");function fl(e){return{resolveAll:hl(e==="text"?pp:void 0),tokenize:t};function t(n){const r=this,i=this.parser.constructs[e],o=n.attempt(i,a,l);return a;function a(p){return u(p)?o(p):l(p)}function l(p){if(p===null){n.consume(p);return}return n.enter("data"),n.consume(p),s}function s(p){return u(p)?(n.exit("data"),o(p)):(n.consume(p),s)}function u(p){if(p===null)return!0;const c=i[p];let f=-1;if(c)for(;++f-1){const l=a[0];typeof l=="string"?a[0]=l.slice(r):a.shift()}o>0&&a.push(e[i].slice(0,o))}return a}function _p(e,t){let n=-1;const r=[];let i;for(;++n0){const xe=B.tokenStack[B.tokenStack.length-1];(xe[1]||ua).call(B,void 0,xe[0])}for(D.position={start:ot(L.length>0?L[0][1].start:{line:1,column:1,offset:0}),end:ot(L.length>0?L[L.length-2][1].end:{line:1,column:1,offset:0})},te=-1;++te0&&(r.className=["language-"+i[0]]);let o={type:"element",tagName:"code",properties:r,children:[{type:"text",value:n}]};return t.meta&&(o.data={meta:t.meta}),e.patch(t,o),o=e.applyData(t,o),o={type:"element",tagName:"pre",properties:{},children:[o]},e.patch(t,o),o}function zp(e,t){const n={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function Pp(e,t){const n={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function Bp(e,t){const n=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",r=String(t.identifier).toUpperCase(),i=Nt(r.toLowerCase()),o=e.footnoteOrder.indexOf(r);let a,l=e.footnoteCounts.get(r);l===void 0?(l=0,e.footnoteOrder.push(r),a=e.footnoteOrder.length):a=o+1,l+=1,e.footnoteCounts.set(r,l);const s={type:"element",tagName:"a",properties:{href:"#"+n+"fn-"+i,id:n+"fnref-"+i+(l>1?"-"+l:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(a)}]};e.patch(t,s);const u={type:"element",tagName:"sup",properties:{},children:[s]};return e.patch(t,u),e.applyData(t,u)}function $p(e,t){const n={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function qp(e,t){if(e.options.allowDangerousHtml){const n={type:"raw",value:t.value};return e.patch(t,n),e.applyData(t,n)}}function bl(e,t){const n=t.referenceType;let r="]";if(n==="collapsed"?r+="[]":n==="full"&&(r+="["+(t.label||t.identifier)+"]"),t.type==="imageReference")return[{type:"text",value:"!["+t.alt+r}];const i=e.all(t),o=i[0];o&&o.type==="text"?o.value="["+o.value:i.unshift({type:"text",value:"["});const a=i[i.length-1];return a&&a.type==="text"?a.value+=r:i.push({type:"text",value:r}),i}function Up(e,t){const n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return bl(e,t);const i={src:Nt(r.url||""),alt:t.alt};r.title!==null&&r.title!==void 0&&(i.title=r.title);const o={type:"element",tagName:"img",properties:i,children:[]};return e.patch(t,o),e.applyData(t,o)}function Hp(e,t){const n={src:Nt(t.url)};t.alt!==null&&t.alt!==void 0&&(n.alt=t.alt),t.title!==null&&t.title!==void 0&&(n.title=t.title);const r={type:"element",tagName:"img",properties:n,children:[]};return e.patch(t,r),e.applyData(t,r)}function Wp(e,t){const n={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,n);const r={type:"element",tagName:"code",properties:{},children:[n]};return e.patch(t,r),e.applyData(t,r)}function Vp(e,t){const n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return bl(e,t);const i={href:Nt(r.url||"")};r.title!==null&&r.title!==void 0&&(i.title=r.title);const o={type:"element",tagName:"a",properties:i,children:e.all(t)};return e.patch(t,o),e.applyData(t,o)}function Gp(e,t){const n={href:Nt(t.url)};t.title!==null&&t.title!==void 0&&(n.title=t.title);const r={type:"element",tagName:"a",properties:n,children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function Zp(e,t,n){const r=e.all(t),i=n?Kp(n):yl(t),o={},a=[];if(typeof t.checked=="boolean"){const p=r[0];let c;p&&p.type==="element"&&p.tagName==="p"?c=p:(c={type:"element",tagName:"p",properties:{},children:[]},r.unshift(c)),c.children.length>0&&c.children.unshift({type:"text",value:" "}),c.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),o.className=["task-list-item"]}let l=-1;for(;++l1}function Xp(e,t){const n={},r=e.all(t);let i=-1;for(typeof t.start=="number"&&t.start!==1&&(n.start=t.start);++i0){const a={type:"element",tagName:"tbody",properties:{},children:e.wrap(n,!0)},l=bi(t.children[1]),s=Yo(t.children[t.children.length-1]);l&&s&&(a.position={start:l,end:s}),i.push(a)}const o={type:"element",tagName:"table",properties:{},children:e.wrap(i,!0)};return e.patch(t,o),e.applyData(t,o)}function td(e,t,n){const r=n?n.children:void 0,o=(r?r.indexOf(t):1)===0?"th":"td",a=n&&n.type==="table"?n.align:void 0,l=a?a.length:t.children.length;let s=-1;const u=[];for(;++s0,!0),r[0]),i=r.index+r[0].length,r=n.exec(t);return o.push(da(t.slice(i),i>0,!1)),o.join("")}function da(e,t,n){let r=0,i=e.length;if(t){let o=e.codePointAt(r);for(;o===ca||o===pa;)r++,o=e.codePointAt(r)}if(n){let o=e.codePointAt(i-1);for(;o===ca||o===pa;)i--,o=e.codePointAt(i-1)}return i>r?e.slice(r,i):""}function id(e,t){const n={type:"text",value:rd(String(t.value))};return e.patch(t,n),e.applyData(t,n)}function ad(e,t){const n={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(t,n),e.applyData(t,n)}const od={blockquote:Dp,break:Mp,code:Fp,delete:zp,emphasis:Pp,footnoteReference:Bp,heading:$p,html:qp,imageReference:Up,image:Hp,inlineCode:Wp,linkReference:Vp,link:Gp,listItem:Zp,list:Xp,paragraph:Yp,root:Qp,strong:Jp,table:ed,tableCell:nd,tableRow:td,text:id,thematicBreak:ad,toml:en,yaml:en,definition:en,footnoteDefinition:en};function en(){}const xl=-1,vn=0,$t=1,dn=2,_i=3,Ei=4,Ci=5,Ti=6,kl=7,vl=8,fa=typeof self=="object"?self:globalThis,ld=(e,t)=>{const n=(i,o)=>(e.set(o,i),i),r=i=>{if(e.has(i))return e.get(i);const[o,a]=t[i];switch(o){case vn:case xl:return n(a,i);case $t:{const l=n([],i);for(const s of a)l.push(r(s));return l}case dn:{const l=n({},i);for(const[s,u]of a)l[r(s)]=r(u);return l}case _i:return n(new Date(a),i);case Ei:{const{source:l,flags:s}=a;return n(new RegExp(l,s),i)}case Ci:{const l=n(new Map,i);for(const[s,u]of a)l.set(r(s),r(u));return l}case Ti:{const l=n(new Set,i);for(const s of a)l.add(r(s));return l}case kl:{const{name:l,message:s}=a;return n(new fa[l](s),i)}case vl:return n(BigInt(a),i);case"BigInt":return n(Object(BigInt(a)),i);case"ArrayBuffer":return n(new Uint8Array(a).buffer,a);case"DataView":{const{buffer:l}=new Uint8Array(a);return n(new DataView(l),a)}}return n(new fa[o](a),i)};return r},ha=e=>ld(new Map,e)(0),vt="",{toString:sd}={},{keys:ud}=Object,zt=e=>{const t=typeof e;if(t!=="object"||!e)return[vn,t];const n=sd.call(e).slice(8,-1);switch(n){case"Array":return[$t,vt];case"Object":return[dn,vt];case"Date":return[_i,vt];case"RegExp":return[Ei,vt];case"Map":return[Ci,vt];case"Set":return[Ti,vt];case"DataView":return[$t,n]}return n.includes("Array")?[$t,n]:n.includes("Error")?[kl,n]:[dn,n]},tn=([e,t])=>e===vn&&(t==="function"||t==="symbol"),cd=(e,t,n,r)=>{const i=(a,l)=>{const s=r.push(a)-1;return n.set(l,s),s},o=a=>{if(n.has(a))return n.get(a);let[l,s]=zt(a);switch(l){case vn:{let p=a;switch(s){case"bigint":l=vl,p=a.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+s);p=null;break;case"undefined":return i([xl],a)}return i([l,p],a)}case $t:{if(s){let f=a;return s==="DataView"?f=new Uint8Array(a.buffer):s==="ArrayBuffer"&&(f=new Uint8Array(a)),i([s,[...f]],a)}const p=[],c=i([l,p],a);for(const f of a)p.push(o(f));return c}case dn:{if(s)switch(s){case"BigInt":return i([s,a.toString()],a);case"Boolean":case"Number":case"String":return i([s,a.valueOf()],a)}if(t&&"toJSON"in a)return o(a.toJSON());const p=[],c=i([l,p],a);for(const f of ud(a))(e||!tn(zt(a[f])))&&p.push([o(f),o(a[f])]);return c}case _i:return i([l,a.toISOString()],a);case Ei:{const{source:p,flags:c}=a;return i([l,{source:p,flags:c}],a)}case Ci:{const p=[],c=i([l,p],a);for(const[f,d]of a)(e||!(tn(zt(f))||tn(zt(d))))&&p.push([o(f),o(d)]);return c}case Ti:{const p=[],c=i([l,p],a);for(const f of a)(e||!tn(zt(f)))&&p.push(o(f));return c}}const{message:u}=a;return i([l,{name:s,message:u}],a)};return o},ga=(e,{json:t,lossy:n}={})=>{const r=[];return cd(!(t||n),!!t,new Map,r)(e),r},fn=typeof structuredClone=="function"?(e,t)=>t&&("json"in t||"lossy"in t)?ha(ga(e,t)):structuredClone(e):(e,t)=>ha(ga(e,t));function pd(e,t){const n=[{type:"text",value:"↩"}];return t>1&&n.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(t)}]}),n}function dd(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")}function fd(e){const t=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",n=e.options.footnoteBackContent||pd,r=e.options.footnoteBackLabel||dd,i=e.options.footnoteLabel||"Footnotes",o=e.options.footnoteLabelTagName||"h2",a=e.options.footnoteLabelProperties||{className:["sr-only"]},l=[];let s=-1;for(;++s0&&m.push({type:"text",value:" "});let x=typeof n=="string"?n:n(s,d);typeof x=="string"&&(x={type:"text",value:x}),m.push({type:"element",tagName:"a",properties:{href:"#"+t+"fnref-"+f+(d>1?"-"+d:""),dataFootnoteBackref:"",ariaLabel:typeof r=="string"?r:r(s,d),className:["data-footnote-backref"]},children:Array.isArray(x)?x:[x]})}const S=p[p.length-1];if(S&&S.type==="element"&&S.tagName==="p"){const x=S.children[S.children.length-1];x&&x.type==="text"?x.value+=" ":S.children.push({type:"text",value:" "}),S.children.push(...m)}else p.push(...m);const k={type:"element",tagName:"li",properties:{id:t+"fn-"+f},children:e.wrap(p,!0)};e.patch(u,k),l.push(k)}if(l.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:o,properties:{...fn(a),id:"footnote-label"},children:[{type:"text",value:i}]},{type:"text",value:` +`},{type:"element",tagName:"ol",properties:{},children:e.wrap(l,!0)},{type:"text",value:` +`}]}}const wn=(function(e){if(e==null)return bd;if(typeof e=="function")return Sn(e);if(typeof e=="object")return Array.isArray(e)?hd(e):gd(e);if(typeof e=="string")return md(e);throw new Error("Expected function, string, or object as test")});function hd(e){const t=[];let n=-1;for(;++n":""))+")"})}return f;function f(){let d=wl,m,w,S;if((!t||o(s,u,p[p.length-1]||void 0))&&(d=vd(n(s,p)),d[0]===ni))return d;if("children"in s&&s.children){const k=s;if(k.children&&d[0]!==kd)for(w=(r?k.children.length:-1)+a,S=p.concat(k);w>-1&&w0&&n.push({type:"text",value:` +`}),n}function ma(e){let t=0,n=e.charCodeAt(t);for(;n===9||n===32;)t++,n=e.charCodeAt(t);return e.slice(t)}function ba(e,t){const n=Sd(e,t),r=n.one(e,void 0),i=fd(n),o=Array.isArray(r)?{type:"root",children:r}:r||{type:"root",children:[]};return i&&o.children.push({type:"text",value:` +`},i),o}function Ad(e,t){return e&&"run"in e?async function(n,r){const i=ba(n,{file:r,...t});await e.run(i,r)}:function(n,r){return ba(n,{file:r,...e||t})}}function ya(e){if(e)throw e}var Rn,xa;function Ld(){if(xa)return Rn;xa=1;var e=Object.prototype.hasOwnProperty,t=Object.prototype.toString,n=Object.defineProperty,r=Object.getOwnPropertyDescriptor,i=function(u){return typeof Array.isArray=="function"?Array.isArray(u):t.call(u)==="[object Array]"},o=function(u){if(!u||t.call(u)!=="[object Object]")return!1;var p=e.call(u,"constructor"),c=u.constructor&&u.constructor.prototype&&e.call(u.constructor.prototype,"isPrototypeOf");if(u.constructor&&!p&&!c)return!1;var f;for(f in u);return typeof f>"u"||e.call(u,f)},a=function(u,p){n&&p.name==="__proto__"?n(u,p.name,{enumerable:!0,configurable:!0,value:p.newValue,writable:!0}):u[p.name]=p.newValue},l=function(u,p){if(p==="__proto__")if(e.call(u,p)){if(r)return r(u,p).value}else return;return u[p]};return Rn=function s(){var u,p,c,f,d,m,w=arguments[0],S=1,k=arguments.length,x=!1;for(typeof w=="boolean"&&(x=w,w=arguments[1]||{},S=2),(w==null||typeof w!="object"&&typeof w!="function")&&(w={});Sa.length;let s;l&&a.push(i);try{s=e.apply(this,a)}catch(u){const p=u;if(l&&n)throw p;return i(p)}l||(s&&s.then&&typeof s.then=="function"?s.then(o,i):s instanceof Error?i(s):o(s))}function i(a,...l){n||(n=!0,t(a,...l))}function o(a){i(null,a)}}const Qe={basename:Rd,dirname:Od,extname:Dd,join:Md,sep:"/"};function Rd(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');Xt(e);let n=0,r=-1,i=e.length,o;if(t===void 0||t.length===0||t.length>e.length){for(;i--;)if(e.codePointAt(i)===47){if(o){n=i+1;break}}else r<0&&(o=!0,r=i+1);return r<0?"":e.slice(n,r)}if(t===e)return"";let a=-1,l=t.length-1;for(;i--;)if(e.codePointAt(i)===47){if(o){n=i+1;break}}else a<0&&(o=!0,a=i+1),l>-1&&(e.codePointAt(i)===t.codePointAt(l--)?l<0&&(r=i):(l=-1,r=a));return n===r?r=a:r<0&&(r=e.length),e.slice(n,r)}function Od(e){if(Xt(e),e.length===0)return".";let t=-1,n=e.length,r;for(;--n;)if(e.codePointAt(n)===47){if(r){t=n;break}}else r||(r=!0);return t<0?e.codePointAt(0)===47?"/":".":t===1&&e.codePointAt(0)===47?"//":e.slice(0,t)}function Dd(e){Xt(e);let t=e.length,n=-1,r=0,i=-1,o=0,a;for(;t--;){const l=e.codePointAt(t);if(l===47){if(a){r=t+1;break}continue}n<0&&(a=!0,n=t+1),l===46?i<0?i=t:o!==1&&(o=1):i>-1&&(o=-1)}return i<0||n<0||o===0||o===1&&i===n-1&&i===r+1?"":e.slice(i,n)}function Md(...e){let t=-1,n;for(;++t0&&e.codePointAt(e.length-1)===47&&(n+="/"),t?"/"+n:n}function zd(e,t){let n="",r=0,i=-1,o=0,a=-1,l,s;for(;++a<=e.length;){if(a2){if(s=n.lastIndexOf("/"),s!==n.length-1){s<0?(n="",r=0):(n=n.slice(0,s),r=n.length-1-n.lastIndexOf("/")),i=a,o=0;continue}}else if(n.length>0){n="",r=0,i=a,o=0;continue}}t&&(n=n.length>0?n+"/..":"..",r=2)}else n.length>0?n+="/"+e.slice(i+1,a):n=e.slice(i+1,a),r=a-i-1;i=a,o=0}else l===46&&o>-1?o++:o=-1}return n}function Xt(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const Pd={cwd:Bd};function Bd(){return"/"}function ai(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function $d(e){if(typeof e=="string")e=new URL(e);else if(!ai(e)){const t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if(e.protocol!=="file:"){const t=new TypeError("The URL must be of scheme file");throw t.code="ERR_INVALID_URL_SCHEME",t}return qd(e)}function qd(e){if(e.hostname!==""){const r=new TypeError('File URL host must be "localhost" or empty on darwin');throw r.code="ERR_INVALID_FILE_URL_HOST",r}const t=e.pathname;let n=-1;for(;++n0){let[d,...m]=p;const w=r[f][1];ii(w)&&ii(d)&&(d=On(!0,w,d)),r[f]=[u,d,...m]}}}}const Vd=new Li().freeze();function zn(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function Pn(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function Bn(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function va(e){if(!ii(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function wa(e,t,n){if(!n)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function nn(e){return Gd(e)?e:new _l(e)}function Gd(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function Zd(e){return typeof e=="string"||Kd(e)}function Kd(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const Xd="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",Sa=[],_a={allowDangerousHtml:!0},Yd=/^(https?|ircs?|mailto|xmpp)$/i,Qd=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"className",id:"remove-classname"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function Jd(e){const t=ef(e),n=tf(e);return nf(t.runSync(t.parse(n),n),e)}function ef(e){const t=e.rehypePlugins||Sa,n=e.remarkPlugins||Sa,r=e.remarkRehypeOptions?{...e.remarkRehypeOptions,..._a}:_a;return Vd().use(Op).use(n).use(Ad,r).use(t)}function tf(e){const t=e.children||"",n=new _l;return typeof t=="string"&&(n.value=t),n}function nf(e,t){const n=t.allowedElements,r=t.allowElement,i=t.components,o=t.disallowedElements,a=t.skipHtml,l=t.unwrapDisallowed,s=t.urlTransform||rf;for(const p of Qd)Object.hasOwn(t,p.from)&&(""+p.from+(p.to?"use `"+p.to+"` instead":"remove it")+Xd+p.id,void 0);return Ai(e,u),bu(e,{Fragment:h.Fragment,components:i,ignoreInvalidStyle:!0,jsx:h.jsx,jsxs:h.jsxs,passKeys:!0,passNode:!0});function u(p,c,f){if(p.type==="raw"&&f&&typeof c=="number")return a?f.children.splice(c,1):f.children[c]={type:"text",value:p.value},c;if(p.type==="element"){let d;for(d in Nn)if(Object.hasOwn(Nn,d)&&Object.hasOwn(p.properties,d)){const m=p.properties[d],w=Nn[d];(w===null||w.includes(p.tagName))&&(p.properties[d]=s(String(m||""),d,p))}}if(p.type==="element"){let d=n?!n.includes(p.tagName):o?o.includes(p.tagName):!1;if(!d&&r&&typeof c=="number"&&(d=!r(p,c,f)),d&&f&&typeof c=="number")return l&&p.children?f.children.splice(c,1,...p.children):f.children.splice(c,1),c}}}function rf(e){const t=e.indexOf(":"),n=e.indexOf("?"),r=e.indexOf("#"),i=e.indexOf("/");return t===-1||i!==-1&&t>i||n!==-1&&t>n||r!==-1&&t>r||Yd.test(e.slice(0,t))?e:""}function Ea(e,t){const n=String(e);if(typeof t!="string")throw new TypeError("Expected character");let r=0,i=n.indexOf(t);for(;i!==-1;)r++,i=n.indexOf(t,i+t.length);return r}function af(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function of(e,t,n){const i=wn((n||{}).ignore||[]),o=lf(t);let a=-1;for(;++a0?{type:"text",value:g}:void 0),g===!1?f.lastIndex=_+1:(m!==_&&x.push({type:"text",value:u.value.slice(m,_)}),Array.isArray(g)?x.push(...g):g&&x.push(g),m=_+b[0].length,k=!0),!f.global)break;b=f.exec(u.value)}return k?(m?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let n=t[0],r=n.indexOf(")");const i=Ea(e,"(");let o=Ea(e,")");for(;r!==-1&&i>o;)e+=n.slice(0,r+1),n=n.slice(r+1),r=n.indexOf(")"),o++;return[e,n]}function El(e,t){const n=e.input.charCodeAt(e.index-1);return(e.index===0||gt(n)||xn(n))&&(!t||n!==47)}Cl.peek=Nf;function wf(){this.buffer()}function Sf(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function _f(){this.buffer()}function Ef(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function Cf(e){const t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=Ze(this.sliceSerialize(e)).toLowerCase(),n.label=t}function Tf(e){this.exit(e)}function Af(e){const t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=Ze(this.sliceSerialize(e)).toLowerCase(),n.label=t}function Lf(e){this.exit(e)}function Nf(){return"["}function Cl(e,t,n,r){const i=n.createTracker(r);let o=i.move("[^");const a=n.enter("footnoteReference"),l=n.enter("reference");return o+=i.move(n.safe(n.associationId(e),{after:"]",before:o})),l(),a(),o+=i.move("]"),o}function If(){return{enter:{gfmFootnoteCallString:wf,gfmFootnoteCall:Sf,gfmFootnoteDefinitionLabelString:_f,gfmFootnoteDefinition:Ef},exit:{gfmFootnoteCallString:Cf,gfmFootnoteCall:Tf,gfmFootnoteDefinitionLabelString:Af,gfmFootnoteDefinition:Lf}}}function jf(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:n,footnoteReference:Cl},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function n(r,i,o,a){const l=o.createTracker(a);let s=l.move("[^");const u=o.enter("footnoteDefinition"),p=o.enter("label");return s+=l.move(o.safe(o.associationId(r),{before:s,after:"]"})),p(),s+=l.move("]:"),r.children&&r.children.length>0&&(l.shift(4),s+=l.move((t?` +`:" ")+o.indentLines(o.containerFlow(r,l.current()),t?Tl:Rf))),u(),s}}function Rf(e,t,n){return t===0?e:Tl(e,t,n)}function Tl(e,t,n){return(n?"":" ")+e}const Of=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];Al.peek=Pf;function Df(){return{canContainEols:["delete"],enter:{strikethrough:Ff},exit:{strikethrough:zf}}}function Mf(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:Of}],handlers:{delete:Al}}}function Ff(e){this.enter({type:"delete",children:[]},e)}function zf(e){this.exit(e)}function Al(e,t,n,r){const i=n.createTracker(r),o=n.enter("strikethrough");let a=i.move("~~");return a+=n.containerPhrasing(e,{...i.current(),before:a,after:"~"}),a+=i.move("~~"),o(),a}function Pf(){return"~"}function Bf(e){return e.length}function $f(e,t){const n=t||{},r=(n.align||[]).concat(),i=n.stringLength||Bf,o=[],a=[],l=[],s=[];let u=0,p=-1;for(;++pu&&(u=e[p].length);++ks[k])&&(s[k]=b)}w.push(x)}a[p]=w,l[p]=S}let c=-1;if(typeof r=="object"&&"length"in r)for(;++cs[c]&&(s[c]=x),d[c]=x),f[c]=b}a.splice(1,0,f),l.splice(1,0,d),p=-1;const m=[];for(;++p "),o.shift(2);const a=n.indentLines(n.containerFlow(e,o.current()),Hf);return i(),a}function Hf(e,t,n){return">"+(n?"":" ")+e}function Wf(e,t){return Ta(e,t.inConstruct,!0)&&!Ta(e,t.notInConstruct,!1)}function Ta(e,t,n){if(typeof t=="string"&&(t=[t]),!t||t.length===0)return n;let r=-1;for(;++ra&&(a=o):o=1,i=r+t.length,r=n.indexOf(t,i);return a}function Gf(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function Zf(e){const t=e.options.fence||"`";if(t!=="`"&&t!=="~")throw new Error("Cannot serialize code with `"+t+"` for `options.fence`, expected `` ` `` or `~`");return t}function Kf(e,t,n,r){const i=Zf(n),o=e.value||"",a=i==="`"?"GraveAccent":"Tilde";if(Gf(e,n)){const c=n.enter("codeIndented"),f=n.indentLines(o,Xf);return c(),f}const l=n.createTracker(r),s=i.repeat(Math.max(Vf(o,i)+1,3)),u=n.enter("codeFenced");let p=l.move(s);if(e.lang){const c=n.enter(`codeFencedLang${a}`);p+=l.move(n.safe(e.lang,{before:p,after:" ",encode:["`"],...l.current()})),c()}if(e.lang&&e.meta){const c=n.enter(`codeFencedMeta${a}`);p+=l.move(" "),p+=l.move(n.safe(e.meta,{before:p,after:` +`,encode:["`"],...l.current()})),c()}return p+=l.move(` +`),o&&(p+=l.move(o+` +`)),p+=l.move(s),u(),p}function Xf(e,t,n){return(n?"":" ")+e}function Ni(e){const t=e.options.quote||'"';if(t!=='"'&&t!=="'")throw new Error("Cannot serialize title with `"+t+"` for `options.quote`, expected `\"`, or `'`");return t}function Yf(e,t,n,r){const i=Ni(n),o=i==='"'?"Quote":"Apostrophe",a=n.enter("definition");let l=n.enter("label");const s=n.createTracker(r);let u=s.move("[");return u+=s.move(n.safe(n.associationId(e),{before:u,after:"]",...s.current()})),u+=s.move("]: "),l(),!e.url||/[\0- \u007F]/.test(e.url)?(l=n.enter("destinationLiteral"),u+=s.move("<"),u+=s.move(n.safe(e.url,{before:u,after:">",...s.current()})),u+=s.move(">")):(l=n.enter("destinationRaw"),u+=s.move(n.safe(e.url,{before:u,after:e.title?" ":` +`,...s.current()}))),l(),e.title&&(l=n.enter(`title${o}`),u+=s.move(" "+i),u+=s.move(n.safe(e.title,{before:u,after:i,...s.current()})),u+=s.move(i),l()),a(),u}function Qf(e){const t=e.options.emphasis||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize emphasis with `"+t+"` for `options.emphasis`, expected `*`, or `_`");return t}function Wt(e){return"&#x"+e.toString(16).toUpperCase()+";"}function hn(e,t,n){const r=Tt(e),i=Tt(t);return r===void 0?i===void 0?n==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:i===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:r===1?i===void 0?{inside:!1,outside:!1}:i===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:i===void 0?{inside:!1,outside:!1}:i===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}Ll.peek=Jf;function Ll(e,t,n,r){const i=Qf(n),o=n.enter("emphasis"),a=n.createTracker(r),l=a.move(i);let s=a.move(n.containerPhrasing(e,{after:i,before:l,...a.current()}));const u=s.charCodeAt(0),p=hn(r.before.charCodeAt(r.before.length-1),u,i);p.inside&&(s=Wt(u)+s.slice(1));const c=s.charCodeAt(s.length-1),f=hn(r.after.charCodeAt(0),c,i);f.inside&&(s=s.slice(0,-1)+Wt(c));const d=a.move(i);return o(),n.attentionEncodeSurroundingInfo={after:f.outside,before:p.outside},l+s+d}function Jf(e,t,n){return n.options.emphasis||"*"}function eh(e,t){let n=!1;return Ai(e,function(r){if("value"in r&&/\r?\n|\r/.test(r.value)||r.type==="break")return n=!0,ni}),!!((!e.depth||e.depth<3)&&vi(e)&&(t.options.setext||n))}function th(e,t,n,r){const i=Math.max(Math.min(6,e.depth||1),1),o=n.createTracker(r);if(eh(e,n)){const p=n.enter("headingSetext"),c=n.enter("phrasing"),f=n.containerPhrasing(e,{...o.current(),before:` +`,after:` +`});return c(),p(),f+` +`+(i===1?"=":"-").repeat(f.length-(Math.max(f.lastIndexOf("\r"),f.lastIndexOf(` +`))+1))}const a="#".repeat(i),l=n.enter("headingAtx"),s=n.enter("phrasing");o.move(a+" ");let u=n.containerPhrasing(e,{before:"# ",after:` +`,...o.current()});return/^[\t ]/.test(u)&&(u=Wt(u.charCodeAt(0))+u.slice(1)),u=u?a+" "+u:a,n.options.closeAtx&&(u+=" "+a),s(),l(),u}Nl.peek=nh;function Nl(e){return e.value||""}function nh(){return"<"}Il.peek=rh;function Il(e,t,n,r){const i=Ni(n),o=i==='"'?"Quote":"Apostrophe",a=n.enter("image");let l=n.enter("label");const s=n.createTracker(r);let u=s.move("![");return u+=s.move(n.safe(e.alt,{before:u,after:"]",...s.current()})),u+=s.move("]("),l(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(l=n.enter("destinationLiteral"),u+=s.move("<"),u+=s.move(n.safe(e.url,{before:u,after:">",...s.current()})),u+=s.move(">")):(l=n.enter("destinationRaw"),u+=s.move(n.safe(e.url,{before:u,after:e.title?" ":")",...s.current()}))),l(),e.title&&(l=n.enter(`title${o}`),u+=s.move(" "+i),u+=s.move(n.safe(e.title,{before:u,after:i,...s.current()})),u+=s.move(i),l()),u+=s.move(")"),a(),u}function rh(){return"!"}jl.peek=ih;function jl(e,t,n,r){const i=e.referenceType,o=n.enter("imageReference");let a=n.enter("label");const l=n.createTracker(r);let s=l.move("![");const u=n.safe(e.alt,{before:s,after:"]",...l.current()});s+=l.move(u+"]["),a();const p=n.stack;n.stack=[],a=n.enter("reference");const c=n.safe(n.associationId(e),{before:s,after:"]",...l.current()});return a(),n.stack=p,o(),i==="full"||!u||u!==c?s+=l.move(c+"]"):i==="shortcut"?s=s.slice(0,-1):s+=l.move("]"),s}function ih(){return"!"}Rl.peek=ah;function Rl(e,t,n){let r=e.value||"",i="`",o=-1;for(;new RegExp("(^|[^`])"+i+"([^`]|$)").test(r);)i+="`";for(/[^ \r\n]/.test(r)&&(/^[ \r\n]/.test(r)&&/[ \r\n]$/.test(r)||/^`|`$/.test(r))&&(r=" "+r+" ");++o\u007F]/.test(e.url))}Dl.peek=oh;function Dl(e,t,n,r){const i=Ni(n),o=i==='"'?"Quote":"Apostrophe",a=n.createTracker(r);let l,s;if(Ol(e,n)){const p=n.stack;n.stack=[],l=n.enter("autolink");let c=a.move("<");return c+=a.move(n.containerPhrasing(e,{before:c,after:">",...a.current()})),c+=a.move(">"),l(),n.stack=p,c}l=n.enter("link"),s=n.enter("label");let u=a.move("[");return u+=a.move(n.containerPhrasing(e,{before:u,after:"](",...a.current()})),u+=a.move("]("),s(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(s=n.enter("destinationLiteral"),u+=a.move("<"),u+=a.move(n.safe(e.url,{before:u,after:">",...a.current()})),u+=a.move(">")):(s=n.enter("destinationRaw"),u+=a.move(n.safe(e.url,{before:u,after:e.title?" ":")",...a.current()}))),s(),e.title&&(s=n.enter(`title${o}`),u+=a.move(" "+i),u+=a.move(n.safe(e.title,{before:u,after:i,...a.current()})),u+=a.move(i),s()),u+=a.move(")"),l(),u}function oh(e,t,n){return Ol(e,n)?"<":"["}Ml.peek=lh;function Ml(e,t,n,r){const i=e.referenceType,o=n.enter("linkReference");let a=n.enter("label");const l=n.createTracker(r);let s=l.move("[");const u=n.containerPhrasing(e,{before:s,after:"]",...l.current()});s+=l.move(u+"]["),a();const p=n.stack;n.stack=[],a=n.enter("reference");const c=n.safe(n.associationId(e),{before:s,after:"]",...l.current()});return a(),n.stack=p,o(),i==="full"||!u||u!==c?s+=l.move(c+"]"):i==="shortcut"?s=s.slice(0,-1):s+=l.move("]"),s}function lh(){return"["}function Ii(e){const t=e.options.bullet||"*";if(t!=="*"&&t!=="+"&&t!=="-")throw new Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function sh(e){const t=Ii(e),n=e.options.bulletOther;if(!n)return t==="*"?"-":"*";if(n!=="*"&&n!=="+"&&n!=="-")throw new Error("Cannot serialize items with `"+n+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(n===t)throw new Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+n+"`) to be different");return n}function uh(e){const t=e.options.bulletOrdered||".";if(t!=="."&&t!==")")throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}function Fl(e){const t=e.options.rule||"*";if(t!=="*"&&t!=="-"&&t!=="_")throw new Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}function ch(e,t,n,r){const i=n.enter("list"),o=n.bulletCurrent;let a=e.ordered?uh(n):Ii(n);const l=e.ordered?a==="."?")":".":sh(n);let s=t&&n.bulletLastUsed?a===n.bulletLastUsed:!1;if(!e.ordered){const p=e.children?e.children[0]:void 0;if((a==="*"||a==="-")&&p&&(!p.children||!p.children[0])&&n.stack[n.stack.length-1]==="list"&&n.stack[n.stack.length-2]==="listItem"&&n.stack[n.stack.length-3]==="list"&&n.stack[n.stack.length-4]==="listItem"&&n.indexStack[n.indexStack.length-1]===0&&n.indexStack[n.indexStack.length-2]===0&&n.indexStack[n.indexStack.length-3]===0&&(s=!0),Fl(n)===a&&p){let c=-1;for(;++c-1?t.start:1)+(n.options.incrementListMarker===!1?0:t.children.indexOf(e))+o);let a=o.length+1;(i==="tab"||i==="mixed"&&(t&&t.type==="list"&&t.spread||e.spread))&&(a=Math.ceil(a/4)*4);const l=n.createTracker(r);l.move(o+" ".repeat(a-o.length)),l.shift(a);const s=n.enter("listItem"),u=n.indentLines(n.containerFlow(e,l.current()),p);return s(),u;function p(c,f,d){return f?(d?"":" ".repeat(a))+c:(d?o:o+" ".repeat(a-o.length))+c}}function fh(e,t,n,r){const i=n.enter("paragraph"),o=n.enter("phrasing"),a=n.containerPhrasing(e,r);return o(),i(),a}const hh=wn(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function gh(e,t,n,r){return(e.children.some(function(a){return hh(a)})?n.containerPhrasing:n.containerFlow).call(n,e,r)}function mh(e){const t=e.options.strong||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}zl.peek=bh;function zl(e,t,n,r){const i=mh(n),o=n.enter("strong"),a=n.createTracker(r),l=a.move(i+i);let s=a.move(n.containerPhrasing(e,{after:i,before:l,...a.current()}));const u=s.charCodeAt(0),p=hn(r.before.charCodeAt(r.before.length-1),u,i);p.inside&&(s=Wt(u)+s.slice(1));const c=s.charCodeAt(s.length-1),f=hn(r.after.charCodeAt(0),c,i);f.inside&&(s=s.slice(0,-1)+Wt(c));const d=a.move(i+i);return o(),n.attentionEncodeSurroundingInfo={after:f.outside,before:p.outside},l+s+d}function bh(e,t,n){return n.options.strong||"*"}function yh(e,t,n,r){return n.safe(e.value,r)}function xh(e){const t=e.options.ruleRepetition||3;if(t<3)throw new Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}function kh(e,t,n){const r=(Fl(n)+(n.options.ruleSpaces?" ":"")).repeat(xh(n));return n.options.ruleSpaces?r.slice(0,-1):r}const Pl={blockquote:Uf,break:Aa,code:Kf,definition:Yf,emphasis:Ll,hardBreak:Aa,heading:th,html:Nl,image:Il,imageReference:jl,inlineCode:Rl,link:Dl,linkReference:Ml,list:ch,listItem:dh,paragraph:fh,root:gh,strong:zl,text:yh,thematicBreak:kh};function vh(){return{enter:{table:wh,tableData:La,tableHeader:La,tableRow:_h},exit:{codeText:Eh,table:Sh,tableData:Hn,tableHeader:Hn,tableRow:Hn}}}function wh(e){const t=e._align;this.enter({type:"table",align:t.map(function(n){return n==="none"?null:n}),children:[]},e),this.data.inTable=!0}function Sh(e){this.exit(e),this.data.inTable=void 0}function _h(e){this.enter({type:"tableRow",children:[]},e)}function Hn(e){this.exit(e)}function La(e){this.enter({type:"tableCell",children:[]},e)}function Eh(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,Ch));const n=this.stack[this.stack.length-1];n.type,n.value=t,this.exit(e)}function Ch(e,t){return t==="|"?t:e}function Th(e){const t=e||{},n=t.tableCellPadding,r=t.tablePipeAlign,i=t.stringLength,o=n?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:` +`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:f,table:a,tableCell:s,tableRow:l}};function a(d,m,w,S){return u(p(d,w,S),d.align)}function l(d,m,w,S){const k=c(d,w,S),x=u([k]);return x.slice(0,x.indexOf(` +`))}function s(d,m,w,S){const k=w.enter("tableCell"),x=w.enter("phrasing"),b=w.containerPhrasing(d,{...S,before:o,after:o});return x(),k(),b}function u(d,m){return $f(d,{align:m,alignDelimiters:r,padding:n,stringLength:i})}function p(d,m,w){const S=d.children;let k=-1;const x=[],b=m.enter("table");for(;++k0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}const Wh={tokenize:Jh,partial:!0};function Vh(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:Xh,continuation:{tokenize:Yh},exit:Qh}},text:{91:{name:"gfmFootnoteCall",tokenize:Kh},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:Gh,resolveTo:Zh}}}}function Gh(e,t,n){const r=this;let i=r.events.length;const o=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let a;for(;i--;){const s=r.events[i][1];if(s.type==="labelImage"){a=s;break}if(s.type==="gfmFootnoteCall"||s.type==="labelLink"||s.type==="label"||s.type==="image"||s.type==="link")break}return l;function l(s){if(!a||!a._balanced)return n(s);const u=Ze(r.sliceSerialize({start:a.end,end:r.now()}));return u.codePointAt(0)!==94||!o.includes(u.slice(1))?n(s):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(s),e.exit("gfmFootnoteCallLabelMarker"),t(s))}}function Zh(e,t){let n=e.length;for(;n--;)if(e[n][1].type==="labelImage"&&e[n][0]==="enter"){e[n][1];break}e[n+1][1].type="data",e[n+3][1].type="gfmFootnoteCallLabelMarker";const r={type:"gfmFootnoteCall",start:Object.assign({},e[n+3][1].start),end:Object.assign({},e[e.length-1][1].end)},i={type:"gfmFootnoteCallMarker",start:Object.assign({},e[n+3][1].end),end:Object.assign({},e[n+3][1].end)};i.end.column++,i.end.offset++,i.end._bufferIndex++;const o={type:"gfmFootnoteCallString",start:Object.assign({},i.end),end:Object.assign({},e[e.length-1][1].start)},a={type:"chunkString",contentType:"string",start:Object.assign({},o.start),end:Object.assign({},o.end)},l=[e[n+1],e[n+2],["enter",r,t],e[n+3],e[n+4],["enter",i,t],["exit",i,t],["enter",o,t],["enter",a,t],["exit",a,t],["exit",o,t],e[e.length-2],e[e.length-1],["exit",r,t]];return e.splice(n,e.length-n+1,...l),e}function Kh(e,t,n){const r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let o=0,a;return l;function l(c){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(c),e.exit("gfmFootnoteCallLabelMarker"),s}function s(c){return c!==94?n(c):(e.enter("gfmFootnoteCallMarker"),e.consume(c),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",u)}function u(c){if(o>999||c===93&&!a||c===null||c===91||ue(c))return n(c);if(c===93){e.exit("chunkString");const f=e.exit("gfmFootnoteCallString");return i.includes(Ze(r.sliceSerialize(f)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(c),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):n(c)}return ue(c)||(a=!0),o++,e.consume(c),c===92?p:u}function p(c){return c===91||c===92||c===93?(e.consume(c),o++,u):u(c)}}function Xh(e,t,n){const r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let o,a=0,l;return s;function s(m){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(m),e.exit("gfmFootnoteDefinitionLabelMarker"),u}function u(m){return m===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(m),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",p):n(m)}function p(m){if(a>999||m===93&&!l||m===null||m===91||ue(m))return n(m);if(m===93){e.exit("chunkString");const w=e.exit("gfmFootnoteDefinitionLabelString");return o=Ze(r.sliceSerialize(w)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(m),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),f}return ue(m)||(l=!0),a++,e.consume(m),m===92?c:p}function c(m){return m===91||m===92||m===93?(e.consume(m),a++,p):p(m)}function f(m){return m===58?(e.enter("definitionMarker"),e.consume(m),e.exit("definitionMarker"),i.includes(o)||i.push(o),ie(e,d,"gfmFootnoteDefinitionWhitespace")):n(m)}function d(m){return t(m)}}function Yh(e,t,n){return e.check(Kt,t,e.attempt(Wh,t,n))}function Qh(e){e.exit("gfmFootnoteDefinition")}function Jh(e,t,n){const r=this;return ie(e,i,"gfmFootnoteDefinitionIndent",5);function i(o){const a=r.events[r.events.length-1];return a&&a[1].type==="gfmFootnoteDefinitionIndent"&&a[2].sliceSerialize(a[1],!0).length===4?t(o):n(o)}}function eg(e){let n=(e||{}).singleTilde;const r={name:"strikethrough",tokenize:o,resolveAll:i};return n==null&&(n=!0),{text:{126:r},insideSpan:{null:[r]},attentionMarkers:{null:[126]}};function i(a,l){let s=-1;for(;++s1?s(m):(a.consume(m),c++,d);if(c<2&&!n)return s(m);const S=a.exit("strikethroughSequenceTemporary"),k=Tt(m);return S._open=!k||k===2&&!!w,S._close=!w||w===2&&!!k,l(m)}}}class tg{constructor(){this.map=[]}add(t,n,r){ng(this,t,n,r)}consume(t){if(this.map.sort(function(o,a){return o[0]-a[0]}),this.map.length===0)return;let n=this.map.length;const r=[];for(;n>0;)n-=1,r.push(t.slice(this.map[n][0]+this.map[n][1]),this.map[n][2]),t.length=this.map[n][0];r.push(t.slice()),t.length=0;let i=r.pop();for(;i;){for(const o of i)t.push(o);i=r.pop()}this.map.length=0}}function ng(e,t,n,r){let i=0;if(!(n===0&&r.length===0)){for(;i-1;){const P=r.events[R][1].type;if(P==="lineEnding"||P==="linePrefix")R--;else break}const z=R>-1?r.events[R][1].type:null,U=z==="tableHead"||z==="tableRow"?g:s;return U===g&&r.parser.lazy[r.now().line]?n(C):U(C)}function s(C){return e.enter("tableHead"),e.enter("tableRow"),u(C)}function u(C){return C===124||(a=!0,o+=1),p(C)}function p(C){return C===null?n(C):W(C)?o>1?(o=0,r.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(C),e.exit("lineEnding"),d):n(C):J(C)?ie(e,p,"whitespace")(C):(o+=1,a&&(a=!1,i+=1),C===124?(e.enter("tableCellDivider"),e.consume(C),e.exit("tableCellDivider"),a=!0,p):(e.enter("data"),c(C)))}function c(C){return C===null||C===124||ue(C)?(e.exit("data"),p(C)):(e.consume(C),C===92?f:c)}function f(C){return C===92||C===124?(e.consume(C),c):c(C)}function d(C){return r.interrupt=!1,r.parser.lazy[r.now().line]?n(C):(e.enter("tableDelimiterRow"),a=!1,J(C)?ie(e,m,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(C):m(C))}function m(C){return C===45||C===58?S(C):C===124?(a=!0,e.enter("tableCellDivider"),e.consume(C),e.exit("tableCellDivider"),w):E(C)}function w(C){return J(C)?ie(e,S,"whitespace")(C):S(C)}function S(C){return C===58?(o+=1,a=!0,e.enter("tableDelimiterMarker"),e.consume(C),e.exit("tableDelimiterMarker"),k):C===45?(o+=1,k(C)):C===null||W(C)?_(C):E(C)}function k(C){return C===45?(e.enter("tableDelimiterFiller"),x(C)):E(C)}function x(C){return C===45?(e.consume(C),x):C===58?(a=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(C),e.exit("tableDelimiterMarker"),b):(e.exit("tableDelimiterFiller"),b(C))}function b(C){return J(C)?ie(e,_,"whitespace")(C):_(C)}function _(C){return C===124?m(C):C===null||W(C)?!a||i!==o?E(C):(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(C)):E(C)}function E(C){return n(C)}function g(C){return e.enter("tableRow"),T(C)}function T(C){return C===124?(e.enter("tableCellDivider"),e.consume(C),e.exit("tableCellDivider"),T):C===null||W(C)?(e.exit("tableRow"),t(C)):J(C)?ie(e,T,"whitespace")(C):(e.enter("data"),O(C))}function O(C){return C===null||C===124||ue(C)?(e.exit("data"),T(C)):(e.consume(C),C===92?A:O)}function A(C){return C===92||C===124?(e.consume(C),O):O(C)}}function og(e,t){let n=-1,r=!0,i=0,o=[0,0,0,0],a=[0,0,0,0],l=!1,s=0,u,p,c;const f=new tg;for(;++nn[2]+1){const m=n[2]+1,w=n[3]-n[2]-1;e.add(m,w,[])}}e.add(n[3]+1,0,[["exit",c,t]])}return i!==void 0&&(o.end=Object.assign({},wt(t.events,i)),e.add(i,0,[["exit",o,t]]),o=void 0),o}function Ia(e,t,n,r,i){const o=[],a=wt(t.events,n);i&&(i.end=Object.assign({},a),o.push(["exit",i,t])),r.end=Object.assign({},a),o.push(["exit",r,t]),e.add(n+1,0,o)}function wt(e,t){const n=e[t],r=n[0]==="enter"?"start":"end";return n[1][r]}const lg={name:"tasklistCheck",tokenize:ug};function sg(){return{text:{91:lg}}}function ug(e,t,n){const r=this;return i;function i(s){return r.previous!==null||!r._gfmTasklistFirstContentOfListItem?n(s):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(s),e.exit("taskListCheckMarker"),o)}function o(s){return ue(s)?(e.enter("taskListCheckValueUnchecked"),e.consume(s),e.exit("taskListCheckValueUnchecked"),a):s===88||s===120?(e.enter("taskListCheckValueChecked"),e.consume(s),e.exit("taskListCheckValueChecked"),a):n(s)}function a(s){return s===93?(e.enter("taskListCheckMarker"),e.consume(s),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),l):n(s)}function l(s){return W(s)?t(s):J(s)?e.check({tokenize:cg},t,n)(s):n(s)}}function cg(e,t,n){return ie(e,r,"whitespace");function r(i){return i===null?n(i):t(i)}}function pg(e){return il([Mh(),Vh(),eg(e),ig(),sg()])}const dg={};function fg(e){const t=this,n=e||dg,r=t.data(),i=r.micromarkExtensions||(r.micromarkExtensions=[]),o=r.fromMarkdownExtensions||(r.fromMarkdownExtensions=[]),a=r.toMarkdownExtensions||(r.toMarkdownExtensions=[]);i.push(pg(n)),o.push(jh()),a.push(Rh(n))}function hg(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function gg(e,t){if(e==null)return{};var n,r,i=hg(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;re.length)&&(t=e.length);for(var n=0,r=Array(t);n=4)return[e[0],e[1],e[2],e[3],"".concat(e[0],".").concat(e[1]),"".concat(e[0],".").concat(e[2]),"".concat(e[0],".").concat(e[3]),"".concat(e[1],".").concat(e[0]),"".concat(e[1],".").concat(e[2]),"".concat(e[1],".").concat(e[3]),"".concat(e[2],".").concat(e[0]),"".concat(e[2],".").concat(e[1]),"".concat(e[2],".").concat(e[3]),"".concat(e[3],".").concat(e[0]),"".concat(e[3],".").concat(e[1]),"".concat(e[3],".").concat(e[2]),"".concat(e[0],".").concat(e[1],".").concat(e[2]),"".concat(e[0],".").concat(e[1],".").concat(e[3]),"".concat(e[0],".").concat(e[2],".").concat(e[1]),"".concat(e[0],".").concat(e[2],".").concat(e[3]),"".concat(e[0],".").concat(e[3],".").concat(e[1]),"".concat(e[0],".").concat(e[3],".").concat(e[2]),"".concat(e[1],".").concat(e[0],".").concat(e[2]),"".concat(e[1],".").concat(e[0],".").concat(e[3]),"".concat(e[1],".").concat(e[2],".").concat(e[0]),"".concat(e[1],".").concat(e[2],".").concat(e[3]),"".concat(e[1],".").concat(e[3],".").concat(e[0]),"".concat(e[1],".").concat(e[3],".").concat(e[2]),"".concat(e[2],".").concat(e[0],".").concat(e[1]),"".concat(e[2],".").concat(e[0],".").concat(e[3]),"".concat(e[2],".").concat(e[1],".").concat(e[0]),"".concat(e[2],".").concat(e[1],".").concat(e[3]),"".concat(e[2],".").concat(e[3],".").concat(e[0]),"".concat(e[2],".").concat(e[3],".").concat(e[1]),"".concat(e[3],".").concat(e[0],".").concat(e[1]),"".concat(e[3],".").concat(e[0],".").concat(e[2]),"".concat(e[3],".").concat(e[1],".").concat(e[0]),"".concat(e[3],".").concat(e[1],".").concat(e[2]),"".concat(e[3],".").concat(e[2],".").concat(e[0]),"".concat(e[3],".").concat(e[2],".").concat(e[1]),"".concat(e[0],".").concat(e[1],".").concat(e[2],".").concat(e[3]),"".concat(e[0],".").concat(e[1],".").concat(e[3],".").concat(e[2]),"".concat(e[0],".").concat(e[2],".").concat(e[1],".").concat(e[3]),"".concat(e[0],".").concat(e[2],".").concat(e[3],".").concat(e[1]),"".concat(e[0],".").concat(e[3],".").concat(e[1],".").concat(e[2]),"".concat(e[0],".").concat(e[3],".").concat(e[2],".").concat(e[1]),"".concat(e[1],".").concat(e[0],".").concat(e[2],".").concat(e[3]),"".concat(e[1],".").concat(e[0],".").concat(e[3],".").concat(e[2]),"".concat(e[1],".").concat(e[2],".").concat(e[0],".").concat(e[3]),"".concat(e[1],".").concat(e[2],".").concat(e[3],".").concat(e[0]),"".concat(e[1],".").concat(e[3],".").concat(e[0],".").concat(e[2]),"".concat(e[1],".").concat(e[3],".").concat(e[2],".").concat(e[0]),"".concat(e[2],".").concat(e[0],".").concat(e[1],".").concat(e[3]),"".concat(e[2],".").concat(e[0],".").concat(e[3],".").concat(e[1]),"".concat(e[2],".").concat(e[1],".").concat(e[0],".").concat(e[3]),"".concat(e[2],".").concat(e[1],".").concat(e[3],".").concat(e[0]),"".concat(e[2],".").concat(e[3],".").concat(e[0],".").concat(e[1]),"".concat(e[2],".").concat(e[3],".").concat(e[1],".").concat(e[0]),"".concat(e[3],".").concat(e[0],".").concat(e[1],".").concat(e[2]),"".concat(e[3],".").concat(e[0],".").concat(e[2],".").concat(e[1]),"".concat(e[3],".").concat(e[1],".").concat(e[0],".").concat(e[2]),"".concat(e[3],".").concat(e[1],".").concat(e[2],".").concat(e[0]),"".concat(e[3],".").concat(e[2],".").concat(e[0],".").concat(e[1]),"".concat(e[3],".").concat(e[2],".").concat(e[1],".").concat(e[0])]}var Wn={};function Sg(e){if(e.length===0||e.length===1)return e;var t=e.join(".");return Wn[t]||(Wn[t]=wg(e)),Wn[t]}function _g(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,r=e.filter(function(o){return o!=="token"}),i=Sg(r);return i.reduce(function(o,a){return St(St({},o),n[a])},t)}function Ra(e){return e.join(" ")}function Eg(e,t){var n=0;return function(r){return n+=1,r.map(function(i,o){return Kl({node:i,stylesheet:e,useInlineStyles:t,key:"code-segment-".concat(n,"-").concat(o)})})}}function Kl(e){var t=e.node,n=e.stylesheet,r=e.style,i=r===void 0?{}:r,o=e.useInlineStyles,a=e.key,l=t.properties,s=t.type,u=t.tagName,p=t.value;if(s==="text")return p;if(u){var c=Eg(n,o),f;if(!o)f=St(St({},l),{},{className:Ra(l.className)});else{var d=Object.keys(n).reduce(function(k,x){return x.split(".").forEach(function(b){k.includes(b)||k.push(b)}),k},[]),m=l.className&&l.className.includes("token")?["token"]:[],w=l.className&&m.concat(l.className.filter(function(k){return!d.includes(k)}));f=St(St({},l),{},{className:Ra(w)||void 0,style:_g(l.className,Object.assign({},l.style,i),n)})}var S=c(t.children);return rt.createElement(u,ui({key:a},f),S)}}const Cg=(function(e,t){var n=e.listLanguages();return n.indexOf(t)!==-1});var Tg=["language","children","style","customStyle","codeTagProps","useInlineStyles","showLineNumbers","showInlineLineNumbers","startingLineNumber","lineNumberContainerStyle","lineNumberStyle","wrapLines","wrapLongLines","lineProps","renderer","PreTag","CodeTag","code","astGenerator"];function Oa(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),n.push.apply(n,r)}return n}function lt(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:[],n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],r=0;r2&&arguments[2]!==void 0?arguments[2]:[];return sn({children:E,lineNumber:g,lineNumberStyle:l,largestLineNumber:a,showInlineLineNumbers:i,lineProps:n,className:T,showLineNumbers:r,wrapLongLines:s,wrapLines:t})}function w(E,g){if(r&&g&&i){var T=Yl(l,g,a);E.unshift(Xl(g,T))}return E}function S(E,g){var T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[];return t||T.length>0?m(E,g,T):w(E,g)}for(var k=function(){var g=p[d],T=g.children[0].value,O=Lg(T);if(O){var A=T.split(` +`);A.forEach(function(C,R){var z=r&&c.length+o,U={type:"text",value:"".concat(C,` +`)};if(R===0){var P=p.slice(f+1,d).concat(sn({children:[U],className:g.properties.className})),F=S(P,z);c.push(F)}else if(R===A.length-1){var q=p[d+1]&&p[d+1].children&&p[d+1].children[0],Y={type:"text",value:"".concat(C)};if(q){var $=sn({children:[Y],className:g.properties.className});p.splice(d+1,0,$)}else{var ae=[Y],v=S(ae,z,g.properties.className);c.push(v)}}else{var K=[U],V=S(K,z,g.properties.className);c.push(V)}}),f=d}d++};d4&&m.slice(0,4)===r&&i.test(d)&&(d.charAt(4)==="-"?w=s(d):d=u(d),S=t),new S(w,d))}function s(f){var d=f.slice(5).replace(o,c);return r+d.charAt(0).toUpperCase()+d.slice(1)}function u(f){var d=f.slice(4);return o.test(d)?f:(d=d.replace(a,p),d.charAt(0)!=="-"&&(d="-"+d),r+d)}function p(f){return"-"+f.toLowerCase()}function c(f){return f.charAt(1).toUpperCase()}return lr}var sr,Qa;function Gg(){if(Qa)return sr;Qa=1,sr=t;var e=/[#.]/g;function t(n,r){for(var i=n||"",o=r||"div",a={},l=0,s,u,p;l=48&&n<=57}return dr}var fr,ao;function Jb(){if(ao)return fr;ao=1,fr=e;function e(t){var n=typeof t=="string"?t.charCodeAt(0):t;return n>=97&&n<=102||n>=65&&n<=70||n>=48&&n<=57}return fr}var hr,oo;function ey(){if(oo)return hr;oo=1,hr=e;function e(t){var n=typeof t=="string"?t.charCodeAt(0):t;return n>=97&&n<=122||n>=65&&n<=90}return hr}var gr,lo;function ty(){if(lo)return gr;lo=1;var e=ey(),t=is();gr=n;function n(r){return e(r)||t(r)}return gr}var mr,so;function ny(){if(so)return mr;so=1;var e,t=59;mr=n;function n(r){var i="&"+r+";",o;return e=e||document.createElement("i"),e.innerHTML=i,o=e.textContent,o.charCodeAt(o.length-1)===t&&r!=="semi"||o===i?!1:o}return mr}var br,uo;function ry(){if(uo)return br;uo=1;var e=Yb,t=Qb,n=is(),r=Jb(),i=ty(),o=ny();br=ae;var a={}.hasOwnProperty,l=String.fromCharCode,s=Function.prototype,u={warning:null,reference:null,text:null,warningContext:null,referenceContext:null,textContext:null,position:{},additional:null,attribute:!1,nonTerminated:!0},p=9,c=10,f=12,d=32,m=38,w=59,S=60,k=61,x=35,b=88,_=120,E=65533,g="named",T="hexadecimal",O="decimal",A={};A[T]=16,A[O]=10;var C={};C[g]=i,C[O]=n,C[T]=r;var R=1,z=2,U=3,P=4,F=5,q=6,Y=7,$={};$[R]="Named character references must be terminated by a semicolon",$[z]="Numeric character references must be terminated by a semicolon",$[U]="Named character references cannot be empty",$[P]="Numeric character references cannot be empty",$[F]="Named character references must be known",$[q]="Numeric character references cannot be disallowed",$[Y]="Numeric character references cannot be outside the permissible Unicode range";function ae(y,Z){var re={},ee,se;Z||(Z={});for(se in u)ee=Z[se],re[se]=ee??u[se];return(re.position.indent||re.position.start)&&(re.indent=re.position.indent||[],re.position=re.position.start),v(y,re)}function v(y,Z){var re=Z.additional,ee=Z.nonTerminated,se=Z.text,fe=Z.reference,Ce=Z.warning,Ae=Z.textContext,Ne=Z.referenceContext,Ke=Z.warningContext,Be=Z.position,ut=Z.indent||[],Ue=y.length,Ie=0,ct=-1,He=Be.column||1,Xe=Be.line||1,Me="",pt=[],Ge,ge,we,Te,L,D,B,H,te,xe,oe,ye,Oe,Se,me,_e,Le,We,be;for(typeof re=="string"&&(re=re.charCodeAt(0)),_e=Ye(),H=Ce?It:s,Ie--,Ue++;++Ie65535&&(D-=65536,xe+=l(D>>>10|55296),D=56320|D&1023),D=xe+l(D))):Se!==g&&H(P,We)),D?(bt(),_e=Ye(),Ie=be-1,He+=be-Oe+1,pt.push(D),Le=Ye(),Le.offset++,fe&&fe.call(Ne,D,{start:_e,end:Le},y.slice(Oe-1,be)),_e=Le):(Te=y.slice(Oe-1,be),Me+=Te,He+=Te.length,Ie=be-1)}else L===10&&(Xe++,ct++,He=0),L===L?(Me+=l(L),He++):bt();return pt.join("");function Ye(){return{line:Xe,column:He,offset:Ie+(Be.offset||0)}}function It(tt,at){var jt=Ye();jt.column+=at,jt.offset+=at,Ce.call(Ke,$[tt],jt,tt)}function bt(){Me&&(pt.push(Me),se&&se.call(Ae,Me,{start:_e,end:Ye()}),Me="")}}function K(y){return y>=55296&&y<=57343||y>1114111}function V(y){return y>=1&&y<=8||y===11||y>=13&&y<=31||y>=127&&y<=159||y>=64976&&y<=65007||(y&65535)===65535||(y&65535)===65534}return br}var yr={exports:{}},co;function iy(){return co||(co=1,(function(e){var t=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};var n=(function(r){var i=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,o=0,a={},l={manual:r.Prism&&r.Prism.manual,disableWorkerMessageHandler:r.Prism&&r.Prism.disableWorkerMessageHandler,util:{encode:function x(b){return b instanceof s?new s(b.type,x(b.content),b.alias):Array.isArray(b)?b.map(x):b.replace(/&/g,"&").replace(/"u")return null;if("currentScript"in document)return document.currentScript;try{throw new Error}catch(E){var x=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(E.stack)||[])[1];if(x){var b=document.getElementsByTagName("script");for(var _ in b)if(b[_].src==x)return b[_]}return null}},isActive:function(x,b,_){for(var E="no-"+b;x;){var g=x.classList;if(g.contains(b))return!0;if(g.contains(E))return!1;x=x.parentElement}return!!_}},languages:{plain:a,plaintext:a,text:a,txt:a,extend:function(x,b){var _=l.util.clone(l.languages[x]);for(var E in b)_[E]=b[E];return _},insertBefore:function(x,b,_,E){E=E||l.languages;var g=E[x],T={};for(var O in g)if(g.hasOwnProperty(O)){if(O==b)for(var A in _)_.hasOwnProperty(A)&&(T[A]=_[A]);_.hasOwnProperty(O)||(T[O]=g[O])}var C=E[x];return E[x]=T,l.languages.DFS(l.languages,function(R,z){z===C&&R!=x&&(this[R]=T)}),T},DFS:function x(b,_,E,g){g=g||{};var T=l.util.objId;for(var O in b)if(b.hasOwnProperty(O)){_.call(b,O,b[O],E||O);var A=b[O],C=l.util.type(A);C==="Object"&&!g[T(A)]?(g[T(A)]=!0,x(A,_,null,g)):C==="Array"&&!g[T(A)]&&(g[T(A)]=!0,x(A,_,O,g))}}},plugins:{},highlightAll:function(x,b){l.highlightAllUnder(document,x,b)},highlightAllUnder:function(x,b,_){var E={callback:_,container:x,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};l.hooks.run("before-highlightall",E),E.elements=Array.prototype.slice.apply(E.container.querySelectorAll(E.selector)),l.hooks.run("before-all-elements-highlight",E);for(var g=0,T;T=E.elements[g++];)l.highlightElement(T,b===!0,E.callback)},highlightElement:function(x,b,_){var E=l.util.getLanguage(x),g=l.languages[E];l.util.setLanguage(x,E);var T=x.parentElement;T&&T.nodeName.toLowerCase()==="pre"&&l.util.setLanguage(T,E);var O=x.textContent,A={element:x,language:E,grammar:g,code:O};function C(z){A.highlightedCode=z,l.hooks.run("before-insert",A),A.element.innerHTML=A.highlightedCode,l.hooks.run("after-highlight",A),l.hooks.run("complete",A),_&&_.call(A.element)}if(l.hooks.run("before-sanity-check",A),T=A.element.parentElement,T&&T.nodeName.toLowerCase()==="pre"&&!T.hasAttribute("tabindex")&&T.setAttribute("tabindex","0"),!A.code){l.hooks.run("complete",A),_&&_.call(A.element);return}if(l.hooks.run("before-highlight",A),!A.grammar){C(l.util.encode(A.code));return}if(b&&r.Worker){var R=new Worker(l.filename);R.onmessage=function(z){C(z.data)},R.postMessage(JSON.stringify({language:A.language,code:A.code,immediateClose:!0}))}else C(l.highlight(A.code,A.grammar,A.language))},highlight:function(x,b,_){var E={code:x,grammar:b,language:_};if(l.hooks.run("before-tokenize",E),!E.grammar)throw new Error('The language "'+E.language+'" has no grammar.');return E.tokens=l.tokenize(E.code,E.grammar),l.hooks.run("after-tokenize",E),s.stringify(l.util.encode(E.tokens),E.language)},tokenize:function(x,b){var _=b.rest;if(_){for(var E in _)b[E]=_[E];delete b.rest}var g=new c;return f(g,g.head,x),p(x,g,b,g.head,0),m(g)},hooks:{all:{},add:function(x,b){var _=l.hooks.all;_[x]=_[x]||[],_[x].push(b)},run:function(x,b){var _=l.hooks.all[x];if(!(!_||!_.length))for(var E=0,g;g=_[E++];)g(b)}},Token:s};r.Prism=l;function s(x,b,_,E){this.type=x,this.content=b,this.alias=_,this.length=(E||"").length|0}s.stringify=function x(b,_){if(typeof b=="string")return b;if(Array.isArray(b)){var E="";return b.forEach(function(C){E+=x(C,_)}),E}var g={type:b.type,content:x(b.content,_),tag:"span",classes:["token",b.type],attributes:{},language:_},T=b.alias;T&&(Array.isArray(T)?Array.prototype.push.apply(g.classes,T):g.classes.push(T)),l.hooks.run("wrap",g);var O="";for(var A in g.attributes)O+=" "+A+'="'+(g.attributes[A]||"").replace(/"/g,""")+'"';return"<"+g.tag+' class="'+g.classes.join(" ")+'"'+O+">"+g.content+""};function u(x,b,_,E){x.lastIndex=b;var g=x.exec(_);if(g&&E&&g[1]){var T=g[1].length;g.index+=T,g[0]=g[0].slice(T)}return g}function p(x,b,_,E,g,T){for(var O in _)if(!(!_.hasOwnProperty(O)||!_[O])){var A=_[O];A=Array.isArray(A)?A:[A];for(var C=0;C=T.reach);ae+=$.value.length,$=$.next){var v=$.value;if(b.length>x.length)return;if(!(v instanceof s)){var K=1,V;if(P){if(V=u(Y,ae,x,U),!V||V.index>=x.length)break;var ee=V.index,y=V.index+V[0].length,Z=ae;for(Z+=$.value.length;ee>=Z;)$=$.next,Z+=$.value.length;if(Z-=$.value.length,ae=Z,$.value instanceof s)continue;for(var re=$;re!==b.tail&&(ZT.reach&&(T.reach=Ae);var Ne=$.prev;fe&&(Ne=f(b,Ne,fe),ae+=fe.length),d(b,Ne,K);var Ke=new s(O,z?l.tokenize(se,z):se,F,se);if($=f(b,Ne,Ke),Ce&&f(b,$,Ce),K>1){var Be={cause:O+","+C,reach:Ae};p(x,b,_,$.prev,ae,Be),T&&Be.reach>T.reach&&(T.reach=Be.reach)}}}}}}function c(){var x={value:null,prev:null,next:null},b={value:null,prev:x,next:null};x.next=b,this.head=x,this.tail=b,this.length=0}function f(x,b,_){var E=b.next,g={value:_,prev:b,next:E};return b.next=g,E.prev=g,x.length++,g}function d(x,b,_){for(var E=b.next,g=0;g<_&&E!==x.tail;g++)E=E.next;b.next=E,E.prev=b,x.length-=g}function m(x){for(var b=[],_=x.head.next;_!==x.tail;)b.push(_.value),_=_.next;return b}if(!r.document)return r.addEventListener&&(l.disableWorkerMessageHandler||r.addEventListener("message",function(x){var b=JSON.parse(x.data),_=b.language,E=b.code,g=b.immediateClose;r.postMessage(l.highlight(E,l.languages[_],_)),g&&r.close()},!1)),l;var w=l.util.currentScript();w&&(l.filename=w.src,w.hasAttribute("data-manual")&&(l.manual=!0));function S(){l.manual||l.highlightAll()}if(!l.manual){var k=document.readyState;k==="loading"||k==="interactive"&&w&&w.defer?document.addEventListener("DOMContentLoaded",S):window.requestAnimationFrame?window.requestAnimationFrame(S):window.setTimeout(S,16)}return l})(t);e.exports&&(e.exports=n),typeof cn<"u"&&(cn.Prism=n)})(yr)),yr.exports}var xr,po;function as(){if(po)return xr;po=1,xr=e,e.displayName="markup",e.aliases=["html","mathml","svg","xml","ssml","atom","rss"];function e(t){t.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},t.languages.markup.tag.inside["attr-value"].inside.entity=t.languages.markup.entity,t.languages.markup.doctype.inside["internal-subset"].inside=t.languages.markup,t.hooks.add("wrap",function(n){n.type==="entity"&&(n.attributes.title=n.content.value.replace(/&/,"&"))}),Object.defineProperty(t.languages.markup.tag,"addInlined",{value:function(r,i){var o={};o["language-"+i]={pattern:/(^$)/i,lookbehind:!0,inside:t.languages[i]},o.cdata=/^$/i;var a={"included-cdata":{pattern://i,inside:o}};a["language-"+i]={pattern:/[\s\S]+/,inside:t.languages[i]};var l={};l[r]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,function(){return r}),"i"),lookbehind:!0,greedy:!0,inside:a},t.languages.insertBefore("markup","cdata",l)}}),Object.defineProperty(t.languages.markup.tag,"addAttribute",{value:function(n,r){t.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+n+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[r,"language-"+r],inside:t.languages[r]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),t.languages.html=t.languages.markup,t.languages.mathml=t.languages.markup,t.languages.svg=t.languages.markup,t.languages.xml=t.languages.extend("markup",{}),t.languages.ssml=t.languages.xml,t.languages.atom=t.languages.xml,t.languages.rss=t.languages.xml}return xr}var kr,fo;function os(){if(fo)return kr;fo=1,kr=e,e.displayName="css",e.aliases=[];function e(t){(function(n){var r=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;n.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+r.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+r.source+"$"),alias:"url"}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+r.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:r,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},n.languages.css.atrule.inside.rest=n.languages.css;var i=n.languages.markup;i&&(i.tag.addInlined("style","css"),i.tag.addAttribute("style","css"))})(t)}return kr}var vr,ho;function ay(){if(ho)return vr;ho=1,vr=e,e.displayName="clike",e.aliases=[];function e(t){t.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}}return vr}var wr,go;function ls(){if(go)return wr;go=1,wr=e,e.displayName="javascript",e.aliases=["js"];function e(t){t.languages.javascript=t.languages.extend("clike",{"class-name":[t.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+(/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source)+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),t.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,t.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:t.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:t.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:t.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:t.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:t.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),t.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:t.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),t.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),t.languages.markup&&(t.languages.markup.tag.addInlined("script","javascript"),t.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),t.languages.js=t.languages.javascript}return wr}var Sr,mo;function oy(){if(mo)return Sr;mo=1;var e=typeof globalThis=="object"?globalThis:typeof self=="object"?self:typeof window=="object"?window:typeof cn=="object"?cn:{},t=E();e.Prism={manual:!0,disableWorkerMessageHandler:!0};var n=Qg(),r=ry(),i=iy(),o=as(),a=os(),l=ay(),s=ls();t();var u={}.hasOwnProperty;function p(){}p.prototype=i;var c=new p;Sr=c,c.highlight=m,c.register=f,c.alias=d,c.registered=w,c.listLanguages=S,f(o),f(a),f(l),f(s),c.util.encode=b,c.Token.stringify=k;function f(g){if(typeof g!="function"||!g.displayName)throw new Error("Expected `function` for `grammar`, got `"+g+"`");c.languages[g.displayName]===void 0&&g(c)}function d(g,T){var O=c.languages,A=g,C,R,z,U;T&&(A={},A[g]=T);for(C in A)for(R=A[C],R=typeof R=="string"?[R]:R,z=R.length,U=-1;++U?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/}}return _r}var Er,yo;function ss(){if(yo)return Er;yo=1,Er=e,e.displayName="c",e.aliases=[];function e(t){t.languages.c=t.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),t.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),t.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},t.languages.c.string],char:t.languages.c.char,comment:t.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:t.languages.c}}}}),t.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete t.languages.c.boolean}return Er}var Cr,xo;function uy(){if(xo)return Cr;xo=1;var e=ss();Cr=t,t.displayName="cpp",t.aliases=[];function t(n){n.register(e),(function(r){var i=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,o=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,function(){return i.source});r.languages.cpp=r.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,function(){return i.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:i,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),r.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,function(){return o})+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),r.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:r.languages.cpp}}}}),r.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),r.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:r.languages.extend("cpp",{})}}),r.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},r.languages.cpp["base-clause"])})(n)}return Cr}var Tr,ko;function cy(){if(ko)return Tr;ko=1,Tr=e,e.displayName="csharp",e.aliases=["dotnet","cs"];function e(t){(function(n){function r(K,V){return K.replace(/<<(\d+)>>/g,function(y,Z){return"(?:"+V[+Z]+")"})}function i(K,V,y){return RegExp(r(K,V),"")}function o(K,V){for(var y=0;y>/g,function(){return"(?:"+K+")"});return K.replace(/<>/g,"[^\\s\\S]")}var a={type:"bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",typeDeclaration:"class enum interface record struct",contextual:"add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",other:"abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield"};function l(K){return"\\b(?:"+K.trim().replace(/ /g,"|")+")\\b"}var s=l(a.typeDeclaration),u=RegExp(l(a.type+" "+a.typeDeclaration+" "+a.contextual+" "+a.other)),p=l(a.typeDeclaration+" "+a.contextual+" "+a.other),c=l(a.type+" "+a.typeDeclaration+" "+a.other),f=o(/<(?:[^<>;=+\-*/%&|^]|<>)*>/.source,2),d=o(/\((?:[^()]|<>)*\)/.source,2),m=/@?\b[A-Za-z_]\w*\b/.source,w=r(/<<0>>(?:\s*<<1>>)?/.source,[m,f]),S=r(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source,[p,w]),k=/\[\s*(?:,\s*)*\]/.source,x=r(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source,[S,k]),b=r(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source,[f,d,k]),_=r(/\(<<0>>+(?:,<<0>>+)+\)/.source,[b]),E=r(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source,[_,S,k]),g={keyword:u,punctuation:/[<>()?,.:[\]]/},T=/'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source,O=/"(?:\\.|[^\\"\r\n])*"/.source,A=/@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;n.languages.csharp=n.languages.extend("clike",{string:[{pattern:i(/(^|[^$\\])<<0>>/.source,[A]),lookbehind:!0,greedy:!0},{pattern:i(/(^|[^@$\\])<<0>>/.source,[O]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:i(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source,[S]),lookbehind:!0,inside:g},{pattern:i(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source,[m,E]),lookbehind:!0,inside:g},{pattern:i(/(\busing\s+)<<0>>(?=\s*=)/.source,[m]),lookbehind:!0},{pattern:i(/(\b<<0>>\s+)<<1>>/.source,[s,w]),lookbehind:!0,inside:g},{pattern:i(/(\bcatch\s*\(\s*)<<0>>/.source,[S]),lookbehind:!0,inside:g},{pattern:i(/(\bwhere\s+)<<0>>/.source,[m]),lookbehind:!0},{pattern:i(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source,[x]),lookbehind:!0,inside:g},{pattern:i(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source,[E,c,m]),inside:g}],keyword:u,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),n.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),n.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:i(/([(,]\s*)<<0>>(?=\s*:)/.source,[m]),lookbehind:!0,alias:"punctuation"}}),n.languages.insertBefore("csharp","class-name",{namespace:{pattern:i(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source,[m]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:i(/(\b(?:default|sizeof|typeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source,[d]),lookbehind:!0,alias:"class-name",inside:g},"return-type":{pattern:i(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source,[E,S]),inside:g,alias:"class-name"},"constructor-invocation":{pattern:i(/(\bnew\s+)<<0>>(?=\s*[[({])/.source,[E]),lookbehind:!0,inside:g,alias:"class-name"},"generic-method":{pattern:i(/<<0>>\s*<<1>>(?=\s*\()/.source,[m,f]),inside:{function:i(/^<<0>>/.source,[m]),generic:{pattern:RegExp(f),alias:"class-name",inside:g}}},"type-list":{pattern:i(/\b((?:<<0>>\s+<<1>>|record\s+<<1>>\s*<<5>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>|<<1>>\s*<<5>>|<<6>>)(?:\s*,\s*(?:<<3>>|<<4>>|<<6>>))*(?=\s*(?:where|[{;]|=>|$))/.source,[s,w,m,E,u.source,d,/\bnew\s*\(\s*\)/.source]),lookbehind:!0,inside:{"record-arguments":{pattern:i(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source,[w,d]),lookbehind:!0,greedy:!0,inside:n.languages.csharp},keyword:u,"class-name":{pattern:RegExp(E),greedy:!0,inside:g},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var C=O+"|"+T,R=r(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source,[C]),z=o(r(/[^"'/()]|<<0>>|\(<>*\)/.source,[R]),2),U=/\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source,P=r(/<<0>>(?:\s*\(<<1>>*\))?/.source,[S,z]);n.languages.insertBefore("csharp","class-name",{attribute:{pattern:i(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source,[U,P]),lookbehind:!0,greedy:!0,inside:{target:{pattern:i(/^<<0>>(?=\s*:)/.source,[U]),alias:"keyword"},"attribute-arguments":{pattern:i(/\(<<0>>*\)/.source,[z]),inside:n.languages.csharp},"class-name":{pattern:RegExp(S),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var F=/:[^}\r\n]+/.source,q=o(r(/[^"'/()]|<<0>>|\(<>*\)/.source,[R]),2),Y=r(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[q,F]),$=o(r(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<>*\)/.source,[C]),2),ae=r(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[$,F]);function v(K,V){return{interpolation:{pattern:i(/((?:^|[^{])(?:\{\{)*)<<0>>/.source,[K]),lookbehind:!0,inside:{"format-string":{pattern:i(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source,[V,F]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:n.languages.csharp}}},string:/[\s\S]+/}}n.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:i(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source,[Y]),lookbehind:!0,greedy:!0,inside:v(Y,q)},{pattern:i(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source,[ae]),lookbehind:!0,greedy:!0,inside:v(ae,$)}],char:{pattern:RegExp(T),greedy:!0}}),n.languages.dotnet=n.languages.cs=n.languages.csharp})(t)}return Tr}var Ar,vo;function py(){if(vo)return Ar;vo=1,Ar=e,e.displayName="bash",e.aliases=["shell"];function e(t){(function(n){var r="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",i={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},o={bash:i,environment:{pattern:RegExp("\\$"+r),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+r),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};n.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+r),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:o},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:i}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:o},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:o.entity}}],environment:{pattern:RegExp("\\$?"+r),alias:"constant"},variable:o.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},i.inside=n.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],l=o.variable[1].inside,s=0;s|[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/,punctuation:/[(){}[\].,;]/}),n.languages.insertBefore("ruby","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}});var r={pattern:/((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/,lookbehind:!0,inside:{content:{pattern:/^(#\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:n.languages.ruby},delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"}}};delete n.languages.ruby.function;var i="(?:"+[/([^a-zA-Z0-9\s{(\[<=])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/\((?:[^()\\]|\\[\s\S]|\((?:[^()\\]|\\[\s\S])*\))*\)/.source,/\{(?:[^{}\\]|\\[\s\S]|\{(?:[^{}\\]|\\[\s\S])*\})*\}/.source,/\[(?:[^\[\]\\]|\\[\s\S]|\[(?:[^\[\]\\]|\\[\s\S])*\])*\]/.source,/<(?:[^<>\\]|\\[\s\S]|<(?:[^<>\\]|\\[\s\S])*>)*>/.source].join("|")+")",o=/(?:"(?:\\.|[^"\\\r\n])*"|(?:\b[a-zA-Z_]\w*|[^\s\0-\x7F]+)[?!]?|\$.)/.source;n.languages.insertBefore("ruby","keyword",{"regex-literal":[{pattern:RegExp(/%r/.source+i+/[egimnosux]{0,6}/.source),greedy:!0,inside:{interpolation:r,regex:/[\s\S]+/}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,lookbehind:!0,greedy:!0,inside:{interpolation:r,regex:/[\s\S]+/}}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:[{pattern:RegExp(/(^|[^:]):/.source+o),lookbehind:!0,greedy:!0},{pattern:RegExp(/([\r\n{(,][ \t]*)/.source+o+/(?=:(?!:))/.source),lookbehind:!0,greedy:!0}],"method-definition":{pattern:/(\bdef\s+)\w+(?:\s*\.\s*\w+)?/,lookbehind:!0,inside:{function:/\b\w+$/,keyword:/^self\b/,"class-name":/^\w+/,punctuation:/\./}}}),n.languages.insertBefore("ruby","string",{"string-literal":[{pattern:RegExp(/%[qQiIwWs]?/.source+i),greedy:!0,inside:{interpolation:r,string:/[\s\S]+/}},{pattern:/("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,greedy:!0,inside:{interpolation:r,string:/[\s\S]+/}},{pattern:/<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?/}},interpolation:r,string:/[\s\S]+/}},{pattern:/<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?'|'$/}},string:/[\s\S]+/}}],"command-literal":[{pattern:RegExp(/%x/.source+i),greedy:!0,inside:{interpolation:r,command:{pattern:/[\s\S]+/,alias:"string"}}},{pattern:/`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/,greedy:!0,inside:{interpolation:r,command:{pattern:/[\s\S]+/,alias:"string"}}}]}),delete n.languages.ruby.string,n.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\b/,constant:/\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/}),n.languages.rb=n.languages.ruby})(t)}return Lr}var Nr,So;function fy(){if(So)return Nr;So=1,Nr=e,e.displayName="diff",e.aliases=[];function e(t){(function(n){n.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var r={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(r).forEach(function(i){var o=r[i],a=[];/^\w+$/.test(i)||a.push(/\w+/.exec(i)[0]),i==="diff"&&a.push("bold"),n.languages.diff[i]={pattern:RegExp("^(?:["+o+`].*(?:\r +?| +|(?![\\s\\S])))+`,"m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(i)[0]}}}}),Object.defineProperty(n.languages.diff,"PREFIXES",{value:r})})(t)}return Nr}var Ir,_o;function hy(){if(_o)return Ir;_o=1,Ir=e,e.displayName="markupTemplating",e.aliases=[];function e(t){(function(n){function r(i,o){return"___"+i.toUpperCase()+o+"___"}Object.defineProperties(n.languages["markup-templating"]={},{buildPlaceholders:{value:function(i,o,a,l){if(i.language===o){var s=i.tokenStack=[];i.code=i.code.replace(a,function(u){if(typeof l=="function"&&!l(u))return u;for(var p=s.length,c;i.code.indexOf(c=r(o,p))!==-1;)++p;return s[p]=u,c}),i.grammar=n.languages.markup}}},tokenizePlaceholders:{value:function(i,o){if(i.language!==o||!i.tokenStack)return;i.grammar=n.languages[o];var a=0,l=Object.keys(i.tokenStack);function s(u){for(var p=0;p=l.length);p++){var c=u[p];if(typeof c=="string"||c.content&&typeof c.content=="string"){var f=l[a],d=i.tokenStack[f],m=typeof c=="string"?c:c.content,w=r(o,f),S=m.indexOf(w);if(S>-1){++a;var k=m.substring(0,S),x=new n.Token(o,n.tokenize(d,i.grammar),"language-"+o,d),b=m.substring(S+w.length),_=[];k&&_.push.apply(_,s([k])),_.push(x),b&&_.push.apply(_,s([b])),typeof c=="string"?u.splice.apply(u,[p,1].concat(_)):c.content=_}}else c.content&&s(c.content)}return u}s(i.tokens)}}})})(t)}return Ir}var jr,Eo;function gy(){if(Eo)return jr;Eo=1,jr=e,e.displayName="go",e.aliases=[];function e(t){t.languages.go=t.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),t.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete t.languages.go["class-name"]}return jr}var Rr,Co;function my(){if(Co)return Rr;Co=1,Rr=e,e.displayName="java",e.aliases=[];function e(t){(function(n){var r=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,i=/(^|[^\w.])(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,o={pattern:RegExp(i+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};n.languages.java=n.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[o,{pattern:RegExp(i+/[A-Z]\w*(?=\s+\w+\s*[;,=()])/.source),lookbehind:!0,inside:o.inside}],keyword:r,function:[n.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),n.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),n.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":o,keyword:r,punctuation:/[<>(),.:]/,operator:/[?&|]/}},namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(//g,function(){return r.source})),lookbehind:!0,inside:{punctuation:/\./}}})})(t)}return Rr}var Or,To;function us(){if(To)return Or;To=1,Or=e,e.displayName="typescript",e.aliases=["ts"];function e(t){(function(n){n.languages.typescript=n.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),n.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete n.languages.typescript.parameter,delete n.languages.typescript["literal-property"];var r=n.languages.extend("typescript",{});delete r["class-name"],n.languages.typescript["class-name"].inside=r,n.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:r}}}}),n.languages.ts=n.languages.typescript})(t)}return Or}var Dr,Ao;function by(){if(Ao)return Dr;Ao=1,Dr=e,e.displayName="json",e.aliases=["webmanifest"];function e(t){t.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},t.languages.webmanifest=t.languages.json}return Dr}var Mr,Lo;function cs(){if(Lo)return Mr;Lo=1,Mr=e,e.displayName="jsx",e.aliases=[];function e(t){(function(n){var r=n.util.clone(n.languages.javascript),i=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,o=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,a=/(?:\{*\.{3}(?:[^{}]|)*\})/.source;function l(p,c){return p=p.replace(//g,function(){return i}).replace(//g,function(){return o}).replace(//g,function(){return a}),RegExp(p,c)}a=l(a).source,n.languages.jsx=n.languages.extend("markup",r),n.languages.jsx.tag.pattern=l(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),n.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,n.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,n.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,n.languages.jsx.tag.inside.comment=r.comment,n.languages.insertBefore("inside","attr-name",{spread:{pattern:l(//.source),inside:n.languages.jsx}},n.languages.jsx.tag),n.languages.insertBefore("inside","special-attr",{script:{pattern:l(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:n.languages.jsx}}},n.languages.jsx.tag);var s=function(p){return p?typeof p=="string"?p:typeof p.content=="string"?p.content:p.content.map(s).join(""):""},u=function(p){for(var c=[],f=0;f0&&c[c.length-1].tagName===s(d.content[0].content[1])&&c.pop():d.content[d.content.length-1].content==="/>"||c.push({tagName:s(d.content[0].content[1]),openedBraces:0}):c.length>0&&d.type==="punctuation"&&d.content==="{"?c[c.length-1].openedBraces++:c.length>0&&c[c.length-1].openedBraces>0&&d.type==="punctuation"&&d.content==="}"?c[c.length-1].openedBraces--:m=!0),(m||typeof d=="string")&&c.length>0&&c[c.length-1].openedBraces===0){var w=s(d);f0&&(typeof p[f-1]=="string"||p[f-1].type==="plain-text")&&(w=s(p[f-1])+w,p.splice(f-1,1),f--),p[f]=new n.Token("plain-text",w,null,w)}d.content&&typeof d.content!="string"&&u(d.content)}};n.hooks.add("after-tokenize",function(p){p.language!=="jsx"&&p.language!=="tsx"||u(p.tokens)})})(t)}return Mr}var Fr,No;function yy(){if(No)return Fr;No=1,Fr=e,e.displayName="kotlin",e.aliases=["kt","kts"];function e(t){(function(n){n.languages.kotlin=n.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete n.languages.kotlin["class-name"];var r={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:n.languages.kotlin}};n.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:r},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:r},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete n.languages.kotlin.string,n.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),n.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),n.languages.kt=n.languages.kotlin,n.languages.kts=n.languages.kotlin})(t)}return Fr}var zr,Io;function xy(){if(Io)return zr;Io=1;var e=hy();zr=t,t.displayName="php",t.aliases=[];function t(n){n.register(e),(function(r){var i=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,o=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],a=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,l=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,s=/[{}\[\](),:;]/;r.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:i,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|new|or|parent|print|private|protected|public|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s+)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:o,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:a,operator:l,punctuation:s};var u={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:r.languages.php},p=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:u}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:u}}];r.languages.insertBefore("php","variable",{string:p,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:i,string:p,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:o,number:a,operator:l,punctuation:s}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),r.hooks.add("before-tokenize",function(c){if(/<\?/.test(c.code)){var f=/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g;r.languages["markup-templating"].buildPlaceholders(c,"php",f)}}),r.hooks.add("after-tokenize",function(c){r.languages["markup-templating"].tokenizePlaceholders(c,"php")})})(n)}return zr}var Pr,jo;function ky(){if(jo)return Pr;jo=1,Pr=e,e.displayName="markdown",e.aliases=["md"];function e(t){(function(n){var r=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function i(f){return f=f.replace(//g,function(){return r}),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+f+")")}var o=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,function(){return o}),l=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;n.languages.markdown=n.languages.extend("markup",{}),n.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:n.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+l+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+l+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(o),inside:n.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+l+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(o),alias:"important",inside:n.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:i(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:i(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:i(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:i(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach(function(f){["url","bold","italic","strike","code-snippet"].forEach(function(d){f!==d&&(n.languages.markdown[f].inside.content.inside[d]=n.languages.markdown[d])})}),n.hooks.add("after-tokenize",function(f){if(f.language!=="markdown"&&f.language!=="md")return;function d(m){if(!(!m||typeof m=="string"))for(var w=0,S=m.length;w",quot:'"'},p=String.fromCodePoint||String.fromCharCode;function c(f){var d=f.replace(s,"");return d=d.replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,function(m,w){if(w=w.toLowerCase(),w[0]==="#"){var S;return w[1]==="x"?S=parseInt(w.slice(2),16):S=Number(w.slice(1)),p(S)}else{var k=u[w];return k||m}}),d}n.languages.md=n.languages.markdown})(t)}return Pr}var Br,Ro;function vy(){if(Ro)return Br;Ro=1,Br=e,e.displayName="python",e.aliases=["py"];function e(t){t.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},t.languages.python["string-interpolation"].inside.interpolation.inside.rest=t.languages.python,t.languages.py=t.languages.python}return Br}var $r,Oo;function wy(){if(Oo)return $r;Oo=1,$r=e,e.displayName="rust",e.aliases=[];function e(t){(function(n){for(var r=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|)*\*\//.source,i=0;i<2;i++)r=r.replace(//g,function(){return r});r=r.replace(//g,function(){return/[^\s\S]/.source}),n.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+r),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<>?=?|[@?]/},n.languages.rust["closure-params"].inside.rest=n.languages.rust,n.languages.rust.attribute.inside.string=n.languages.rust.string})(t)}return $r}var qr,Do;function Sy(){if(Do)return qr;Do=1,qr=e,e.displayName="swift",e.aliases=[];function e(t){t.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp(/(^|[^"#])/.source+"(?:"+/"(?:\\(?:\((?:[^()]|\([^()]*\))*\)|\r\n|[^(])|[^\\\r\n"])*"/.source+"|"+/"""(?:\\(?:\((?:[^()]|\([^()]*\))*\)|[^(])|[^\\"]|"(?!""))*"""/.source+")"+/(?!["#])/.source),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp(/(^|[^"#])(#+)/.source+"(?:"+/"(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|\r\n|[^#])|[^\\\r\n])*?"/.source+"|"+/"""(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|[^#])|[^\\])*?"""/.source+")\\2"),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp(/#/.source+"(?:"+(/(?:elseif|if)\b/.source+"(?:[ ]*"+/(?:![ \t]*)?(?:\b\w+\b(?:[ \t]*\((?:[^()]|\([^()]*\))*\))?|\((?:[^()]|\([^()]*\))*\))(?:[ \t]*(?:&&|\|\|))?/.source+")+")+"|"+/(?:else|endif)\b/.source+")"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},t.languages.swift["string-literal"].forEach(function(n){n.inside.interpolation.inside=t.languages.swift})}return qr}var Ur,Mo;function _y(){if(Mo)return Ur;Mo=1,Ur=e,e.displayName="yaml",e.aliases=["yml"];function e(t){(function(n){var r=/[*&][^\s[\]{},]+/,i=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,o="(?:"+i.source+"(?:[ ]+"+r.source+")?|"+r.source+"(?:[ ]+"+i.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source}),l=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function s(u,p){p=(p||"").replace(/m/g,"")+"m";var c=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,function(){return o}).replace(/<>/g,function(){return u});return RegExp(c,p)}n.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,function(){return o})),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,function(){return o}).replace(/<>/g,function(){return"(?:"+a+"|"+l+")"})),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:s(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:s(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:s(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:s(l),lookbehind:!0,greedy:!0},number:{pattern:s(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:i,important:r,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},n.languages.yml=n.languages.yaml})(t)}return Ur}var Hr,Fo;function Ey(){if(Fo)return Hr;Fo=1;var e=cs(),t=us();Hr=n,n.displayName="tsx",n.aliases=[];function n(r){r.register(e),r.register(t),(function(i){var o=i.util.clone(i.languages.typescript);i.languages.tsx=i.languages.extend("jsx",o),delete i.languages.tsx.parameter,delete i.languages.tsx["literal-property"];var a=i.languages.tsx.tag;a.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+a.pattern.source+")",a.pattern.flags),a.lookbehind=!0})(r)}return Hr}const Cy={'code[class*="language-"]':{color:"#393A34",fontFamily:'"Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace',direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",fontSize:".9em",lineHeight:"1.2em",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{color:"#393A34",fontFamily:'"Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace',direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",fontSize:".9em",lineHeight:"1.2em",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto",border:"1px solid #dddddd",backgroundColor:"white"},'pre > code[class*="language-"]':{fontSize:"1em"},'pre[class*="language-"]::-moz-selection':{background:"#C1DEF1"},'pre[class*="language-"] ::-moz-selection':{background:"#C1DEF1"},'code[class*="language-"]::-moz-selection':{background:"#C1DEF1"},'code[class*="language-"] ::-moz-selection':{background:"#C1DEF1"},'pre[class*="language-"]::selection':{background:"#C1DEF1"},'pre[class*="language-"] ::selection':{background:"#C1DEF1"},'code[class*="language-"]::selection':{background:"#C1DEF1"},'code[class*="language-"] ::selection':{background:"#C1DEF1"},':not(pre) > code[class*="language-"]':{padding:".2em",paddingTop:"1px",paddingBottom:"1px",background:"#f8f8f8",border:"1px solid #dddddd"},comment:{color:"#008000",fontStyle:"italic"},prolog:{color:"#008000",fontStyle:"italic"},doctype:{color:"#008000",fontStyle:"italic"},cdata:{color:"#008000",fontStyle:"italic"},namespace:{Opacity:".7"},string:{color:"#A31515"},punctuation:{color:"#393A34"},operator:{color:"#393A34"},url:{color:"#36acaa"},symbol:{color:"#36acaa"},number:{color:"#36acaa"},boolean:{color:"#36acaa"},variable:{color:"#36acaa"},constant:{color:"#36acaa"},inserted:{color:"#36acaa"},atrule:{color:"#0000ff"},keyword:{color:"#0000ff"},"attr-value":{color:"#0000ff"},".language-autohotkey .token.selector":{color:"#0000ff"},".language-json .token.boolean":{color:"#0000ff"},".language-json .token.number":{color:"#0000ff"},'code[class*="language-css"]':{color:"#0000ff"},function:{color:"#393A34"},deleted:{color:"#9a050f"},".language-autohotkey .token.tag":{color:"#9a050f"},selector:{color:"#800000"},".language-autohotkey .token.keyword":{color:"#00009f"},important:{color:"#e90",fontWeight:"bold"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},"class-name":{color:"#2B91AF"},".language-json .token.property":{color:"#2B91AF"},tag:{color:"#800000"},"attr-name":{color:"#ff0000"},property:{color:"#ff0000"},regex:{color:"#ff0000"},entity:{color:"#ff0000"},"directive.tag.tag":{background:"#ffff00",color:"#393A34"},".line-numbers.line-numbers .line-numbers-rows":{borderRightColor:"#a5a5a5"},".line-numbers .line-numbers-rows > span:before":{color:"#2B91AF"},".line-highlight.line-highlight":{background:"linear-gradient(to right, rgba(193, 222, 241, 0.2) 70%, rgba(221, 222, 241, 0))"}},Ty={'pre[class*="language-"]':{color:"#d4d4d4",fontSize:"13px",textShadow:"none",fontFamily:'Menlo, Monaco, Consolas, "Andale Mono", "Ubuntu Mono", "Courier New", monospace',direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:".5em 0",overflow:"auto",background:"#1e1e1e"},'code[class*="language-"]':{color:"#d4d4d4",fontSize:"13px",textShadow:"none",fontFamily:'Menlo, Monaco, Consolas, "Andale Mono", "Ubuntu Mono", "Courier New", monospace',direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]::selection':{textShadow:"none",background:"#264F78"},'code[class*="language-"]::selection':{textShadow:"none",background:"#264F78"},'pre[class*="language-"] *::selection':{textShadow:"none",background:"#264F78"},'code[class*="language-"] *::selection':{textShadow:"none",background:"#264F78"},':not(pre) > code[class*="language-"]':{padding:".1em .3em",borderRadius:".3em",color:"#db4c69",background:"#1e1e1e"},".namespace":{Opacity:".7"},"doctype.doctype-tag":{color:"#569CD6"},"doctype.name":{color:"#9cdcfe"},comment:{color:"#6a9955"},prolog:{color:"#6a9955"},punctuation:{color:"#d4d4d4"},".language-html .language-css .token.punctuation":{color:"#d4d4d4"},".language-html .language-javascript .token.punctuation":{color:"#d4d4d4"},property:{color:"#9cdcfe"},tag:{color:"#569cd6"},boolean:{color:"#569cd6"},number:{color:"#b5cea8"},constant:{color:"#9cdcfe"},symbol:{color:"#b5cea8"},inserted:{color:"#b5cea8"},unit:{color:"#b5cea8"},selector:{color:"#d7ba7d"},"attr-name":{color:"#9cdcfe"},string:{color:"#ce9178"},char:{color:"#ce9178"},builtin:{color:"#ce9178"},deleted:{color:"#ce9178"},".language-css .token.string.url":{textDecoration:"underline"},operator:{color:"#d4d4d4"},entity:{color:"#569cd6"},"operator.arrow":{color:"#569CD6"},atrule:{color:"#ce9178"},"atrule.rule":{color:"#c586c0"},"atrule.url":{color:"#9cdcfe"},"atrule.url.function":{color:"#dcdcaa"},"atrule.url.punctuation":{color:"#d4d4d4"},keyword:{color:"#569CD6"},"keyword.module":{color:"#c586c0"},"keyword.control-flow":{color:"#c586c0"},function:{color:"#dcdcaa"},"function.maybe-class-name":{color:"#dcdcaa"},regex:{color:"#d16969"},important:{color:"#569cd6"},italic:{fontStyle:"italic"},"class-name":{color:"#4ec9b0"},"maybe-class-name":{color:"#4ec9b0"},console:{color:"#9cdcfe"},parameter:{color:"#9cdcfe"},interpolation:{color:"#9cdcfe"},"punctuation.interpolation-punctuation":{color:"#569cd6"},variable:{color:"#9cdcfe"},"imports.maybe-class-name":{color:"#9cdcfe"},"exports.maybe-class-name":{color:"#9cdcfe"},escape:{color:"#d7ba7d"},"tag.punctuation":{color:"#808080"},cdata:{color:"#808080"},"attr-value":{color:"#ce9178"},"attr-value.punctuation":{color:"#ce9178"},"attr-value.punctuation.attr-equals":{color:"#d4d4d4"},namespace:{color:"#4ec9b0"},'pre[class*="language-javascript"]':{color:"#9cdcfe"},'code[class*="language-javascript"]':{color:"#9cdcfe"},'pre[class*="language-jsx"]':{color:"#9cdcfe"},'code[class*="language-jsx"]':{color:"#9cdcfe"},'pre[class*="language-typescript"]':{color:"#9cdcfe"},'code[class*="language-typescript"]':{color:"#9cdcfe"},'pre[class*="language-tsx"]':{color:"#9cdcfe"},'code[class*="language-tsx"]':{color:"#9cdcfe"},'pre[class*="language-css"]':{color:"#ce9178"},'code[class*="language-css"]':{color:"#ce9178"},'pre[class*="language-html"]':{color:"#d4d4d4"},'code[class*="language-html"]':{color:"#d4d4d4"},".language-regex .token.anchor":{color:"#dcdcaa"},".language-html .token.punctuation":{color:"#808080"},'pre[class*="language-"] > code[class*="language-"]':{position:"relative",zIndex:"1"},".line-highlight.line-highlight":{background:"#f7ebc6",boxShadow:"inset 5px 0 0 #f7d87c",zIndex:"0"}};var Ay=py();const ps=de(Ay);var Ly=ss();const Ny=de(Ly);var Iy=uy();const jy=de(Iy);var Ry=cy();const ds=de(Ry);var Oy=os();const Dy=de(Oy);var My=fy();const Fy=de(My);var zy=gy();const Py=de(zy);var By=my();const $y=de(By);var qy=ls();const fs=de(qy);var Uy=by();const Hy=de(Uy);var Wy=cs();const Vy=de(Wy);var Gy=yy();const Zy=de(Gy);var Ky=ky();const hs=de(Ky);var Xy=as();const Mi=de(Xy);var Yy=xy();const Qy=de(Yy);var Jy=vy();const gs=de(Jy);var ex=dy();const ms=de(ex);var tx=wy();const nx=de(tx);var rx=sy();const ix=de(rx);var ax=Sy();const ox=de(ax);var lx=Ey();const sx=de(lx);var ux=us();const bs=de(ux);var cx=_y();const ys=de(cx),px={bash:ps,c:Ny,cpp:jy,csharp:ds,css:Dy,diff:Fy,go:Py,java:$y,javascript:fs,json:Hy,jsx:Vy,kotlin:Zy,markdown:hs,markup:Mi,php:Qy,python:gs,ruby:ms,rust:nx,sql:ix,swift:ox,tsx:sx,typescript:bs,yaml:ys};Object.entries(px).forEach(([e,t])=>{Pe.registerLanguage(e,t)});Pe.registerLanguage("cs",ds);Pe.registerLanguage("html",Mi);Pe.registerLanguage("js",fs);Pe.registerLanguage("md",hs);Pe.registerLanguage("py",gs);Pe.registerLanguage("rb",ms);Pe.registerLanguage("sh",ps);Pe.registerLanguage("ts",bs);Pe.registerLanguage("xml",Mi);Pe.registerLanguage("yml",ys);function qt(e){return e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(1)}s`}function Fi(e,t){return e==="en-US"&&t!==1?"s":""}function dx(e,t){if(!e||e.length<=t)return e;const n=t-3,r=Math.ceil(n*.6),i=n-r;return e.slice(0,r)+"..."+e.slice(-i)}function Wr(e){return e.replace(/#img:\S+\s*/g,"").replace(/\[Image:.*?\]\n(?:Path:.*?\n|Image ID:.*?\n)?/g,"").trim()}function xs(e){if(navigator.clipboard?.writeText)return navigator.clipboard.writeText(e);const t=document.createElement("textarea");t.value=e,t.style.cssText="position:fixed;left:-9999px;top:-9999px;opacity:0",document.body.appendChild(t),t.select();try{document.execCommand("copy")}finally{document.body.removeChild(t)}return Promise.resolve()}const fx=({code:e})=>{const[t,n]=N.useState(!1),r=async()=>{try{await xs(e),n(!0),setTimeout(()=>n(!1),2e3)}catch{}};return h.jsx("button",{className:`copy-button${t?" copy-success":""}`,onClick:r,type:"button",children:t?h.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:h.jsx("polyline",{points:"20 6 9 17 4 12"})}):h.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[h.jsx("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2"}),h.jsx("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]})})},gn="computer://",ci="file://",zo="{{workspaceFolder}}",pi="bitfun.mobile.last_selected_model_id",hx=new Set(["js","jsx","ts","tsx","mjs","cjs","mts","cts","py","pyw","pyi","rs","go","java","kt","kts","scala","groovy","c","cpp","cc","cxx","h","hpp","hxx","hh","cs","rb","php","swift","vue","svelte","css","scss","less","sass","json","jsonc","yaml","yml","toml","xml","md","mdx","rst","txt","sh","bash","zsh","fish","ps1","bat","cmd","sql","graphql","gql","proto","lock","env","ini","cfg","conf","cj","ets","editorconfig","gitignore","log"]),gx=new Set(["pdf","doc","docx","xls","xlsx","ppt","pptx","odt","ods","odp","rtf","pages","numbers","key","png","jpg","jpeg","gif","bmp","svg","webp","ico","tiff","tif","zip","tar","gz","bz2","7z","rar","dmg","iso","xz","mp3","wav","ogg","flac","aac","m4a","wma","mp4","avi","mkv","mov","webm","wmv","flv","csv","tsv","sqlite","db","parquet","epub","mobi","apk","ipa","exe","msi","deb","rpm","ttf","otf","woff","woff2"]);function mn(e){let t=e;e.startsWith(gn)?t=e.slice(gn.length):e.startsWith(ci)?t=e.slice(ci.length):e.startsWith("file:")&&(t=e.slice(5)),t.startsWith(zo)&&(t=t.slice(zo.length),t.startsWith("/")&&(t=t.slice(1))),/^\/[A-Za-z]:[\\/]/.test(t)&&(t=t.slice(1));try{return decodeURIComponent(t)}catch{return t}}function mx(e){if(!e||e==="/")return null;let t;if(e.startsWith(gn)||e.startsWith(ci)||e.startsWith("file:"))t=mn(e);else{if(e.includes("://")||e.startsWith("#")||e.startsWith("//"))return null;t=mn(e)}if(t.startsWith("/")&&t.split("/").filter(Boolean).length<2)return null;const n=t.split("/").pop()||"",r=n.lastIndexOf(".");if(r<=0)return null;const i=n.slice(r+1).toLowerCase();if(!i)return null;if(t.startsWith("/")){if(hx.has(i))return null}else if(!gx.has(i))return null;return t}function bx(e){return e>=1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:e>=1024?`${Math.round(e/1024)} KB`:`${e} B`}const Vr=({size:e=20,style:t})=>h.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:t,"aria-hidden":"true",children:[h.jsx("path",{d:"M15.3929 4.05365L14.8912 4.61112L15.3929 4.05365ZM19.3517 7.61654L18.85 8.17402L19.3517 7.61654ZM21.654 10.1541L20.9689 10.4592V10.4592L21.654 10.1541ZM3.17157 20.8284L3.7019 20.2981H3.7019L3.17157 20.8284ZM20.8284 20.8284L20.2981 20.2981L20.2981 20.2981L20.8284 20.8284ZM14 21.25H10V22.75H14V21.25ZM2.75 14V10H1.25V14H2.75ZM21.25 13.5629V14H22.75V13.5629H21.25ZM14.8912 4.61112L18.85 8.17402L19.8534 7.05907L15.8947 3.49618L14.8912 4.61112ZM22.75 13.5629C22.75 11.8745 22.7651 10.8055 22.3391 9.84897L20.9689 10.4592C21.2349 11.0565 21.25 11.742 21.25 13.5629H22.75ZM18.85 8.17402C20.2034 9.3921 20.7029 9.86199 20.9689 10.4592L22.3391 9.84897C21.9131 8.89241 21.1084 8.18853 19.8534 7.05907L18.85 8.17402ZM10.0298 2.75C11.6116 2.75 12.2085 2.76158 12.7405 2.96573L13.2779 1.5653C12.4261 1.23842 11.498 1.25 10.0298 1.25V2.75ZM15.8947 3.49618C14.8087 2.51878 14.1297 1.89214 13.2779 1.5653L12.7405 2.96573C13.2727 3.16993 13.7215 3.55836 14.8912 4.61112L15.8947 3.49618ZM10 21.25C8.09318 21.25 6.73851 21.2484 5.71085 21.1102C4.70476 20.975 4.12511 20.7213 3.7019 20.2981L2.64124 21.3588C3.38961 22.1071 4.33855 22.4392 5.51098 22.5969C6.66182 22.7516 8.13558 22.75 10 22.75V21.25ZM1.25 14C1.25 15.8644 1.24841 17.3382 1.40313 18.489C1.56076 19.6614 1.89288 20.6104 2.64124 21.3588L3.7019 20.2981C3.27869 19.8749 3.02502 19.2952 2.88976 18.2892C2.75159 17.2615 2.75 15.9068 2.75 14H1.25ZM14 22.75C15.8644 22.75 17.3382 22.7516 18.489 22.5969C19.6614 22.4392 20.6104 22.1071 21.3588 21.3588L20.2981 20.2981C19.8749 20.7213 19.2952 20.975 18.2892 21.1102C17.2615 21.2484 15.9068 21.25 14 21.25V22.75ZM21.25 14C21.25 15.9068 21.2484 17.2615 21.1102 18.2892C20.975 19.2952 20.7213 19.8749 20.2981 20.2981L21.3588 21.3588C22.1071 20.6104 22.4392 19.6614 22.5969 18.489C22.7516 17.3382 22.75 15.8644 22.75 14H21.25ZM2.75 10C2.75 8.09318 2.75159 6.73851 2.88976 5.71085C3.02502 4.70476 3.27869 4.12511 3.7019 3.7019L2.64124 2.64124C1.89288 3.38961 1.56076 4.33855 1.40313 5.51098C1.24841 6.66182 1.25 8.13558 1.25 10H2.75ZM10.0298 1.25C8.15538 1.25 6.67442 1.24842 5.51887 1.40307C4.34232 1.56054 3.39019 1.8923 2.64124 2.64124L3.7019 3.7019C4.12453 3.27928 4.70596 3.02525 5.71785 2.88982C6.75075 2.75158 8.11311 2.75 10.0298 2.75V1.25Z",fill:"currentColor"}),h.jsx("path",{d:"M6 14.5H14",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),h.jsx("path",{d:"M6 18H11.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),h.jsx("path",{d:"M13 2.5V5C13 7.35702 13 8.53553 13.7322 9.26777C14.4645 10 15.643 10 18 10H22",stroke:"currentColor",strokeWidth:"1.5"})]}),Po=({path:e,onGetFileInfo:t,onDownload:n})=>{const{t:r}=Je(),[i,o]=N.useState({status:"loading"}),a=N.useRef(t);a.current=t,N.useEffect(()=>{let m=!1;return a.current(e).then(({name:w,size:S,mimeType:k})=>{m||o({status:"ready",name:w,size:S,mimeType:k})}).catch(w=>{m||o({status:"error",message:w instanceof Error?w.message:String(w)})}),()=>{m=!0}},[e]);const l=N.useCallback(async()=>{if(i.status!=="ready"&&i.status!=="done")return;const m=i;o({status:"downloading",name:m.name,size:m.size,mimeType:m.mimeType,progress:0});try{await n(e,(w,S)=>{o(k=>k.status!=="downloading"?k:{...k,progress:S>0?w/S:0})}),o({status:"done",name:m.name,size:m.size,mimeType:m.mimeType})}catch{o({status:"ready",name:m.name,size:m.size,mimeType:m.mimeType})}},[i,e,n]),s={display:"inline-flex",alignItems:"center",gap:"10px",padding:"10px 14px",border:"1px solid var(--border-subtle)",borderRadius:"10px",background:"var(--element-bg-subtle)",cursor:i.status==="ready"||i.status==="done"?"pointer":"default",maxWidth:"300px",verticalAlign:"middle",transition:"background 0.15s"},u="var(--color-text-muted)";if(i.status==="loading")return h.jsxs("span",{className:"file-card",style:s,children:[h.jsx(Vr,{size:20,style:{color:u,flexShrink:0}}),h.jsx("span",{style:{fontSize:"0.8rem",opacity:.5},children:r("chat.fileLoading")})]});if(i.status==="error")return h.jsxs("span",{className:"file-card",style:{...s,cursor:"default",opacity:.5},title:i.message,children:[h.jsx(Vr,{size:20,style:{color:u,flexShrink:0}}),h.jsx("span",{style:{fontSize:"0.8rem"},children:r("chat.fileUnavailable")})]});const{name:p,size:c}=i,f=i.status==="downloading",d=i.status==="done";return h.jsxs("span",{className:"file-card",style:s,onClick:l,role:"button",tabIndex:0,onKeyDown:m=>{(m.key==="Enter"||m.key===" ")&&l()},title:r(f?"chat.fileDownloading":d?"chat.fileDownloaded":"chat.clickToDownload"),children:[h.jsx(Vr,{size:20,style:{color:u,flexShrink:0}}),h.jsxs("span",{style:{minWidth:0,overflow:"hidden"},children:[h.jsx("span",{style:{display:"block",fontSize:"0.85rem",fontWeight:500,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:"var(--color-text-primary)"},children:p}),h.jsx("span",{style:{display:"block",fontSize:"0.75rem",color:"var(--color-text-muted)",marginTop:"2px"},children:bx(c)})]}),h.jsx("span",{style:{flexShrink:0,fontSize:"0.75rem",color:d?"var(--color-success)":"var(--color-text-muted)"},children:f?`${Math.round(i.progress*100)}%`:d?"✓":"↓"})]})},Gt=({content:e,onFileDownload:t,onGetFileInfo:n})=>{const{isDark:r}=Uo(),i=r?Ty:Cy,o=N.useMemo(()=>({code({className:a,children:l,...s}){const u=/language-(\w+)/.exec(a||""),p=String(l).replace(/\n$/,""),c=p.includes(` +`);return a?.startsWith("language-")||c?h.jsxs("div",{className:"code-block-wrapper",children:[h.jsx(fx,{code:p}),h.jsx(Pe,{language:u?.[1]||"text",style:i,showLineNumbers:!0,customStyle:{margin:0,borderRadius:"8px",fontSize:"0.8rem",lineHeight:"1.5"},codeTagProps:{style:{fontFamily:"var(--font-family-mono)"}},lineNumberStyle:{color:"var(--color-text-muted)",paddingRight:"1em",textAlign:"right",userSelect:"none",minWidth:"2.5em"},children:p})]}):h.jsx("code",{className:"inline-code",...s,children:l})},a({href:a,children:l}){const s=typeof a=="string"&&a.startsWith(gn);if(s&&n&&t){const u=mn(a);return h.jsx(Po,{path:u,onGetFileInfo:n,onDownload:t})}if(s&&t){const u=mn(a);return h.jsx("button",{className:"file-link",onClick:p=>{p.preventDefault(),p.stopPropagation(),t(u)},type:"button",style:{cursor:"pointer",color:"var(--color-accent-500)",textDecoration:"underline",background:"none",border:"none",font:"inherit",padding:0},children:l})}if(n&&t){const u=typeof a=="string"?mx(a):null;if(u)return h.jsx(Po,{path:u,onGetFileInfo:n,onDownload:t})}return typeof a=="string"&&(a.startsWith("http://")||a.startsWith("https://"))?h.jsx("a",{href:a,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--color-accent-500)",textDecoration:"underline"},children:l}):h.jsx("span",{style:{textDecoration:"underline",opacity:.7},children:l})},table({children:a}){return h.jsx("div",{className:"table-wrapper",children:h.jsx("table",{children:a})})},blockquote({children:a}){return h.jsx("blockquote",{className:"custom-blockquote",children:a})}}),[i,r,t,n]);return h.jsx(Jd,{remarkPlugins:[fg],components:o,urlTransform:a=>a.startsWith("computer://")||/^(https?|mailto|tel|file):/i.test(a)||a.startsWith("#")||a.startsWith("/")||!a.includes(":")?a:"",children:e})},di=({thinking:e,streaming:t,isLastItem:n=!1})=>{const{t:r}=Je(),[i,o]=N.useState(!!t),a=N.useRef(!1),l=N.useRef(null),[s,u]=N.useState({atTop:!0,atBottom:!0}),p=ws(e,!!t);N.useEffect(()=>{a.current||(t?o(!0):n||o(!1))},[t,n]),N.useEffect(()=>{if(!t||!i)return;const w=l.current;if(!w)return;w.scrollHeight-w.scrollTop-w.clientHeight<80&&(w.scrollTop=w.scrollHeight)},[p,t,i]);const c=N.useCallback(()=>{const w=l.current;w&&u({atTop:w.scrollTop<4,atBottom:w.scrollHeight-w.scrollTop-w.clientHeight<4})},[]),f=N.useCallback(()=>{a.current=!0,o(w=>!w)},[]);if(!e&&!t)return null;const d=e.length,m=t&&d===0?r("chat.thinking"):r("chat.thoughtCharacters",{count:d});return h.jsxs("div",{className:`chat-thinking ${t?"chat-thinking--streaming":""}`,children:[h.jsxs("button",{className:"chat-thinking__toggle",onClick:f,children:[h.jsx("span",{className:`chat-thinking__chevron ${i?"is-open":""}`,children:h.jsx("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"none",children:h.jsx("path",{d:"M6 4L10 8L6 12",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}),h.jsx("span",{className:"chat-thinking__label",children:m})]}),h.jsx("div",{className:`chat-thinking__expand-container ${i?"is-expanded":""}`,children:h.jsx("div",{className:"chat-thinking__expand-inner",children:e&&h.jsx("div",{className:`chat-thinking__content-wrapper ${s.atTop?"at-top":""} ${s.atBottom?"at-bottom":""}`,ref:l,onScroll:c,children:h.jsx("div",{className:"chat-thinking__content",children:h.jsx(Gt,{content:t?p:e})})})})})]})},bn={explore:"shared.tools.explore",read_file:"shared.tools.read",write_file:"shared.tools.write",list_directory:"tools.ls",bash:"shared.tools.shell",glob:"tools.glob",grep:"tools.grep",create_file:"shared.tools.write",delete_file:"tools.delete",Task:"tools.task",search:"shared.tools.search",edit_file:"shared.tools.edit",web_search:"tools.web",TodoWrite:"shared.tools.todo"},yx=({tool:e})=>{const{t}=Je(),[n,r]=N.useState(!1),i=N.useMemo(()=>{const u=e.tool_input;if(!u)return[];const p=u.todos||u.result?.todos;return Array.isArray(p)?p:[]},[e.tool_input]);if(i.length===0)return null;const o=i.filter(u=>u.status==="completed").length,a=o===i.length,l=i.find(u=>u.status==="in_progress"),s=u=>{switch(u){case"completed":return h.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"var(--color-success)",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[h.jsx("path",{d:"M22 11.08V12a10 10 0 1 1-5.93-9.14"}),h.jsx("path",{d:"m9 11 3 3L22 4"})]});case"in_progress":return h.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"var(--color-accent-500)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[h.jsx("circle",{cx:"12",cy:"12",r:"10"}),h.jsx("polygon",{points:"10 8 16 12 10 16 10 8",fill:"var(--color-accent-500)"})]});case"cancelled":return h.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"var(--color-error)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[h.jsx("circle",{cx:"12",cy:"12",r:"10"}),h.jsx("path",{d:"m15 9-6 6"}),h.jsx("path",{d:"m9 9 6 6"})]});default:return h.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"var(--color-text-muted)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:h.jsx("circle",{cx:"12",cy:"12",r:"10"})})}};return h.jsxs("div",{className:"chat-todo-card",children:[h.jsxs("div",{className:"chat-todo-card__header",onClick:()=>r(!n),children:[h.jsx("span",{className:"chat-todo-card__icon",children:h.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[h.jsx("rect",{x:"3",y:"5",width:"6",height:"6",rx:"1"}),h.jsx("path",{d:"m3 17 2 2 4-4"}),h.jsx("path",{d:"M13 6h8"}),h.jsx("path",{d:"M13 12h8"}),h.jsx("path",{d:"M13 18h8"})]})}),a&&!n?h.jsx("span",{className:"chat-todo-card__current chat-todo-card__current--done",children:t("chat.allTasksCompleted")}):l&&!n?h.jsx("span",{className:"chat-todo-card__current",children:l.content}):null,h.jsxs("span",{className:"chat-todo-card__right",children:[h.jsx("span",{className:"chat-todo-card__dots",children:i.map((u,p)=>h.jsx("span",{className:`chat-todo-card__dot chat-todo-card__dot--${u.status}`},u.id||p))}),h.jsxs("span",{className:"chat-todo-card__stats",children:[o,"/",i.length]})]}),h.jsx("span",{className:`chat-todo-card__chevron ${n?"is-expanded":""}`,children:h.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:h.jsx("path",{d:"m6 9 6 6 6-6"})})})]}),n&&h.jsx("div",{className:"chat-todo-card__list",children:i.map((u,p)=>h.jsxs("div",{className:`chat-todo-card__item chat-todo-card__item--${u.status}`,children:[s(u.status),h.jsx("span",{className:"chat-todo-card__item-text",children:u.content})]},u.id||p))})]})};function xx(e){const t=e.tool_input??(()=>{try{return JSON.parse(e.input_preview||"")}catch{return null}})();return t?{description:t.description,agentType:t.subagent_type}:null}function kx(e,t){if(e.type==="thinking"){const n=(e.content||"").length;return t("chat.thoughtCharacters",{count:n})}if(e.type==="tool"&&e.tool){const n=e.tool,r=n.input_preview?`: ${n.input_preview}`:"";return`${n.name}${r}`}if(e.type==="text"){const n=(e.content||"").length;return t("chat.textCharacters",{count:n})}return""}const ks=({tool:e,now:t,subItems:n=[],onCancelTool:r})=>{const{t:i,language:o}=Je(),a=N.useRef(null),l=N.useRef(0),[s,u]=N.useState(!1),p=e.status==="running",c=e.status==="completed",f=e.status==="failed"||e.status==="error",d=p&&!!r,m=xx(e),w=c&&e.duration_ms!=null?qt(e.duration_ms):p&&e.start_ms?qt(t-e.start_ms):"",S=p?"running":c?"done":f?"error":"pending",k=n.filter(_=>_.type==="tool"&&_.tool),x=k.filter(_=>_.tool.status==="completed").length,b=k.filter(_=>_.tool.status==="running").length;return N.useEffect(()=>{s&&n.length>l.current&&a.current&&(a.current.scrollTop=a.current.scrollHeight),l.current=n.length},[n.length,s]),h.jsxs("div",{className:`chat-task-card chat-task-card--${S}`,children:[h.jsxs("div",{className:"chat-task-card__header",children:[h.jsx("span",{className:"chat-tool-card__icon",children:p?h.jsx("span",{className:"chat-tool-card__spinner"}):c?h.jsx("span",{className:"chat-tool-card__check",children:h.jsx("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",children:h.jsx("path",{d:"M3 8.5L6.5 12L13 4",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}):f?h.jsx("span",{className:"chat-tool-card__error-icon",children:h.jsx("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",children:h.jsx("path",{d:"M4 4L12 12M12 4L4 12",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"})})}):h.jsx("span",{className:"chat-tool-card__spinner"})}),h.jsx("span",{className:"chat-tool-card__name",children:m?.description||i("chat.task")}),m?.agentType&&h.jsx("span",{className:"chat-tool-card__type",children:m.agentType}),w&&h.jsx("span",{className:"chat-tool-card__duration",children:w}),d&&h.jsx("button",{className:"chat-tool-card__cancel",onClick:_=>{_.stopPropagation(),r?.(e.id)},"aria-label":i("common.cancel"),children:h.jsx("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"none",children:h.jsx("rect",{x:"3",y:"3",width:"10",height:"10",rx:"2",fill:"currentColor"})})})]}),n.length>0&&h.jsxs(h.Fragment,{children:[h.jsxs("div",{className:"chat-task-card__summary",onClick:()=>u(_=>!_),children:[h.jsx("span",{className:"chat-task-card__stat",children:i("chat.toolCalls",{count:k.length,suffix:Fi(o,k.length)})}),h.jsxs("span",{className:"chat-task-card__stat-right",children:[h.jsx("span",{className:"chat-task-card__stat--done",children:i("chat.done",{count:x})}),b>0&&h.jsx("span",{className:"chat-task-card__stat--running",children:i("chat.running",{count:b})})]}),h.jsx("span",{className:`chat-task-card__chevron ${s?"is-expanded":""}`,children:h.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:h.jsx("path",{d:"m6 9 6 6 6-6"})})})]}),s&&h.jsx("div",{className:"chat-task-card__steps",ref:a,children:n.map((_,E)=>{if(_.type==="thinking")return h.jsxs("div",{className:"chat-task-card__step chat-task-card__step--thinking",children:[h.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:h.jsx("path",{d:"m6 9 6 6 6-6"})}),h.jsx("span",{children:kx(_,i)})]},`sub-think-${E}`);if(_.type==="tool"&&_.tool){const g=_.tool,T=g.status==="completed",O=g.status==="failed"||g.status==="error";return h.jsxs("div",{className:`chat-task-card__step chat-task-card__step--tool ${T?"is-done":O?"is-error":"is-running"}`,children:[T?h.jsx("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"none",children:h.jsx("path",{d:"M3 8.5L6.5 12L13 4",stroke:"var(--color-success)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})}):O?h.jsx("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"none",children:h.jsx("path",{d:"M4 4L12 12M12 4L4 12",stroke:"var(--color-error)",strokeWidth:"2",strokeLinecap:"round"})}):h.jsx("span",{className:"chat-task-card__step-spinner"}),h.jsx("span",{className:"chat-task-card__step-name",children:g.name}),(()=>{const A=vs(g);return A?h.jsx("span",{className:"chat-task-card__step-preview",children:A}):null})(),T&&g.duration_ms!=null&&h.jsx("span",{className:"chat-task-card__step-duration",children:qt(g.duration_ms)})]},`sub-tool-${g.id}-${E}`)}return null})})]})]})};function vs(e){if(!e.input_preview)return null;try{const t=JSON.parse(e.input_preview);if(!t||typeof t!="object")return null;const n=o=>{const a=o.replace(/\\/g,"/").split("/");return a[a.length-1]||o};let r=null;const i=t.file_path||t.path;switch(e.name){case"Read":case"Write":case"Edit":case"LS":case"StrReplace":case"delete_file":r=i?n(i):null;break;case"Glob":case"Grep":r=t.pattern||null;break;case"Bash":case"Shell":r=t.description||t.command||null;break;case"web_search":case"WebSearch":r=t.search_term||t.query||null;break;case"WebFetch":r=t.url||null;break;case"SemanticSearch":r=t.query||null;break;default:r=Object.values(t).find(a=>typeof a=="string"&&a.length>0&&a.length<80)||null}return r?r.length>60?r.slice(0,60)+"…":r:null}catch{return null}}const Bo=({tool:e,now:t,onCancelTool:n})=>{const{t:r}=Je(),i=e.name.toLowerCase().replace(/[\s-]/g,"_"),o=bn[i]||bn[e.name],a=o?r(o):"Tool",l=e.status==="running",s=e.status==="completed",u=e.status==="failed"||e.status==="error",p=l&&!!n,c=vs(e),f=s&&e.duration_ms!=null?qt(e.duration_ms):l&&e.start_ms?qt(t-e.start_ms):"",d=l?"running":s?"done":u?"error":"pending";return h.jsx("div",{className:`chat-tool-card chat-tool-card--${d}`,children:h.jsxs("div",{className:"chat-tool-card__row",children:[h.jsx("span",{className:"chat-tool-card__icon",children:l?h.jsx("span",{className:"chat-tool-card__spinner"}):s?h.jsx("span",{className:"chat-tool-card__check",children:h.jsx("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",children:h.jsx("path",{d:"M3 8.5L6.5 12L13 4",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}):u?h.jsx("span",{className:"chat-tool-card__error-icon",children:h.jsx("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",children:h.jsx("path",{d:"M4 4L12 12M12 4L4 12",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"})})}):h.jsx("span",{className:"chat-tool-card__spinner"})}),h.jsxs("span",{className:"chat-tool-card__name",children:[e.name,c&&h.jsxs("span",{className:"chat-tool-card__preview",children:[" ",c]})]}),h.jsx("span",{className:"chat-tool-card__type",children:a}),f&&h.jsx("span",{className:"chat-tool-card__duration",children:f}),p&&h.jsx("button",{className:"chat-tool-card__cancel",onClick:m=>{m.stopPropagation(),n?.(e.id)},"aria-label":r("common.cancel"),children:h.jsx("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"none",children:h.jsx("rect",{x:"3",y:"3",width:"10",height:"10",rx:"2",fill:"currentColor"})})})]})})},vx=new Set(["Read","Grep","Glob","SemanticSearch"]);function wx(e,t){const n=new Map,r=[];for(const i of e){const o=i.name.toLowerCase().replace(/[\s-]/g,"_"),a=bn[o]||bn[i.name],l=a?t(a):i.name,s=l.toLowerCase(),u=n.get(s);if(u){u.count+=1;continue}n.set(s,{label:l,count:1}),r.push(s)}return r.map(i=>{const o=n.get(i);return`${o.label} ${o.count}`}).join(", ")}const Sx=({tools:e})=>{const{t}=Je(),[n,r]=N.useState(!1);if(e.length===0)return null;const i=e.filter(s=>s.status==="completed").length,o=i===e.length,a=wx(e,t),l=o?t("chat.readToolsDone",{summary:a}):t("chat.readToolsRunning",{summary:a,doneCount:i});return h.jsxs("div",{className:`chat-thinking ${o?"":"chat-thinking--streaming"}`,children:[h.jsxs("button",{className:"chat-thinking__toggle",onClick:()=>r(s=>!s),children:[h.jsx("span",{className:`chat-thinking__chevron ${n?"is-open":""}`,children:h.jsx("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"none",children:h.jsx("path",{d:"M6 4L10 8L6 12",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}),h.jsx("span",{className:"chat-thinking__label",children:l})]}),n&&h.jsx("div",{className:"chat-thinking__content-wrapper at-top at-bottom",children:h.jsx("div",{className:"chat-thinking__content",children:e.map(s=>{const u=s.input_preview||"";return h.jsxs("div",{style:{fontSize:"12px",padding:"2px 0",opacity:.8},children:[s.status==="completed"?"✓":"⋯"," ",s.name," ",u]},s.id)})})})]})},_x=2,fi=({tools:e,now:t,onCancelTool:n})=>{const{t:r,language:i}=Je(),o=N.useRef(null),a=N.useRef(0),[l,s]=N.useState(!1);if(N.useEffect(()=>{l&&e.length>a.current&&o.current&&(o.current.scrollTop=o.current.scrollHeight),a.current=e.length},[e.length,l]),!e||e.length===0)return null;if(e.length<=_x)return h.jsx("div",{className:"chat-tool-list",children:e.map(c=>h.jsx(Bo,{tool:c,now:t,onCancelTool:n},c.id))});const u=e.filter(c=>c.status==="running").length,p=e.filter(c=>c.status==="completed").length;return h.jsxs("div",{className:"chat-tool-list chat-tool-list--collapsed",children:[h.jsxs("div",{className:"chat-tool-list__header",onClick:()=>s(c=>!c),children:[h.jsx("span",{className:"chat-tool-list__count",children:r("chat.toolCalls",{count:e.length,suffix:Fi(i,e.length)})}),h.jsxs("span",{className:"chat-tool-list__stats",children:[p>0&&h.jsx("span",{className:"chat-tool-list__stat chat-tool-list__stat--done",children:r("chat.done",{count:p})}),u>0&&h.jsx("span",{className:"chat-tool-list__stat chat-tool-list__stat--running",children:r("chat.running",{count:u})})]}),h.jsx("span",{className:`chat-tool-list__chevron ${l?"is-expanded":""}`,children:h.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:h.jsx("path",{d:"m6 9 6 6 6-6"})})})]}),l&&h.jsx("div",{className:"chat-tool-list__scroll",ref:o,children:e.map(c=>h.jsx(Bo,{tool:c,now:t,onCancelTool:n},c.id))})]})},Gr=()=>h.jsxs("span",{className:"chat-msg__typing",children:[h.jsx("span",{}),h.jsx("span",{}),h.jsx("span",{})]});function ws(e,t){const[n,r]=N.useState(t?"":e),i=N.useRef(t?0:e.length),o=N.useRef(e),a=N.useRef(null),l=N.useRef(3);return N.useEffect(()=>{if(!t){a.current&&(clearInterval(a.current),a.current=null),i.current=e.length,o.current=e,r(e);return}o.current=e,e.length0){const c=26.666666666666668;l.current=Math.max(Math.ceil(s/c),2),a.current||(a.current=setInterval(()=>{const f=o.current,d=i.current;if(d>=f.length){a.current&&(clearInterval(a.current),a.current=null);return}const m=Math.min(d+l.current,f.length);i.current=m,r(f.slice(0,m))},30))}},[e,t]),N.useEffect(()=>()=>{a.current&&clearInterval(a.current)},[]),n}const Ss=({content:e,onFileDownload:t,onGetFileInfo:n})=>{const r=ws(e,!0);return h.jsx(Gt,{content:r,onFileDownload:t,onGetFileInfo:n})},yn=e=>!e||e.name!=="AskUserQuestion"||!e.tool_input?!1:!["completed","failed","cancelled","rejected"].includes(e.status);function Ex(e,t){const n=t.split(".");let r=e;for(const i of n){if(!r||typeof r!="object"||!(i in r))return null;r=r[i]}return typeof r=="string"?r:null}const Cx=new Set(["other",...Object.values(qs).map(e=>Ex(e,"common.other")).filter(e=>!!e).map(e=>e.trim().toLowerCase())]),ht=e=>{const t=(e||"").trim().toLowerCase();return Cx.has(t)},_s=({tool:e,onAnswer:t})=>{const{t:n,language:r}=Je(),i=e.tool_input?.questions||[],[o,a]=N.useState({}),[l,s]=N.useState({}),[u,p]=N.useState(!1),[c,f]=N.useState(!1),d=N.useMemo(()=>i.map(k=>{const x=Array.isArray(k.options)?k.options:[],b=x.some(_=>ht(_?.label));return{...k,options:x,hasBuiltInOther:b}}),[i]);if(d.length===0)return null;const m=(k,x,b)=>{a(_=>{if(b){const E=_[k]||[];return{..._,[k]:E.includes(x)?E.filter(g=>g!==x):[...E,x]}}return{..._,[k]:_[k]===x?void 0:x}})},w=async()=>{if(!S||u||c)return;const k={};d.forEach((x,b)=>{const _=o[b],E=(l[b]||"").trim();Array.isArray(_)?k[String(b)]=_.map(g=>ht(g)&&E||g):ht(_)?k[String(b)]=E||_:k[String(b)]=_??""}),p(!0);try{await t(e.id,k),f(!0)}finally{p(!1)}},S=d.every((k,x)=>{const b=o[x];return(k.multiSelect?Array.isArray(b)&&b.length>0:!!b)?!(Array.isArray(b)?b.some(g=>ht(g)):ht(b))||!!(l[x]||"").trim():!1});return h.jsxs("div",{className:"chat-ask-card",children:[h.jsxs("div",{className:"chat-ask-card__header",children:[h.jsx("span",{className:"chat-ask-card__count",children:n("chat.askQuestionCount",{count:i.length,suffix:Fi(r,i.length)})}),!c&&!u&&h.jsx("span",{className:"chat-ask-card__waiting",children:n("chat.waiting")})]}),d.map((k,x)=>{const b=o[x],_=Array.isArray(b)?b.some(E=>ht(E)):ht(b);return h.jsxs("div",{className:"chat-ask-card__question",children:[h.jsxs("div",{className:"chat-ask-card__question-header",children:[h.jsx("span",{className:"chat-ask-card__tag",children:k.header}),h.jsx("span",{className:"chat-ask-card__question-text",children:k.question})]}),h.jsxs("div",{className:"chat-ask-card__options",children:[(k.options||[]).map((E,g)=>{const T=k.multiSelect?(o[x]||[]).includes(E.label):o[x]===E.label;return h.jsxs("button",{className:`chat-ask-card__option ${T?"is-selected":""}`,onClick:()=>m(x,E.label,k.multiSelect),disabled:c||u,children:[h.jsx("span",{className:`chat-ask-card__radio ${k.multiSelect?"chat-ask-card__radio--multi":""}`,children:T&&h.jsx("svg",{width:"8",height:"8",viewBox:"0 0 16 16",fill:"none",children:h.jsx("path",{d:"M3 8L6.5 11.5L13 4.5",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round"})})}),h.jsx("span",{className:"chat-ask-card__option-label",children:E.label}),E.description&&h.jsx("span",{className:"chat-ask-card__option-desc",children:E.description})]},g)}),!k.hasBuiltInOther&&h.jsxs("button",{className:`chat-ask-card__option ${_?"is-selected":""}`,onClick:()=>m(x,"Other",k.multiSelect),disabled:c||u,children:[h.jsx("span",{className:`chat-ask-card__radio ${k.multiSelect?"chat-ask-card__radio--multi":""}`,children:_&&h.jsx("svg",{width:"8",height:"8",viewBox:"0 0 16 16",fill:"none",children:h.jsx("path",{d:"M3 8L6.5 11.5L13 4.5",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round"})})}),h.jsx("span",{className:"chat-ask-card__option-label",children:n("common.other")}),h.jsx("span",{className:"chat-ask-card__option-desc",children:n("common.customTextInput")})]}),_&&h.jsx("input",{className:"chat-ask-card__custom-input",placeholder:n("common.typeYourAnswer"),value:l[x]||"",onChange:E=>s(g=>({...g,[x]:E.target.value})),disabled:c||u})]})]},x)}),h.jsxs("button",{className:"chat-ask-card__submit chat-ask-card__submit--bottom",disabled:!S||c||u,onClick:w,children:[h.jsx("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",children:h.jsx("path",{d:"M2 8L6 12L14 4",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})}),n(c?"common.submitted":u?"common.submitting":"common.submit")]})]})};function Es(e){const t=[];let n=null;for(const r of e){if(r.type==="tool"&&r.tool?.name==="Task"){const i={...r,subItems:[]};t.push(i),n=i;continue}if(r.is_subagent&&n){n.subItems.push(r);continue}r.is_subagent||t.push(r)}return t}function Et(e){const t=[];for(const n of e){const r=t[t.length-1];r&&r.type===n.type?r.entries.push(n):t.push({type:n.type,entries:[n]})}return t}function Cs(e,t,n){return n?e.map((r,i)=>h.jsx(_s,{tool:r.tool,onAnswer:n},`${t}-ask-${r.tool.id}-${i}`)):null}function Ct(e,t,n,r,i,o,a,l){return e.map((s,u)=>{if(s.type==="thinking"){const p=s.entries.map(f=>f.content||"").join(` + +`),c=l&&u===e.length-1;return h.jsx(di,{thinking:p,streaming:c,isLastItem:c},`${t}-thinking-${u}`)}if(s.type==="tool"){const p=[];let c=[],f=[];const d=()=>{f.length>0&&(p.push(h.jsx(Sx,{tools:f},`${t}-read-${u}-${p.length}`)),f=[])},m=()=>{c.length>0&&(p.push(h.jsx(fi,{tools:c,now:n,onCancelTool:r},`${t}-tl-${u}-${p.length}`)),c=[])},w=()=>{d(),m()};for(const S of s.entries)S.tool?.name==="Task"?(w(),p.push(h.jsx(ks,{tool:S.tool,now:n,subItems:S.subItems,onCancelTool:r},`${t}-task-${u}-${p.length}`))):S.tool?.name==="TodoWrite"?(w(),p.push(h.jsx(yx,{tool:S.tool},`${t}-todo-${u}-${p.length}`))):S.tool&&vx.has(S.tool.name)?(m(),f.push(S.tool)):S.tool&&(d(),c.push(S.tool));return w(),h.jsx(rt.Fragment,{children:p},`${t}-tool-${u}`)}if(s.type==="text"){const p=s.entries.map(c=>c.content||"").join("");return p?h.jsx("div",{className:"chat-msg__assistant-content",children:i?h.jsx(Ss,{content:p,onFileDownload:o,onGetFileInfo:a}):h.jsx(Gt,{content:p,onFileDownload:o,onGetFileInfo:a})},`${t}-text-${u}`):null}return null})}function $o(e,t,n,r,i,o){const a=Es(e),l=a.filter(c=>yn(c.tool));if(l.length===0)return Ct(Et(a),"ordered",t,n,!1,i,o);const s=[],u=[];let p=!1;for(const c of a)yn(c.tool)?p=!0:p?u.push(c):s.push(c);return h.jsxs(h.Fragment,{children:[Ct(Et(s),"ordered-before",t,n,!1,i,o),Cs(l,"ordered",r),Ct(Et(u),"ordered-after",t,n,!1,i,o)]})}function Tx(e,t,n,r,i,o,a){const l=Es(e),s=l.filter(d=>yn(d.tool)),u=d=>{n.cancelTool(d,"User cancelled").catch(m=>{r(String(m))})};if(s.length===0)return Ct(Et(l),"active",t,u,!0,o,a,!0);const p=[],c=[];let f=!1;for(const d of l)yn(d.tool)?f=!0:f?c.push(d):p.push(d);return h.jsxs(h.Fragment,{children:[Ct(Et(p),"active-before",t,u,!0,o,a,!0),Cs(s,"active",i),Ct(Et(c),"active-after",t,u,!0,o,a,!0)]})}const Ax=({isDark:e})=>h.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:e?h.jsx("path",{d:"M8 1.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM3 8a5 5 0 0 1 5-5v10a5 5 0 0 1-5-5Z",fill:"currentColor"}):h.jsx("path",{d:"M8 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-1 0v-1A.5.5 0 0 1 8 1Zm0 11a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-1 0v-1A.5.5 0 0 1 8 12Zm7-4a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1 0-1h1A.5.5 0 0 1 15 8ZM3 8a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1 0-1h1A.5.5 0 0 1 3 8Zm9.95-3.54a.5.5 0 0 1 0 .71l-.71.7a.5.5 0 1 1-.7-.7l.7-.71a.5.5 0 0 1 .71 0ZM5.46 11.24a.5.5 0 0 1 0 .71l-.7.71a.5.5 0 0 1-.71-.71l.7-.71a.5.5 0 0 1 .71 0Zm7.08 1.42a.5.5 0 0 1-.7 0l-.71-.71a.5.5 0 0 1 .7-.7l.71.7a.5.5 0 0 1 0 .71ZM5.46 4.76a.5.5 0 0 1-.71 0l-.71-.7a.5.5 0 0 1 .71-.71l.7.7a.5.5 0 0 1 0 .71ZM8 5a3 3 0 1 1 0 6 3 3 0 0 1 0-6Z",fill:"currentColor"})}),qo=({className:e,size:t=10})=>h.jsxs("svg",{className:e,width:t,height:t,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[h.jsx("path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.937A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .962 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.582a.5.5 0 0 1 0 .962L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.962 0z"}),h.jsx("path",{d:"M20 3v4"}),h.jsx("path",{d:"M22 5h-4"}),h.jsx("path",{d:"M4 17v2"}),h.jsx("path",{d:"M5 18H3"})]});function Ts(e){const t=e.trim();return t?t.charAt(0).toUpperCase()+t.slice(1):"Unknown"}function Lx(e){const t=e.name?.trim();return t||Ts(e.provider)}function Nx(e){return e?`${Math.round(e/1e3)}k`:null}function Ix(e){return e.enabled&&Array.isArray(e.capabilities)&&e.capabilities.includes("text_chat")}function zi(e,t){const n=e?.trim();if(!n||n==="auto"||n==="default")return"auto";if(n==="primary"||n==="fast"){const r=n==="primary"?t?.default_models?.primary:t?.default_models?.fast;return r&&At(r,t)?n:"auto"}return At(n,t)?n:"auto"}function jx(){return typeof window>"u"?null:window.localStorage.getItem(pi)?.trim()||null}function Zr(e){if(typeof window>"u")return;const t=e.trim();if(!t){window.localStorage.removeItem(pi);return}window.localStorage.setItem(pi,t)}function Rx(e,t){const n=e?.trim();if(!n)return{modelId:null,fellBackToAuto:!1};const r=zi(n,t);return{modelId:r,fellBackToAuto:r==="auto"&&n!=="auto"&&n!=="default"}}function At(e,t){return t&&t.models.find(n=>n.id===e)||null}function Ut(e){if(!e)return null;const t=[Lx(e)],n=Nx(e.context_window);return n&&t.push(n),t.join(" · ")}function un(e){return e&&(e.model_name||e.name)||""}function hi(e){return e?e.reasoning_mode?e.reasoning_mode==="enabled"||e.reasoning_mode==="adaptive":!!e.enable_thinking_process:!1}function Ox(e,t,n){if(e==="auto")return{label:n("chat.modelAuto"),meta:n("chat.modelAutoDesc"),enableThinking:!1};if(e==="primary"||e==="fast"){const i=e==="primary"?t?.default_models?.primary:t?.default_models?.fast,o=i?At(i,t):null;return{label:n(o?e==="primary"?"chat.modelPrimary":"chat.modelFast":"chat.modelAuto"),meta:Ut(o)||n("chat.modelAutoDesc"),enableThinking:hi(o),reasoningEffort:o?.reasoning_effort}}const r=At(e,t);return r?{label:un(r),meta:Ut(r),enableThinking:hi(r),reasoningEffort:r.reasoning_effort}:{label:n("chat.modelAuto"),meta:n("chat.modelAutoDesc"),enableThinking:!1}}const Dx=({catalog:e,selectedModelId:t,disabled:n,onSelect:r})=>{const{t:i}=Je(),[o,a]=N.useState(!1),l=N.useRef(null),s=N.useMemo(()=>zi(t,e),[e,t]),u=N.useMemo(()=>(e?.models||[]).filter(Ix),[e]),p=N.useMemo(()=>At(e?.default_models?.primary||"",e),[e]),c=N.useMemo(()=>At(e?.default_models?.fast||"",e),[e]),f=N.useMemo(()=>Ox(s,e,i),[e,s,i]);if(N.useEffect(()=>{if(!o)return;const m=w=>{l.current&&!l.current.contains(w.target)&&a(!1)};return document.addEventListener("mousedown",m),()=>document.removeEventListener("mousedown",m)},[o]),!e)return null;const d=async m=>{await r(m),a(!1)};return h.jsxs("div",{className:"chat-model-selector",ref:l,children:[h.jsxs("button",{className:`chat-model-selector__trigger${o?" chat-model-selector__trigger--open":""}`,type:"button",onClick:()=>a(m=>!m),disabled:n,"aria-label":i("chat.modelSelection"),children:[h.jsx("span",{className:"chat-model-selector__icon","aria-hidden":"true",children:h.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",children:[h.jsx("rect",{x:"4",y:"4",width:"6",height:"6",rx:"1.5",stroke:"currentColor",strokeWidth:"1.7"}),h.jsx("rect",{x:"14",y:"4",width:"6",height:"6",rx:"1.5",stroke:"currentColor",strokeWidth:"1.7"}),h.jsx("rect",{x:"9",y:"14",width:"6",height:"6",rx:"1.5",stroke:"currentColor",strokeWidth:"1.7"}),h.jsx("path",{d:"M10 7h4M12 10v4",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round"})]})}),h.jsxs("span",{className:"chat-model-selector__name",children:[h.jsx("span",{className:"chat-model-selector__name-text",children:f.label}),f.enableThinking&&h.jsx(qo,{className:"chat-model-selector__thinking",size:9})]}),f.reasoningEffort&&h.jsx("span",{className:"chat-model-selector__effort",children:f.reasoningEffort}),h.jsx("span",{className:"chat-model-selector__chevron","aria-hidden":"true",children:h.jsx("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"none",children:h.jsx("path",{d:"M4 6L8 10L12 6",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})})]}),o&&h.jsxs("div",{className:"chat-model-selector__dropdown",children:[h.jsx("div",{className:"chat-model-selector__header",children:i("chat.modelSelection")}),h.jsx("button",{className:`chat-model-selector__option${s==="auto"?" is-selected":""}`,type:"button",onClick:()=>{d("auto")},children:h.jsxs("span",{className:"chat-model-selector__option-main",children:[h.jsx("span",{className:"chat-model-selector__option-name",children:i("chat.modelAuto")}),h.jsx("span",{className:"chat-model-selector__option-meta",children:i("chat.modelAutoDesc")})]})}),h.jsx("button",{className:`chat-model-selector__option${s==="primary"?" is-selected":""}`,type:"button",onClick:()=>{d("primary")},children:h.jsxs("span",{className:"chat-model-selector__option-main",children:[h.jsx("span",{className:"chat-model-selector__option-name",children:i("chat.modelPrimary")}),h.jsxs("span",{className:"chat-model-selector__option-meta chat-model-selector__option-meta--stacked",children:[h.jsx("span",{className:"chat-model-selector__option-meta-line",children:un(p)||i("chat.modelAuto")}),h.jsx("span",{className:"chat-model-selector__option-meta-line",children:Ut(p)||i("chat.modelAutoDesc")})]})]})}),h.jsx("button",{className:`chat-model-selector__option${s==="fast"?" is-selected":""}`,type:"button",onClick:()=>{d("fast")},children:h.jsxs("span",{className:"chat-model-selector__option-main",children:[h.jsx("span",{className:"chat-model-selector__option-name",children:i("chat.modelFast")}),h.jsxs("span",{className:"chat-model-selector__option-meta chat-model-selector__option-meta--stacked",children:[h.jsx("span",{className:"chat-model-selector__option-meta-line",children:un(c)||i("chat.modelAuto")}),h.jsx("span",{className:"chat-model-selector__option-meta-line",children:Ut(c)||i("chat.modelAutoDesc")})]})]})}),h.jsx("div",{className:"chat-model-selector__divider"}),h.jsx("div",{className:"chat-model-selector__list",children:u.map(m=>{const w=s===m.id;return h.jsx("button",{className:`chat-model-selector__option${w?" is-selected":""}`,type:"button",onClick:()=>{d(m.id)},children:h.jsxs("span",{className:"chat-model-selector__option-main",children:[h.jsxs("span",{className:"chat-model-selector__option-name",children:[h.jsx("span",{className:"chat-model-selector__option-name-text",children:un(m)}),hi(m)&&h.jsx(qo,{className:"chat-model-selector__option-thinking",size:10})]}),h.jsx("span",{className:"chat-model-selector__option-meta",children:Ut(m)||Ts(m.provider)})]})},m.id)})})]})]})},Kr=["agentic","Plan","debug"],Fx=({sessionMgr:e,sessionId:t,sessionName:n,onBack:r,autoFocus:i})=>{const{t:o}=Je(),{getMessages:a,setMessages:l,appendNewMessages:s,activeTurn:u,setActiveTurn:p,error:c,setError:f,currentWorkspace:d,updateSessionName:m}=Ot(),{isDark:w,toggleTheme:S}=Uo(),k=N.useMemo(()=>[{id:"agentic",label:o("chat.modeAgentic")},{id:"Plan",label:o("chat.modePlan")},{id:"debug",label:o("chat.modeDebug")}],[o]),x=a(t),[b,_]=N.useState(""),[E,g]=N.useState("agentic"),T=N.useCallback(()=>{g(I=>{const j=Kr.indexOf(I);return Kr[(j+1)%Kr.length]})},[]),[O,A]=N.useState(n),[C,R]=N.useState(null),[z,U]=N.useState("auto"),[P,F]=N.useState(!1),[q,Y]=N.useState([]),[$,ae]=N.useState(!1),[v,K]=N.useState(null),[V,y]=N.useState(!!i),Z=N.useRef(null),re=N.useRef(null),ee=N.useRef(null),se=N.useRef(null),[fe,Ce]=N.useState(!1),[Ae,Ne]=N.useState(!0),Ke=N.useRef(!1),Be=N.useRef(!0),ut=N.useRef(!1),Ue=N.useRef(null),Ie=N.useRef(null),[ct,He]=N.useState(new Set),[Xe,Me]=N.useState(null),[pt,Ge]=N.useState(!1),[ge,we]=N.useState(null),[Te,L]=N.useState(null),[D,B]=N.useState(!1),H=N.useRef(),te=N.useRef({x:0,y:0}),xe=N.useRef(),oe=u!=null&&u.status==="active",[ye,Oe]=N.useState(()=>Date.now()),Se=N.useCallback(async(I,j)=>{try{await e.answerQuestion(I,j)}catch(G){throw f(String(G)),G}},[e,f]),me=N.useCallback(I=>e.getFileInfo(I,t),[t,e]),_e=N.useCallback(async(I,j)=>{try{const{name:G,contentBase64:Q,mimeType:le}=await e.readFile(I,t,j),ke=atob(Q),Ee=new Uint8Array(ke.length);for(let xt=0;xt{try{const I=await e.getModelCatalog(t);if(R(I),!ut.current){const j=Rx(jx(),I),G=zi(I.session_model_id||"auto",I),Q=j.modelId||G;if(j.modelId&&j.modelId!==G){const le=await e.setSessionModel(t,j.modelId);U(le||"auto"),j.fellBackToAuto&&(!le||le==="auto")&&Zr("auto")}else U(Q||"auto"),j.fellBackToAuto&&Q==="auto"&&Zr("auto");ut.current=!0}return I}catch(I){return f(I instanceof Error?I.message:String(I)),null}},[t,e,f]),We=N.useCallback(async I=>{if(!(P||oe||$)){F(!0);try{const j=await e.setSessionModel(t,I);U(j||"auto"),Zr(j||"auto")}catch(j){f(j instanceof Error?j.message:String(j))}finally{F(!1)}}},[$,oe,P,t,e,f]);N.useEffect(()=>{if(!oe)return;const I=setInterval(()=>Oe(Date.now()),500);return()=>clearInterval(I)},[oe]),N.useEffect(()=>{if(!c)return;const I=setTimeout(()=>f(null),5e3);return()=>clearTimeout(I)},[c,f]),N.useEffect(()=>{if(!Xe)return;const I=setTimeout(()=>Me(null),3200);return()=>clearTimeout(I)},[Xe]);const be=N.useCallback(async I=>{if(!(Ke.current||!Be.current&&I))try{Ke.current=!0,Ce(!0);const j=await e.getSessionMessages(t,50,I);if(I){const G=a(t);l(t,[...j.messages,...G])}else l(t,j.messages);Ne(j.has_more),Be.current=j.has_more}catch(j){f(j.message)}finally{Ke.current=!1,Ce(!1)}},[e,t,l,f,a]),Ye=()=>{H.current&&(clearTimeout(H.current),H.current=void 0)},It=N.useCallback((I,j)=>{D||(Ye(),te.current={x:j.touches[0].clientX,y:j.touches[0].clientY},H.current=setTimeout(()=>{we(I),H.current=void 0},500))},[D]),bt=N.useCallback(I=>{const j=Math.abs(I.touches[0].clientX-te.current.x),G=Math.abs(I.touches[0].clientY-te.current.y);(j>10||G>10)&&Ye()},[]),tt=N.useCallback(()=>{Ye()},[]),at=N.useCallback(I=>{xe.current&&clearTimeout(xe.current),L(I),xe.current=setTimeout(()=>L(null),2e3)},[]),jt=N.useCallback(async()=>{if(!ge)return;const I=Wr(ge.content);try{await xs(I),at(o("chat.messageCopied"))}catch{at(o("chat.copyFailed"))}we(null)},[ge,at,o]),As=N.useCallback(async()=>{if(!ge||ge.role!=="user")return;const I=Wr(ge.content);if(!I)return;we(null);const j=ge.images?.length?ge.images.map((G,Q)=>{const le=G.data_url.split(";")[0]?.replace("data:","")||"image/png";return{id:`mobile_resend_${Date.now()}_${Q}`,data_url:G.data_url,mime_type:le,metadata:{name:G.name,source:"remote"}}}):void 0;try{await e.sendMessage(t,I,E,j),se.current?.nudge()}catch(G){f(G.message)}},[ge,e,t,E,f]),Ls=N.useCallback(async()=>{if(ge){B(!0);try{Ot.getState().deleteMessage(t,ge.id),at(o("chat.messageDeleted"))}finally{B(!1),we(null)}}},[ge,t,at,o]);N.useEffect(()=>()=>{Ye(),xe.current&&clearTimeout(xe.current)},[]);const yt=N.useRef(!0),dt=N.useRef(!1),_n=N.useRef(!1),Ns=80,Is=N.useCallback(()=>{const I=Ie.current;if(!I)return;const G=I.scrollHeight-I.scrollTop-I.clientHeight0&&be(Q[0].id)}},[Ae,fe,a,t,be]),js=N.useCallback(()=>{dt.current=!0,yt.current=!0,Ge(!1),_n.current=!1,Ue.current?.scrollIntoView({behavior:"smooth"})},[]),Rt=N.useRef(!1),Qt=N.useRef(!1);N.useEffect(()=>{ut.current=!1,Be.current=!0,Ke.current=!1,Ne(!0),Ce(!1),R(null),U("auto")},[t]),N.useEffect(()=>(Rt.current=!1,Qt.current=!1,Promise.all([be(),Le()]).then(([I,j])=>{const G=Ot.getState().getMessages(t).length;Qt.current=!0;const Q=new Bs(e,t,le=>{le.new_messages&&le.new_messages.length>0&&s(t,le.new_messages),le.total_msg_count!=null&&Ot.getState().getMessages(t).length!==le.total_msg_count&&e.getSessionMessages(t,200).then(Ee=>{Ot.getState().setMessages(t,Ee.messages)}).catch(()=>{}),le.title&&(A(le.title),m(t,le.title)),le.model_catalog&&R(le.model_catalog),p(le.active_turn??null)},j?.version||0);Q.start(G),se.current=Q}),()=>{se.current?.stop(),se.current=null,p(null)}),[t,e,be,Le,s,p,m]);const Jt=N.useRef(0);N.useLayoutEffect(()=>{if(!Qt.current||x.length===0)return;Qt.current=!1;const I=Ie.current;I&&(I.scrollTop=I.scrollHeight),Rt.current=!0,Jt.current=x.length},[x]),N.useEffect(()=>{if(Rt.current&&x.length!==Jt.current){const I=x.length>Jt.current;Jt.current=x.length,I&&!fe&&yt.current&&(dt.current=!0,Ue.current?.scrollIntoView({behavior:"smooth"}))}},[x.length,fe]),N.useEffect(()=>{!Rt.current||!oe||yt.current&&(dt.current=!0,Ue.current?.scrollIntoView({behavior:"auto"}))},[u,oe]),N.useEffect(()=>{v&&(dt.current=!0,yt.current=!0,Ue.current?.scrollIntoView({behavior:"smooth"}))},[v]),N.useEffect(()=>{if(!Rt.current||!oe)return;const I=Ie.current;if(!I)return;const j=setInterval(()=>{if(!yt.current)return;const G=I.scrollHeight-I.scrollTop-I.clientHeight;G>10&&G<400&&(dt.current=!0,I.scrollTo({top:I.scrollHeight,behavior:"smooth"}))},300);return()=>clearInterval(j)},[oe]);const En=N.useCallback(async()=>{const I=b.trim(),j=q;if(!I&&j.length===0||$)return;const G=oe;_(""),Y([]),G||y(!1);const Q=j.length>0,le=Q?j.map((ke,Ee)=>{const ce=ke.dataUrl.split(";")[0]?.replace("data:","")||"image/png";return{id:`mobile_img_${Date.now()}_${Ee}`,data_url:ke.dataUrl,mime_type:ce,metadata:{name:ke.name,source:"remote"}}}):void 0;Q&&(K({id:`opt_${Date.now()}`,text:I||"",images:j.map(ke=>({name:ke.name,data_url:ke.dataUrl}))}),ae(!0));try{await e.sendMessage(t,I||o("chat.imageAttachmentFallback"),E,le),se.current?.nudge(),G&&Me(o("chat.messageQueued"))}catch(ke){f(ke.message)}finally{ae(!1),K(null)}},[E,$,b,oe,q,t,e,f,o]),Rs=N.useCallback(()=>{re.current?.click()},[]),Os=N.useCallback(async I=>{const j=I.target.files;if(!j)return;const G=5,Q=G-q.length,le=Array.from(j).slice(0,Q),{compressImageFile:ke}=await $s(async()=>{const{compressImageFile:Ee}=await import("./imageCompressor-Cy77l5Xt.js");return{compressImageFile:Ee}},[],import.meta.url);for(const Ee of le)try{const ce=await ke(Ee);Y(he=>he.length>=G?he:[...he,{name:ce.name,dataUrl:ce.dataUrl}])}catch{const ce=new FileReader;ce.onload=()=>{const he=ce.result;Y(ne=>ne.length>=G?ne:[...ne,{name:Ee.name,dataUrl:he}])},ce.readAsDataURL(Ee)}I.target.value=""},[q.length]),Ds=N.useCallback(I=>{Y(j=>j.filter((G,Q)=>Q!==I))},[]),Pi=N.useCallback(()=>{y(!0),requestAnimationFrame(()=>Z.current?.focus())},[]);N.useEffect(()=>{i&&requestAnimationFrame(()=>Z.current?.focus())},[i]),N.useEffect(()=>{if(!V)return;const I=j=>{ee.current&&!ee.current.contains(j.target)&&!b.trim()&&q.length===0&&y(!1)};return document.addEventListener("mousedown",I),()=>document.removeEventListener("mousedown",I)},[V,b,q.length]);const Cn=N.useRef(!1),Ms=N.useCallback(()=>{Cn.current=!0},[]),Fs=N.useCallback(()=>{setTimeout(()=>{Cn.current=!1},0)},[]),zs=I=>{if(I.key==="Enter"&&!I.shiftKey){if(I.nativeEvent.isComposing||Cn.current)return;I.preventDefault(),En()}I.key==="Tab"&&I.shiftKey&&(I.preventDefault(),T())},Ps=async()=>{try{await e.cancelTask(t,u?.turn_id)}catch{}},Bi=N.useRef(T);Bi.current=T,N.useEffect(()=>{const I=j=>{if(j.key==="Tab"&&j.shiftKey){const G=j.target,Q=G?.tagName;if(Q==="INPUT"||Q==="TEXTAREA"||Q==="SELECT"||G?.isContentEditable)return;j.preventDefault(),Bi.current()}};return document.addEventListener("keydown",I),()=>document.removeEventListener("keydown",I)},[]);const $i=d?.project_name||d?.path?.split("/").pop()||"",Tn=d?.git_branch,qi=O||n||o("chat.session");return h.jsxs("div",{className:"chat-page",children:[h.jsx("div",{className:"chat-page__header",children:h.jsxs("div",{className:"chat-page__header-row",children:[h.jsx("button",{className:"chat-page__back",onClick:r,"aria-label":o("common.back"),children:h.jsx("svg",{width:"18",height:"18",viewBox:"0 0 20 20",fill:"none",children:h.jsx("path",{d:"M12 4L6 10L12 16",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})}),h.jsxs("div",{className:"chat-page__header-center",children:[h.jsx("span",{className:"chat-page__title",title:qi,children:qi}),$i&&h.jsxs("div",{className:"chat-page__header-workspace",title:d?.path,children:[h.jsx("span",{className:"chat-page__workspace-name",children:$i}),Tn&&h.jsxs("span",{className:"chat-page__workspace-branch",title:Tn,children:[h.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[h.jsx("line",{x1:"6",x2:"6",y1:"3",y2:"15"}),h.jsx("circle",{cx:"18",cy:"6",r:"3"}),h.jsx("circle",{cx:"6",cy:"18",r:"3"}),h.jsx("path",{d:"M18 9a9 9 0 0 1-9 9"})]}),dx(Tn,28)]})]})]}),h.jsx("div",{className:"chat-page__header-right",children:h.jsx("button",{className:"chat-page__theme-btn",onClick:S,"aria-label":o("common.toggleTheme"),children:h.jsx(Ax,{isDark:w})})})]})}),h.jsxs("div",{className:"chat-page__messages",ref:Ie,onScroll:Is,children:[fe&&h.jsx("div",{className:"chat-page__load-more-indicator",children:o("chat.loadingOlderMessages")}),(()=>{const I=x.reduceRight((j,G,Q)=>j<0&&G.role==="user"?Q:j,-1);return x.map((j,G)=>{if(j.role==="system"||j.role==="tool")return null;if(j.role==="user"){const ce=Wr(j.content);return h.jsx("div",{className:`chat-msg chat-msg--user${ge?.id===j.id?" chat-msg--menu-active":""}`,onTouchStart:he=>It(j,he),onTouchMove:bt,onTouchEnd:tt,onTouchCancel:tt,onContextMenu:he=>{he.preventDefault(),we(j)},children:h.jsxs("div",{className:"chat-msg__user-card",children:[h.jsx("div",{className:"chat-msg__user-avatar",children:"U"}),h.jsxs("div",{className:"chat-msg__user-content",children:[ce,j.images&&j.images.length>0&&h.jsx("div",{className:"chat-msg__user-images",children:j.images.map((he,ne)=>h.jsx("img",{src:he.data_url,alt:he.name,className:"chat-msg__user-image"},ne))})]})]})},j.id)}const Q=j.items&&j.items.length>0,le=j.thinking||j.tools&&j.tools.length>0||j.content;if(!Q&&!le)return null;const ke=GIt(j,ce),onTouchMove:bt,onTouchEnd:tt,onTouchCancel:tt,onContextMenu:ce=>{ce.preventDefault(),we(j)},children:h.jsxs("button",{className:"chat-msg__response-toggle",onClick:()=>He(ce=>{const he=new Set(ce);return he.add(j.id),he}),children:[h.jsx("span",{className:"chat-msg__response-chevron",children:h.jsx("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"none",children:h.jsx("path",{d:"M6 4L10 8L6 12",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}),h.jsx("span",{className:"chat-msg__response-label",children:o("chat.showResponse")})]})},j.id):h.jsxs("div",{className:`chat-msg chat-msg--assistant${ge?.id===j.id?" chat-msg--menu-active":""}`,onTouchStart:ce=>It(j,ce),onTouchMove:bt,onTouchEnd:tt,onTouchCancel:tt,onContextMenu:ce=>{ce.preventDefault(),we(j)},children:[ke&&Ee&&h.jsxs("button",{className:"chat-msg__response-toggle",onClick:()=>He(ce=>{const he=new Set(ce);return he.delete(j.id),he}),children:[h.jsx("span",{className:"chat-msg__response-chevron is-open",children:h.jsx("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"none",children:h.jsx("path",{d:"M6 4L10 8L6 12",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}),h.jsx("span",{className:"chat-msg__response-label",children:o("chat.hideResponse")})]}),Q?$o(j.items,ye,void 0,Se,_e,me):h.jsxs(h.Fragment,{children:[j.thinking&&h.jsx(di,{thinking:j.thinking}),j.tools&&j.tools.length>0&&h.jsx(fi,{tools:j.tools,now:ye}),j.content&&h.jsx("div",{className:"chat-msg__assistant-content",children:h.jsx(Gt,{content:j.content,onFileDownload:_e,onGetFileInfo:me})})]})]},j.id)})})(),u&&(()=>{const I=u,j=I.status==="active";if(I.items&&I.items.length>0)return h.jsxs("div",{className:"chat-msg chat-msg--assistant",children:[j?Tx(I.items,ye,e,f,Se,_e,me):$o(I.items,ye,void 0,void 0,_e,me),j&&!I.thinking&&!I.text&&I.tools.length===0&&h.jsx("div",{className:"chat-msg__assistant-content",children:h.jsx(Gr,{})})]});const G=I.tools.filter(ne=>ne.name==="Task"),Q=G.some(ne=>ne.status==="running"),le=I.tools.filter(ne=>ne.name==="AskUserQuestion"&&ne.status==="running"&&ne.tool_input),ke=new Set(le.map(ne=>ne.id)),Ee=I.tools.filter(ne=>ne.name!=="Task"&&!ke.has(ne.id)),ce=Q?[...I.thinking?[{type:"thinking",content:I.thinking}]:[],...Ee.map(ne=>({type:"tool",tool:ne}))]:[],he=ne=>{e.cancelTool(ne,o("common.cancel")).catch(xt=>{f(String(xt))})};return h.jsxs("div",{className:"chat-msg chat-msg--assistant",children:[!Q&&(I.thinking||j)&&h.jsx(di,{thinking:I.thinking,streaming:j,isLastItem:j}),G.map(ne=>h.jsx(ks,{tool:ne,now:ye,subItems:ne.status==="running"?ce:void 0,onCancelTool:he},ne.id)),!Q&&Ee.length>0&&h.jsx(fi,{tools:Ee,now:ye,onCancelTool:he}),j&&le.map(ne=>h.jsx(_s,{tool:ne,onAnswer:Se},ne.id)),!Q&&I.text?h.jsx("div",{className:"chat-msg__assistant-content",children:j?h.jsx(Ss,{content:I.text,onFileDownload:_e,onGetFileInfo:me}):h.jsx(Gt,{content:I.text,onFileDownload:_e,onGetFileInfo:me})}):j&&!I.thinking&&I.tools.length===0?h.jsx("div",{className:"chat-msg__assistant-content",children:h.jsx(Gr,{})}):null]})})(),v&&h.jsx("div",{className:"chat-msg chat-msg--user",children:h.jsxs("div",{className:"chat-msg__user-card",children:[h.jsx("div",{className:"chat-msg__user-avatar",children:"U"}),h.jsxs("div",{className:"chat-msg__user-content",children:[v.text,v.images.length>0&&h.jsx("div",{className:"chat-msg__user-images",children:v.images.map((I,j)=>h.jsx("img",{src:I.data_url,alt:I.name,className:"chat-msg__user-image"},j))})]})]})}),$&&h.jsx("div",{className:"chat-msg chat-msg--assistant",children:h.jsx("div",{className:"chat-msg__assistant-card",children:h.jsxs("div",{className:"chat-msg__image-analyzing",children:[h.jsx("div",{className:"chat-msg__image-analyzing-icon",children:h.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[h.jsx("circle",{cx:"12",cy:"12",r:"3"}),h.jsx("path",{d:"M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42"})]})}),h.jsx("span",{children:o("chat.analyzingImage")}),h.jsx(Gr,{})]})})}),h.jsx("div",{ref:Ue})]}),pt&&h.jsx("button",{type:"button",className:"chat-page__scroll-to-bottom",onClick:js,"aria-label":o("chat.scrollToBottom"),children:h.jsx("svg",{"aria-hidden":"true",focusable:"false",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:h.jsx("polyline",{points:"6 9 12 15 18 9"})})}),ge&&h.jsx("div",{className:"chat-msg__menu-overlay",onClick:()=>we(null),children:h.jsxs("div",{className:"chat-msg__menu-sheet",onClick:I=>I.stopPropagation(),children:[h.jsx("div",{className:"chat-msg__menu-handle"}),h.jsxs("div",{className:"chat-msg__menu-actions",children:[h.jsxs("button",{className:"chat-msg__menu-btn",onClick:jt,children:[h.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:[h.jsx("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2"}),h.jsx("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]}),h.jsx("span",{children:o("chat.copyMessage")})]}),ge.role==="user"&&h.jsxs("button",{className:"chat-msg__menu-btn",onClick:As,children:[h.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:[h.jsx("polyline",{points:"23 4 23 10 17 10"}),h.jsx("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"})]}),h.jsx("span",{children:o("chat.resendMessage")})]}),h.jsxs("button",{className:"chat-msg__menu-btn chat-msg__menu-btn--danger",onClick:Ls,disabled:D,children:[h.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:[h.jsx("polyline",{points:"3 6 5 6 21 6"}),h.jsx("path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"})]}),h.jsx("span",{children:D?"...":o("chat.deleteMessage")})]})]}),h.jsx("button",{className:"chat-msg__menu-cancel",onClick:()=>we(null),children:o("common.cancel")})]})}),Te&&h.jsx("div",{className:"chat-page__toast",role:"alert","aria-live":"assertive",children:Te}),h.jsx("input",{ref:re,type:"file",accept:"image/png,image/jpeg,image/jpg,image/gif,image/webp",multiple:!0,style:{display:"none"},onChange:Os}),h.jsx("div",{className:`chat-page__input-wrap ${V?"is-expanded":""}`,ref:ee,children:h.jsxs("div",{className:"chat-page__input-box",onClick:V?void 0:Pi,children:[h.jsx("div",{className:"chat-page__input-area",children:V?h.jsx("textarea",{ref:Z,className:"chat-page__input",placeholder:o("chat.inputPlaceholder"),value:b,onChange:I=>_(I.target.value),onKeyDown:zs,onCompositionStart:Ms,onCompositionEnd:Fs,rows:1,disabled:$}):h.jsx("span",{className:"chat-page__input-placeholder",children:o($?"chat.imageAnalyzingPlaceholder":oe?"chat.collapsedStreamingPlaceholder":"chat.collapsedInputPlaceholder")})}),h.jsxs("div",{className:"chat-page__input-actions",children:[h.jsxs("div",{className:"chat-page__input-actions-left",children:[V&&h.jsx(Dx,{catalog:C,selectedModelId:z,disabled:$||P,onSelect:We}),V&&q.length>0&&h.jsx("div",{className:"chat-page__image-preview-row",children:q.map((I,j)=>h.jsxs("div",{className:"chat-page__image-thumb",children:[h.jsx("img",{src:I.dataUrl,alt:I.name}),h.jsx("button",{className:"chat-page__image-remove",onClick:()=>Ds(j),children:"×"})]},j))})]}),h.jsxs("div",{className:"chat-page__input-actions-right",children:[V&&h.jsxs(h.Fragment,{children:[h.jsx("button",{className:`chat-page__mode-pill${E!=="agentic"?` chat-page__mode-pill--${E}`:""}`,onClick:T,disabled:$,children:k.find(I=>I.id===E)?.label}),h.jsx("button",{className:"chat-page__action-btn",onClick:Rs,disabled:$||q.length>=5,"aria-label":o("common.attachImage"),children:h.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[h.jsx("rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}),h.jsx("circle",{cx:"9",cy:"9",r:"2"}),h.jsx("path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"})]})})]}),$?h.jsx("button",{className:"chat-page__send-btn is-stop","aria-label":o("common.stop"),disabled:!0,children:h.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",style:{animation:"analyzeSpin 2s linear infinite"},children:[h.jsx("circle",{cx:"12",cy:"12",r:"3"}),h.jsx("path",{d:"M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2"})]})}):oe?h.jsxs("div",{className:"chat-page__stream-actions",children:[h.jsx("button",{type:"button",className:"chat-page__send-btn is-stop",onClick:Ps,"aria-label":o("common.stop"),children:h.jsx("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"none",children:h.jsx("rect",{x:"3",y:"3",width:"10",height:"10",rx:"2",fill:"currentColor"})})}),h.jsx("button",{type:"button",className:"chat-page__send-btn",onClick:V?En:Pi,disabled:!b.trim()&&q.length===0,"aria-label":o("common.submit"),children:h.jsx("svg",{width:"12",height:"12",viewBox:"0 0 20 20",fill:"none",children:h.jsx("path",{d:"M10 3L10 17M10 3L5 8M10 3L15 8",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})})]}):h.jsx("button",{className:"chat-page__send-btn",onClick:V?En:void 0,disabled:!b.trim()&&q.length===0,children:h.jsx("svg",{width:"12",height:"12",viewBox:"0 0 20 20",fill:"none",children:h.jsx("path",{d:"M10 3L10 17M10 3L5 8M10 3L15 8",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})})]})]})]})}),c&&h.jsx("div",{className:"chat-page__toast",onClick:()=>f(null),children:c}),Xe&&h.jsx("div",{className:"chat-page__toast chat-page__toast--info",onClick:()=>Me(null),children:Xe})]})};export{Fx as default}; diff --git a/src/apps/relay-server/static/assets/Logo-ICON-BOaKcXgO.png b/src/apps/relay-server/static/assets/Logo-ICON-BOaKcXgO.png new file mode 100644 index 0000000000..cce9afd9ed Binary files /dev/null and b/src/apps/relay-server/static/assets/Logo-ICON-BOaKcXgO.png differ diff --git a/src/apps/relay-server/static/assets/imageCompressor-Cy77l5Xt.js b/src/apps/relay-server/static/assets/imageCompressor-Cy77l5Xt.js new file mode 100644 index 0000000000..157fdecb0b --- /dev/null +++ b/src/apps/relay-server/static/assets/imageCompressor-Cy77l5Xt.js @@ -0,0 +1 @@ +function m(a){return new Promise((o,r)=>{const e=new Image;e.onload=()=>o(e),e.onerror=r,e.src=a})}function g(a){const o=a.split(",")[1];return o?Math.ceil(o.length*3/4):0}async function d(a,o){if(g(a)<=1048576)return{dataUrl:a,name:o};const r=await m(a);let{width:e,height:t}=r;if(e>1920||t>1920){const i=1920/Math.max(e,t);e=Math.round(e*i),t=Math.round(t*i)}const n=document.createElement("canvas");n.width=e,n.height=t;const h=n.getContext("2d");h.drawImage(r,0,0,e,t);let s=.8,c=n.toDataURL("image/jpeg",s);for(;g(c)>1048576&&s>.3;)s-=.1,c=n.toDataURL("image/jpeg",s);g(c)>1048576&&(n.width=Math.round(e*.75),n.height=Math.round(t*.75),h.drawImage(r,0,0,n.width,n.height),c=n.toDataURL("image/jpeg",.6));const l=o.replace(/\.[^.]+$/,"");return{dataUrl:c,name:`${l}.jpg`}}async function u(a){const o=await new Promise((r,e)=>{const t=new FileReader;t.onload=()=>r(t.result),t.onerror=e,t.readAsDataURL(a)});return d(o,a.name)}export{d as compressImageDataUrl,u as compressImageFile}; diff --git a/src/apps/relay-server/static/assets/index-C-fgJuft.css b/src/apps/relay-server/static/assets/index-C-fgJuft.css deleted file mode 100644 index ddb321f6a5..0000000000 --- a/src/apps/relay-server/static/assets/index-C-fgJuft.css +++ /dev/null @@ -1 +0,0 @@ -:root{--bg-primary: #0f0f1a;--bg-secondary: #1a1a2e;--bg-card: #222240;--text-primary: #e0e0e0;--text-muted: #888;--accent: #6c63ff;--danger: #ff4757;--border: #333355;--radius: 10px}*{margin:0;padding:0;box-sizing:border-box}html,body,#root{height:100%;width:100%;overflow:hidden}.mobile-app{height:100%;width:100%;background:var(--bg-primary);color:var(--text-primary);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;display:flex;flex-direction:column}.pairing-page{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:24px;padding:32px}.pairing-page__logo{font-size:28px;font-weight:700;color:var(--accent)}.pairing-page__state{font-size:14px;color:var(--text-muted)}.pairing-page__error{font-size:13px;color:var(--danger);text-align:center;max-width:280px}.pairing-page__retry{margin-top:16px;padding:10px 32px;background:var(--accent);color:#fff;border:none;border-radius:8px;font-size:15px;cursor:pointer}.pairing-page__retry:active{opacity:.8}.spinner{width:32px;height:32px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.workspace-page{display:flex;flex-direction:column;height:100%}.workspace-page__header{display:flex;align-items:center;padding:16px 20px;border-bottom:1px solid var(--border)}.workspace-page__header h1{font-size:18px;font-weight:600}.workspace-page__content{flex:1;overflow-y:auto;padding:20px;-webkit-overflow-scrolling:touch}.workspace-page__loading{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:16px;color:var(--text-muted);font-size:14px}.workspace-page__current{display:flex;flex-direction:column;gap:16px}.workspace-page__current-label,.workspace-page__recent-label{font-size:12px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.workspace-page__current-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:16px}.workspace-page__project-name{font-size:17px;font-weight:600;margin-bottom:6px}.workspace-page__project-path{font-size:12px;color:var(--text-muted);word-break:break-all;margin-bottom:8px}.workspace-page__git-branch{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--accent);background:#6c63ff26;padding:2px 8px;border-radius:4px}.workspace-page__branch-icon{font-size:14px}.workspace-page__actions{display:flex;gap:10px}.workspace-page__btn{flex:1;padding:12px 16px;border:none;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer}.workspace-page__btn--primary{background:var(--accent);color:#fff}.workspace-page__btn--secondary{background:var(--bg-card);color:var(--text-primary);border:1px solid var(--border)}.workspace-page__btn:disabled{opacity:.5;cursor:not-allowed}.workspace-page__no-workspace{display:flex;flex-direction:column;align-items:center;text-align:center;padding:40px 20px;gap:12px}.workspace-page__no-workspace-icon{font-size:40px}.workspace-page__no-workspace-text{font-size:15px;font-weight:500}.workspace-page__no-workspace-hint{font-size:13px;color:var(--text-muted);max-width:280px}.workspace-page__recent{margin-top:20px;display:flex;flex-direction:column;gap:10px}.workspace-page__recent-empty{text-align:center;color:var(--text-muted);font-size:13px;padding:24px 0}.workspace-page__recent-list{display:flex;flex-direction:column;gap:6px}.workspace-page__recent-item{display:flex;flex-direction:column;align-items:flex-start;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;cursor:pointer;text-align:left;color:var(--text-primary);transition:background .15s}.workspace-page__recent-item:active{background:var(--bg-secondary)}.workspace-page__recent-item:disabled{opacity:.5;cursor:not-allowed}.workspace-page__recent-item-name{font-size:14px;font-weight:500;margin-bottom:4px}.workspace-page__recent-item-path{font-size:11px;color:var(--text-muted);word-break:break-all}.workspace-page__switching{display:flex;align-items:center;justify-content:center;gap:10px;padding:16px;color:var(--text-muted);font-size:13px}.workspace-page__error{margin-top:12px;font-size:13px;color:var(--danger);text-align:center}.session-list{display:flex;flex-direction:column;height:100%}.session-list__header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border)}.session-list__header h1{font-size:18px;font-weight:600}.session-list__new-wrapper{position:relative}.session-list__new-btn{background:var(--accent);color:#fff;border:none;border-radius:6px;padding:6px 16px;font-size:13px;font-weight:500;cursor:pointer}.session-list__new-menu{position:absolute;top:100%;right:0;margin-top:6px;background:var(--bg-card);border:1px solid var(--border);border-radius:8px;overflow:hidden;z-index:10;min-width:180px;box-shadow:0 8px 24px #0006}.session-list__menu-item{display:flex;align-items:center;gap:10px;width:100%;padding:12px 16px;background:none;border:none;border-bottom:1px solid var(--border);color:var(--text-primary);font-size:14px;cursor:pointer;text-align:left}.session-list__menu-item:last-child{border-bottom:none}.session-list__menu-item:active{background:var(--bg-secondary)}.session-list__menu-icon{font-family:monospace;font-size:14px;color:var(--accent);min-width:28px;text-align:center}.session-list__workspace-bar{display:flex;align-items:center;gap:6px;padding:8px 20px;background:var(--bg-secondary);border-bottom:1px solid var(--border);cursor:pointer;min-height:36px;transition:background .15s}.session-list__workspace-bar:active{background:var(--bg-card)}.session-list__workspace-icon{font-size:13px;flex-shrink:0}.session-list__workspace-name{font-size:12px;font-weight:500;color:var(--accent);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.session-list__workspace-branch{font-size:11px;color:var(--text-muted);background:#6c63ff1a;padding:1px 6px;border-radius:4px;flex-shrink:0;max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.session-list__workspace-switch{font-size:11px;color:var(--text-muted);flex-shrink:0}.session-list__items{flex:1;overflow-y:auto;padding:8px 0;-webkit-overflow-scrolling:touch}.session-list__empty{text-align:center;color:var(--text-muted);padding:48px 20px;font-size:14px}.session-list__item{padding:14px 20px;border-bottom:1px solid var(--border);cursor:pointer;transition:background .15s}.session-list__item:active{background:var(--bg-secondary)}.session-list__item-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.session-list__item-name{font-size:15px;font-weight:500;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-right:8px}.session-list__agent-badge{font-size:11px;font-weight:600;padding:2px 8px;border-radius:4px;background:var(--bg-secondary);color:var(--text-muted);flex-shrink:0}.session-list__agent-badge--code,.session-list__agent-badge--agentic{background:#6c63ff33;color:var(--accent)}.session-list__agent-badge--cowork,.session-list__agent-badge--Cowork{background:#2ed57333;color:#2ed573}.session-list__item-meta{font-size:12px;color:var(--text-muted);display:flex;justify-content:space-between}.session-list__item-time{flex-shrink:0}.session-list__load-more{text-align:center;font-size:12px;color:var(--text-muted);padding:12px 0}.session-list__refresh{padding:12px;background:var(--bg-secondary);color:var(--text-muted);border:none;border-top:1px solid var(--border);font-size:13px;cursor:pointer}.chat-page{display:flex;flex-direction:column;height:100%}.chat-page__header{display:flex;align-items:center;padding:12px 16px;border-bottom:1px solid var(--border);gap:12px}.chat-page__back{background:none;border:none;color:var(--accent);font-size:20px;cursor:pointer;padding:4px}.chat-page__title{flex:1;font-size:16px;font-weight:600}.chat-page__cancel{background:var(--danger);color:#fff;border:none;border-radius:6px;padding:4px 12px;font-size:12px;cursor:pointer}.chat-page__messages{flex:1;overflow-y:auto;padding:12px 16px;-webkit-overflow-scrolling:touch}.chat-msg{margin-bottom:16px}.chat-msg__role{font-size:11px;font-weight:600;color:var(--text-muted);margin-bottom:4px;text-transform:uppercase}.chat-msg--user .chat-msg__content{background:var(--accent);color:#fff;border-radius:var(--radius) var(--radius) 4px var(--radius);padding:10px 14px;font-size:14px;line-height:1.5;display:inline-block;max-width:85%}.chat-msg--assistant .chat-msg__content{background:var(--bg-card);border-radius:var(--radius) var(--radius) var(--radius) 4px;padding:10px 14px;font-size:14px;line-height:1.6;word-break:break-word;overflow-wrap:break-word}.chat-msg--assistant .chat-msg__content code{background:#ffffff1a;padding:2px 5px;border-radius:4px;font-size:12px;font-family:Fira Code,JetBrains Mono,Consolas,monospace}.chat-msg--assistant .chat-msg__content pre{margin:8px 0;border-radius:8px;overflow-x:auto;-webkit-overflow-scrolling:touch}.chat-msg--assistant .chat-msg__content pre code{background:none;padding:0;font-size:12px}.chat-msg--assistant .chat-msg__content p{margin-bottom:8px}.chat-msg--assistant .chat-msg__content p:last-child{margin-bottom:0}.chat-msg--assistant .chat-msg__content ul,.chat-msg--assistant .chat-msg__content ol{padding-left:20px;margin-bottom:8px}.chat-msg--assistant .chat-msg__content ul li,.chat-msg--assistant .chat-msg__content ol li{margin-bottom:4px}.chat-msg--assistant .chat-msg__content h1,.chat-msg--assistant .chat-msg__content h2,.chat-msg--assistant .chat-msg__content h3,.chat-msg--assistant .chat-msg__content h4,.chat-msg--assistant .chat-msg__content h5,.chat-msg--assistant .chat-msg__content h6{color:var(--text-primary);font-weight:600;margin-top:12px;margin-bottom:6px;line-height:1.3}.chat-msg--assistant .chat-msg__content h1:first-child,.chat-msg--assistant .chat-msg__content h2:first-child,.chat-msg--assistant .chat-msg__content h3:first-child,.chat-msg--assistant .chat-msg__content h4:first-child,.chat-msg--assistant .chat-msg__content h5:first-child,.chat-msg--assistant .chat-msg__content h6:first-child{margin-top:0}.chat-msg--assistant .chat-msg__content h1{font-size:18px}.chat-msg--assistant .chat-msg__content h2{font-size:16px}.chat-msg--assistant .chat-msg__content h3{font-size:15px}.chat-msg--assistant .chat-msg__content h4,.chat-msg--assistant .chat-msg__content h5,.chat-msg--assistant .chat-msg__content h6{font-size:14px}.chat-msg--assistant .chat-msg__content blockquote{border-left:3px solid var(--accent);margin:8px 0;padding:6px 12px;background:#6c63ff14;border-radius:0 4px 4px 0;color:var(--text-muted);font-style:italic}.chat-msg--assistant .chat-msg__content blockquote p{margin-bottom:0}.chat-msg--assistant .chat-msg__content a{color:var(--accent);text-decoration:none;word-break:break-all}.chat-msg--assistant .chat-msg__content a:active{text-decoration:underline}.chat-msg--assistant .chat-msg__content hr{border:none;border-top:1px solid var(--border);margin:12px 0}.chat-msg--assistant .chat-msg__content strong{font-weight:600;color:var(--text-primary)}.chat-msg--assistant .chat-msg__content em{font-style:italic}.chat-msg--assistant .chat-msg__content del{color:var(--text-muted)}.chat-msg--assistant .chat-msg__content table{width:100%;border-collapse:collapse;margin:8px 0;font-size:13px;display:block;overflow-x:auto;-webkit-overflow-scrolling:touch}.chat-msg--assistant .chat-msg__content thead{background:#6c63ff26}.chat-msg--assistant .chat-msg__content th,.chat-msg--assistant .chat-msg__content td{border:1px solid var(--border);padding:6px 10px;text-align:left;white-space:nowrap}.chat-msg--assistant .chat-msg__content th{font-weight:600;color:var(--text-primary)}.chat-msg--assistant .chat-msg__content td{color:var(--text-primary)}.chat-msg--assistant .chat-msg__content tbody tr:nth-child(2n){background:#ffffff08}.chat-msg--assistant .chat-msg__content input[type=checkbox]{margin-right:6px;accent-color:var(--accent)}.chat-msg__thinking{margin-bottom:8px;border-left:2px solid var(--accent);padding-left:8px}.chat-msg__thinking-toggle{background:none;border:none;color:var(--text-muted);font-size:12px;cursor:pointer;padding:2px 0;font-style:italic}.chat-msg__thinking-toggle:hover{color:var(--text-primary)}.chat-msg__thinking-content{margin-top:6px;font-size:12px;color:var(--text-muted);line-height:1.5;white-space:pre-wrap}.chat-msg__tools{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:8px}.chat-msg__tool-badge{font-size:11px;padding:2px 8px;border-radius:12px;white-space:nowrap}.chat-msg__tool-badge--running{background:#ffb40026;color:#ffb400;border:1px solid rgba(255,180,0,.3)}.chat-msg__tool-badge--done{background:#50c87826;color:#50c878;border:1px solid rgba(80,200,120,.3)}.chat-msg__tool-badge--error{background:#ff505026;color:#ff5050;border:1px solid rgba(255,80,80,.3)}.chat-msg__typing{display:inline-block;letter-spacing:4px;color:var(--text-muted);font-size:16px;animation:typing-pulse 1.2s ease-in-out infinite}@keyframes typing-pulse{0%,to{opacity:.3}50%{opacity:1}}.chat-page__input-bar{display:flex;align-items:flex-end;padding:10px 12px;border-top:1px solid var(--border);background:var(--bg-secondary);gap:8px}.chat-page__input{flex:1;background:var(--bg-primary);border:1px solid var(--border);border-radius:8px;color:var(--text-primary);font-size:14px;padding:10px 14px;resize:none;min-height:40px;max-height:120px;outline:none;font-family:inherit}.chat-page__input:focus{border-color:var(--accent)}.chat-page__send{background:var(--accent);color:#fff;border:none;border-radius:8px;padding:10px 16px;font-size:14px;font-weight:500;cursor:pointer;white-space:nowrap}.chat-page__send:disabled{opacity:.5;cursor:not-allowed} diff --git a/src/apps/relay-server/static/assets/index-DGveIJkk.css b/src/apps/relay-server/static/assets/index-DGveIJkk.css new file mode 100644 index 0000000000..a14b35d483 --- /dev/null +++ b/src/apps/relay-server/static/assets/index-DGveIJkk.css @@ -0,0 +1 @@ +@charset "UTF-8";*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body,#root{height:100%;width:100%;overflow:hidden}body{font-family:var(--font-family-sans);font-size:var(--font-size-sm);line-height:var(--line-height-base);color:var(--color-text-primary);background:var(--color-bg-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.mobile-app{height:100%;width:100%;background:var(--color-bg-primary);color:var(--color-text-primary);display:flex;flex-direction:column;position:relative;overflow:hidden}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:var(--size-radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-hover)}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes slideUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes slideDown{0%{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:translateY(0)}}@keyframes typing-bounce{0%,60%,to{transform:translateY(0);opacity:.4}30%{transform:translateY(-4px);opacity:1}}@keyframes focusBorderFlow{0%{background-position:0% 50%}50%{background-position:100% 50%}to{background-position:0% 50%}}.page-transition{animation:fadeIn var(--motion-base) cubic-bezier(0,0,.2,1)}.nav-page{position:absolute;inset:0;background:var(--color-bg-primary);z-index:1}.nav-push-enter{z-index:2;animation:navPushIn .3s cubic-bezier(.2,.9,.3,1) both}.nav-push-exit{z-index:1;animation:navPushOut .3s cubic-bezier(.2,.9,.3,1) both}.nav-pop-enter{z-index:1;animation:navPopIn .3s cubic-bezier(.2,.9,.3,1) both}.nav-pop-exit{z-index:2;animation:navPopOut .3s cubic-bezier(.2,.9,.3,1) both}@keyframes navPushIn{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes navPushOut{0%{transform:translate(0)}to{transform:translate(-25%)}}@keyframes navPopIn{0%{transform:translate(-25%)}to{transform:translate(0)}}@keyframes navPopOut{0%{transform:translate(0)}to{transform:translate(100%)}}@media(prefers-reduced-motion:reduce){.page-transition,.nav-push-enter,.nav-push-exit,.nav-pop-enter,.nav-pop-exit{animation:none}}.spinner{width:28px;height:28px;border:2.5px solid var(--border-subtle);border-top-color:var(--color-accent-500);border-radius:50%;animation:spin .8s linear infinite}.spinner--sm{width:14px;height:14px;border-width:2px}html.theme-switching,html.theme-switching *,html.theme-switching *:before,html.theme-switching *:after{transition:background-color .28s ease,color .28s ease,border-color .28s ease,box-shadow .28s ease,fill .28s ease,stroke .28s ease,background .28s ease!important}.mobile-reconnect-banner{position:fixed;top:env(safe-area-inset-top,0);left:0;right:0;z-index:100;display:flex;align-items:center;justify-content:center;gap:8px;padding:8px 16px;background:var(--color-warning);color:var(--btn-primary-color);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);animation:slideDown var(--motion-fast) var(--easing-standard)}.mobile-reconnect-banner button{margin-left:4px;padding:3px 9px;border:1px solid currentColor;border-radius:var(--size-radius-full);background:transparent;color:inherit;font:inherit;cursor:pointer}.mobile-reconnect-spinner{display:inline-block;width:14px;height:14px;border:2px solid color-mix(in srgb,currentColor 30%,transparent);border-top-color:currentColor;border-radius:50%;animation:reconnect-spin .8s linear infinite}@keyframes reconnect-spin{to{transform:rotate(360deg)}}.pairing-page{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:var(--size-gap-6);padding:var(--size-gap-8);animation:fadeIn var(--motion-slow) cubic-bezier(0,0,.2,1)}.pairing-page__actions{position:absolute;top:var(--size-gap-4);right:var(--size-gap-4);display:flex;align-items:center;gap:var(--size-gap-2)}.pairing-page__theme-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:1px solid var(--border-subtle);border-radius:50%;background:var(--element-bg-subtle);color:var(--color-text-secondary);cursor:pointer;transition:all var(--motion-fast) var(--easing-standard)}.pairing-page__theme-btn:active{transform:scale(.96);color:var(--color-text-primary);background:var(--element-bg-base)}.pairing-page__logo{width:64px;height:64px;object-fit:contain;margin-bottom:var(--size-gap-2);animation:pairingLogoBreathe 3.2s var(--easing-standard) infinite}@keyframes pairingLogoBreathe{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.05);opacity:.88}}.pairing-page__brand{font-size:var(--font-size-2xl);font-weight:var(--font-weight-semibold);color:var(--color-accent-500);letter-spacing:.5px}.pairing-page__state{font-size:var(--font-size-sm);color:var(--color-text-muted);text-align:center}.pairing-page__form{width:min(100%,320px);display:flex;flex-direction:column;gap:var(--size-gap-3)}.pairing-page__field{display:flex;flex-direction:column;gap:8px}.pairing-page__field-label{font-size:var(--font-size-xs);color:var(--color-text-secondary);letter-spacing:.04em;text-transform:uppercase}.pairing-page__input{width:100%;min-height:44px;padding:0 14px;border:1px solid var(--border-base);border-radius:var(--size-radius-base);background:var(--color-bg-elevated);color:var(--color-text-primary);font-size:var(--font-size-base);outline:none}.pairing-page__input:focus{border-color:var(--color-accent-400);box-shadow:0 0 0 3px color-mix(in srgb,var(--color-accent-400) 18%,transparent)}.pairing-page__note{margin:0;font-size:var(--font-size-xs);line-height:1.5;color:var(--color-text-muted);text-align:left}.pairing-page__spinner-wrap{height:32px;display:flex;align-items:center;justify-content:center}.pairing-page__error{font-size:var(--font-size-xs);color:var(--color-error);text-align:center;max-width:280px;padding:var(--size-gap-2) var(--size-gap-3);background:var(--color-error-bg);border:1px solid var(--color-error-border);border-radius:var(--size-radius-base)}.pairing-page__retry{padding:var(--size-gap-3) var(--size-gap-8);background:var(--btn-default-bg);color:var(--color-text-primary);border:1px solid var(--border-base);border-radius:var(--size-radius-base);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);cursor:pointer;transition:all var(--motion-fast) var(--easing-standard)}.pairing-page__retry:active{background:var(--btn-hover-bg)}.pairing-page__retry:disabled{opacity:.6;cursor:not-allowed}@media(prefers-reduced-motion:reduce){.pairing-page,.pairing-page__logo{animation:none}}.session-list{position:relative;display:flex;flex-direction:column;height:100%;background:var(--color-bg-primary);overflow:hidden}.session-list__header{position:relative;z-index:1;display:flex;align-items:center;justify-content:space-between;padding:0 var(--size-gap-5);min-height:56px;border-bottom:1px solid var(--border-subtle);background:var(--color-bg-elevated);backdrop-filter:var(--blur-base);-webkit-backdrop-filter:var(--blur-base);flex-shrink:0}.session-list__header-brand{display:flex;align-items:center;gap:var(--size-gap-3);min-width:0}.session-list__header-copy{display:flex;flex-direction:column;gap:0;min-width:0}.session-list__header-copy h1{margin:0;font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);color:var(--color-text-primary);letter-spacing:.01em;width:fit-content}.session-list__header-user-id{font-size:11px;font-weight:var(--font-weight-medium);color:var(--color-text-muted);letter-spacing:.02em}.session-list__health-dot{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:5px;vertical-align:middle}.session-list__health-dot--connected{background:var(--color-success)}.session-list__health-dot--checking{background:var(--color-warning)}.session-list__health-dot--unpaired{background:var(--color-text-muted)}.session-list__health-dot--unreachable{background:var(--color-error)}.session-list__header-kicker{font-size:10px;font-weight:var(--font-weight-semibold);letter-spacing:.16em;text-transform:uppercase;color:var(--color-accent-500);width:fit-content}.session-list__logo{width:26px;height:26px;object-fit:contain;flex-shrink:0}.session-list__header-actions{display:flex;align-items:center;gap:var(--size-gap-2)}.session-list__theme-btn,.session-list__devices-btn,.session-list__disconnect-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:1px solid var(--border-subtle);border-radius:50%;background:var(--element-bg-subtle);color:var(--color-text-secondary);cursor:pointer;transition:all var(--motion-fast) var(--easing-standard)}.session-list__theme-btn:active,.session-list__devices-btn:active,.session-list__disconnect-btn:active{transform:scale(.96);color:var(--color-text-primary);background:var(--element-bg-base)}.session-list__disconnect-btn:active{color:var(--color-error);background:var(--color-error-bg)}.session-list__devices-btn.is-remote{border-color:var(--color-accent-200);background:var(--color-accent-100);color:var(--color-accent-500)}.session-list__header-target{display:inline-block;max-width:120px;margin-left:6px;padding:0 7px;border:1px solid var(--color-accent-200);border-radius:var(--size-radius-full);background:var(--color-accent-100);color:var(--color-accent-500);font-size:10px;font-weight:var(--font-weight-semibold);line-height:16px;letter-spacing:.02em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.session-list__workspace-bar{position:relative;z-index:1;display:flex;align-items:center;gap:12px;padding:12px;border:1px solid var(--color-accent-200);border-radius:20px;corner-shape:squircle;background:var(--color-accent-50);cursor:pointer;transition:transform var(--motion-fast) var(--easing-standard),background var(--motion-fast) var(--easing-standard)}.session-list__workspace-bar:active{transform:translateY(1px);background:var(--color-accent-100)}.session-list__resume-card{display:flex;align-items:center;gap:12px;padding:14px 16px;border:1.5px solid var(--color-accent-200);border-radius:18px;corner-shape:squircle;background:var(--color-accent-50);cursor:pointer;transition:transform var(--motion-fast) var(--easing-standard),background var(--motion-fast) var(--easing-standard);animation:sessionItemIn var(--motion-base) cubic-bezier(0,0,.2,1) both}.session-list__resume-card:active{transform:scale(.985);background:var(--color-accent-100)}.session-list__resume-card:focus-visible{outline:2px solid var(--color-accent-500);outline-offset:2px}.session-list__resume-icon{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:10px;corner-shape:squircle}.session-list__resume-body{flex:1;min-width:0}.session-list__resume-label{font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--color-accent-500);margin-bottom:2px}.session-list__resume-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.session-list__resume-meta{display:flex;align-items:center;gap:8px;margin-top:4px;min-width:0;overflow:hidden}.session-list__resume-time{font-size:11px;color:var(--color-text-muted);white-space:nowrap;flex-shrink:0}.session-list__resume-arrow{flex-shrink:0;color:var(--color-text-muted);display:inline-flex;align-items:center}.session-list__mode-toggle{display:flex;gap:6px;padding:4px;border:1px solid var(--border-subtle);border-radius:16px;corner-shape:squircle;background:var(--color-bg-secondary)}.session-list__mode-toggle-btn{flex:1;display:flex;align-items:center;justify-content:center;gap:8px;padding:10px 12px;border:none;border-radius:12px;corner-shape:squircle;background:transparent;color:var(--color-text-secondary);font-size:13px;font-weight:var(--font-weight-medium);cursor:pointer;transition:all var(--motion-fast) var(--easing-standard)}.session-list__mode-toggle-btn svg{width:18px;height:18px;flex-shrink:0}.session-list__mode-toggle-btn.is-active{background:var(--color-bg-elevated);color:var(--color-text-primary);box-shadow:var(--shadow-sm)}.session-list__mode-toggle-btn.is-active.is-active:first-child{color:var(--color-accent-500)}.session-list__mode-toggle-btn.is-active.is-active:last-child{color:var(--color-pink-500)}.session-list__mode-toggle-btn:active:not(.is-active){background:var(--element-bg-subtle)}.session-list__workspace-icon{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:10px;corner-shape:squircle;color:var(--color-accent-500);background:var(--color-accent-100)}.session-list__workspace-copy{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.session-list__workspace-label{font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--color-accent-500)}.session-list__workspace-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.session-list__workspace-branch{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:999px;corner-shape:squircle;background:var(--color-accent-100);color:var(--color-accent-500);font-size:11px;flex-shrink:1;min-width:0;white-space:nowrap}.session-list__workspace-switch{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--color-text-muted)}.session-list__items{position:relative;z-index:1;flex:1;overflow-y:auto;padding:var(--size-gap-4);-webkit-overflow-scrolling:touch;display:flex;flex-direction:column;gap:var(--size-gap-4)}.session-list__panel{position:relative;padding:var(--size-gap-4);border:1px solid var(--border-subtle);border-radius:22px;corner-shape:squircle;background:var(--color-bg-elevated);box-shadow:var(--shadow-base);overflow:visible}.session-list__section-head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--size-gap-3);margin-bottom:var(--size-gap-4)}.session-list__section-kicker{font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--color-accent-500)}.session-list__panel--assistant .session-list__section-kicker{color:var(--color-pink-500)}.session-list__section-title{margin-top:4px;font-size:var(--font-size-lg);line-height:1.1;font-weight:var(--font-weight-semibold);color:var(--color-text-primary);letter-spacing:-.02em}.session-list__section-meta{font-size:11px;color:var(--color-text-muted);flex-shrink:0}.session-list__hint{background:var(--color-pink-100);color:var(--color-pink-600);border:1px solid var(--color-pink-200)}.session-list__assistant-bar{position:relative;z-index:1;display:flex;align-items:center;gap:12px;margin:0;padding:12px;border:1px solid var(--color-pink-200);border-radius:20px;corner-shape:squircle;background:var(--color-pink-50);cursor:pointer;transition:transform var(--motion-fast) var(--easing-standard),background var(--motion-fast) var(--easing-standard)}.session-list__assistant-bar:active{transform:translateY(1px);background:var(--color-pink-100)}.session-list__assistant-icon{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:10px;corner-shape:squircle;color:var(--color-pink-500);background:var(--color-pink-100)}.session-list__assistant-icon svg{width:20px;height:20px}.session-list__assistant-copy{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.session-list__assistant-label{font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--color-pink-500)}.session-list__assistant-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.session-list__assistant-switch{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--color-text-muted)}.session-list__create-row{display:flex;flex-direction:column;gap:10px}.session-list__create-btn{position:relative;display:flex;align-items:center;gap:12px;width:100%;padding:12px;border:1px solid var(--border-subtle);border-radius:18px;corner-shape:squircle;background:var(--color-bg-secondary);color:var(--color-text-primary);cursor:pointer;text-align:left;transition:transform var(--motion-fast) var(--easing-standard),background var(--motion-fast) var(--easing-standard);animation:sessionItemIn var(--motion-base) cubic-bezier(0,0,.2,1) both;box-shadow:var(--shadow-sm)}.session-list__create-btn:active:not(:disabled){transform:translateY(1px);background:var(--element-bg-subtle)}.session-list__create-btn:disabled{opacity:var(--opacity-disabled);cursor:not-allowed}.session-list__create-btn--code{border-color:var(--color-accent-200)}.session-list__create-btn--cowork{border-color:var(--color-purple-200)}.session-list__create-btn--claw{border-color:var(--color-pink-200)}.session-list__create-icon{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:10px;corner-shape:squircle;flex-shrink:0;color:var(--color-accent-500);background:var(--color-accent-100)}.session-list__create-btn--cowork .session-list__create-icon{color:var(--color-purple-500);background:var(--color-purple-100)}.session-list__create-btn--claw .session-list__create-icon{color:var(--color-pink-500);background:var(--color-pink-100)}.session-list__create-copy{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}.session-list__create-title{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);letter-spacing:-.01em}.session-list__create-desc{font-size:11px;line-height:1.35;color:var(--color-text-secondary);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.session-list__create-arrow{display:inline-flex;align-items:center;justify-content:center;color:var(--color-text-muted);flex-shrink:0}.session-list__cards{display:flex;flex-direction:column;gap:10px}.session-list__item{display:flex;align-items:center;gap:12px;padding:12px;border:1px solid var(--border-subtle);border-radius:18px;corner-shape:squircle;background:var(--color-bg-secondary);box-shadow:var(--shadow-xs);cursor:pointer;transition:transform var(--motion-fast) var(--easing-standard),background var(--motion-fast) var(--easing-standard);animation:sessionItemIn var(--motion-base) cubic-bezier(0,0,.2,1) both}.session-list__item:nth-child(1){animation-delay:35ms}.session-list__item:nth-child(2){animation-delay:70ms}.session-list__item:nth-child(3){animation-delay:105ms}.session-list__item:nth-child(4){animation-delay:.14s}.session-list__item:nth-child(5){animation-delay:175ms}.session-list__item:nth-child(6){animation-delay:.21s}.session-list__item:nth-child(7){animation-delay:245ms}.session-list__item:nth-child(8){animation-delay:.28s}.session-list__item:nth-child(9){animation-delay:315ms}.session-list__item:nth-child(10){animation-delay:.35s}.session-list__item:nth-child(11){animation-delay:385ms}.session-list__item:nth-child(12){animation-delay:.42s}.session-list__item:nth-child(13){animation-delay:455ms}.session-list__item:nth-child(14){animation-delay:.49s}.session-list__item:nth-child(15){animation-delay:525ms}.session-list__item:nth-child(16){animation-delay:.56s}.session-list__item:nth-child(17){animation-delay:595ms}.session-list__item:nth-child(18){animation-delay:.63s}.session-list__item:nth-child(19){animation-delay:665ms}.session-list__item:nth-child(20){animation-delay:.7s}.session-list__item:active{transform:translateY(1px);background:var(--element-bg-subtle)}.session-list__item-icon{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:10px;corner-shape:squircle;flex-shrink:0;color:var(--color-accent-500);background:var(--color-accent-100)}.session-list__item-icon--cowork,.session-list__item-icon--Cowork{color:var(--color-purple-500);background:var(--color-purple-100)}.session-list__item-icon--claw,.session-list__item-icon--Claw{color:var(--color-pink-500);background:var(--color-pink-100)}.session-list__item-body{min-width:0;flex:1;display:flex;flex-direction:column;justify-content:center}.session-list__item-top{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--size-gap-3)}.session-list__item-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);line-height:1.25;color:var(--color-text-primary);min-width:0;flex:1;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}.session-list__item-time{font-size:10px;color:var(--color-text-muted);margin-top:2px}.session-list__agent-badge{display:inline-flex;align-items:center;min-height:18px;padding:0 8px;border-radius:999px;corner-shape:squircle;font-size:10px;font-weight:var(--font-weight-semibold);border:1px solid var(--border-subtle);background:var(--element-bg-subtle);color:var(--color-text-secondary);flex-shrink:0}.session-list__agent-badge--code,.session-list__agent-badge--agentic{background:var(--color-accent-100);color:var(--color-accent-500);border-color:var(--color-accent-200)}.session-list__agent-badge--cowork,.session-list__agent-badge--Cowork{background:var(--color-purple-100);color:var(--color-purple-500);border-color:var(--color-purple-200)}.session-list__agent-badge--claw,.session-list__agent-badge--Claw{background:var(--color-pink-100);color:var(--color-pink-500);border-color:var(--color-pink-200)}.session-list__empty{padding:var(--size-gap-10) var(--size-gap-4);text-align:center;font-size:var(--font-size-sm);line-height:1.6;color:var(--color-text-muted);border:1px solid var(--border-subtle);border-radius:18px;corner-shape:squircle;background:var(--color-bg-secondary)}.session-list__pull-indicator{display:flex;align-items:center;justify-content:center;overflow:hidden;transition:height .2s cubic-bezier(0,0,.2,1)}.session-list__pull-spinner{color:var(--color-text-muted);transition:color var(--motion-fast)}.session-list__pull-spinner.is-active{color:var(--color-accent-500);animation:spin .8s linear infinite}.session-list__load-more{padding:var(--size-gap-3) 0 var(--size-gap-1);text-align:center;font-size:12px;color:var(--color-text-muted)}.session-list__picker-overlay{position:fixed;inset:0;background:var(--color-overlay);display:flex;align-items:flex-end;justify-content:center;z-index:1000;animation:fadeIn var(--motion-fast) var(--easing-standard)}.session-list__picker-modal{width:100%;max-height:60vh;background:var(--color-bg-elevated);border-radius:20px 20px 0 0;overflow:hidden;animation:slideUp var(--motion-base) cubic-bezier(0,0,.2,1)}.session-list__picker-header{display:flex;align-items:center;justify-content:space-between;padding:var(--size-gap-4);border-bottom:1px solid var(--border-subtle)}.session-list__picker-header h3{margin:0;font-size:16px;font-weight:var(--font-weight-semibold);color:var(--color-text-primary)}.session-list__picker-close{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:transparent;color:var(--color-text-secondary);cursor:pointer;border-radius:50%}.session-list__picker-close:active{background:var(--element-bg-subtle)}.session-list__picker-list{padding:var(--size-gap-3);max-height:calc(60vh - 60px);overflow-y:auto}.session-list__picker-empty{padding:var(--size-gap-6);text-align:center;color:var(--color-text-muted);font-size:var(--font-size-sm)}.session-list__picker-item{display:flex;align-items:center;gap:12px;width:100%;padding:12px;border:1px solid var(--border-subtle);border-radius:16px;corner-shape:squircle;background:var(--color-bg-secondary);color:var(--color-text-primary);cursor:pointer;text-align:left;transition:all var(--motion-fast) var(--easing-standard);margin-bottom:8px}.session-list__picker-item:last-child{margin-bottom:0}.session-list__picker-item:active{transform:scale(.99);background:var(--element-bg-subtle)}.session-list__picker-item.is-selected{border-color:var(--color-pink-500);background:var(--color-pink-50)}.session-list__picker-item.is-selected svg{color:var(--color-pink-500)}.session-list__picker-item--workspace.is-selected{border-color:var(--color-accent-500);background:var(--color-accent-50)}.session-list__picker-item--workspace.is-selected svg{color:var(--color-accent-500)}.session-list__picker-item svg{color:var(--color-text-muted);flex-shrink:0}.session-list__picker-item-icon{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:10px;corner-shape:squircle;color:var(--color-pink-500);background:var(--color-pink-100);flex-shrink:0}.session-list__picker-item-icon svg{width:18px;height:18px;color:inherit}.session-list__picker-item--workspace .session-list__picker-item-icon{color:var(--color-accent-500);background:var(--color-accent-100)}.session-list__picker-item-name{flex:1;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-primary)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes sessionItemIn{0%{opacity:0;transform:translateY(12px) scale(.985)}to{opacity:1;transform:translateY(0)}}.session-list__search{display:flex;align-items:center;gap:8px;padding:6px 10px;border:1px solid var(--border-subtle);border-radius:12px;corner-shape:squircle;background:var(--color-bg-secondary);margin-bottom:var(--size-gap-3)}.session-list__search-icon{flex-shrink:0;color:var(--color-text-muted)}.session-list__search-input{flex:1;border:none;background:none;font-size:var(--font-size-sm);color:var(--color-text-primary);outline:none;padding:0;min-width:0}.session-list__search-input::placeholder{color:var(--color-text-muted)}.session-list__search-input::-webkit-search-decoration,.session-list__search-input::-webkit-search-cancel-button{display:none}.session-list__search-clear{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;background:none;color:var(--color-text-muted);cursor:pointer;border-radius:50%;flex-shrink:0}.session-list__search-clear:active{background:var(--element-bg-subtle);color:var(--color-text-primary)}.session-list__menu-overlay{position:fixed;inset:0;background:var(--color-overlay);display:flex;align-items:flex-end;justify-content:center;z-index:1000;animation:fadeIn var(--motion-fast) var(--easing-standard)}.session-list__menu-sheet{width:100%;max-width:440px;background:var(--color-bg-elevated);border-radius:20px 20px 0 0;padding:var(--size-gap-2) var(--size-gap-4) var(--size-gap-6);display:flex;flex-direction:column;gap:var(--size-gap-3);animation:slideUp var(--motion-base) cubic-bezier(0,0,.2,1)}.session-list__menu-handle{width:36px;height:4px;border-radius:999px;background:var(--border-subtle);margin:0 auto}.session-list__menu-title{text-align:center;font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);padding:var(--size-gap-1) 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.session-list__menu-actions{display:flex;flex-direction:column;gap:4px}.session-list__menu-btn{display:flex;align-items:center;gap:12px;width:100%;padding:14px 16px;border:none;border-radius:16px;corner-shape:squircle;background:var(--color-bg-secondary);color:var(--color-text-primary);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);cursor:pointer;text-align:left}.session-list__menu-btn svg{flex-shrink:0}.session-list__menu-btn:active{background:var(--element-bg-subtle);transform:scale(.99)}.session-list__menu-btn--danger{color:var(--color-error);background:var(--color-error-bg)}.session-list__menu-btn--danger:active{background:color-mix(in srgb,var(--color-error) 12%,transparent)}.session-list__menu-cancel{width:100%;padding:14px;border:none;border-radius:14px;corner-shape:squircle;background:var(--color-bg-secondary);color:var(--color-text-secondary);font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);cursor:pointer}.session-list__menu-cancel:active{background:var(--element-bg-subtle)}.session-list__item--active{border-color:var(--color-accent-500)!important;background:var(--element-bg-subtle)!important}.session-list__rename-modal{width:calc(100% - 32px);max-width:400px;background:var(--color-bg-elevated);border-radius:20px;padding:var(--size-gap-5);display:flex;flex-direction:column;gap:var(--size-gap-4);animation:slideUp var(--motion-base) cubic-bezier(0,0,.2,1)}.session-list__rename-title{margin:0;font-size:18px;font-weight:var(--font-weight-semibold);color:var(--color-text-primary);text-align:center}.session-list__rename-input{padding:12px 14px;border:1px solid var(--border-subtle);border-radius:12px;corner-shape:squircle;background:var(--color-bg-secondary);color:var(--color-text-primary);font-size:var(--font-size-base);outline:none}.session-list__rename-input:focus{border-color:var(--color-accent-500);box-shadow:0 0 0 3px var(--color-accent-100)}.session-list__rename-actions{display:flex;gap:10px}.session-list__rename-btn{flex:1;padding:12px;border:none;border-radius:14px;corner-shape:squircle;font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);cursor:pointer;transition:all var(--motion-fast) var(--easing-standard)}.session-list__rename-btn:disabled{opacity:var(--opacity-disabled);cursor:not-allowed}.session-list__rename-btn--cancel{background:var(--color-bg-secondary);color:var(--color-text-secondary)}.session-list__rename-btn--cancel:active:not(:disabled){background:var(--element-bg-subtle)}.session-list__rename-btn--save{background:var(--color-accent-500);color:var(--btn-primary-color)}.session-list__rename-btn--save:active:not(:disabled){opacity:.85}.session-list__confirm-modal{width:calc(100% - 32px);max-width:340px;background:var(--color-bg-elevated);border-radius:20px;padding:var(--size-gap-6) var(--size-gap-5) var(--size-gap-5);display:flex;flex-direction:column;align-items:center;gap:var(--size-gap-3);text-align:center;animation:slideUp var(--motion-base) cubic-bezier(0,0,.2,1)}.session-list__confirm-icon{color:var(--color-error);margin-bottom:var(--size-gap-1)}.session-list__confirm-title{margin:0;font-size:17px;font-weight:var(--font-weight-semibold);color:var(--color-text-primary)}.session-list__confirm-desc{margin:0;font-size:var(--font-size-sm);color:var(--color-text-secondary);line-height:1.5}.session-list__confirm-actions{display:flex;gap:10px;width:100%;margin-top:var(--size-gap-2)}.session-list__confirm-btn{flex:1;padding:12px;border:none;border-radius:14px;corner-shape:squircle;font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);cursor:pointer;transition:all var(--motion-fast) var(--easing-standard)}.session-list__confirm-btn:disabled{opacity:var(--opacity-disabled);cursor:not-allowed}.session-list__confirm-btn--cancel{background:var(--color-bg-secondary);color:var(--color-text-secondary)}.session-list__confirm-btn--cancel:active:not(:disabled){background:var(--element-bg-subtle)}.session-list__confirm-btn--danger{background:var(--color-error);color:var(--btn-primary-color)}.session-list__confirm-btn--danger:active:not(:disabled){opacity:.85}.session-list__toast{position:fixed;bottom:40px;left:50%;transform:translate(-50%);padding:10px 20px;border-radius:999px;background:var(--color-text-primary);color:var(--color-bg-primary);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);z-index:9999;box-shadow:var(--shadow-base);pointer-events:none;animation:toastIn .25s var(--easing-standard)}@keyframes toastIn{0%{opacity:0;transform:translate(-50%) translateY(10px)}to{opacity:1;transform:translate(-50%) translateY(0)}}@media(prefers-reduced-motion:reduce){.session-list *,.session-list *:before,.session-list *:after{animation:none!important;transition:none!important}}.devices-page{position:relative;display:flex;flex-direction:column;height:100%;background:var(--color-bg-primary);overflow:hidden}.devices-page__header{position:relative;z-index:1;display:flex;align-items:center;gap:var(--size-gap-3);padding:0 var(--size-gap-4);min-height:56px;border-bottom:1px solid var(--border-subtle);background:var(--color-bg-elevated);backdrop-filter:var(--blur-base);-webkit-backdrop-filter:var(--blur-base);flex-shrink:0}.devices-page__back-btn,.devices-page__refresh-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:1px solid var(--border-subtle);border-radius:50%;background:var(--element-bg-subtle);color:var(--color-text-secondary);cursor:pointer;transition:all var(--motion-fast) var(--easing-standard);flex-shrink:0}.devices-page__back-btn:active,.devices-page__refresh-btn:active{transform:scale(.96);color:var(--color-text-primary);background:var(--element-bg-base)}.devices-page__back-btn:disabled,.devices-page__refresh-btn:disabled{opacity:var(--opacity-disabled);cursor:not-allowed}.devices-page__back-btn.is-loading svg,.devices-page__refresh-btn.is-loading svg{animation:reconnect-spin .8s linear infinite}.devices-page__title{flex:1;margin:0;font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);color:var(--color-text-primary);letter-spacing:.01em}.devices-page__body{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:var(--size-gap-4)}.devices-page__list{display:flex;flex-direction:column;gap:var(--size-gap-3)}.devices-page__device{display:flex;align-items:center;gap:var(--size-gap-3);width:100%;padding:var(--size-gap-4);border:1px solid var(--border-subtle);border-radius:20px;corner-shape:squircle;background:var(--color-bg-elevated);color:var(--color-text-primary);text-align:left;cursor:pointer;transition:all var(--motion-fast) var(--easing-standard)}.devices-page__device:active:not(:disabled){background:var(--element-bg-subtle);transform:scale(.99)}.devices-page__device.is-offline{opacity:var(--opacity-disabled);cursor:not-allowed}.devices-page__device.is-current{border-color:var(--color-accent-300);background:var(--color-accent-50);cursor:default}.devices-page__device.is-switching{border-color:var(--color-accent-300)}.devices-page__device>svg{flex-shrink:0;color:var(--color-text-muted)}.devices-page__device-icon{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border:1px solid var(--border-subtle);border-radius:var(--size-radius-lg);background:var(--element-bg-subtle);color:var(--color-text-secondary);flex-shrink:0}.is-current .devices-page__device-icon{background:var(--color-accent-100);border-color:var(--color-accent-200);color:var(--color-accent-500)}.devices-page__device-copy{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}.devices-page__device-name-row{display:flex;align-items:center;gap:var(--size-gap-2);min-width:0}.devices-page__device-name{font-size:var(--font-size-base);font-weight:var(--font-weight-medium);color:var(--color-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.devices-page__badge{flex-shrink:0;padding:1px 7px;border:1px solid var(--border-subtle);border-radius:var(--size-radius-full);background:var(--element-bg-subtle);color:var(--color-text-secondary);font-size:10px;font-weight:var(--font-weight-semibold);letter-spacing:.03em}.devices-page__badge--current{border-color:var(--color-accent-200);background:var(--color-accent-100);color:var(--color-accent-500)}.devices-page__device-meta{display:flex;align-items:center;gap:5px;font-size:var(--font-size-xs);color:var(--color-text-muted)}.devices-page__status-dot{display:inline-block;width:7px;height:7px;border-radius:50%;flex-shrink:0}.devices-page__status-dot.is-online{background:var(--color-success)}.devices-page__status-dot.is-offline{background:var(--color-text-muted)}.devices-page__device-id{margin-left:var(--size-gap-1);font-family:var(--font-family-mono);letter-spacing:.02em}.devices-page__device-spinner{flex-shrink:0;width:16px;height:16px;border-width:2px}.devices-page__loading{display:flex;flex-direction:column;align-items:center;gap:var(--size-gap-3);padding:var(--size-gap-10) 0;font-size:var(--font-size-sm);color:var(--color-text-muted)}.devices-page__empty{padding:var(--size-gap-10) 0;text-align:center;font-size:var(--font-size-sm);color:var(--color-text-muted)}.devices-page__empty-card{display:flex;flex-direction:column;align-items:center;gap:var(--size-gap-4);margin-top:var(--size-gap-8);padding:var(--size-gap-8) var(--size-gap-6);border:1px solid var(--border-subtle);border-radius:20px;corner-shape:squircle;background:var(--color-bg-elevated)}.devices-page__empty-icon{display:inline-flex;color:var(--color-text-muted)}.devices-page__empty-text{margin:0;font-size:var(--font-size-sm);line-height:var(--line-height-relaxed);color:var(--color-text-secondary);text-align:center}.devices-page__retry-btn{padding:var(--size-gap-2) var(--size-gap-6);border:1px solid var(--border-base);border-radius:var(--size-radius-full);background:var(--btn-default-bg);color:var(--color-text-primary);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);cursor:pointer;transition:all var(--motion-fast) var(--easing-standard)}.devices-page__retry-btn:active{background:var(--btn-hover-bg)}.devices-page__error{margin:var(--size-gap-3) var(--size-gap-4) 0;padding:var(--size-gap-2) var(--size-gap-3);font-size:var(--font-size-xs);color:var(--color-error);background:var(--color-error-bg);border:1px solid var(--color-error-border);border-radius:var(--size-radius-base)}.workspace-page{display:flex;flex-direction:column;height:100%;background:var(--color-bg-primary)}.workspace-page__header{display:flex;align-items:center;justify-content:space-between;gap:var(--size-gap-3);padding:0 var(--size-gap-5);height:56px;min-height:56px;border-bottom:1px solid var(--border-subtle);background:var(--color-bg-elevated);backdrop-filter:var(--blur-base);-webkit-backdrop-filter:var(--blur-base);flex-shrink:0}.workspace-page__header h1{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-primary)}.workspace-page__content{flex:1;overflow-y:auto;padding:var(--size-gap-4);-webkit-overflow-scrolling:touch}.workspace-page__loading{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:var(--size-gap-4);color:var(--color-text-muted);font-size:var(--font-size-sm)}.workspace-page__current{display:flex;flex-direction:column;gap:var(--size-gap-4)}.workspace-page__current-label,.workspace-page__recent-label{font-size:9px;font-weight:var(--font-weight-semibold);color:var(--color-accent-500);text-transform:uppercase;letter-spacing:.14em}.workspace-page__current-card{border:1px solid var(--border-subtle);border-radius:18px;corner-shape:squircle;padding:var(--size-gap-4);background:var(--color-bg-elevated);box-shadow:var(--shadow-sm);transition:all var(--motion-fast) var(--easing-standard)}.workspace-page__project-name{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);margin-bottom:var(--size-gap-1)}.workspace-page__project-path{font-size:var(--font-size-xs);color:var(--color-text-muted);word-break:break-all;margin-bottom:var(--size-gap-2);font-family:var(--font-family-mono)}.workspace-page__git-branch{display:inline-flex;align-items:center;gap:4px;font-size:var(--font-size-xs);color:var(--color-accent-500);background:var(--color-accent-100);padding:3px var(--size-gap-2);border-radius:8px;corner-shape:squircle;word-break:break-all}.workspace-page__actions{display:flex;gap:var(--size-gap-2)}.workspace-page__btn{flex:1;padding:var(--size-gap-3) var(--size-gap-4);border:none;border-radius:12px;corner-shape:squircle;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);cursor:pointer;transition:all var(--motion-fast) var(--easing-standard)}.workspace-page__btn--primary{background:var(--color-accent-500);color:var(--btn-primary-color)}.workspace-page__btn--primary:active{background:var(--color-accent-600)}.workspace-page__btn--secondary{background:var(--element-bg-subtle);color:var(--color-text-primary);border:1px solid var(--border-subtle)}.workspace-page__btn--secondary:active{background:var(--element-bg-base)}.workspace-page__btn:disabled{opacity:var(--opacity-disabled);cursor:not-allowed}.workspace-page__no-workspace{display:flex;flex-direction:column;align-items:center;text-align:center;padding:var(--size-gap-10) var(--size-gap-5);gap:var(--size-gap-3);border:1px solid var(--border-subtle);border-radius:22px;corner-shape:squircle;background:var(--color-bg-elevated);box-shadow:var(--shadow-base)}.workspace-page__no-workspace-icon{color:var(--color-text-muted);opacity:.5}.workspace-page__no-workspace-text{font-size:var(--font-size-base);font-weight:var(--font-weight-medium);color:var(--color-text-primary)}.workspace-page__no-workspace-hint{font-size:var(--font-size-xs);color:var(--color-text-muted);max-width:280px}.workspace-page__recent{margin-top:var(--size-gap-5);display:flex;flex-direction:column;gap:var(--size-gap-3);animation:slideUp .3s cubic-bezier(0,0,.2,1) both}.workspace-page__recent-empty{text-align:center;color:var(--color-text-muted);font-size:var(--font-size-xs);padding:var(--size-gap-6) 0}.workspace-page__recent-list{display:flex;flex-direction:column;gap:var(--size-gap-2)}.workspace-page__recent-item{display:flex;flex-direction:column;align-items:flex-start;background:var(--color-bg-secondary);border:1px solid var(--border-subtle);border-radius:14px;corner-shape:squircle;padding:12px;cursor:pointer;text-align:left;color:var(--color-text-primary);box-shadow:var(--shadow-xs);transition:all var(--motion-fast) var(--easing-standard);animation:slideUp .3s cubic-bezier(0,0,.2,1) both}.workspace-page__recent-item:nth-child(1){animation-delay:.04s}.workspace-page__recent-item:nth-child(2){animation-delay:.08s}.workspace-page__recent-item:nth-child(3){animation-delay:.12s}.workspace-page__recent-item:nth-child(4){animation-delay:.16s}.workspace-page__recent-item:nth-child(5){animation-delay:.2s}.workspace-page__recent-item:nth-child(6){animation-delay:.24s}.workspace-page__recent-item:nth-child(7){animation-delay:.28s}.workspace-page__recent-item:nth-child(8){animation-delay:.32s}.workspace-page__recent-item:nth-child(9){animation-delay:.36s}.workspace-page__recent-item:nth-child(10){animation-delay:.4s}.workspace-page__recent-item:nth-child(11){animation-delay:.44s}.workspace-page__recent-item:nth-child(12){animation-delay:.48s}.workspace-page__recent-item:nth-child(13){animation-delay:.52s}.workspace-page__recent-item:nth-child(14){animation-delay:.56s}.workspace-page__recent-item:nth-child(15){animation-delay:.6s}.workspace-page__recent-item:nth-child(16){animation-delay:.64s}.workspace-page__recent-item:nth-child(17){animation-delay:.68s}.workspace-page__recent-item:nth-child(18){animation-delay:.72s}.workspace-page__recent-item:nth-child(19){animation-delay:.76s}.workspace-page__recent-item:nth-child(20){animation-delay:.8s}.workspace-page__recent-item:active{transform:translateY(1px);background:var(--element-bg-subtle)}.workspace-page__recent-item:disabled{opacity:var(--opacity-disabled);cursor:not-allowed}.workspace-page__recent-item-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-primary);margin-bottom:2px}.workspace-page__recent-item-path{font-size:11px;color:var(--color-text-muted);word-break:break-all;font-family:var(--font-family-mono)}.workspace-page__switching{display:flex;align-items:center;justify-content:center;gap:var(--size-gap-2);padding:var(--size-gap-4);color:var(--color-text-muted);font-size:var(--font-size-xs)}.workspace-page__error{margin-top:var(--size-gap-3);font-size:var(--font-size-xs);color:var(--color-error);text-align:center;padding:var(--size-gap-2) var(--size-gap-3);background:var(--color-error-bg);border-radius:10px;corner-shape:squircle}@media(prefers-reduced-motion:reduce){.workspace-page__recent,.workspace-page__recent-item{animation:none}.workspace-page__recent-item{transition:none}}.chat-page{display:flex;flex-direction:column;height:100%;background:var(--color-bg-flowchat)}.chat-page__header{display:flex;align-items:center;gap:var(--size-gap-2);padding:0 var(--size-gap-5);min-height:56px;border-bottom:1px solid var(--border-subtle);flex-shrink:0;background:var(--color-bg-elevated);backdrop-filter:var(--blur-base);-webkit-backdrop-filter:var(--blur-base);position:relative;z-index:10}.chat-page__header-row{display:flex;align-items:center;gap:var(--size-gap-2);flex:1;min-width:0}.chat-page__back{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;background:none;border:none;color:var(--color-text-muted);cursor:pointer;padding:0;flex-shrink:0;border-radius:50%;transition:all var(--motion-fast) var(--easing-standard)}.chat-page__back:active{background:var(--element-bg-subtle);color:var(--color-text-primary)}.chat-page__header-center{flex:1;min-width:0;overflow:hidden;text-align:center}.chat-page__title{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.chat-page__header-right{display:flex;align-items:center;gap:var(--size-gap-1);flex-shrink:0}.chat-page__theme-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;background:none;border:none;color:var(--color-text-muted);cursor:pointer;border-radius:50%;transition:all var(--motion-fast) var(--easing-standard)}.chat-page__theme-btn:active{background:var(--element-bg-subtle)}.chat-page__header-workspace{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--color-text-muted);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;justify-content:center}.chat-page__workspace-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--color-accent-500);font-weight:var(--font-weight-medium);font-size:11px}.chat-page__workspace-branch{color:var(--color-text-muted);font-weight:var(--font-weight-normal);flex-shrink:0;font-size:11px;display:inline-flex;align-items:center;gap:3px}.chat-page__messages{flex:1;overflow-y:auto;padding:var(--size-gap-4) var(--size-gap-4) 100px;-webkit-overflow-scrolling:touch;display:flex;flex-direction:column;gap:var(--size-gap-4);position:relative}.chat-page__load-more-indicator{text-align:center;font-size:var(--font-size-xs);color:var(--color-text-muted);padding:var(--size-gap-2) 0}.chat-page__scroll-to-bottom{position:fixed;bottom:110px;left:50%;transform:translate(-50%);width:40px;height:40px;border-radius:50%;border:1px solid var(--border-subtle);background:var(--color-bg-elevated);color:var(--color-text-primary);box-shadow:var(--shadow-base);cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:15;animation:scrollBtnIn .2s var(--easing-standard)}.chat-page__scroll-to-bottom:active{transform:translate(-50%) scale(.92);box-shadow:var(--shadow-sm)}.chat-page__scroll-to-bottom:focus-visible{outline:2px solid var(--color-accent-500);outline-offset:2px}@media(prefers-reduced-motion:reduce){.chat-page__scroll-to-bottom{animation:none}}@media(forced-colors:active){.chat-page__scroll-to-bottom{border:2px solid ButtonText;background:ButtonFace;color:ButtonText}}@keyframes scrollBtnIn{0%{opacity:0;transform:translate(-50%) scale(.7)}to{opacity:1;transform:translate(-50%) scale(1)}}.chat-msg{display:flex;flex-direction:column;width:100%}.chat-msg--user{align-items:flex-start}.chat-msg__user-card{display:flex;align-items:flex-start;width:100%}.chat-msg__user-avatar{display:none}.chat-msg__user-content{width:100%;font-size:var(--font-size-sm);line-height:var(--line-height-relaxed);color:var(--color-text-primary);word-break:break-word;white-space:pre-wrap;padding:8px 12px;background:var(--element-bg-subtle);border:1px solid var(--border-subtle);border-radius:var(--size-radius-base)}.chat-msg__user-images{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}.chat-msg__user-image{width:48px;height:48px;border-radius:6px;object-fit:cover;border:1px solid var(--border-subtle)}.chat-msg--assistant{align-items:flex-start;gap:var(--size-gap-1)}.chat-msg--collapsed{padding:0}.chat-msg__response-toggle{display:inline-flex;align-items:center;gap:6px;background:none;border:none;color:var(--color-text-muted);font-size:var(--font-size-xs);cursor:pointer;padding:3px 0;text-align:left}.chat-msg__response-toggle:active{opacity:.7}.chat-msg__response-chevron{display:inline-flex;align-items:center;transition:transform var(--motion-fast) var(--easing-standard)}.chat-msg__response-chevron.is-open{transform:rotate(90deg)}.chat-msg__response-label{color:var(--color-text-muted);font-style:italic;font-size:var(--font-size-xs)}.chat-msg__image-analyzing{display:flex;align-items:center;gap:8px;padding:10px 14px;font-size:var(--font-size-sm);color:var(--color-text-secondary);background:var(--element-bg-subtle);border-radius:10px;animation:analyzeGlow 2s ease-in-out infinite}.chat-msg__image-analyzing span{flex-shrink:0}.chat-msg__image-analyzing-icon{display:flex;align-items:center;color:var(--color-accent-500);animation:analyzeSpin 3s linear infinite}@keyframes analyzeSpin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes analyzeGlow{0%,to{opacity:1}50%{opacity:.7}}.chat-page__toast{position:fixed;top:48px;left:16px;right:16px;padding:12px 16px;border-radius:10px;background:var(--color-error);color:var(--btn-primary-color);font-size:13px;line-height:1.4;z-index:9999;white-space:pre-line;animation:toastSlideIn .25s ease-out;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.chat-page__toast--info{background:var(--color-success)}@keyframes toastSlideIn{0%{transform:translateY(-20px);opacity:0}to{transform:translateY(0);opacity:1}}.chat-msg--menu-active{opacity:.7}.chat-msg__menu-overlay{position:fixed;inset:0;background:var(--color-overlay);display:flex;align-items:flex-end;justify-content:center;z-index:1000;animation:menuFadeIn var(--motion-fast) var(--easing-standard)}.chat-msg__menu-sheet{width:100%;max-width:440px;background:var(--color-bg-elevated);border-radius:20px 20px 0 0;padding:var(--size-gap-2) var(--size-gap-4) var(--size-gap-6);display:flex;flex-direction:column;gap:var(--size-gap-3);animation:menuSlideUp var(--motion-base) cubic-bezier(0,0,.2,1)}.chat-msg__menu-handle{width:36px;height:4px;border-radius:999px;background:var(--border-subtle);margin:0 auto}.chat-msg__menu-actions{display:flex;flex-direction:column;gap:4px}.chat-msg__menu-btn{display:flex;align-items:center;gap:12px;width:100%;padding:14px 16px;border:none;border-radius:16px;background:var(--color-bg-secondary);color:var(--color-text-primary);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);cursor:pointer;text-align:left}.chat-msg__menu-btn svg{flex-shrink:0}.chat-msg__menu-btn:active:not(:disabled){background:var(--element-bg-subtle);transform:scale(.99)}.chat-msg__menu-btn:disabled{opacity:var(--opacity-disabled);cursor:not-allowed}.chat-msg__menu-btn--danger{color:var(--color-error);background:var(--color-error-bg)}.chat-msg__menu-btn--danger:active:not(:disabled){background:var(--color-error-border)}.chat-msg__menu-cancel{width:100%;padding:14px;border:none;border-radius:14px;background:var(--color-bg-secondary);color:var(--color-text-secondary);font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);cursor:pointer}.chat-msg__menu-cancel:active{background:var(--element-bg-subtle)}@keyframes menuFadeIn{0%{opacity:0}to{opacity:1}}@keyframes menuSlideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.chat-msg__menu-sheet,.chat-msg__menu-overlay{animation:none}}.mobile-lang-btn{display:inline-flex;align-items:center;justify-content:center;min-width:32px;height:32px;padding:0 10px;border:1px solid var(--border-subtle);border-radius:999px;background:var(--element-bg-subtle);color:var(--color-text-secondary);font-size:11px;font-weight:var(--font-weight-semibold);letter-spacing:.04em;cursor:pointer;transition:all var(--motion-fast) var(--easing-standard)}.mobile-lang-btn:active{transform:scale(.96);color:var(--color-text-primary);background:var(--element-bg-base)}.chat-tool-list{display:flex;flex-direction:column;gap:var(--size-gap-1);width:100%}.chat-tool-list--collapsed{border:1px solid var(--border-base);border-radius:var(--size-radius-lg);background:color-mix(in srgb,var(--color-bg-secondary) 60%,transparent);-webkit-backdrop-filter:var(--blur-base);backdrop-filter:var(--blur-base);overflow:hidden}.chat-tool-list__header{display:flex;align-items:center;gap:var(--size-gap-2);padding:var(--size-gap-2) var(--size-gap-3);min-height:32px;cursor:pointer;transition:background var(--motion-fast) var(--easing-standard)}.chat-tool-list__header:active{background:var(--element-bg-subtle)}.chat-tool-list__chevron{display:flex;align-items:center;color:var(--color-text-muted);transition:transform var(--motion-fast) var(--easing-standard);flex-shrink:0}.chat-tool-list__chevron.is-expanded{transform:rotate(180deg)}.chat-tool-list__count{font-size:12px;font-weight:var(--font-weight-medium);color:var(--color-text-secondary)}.chat-tool-list__stats{display:flex;gap:var(--size-gap-2);margin-left:auto}.chat-tool-list__stat{font-size:11px;font-variant-numeric:tabular-nums}.chat-tool-list__stat--done{color:var(--color-success)}.chat-tool-list__stat--running{color:var(--color-warning)}.chat-tool-list__scroll{display:flex;flex-direction:column;gap:var(--size-gap-1);padding:var(--size-gap-2);max-height:140px;border-top:1px solid var(--border-subtle);overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;scroll-behavior:smooth}.chat-tool-list__scroll .chat-tool-card{flex-shrink:0}.chat-tool-list__scroll{mask-image:linear-gradient(to bottom,transparent 0px,black 16px,black 100%);-webkit-mask-image:linear-gradient(to bottom,transparent 0px,black 16px,black 100%)}.chat-tool-list__scroll::-webkit-scrollbar{width:3px}.chat-tool-list__scroll::-webkit-scrollbar-track{background:transparent}.chat-tool-list__scroll::-webkit-scrollbar-thumb{background:var(--color-text-muted);border-radius:2px;opacity:.4}.chat-tool-card{border-radius:var(--size-radius-base);border:1px solid var(--border-base);background:var(--color-bg-flowchat);overflow:hidden;transition:all var(--motion-fast) var(--easing-standard)}.chat-tool-card--running{border-color:var(--color-warning-border)}.chat-tool-card--done{border-color:var(--color-success-border)}.chat-tool-card--error{border-color:var(--color-error-border)}.chat-tool-card--pending{border-color:var(--color-warning-border)}.chat-tool-card__row{display:flex;align-items:center;gap:var(--size-gap-2);padding:var(--size-gap-2) var(--size-gap-3);cursor:pointer;min-height:36px}.chat-tool-card__icon{display:flex;align-items:center;justify-content:center;width:16px;height:16px;flex-shrink:0}.chat-tool-card__spinner{display:inline-block;width:14px;height:14px;border:2px solid var(--color-warning-border);border-top-color:var(--color-warning);border-radius:50%;animation:spin .7s linear infinite}.chat-tool-card__check{color:var(--color-success);display:flex;align-items:center}.chat-tool-card__error-icon{color:var(--color-error);display:flex;align-items:center}.chat-tool-card__pending-icon{color:var(--color-warning);display:flex;align-items:center}.chat-tool-card__name{flex:1;font-size:var(--font-size-xs);color:var(--color-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:var(--font-weight-medium);min-width:0}.chat-tool-card__preview{font-weight:var(--font-weight-normal);color:var(--color-text-muted)}.chat-tool-card__type{display:inline-flex;align-items:center;padding:1px 6px;border-radius:var(--size-radius-sm);font-size:11px;font-weight:var(--font-weight-medium);background:var(--color-accent-100);color:var(--color-accent-500);flex-shrink:0}.chat-tool-card__duration{font-size:11px;color:var(--color-text-muted);flex-shrink:0;font-variant-numeric:tabular-nums;font-family:var(--font-family-mono)}.chat-tool-card__cancel{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;border-radius:var(--size-radius-sm);border:none;background:var(--color-error);color:var(--btn-primary-color);cursor:pointer;flex-shrink:0;transition:all var(--motion-fast) var(--easing-standard);margin-left:auto;box-shadow:0 1px 4px var(--color-error-border)}.chat-tool-card__cancel:active{transform:scale(.9)}.chat-tool-card__cancel svg{flex-shrink:0}.chat-tool-card__expanded{border-top:1px solid var(--border-subtle);padding:var(--size-gap-2) var(--size-gap-3);font-size:var(--font-size-xs);color:var(--color-text-muted);max-height:200px;overflow-y:auto;font-family:var(--font-family-mono);line-height:var(--line-height-relaxed);white-space:pre-wrap;word-break:break-all}.chat-task-card{border-radius:var(--size-radius-lg);border:1px solid var(--border-base);background:color-mix(in srgb,var(--color-bg-secondary) 60%,transparent);-webkit-backdrop-filter:var(--blur-base);backdrop-filter:var(--blur-base);overflow:hidden;width:100%}.chat-task-card--running{border-color:var(--color-warning-border)}.chat-task-card--done{border-color:var(--color-success-border)}.chat-task-card--error{border-color:var(--color-error-border)}.chat-task-card--pending{border-color:var(--color-warning-border)}.chat-task-card__header{display:flex;align-items:center;gap:var(--size-gap-2);padding:var(--size-gap-2) var(--size-gap-3);min-height:36px}.chat-task-card__summary{display:flex;align-items:center;gap:var(--size-gap-2);padding:4px var(--size-gap-3);border-top:1px solid var(--border-subtle);min-height:24px;cursor:pointer;transition:background var(--motion-fast) var(--easing-standard)}.chat-task-card__summary:active{background:var(--element-bg-subtle)}.chat-task-card__chevron{display:flex;align-items:center;color:var(--color-text-muted);transition:transform var(--motion-fast) var(--easing-standard);flex-shrink:0}.chat-task-card__chevron.is-expanded{transform:rotate(180deg)}.chat-task-card__stat{font-size:11px;font-weight:var(--font-weight-medium);color:var(--color-text-muted)}.chat-task-card__stat-right{display:flex;gap:var(--size-gap-2);margin-left:auto}.chat-task-card__stat--done{font-size:11px;color:var(--color-success);font-variant-numeric:tabular-nums}.chat-task-card__stat--running{font-size:11px;color:var(--color-warning);font-variant-numeric:tabular-nums}.chat-task-card__steps{border-top:1px solid var(--border-subtle);max-height:140px;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;scroll-behavior:smooth;padding:var(--size-gap-1) var(--size-gap-3);mask-image:linear-gradient(to bottom,transparent 0px,black 8px,black 100%);-webkit-mask-image:linear-gradient(to bottom,transparent 0px,black 8px,black 100%)}.chat-task-card__steps::-webkit-scrollbar{width:3px}.chat-task-card__steps::-webkit-scrollbar-track{background:transparent}.chat-task-card__steps::-webkit-scrollbar-thumb{background:var(--color-text-muted);border-radius:2px;opacity:.4}.chat-task-card__step{display:flex;align-items:center;gap:var(--size-gap-2);padding:3px 0;font-size:11px;color:var(--color-text-muted);min-height:22px}.chat-task-card__step svg{flex-shrink:0}.chat-task-card__step--thinking{color:var(--color-text-muted);opacity:.7}.chat-task-card__step--thinking svg{transform:rotate(-90deg)}.chat-task-card__step-spinner{display:inline-block;width:10px;height:10px;border:1.5px solid var(--color-warning-border);border-top-color:var(--color-warning);border-radius:50%;animation:spin .7s linear infinite;flex-shrink:0}.chat-task-card__step-name{font-weight:var(--font-weight-medium);color:var(--color-text-secondary);flex-shrink:0}.chat-task-card__step-preview{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--color-text-muted)}.chat-task-card__step-duration{flex-shrink:0;font-variant-numeric:tabular-nums;font-family:var(--font-family-mono);color:var(--color-text-muted)}.chat-ask-card{border:1px solid var(--border-base);border-radius:var(--size-radius-lg);background:color-mix(in srgb,var(--color-bg-secondary) 80%,transparent);-webkit-backdrop-filter:var(--blur-base);backdrop-filter:var(--blur-base);overflow:hidden;width:100%}.chat-ask-card__header{display:flex;align-items:center;gap:var(--size-gap-2);padding:var(--size-gap-2) var(--size-gap-3);border-bottom:1px solid var(--border-subtle)}.chat-ask-card__count{font-size:12px;font-weight:var(--font-weight-medium);color:var(--color-text-secondary);flex:1}.chat-ask-card__submit{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:var(--size-radius-base);border:1px solid var(--color-accent-500);background:transparent;color:var(--color-accent-500);font-size:12px;font-weight:var(--font-weight-medium);cursor:pointer;transition:all var(--motion-fast) var(--easing-standard)}.chat-ask-card__submit:disabled{opacity:.4;cursor:not-allowed}.chat-ask-card__submit:not(:disabled):active{background:var(--color-accent-100)}.chat-ask-card__submit--bottom{width:100%;justify-content:center;padding:10px;margin-top:8px;font-size:13px}.chat-ask-card__waiting{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--color-warning)}.chat-ask-card__waiting:before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--color-warning);animation:pulse-dot 1.4s ease-in-out infinite}@keyframes pulse-dot{0%,to{opacity:.4}50%{opacity:1}}.chat-ask-card__question{padding:var(--size-gap-2) var(--size-gap-3)}.chat-ask-card__question+.chat-ask-card__question{border-top:1px solid var(--border-subtle)}.chat-ask-card__question-header{display:flex;align-items:baseline;gap:var(--size-gap-2);margin-bottom:var(--size-gap-2)}.chat-ask-card__tag{display:inline-flex;padding:1px 6px;border-radius:var(--size-radius-sm);font-size:11px;font-weight:var(--font-weight-medium);background:var(--color-accent-100);color:var(--color-accent-500);flex-shrink:0}.chat-ask-card__question-text{font-size:13px;color:var(--color-text-primary);font-weight:var(--font-weight-medium)}.chat-ask-card__options{display:flex;flex-direction:column;gap:var(--size-gap-1)}.chat-ask-card__option{display:flex;align-items:center;gap:var(--size-gap-2);padding:8px 10px;border-radius:var(--size-radius-base);border:1px solid var(--border-base);background:var(--color-bg-flowchat);cursor:pointer;text-align:left;width:100%;transition:all var(--motion-fast) var(--easing-standard)}.chat-ask-card__option:active:not(:disabled){background:var(--color-bg-secondary)}.chat-ask-card__option.is-selected{border-color:var(--color-accent-500);background:color-mix(in srgb,var(--color-accent-100) 40%,transparent)}.chat-ask-card__option:disabled{opacity:.6;cursor:not-allowed}.chat-ask-card__radio{display:flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;border:1.5px solid var(--color-text-muted);flex-shrink:0;color:var(--color-accent-500);transition:all var(--motion-fast) var(--easing-standard)}.is-selected .chat-ask-card__radio{border-color:var(--color-accent-500);background:var(--color-accent-500);color:var(--btn-primary-color)}.chat-ask-card__radio--multi{border-radius:3px}.chat-ask-card__option-label{font-size:13px;color:var(--color-text-primary);font-weight:var(--font-weight-medium);flex-shrink:0}.chat-ask-card__option-desc{font-size:11px;color:var(--color-text-muted);flex:1;text-align:right}.chat-ask-card__custom-input{width:100%;padding:6px 10px;border-radius:var(--size-radius-base);border:1px solid var(--border-base);background:var(--color-bg-flowchat);color:var(--color-text-primary);font-size:13px;outline:none}.chat-ask-card__custom-input:focus{border-color:var(--color-accent-500)}.chat-ask-card__custom-input:disabled{opacity:.5}.chat-todo-card{border-radius:var(--size-radius-base);border:1px solid var(--border-base);background:var(--color-bg-flowchat);overflow:hidden;width:100%}.chat-todo-card__header{display:flex;align-items:center;gap:var(--size-gap-2);padding:var(--size-gap-2) var(--size-gap-3);cursor:pointer;min-height:36px;transition:background var(--motion-fast) var(--easing-standard)}.chat-todo-card__header:active{background:var(--element-bg-subtle)}.chat-todo-card__icon{display:flex;align-items:center;color:var(--color-accent-500);flex-shrink:0}.chat-todo-card__current{flex:1;min-width:0;font-size:var(--font-size-xs);color:var(--color-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chat-todo-card__current--done{color:var(--color-success);font-weight:var(--font-weight-medium)}.chat-todo-card__right{display:flex;align-items:center;gap:var(--size-gap-2);flex-shrink:0;margin-left:auto}.chat-todo-card__dots{display:flex;align-items:center;gap:3px;flex-shrink:0}.chat-todo-card__dot{width:6px;height:6px;border-radius:50%;transition:all var(--motion-fast) var(--easing-standard)}.chat-todo-card__dot--completed{background:var(--color-success)}.chat-todo-card__dot--in_progress{background:var(--color-accent-500);animation:todoPulse 1.4s ease-in-out infinite}.chat-todo-card__dot--pending{background:var(--color-text-muted);opacity:.3}.chat-todo-card__dot--cancelled{background:var(--color-error);opacity:.5}@keyframes todoPulse{0%,to{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.3)}}.chat-todo-card__stats{font-size:11px;font-weight:var(--font-weight-medium);color:var(--color-text-muted);font-variant-numeric:tabular-nums;flex-shrink:0}.chat-todo-card__chevron{display:flex;align-items:center;color:var(--color-text-muted);transition:transform var(--motion-fast) var(--easing-standard);flex-shrink:0}.chat-todo-card__chevron.is-expanded{transform:rotate(180deg)}.chat-todo-card__list{border-top:1px solid var(--border-subtle);padding:var(--size-gap-2) var(--size-gap-3);display:flex;flex-direction:column;gap:var(--size-gap-1)}.chat-todo-card__item{display:flex;align-items:flex-start;gap:var(--size-gap-2);padding:4px 0}.chat-todo-card__item svg{flex-shrink:0;margin-top:1px}.chat-todo-card__item--completed{opacity:.6}.chat-todo-card__item--cancelled{opacity:.4}.chat-todo-card__item-text{font-size:var(--font-size-xs);color:var(--color-text-primary);line-height:var(--line-height-base)}.chat-todo-card__item--in_progress .chat-todo-card__item-text{color:var(--color-accent-500);font-weight:var(--font-weight-medium)}.chat-thinking{display:flex;flex-direction:column;width:100%}.chat-thinking__toggle{display:inline-flex;align-items:center;gap:6px;background:none;border:none;color:var(--color-text-muted);font-size:var(--font-size-xs);cursor:pointer;padding:3px 0;text-align:left}.chat-thinking__toggle:active{opacity:.7}.chat-thinking__chevron{display:inline-flex;align-items:center;transition:transform var(--motion-fast) var(--easing-standard)}.chat-thinking__chevron.is-open{transform:rotate(90deg)}.chat-thinking__label{color:var(--color-text-muted);font-style:italic;font-size:var(--font-size-xs)}.chat-thinking__expand-container{display:grid;grid-template-rows:0fr;transition:grid-template-rows var(--motion-base) var(--easing-standard)}.chat-thinking__expand-container.is-expanded{grid-template-rows:1fr}.chat-thinking__expand-inner{overflow:hidden}.chat-thinking__content-wrapper{position:relative;max-height:300px;overflow-y:auto;-webkit-overflow-scrolling:touch}.chat-thinking__content-wrapper:before,.chat-thinking__content-wrapper:after{content:"";position:sticky;left:0;right:0;height:24px;z-index:1;pointer-events:none;display:block}.chat-thinking__content-wrapper:before{top:0;background:linear-gradient(to bottom,var(--color-bg-flowchat),transparent)}.chat-thinking__content-wrapper:after{bottom:0;background:linear-gradient(to top,var(--color-bg-flowchat),transparent)}.chat-thinking__content-wrapper.at-top:before{display:none}.chat-thinking__content-wrapper.at-bottom:after{display:none}.chat-thinking__content{padding:var(--size-gap-2) 0;font-size:var(--font-size-xs);color:var(--color-text-muted);line-height:var(--line-height-relaxed)}.chat-thinking__content p{margin-bottom:6px}.chat-thinking__content p:last-child{margin-bottom:0}.chat-thinking__content code{background:var(--element-bg-base);padding:1px 4px;border-radius:3px;font-size:11px;font-family:var(--font-family-mono)}.chat-thinking--streaming .chat-thinking__label:after{content:"";display:inline-block;width:4px;height:12px;background:var(--color-text-muted);margin-left:4px;animation:pulse 1s ease-in-out infinite;vertical-align:middle;border-radius:1px}.chat-page__input-wrap{position:fixed;bottom:16px;left:50%;transform:translate(-50%);width:100%;max-width:700px;z-index:20;display:flex;justify-content:center;padding:0 8px;transition:max-width .3s cubic-bezier(.4,0,.2,1),padding .3s cubic-bezier(.4,0,.2,1)}.chat-page__input-wrap:not(.is-expanded){max-width:480px}.chat-page__input-wrap:not(.is-expanded) .chat-page__input-box{min-height:42px;max-height:42px;padding:0 8px 0 20px;border-radius:21px;border:1px solid var(--border-subtle);flex-direction:row;align-items:center;gap:8px;cursor:pointer;box-shadow:var(--shadow-lg)}.chat-page__input-wrap:not(.is-expanded) .chat-page__input-box:active{background:var(--color-bg-elevated);box-shadow:var(--shadow-xl);transform:translateY(-1px)}.chat-page__input-wrap:not(.is-expanded) .chat-page__input-area{flex:1 1 auto;min-height:auto;min-width:0}.chat-page__input-wrap:not(.is-expanded) .chat-page__input-actions-left{display:none}.chat-page__input-wrap:not(.is-expanded) .chat-page__input-actions{flex-shrink:0;padding:0;height:auto}.chat-page__input-wrap:not(.is-expanded) .chat-page__action-btn{display:none}.chat-page__input-wrap:not(.is-expanded) .chat-page__mode-pill{display:none}.chat-page__input-wrap:not(.is-expanded) .chat-page__send-btn{width:24px;height:24px;opacity:.35}.chat-page__input-wrap.is-expanded .chat-page__input-box{border-radius:12px;padding:12px 8px 0;border:1px solid var(--border-base);flex-direction:column;gap:0}.chat-page__input-box{position:relative;width:100%;display:flex;pointer-events:auto;background:var(--color-bg-tertiary);backdrop-filter:blur(16px) saturate(1.2);-webkit-backdrop-filter:blur(16px) saturate(1.2);transition:border-radius .3s cubic-bezier(.4,0,.2,1),padding .3s cubic-bezier(.4,0,.2,1),min-height .3s cubic-bezier(.4,0,.2,1),max-height .3s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),border-color .3s cubic-bezier(.4,0,.2,1),background .3s cubic-bezier(.4,0,.2,1);box-shadow:var(--shadow-xl)}.chat-page__input-area{position:relative;display:flex;align-items:flex-start;flex:1 1 auto;min-width:0;width:100%;min-height:40px}.chat-page__input{width:100%;background:transparent;border:none;color:var(--color-text-primary);font-size:14px;padding:0 28px 0 0;resize:none;min-height:36px;max-height:120px;outline:none;font-family:var(--font-family-sans);line-height:1.5}.chat-page__input::placeholder{color:var(--color-text-primary);opacity:.6}.chat-page__input:disabled{opacity:var(--opacity-disabled);cursor:not-allowed}.chat-page__input-placeholder{display:block;width:100%;min-width:0;font-size:14px;color:var(--color-text-primary);opacity:.6;line-height:24px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chat-page__input-actions{display:flex;align-items:flex-end;justify-content:space-between;gap:8px;min-width:0;min-height:24px;padding:0 0 7px}.chat-page__input-actions-left{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.chat-page__input-actions-right{display:flex;align-items:flex-end;gap:6px;margin-left:auto;flex-shrink:0}.chat-model-selector{position:relative;flex-shrink:0}.chat-model-selector__trigger{display:inline-flex;align-items:center;gap:4px;min-width:0;height:24px;padding:0 8px;border:none;border-radius:12px;background:var(--element-bg-subtle);color:var(--color-text-secondary);cursor:pointer;transition:all .2s ease}.chat-model-selector__trigger:active:not(:disabled),.chat-model-selector__trigger--open{background:var(--color-accent-100);color:var(--color-text-primary)}.chat-model-selector__trigger:disabled{opacity:var(--opacity-disabled);cursor:not-allowed}.chat-model-selector__icon,.chat-model-selector__thinking,.chat-model-selector__chevron{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.chat-model-selector__icon,.chat-model-selector__chevron{color:var(--color-text-muted)}.chat-model-selector__thinking{color:var(--color-purple-500)}.chat-model-selector__name{max-width:96px;display:inline-flex;align-items:center;gap:4px;min-width:0}.chat-model-selector__name-text{min-width:0;flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:9px;letter-spacing:.3px}.chat-model-selector__effort{display:inline-flex;align-items:center;justify-content:center;padding:1px 4px;border-radius:4px;background:var(--color-success-bg);color:var(--color-success);font-size:7px;font-weight:600;line-height:1;text-transform:uppercase}.chat-model-selector__dropdown{position:absolute;bottom:calc(100% + 8px);left:0;width:180px;max-width:180px;max-height:min(345px,100vh - 160px);display:flex;flex-direction:column;overflow:hidden;border:1px solid var(--border-subtle);border-radius:10px;background:var(--color-bg-elevated);box-shadow:var(--shadow-xl);backdrop-filter:blur(18px) saturate(1.15);-webkit-backdrop-filter:blur(18px) saturate(1.15);z-index:30}.chat-model-selector__header{padding:10px 12px 8px;font-size:10px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--color-text-muted);border-bottom:1px solid var(--border-subtle)}.chat-model-selector__divider{height:1px;margin:4px 12px;background:var(--border-subtle)}.chat-model-selector__list{flex:1 1 auto;min-height:0;max-height:none;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.chat-model-selector__option{width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 12px;border:none;background:transparent;color:inherit;text-align:left;cursor:pointer;transition:background .15s ease}.chat-model-selector__option:active,.chat-model-selector__option.is-selected{background:var(--element-bg-subtle)}.chat-model-selector__option-main{display:flex;flex-direction:column;gap:2px;min-width:0;width:100%;flex:1;overflow:hidden}.chat-model-selector__option-name{display:flex;align-items:center;gap:.5em;min-width:0;max-width:100%;width:100%;font-size:11px;font-weight:500;color:var(--color-text-primary)}.chat-model-selector__option-name-text{flex:0 1 auto;min-width:0;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chat-model-selector__option-thinking{color:var(--color-purple-500);font-size:9px;flex-shrink:0}.chat-model-selector__option-meta{display:block;min-width:0;max-width:100%;font-size:9px;color:var(--color-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chat-model-selector__option-meta--stacked{display:flex;flex-direction:column;gap:1px;white-space:normal}.chat-model-selector__option-meta-line{display:block;min-width:0;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chat-page__mode-pill{height:24px;padding:0 10px;border-radius:12px;border:none;background:var(--element-bg-subtle);color:var(--color-text-secondary);font-size:9px;font-weight:400;cursor:pointer;transition:all .2s ease;outline:none;white-space:nowrap;letter-spacing:.3px;display:inline-flex;align-items:center;flex-shrink:0}.chat-page__mode-pill:active{background:var(--element-bg-medium);color:var(--color-text-primary)}.chat-page__mode-pill:disabled{opacity:var(--opacity-disabled);cursor:not-allowed}.chat-page__mode-pill--Plan{background:var(--color-info-bg)}.chat-page__mode-pill--debug{background:var(--color-warning-bg)}.chat-page__action-btn{flex-shrink:0;width:24px;height:24px;border-radius:50%;border:none;background:transparent;color:var(--color-text-secondary);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;padding:0}.chat-page__action-btn:active:not(:disabled){background:var(--element-bg-soft);color:var(--color-text-primary)}.chat-page__action-btn:disabled{opacity:.4;cursor:not-allowed}.chat-page__send-btn{position:relative;width:24px;height:24px;border-radius:50%;border:1px solid var(--color-accent-300);background:var(--color-accent-200);color:var(--color-accent-300);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;flex-shrink:0}.chat-page__send-btn:not(:disabled){background:var(--color-accent-500);border:1px solid var(--color-accent-600);color:var(--btn-primary-color);box-shadow:var(--shadow-sm)}.chat-page__send-btn:active:not(:disabled){transform:scale(.92)}.chat-page__send-btn:disabled{background:var(--color-accent-100);border-color:var(--color-accent-200);color:var(--color-accent-400);opacity:.35;cursor:default;box-shadow:none}.chat-page__send-btn.is-stop{background:var(--color-error)!important;border-color:var(--color-error)!important;color:var(--btn-primary-color)!important;opacity:1!important;box-shadow:var(--shadow-sm)}.chat-page__send-btn.is-stop:active{transform:scale(.92)}.chat-page__stream-actions{display:inline-flex;align-items:center;gap:6px;flex-shrink:0}.chat-page__image-preview-row{display:flex;gap:8px;padding:0;min-width:0;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.chat-page__image-thumb{position:relative;width:46px;height:46px;border-radius:6px;overflow:hidden;flex-shrink:0;border:1px solid var(--border-subtle)}.chat-page__image-thumb img{width:100%;height:100%;object-fit:cover}.chat-page__image-remove{position:absolute;top:2px;right:2px;width:16px;height:16px;border-radius:50%;background:var(--color-overlay);color:var(--color-static-white);border:none;font-size:11px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0}.chat-msg__typing{display:inline-flex;gap:4px;align-items:center;padding:4px 0}.chat-msg__typing span{display:inline-block;width:5px;height:5px;background:var(--color-text-muted);border-radius:50%;animation:typing-bounce 1.2s ease-in-out infinite}.chat-msg__typing span:nth-child(2){animation-delay:.15s}.chat-msg__typing span:nth-child(3){animation-delay:.3s}.chat-msg__assistant-content{color:var(--color-text-primary);line-height:var(--line-height-relaxed);font-family:var(--font-family-sans);font-size:var(--font-size-sm);word-wrap:break-word;overflow-wrap:break-word;max-width:100%;width:100%;margin:0;padding:0;text-align:left}.chat-msg__assistant-content>*:first-child{margin-top:0!important}.chat-msg__assistant-content>*:last-child{margin-bottom:0!important}.chat-msg__assistant-content>*+*{margin-top:.25rem}.chat-msg__assistant-content ul+*,.chat-msg__assistant-content ol+*{margin-top:.5rem}.chat-msg__assistant-content p+ul,.chat-msg__assistant-content p+ol{margin-top:.25rem}.chat-msg__assistant-content p+p{margin-top:.25rem}.chat-msg__assistant-content li+li{margin-top:.05rem}.chat-msg__assistant-content li>*{margin-top:0;margin-bottom:.05rem}.chat-msg__assistant-content li>*:last-child{margin-bottom:0}.chat-msg__assistant-content p{margin-top:0;margin-bottom:.5rem;display:block;line-height:1.5;font-size:var(--font-size-sm);color:var(--color-text-primary)}.chat-msg__assistant-content p:last-child{margin-bottom:0}.chat-msg__assistant-content p code{display:inline!important}.chat-msg__assistant-content h1,.chat-msg__assistant-content h2,.chat-msg__assistant-content h3,.chat-msg__assistant-content h4,.chat-msg__assistant-content h5,.chat-msg__assistant-content h6{font-family:var(--font-family-sans);color:var(--color-text-primary);margin-top:1.25rem;margin-bottom:.6rem;font-weight:var(--font-weight-semibold);line-height:var(--line-height-tight);letter-spacing:.015em}.chat-msg__assistant-content h1:first-child,.chat-msg__assistant-content h2:first-child,.chat-msg__assistant-content h3:first-child,.chat-msg__assistant-content h4:first-child,.chat-msg__assistant-content h5:first-child,.chat-msg__assistant-content h6:first-child{margin-top:0}.chat-msg__assistant-content h1{font-size:var(--font-size-xl);margin:1.25rem 0 .75rem;padding-bottom:.5rem;border-bottom:1px solid var(--border-subtle)}.chat-msg__assistant-content h2{font-size:var(--font-size-lg);margin:1rem 0 .6rem;padding-bottom:.35rem;border-bottom:1px solid var(--border-subtle)}.chat-msg__assistant-content h3{font-size:var(--font-size-base);margin:.85rem 0 .5rem}.chat-msg__assistant-content h4{font-size:var(--font-size-sm);margin:.7rem 0 .4rem;color:var(--color-text-secondary)}.chat-msg__assistant-content h5{font-size:var(--font-size-sm);margin:.6rem 0 .4rem;color:var(--color-text-secondary)}.chat-msg__assistant-content h6{font-size:var(--font-size-xs);margin:.5rem 0 .35rem;color:var(--color-text-muted);opacity:.85}.chat-msg__assistant-content ul,.chat-msg__assistant-content ol{margin-top:0;margin-bottom:.5rem;padding-left:1.5rem;line-height:1.5;font-size:var(--font-size-sm)}.chat-msg__assistant-content li{word-wrap:break-word;margin-bottom:.1rem;position:relative;line-height:1.5;color:var(--color-text-primary)}.chat-msg__assistant-content li:last-child{margin-bottom:0}.chat-msg__assistant-content li p{margin-top:0;margin-bottom:.1rem}.chat-msg__assistant-content li p:last-child{margin-bottom:0}.chat-msg__assistant-content ul>li::marker{color:var(--color-text-muted);font-size:1.2em;font-weight:700}.chat-msg__assistant-content ol>li::marker{color:var(--color-text-muted);font-weight:700}.chat-msg__assistant-content ul ul,.chat-msg__assistant-content ol ol,.chat-msg__assistant-content ul ol,.chat-msg__assistant-content ol ul{margin-top:.1rem;margin-bottom:0;padding-left:1.2rem}.chat-msg__assistant-content ul:has(>li>.file-card){list-style:none;padding-left:0}.chat-msg__assistant-content ul:has(>li>.file-card)>li{margin-bottom:var(--size-gap-2)}.chat-msg__assistant-content ul:has(>li>.file-card)>li:last-child{margin-bottom:0}.chat-msg__assistant-content .inline-code{padding:.15em .35em;margin:0 .05em;font-size:.85em;background:var(--element-bg-base);border:1px solid var(--border-subtle);border-radius:4px;font-family:var(--font-family-mono);white-space:nowrap;vertical-align:baseline;line-height:1.4;color:var(--color-text-primary);font-weight:500}.chat-msg__assistant-content pre code,.chat-msg__assistant-content pre>.inline-code{padding:0;margin:0;background:transparent;border:none;border-radius:0;font-size:inherit;font-weight:inherit;white-space:pre;display:block;color:inherit}.chat-msg__assistant-content .code-block-wrapper{margin:.5rem 0;border-radius:var(--size-radius-base);background:var(--color-bg-primary);border:1px dashed var(--border-subtle);box-shadow:var(--shadow-sm);overflow:hidden;position:relative}.chat-msg__assistant-content .code-block-wrapper pre[class*=language-]{margin:0!important;border:none!important;border-radius:var(--size-radius-base)!important;padding:1rem!important;background:var(--color-bg-primary)!important;box-shadow:none!important;font-size:.75rem!important}.chat-msg__assistant-content .code-block-wrapper pre code{font-family:var(--font-family-mono)!important;background:var(--color-bg-primary)!important;font-size:.75rem!important}.chat-msg__assistant-content .code-block-wrapper pre[style]{background:var(--color-bg-primary)!important;border:none!important;box-shadow:none!important}.chat-msg__assistant-content .code-block-wrapper code[style]{background:var(--color-bg-primary)!important;border:none!important}.chat-msg__assistant-content .copy-button{position:absolute;top:.5rem;right:.5rem;padding:.4rem;background:transparent;border:none;border-radius:6px;color:var(--color-text-muted);cursor:pointer;display:flex;align-items:center;justify-content:center;width:28px;height:28px;opacity:.6;z-index:10;transition:all .2s ease}.chat-msg__assistant-content .copy-button:active{opacity:1;background:var(--element-bg-soft)}.chat-msg__assistant-content .copy-button.copy-success{color:var(--color-success);opacity:1}.chat-msg__assistant-content pre{padding:1rem;overflow-x:auto;-webkit-overflow-scrolling:touch;font-size:.75rem;line-height:1.5;background:var(--color-bg-primary);border:1px dashed var(--border-subtle);border-radius:var(--size-radius-base);margin:.5rem 0;box-shadow:var(--shadow-sm);position:relative}.chat-msg__assistant-content pre code{background:none;padding:0;font-size:var(--font-size-xs)}.chat-msg__assistant-content pre:has(.code-block-wrapper){padding:0!important;background:transparent!important;border:none!important;border-radius:0!important;margin:.5rem 0!important;box-shadow:none!important;position:static!important}.chat-msg__assistant-content blockquote,.chat-msg__assistant-content .custom-blockquote{font-style:italic;margin:1rem 0;padding:.75rem 1rem;position:relative;background:var(--color-accent-50);border-left:3px solid var(--color-accent-400);border-radius:0 var(--size-radius-sm) var(--size-radius-sm) 0;color:var(--color-text-muted)}.chat-msg__assistant-content blockquote>:first-child,.chat-msg__assistant-content .custom-blockquote>:first-child{margin-top:0}.chat-msg__assistant-content blockquote>:last-child,.chat-msg__assistant-content .custom-blockquote>:last-child{margin-bottom:0}.chat-msg__assistant-content blockquote p,.chat-msg__assistant-content .custom-blockquote p{margin:.3rem 0}.chat-msg__assistant-content .table-wrapper{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:1rem 0;border-radius:var(--size-radius-base);border:1px solid var(--border-subtle);box-shadow:var(--shadow-sm);background:var(--color-bg-primary)}.chat-msg__assistant-content .table-wrapper table{border-spacing:0;border-collapse:collapse;width:100%;font-size:var(--font-size-xs)}.chat-msg__assistant-content .table-wrapper th,.chat-msg__assistant-content .table-wrapper td{padding:8px 12px;border-bottom:1px solid var(--border-subtle);text-align:left}.chat-msg__assistant-content .table-wrapper th{font-weight:var(--font-weight-semibold);background:var(--element-bg-subtle);color:var(--color-text-primary);white-space:nowrap}.chat-msg__assistant-content .table-wrapper td{color:var(--color-text-primary)}.chat-msg__assistant-content .table-wrapper th:first-child{border-radius:var(--size-radius-base) 0 0 0}.chat-msg__assistant-content .table-wrapper th:last-child{border-radius:0 var(--size-radius-base) 0 0}.chat-msg__assistant-content .table-wrapper tr:last-child td:first-child{border-radius:0 0 0 var(--size-radius-base)}.chat-msg__assistant-content .table-wrapper tr:last-child td:last-child{border-radius:0 0 var(--size-radius-base) 0}.chat-msg__assistant-content .table-wrapper tr:last-child td{border-bottom:none}.chat-msg__assistant-content .table-wrapper tbody tr:nth-child(2n){background:var(--element-bg-subtle)}.chat-msg__assistant-content a{color:var(--color-accent-500);text-decoration:none;word-break:break-all}.chat-msg__assistant-content a:active{text-decoration:underline}.chat-msg__assistant-content hr{height:1px;padding:0;margin:1.5rem 0;background:var(--border-subtle);border:0;border-radius:1px}.chat-msg__assistant-content strong{font-weight:var(--font-weight-semibold);color:var(--color-text-primary)}.chat-msg__assistant-content em{font-style:italic;color:var(--color-text-secondary)}.chat-msg__assistant-content del{text-decoration:line-through;color:var(--color-text-muted)}.chat-msg__assistant-content input[type=checkbox]{margin-right:6px;accent-color:var(--color-accent-500)} diff --git a/src/apps/relay-server/static/assets/index-RWXIAc4-.js b/src/apps/relay-server/static/assets/index-RWXIAc4-.js deleted file mode 100644 index d9a6227e0b..0000000000 --- a/src/apps/relay-server/static/assets/index-RWXIAc4-.js +++ /dev/null @@ -1,99 +0,0 @@ -var rI=Object.defineProperty;var aI=(e,t,n)=>t in e?rI(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var se=(e,t,n)=>aI(e,typeof t!="symbol"?t+"":t,n);(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))r(a);new MutationObserver(a=>{for(const i of a)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function n(a){const i={};return a.integrity&&(i.integrity=a.integrity),a.referrerPolicy&&(i.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?i.credentials="include":a.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(a){if(a.ep)return;a.ep=!0;const i=n(a);fetch(a.href,i)}})();var Tn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Wa(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Lw={exports:{}},To={},Dw={exports:{}},te={};/** - * @license React - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Ya=Symbol.for("react.element"),iI=Symbol.for("react.portal"),oI=Symbol.for("react.fragment"),sI=Symbol.for("react.strict_mode"),lI=Symbol.for("react.profiler"),uI=Symbol.for("react.provider"),cI=Symbol.for("react.context"),dI=Symbol.for("react.forward_ref"),pI=Symbol.for("react.suspense"),fI=Symbol.for("react.memo"),gI=Symbol.for("react.lazy"),Xm=Symbol.iterator;function mI(e){return e===null||typeof e!="object"?null:(e=Xm&&e[Xm]||e["@@iterator"],typeof e=="function"?e:null)}var Mw={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Fw=Object.assign,Pw={};function Ur(e,t,n){this.props=e,this.context=t,this.refs=Pw,this.updater=n||Mw}Ur.prototype.isReactComponent={};Ur.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};Ur.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Uw(){}Uw.prototype=Ur.prototype;function lg(e,t,n){this.props=e,this.context=t,this.refs=Pw,this.updater=n||Mw}var ug=lg.prototype=new Uw;ug.constructor=lg;Fw(ug,Ur.prototype);ug.isPureReactComponent=!0;var Zm=Array.isArray,Bw=Object.prototype.hasOwnProperty,cg={current:null},$w={key:!0,ref:!0,__self:!0,__source:!0};function zw(e,t,n){var r,a={},i=null,o=null;if(t!=null)for(r in t.ref!==void 0&&(o=t.ref),t.key!==void 0&&(i=""+t.key),t)Bw.call(t,r)&&!$w.hasOwnProperty(r)&&(a[r]=t[r]);var s=arguments.length-2;if(s===1)a.children=n;else if(1>>1,G=x[P];if(0>>1;Pa(ue,S))Za(ce,ue)?(x[P]=ce,x[Z]=S,P=Z):(x[P]=ue,x[Q]=S,P=Q);else if(Za(ce,S))x[P]=ce,x[Z]=S,P=Z;else break e}}return M}function a(x,M){var S=x.sortIndex-M.sortIndex;return S!==0?S:x.id-M.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var l=[],u=[],d=1,c=null,f=3,p=!1,h=!1,y=!1,T=typeof setTimeout=="function"?setTimeout:null,b=typeof clearTimeout=="function"?clearTimeout:null,g=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function m(x){for(var M=n(u);M!==null;){if(M.callback===null)r(u);else if(M.startTime<=x)r(u),M.sortIndex=M.expirationTime,t(l,M);else break;M=n(u)}}function v(x){if(y=!1,m(x),!h)if(n(l)!==null)h=!0,H(_);else{var M=n(u);M!==null&&Y(v,M.startTime-x)}}function _(x,M){h=!1,y&&(y=!1,b(C),C=-1),p=!0;var S=f;try{for(m(M),c=n(l);c!==null&&(!(c.expirationTime>M)||x&&!I());){var P=c.callback;if(typeof P=="function"){c.callback=null,f=c.priorityLevel;var G=P(c.expirationTime<=M);M=e.unstable_now(),typeof G=="function"?c.callback=G:c===n(l)&&r(l),m(M)}else r(l);c=n(l)}if(c!==null)var A=!0;else{var Q=n(u);Q!==null&&Y(v,Q.startTime-M),A=!1}return A}finally{c=null,f=S,p=!1}}var E=!1,R=null,C=-1,N=5,k=-1;function I(){return!(e.unstable_now()-kx||125P?(x.sortIndex=S,t(u,x),n(l)===null&&x===n(u)&&(y?(b(C),C=-1):y=!0,Y(v,S-P))):(x.sortIndex=G,t(l,x),h||p||(h=!0,H(_))),x},e.unstable_shouldYield=I,e.unstable_wrapCallback=function(x){var M=f;return function(){var S=f;f=M;try{return x.apply(this,arguments)}finally{f=S}}}})(Vw);Hw.exports=Vw;var AI=Hw.exports;/** - * @license React - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var RI=W,ct=AI;function F(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Yp=Object.prototype.hasOwnProperty,II=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Jm={},eh={};function CI(e){return Yp.call(eh,e)?!0:Yp.call(Jm,e)?!1:II.test(e)?eh[e]=!0:(Jm[e]=!0,!1)}function NI(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function xI(e,t,n,r){if(t===null||typeof t>"u"||NI(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function He(e,t,n,r,a,i,o){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=a,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=o}var Oe={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Oe[e]=new He(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Oe[t]=new He(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Oe[e]=new He(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Oe[e]=new He(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Oe[e]=new He(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Oe[e]=new He(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Oe[e]=new He(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Oe[e]=new He(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Oe[e]=new He(e,5,!1,e.toLowerCase(),null,!1,!1)});var pg=/[\-:]([a-z])/g;function fg(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(pg,fg);Oe[t]=new He(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(pg,fg);Oe[t]=new He(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(pg,fg);Oe[t]=new He(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Oe[e]=new He(e,1,!1,e.toLowerCase(),null,!1,!1)});Oe.xlinkHref=new He("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Oe[e]=new He(e,1,!1,e.toLowerCase(),null,!0,!0)});function gg(e,t,n,r){var a=Oe.hasOwnProperty(t)?Oe[t]:null;(a!==null?a.type!==0:r||!(2s||a[o]!==i[s]){var l=` -`+a[o].replace(" at new "," at ");return e.displayName&&l.includes("")&&(l=l.replace("",e.displayName)),l}while(1<=o&&0<=s);break}}}finally{ns=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?sa(e):""}function OI(e){switch(e.tag){case 5:return sa(e.type);case 16:return sa("Lazy");case 13:return sa("Suspense");case 19:return sa("SuspenseList");case 0:case 2:case 15:return e=rs(e.type,!1),e;case 11:return e=rs(e.type.render,!1),e;case 1:return e=rs(e.type,!0),e;default:return""}}function Qp(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case cr:return"Fragment";case ur:return"Portal";case Kp:return"Profiler";case mg:return"StrictMode";case Xp:return"Suspense";case Zp:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Kw:return(e.displayName||"Context")+".Consumer";case Yw:return(e._context.displayName||"Context")+".Provider";case hg:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case bg:return t=e.displayName||null,t!==null?t:Qp(e.type)||"Memo";case cn:t=e._payload,e=e._init;try{return Qp(e(t))}catch{}}return null}function LI(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Qp(t);case 8:return t===mg?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function An(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Zw(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function DI(e){var t=Zw(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var a=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return a.call(this)},set:function(o){r=""+o,i.call(this,o)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(o){r=""+o},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function si(e){e._valueTracker||(e._valueTracker=DI(e))}function Qw(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Zw(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Yi(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Jp(e,t){var n=t.checked;return Ee({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function nh(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=An(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Jw(e,t){t=t.checked,t!=null&&gg(e,"checked",t,!1)}function ef(e,t){Jw(e,t);var n=An(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?tf(e,t.type,n):t.hasOwnProperty("defaultValue")&&tf(e,t.type,An(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function rh(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function tf(e,t,n){(t!=="number"||Yi(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var la=Array.isArray;function kr(e,t,n,r){if(e=e.options,t){t={};for(var a=0;a"+t.valueOf().toString()+"",t=li.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Ia(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var ga={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},MI=["Webkit","ms","Moz","O"];Object.keys(ga).forEach(function(e){MI.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ga[t]=ga[e]})});function r_(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||ga.hasOwnProperty(e)&&ga[e]?(""+t).trim():t+"px"}function a_(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,a=r_(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,a):e[n]=a}}var FI=Ee({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function af(e,t){if(t){if(FI[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(F(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(F(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(F(61))}if(t.style!=null&&typeof t.style!="object")throw Error(F(62))}}function of(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var sf=null;function yg(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var lf=null,wr=null,_r=null;function oh(e){if(e=Za(e)){if(typeof lf!="function")throw Error(F(280));var t=e.stateNode;t&&(t=No(t),lf(e.stateNode,e.type,t))}}function i_(e){wr?_r?_r.push(e):_r=[e]:wr=e}function o_(){if(wr){var e=wr,t=_r;if(_r=wr=null,oh(e),t)for(e=0;e>>=0,e===0?32:31-(WI(e)/YI|0)|0}var ui=64,ci=4194304;function ua(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Qi(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,a=e.suspendedLanes,i=e.pingedLanes,o=n&268435455;if(o!==0){var s=o&~a;s!==0?r=ua(s):(i&=o,i!==0&&(r=ua(i)))}else o=n&~a,o!==0?r=ua(o):i!==0&&(r=ua(i));if(r===0)return 0;if(t!==0&&t!==r&&!(t&a)&&(a=r&-r,i=t&-t,a>=i||a===16&&(i&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function Ka(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Ct(t),e[t]=n}function QI(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=ha),mh=" ",hh=!1;function A_(e,t){switch(e){case"keyup":return AC.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function R_(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var dr=!1;function IC(e,t){switch(e){case"compositionend":return R_(t);case"keypress":return t.which!==32?null:(hh=!0,mh);case"textInput":return e=t.data,e===mh&&hh?null:e;default:return null}}function CC(e,t){if(dr)return e==="compositionend"||!Ag&&A_(e,t)?(e=__(),Mi=wg=gn=null,dr=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Sh(n)}}function x_(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?x_(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function O_(){for(var e=window,t=Yi();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Yi(e.document)}return t}function Rg(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function UC(e){var t=O_(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&x_(n.ownerDocument.documentElement,n)){if(r!==null&&Rg(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var a=n.textContent.length,i=Math.min(r.start,a);r=r.end===void 0?i:Math.min(r.end,a),!e.extend&&i>r&&(a=r,r=i,i=a),a=vh(n,i);var o=vh(n,r);a&&o&&(e.rangeCount!==1||e.anchorNode!==a.node||e.anchorOffset!==a.offset||e.focusNode!==o.node||e.focusOffset!==o.offset)&&(t=t.createRange(),t.setStart(a.node,a.offset),e.removeAllRanges(),i>r?(e.addRange(t),e.extend(o.node,o.offset)):(t.setEnd(o.node,o.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,pr=null,gf=null,ya=null,mf=!1;function kh(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;mf||pr==null||pr!==Yi(r)||(r=pr,"selectionStart"in r&&Rg(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),ya&&Da(ya,r)||(ya=r,r=to(gf,"onSelect"),0mr||(e.current=vf[mr],vf[mr]=null,mr--)}function pe(e,t){mr++,vf[mr]=e.current,e.current=t}var Rn={},Pe=Cn(Rn),Qe=Cn(!1),jn=Rn;function Nr(e,t){var n=e.type.contextTypes;if(!n)return Rn;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var a={},i;for(i in n)a[i]=t[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function Je(e){return e=e.childContextTypes,e!=null}function ro(){me(Qe),me(Pe)}function Ch(e,t,n){if(Pe.current!==Rn)throw Error(F(168));pe(Pe,t),pe(Qe,n)}function z_(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var a in r)if(!(a in t))throw Error(F(108,LI(e)||"Unknown",a));return Ee({},n,r)}function ao(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Rn,jn=Pe.current,pe(Pe,e),pe(Qe,Qe.current),!0}function Nh(e,t,n){var r=e.stateNode;if(!r)throw Error(F(169));n?(e=z_(e,t,jn),r.__reactInternalMemoizedMergedChildContext=e,me(Qe),me(Pe),pe(Pe,e)):me(Qe),pe(Qe,n)}var Wt=null,xo=!1,bs=!1;function G_(e){Wt===null?Wt=[e]:Wt.push(e)}function XC(e){xo=!0,G_(e)}function Nn(){if(!bs&&Wt!==null){bs=!0;var e=0,t=ie;try{var n=Wt;for(ie=1;e>=o,a-=o,Kt=1<<32-Ct(t)+a|n<C?(N=R,R=null):N=R.sibling;var k=f(b,R,m[C],v);if(k===null){R===null&&(R=N);break}e&&R&&k.alternate===null&&t(b,R),g=i(k,g,C),E===null?_=k:E.sibling=k,E=k,R=N}if(C===m.length)return n(b,R),he&&Fn(b,C),_;if(R===null){for(;CC?(N=R,R=null):N=R.sibling;var I=f(b,R,k.value,v);if(I===null){R===null&&(R=N);break}e&&R&&I.alternate===null&&t(b,R),g=i(I,g,C),E===null?_=I:E.sibling=I,E=I,R=N}if(k.done)return n(b,R),he&&Fn(b,C),_;if(R===null){for(;!k.done;C++,k=m.next())k=c(b,k.value,v),k!==null&&(g=i(k,g,C),E===null?_=k:E.sibling=k,E=k);return he&&Fn(b,C),_}for(R=r(b,R);!k.done;C++,k=m.next())k=p(R,b,C,k.value,v),k!==null&&(e&&k.alternate!==null&&R.delete(k.key===null?C:k.key),g=i(k,g,C),E===null?_=k:E.sibling=k,E=k);return e&&R.forEach(function(D){return t(b,D)}),he&&Fn(b,C),_}function T(b,g,m,v){if(typeof m=="object"&&m!==null&&m.type===cr&&m.key===null&&(m=m.props.children),typeof m=="object"&&m!==null){switch(m.$$typeof){case oi:e:{for(var _=m.key,E=g;E!==null;){if(E.key===_){if(_=m.type,_===cr){if(E.tag===7){n(b,E.sibling),g=a(E,m.props.children),g.return=b,b=g;break e}}else if(E.elementType===_||typeof _=="object"&&_!==null&&_.$$typeof===cn&&Lh(_)===E.type){n(b,E.sibling),g=a(E,m.props),g.ref=ea(b,E,m),g.return=b,b=g;break e}n(b,E);break}else t(b,E);E=E.sibling}m.type===cr?(g=qn(m.props.children,b.mode,v,m.key),g.return=b,b=g):(v=qi(m.type,m.key,m.props,null,b.mode,v),v.ref=ea(b,g,m),v.return=b,b=v)}return o(b);case ur:e:{for(E=m.key;g!==null;){if(g.key===E)if(g.tag===4&&g.stateNode.containerInfo===m.containerInfo&&g.stateNode.implementation===m.implementation){n(b,g.sibling),g=a(g,m.children||[]),g.return=b,b=g;break e}else{n(b,g);break}else t(b,g);g=g.sibling}g=Ts(m,b.mode,v),g.return=b,b=g}return o(b);case cn:return E=m._init,T(b,g,E(m._payload),v)}if(la(m))return h(b,g,m,v);if(Kr(m))return y(b,g,m,v);bi(b,m)}return typeof m=="string"&&m!==""||typeof m=="number"?(m=""+m,g!==null&&g.tag===6?(n(b,g.sibling),g=a(g,m),g.return=b,b=g):(n(b,g),g=_s(m,b.mode,v),g.return=b,b=g),o(b)):n(b,g)}return T}var Or=V_(!0),W_=V_(!1),so=Cn(null),lo=null,yr=null,xg=null;function Og(){xg=yr=lo=null}function Lg(e){var t=so.current;me(so),e._currentValue=t}function _f(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Ar(e,t){lo=e,xg=yr=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Ze=!0),e.firstContext=null)}function St(e){var t=e._currentValue;if(xg!==e)if(e={context:e,memoizedValue:t,next:null},yr===null){if(lo===null)throw Error(F(308));yr=e,lo.dependencies={lanes:0,firstContext:e}}else yr=yr.next=e;return t}var $n=null;function Dg(e){$n===null?$n=[e]:$n.push(e)}function Y_(e,t,n,r){var a=t.interleaved;return a===null?(n.next=n,Dg(t)):(n.next=a.next,a.next=n),t.interleaved=n,tn(e,r)}function tn(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var dn=!1;function Mg(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function K_(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Zt(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function vn(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,ae&2){var a=r.pending;return a===null?t.next=t:(t.next=a.next,a.next=t),r.pending=t,tn(e,n)}return a=r.interleaved,a===null?(t.next=t,Dg(r)):(t.next=a.next,a.next=t),r.interleaved=t,tn(e,n)}function Pi(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Sg(e,n)}}function Dh(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var a=null,i=null;if(n=n.firstBaseUpdate,n!==null){do{var o={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};i===null?a=i=o:i=i.next=o,n=n.next}while(n!==null);i===null?a=i=t:i=i.next=t}else a=i=t;n={baseState:r.baseState,firstBaseUpdate:a,lastBaseUpdate:i,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function uo(e,t,n,r){var a=e.updateQueue;dn=!1;var i=a.firstBaseUpdate,o=a.lastBaseUpdate,s=a.shared.pending;if(s!==null){a.shared.pending=null;var l=s,u=l.next;l.next=null,o===null?i=u:o.next=u,o=l;var d=e.alternate;d!==null&&(d=d.updateQueue,s=d.lastBaseUpdate,s!==o&&(s===null?d.firstBaseUpdate=u:s.next=u,d.lastBaseUpdate=l))}if(i!==null){var c=a.baseState;o=0,d=u=l=null,s=i;do{var f=s.lane,p=s.eventTime;if((r&f)===f){d!==null&&(d=d.next={eventTime:p,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var h=e,y=s;switch(f=t,p=n,y.tag){case 1:if(h=y.payload,typeof h=="function"){c=h.call(p,c,f);break e}c=h;break e;case 3:h.flags=h.flags&-65537|128;case 0:if(h=y.payload,f=typeof h=="function"?h.call(p,c,f):h,f==null)break e;c=Ee({},c,f);break e;case 2:dn=!0}}s.callback!==null&&s.lane!==0&&(e.flags|=64,f=a.effects,f===null?a.effects=[s]:f.push(s))}else p={eventTime:p,lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},d===null?(u=d=p,l=c):d=d.next=p,o|=f;if(s=s.next,s===null){if(s=a.shared.pending,s===null)break;f=s,s=f.next,f.next=null,a.lastBaseUpdate=f,a.shared.pending=null}}while(!0);if(d===null&&(l=c),a.baseState=l,a.firstBaseUpdate=u,a.lastBaseUpdate=d,t=a.shared.interleaved,t!==null){a=t;do o|=a.lane,a=a.next;while(a!==t)}else i===null&&(a.shared.lanes=0);Wn|=o,e.lanes=o,e.memoizedState=c}}function Mh(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=Es.transition;Es.transition={};try{e(!1),t()}finally{ie=n,Es.transition=r}}function pT(){return vt().memoizedState}function eN(e,t,n){var r=wn(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},fT(e))gT(t,n);else if(n=Y_(e,t,n,r),n!==null){var a=qe();Nt(n,e,r,a),mT(n,t,r)}}function tN(e,t,n){var r=wn(e),a={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(fT(e))gT(t,a);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=t.lastRenderedReducer,i!==null))try{var o=t.lastRenderedState,s=i(o,n);if(a.hasEagerState=!0,a.eagerState=s,Ot(s,o)){var l=t.interleaved;l===null?(a.next=a,Dg(t)):(a.next=l.next,l.next=a),t.interleaved=a;return}}catch{}finally{}n=Y_(e,t,a,r),n!==null&&(a=qe(),Nt(n,e,r,a),mT(n,t,r))}}function fT(e){var t=e.alternate;return e===ye||t!==null&&t===ye}function gT(e,t){Ea=po=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function mT(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Sg(e,n)}}var fo={readContext:St,useCallback:Le,useContext:Le,useEffect:Le,useImperativeHandle:Le,useInsertionEffect:Le,useLayoutEffect:Le,useMemo:Le,useReducer:Le,useRef:Le,useState:Le,useDebugValue:Le,useDeferredValue:Le,useTransition:Le,useMutableSource:Le,useSyncExternalStore:Le,useId:Le,unstable_isNewReconciler:!1},nN={readContext:St,useCallback:function(e,t){return Dt().memoizedState=[e,t===void 0?null:t],e},useContext:St,useEffect:Ph,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Bi(4194308,4,sT.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Bi(4194308,4,e,t)},useInsertionEffect:function(e,t){return Bi(4,2,e,t)},useMemo:function(e,t){var n=Dt();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Dt();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=eN.bind(null,ye,e),[r.memoizedState,e]},useRef:function(e){var t=Dt();return e={current:e},t.memoizedState=e},useState:Fh,useDebugValue:qg,useDeferredValue:function(e){return Dt().memoizedState=e},useTransition:function(){var e=Fh(!1),t=e[0];return e=JC.bind(null,e[1]),Dt().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=ye,a=Dt();if(he){if(n===void 0)throw Error(F(407));n=n()}else{if(n=t(),Ce===null)throw Error(F(349));Vn&30||J_(r,t,n)}a.memoizedState=n;var i={value:n,getSnapshot:t};return a.queue=i,Ph(tT.bind(null,r,i,e),[e]),r.flags|=2048,Ga(9,eT.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=Dt(),t=Ce.identifierPrefix;if(he){var n=Xt,r=Kt;n=(r&~(1<<32-Ct(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=$a++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=o.createElement(n,{is:r.is}):(e=o.createElement(n),n==="select"&&(o=e,r.multiple?o.multiple=!0:r.size&&(o.size=r.size))):e=o.createElementNS(e,n),e[Pt]=t,e[Pa]=r,TT(e,t,!1,!1),t.stateNode=e;e:{switch(o=of(n,r),n){case"dialog":ge("cancel",e),ge("close",e),a=r;break;case"iframe":case"object":case"embed":ge("load",e),a=r;break;case"video":case"audio":for(a=0;aMr&&(t.flags|=128,r=!0,ta(i,!1),t.lanes=4194304)}else{if(!r)if(e=co(o),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),ta(i,!0),i.tail===null&&i.tailMode==="hidden"&&!o.alternate&&!he)return De(t),null}else 2*ve()-i.renderingStartTime>Mr&&n!==1073741824&&(t.flags|=128,r=!0,ta(i,!1),t.lanes=4194304);i.isBackwards?(o.sibling=t.child,t.child=o):(n=i.last,n!==null?n.sibling=o:t.child=o,i.last=o)}return i.tail!==null?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=ve(),t.sibling=null,n=be.current,pe(be,r?n&1|2:n&1),t):(De(t),null);case 22:case 23:return Kg(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?ot&1073741824&&(De(t),t.subtreeFlags&6&&(t.flags|=8192)):De(t),null;case 24:return null;case 25:return null}throw Error(F(156,t.tag))}function cN(e,t){switch(Cg(t),t.tag){case 1:return Je(t.type)&&ro(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Lr(),me(Qe),me(Pe),Ug(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Pg(t),null;case 13:if(me(be),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(F(340));xr()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return me(be),null;case 4:return Lr(),null;case 10:return Lg(t.type._context),null;case 22:case 23:return Kg(),null;case 24:return null;default:return null}}var Ei=!1,Me=!1,dN=typeof WeakSet=="function"?WeakSet:Set,j=null;function Er(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){Se(e,t,r)}else n.current=null}function Lf(e,t,n){try{n()}catch(r){Se(e,t,r)}}var Yh=!1;function pN(e,t){if(hf=Ji,e=O_(),Rg(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var a=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch{n=null;break e}var o=0,s=-1,l=-1,u=0,d=0,c=e,f=null;t:for(;;){for(var p;c!==n||a!==0&&c.nodeType!==3||(s=o+a),c!==i||r!==0&&c.nodeType!==3||(l=o+r),c.nodeType===3&&(o+=c.nodeValue.length),(p=c.firstChild)!==null;)f=c,c=p;for(;;){if(c===e)break t;if(f===n&&++u===a&&(s=o),f===i&&++d===r&&(l=o),(p=c.nextSibling)!==null)break;c=f,f=c.parentNode}c=p}n=s===-1||l===-1?null:{start:s,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(bf={focusedElem:e,selectionRange:n},Ji=!1,j=t;j!==null;)if(t=j,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,j=e;else for(;j!==null;){t=j;try{var h=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(h!==null){var y=h.memoizedProps,T=h.memoizedState,b=t.stateNode,g=b.getSnapshotBeforeUpdate(t.elementType===t.type?y:At(t.type,y),T);b.__reactInternalSnapshotBeforeUpdate=g}break;case 3:var m=t.stateNode.containerInfo;m.nodeType===1?m.textContent="":m.nodeType===9&&m.documentElement&&m.removeChild(m.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(F(163))}}catch(v){Se(t,t.return,v)}if(e=t.sibling,e!==null){e.return=t.return,j=e;break}j=t.return}return h=Yh,Yh=!1,h}function Sa(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var a=r=r.next;do{if((a.tag&e)===e){var i=a.destroy;a.destroy=void 0,i!==void 0&&Lf(t,n,i)}a=a.next}while(a!==r)}}function Do(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function Df(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function IT(e){var t=e.alternate;t!==null&&(e.alternate=null,IT(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Pt],delete t[Pa],delete t[Sf],delete t[YC],delete t[KC])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function CT(e){return e.tag===5||e.tag===3||e.tag===4}function Kh(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||CT(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Mf(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=no));else if(r!==4&&(e=e.child,e!==null))for(Mf(e,t,n),e=e.sibling;e!==null;)Mf(e,t,n),e=e.sibling}function Ff(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(Ff(e,t,n),e=e.sibling;e!==null;)Ff(e,t,n),e=e.sibling}var Ne=null,Rt=!1;function ln(e,t,n){for(n=n.child;n!==null;)NT(e,t,n),n=n.sibling}function NT(e,t,n){if(Bt&&typeof Bt.onCommitFiberUnmount=="function")try{Bt.onCommitFiberUnmount(Ao,n)}catch{}switch(n.tag){case 5:Me||Er(n,t);case 6:var r=Ne,a=Rt;Ne=null,ln(e,t,n),Ne=r,Rt=a,Ne!==null&&(Rt?(e=Ne,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):Ne.removeChild(n.stateNode));break;case 18:Ne!==null&&(Rt?(e=Ne,n=n.stateNode,e.nodeType===8?hs(e.parentNode,n):e.nodeType===1&&hs(e,n),Oa(e)):hs(Ne,n.stateNode));break;case 4:r=Ne,a=Rt,Ne=n.stateNode.containerInfo,Rt=!0,ln(e,t,n),Ne=r,Rt=a;break;case 0:case 11:case 14:case 15:if(!Me&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){a=r=r.next;do{var i=a,o=i.destroy;i=i.tag,o!==void 0&&(i&2||i&4)&&Lf(n,t,o),a=a.next}while(a!==r)}ln(e,t,n);break;case 1:if(!Me&&(Er(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(s){Se(n,t,s)}ln(e,t,n);break;case 21:ln(e,t,n);break;case 22:n.mode&1?(Me=(r=Me)||n.memoizedState!==null,ln(e,t,n),Me=r):ln(e,t,n);break;default:ln(e,t,n)}}function Xh(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new dN),t.forEach(function(r){var a=vN.bind(null,e,r);n.has(r)||(n.add(r),r.then(a,a))})}}function _t(e,t){var n=t.deletions;if(n!==null)for(var r=0;ra&&(a=o),r&=~i}if(r=a,r=ve()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*gN(r/1960))-r,10e?16:e,mn===null)var r=!1;else{if(e=mn,mn=null,ho=0,ae&6)throw Error(F(331));var a=ae;for(ae|=4,j=e.current;j!==null;){var i=j,o=i.child;if(j.flags&16){var s=i.deletions;if(s!==null){for(var l=0;lve()-Wg?Gn(e,0):Vg|=n),et(e,t)}function UT(e,t){t===0&&(e.mode&1?(t=ci,ci<<=1,!(ci&130023424)&&(ci=4194304)):t=1);var n=qe();e=tn(e,t),e!==null&&(Ka(e,t,n),et(e,n))}function SN(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),UT(e,n)}function vN(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(F(314))}r!==null&&r.delete(t),UT(e,n)}var BT;BT=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||Qe.current)Ze=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Ze=!1,lN(e,t,n);Ze=!!(e.flags&131072)}else Ze=!1,he&&t.flags&1048576&&q_(t,oo,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;$i(e,t),e=t.pendingProps;var a=Nr(t,Pe.current);Ar(t,n),a=$g(null,t,r,e,a,n);var i=zg();return t.flags|=1,typeof a=="object"&&a!==null&&typeof a.render=="function"&&a.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Je(r)?(i=!0,ao(t)):i=!1,t.memoizedState=a.state!==null&&a.state!==void 0?a.state:null,Mg(t),a.updater=Lo,t.stateNode=a,a._reactInternals=t,Af(t,r,e,n),t=Cf(null,t,r,!0,i,n)):(t.tag=0,he&&i&&Ig(t),ze(null,t,a,n),t=t.child),t;case 16:r=t.elementType;e:{switch($i(e,t),e=t.pendingProps,a=r._init,r=a(r._payload),t.type=r,a=t.tag=wN(r),e=At(r,e),a){case 0:t=If(null,t,r,e,n);break e;case 1:t=Hh(null,t,r,e,n);break e;case 11:t=qh(null,t,r,e,n);break e;case 14:t=jh(null,t,r,At(r.type,e),n);break e}throw Error(F(306,r,""))}return t;case 0:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:At(r,a),If(e,t,r,a,n);case 1:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:At(r,a),Hh(e,t,r,a,n);case 3:e:{if(kT(t),e===null)throw Error(F(387));r=t.pendingProps,i=t.memoizedState,a=i.element,K_(e,t),uo(t,r,null,n);var o=t.memoizedState;if(r=o.element,i.isDehydrated)if(i={element:r,isDehydrated:!1,cache:o.cache,pendingSuspenseBoundaries:o.pendingSuspenseBoundaries,transitions:o.transitions},t.updateQueue.baseState=i,t.memoizedState=i,t.flags&256){a=Dr(Error(F(423)),t),t=Vh(e,t,r,n,a);break e}else if(r!==a){a=Dr(Error(F(424)),t),t=Vh(e,t,r,n,a);break e}else for(st=Sn(t.stateNode.containerInfo.firstChild),lt=t,he=!0,It=null,n=W_(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(xr(),r===a){t=nn(e,t,n);break e}ze(e,t,r,n)}t=t.child}return t;case 5:return X_(t),e===null&&wf(t),r=t.type,a=t.pendingProps,i=e!==null?e.memoizedProps:null,o=a.children,yf(r,a)?o=null:i!==null&&yf(r,i)&&(t.flags|=32),vT(e,t),ze(e,t,o,n),t.child;case 6:return e===null&&wf(t),null;case 13:return wT(e,t,n);case 4:return Fg(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=Or(t,null,r,n):ze(e,t,r,n),t.child;case 11:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:At(r,a),qh(e,t,r,a,n);case 7:return ze(e,t,t.pendingProps,n),t.child;case 8:return ze(e,t,t.pendingProps.children,n),t.child;case 12:return ze(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,a=t.pendingProps,i=t.memoizedProps,o=a.value,pe(so,r._currentValue),r._currentValue=o,i!==null)if(Ot(i.value,o)){if(i.children===a.children&&!Qe.current){t=nn(e,t,n);break e}}else for(i=t.child,i!==null&&(i.return=t);i!==null;){var s=i.dependencies;if(s!==null){o=i.child;for(var l=s.firstContext;l!==null;){if(l.context===r){if(i.tag===1){l=Zt(-1,n&-n),l.tag=2;var u=i.updateQueue;if(u!==null){u=u.shared;var d=u.pending;d===null?l.next=l:(l.next=d.next,d.next=l),u.pending=l}}i.lanes|=n,l=i.alternate,l!==null&&(l.lanes|=n),_f(i.return,n,t),s.lanes|=n;break}l=l.next}}else if(i.tag===10)o=i.type===t.type?null:i.child;else if(i.tag===18){if(o=i.return,o===null)throw Error(F(341));o.lanes|=n,s=o.alternate,s!==null&&(s.lanes|=n),_f(o,n,t),o=i.sibling}else o=i.child;if(o!==null)o.return=i;else for(o=i;o!==null;){if(o===t){o=null;break}if(i=o.sibling,i!==null){i.return=o.return,o=i;break}o=o.return}i=o}ze(e,t,a.children,n),t=t.child}return t;case 9:return a=t.type,r=t.pendingProps.children,Ar(t,n),a=St(a),r=r(a),t.flags|=1,ze(e,t,r,n),t.child;case 14:return r=t.type,a=At(r,t.pendingProps),a=At(r.type,a),jh(e,t,r,a,n);case 15:return ET(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:At(r,a),$i(e,t),t.tag=1,Je(r)?(e=!0,ao(t)):e=!1,Ar(t,n),hT(t,r,a),Af(t,r,a,n),Cf(null,t,r,!0,e,n);case 19:return _T(e,t,n);case 22:return ST(e,t,n)}throw Error(F(156,t.tag))};function $T(e,t){return f_(e,t)}function kN(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function yt(e,t,n,r){return new kN(e,t,n,r)}function Zg(e){return e=e.prototype,!(!e||!e.isReactComponent)}function wN(e){if(typeof e=="function")return Zg(e)?1:0;if(e!=null){if(e=e.$$typeof,e===hg)return 11;if(e===bg)return 14}return 2}function _n(e,t){var n=e.alternate;return n===null?(n=yt(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function qi(e,t,n,r,a,i){var o=2;if(r=e,typeof e=="function")Zg(e)&&(o=1);else if(typeof e=="string")o=5;else e:switch(e){case cr:return qn(n.children,a,i,t);case mg:o=8,a|=8;break;case Kp:return e=yt(12,n,t,a|2),e.elementType=Kp,e.lanes=i,e;case Xp:return e=yt(13,n,t,a),e.elementType=Xp,e.lanes=i,e;case Zp:return e=yt(19,n,t,a),e.elementType=Zp,e.lanes=i,e;case Xw:return Fo(n,a,i,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Yw:o=10;break e;case Kw:o=9;break e;case hg:o=11;break e;case bg:o=14;break e;case cn:o=16,r=null;break e}throw Error(F(130,e==null?e:typeof e,""))}return t=yt(o,n,t,a),t.elementType=e,t.type=r,t.lanes=i,t}function qn(e,t,n,r){return e=yt(7,e,r,t),e.lanes=n,e}function Fo(e,t,n,r){return e=yt(22,e,r,t),e.elementType=Xw,e.lanes=n,e.stateNode={isHidden:!1},e}function _s(e,t,n){return e=yt(6,e,null,t),e.lanes=n,e}function Ts(e,t,n){return t=yt(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function _N(e,t,n,r,a){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=is(0),this.expirationTimes=is(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=is(0),this.identifierPrefix=r,this.onRecoverableError=a,this.mutableSourceEagerHydrationData=null}function Qg(e,t,n,r,a,i,o,s,l){return e=new _N(e,t,n,s,l),t===1?(t=1,i===!0&&(t|=8)):t=0,i=yt(3,null,null,t),e.current=i,i.stateNode=e,i.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Mg(i),e}function TN(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(jT)}catch(e){console.error(e)}}jT(),jw.exports=dt;var NN=jw.exports,ab=NN;Wp.createRoot=ab.createRoot,Wp.hydrateRoot=ab.hydrateRoot;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function xN(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array"}function HT(e,t=""){if(!Number.isSafeInteger(e)||e<0){const n=t&&`"${t}" `;throw new Error(`${n}expected integer >= 0, got ${e}`)}}function wa(e,t,n=""){const r=xN(e),a=e==null?void 0:e.length,i=t!==void 0;if(!r||i&&a!==t){const o=n&&`"${n}" `,s=i?` of length ${t}`:"",l=r?`length=${a}`:`type=${typeof e}`;throw new Error(o+"expected Uint8Array"+s+", got "+l)}return e}const VT=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",ON=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));function LN(e){if(wa(e),VT)return e.toHex();let t="";for(let n=0;n=Ht._0&&e<=Ht._9)return e-Ht._0;if(e>=Ht.A&&e<=Ht.F)return e-(Ht.A-10);if(e>=Ht.a&&e<=Ht.f)return e-(Ht.a-10)}function DN(e){if(typeof e!="string")throw new Error("hex string expected, got "+typeof e);if(VT)return Uint8Array.fromHex(e);const t=e.length,n=t/2;if(t%2)throw new Error("hex string expected, got unpadded hex of length "+t);const r=new Uint8Array(n);for(let a=0,i=0;atypeof e=="bigint"&&WT<=e;function $N(e,t,n){return ji(e)&&ji(t)&&ji(n)&&t<=e&&eObject.entries(i).forEach(([s,l])=>r(s,l,o));a(t,!1),a(n,!0)}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const YT=BigInt(0);function KT(e,t){const n=e%t;return n>=YT?n:t+n}function Tt(e,t,n){let r=e;for(;t-- >YT;)r*=r,r%=n;return r}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function GN(e,t){return function(r){const a=e(r);return{secretKey:a,publicKey:t(a)}}}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const ra=BigInt(0),ar=BigInt(1),ki=BigInt(2);function qN(e){return zN(e,{adjustScalarBytes:"function",powPminus2:"function"}),Object.freeze({...e})}function jN(e){const t=qN(e),{P:n,type:r,adjustScalarBytes:a,powPminus2:i,randomBytes:o}=t,s=r==="x25519";if(!s&&r!=="x448")throw new Error("invalid type");const l=o||MN,u=s?255:448,d=s?32:56,c=BigInt(s?9:5),f=BigInt(s?121665:39081),p=s?ki**BigInt(254):ki**BigInt(447),h=s?BigInt(8)*ki**BigInt(251)-ar:BigInt(4)*ki**BigInt(445)-ar,y=p+h+ar,T=$=>KT($,n),b=g(c);function g($){return BN(T($),d)}function m($){const z=zf(wa($,d,"uCoordinate"));return s&&(z[31]&=127),T(ob(z))}function v($){return ob(a(zf(wa($,d,"scalar"))))}function _($,z){const H=k(m(z),v($));if(H===ra)throw new Error("invalid private or public key received");return g(H)}function E($){return _($,b)}const R=E,C=_;function N($,z,H){const Y=T($*(z-H));return z=T(z-Y),H=T(H+Y),{x_2:z,x_3:H}}function k($,z){sb("u",$,ra,n),sb("scalar",z,p,y);const H=z,Y=$;let x=ar,M=ra,S=$,P=ar,G=ra;for(let Q=BigInt(u-1);Q>=ra;Q--){const ue=H>>Q&ar;G^=ue,{x_2:x,x_3:S}=N(G,x,S),{x_2:M,x_3:P}=N(G,M,P),G=ue;const Z=x+M,ce=T(Z*Z),ke=x-M,Ve=T(ke*ke),Be=ce-Ve,rt=S+P,jr=S-P,sn=T(jr*Z),ai=T(rt*ke),Hr=sn+ai,Vr=sn-ai;S=T(Hr*Hr),P=T(Y*T(Vr*Vr)),x=T(ce*Ve),M=T(Be*(ce+T(f*Be)))}({x_2:x,x_3:S}=N(G,x,S)),{x_2:M,x_3:P}=N(G,M,P);const A=i(M);return T(x*A)}const I={secretKey:d,publicKey:d,seed:d},D=($=l(d))=>(wa($,I.seed,"seed"),$),q={randomSecretKey:D};return Object.freeze({keygen:GN(D,R),getSharedSecret:C,getPublicKey:R,scalarMult:_,scalarMultBase:E,utils:q,GuBytes:b.slice(),lengths:I})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const HN=BigInt(1),lb=BigInt(2),VN=BigInt(3),WN=BigInt(5);BigInt(8);const XT=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed");function YN(e){const t=BigInt(10),n=BigInt(20),r=BigInt(40),a=BigInt(80),i=XT,s=e*e%i*e%i,l=Tt(s,lb,i)*s%i,u=Tt(l,HN,i)*e%i,d=Tt(u,WN,i)*u%i,c=Tt(d,t,i)*d%i,f=Tt(c,n,i)*c%i,p=Tt(f,r,i)*f%i,h=Tt(p,a,i)*p%i,y=Tt(h,a,i)*p%i,T=Tt(y,t,i)*d%i;return{pow_p_5_8:Tt(T,lb,i)*e%i,b2:s}}function KN(e){return e[0]&=248,e[31]&=127,e[31]|=64,e}const ZT=(()=>{const e=XT;return jN({P:e,type:"x25519",powPminus2:t=>{const{pow_p_5_8:n,b2:r}=YN(t);return KT(Tt(n,VN,e)*r,e)},adjustScalarBytes:KN})})();/*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) */function XN(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array"}function Xe(e,t,n=""){const r=XN(e),a=e==null?void 0:e.length,i=t!==void 0;if(!r||i&&a!==t){const o=n&&`"${n}" `,s=i?` of length ${t}`:"",l=r?`length=${a}`:`type=${typeof e}`;throw new Error(o+"expected Uint8Array"+s+", got "+l)}return e}function Eo(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}function QT(e,t){Xe(e,void 0,"output");const n=t.outputLen;if(e.length{function n(r,...a){if(Xe(r,void 0,"key"),!QN)throw new Error("Non little-endian hardware is not yet supported");if(e.nonceLength!==void 0){const d=a[0];Xe(d,e.varSizeNonce?void 0:e.nonceLength,"nonce")}const i=e.tagLength;i&&a[1]!==void 0&&Xe(a[1],void 0,"AAD");const o=t(r,...a),s=(d,c)=>{if(c!==void 0){if(d!==2)throw new Error("cipher output not supported");Xe(c,void 0,"output")}};let l=!1;return{encrypt(d,c){if(l)throw new Error("cannot encrypt() twice with same key + nonce");return l=!0,Xe(d),s(o.encrypt.length,c),o.encrypt(d,c)},decrypt(d,c){if(Xe(d),i&&d.length{const a=r&1;return{s3:n<<31|r>>>1,s2:t<<31|n>>>1,s1:e<<31|t>>>1,s0:e>>>1^rx<<24&-(a&1)}},gt=e=>(e>>>0&255)<<24|(e>>>8&255)<<16|(e>>>16&255)<<8|e>>>24&255|0;function ix(e){e.reverse();const t=e[15]&1;let n=0;for(let r=0;r>>1|n,n=(a&1)<<7}return e[0]^=-t&225,e}const ox=e=>e>64*1024?8:e>1024?4:2;class JT{constructor(t,n){se(this,"blockLen",Yt);se(this,"outputLen",Yt);se(this,"s0",0);se(this,"s1",0);se(this,"s2",0);se(this,"s3",0);se(this,"finished",!1);se(this,"t");se(this,"W");se(this,"windowSize");Xe(t,16,"key"),t=Kn(t);const r=zo(t);let a=r.getUint32(0,!1),i=r.getUint32(4,!1),o=r.getUint32(8,!1),s=r.getUint32(12,!1);const l=[];for(let h=0;h<128;h++)l.push({s0:gt(a),s1:gt(i),s2:gt(o),s3:gt(s)}),{s0:a,s1:i,s2:o,s3:s}=ax(a,i,o,s);const u=ox(n||1024);if(![1,2,4,8].includes(u))throw new Error("ghash: invalid window size, expected 2, 4 or 8");this.W=u;const c=128/u,f=this.windowSize=2**u,p=[];for(let h=0;h>>u-v-1&1))continue;const{s0:E,s1:R,s2:C,s3:N}=l[u*h+v];T^=E,b^=R,g^=C,m^=N}p.push({s0:T,s1:b,s2:g,s3:m})}this.t=p}_updateBlock(t,n,r,a){t^=this.s0,n^=this.s1,r^=this.s2,a^=this.s3;const{W:i,t:o,windowSize:s}=this;let l=0,u=0,d=0,c=0;const f=(1<>>8*y&255;for(let b=8/i-1;b>=0;b--){const g=T>>>i*b&f,{s0:m,s1:v,s2:_,s3:E}=o[p*s+g];l^=m,u^=v,d^=_,c^=E,p+=1}}this.s0=l,this.s1=u,this.s2=d,this.s3=c}update(t){Eo(this),Xe(t),t=Kn(t);const n=Qt(t),r=Math.floor(t.length/Yt),a=t.length%Yt;for(let i=0;ie(a,r.length).update(r).digest(),n=e(new Uint8Array(16),0);return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=(r,a)=>e(r,a),t}const ub=eA((e,t)=>new JT(e,t));eA((e,t)=>new sx(e,t));const Gf=16,lx=4,wi=new Uint8Array(Gf),ux=283;function cx(e){if(![16,24,32].includes(e.length))throw new Error('"aes key" expected Uint8Array of length 16/24/32, got length='+e.length)}function rm(e){return e<<1^ux&-(e>>7)}function cb(e,t){let n=0;for(;t>0;t>>=1)n^=e&-(t&1),e=rm(e);return n}const dx=(()=>{const e=new Uint8Array(256);for(let n=0,r=1;n<256;n++,r^=rm(r))e[n]=r;const t=new Uint8Array(256);t[0]=99;for(let n=0;n<255;n++){let r=e[255-n];r|=r<<8,t[e[n]]=(r^r>>4^r>>5^r>>6^r>>7^99)&255}return rn(e),t})(),px=e=>e<<24|e>>>8,As=e=>e<<8|e>>>24;function fx(e,t){if(e.length!==256)throw new Error("Wrong sbox length");const n=new Uint32Array(256).map((u,d)=>t(e[d])),r=n.map(As),a=r.map(As),i=a.map(As),o=new Uint32Array(256*256),s=new Uint32Array(256*256),l=new Uint16Array(256*256);for(let u=0;u<256;u++)for(let d=0;d<256;d++){const c=u*256+d;o[c]=n[u]^r[d],s[c]=a[u]^i[d],l[c]=e[u]<<8|e[d]}return{sbox:e,sbox2:l,T0:n,T1:r,T2:a,T3:i,T01:o,T23:s}}const tA=fx(dx,e=>cb(e,3)<<24|e<<16|e<<8|cb(e,2)),gx=(()=>{const e=new Uint8Array(16);for(let t=0,n=1;t<16;t++,n=rm(n))e[t]=n;return e})();function mx(e){Xe(e);const t=e.length;cx(e);const{sbox2:n}=tA,r=[];So(e)||r.push(e=Kn(e));const a=Qt(e),i=a.length,o=l=>da(n,l,l,l,l),s=new Uint32Array(t+28);s.set(a);for(let l=i;l6&&l%i===4&&(u=o(u)),s[l]=s[l-i]^u}return rn(...r),s}function _i(e,t,n,r,a,i){return e[n<<8&65280|r>>>8&255]^t[a>>>8&65280|i>>>24&255]}function da(e,t,n,r,a){return e[t&255|n&65280]|e[r>>>16&255|a>>>16&65280]<<16}function db(e,t,n,r,a){const{sbox2:i,T01:o,T23:s}=tA;let l=0;t^=e[l++],n^=e[l++],r^=e[l++],a^=e[l++];const u=e.length/4-2;for(let h=0;h>>0,s.setUint32(d,f,t),{s0:p,s1:h,s2:y,s3:T}=db(e,o[0],o[1],o[2],o[3]);const b=Gf*Math.floor(l.length/lx);if(bt+=String.fromCharCode(n)),btoa(t)}function jf(e){const t=atob(e),n=new Uint8Array(t.length);for(let r=0;r{this.destroyed||(this.ws.send(JSON.stringify({type:"join_room",room_id:this.roomId,device_id:this.mobileDeviceId,device_type:"mobile",public_key:qf(this.keyPair.publicKey)})),this.callbacks.onStateChange("connected"),this.startHeartbeat())},this.ws.onmessage=async n=>{if(!this.destroyed)try{const r=JSON.parse(n.data);await this.handleWsMessage(r)}catch{}},this.ws.onclose=n=>{this.destroyed||(this.stopHeartbeat(),this.sharedKey=null,this.callbacks.onStateChange("disconnected"))},this.ws.onerror=n=>{this.destroyed||this.callbacks.onError("WebSocket connection error")}}async handleWsMessage(t){switch(t.type){case"relay":{if(!this.sharedKey)return;try{const n=await vx(this.sharedKey,t.encrypted_data,t.nonce),r=JSON.parse(n);if(r.challenge&&r.timestamp){const a=JSON.stringify({challenge_echo:r.challenge,device_id:this.mobileDeviceId,device_name:this.getMobileDeviceName()});await this.sendEncrypted(a),this.callbacks.onStateChange("paired")}else this.callbacks.onMessage(n)}catch{}break}case"peer_disconnected":{this.stopHeartbeat(),this.sharedKey=null,this.callbacks.onStateChange("disconnected");break}case"error":{this.callbacks.onError(`Join failed: ${t.message}`),this.callbacks.onStateChange("disconnected");break}}}async sendEncrypted(t){if(!this.sharedKey||!this.ws||this.ws.readyState!==WebSocket.OPEN)return;const{data:n,nonce:r}=await Sx(this.sharedKey,t);this.ws.send(JSON.stringify({type:"relay",room_id:this.roomId,encrypted_data:n,nonce:r}))}async sendCommand(t){await this.sendEncrypted(JSON.stringify(t))}getMobileDeviceName(){const t=navigator.userAgent;return/iPhone/i.test(t)?"iPhone":/iPad/i.test(t)?"iPad":/Android/i.test(t)?"Android":"Mobile Browser"}setMessageHandler(t){this.callbacks.onMessage=t}startHeartbeat(){this.stopHeartbeat(),this.heartbeatTimer=setInterval(()=>{var t;((t=this.ws)==null?void 0:t.readyState)===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"heartbeat"}))},25e3)}stopHeartbeat(){this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null)}async pollMessages(){return{messages:[],peer_connected:!!this.sharedKey}}async ackMessages(){}startPolling(t=2e3){}stopPolling(){}disconnect(){var t;this.destroyed=!0,this.stopHeartbeat(),(t=this.ws)==null||t.close(),this.ws=null,this.sharedKey=null,this.callbacks.onStateChange("disconnected")}get isPaired(){return this.sharedKey!==null}}class wx{constructor(t){se(this,"relay");se(this,"pendingCallbacks",new Map);se(this,"streamListeners",[]);this.relay=t,this.relay.startPolling(2e3)}onStreamEvent(t){return this.streamListeners.push(t),()=>{this.streamListeners=this.streamListeners.filter(n=>n!==t)}}handleMessage(t){try{const n=JSON.parse(t);if(n.resp==="stream_event"){this.streamListeners.forEach(r=>r(n));return}if(n._request_id&&this.pendingCallbacks.has(n._request_id)){const r=this.pendingCallbacks.get(n._request_id);this.pendingCallbacks.delete(n._request_id),r(n)}}catch(n){console.error("[SessionMgr] Failed to parse message",n)}}async request(t){const n=`req_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,r={...t,_request_id:n};return new Promise((a,i)=>{const o=setTimeout(()=>{this.pendingCallbacks.delete(n),i(new Error("Request timeout"))},3e4);this.pendingCallbacks.set(n,s=>{clearTimeout(o),s.resp==="error"?i(new Error(s.message)):a(s)}),this.relay.sendCommand(r).catch(i)})}async getWorkspaceInfo(){const t=await this.request({cmd:"get_workspace_info"});return{has_workspace:t.has_workspace,path:t.path,project_name:t.project_name,git_branch:t.git_branch}}async listRecentWorkspaces(){return(await this.request({cmd:"list_recent_workspaces"})).workspaces||[]}async setWorkspace(t){return await this.request({cmd:"set_workspace",path:t})}async listSessions(t,n=30,r=0){const a=await this.request({cmd:"list_sessions",workspace_path:t??null,limit:n,offset:r});return{sessions:a.sessions||[],has_more:a.has_more??!1}}async createSession(t,n,r){return(await this.request({cmd:"create_session",agent_type:t||void 0,session_name:n||void 0,workspace_path:r??null})).session_id}async getSessionMessages(t,n,r){const a=await this.request({cmd:"get_session_messages",session_id:t,limit:n,before_message_id:r});return{messages:a.messages||[],has_more:a.has_more||!1}}async subscribeSession(t){await this.request({cmd:"subscribe_session",session_id:t})}async unsubscribeSession(t){await this.request({cmd:"unsubscribe_session",session_id:t})}async sendMessage(t,n){return(await this.request({cmd:"send_message",session_id:t,content:n})).turn_id}async cancelTask(t){await this.request({cmd:"cancel_task",session_id:t})}async deleteSession(t){await this.request({cmd:"delete_session",session_id:t})}async ping(){await this.request({cmd:"ping"})}dispose(){this.relay.stopPolling(),this.pendingCallbacks.clear(),this.streamListeners=[]}}const _x={},pb=e=>{let t;const n=new Set,r=(d,c)=>{const f=typeof d=="function"?d(t):d;if(!Object.is(f,t)){const p=t;t=c??(typeof f!="object"||f===null)?f:Object.assign({},t,f),n.forEach(h=>h(t,p))}},a=()=>t,l={setState:r,getState:a,getInitialState:()=>u,subscribe:d=>(n.add(d),()=>n.delete(d)),destroy:()=>{(_x?"production":void 0)!=="production"&&console.warn("[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected."),n.clear()}},u=t=e(r,a,l);return l},Tx=e=>e?pb(e):pb;var aA={exports:{}},iA={},oA={exports:{}},sA={};/** - * @license React - * use-sync-external-store-shim.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Fr=W;function Ax(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var Rx=typeof Object.is=="function"?Object.is:Ax,Ix=Fr.useState,Cx=Fr.useEffect,Nx=Fr.useLayoutEffect,xx=Fr.useDebugValue;function Ox(e,t){var n=t(),r=Ix({inst:{value:n,getSnapshot:t}}),a=r[0].inst,i=r[1];return Nx(function(){a.value=n,a.getSnapshot=t,Rs(a)&&i({inst:a})},[e,n,t]),Cx(function(){return Rs(a)&&i({inst:a}),e(function(){Rs(a)&&i({inst:a})})},[e]),xx(n),n}function Rs(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!Rx(e,n)}catch{return!0}}function Lx(e,t){return t()}var Dx=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?Lx:Ox;sA.useSyncExternalStore=Fr.useSyncExternalStore!==void 0?Fr.useSyncExternalStore:Dx;oA.exports=sA;var Mx=oA.exports;/** - * @license React - * use-sync-external-store-shim/with-selector.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Go=W,Fx=Mx;function Px(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var Ux=typeof Object.is=="function"?Object.is:Px,Bx=Fx.useSyncExternalStore,$x=Go.useRef,zx=Go.useEffect,Gx=Go.useMemo,qx=Go.useDebugValue;iA.useSyncExternalStoreWithSelector=function(e,t,n,r,a){var i=$x(null);if(i.current===null){var o={hasValue:!1,value:null};i.current=o}else o=i.current;i=Gx(function(){function l(p){if(!u){if(u=!0,d=p,p=r(p),a!==void 0&&o.hasValue){var h=o.value;if(a(h,p))return c=h}return c=p}if(h=c,Ux(d,p))return h;var y=r(p);return a!==void 0&&a(h,y)?(d=p,h):(d=p,c=y)}var u=!1,d,c,f=n===void 0?null:n;return[function(){return l(t())},f===null?void 0:function(){return l(f())}]},[t,n,r,a]);var s=Bx(e,i[0],i[1]);return zx(function(){o.hasValue=!0,o.value=s},[s]),qx(s),s};aA.exports=iA;var jx=aA.exports;const Hx=Wa(jx),lA={},{useDebugValue:Vx}=Ft,{useSyncExternalStoreWithSelector:Wx}=Hx;let fb=!1;const Yx=e=>e;function Kx(e,t=Yx,n){(lA?"production":void 0)!=="production"&&n&&!fb&&(console.warn("[DEPRECATED] Use `createWithEqualityFn` instead of `create` or use `useStoreWithEqualityFn` instead of `useStore`. They can be imported from 'zustand/traditional'. https://github.com/pmndrs/zustand/discussions/1937"),fb=!0);const r=Wx(e.subscribe,e.getState,e.getServerState||e.getInitialState,t,n);return Vx(r),r}const gb=e=>{(lA?"production":void 0)!=="production"&&typeof e!="function"&&console.warn("[DEPRECATED] Passing a vanilla store will be unsupported in a future version. Instead use `import { useStore } from 'zustand'`.");const t=typeof e=="function"?Tx(e):e,n=(r,a)=>Kx(t,r,a);return Object.assign(n,t),n},Xx=e=>e?gb(e):gb,am=Xx((e,t)=>({connectionState:"disconnected",setConnectionState:n=>e({connectionState:n}),currentWorkspace:null,setCurrentWorkspace:n=>e({currentWorkspace:n}),sessions:[],setSessions:n=>e({sessions:n}),appendSessions:n=>e(r=>({sessions:[...r.sessions,...n]})),activeSessionId:null,setActiveSessionId:n=>e({activeSessionId:n}),messagesBySession:{},getMessages:n=>t().messagesBySession[n]||[],setMessages:(n,r)=>e(a=>({messagesBySession:{...a.messagesBySession,[n]:r}})),appendMessage:(n,r)=>e(a=>{const i=a.messagesBySession[n]||[];return{messagesBySession:{...a.messagesBySession,[n]:[...i,r]}}}),updateLastMessage:(n,r)=>e(a=>{const i=[...a.messagesBySession[n]||[]];return i.length>0&&(i[i.length-1]={...i[i.length-1],content:r}),{messagesBySession:{...a.messagesBySession,[n]:i}}}),updateLastMessageFull:(n,r,a)=>e(i=>{const o=[...i.messagesBySession[n]||[]];return o.length>0&&(o[o.length-1]={...o[o.length-1],content:r,metadata:a}),{messagesBySession:{...i.messagesBySession,[n]:o}}}),error:null,setError:n=>e({error:n}),isStreaming:!1,setIsStreaming:n=>e({isStreaming:n})})),Zx=({onPaired:e})=>{const{connectionState:t,setConnectionState:n,setError:r,error:a}=am(),i=W.useRef(null),o=W.useRef(!1);W.useEffect(()=>{const d=window.location.hash,c=new URLSearchParams(d.replace(/^#\/pair\?/,"")),f=c.get("room"),p=c.get("pk"),h=c.get("did"),y=c.get("relay");if(!f||!p){r("Invalid QR code: missing room or public key");return}let T;y?T=y:T=(window.location.origin+window.location.pathname.replace(/\/$/,"")).replace(/^https/,"wss").replace(/^http/,"ws");const b=new kx(T,f,p,h||"",{onStateChange:g=>{if(n(g),g==="paired"){o.current=!0;const m=new wx(b);e(b,m)}},onMessage:()=>{},onError:g=>r(g)});return i.current=b,b.connect(),()=>{o.current||b.disconnect()}},[]);const s={disconnected:"Disconnected",connecting:"Connecting to relay server...",connected:"Connected, exchanging keys...",paired:"Paired! Loading sessions...",error:"Connection error"},l=()=>{window.location.reload()},u=(t==="error"||t==="disconnected")&&!!a;return L.jsxs("div",{className:"pairing-page",children:[L.jsx("div",{className:"pairing-page__logo",children:"BitFun"}),L.jsx("div",{className:"pairing-page__spinner",children:t!=="error"&&t!=="disconnected"&&L.jsx("div",{className:"spinner"})}),L.jsx("div",{className:"pairing-page__state",children:s[t]||t}),a&&L.jsx("div",{className:"pairing-page__error",children:a}),u&&L.jsx("button",{className:"pairing-page__retry",onClick:l,children:"Retry"})]})},Qx=({sessionMgr:e,onReady:t})=>{const[n,r]=W.useState(null),[a,i]=W.useState([]),[o,s]=W.useState(!0),[l,u]=W.useState(!1),[d,c]=W.useState(null),[f,p]=W.useState(!1),h=W.useCallback(async()=>{try{const m=await e.getWorkspaceInfo();r(m)}catch(m){c(m.message)}finally{s(!1)}},[e]),y=W.useCallback(async()=>{try{const m=await e.listRecentWorkspaces();i(m)}catch(m){c(m.message)}},[e]);W.useEffect(()=>{h()},[h]);const T=async()=>{p(!0),await y()},b=async m=>{if(!l){u(!0),c(null);try{const v=await e.setWorkspace(m);v.success?(await h(),p(!1)):c(v.error||"Failed to set workspace")}catch(v){c(v.message)}finally{u(!1)}}},g=()=>{t()};return o?L.jsx("div",{className:"workspace-page",children:L.jsxs("div",{className:"workspace-page__loading",children:[L.jsx("div",{className:"spinner"}),L.jsx("span",{children:"Loading workspace info..."})]})}):L.jsxs("div",{className:"workspace-page",children:[L.jsx("div",{className:"workspace-page__header",children:L.jsx("h1",{children:"Workspace"})}),L.jsxs("div",{className:"workspace-page__content",children:[n!=null&&n.has_workspace?L.jsxs("div",{className:"workspace-page__current",children:[L.jsx("div",{className:"workspace-page__current-label",children:"Current Workspace"}),L.jsxs("div",{className:"workspace-page__current-card",children:[L.jsx("div",{className:"workspace-page__project-name",children:n.project_name||"Unknown Project"}),L.jsx("div",{className:"workspace-page__project-path",children:n.path}),n.git_branch&&L.jsxs("div",{className:"workspace-page__git-branch",children:[L.jsx("span",{className:"workspace-page__branch-icon",children:"⎇"}),n.git_branch]})]}),L.jsxs("div",{className:"workspace-page__actions",children:[L.jsx("button",{className:"workspace-page__btn workspace-page__btn--primary",onClick:g,children:"Continue"}),L.jsx("button",{className:"workspace-page__btn workspace-page__btn--secondary",onClick:T,children:"Switch Workspace"})]})]}):L.jsxs("div",{className:"workspace-page__no-workspace",children:[L.jsx("div",{className:"workspace-page__no-workspace-icon",children:"📂"}),L.jsx("div",{className:"workspace-page__no-workspace-text",children:"No workspace is currently open on the desktop."}),L.jsx("div",{className:"workspace-page__no-workspace-hint",children:"Select a recent workspace below, or open one on the desktop first."}),!f&&L.jsx("button",{className:"workspace-page__btn workspace-page__btn--primary",onClick:T,children:"Select Workspace"})]}),f&&L.jsxs("div",{className:"workspace-page__recent",children:[L.jsx("div",{className:"workspace-page__recent-label",children:"Recent Workspaces"}),a.length===0?L.jsx("div",{className:"workspace-page__recent-empty",children:"No recent workspaces found. Please open a workspace on the desktop first."}):L.jsx("div",{className:"workspace-page__recent-list",children:a.map(m=>L.jsxs("button",{className:"workspace-page__recent-item",onClick:()=>b(m.path),disabled:l,children:[L.jsx("div",{className:"workspace-page__recent-item-name",children:m.name}),L.jsx("div",{className:"workspace-page__recent-item-path",children:m.path})]},m.path))}),(n==null?void 0:n.has_workspace)&&L.jsx("button",{className:"workspace-page__btn workspace-page__btn--secondary",onClick:()=>p(!1),children:"Cancel"})]}),l&&L.jsxs("div",{className:"workspace-page__switching",children:[L.jsx("div",{className:"spinner"}),L.jsx("span",{children:"Opening workspace..."})]}),d&&L.jsx("div",{className:"workspace-page__error",children:d})]})]})},mb=30;function Jx(e){const t=parseInt(e,10);if(!t||isNaN(t))return"";const n=new Date(t*1e3),a=new Date().getTime()-n.getTime(),i=Math.floor(a/6e4);if(i<1)return"just now";if(i<60)return`${i}m ago`;const o=Math.floor(i/60);if(o<24)return`${o}h ago`;const s=Math.floor(o/24);return s<7?`${s}d ago`:n.toLocaleDateString()}function eO(e){switch(e){case"code":case"agentic":return"Code";case"cowork":case"Cowork":return"Cowork";default:return e||"Default"}}const tO=({sessionMgr:e,onSelectSession:t,onOpenWorkspace:n})=>{const{sessions:r,setSessions:a,appendSessions:i,setError:o,currentWorkspace:s,setCurrentWorkspace:l}=am(),[u,d]=W.useState(!1),[c,f]=W.useState(!1),[p,h]=W.useState(!1),[y,T]=W.useState(!1),[b,g]=W.useState(!1),m=W.useRef(0),v=W.useRef(null),_=W.useCallback(async k=>{f(!0),m.current=0;try{const I=await e.listSessions(k,mb,0);a(I.sessions),T(I.has_more),m.current=I.sessions.length}catch(I){o(I.message)}finally{f(!1)}},[e,a,o]),E=W.useCallback(async k=>{if(!(p||!y)){h(!0);try{const I=await e.listSessions(k,mb,m.current);i(I.sessions),T(I.has_more),m.current+=I.sessions.length}catch(I){o(I.message)}finally{h(!1)}}},[e,i,o,p,y]);W.useEffect(()=>{let k=!1;return(async()=>{try{const D=await e.getWorkspaceInfo();if(k)return;const q=D.has_workspace?D:null;l(q),await _(q==null?void 0:q.path)}catch(D){k||o(D.message)}})(),()=>{k=!0}},[]);const R=W.useCallback(k=>{const I=k.currentTarget;I.scrollHeight-I.scrollTop-I.clientHeight<150&&E(s==null?void 0:s.path)},[s==null?void 0:s.path,E]),C=async()=>{try{const k=await e.getWorkspaceInfo(),I=k.has_workspace?k:null;l(I),await _(I==null?void 0:I.path)}catch(k){o(k.message)}},N=async k=>{if(!u){d(!0),g(!1);try{const I=await e.createSession(k,void 0,s==null?void 0:s.path);await _(s==null?void 0:s.path),t(I)}catch(I){o(I.message)}finally{d(!1)}}};return L.jsxs("div",{className:"session-list",children:[L.jsxs("div",{className:"session-list__header",children:[L.jsx("h1",{children:"BitFun Sessions"}),L.jsxs("div",{className:"session-list__new-wrapper",children:[L.jsx("button",{className:"session-list__new-btn",onClick:()=>g(!b),disabled:u,style:{opacity:u?.5:1},children:u?"Creating...":"+ New"}),b&&L.jsxs("div",{className:"session-list__new-menu",children:[L.jsxs("button",{className:"session-list__menu-item",onClick:()=>N("code"),children:[L.jsx("span",{className:"session-list__menu-icon",children:""}),"Code Session"]}),L.jsxs("button",{className:"session-list__menu-item",onClick:()=>N("cowork"),children:[L.jsx("span",{className:"session-list__menu-icon",children:"<>"}),"Cowork Session"]})]})]})]}),L.jsxs("div",{className:"session-list__workspace-bar",onClick:n,children:[L.jsx("span",{className:"session-list__workspace-icon",children:"📂"}),L.jsx("span",{className:"session-list__workspace-name",children:(s==null?void 0:s.project_name)||(s==null?void 0:s.path)||"No workspace"}),(s==null?void 0:s.git_branch)&&L.jsxs("span",{className:"session-list__workspace-branch",children:["⎇ ",s.git_branch]}),L.jsx("span",{className:"session-list__workspace-switch",children:"Switch ›"})]}),L.jsxs("div",{className:"session-list__items",ref:v,onScroll:R,children:[c&&r.length===0&&L.jsx("div",{className:"session-list__empty",children:"Loading sessions..."}),!c&&r.length===0&&L.jsx("div",{className:"session-list__empty",children:"No sessions yet. Create one to get started."}),r.map(k=>L.jsxs("div",{className:"session-list__item",onClick:()=>t(k.session_id),children:[L.jsxs("div",{className:"session-list__item-top",children:[L.jsx("div",{className:"session-list__item-name",children:k.name||"Untitled Session"}),L.jsx("span",{className:`session-list__agent-badge session-list__agent-badge--${k.agent_type}`,children:eO(k.agent_type)})]}),L.jsxs("div",{className:"session-list__item-meta",children:[L.jsxs("span",{children:[k.message_count," messages"]}),L.jsx("span",{className:"session-list__item-time",children:Jx(k.updated_at)})]})]},k.session_id)),p&&L.jsx("div",{className:"session-list__load-more",children:"Loading more..."})]}),L.jsx("button",{className:"session-list__refresh",onClick:C,disabled:c||p,children:c?"Refreshing...":"Refresh"})]})};function nO(e,t){const n={};return(e[e.length-1]===""?[...e,""]:e).join((n.padRight?" ":"")+","+(n.padLeft===!1?"":" ")).trim()}const rO=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,aO=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,iO={};function hb(e,t){return(iO.jsx?aO:rO).test(e)}const oO=/[ \t\n\f\r]/g;function sO(e){return typeof e=="object"?e.type==="text"?bb(e.value):!1:bb(e)}function bb(e){return e.replace(oO,"")===""}let Ja=class{constructor(t,n,r){this.normal=n,this.property=t,r&&(this.space=r)}};Ja.prototype.normal={};Ja.prototype.property={};Ja.prototype.space=void 0;function uA(e,t){const n={},r={};for(const a of e)Object.assign(n,a.property),Object.assign(r,a.normal);return new Ja(n,r,t)}function Hf(e){return e.toLowerCase()}let tt=class{constructor(t,n){this.attribute=n,this.property=t}};tt.prototype.attribute="";tt.prototype.booleanish=!1;tt.prototype.boolean=!1;tt.prototype.commaOrSpaceSeparated=!1;tt.prototype.commaSeparated=!1;tt.prototype.defined=!1;tt.prototype.mustUseProperty=!1;tt.prototype.number=!1;tt.prototype.overloadedBoolean=!1;tt.prototype.property="";tt.prototype.spaceSeparated=!1;tt.prototype.space=void 0;let lO=0;const X=Jn(),we=Jn(),Vf=Jn(),U=Jn(),de=Jn(),Ir=Jn(),it=Jn();function Jn(){return 2**++lO}const Wf=Object.freeze(Object.defineProperty({__proto__:null,boolean:X,booleanish:we,commaOrSpaceSeparated:it,commaSeparated:Ir,number:U,overloadedBoolean:Vf,spaceSeparated:de},Symbol.toStringTag,{value:"Module"})),Is=Object.keys(Wf);let im=class extends tt{constructor(t,n,r,a){let i=-1;if(super(t,n),yb(this,"space",a),typeof r=="number")for(;++i4&&n.slice(0,4)==="data"&&fO.test(t)){if(t.charAt(4)==="-"){const i=t.slice(5).replace(Eb,hO);r="data"+i.charAt(0).toUpperCase()+i.slice(1)}else{const i=t.slice(4);if(!Eb.test(i)){let o=i.replace(pO,mO);o.charAt(0)!=="-"&&(o="-"+o),t="data"+o}}a=im}return new a(r,t)}function mO(e){return"-"+e.toLowerCase()}function hO(e){return e.charAt(1).toUpperCase()}const bO=uA([cA,uO,fA,gA,mA],"html"),om=uA([cA,cO,fA,gA,mA],"svg");function yO(e){return e.join(" ").trim()}var sm={},Sb=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,EO=/\n/g,SO=/^\s*/,vO=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,kO=/^:\s*/,wO=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,_O=/^[;\s]*/,TO=/^\s+|\s+$/g,AO=` -`,vb="/",kb="*",Un="",RO="comment",IO="declaration";function CO(e,t){if(typeof e!="string")throw new TypeError("First argument must be a string");if(!e)return[];t=t||{};var n=1,r=1;function a(h){var y=h.match(EO);y&&(n+=y.length);var T=h.lastIndexOf(AO);r=~T?h.length-T:r+h.length}function i(){var h={line:n,column:r};return function(y){return y.position=new o(h),u(),y}}function o(h){this.start=h,this.end={line:n,column:r},this.source=t.source}o.prototype.content=e;function s(h){var y=new Error(t.source+":"+n+":"+r+": "+h);if(y.reason=h,y.filename=t.source,y.line=n,y.column=r,y.source=e,!t.silent)throw y}function l(h){var y=h.exec(e);if(y){var T=y[0];return a(T),e=e.slice(T.length),y}}function u(){l(SO)}function d(h){var y;for(h=h||[];y=c();)y!==!1&&h.push(y);return h}function c(){var h=i();if(!(vb!=e.charAt(0)||kb!=e.charAt(1))){for(var y=2;Un!=e.charAt(y)&&(kb!=e.charAt(y)||vb!=e.charAt(y+1));)++y;if(y+=2,Un===e.charAt(y-1))return s("End of comment missing");var T=e.slice(2,y-2);return r+=2,a(T),e=e.slice(y),r+=2,h({type:RO,comment:T})}}function f(){var h=i(),y=l(vO);if(y){if(c(),!l(kO))return s("property missing ':'");var T=l(wO),b=h({type:IO,property:wb(y[0].replace(Sb,Un)),value:T?wb(T[0].replace(Sb,Un)):Un});return l(_O),b}}function p(){var h=[];d(h);for(var y;y=f();)y!==!1&&(h.push(y),d(h));return h}return u(),p()}function wb(e){return e?e.replace(TO,Un):Un}var NO=CO,xO=Tn&&Tn.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(sm,"__esModule",{value:!0});sm.default=LO;const OO=xO(NO);function LO(e,t){let n=null;if(!e||typeof e!="string")return n;const r=(0,OO.default)(e),a=typeof t=="function";return r.forEach(i=>{if(i.type!=="declaration")return;const{property:o,value:s}=i;a?t(o,s,i):s&&(n=n||{},n[o]=s)}),n}var qo={};Object.defineProperty(qo,"__esModule",{value:!0});qo.camelCase=void 0;var DO=/^--[a-zA-Z0-9_-]+$/,MO=/-([a-z])/g,FO=/^[^-]+$/,PO=/^-(webkit|moz|ms|o|khtml)-/,UO=/^-(ms)-/,BO=function(e){return!e||FO.test(e)||DO.test(e)},$O=function(e,t){return t.toUpperCase()},_b=function(e,t){return"".concat(t,"-")},zO=function(e,t){return t===void 0&&(t={}),BO(e)?e:(e=e.toLowerCase(),t.reactCompat?e=e.replace(UO,_b):e=e.replace(PO,_b),e.replace(MO,$O))};qo.camelCase=zO;var GO=Tn&&Tn.__importDefault||function(e){return e&&e.__esModule?e:{default:e}},qO=GO(sm),jO=qo;function Yf(e,t){var n={};return!e||typeof e!="string"||(0,qO.default)(e,function(r,a){r&&a&&(n[(0,jO.camelCase)(r,t)]=a)}),n}Yf.default=Yf;var HO=Yf;const VO=Wa(HO),hA=bA("end"),lm=bA("start");function bA(e){return t;function t(n){const r=n&&n.position&&n.position[e]||{};if(typeof r.line=="number"&&r.line>0&&typeof r.column=="number"&&r.column>0)return{line:r.line,column:r.column,offset:typeof r.offset=="number"&&r.offset>-1?r.offset:void 0}}}function WO(e){const t=lm(e),n=hA(e);if(t&&n)return{start:t,end:n}}function _a(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?Tb(e.position):"start"in e||"end"in e?Tb(e):"line"in e||"column"in e?Kf(e):""}function Kf(e){return Ab(e&&e.line)+":"+Ab(e&&e.column)}function Tb(e){return Kf(e&&e.start)+"-"+Kf(e&&e.end)}function Ab(e){return e&&typeof e=="number"?e:1}class Ue extends Error{constructor(t,n,r){super(),typeof n=="string"&&(r=n,n=void 0);let a="",i={},o=!1;if(n&&("line"in n&&"column"in n?i={place:n}:"start"in n&&"end"in n?i={place:n}:"type"in n?i={ancestors:[n],place:n.position}:i={...n}),typeof t=="string"?a=t:!i.cause&&t&&(o=!0,a=t.message,i.cause=t),!i.ruleId&&!i.source&&typeof r=="string"){const l=r.indexOf(":");l===-1?i.ruleId=r:(i.source=r.slice(0,l),i.ruleId=r.slice(l+1))}if(!i.place&&i.ancestors&&i.ancestors){const l=i.ancestors[i.ancestors.length-1];l&&(i.place=l.position)}const s=i.place&&"start"in i.place?i.place.start:i.place;this.ancestors=i.ancestors||void 0,this.cause=i.cause||void 0,this.column=s?s.column:void 0,this.fatal=void 0,this.file="",this.message=a,this.line=s?s.line:void 0,this.name=_a(i.place)||"1:1",this.place=i.place||void 0,this.reason=this.message,this.ruleId=i.ruleId||void 0,this.source=i.source||void 0,this.stack=o&&i.cause&&typeof i.cause.stack=="string"?i.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}Ue.prototype.file="";Ue.prototype.name="";Ue.prototype.reason="";Ue.prototype.message="";Ue.prototype.stack="";Ue.prototype.column=void 0;Ue.prototype.line=void 0;Ue.prototype.ancestors=void 0;Ue.prototype.cause=void 0;Ue.prototype.fatal=void 0;Ue.prototype.place=void 0;Ue.prototype.ruleId=void 0;Ue.prototype.source=void 0;const um={}.hasOwnProperty,YO=new Map,KO=/[A-Z]/g,XO=new Set(["table","tbody","thead","tfoot","tr"]),ZO=new Set(["td","th"]),yA="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function QO(e,t){if(!t||t.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const n=t.filePath||void 0;let r;if(t.development){if(typeof t.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");r=o1(n,t.jsxDEV)}else{if(typeof t.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof t.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");r=i1(n,t.jsx,t.jsxs)}const a={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:r,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:n,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space==="svg"?om:bO,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},i=EA(a,e,void 0);return i&&typeof i!="string"?i:a.create(e,a.Fragment,{children:i||void 0},void 0)}function EA(e,t,n){if(t.type==="element")return JO(e,t,n);if(t.type==="mdxFlowExpression"||t.type==="mdxTextExpression")return e1(e,t);if(t.type==="mdxJsxFlowElement"||t.type==="mdxJsxTextElement")return n1(e,t,n);if(t.type==="mdxjsEsm")return t1(e,t);if(t.type==="root")return r1(e,t,n);if(t.type==="text")return a1(e,t)}function JO(e,t,n){const r=e.schema;let a=r;t.tagName.toLowerCase()==="svg"&&r.space==="html"&&(a=om,e.schema=a),e.ancestors.push(t);const i=vA(e,t.tagName,!1),o=s1(e,t);let s=dm(e,t);return XO.has(t.tagName)&&(s=s.filter(function(l){return typeof l=="string"?!sO(l):!0})),SA(e,o,i,t),cm(o,s),e.ancestors.pop(),e.schema=r,e.create(t,i,o,n)}function e1(e,t){if(t.data&&t.data.estree&&e.evaluater){const r=t.data.estree.body[0];return r.type,e.evaluater.evaluateExpression(r.expression)}ja(e,t.position)}function t1(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);ja(e,t.position)}function n1(e,t,n){const r=e.schema;let a=r;t.name==="svg"&&r.space==="html"&&(a=om,e.schema=a),e.ancestors.push(t);const i=t.name===null?e.Fragment:vA(e,t.name,!0),o=l1(e,t),s=dm(e,t);return SA(e,o,i,t),cm(o,s),e.ancestors.pop(),e.schema=r,e.create(t,i,o,n)}function r1(e,t,n){const r={};return cm(r,dm(e,t)),e.create(t,e.Fragment,r,n)}function a1(e,t){return t.value}function SA(e,t,n,r){typeof n!="string"&&n!==e.Fragment&&e.passNode&&(t.node=r)}function cm(e,t){if(t.length>0){const n=t.length>1?t:t[0];n&&(e.children=n)}}function i1(e,t,n){return r;function r(a,i,o,s){const u=Array.isArray(o.children)?n:t;return s?u(i,o,s):u(i,o)}}function o1(e,t){return n;function n(r,a,i,o){const s=Array.isArray(i.children),l=lm(r);return t(a,i,o,s,{columnNumber:l?l.column-1:void 0,fileName:e,lineNumber:l?l.line:void 0},void 0)}}function s1(e,t){const n={};let r,a;for(a in t.properties)if(a!=="children"&&um.call(t.properties,a)){const i=u1(e,a,t.properties[a]);if(i){const[o,s]=i;e.tableCellAlignToStyle&&o==="align"&&typeof s=="string"&&ZO.has(t.tagName)?r=s:n[o]=s}}if(r){const i=n.style||(n.style={});i[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=r}return n}function l1(e,t){const n={};for(const r of t.attributes)if(r.type==="mdxJsxExpressionAttribute")if(r.data&&r.data.estree&&e.evaluater){const i=r.data.estree.body[0];i.type;const o=i.expression;o.type;const s=o.properties[0];s.type,Object.assign(n,e.evaluater.evaluateExpression(s.argument))}else ja(e,t.position);else{const a=r.name;let i;if(r.value&&typeof r.value=="object")if(r.value.data&&r.value.data.estree&&e.evaluater){const s=r.value.data.estree.body[0];s.type,i=e.evaluater.evaluateExpression(s.expression)}else ja(e,t.position);else i=r.value===null?!0:r.value;n[a]=i}return n}function dm(e,t){const n=[];let r=-1;const a=e.passKeys?new Map:YO;for(;++ra?0:a+t:t=t>a?a:t,n=n>0?n:0,r.length<1e4)o=Array.from(r),o.unshift(t,n),e.splice(...o);else for(n&&e.splice(t,n);i0?(ut(e,e.length,0,t),e):t}const Cb={}.hasOwnProperty;function wA(e){const t={};let n=-1;for(;++n13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||(n&65535)===65535||(n&65535)===65534||n>1114111?"�":String.fromCodePoint(n)}function xt(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const Ge=xn(/[A-Za-z]/),Fe=xn(/[\dA-Za-z]/),y1=xn(/[#-'*+\--9=?A-Z^-~]/);function vo(e){return e!==null&&(e<32||e===127)}const Xf=xn(/\d/),E1=xn(/[\dA-Fa-f]/),S1=xn(/[!-/:-@[-`{-~]/);function V(e){return e!==null&&e<-2}function le(e){return e!==null&&(e<0||e===32)}function ee(e){return e===-2||e===-1||e===32}const jo=xn(new RegExp("\\p{P}|\\p{S}","u")),Xn=xn(/\s/);function xn(e){return t;function t(n){return n!==null&&n>-1&&e.test(String.fromCharCode(n))}}function Gr(e){const t=[];let n=-1,r=0,a=0;for(;++n55295&&i<57344){const s=e.charCodeAt(n+1);i<56320&&s>56319&&s<57344?(o=String.fromCharCode(i,s),a=1):o="�"}else o=String.fromCharCode(i);o&&(t.push(e.slice(r,n),encodeURIComponent(o)),r=n+a+1,o=""),a&&(n+=a,a=0)}return t.join("")+e.slice(r)}function re(e,t,n,r){const a=r?r-1:Number.POSITIVE_INFINITY;let i=0;return o;function o(l){return ee(l)?(e.enter(n),s(l)):t(l)}function s(l){return ee(l)&&i++o))return;const R=t.events.length;let C=R,N,k;for(;C--;)if(t.events[C][0]==="exit"&&t.events[C][1].type==="chunkFlow"){if(N){k=t.events[C][1].end;break}N=!0}for(b(r),E=R;Em;){const _=n[v];t.containerState=_[1],_[0].exit.call(t,e)}n.length=m}function g(){a.write([null]),i=void 0,a=void 0,t.containerState._closeFlow=void 0}}function T1(e,t,n){return re(e,e.attempt(this.parser.constructs.document,t,n),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Pr(e){if(e===null||le(e)||Xn(e))return 1;if(jo(e))return 2}function Ho(e,t,n){const r=[];let a=-1;for(;++a1&&e[n][1].end.offset-e[n][1].start.offset>1?2:1;const c={...e[r][1].end},f={...e[n][1].start};xb(c,-l),xb(f,l),o={type:l>1?"strongSequence":"emphasisSequence",start:c,end:{...e[r][1].end}},s={type:l>1?"strongSequence":"emphasisSequence",start:{...e[n][1].start},end:f},i={type:l>1?"strongText":"emphasisText",start:{...e[r][1].end},end:{...e[n][1].start}},a={type:l>1?"strong":"emphasis",start:{...o.start},end:{...s.end}},e[r][1].end={...o.start},e[n][1].start={...s.end},u=[],e[r][1].end.offset-e[r][1].start.offset&&(u=bt(u,[["enter",e[r][1],t],["exit",e[r][1],t]])),u=bt(u,[["enter",a,t],["enter",o,t],["exit",o,t],["enter",i,t]]),u=bt(u,Ho(t.parser.constructs.insideSpan.null,e.slice(r+1,n),t)),u=bt(u,[["exit",i,t],["enter",s,t],["exit",s,t],["exit",a,t]]),e[n][1].end.offset-e[n][1].start.offset?(d=2,u=bt(u,[["enter",e[n][1],t],["exit",e[n][1],t]])):d=0,ut(e,r-1,n-r+3,u),n=r+u.length-d-2;break}}for(n=-1;++n0&&ee(E)?re(e,g,"linePrefix",i+1)(E):g(E)}function g(E){return E===null||V(E)?e.check(Ob,y,v)(E):(e.enter("codeFlowValue"),m(E))}function m(E){return E===null||V(E)?(e.exit("codeFlowValue"),g(E)):(e.consume(E),m)}function v(E){return e.exit("codeFenced"),t(E)}function _(E,R,C){let N=0;return k;function k(z){return E.enter("lineEnding"),E.consume(z),E.exit("lineEnding"),I}function I(z){return E.enter("codeFencedFence"),ee(z)?re(E,D,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(z):D(z)}function D(z){return z===s?(E.enter("codeFencedFenceSequence"),q(z)):C(z)}function q(z){return z===s?(N++,E.consume(z),q):N>=o?(E.exit("codeFencedFenceSequence"),ee(z)?re(E,$,"whitespace")(z):$(z)):C(z)}function $(z){return z===null||V(z)?(E.exit("codeFencedFence"),R(z)):C(z)}}}function P1(e,t,n){const r=this;return a;function a(o){return o===null?n(o):(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),i)}function i(o){return r.parser.lazy[r.now().line]?n(o):t(o)}}const Ns={name:"codeIndented",tokenize:B1},U1={partial:!0,tokenize:$1};function B1(e,t,n){const r=this;return a;function a(u){return e.enter("codeIndented"),re(e,i,"linePrefix",5)(u)}function i(u){const d=r.events[r.events.length-1];return d&&d[1].type==="linePrefix"&&d[2].sliceSerialize(d[1],!0).length>=4?o(u):n(u)}function o(u){return u===null?l(u):V(u)?e.attempt(U1,o,l)(u):(e.enter("codeFlowValue"),s(u))}function s(u){return u===null||V(u)?(e.exit("codeFlowValue"),o(u)):(e.consume(u),s)}function l(u){return e.exit("codeIndented"),t(u)}}function $1(e,t,n){const r=this;return a;function a(o){return r.parser.lazy[r.now().line]?n(o):V(o)?(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),a):re(e,i,"linePrefix",5)(o)}function i(o){const s=r.events[r.events.length-1];return s&&s[1].type==="linePrefix"&&s[2].sliceSerialize(s[1],!0).length>=4?t(o):V(o)?a(o):n(o)}}const z1={name:"codeText",previous:q1,resolve:G1,tokenize:j1};function G1(e){let t=e.length-4,n=3,r,a;if((e[n][1].type==="lineEnding"||e[n][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(r=n;++r=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return tthis.left.length?this.right.slice(this.right.length-r+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-r+this.left.length).reverse())}splice(t,n,r){const a=n||0;this.setCursor(Math.trunc(t));const i=this.right.splice(this.right.length-a,Number.POSITIVE_INFINITY);return r&&aa(this.left,r),i.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),aa(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),aa(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t=4?t(o):e.interrupt(r.parser.constructs.flow,n,t)(o)}}function CA(e,t,n,r,a,i,o,s,l){const u=l||Number.POSITIVE_INFINITY;let d=0;return c;function c(b){return b===60?(e.enter(r),e.enter(a),e.enter(i),e.consume(b),e.exit(i),f):b===null||b===32||b===41||vo(b)?n(b):(e.enter(r),e.enter(o),e.enter(s),e.enter("chunkString",{contentType:"string"}),y(b))}function f(b){return b===62?(e.enter(i),e.consume(b),e.exit(i),e.exit(a),e.exit(r),t):(e.enter(s),e.enter("chunkString",{contentType:"string"}),p(b))}function p(b){return b===62?(e.exit("chunkString"),e.exit(s),f(b)):b===null||b===60||V(b)?n(b):(e.consume(b),b===92?h:p)}function h(b){return b===60||b===62||b===92?(e.consume(b),p):p(b)}function y(b){return!d&&(b===null||b===41||le(b))?(e.exit("chunkString"),e.exit(s),e.exit(o),e.exit(r),t(b)):d999||p===null||p===91||p===93&&!l||p===94&&!s&&"_hiddenFootnoteSupport"in o.parser.constructs?n(p):p===93?(e.exit(i),e.enter(a),e.consume(p),e.exit(a),e.exit(r),t):V(p)?(e.enter("lineEnding"),e.consume(p),e.exit("lineEnding"),d):(e.enter("chunkString",{contentType:"string"}),c(p))}function c(p){return p===null||p===91||p===93||V(p)||s++>999?(e.exit("chunkString"),d(p)):(e.consume(p),l||(l=!ee(p)),p===92?f:c)}function f(p){return p===91||p===92||p===93?(e.consume(p),s++,c):c(p)}}function xA(e,t,n,r,a,i){let o;return s;function s(f){return f===34||f===39||f===40?(e.enter(r),e.enter(a),e.consume(f),e.exit(a),o=f===40?41:f,l):n(f)}function l(f){return f===o?(e.enter(a),e.consume(f),e.exit(a),e.exit(r),t):(e.enter(i),u(f))}function u(f){return f===o?(e.exit(i),l(o)):f===null?n(f):V(f)?(e.enter("lineEnding"),e.consume(f),e.exit("lineEnding"),re(e,u,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),d(f))}function d(f){return f===o||f===null||V(f)?(e.exit("chunkString"),u(f)):(e.consume(f),f===92?c:d)}function c(f){return f===o||f===92?(e.consume(f),d):d(f)}}function Ta(e,t){let n;return r;function r(a){return V(a)?(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),n=!0,r):ee(a)?re(e,r,n?"linePrefix":"lineSuffix")(a):t(a)}}const Q1={name:"definition",tokenize:eL},J1={partial:!0,tokenize:tL};function eL(e,t,n){const r=this;let a;return i;function i(p){return e.enter("definition"),o(p)}function o(p){return NA.call(r,e,s,n,"definitionLabel","definitionLabelMarker","definitionLabelString")(p)}function s(p){return a=xt(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)),p===58?(e.enter("definitionMarker"),e.consume(p),e.exit("definitionMarker"),l):n(p)}function l(p){return le(p)?Ta(e,u)(p):u(p)}function u(p){return CA(e,d,n,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(p)}function d(p){return e.attempt(J1,c,c)(p)}function c(p){return ee(p)?re(e,f,"whitespace")(p):f(p)}function f(p){return p===null||V(p)?(e.exit("definition"),r.parser.defined.push(a),t(p)):n(p)}}function tL(e,t,n){return r;function r(s){return le(s)?Ta(e,a)(s):n(s)}function a(s){return xA(e,i,n,"definitionTitle","definitionTitleMarker","definitionTitleString")(s)}function i(s){return ee(s)?re(e,o,"whitespace")(s):o(s)}function o(s){return s===null||V(s)?t(s):n(s)}}const nL={name:"hardBreakEscape",tokenize:rL};function rL(e,t,n){return r;function r(i){return e.enter("hardBreakEscape"),e.consume(i),a}function a(i){return V(i)?(e.exit("hardBreakEscape"),t(i)):n(i)}}const aL={name:"headingAtx",resolve:iL,tokenize:oL};function iL(e,t){let n=e.length-2,r=3,a,i;return e[r][1].type==="whitespace"&&(r+=2),n-2>r&&e[n][1].type==="whitespace"&&(n-=2),e[n][1].type==="atxHeadingSequence"&&(r===n-1||n-4>r&&e[n-2][1].type==="whitespace")&&(n-=r+1===n?2:4),n>r&&(a={type:"atxHeadingText",start:e[r][1].start,end:e[n][1].end},i={type:"chunkText",start:e[r][1].start,end:e[n][1].end,contentType:"text"},ut(e,r,n-r+1,[["enter",a,t],["enter",i,t],["exit",i,t],["exit",a,t]])),e}function oL(e,t,n){let r=0;return a;function a(d){return e.enter("atxHeading"),i(d)}function i(d){return e.enter("atxHeadingSequence"),o(d)}function o(d){return d===35&&r++<6?(e.consume(d),o):d===null||le(d)?(e.exit("atxHeadingSequence"),s(d)):n(d)}function s(d){return d===35?(e.enter("atxHeadingSequence"),l(d)):d===null||V(d)?(e.exit("atxHeading"),t(d)):ee(d)?re(e,s,"whitespace")(d):(e.enter("atxHeadingText"),u(d))}function l(d){return d===35?(e.consume(d),l):(e.exit("atxHeadingSequence"),s(d))}function u(d){return d===null||d===35||le(d)?(e.exit("atxHeadingText"),s(d)):(e.consume(d),u)}}const sL=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],Db=["pre","script","style","textarea"],lL={concrete:!0,name:"htmlFlow",resolveTo:dL,tokenize:pL},uL={partial:!0,tokenize:gL},cL={partial:!0,tokenize:fL};function dL(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function pL(e,t,n){const r=this;let a,i,o,s,l;return u;function u(A){return d(A)}function d(A){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(A),c}function c(A){return A===33?(e.consume(A),f):A===47?(e.consume(A),i=!0,y):A===63?(e.consume(A),a=3,r.interrupt?t:S):Ge(A)?(e.consume(A),o=String.fromCharCode(A),T):n(A)}function f(A){return A===45?(e.consume(A),a=2,p):A===91?(e.consume(A),a=5,s=0,h):Ge(A)?(e.consume(A),a=4,r.interrupt?t:S):n(A)}function p(A){return A===45?(e.consume(A),r.interrupt?t:S):n(A)}function h(A){const Q="CDATA[";return A===Q.charCodeAt(s++)?(e.consume(A),s===Q.length?r.interrupt?t:D:h):n(A)}function y(A){return Ge(A)?(e.consume(A),o=String.fromCharCode(A),T):n(A)}function T(A){if(A===null||A===47||A===62||le(A)){const Q=A===47,ue=o.toLowerCase();return!Q&&!i&&Db.includes(ue)?(a=1,r.interrupt?t(A):D(A)):sL.includes(o.toLowerCase())?(a=6,Q?(e.consume(A),b):r.interrupt?t(A):D(A)):(a=7,r.interrupt&&!r.parser.lazy[r.now().line]?n(A):i?g(A):m(A))}return A===45||Fe(A)?(e.consume(A),o+=String.fromCharCode(A),T):n(A)}function b(A){return A===62?(e.consume(A),r.interrupt?t:D):n(A)}function g(A){return ee(A)?(e.consume(A),g):k(A)}function m(A){return A===47?(e.consume(A),k):A===58||A===95||Ge(A)?(e.consume(A),v):ee(A)?(e.consume(A),m):k(A)}function v(A){return A===45||A===46||A===58||A===95||Fe(A)?(e.consume(A),v):_(A)}function _(A){return A===61?(e.consume(A),E):ee(A)?(e.consume(A),_):m(A)}function E(A){return A===null||A===60||A===61||A===62||A===96?n(A):A===34||A===39?(e.consume(A),l=A,R):ee(A)?(e.consume(A),E):C(A)}function R(A){return A===l?(e.consume(A),l=null,N):A===null||V(A)?n(A):(e.consume(A),R)}function C(A){return A===null||A===34||A===39||A===47||A===60||A===61||A===62||A===96||le(A)?_(A):(e.consume(A),C)}function N(A){return A===47||A===62||ee(A)?m(A):n(A)}function k(A){return A===62?(e.consume(A),I):n(A)}function I(A){return A===null||V(A)?D(A):ee(A)?(e.consume(A),I):n(A)}function D(A){return A===45&&a===2?(e.consume(A),H):A===60&&a===1?(e.consume(A),Y):A===62&&a===4?(e.consume(A),P):A===63&&a===3?(e.consume(A),S):A===93&&a===5?(e.consume(A),M):V(A)&&(a===6||a===7)?(e.exit("htmlFlowData"),e.check(uL,G,q)(A)):A===null||V(A)?(e.exit("htmlFlowData"),q(A)):(e.consume(A),D)}function q(A){return e.check(cL,$,G)(A)}function $(A){return e.enter("lineEnding"),e.consume(A),e.exit("lineEnding"),z}function z(A){return A===null||V(A)?q(A):(e.enter("htmlFlowData"),D(A))}function H(A){return A===45?(e.consume(A),S):D(A)}function Y(A){return A===47?(e.consume(A),o="",x):D(A)}function x(A){if(A===62){const Q=o.toLowerCase();return Db.includes(Q)?(e.consume(A),P):D(A)}return Ge(A)&&o.length<8?(e.consume(A),o+=String.fromCharCode(A),x):D(A)}function M(A){return A===93?(e.consume(A),S):D(A)}function S(A){return A===62?(e.consume(A),P):A===45&&a===2?(e.consume(A),S):D(A)}function P(A){return A===null||V(A)?(e.exit("htmlFlowData"),G(A)):(e.consume(A),P)}function G(A){return e.exit("htmlFlow"),t(A)}}function fL(e,t,n){const r=this;return a;function a(o){return V(o)?(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),i):n(o)}function i(o){return r.parser.lazy[r.now().line]?n(o):t(o)}}function gL(e,t,n){return r;function r(a){return e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),e.attempt(ei,t,n)}}const mL={name:"htmlText",tokenize:hL};function hL(e,t,n){const r=this;let a,i,o;return s;function s(S){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(S),l}function l(S){return S===33?(e.consume(S),u):S===47?(e.consume(S),_):S===63?(e.consume(S),m):Ge(S)?(e.consume(S),C):n(S)}function u(S){return S===45?(e.consume(S),d):S===91?(e.consume(S),i=0,h):Ge(S)?(e.consume(S),g):n(S)}function d(S){return S===45?(e.consume(S),p):n(S)}function c(S){return S===null?n(S):S===45?(e.consume(S),f):V(S)?(o=c,Y(S)):(e.consume(S),c)}function f(S){return S===45?(e.consume(S),p):c(S)}function p(S){return S===62?H(S):S===45?f(S):c(S)}function h(S){const P="CDATA[";return S===P.charCodeAt(i++)?(e.consume(S),i===P.length?y:h):n(S)}function y(S){return S===null?n(S):S===93?(e.consume(S),T):V(S)?(o=y,Y(S)):(e.consume(S),y)}function T(S){return S===93?(e.consume(S),b):y(S)}function b(S){return S===62?H(S):S===93?(e.consume(S),b):y(S)}function g(S){return S===null||S===62?H(S):V(S)?(o=g,Y(S)):(e.consume(S),g)}function m(S){return S===null?n(S):S===63?(e.consume(S),v):V(S)?(o=m,Y(S)):(e.consume(S),m)}function v(S){return S===62?H(S):m(S)}function _(S){return Ge(S)?(e.consume(S),E):n(S)}function E(S){return S===45||Fe(S)?(e.consume(S),E):R(S)}function R(S){return V(S)?(o=R,Y(S)):ee(S)?(e.consume(S),R):H(S)}function C(S){return S===45||Fe(S)?(e.consume(S),C):S===47||S===62||le(S)?N(S):n(S)}function N(S){return S===47?(e.consume(S),H):S===58||S===95||Ge(S)?(e.consume(S),k):V(S)?(o=N,Y(S)):ee(S)?(e.consume(S),N):H(S)}function k(S){return S===45||S===46||S===58||S===95||Fe(S)?(e.consume(S),k):I(S)}function I(S){return S===61?(e.consume(S),D):V(S)?(o=I,Y(S)):ee(S)?(e.consume(S),I):N(S)}function D(S){return S===null||S===60||S===61||S===62||S===96?n(S):S===34||S===39?(e.consume(S),a=S,q):V(S)?(o=D,Y(S)):ee(S)?(e.consume(S),D):(e.consume(S),$)}function q(S){return S===a?(e.consume(S),a=void 0,z):S===null?n(S):V(S)?(o=q,Y(S)):(e.consume(S),q)}function $(S){return S===null||S===34||S===39||S===60||S===61||S===96?n(S):S===47||S===62||le(S)?N(S):(e.consume(S),$)}function z(S){return S===47||S===62||le(S)?N(S):n(S)}function H(S){return S===62?(e.consume(S),e.exit("htmlTextData"),e.exit("htmlText"),t):n(S)}function Y(S){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(S),e.exit("lineEnding"),x}function x(S){return ee(S)?re(e,M,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(S):M(S)}function M(S){return e.enter("htmlTextData"),o(S)}}const gm={name:"labelEnd",resolveAll:SL,resolveTo:vL,tokenize:kL},bL={tokenize:wL},yL={tokenize:_L},EL={tokenize:TL};function SL(e){let t=-1;const n=[];for(;++t=3&&(u===null||V(u))?(e.exit("thematicBreak"),t(u)):n(u)}function l(u){return u===a?(e.consume(u),r++,l):(e.exit("thematicBreakSequence"),ee(u)?re(e,s,"whitespace")(u):s(u))}}const Ye={continuation:{tokenize:ML},exit:PL,name:"list",tokenize:DL},OL={partial:!0,tokenize:UL},LL={partial:!0,tokenize:FL};function DL(e,t,n){const r=this,a=r.events[r.events.length-1];let i=a&&a[1].type==="linePrefix"?a[2].sliceSerialize(a[1],!0).length:0,o=0;return s;function s(p){const h=r.containerState.type||(p===42||p===43||p===45?"listUnordered":"listOrdered");if(h==="listUnordered"?!r.containerState.marker||p===r.containerState.marker:Xf(p)){if(r.containerState.type||(r.containerState.type=h,e.enter(h,{_container:!0})),h==="listUnordered")return e.enter("listItemPrefix"),p===42||p===45?e.check(Hi,n,u)(p):u(p);if(!r.interrupt||p===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),l(p)}return n(p)}function l(p){return Xf(p)&&++o<10?(e.consume(p),l):(!r.interrupt||o<2)&&(r.containerState.marker?p===r.containerState.marker:p===41||p===46)?(e.exit("listItemValue"),u(p)):n(p)}function u(p){return e.enter("listItemMarker"),e.consume(p),e.exit("listItemMarker"),r.containerState.marker=r.containerState.marker||p,e.check(ei,r.interrupt?n:d,e.attempt(OL,f,c))}function d(p){return r.containerState.initialBlankLine=!0,i++,f(p)}function c(p){return ee(p)?(e.enter("listItemPrefixWhitespace"),e.consume(p),e.exit("listItemPrefixWhitespace"),f):n(p)}function f(p){return r.containerState.size=i+r.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(p)}}function ML(e,t,n){const r=this;return r.containerState._closeFlow=void 0,e.check(ei,a,i);function a(s){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,re(e,t,"listItemIndent",r.containerState.size+1)(s)}function i(s){return r.containerState.furtherBlankLines||!ee(s)?(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,o(s)):(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(LL,t,o)(s))}function o(s){return r.containerState._closeFlow=!0,r.interrupt=void 0,re(e,e.attempt(Ye,t,n),"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(s)}}function FL(e,t,n){const r=this;return re(e,a,"listItemIndent",r.containerState.size+1);function a(i){const o=r.events[r.events.length-1];return o&&o[1].type==="listItemIndent"&&o[2].sliceSerialize(o[1],!0).length===r.containerState.size?t(i):n(i)}}function PL(e){e.exit(this.containerState.type)}function UL(e,t,n){const r=this;return re(e,a,"listItemPrefixWhitespace",r.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function a(i){const o=r.events[r.events.length-1];return!ee(i)&&o&&o[1].type==="listItemPrefixWhitespace"?t(i):n(i)}}const Mb={name:"setextUnderline",resolveTo:BL,tokenize:$L};function BL(e,t){let n=e.length,r,a,i;for(;n--;)if(e[n][0]==="enter"){if(e[n][1].type==="content"){r=n;break}e[n][1].type==="paragraph"&&(a=n)}else e[n][1].type==="content"&&e.splice(n,1),!i&&e[n][1].type==="definition"&&(i=n);const o={type:"setextHeading",start:{...e[r][1].start},end:{...e[e.length-1][1].end}};return e[a][1].type="setextHeadingText",i?(e.splice(a,0,["enter",o,t]),e.splice(i+1,0,["exit",e[r][1],t]),e[r][1].end={...e[i][1].end}):e[r][1]=o,e.push(["exit",o,t]),e}function $L(e,t,n){const r=this;let a;return i;function i(u){let d=r.events.length,c;for(;d--;)if(r.events[d][1].type!=="lineEnding"&&r.events[d][1].type!=="linePrefix"&&r.events[d][1].type!=="content"){c=r.events[d][1].type==="paragraph";break}return!r.parser.lazy[r.now().line]&&(r.interrupt||c)?(e.enter("setextHeadingLine"),a=u,o(u)):n(u)}function o(u){return e.enter("setextHeadingLineSequence"),s(u)}function s(u){return u===a?(e.consume(u),s):(e.exit("setextHeadingLineSequence"),ee(u)?re(e,l,"lineSuffix")(u):l(u))}function l(u){return u===null||V(u)?(e.exit("setextHeadingLine"),t(u)):n(u)}}const zL={tokenize:GL};function GL(e){const t=this,n=e.attempt(ei,r,e.attempt(this.parser.constructs.flowInitial,a,re(e,e.attempt(this.parser.constructs.flow,a,e.attempt(W1,a)),"linePrefix")));return n;function r(i){if(i===null){e.consume(i);return}return e.enter("lineEndingBlank"),e.consume(i),e.exit("lineEndingBlank"),t.currentConstruct=void 0,n}function a(i){if(i===null){e.consume(i);return}return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),t.currentConstruct=void 0,n}}const qL={resolveAll:LA()},jL=OA("string"),HL=OA("text");function OA(e){return{resolveAll:LA(e==="text"?VL:void 0),tokenize:t};function t(n){const r=this,a=this.parser.constructs[e],i=n.attempt(a,o,s);return o;function o(d){return u(d)?i(d):s(d)}function s(d){if(d===null){n.consume(d);return}return n.enter("data"),n.consume(d),l}function l(d){return u(d)?(n.exit("data"),i(d)):(n.consume(d),l)}function u(d){if(d===null)return!0;const c=a[d];let f=-1;if(c)for(;++f-1){const s=o[0];typeof s=="string"?o[0]=s.slice(r):o.shift()}i>0&&o.push(e[a].slice(0,i))}return o}function iD(e,t){let n=-1;const r=[];let a;for(;++n0){const wt=K.tokenStack[K.tokenStack.length-1];(wt[1]||Pb).call(K,void 0,wt[0])}for(B.position={start:un(O.length>0?O[0][1].start:{line:1,column:1,offset:0}),end:un(O.length>0?O[O.length-2][1].end:{line:1,column:1,offset:0})},oe=-1;++oe0&&(r.className=["language-"+a[0]]);let i={type:"element",tagName:"code",properties:r,children:[{type:"text",value:n}]};return t.meta&&(i.data={meta:t.meta}),e.patch(t,i),i=e.applyData(t,i),i={type:"element",tagName:"pre",properties:{},children:[i]},e.patch(t,i),i}function ED(e,t){const n={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function SD(e,t){const n={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function vD(e,t){const n=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",r=String(t.identifier).toUpperCase(),a=Gr(r.toLowerCase()),i=e.footnoteOrder.indexOf(r);let o,s=e.footnoteCounts.get(r);s===void 0?(s=0,e.footnoteOrder.push(r),o=e.footnoteOrder.length):o=i+1,s+=1,e.footnoteCounts.set(r,s);const l={type:"element",tagName:"a",properties:{href:"#"+n+"fn-"+a,id:n+"fnref-"+a+(s>1?"-"+s:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(o)}]};e.patch(t,l);const u={type:"element",tagName:"sup",properties:{},children:[l]};return e.patch(t,u),e.applyData(t,u)}function kD(e,t){const n={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function wD(e,t){if(e.options.allowDangerousHtml){const n={type:"raw",value:t.value};return e.patch(t,n),e.applyData(t,n)}}function FA(e,t){const n=t.referenceType;let r="]";if(n==="collapsed"?r+="[]":n==="full"&&(r+="["+(t.label||t.identifier)+"]"),t.type==="imageReference")return[{type:"text",value:"!["+t.alt+r}];const a=e.all(t),i=a[0];i&&i.type==="text"?i.value="["+i.value:a.unshift({type:"text",value:"["});const o=a[a.length-1];return o&&o.type==="text"?o.value+=r:a.push({type:"text",value:r}),a}function _D(e,t){const n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return FA(e,t);const a={src:Gr(r.url||""),alt:t.alt};r.title!==null&&r.title!==void 0&&(a.title=r.title);const i={type:"element",tagName:"img",properties:a,children:[]};return e.patch(t,i),e.applyData(t,i)}function TD(e,t){const n={src:Gr(t.url)};t.alt!==null&&t.alt!==void 0&&(n.alt=t.alt),t.title!==null&&t.title!==void 0&&(n.title=t.title);const r={type:"element",tagName:"img",properties:n,children:[]};return e.patch(t,r),e.applyData(t,r)}function AD(e,t){const n={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,n);const r={type:"element",tagName:"code",properties:{},children:[n]};return e.patch(t,r),e.applyData(t,r)}function RD(e,t){const n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return FA(e,t);const a={href:Gr(r.url||"")};r.title!==null&&r.title!==void 0&&(a.title=r.title);const i={type:"element",tagName:"a",properties:a,children:e.all(t)};return e.patch(t,i),e.applyData(t,i)}function ID(e,t){const n={href:Gr(t.url)};t.title!==null&&t.title!==void 0&&(n.title=t.title);const r={type:"element",tagName:"a",properties:n,children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function CD(e,t,n){const r=e.all(t),a=n?ND(n):PA(t),i={},o=[];if(typeof t.checked=="boolean"){const d=r[0];let c;d&&d.type==="element"&&d.tagName==="p"?c=d:(c={type:"element",tagName:"p",properties:{},children:[]},r.unshift(c)),c.children.length>0&&c.children.unshift({type:"text",value:" "}),c.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),i.className=["task-list-item"]}let s=-1;for(;++s1}function xD(e,t){const n={},r=e.all(t);let a=-1;for(typeof t.start=="number"&&t.start!==1&&(n.start=t.start);++a0){const o={type:"element",tagName:"tbody",properties:{},children:e.wrap(n,!0)},s=lm(t.children[1]),l=hA(t.children[t.children.length-1]);s&&l&&(o.position={start:s,end:l}),a.push(o)}const i={type:"element",tagName:"table",properties:{},children:e.wrap(a,!0)};return e.patch(t,i),e.applyData(t,i)}function FD(e,t,n){const r=n?n.children:void 0,i=(r?r.indexOf(t):1)===0?"th":"td",o=n&&n.type==="table"?n.align:void 0,s=o?o.length:t.children.length;let l=-1;const u=[];for(;++l0,!0),r[0]),a=r.index+r[0].length,r=n.exec(t);return i.push($b(t.slice(a),a>0,!1)),i.join("")}function $b(e,t,n){let r=0,a=e.length;if(t){let i=e.codePointAt(r);for(;i===Ub||i===Bb;)r++,i=e.codePointAt(r)}if(n){let i=e.codePointAt(a-1);for(;i===Ub||i===Bb;)a--,i=e.codePointAt(a-1)}return a>r?e.slice(r,a):""}function BD(e,t){const n={type:"text",value:UD(String(t.value))};return e.patch(t,n),e.applyData(t,n)}function $D(e,t){const n={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(t,n),e.applyData(t,n)}const zD={blockquote:hD,break:bD,code:yD,delete:ED,emphasis:SD,footnoteReference:vD,heading:kD,html:wD,imageReference:_D,image:TD,inlineCode:AD,linkReference:RD,link:ID,listItem:CD,list:xD,paragraph:OD,root:LD,strong:DD,table:MD,tableCell:PD,tableRow:FD,text:BD,thematicBreak:$D,toml:Ai,yaml:Ai,definition:Ai,footnoteDefinition:Ai};function Ai(){}const UA=-1,Vo=0,Aa=1,ko=2,mm=3,hm=4,bm=5,ym=6,BA=7,$A=8,zb=typeof self=="object"?self:globalThis,GD=(e,t)=>{const n=(a,i)=>(e.set(i,a),a),r=a=>{if(e.has(a))return e.get(a);const[i,o]=t[a];switch(i){case Vo:case UA:return n(o,a);case Aa:{const s=n([],a);for(const l of o)s.push(r(l));return s}case ko:{const s=n({},a);for(const[l,u]of o)s[r(l)]=r(u);return s}case mm:return n(new Date(o),a);case hm:{const{source:s,flags:l}=o;return n(new RegExp(s,l),a)}case bm:{const s=n(new Map,a);for(const[l,u]of o)s.set(r(l),r(u));return s}case ym:{const s=n(new Set,a);for(const l of o)s.add(r(l));return s}case BA:{const{name:s,message:l}=o;return n(new zb[s](l),a)}case $A:return n(BigInt(o),a);case"BigInt":return n(Object(BigInt(o)),a);case"ArrayBuffer":return n(new Uint8Array(o).buffer,o);case"DataView":{const{buffer:s}=new Uint8Array(o);return n(new DataView(s),o)}}return n(new zb[i](o),a)};return r},Gb=e=>GD(new Map,e)(0),ir="",{toString:qD}={},{keys:jD}=Object,ia=e=>{const t=typeof e;if(t!=="object"||!e)return[Vo,t];const n=qD.call(e).slice(8,-1);switch(n){case"Array":return[Aa,ir];case"Object":return[ko,ir];case"Date":return[mm,ir];case"RegExp":return[hm,ir];case"Map":return[bm,ir];case"Set":return[ym,ir];case"DataView":return[Aa,n]}return n.includes("Array")?[Aa,n]:n.includes("Error")?[BA,n]:[ko,n]},Ri=([e,t])=>e===Vo&&(t==="function"||t==="symbol"),HD=(e,t,n,r)=>{const a=(o,s)=>{const l=r.push(o)-1;return n.set(s,l),l},i=o=>{if(n.has(o))return n.get(o);let[s,l]=ia(o);switch(s){case Vo:{let d=o;switch(l){case"bigint":s=$A,d=o.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+l);d=null;break;case"undefined":return a([UA],o)}return a([s,d],o)}case Aa:{if(l){let f=o;return l==="DataView"?f=new Uint8Array(o.buffer):l==="ArrayBuffer"&&(f=new Uint8Array(o)),a([l,[...f]],o)}const d=[],c=a([s,d],o);for(const f of o)d.push(i(f));return c}case ko:{if(l)switch(l){case"BigInt":return a([l,o.toString()],o);case"Boolean":case"Number":case"String":return a([l,o.valueOf()],o)}if(t&&"toJSON"in o)return i(o.toJSON());const d=[],c=a([s,d],o);for(const f of jD(o))(e||!Ri(ia(o[f])))&&d.push([i(f),i(o[f])]);return c}case mm:return a([s,o.toISOString()],o);case hm:{const{source:d,flags:c}=o;return a([s,{source:d,flags:c}],o)}case bm:{const d=[],c=a([s,d],o);for(const[f,p]of o)(e||!(Ri(ia(f))||Ri(ia(p))))&&d.push([i(f),i(p)]);return c}case ym:{const d=[],c=a([s,d],o);for(const f of o)(e||!Ri(ia(f)))&&d.push(i(f));return c}}const{message:u}=o;return a([s,{name:l,message:u}],o)};return i},qb=(e,{json:t,lossy:n}={})=>{const r=[];return HD(!(t||n),!!t,new Map,r)(e),r},wo=typeof structuredClone=="function"?(e,t)=>t&&("json"in t||"lossy"in t)?Gb(qb(e,t)):structuredClone(e):(e,t)=>Gb(qb(e,t));function VD(e,t){const n=[{type:"text",value:"↩"}];return t>1&&n.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(t)}]}),n}function WD(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")}function YD(e){const t=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",n=e.options.footnoteBackContent||VD,r=e.options.footnoteBackLabel||WD,a=e.options.footnoteLabel||"Footnotes",i=e.options.footnoteLabelTagName||"h2",o=e.options.footnoteLabelProperties||{className:["sr-only"]},s=[];let l=-1;for(;++l0&&h.push({type:"text",value:" "});let g=typeof n=="string"?n:n(l,p);typeof g=="string"&&(g={type:"text",value:g}),h.push({type:"element",tagName:"a",properties:{href:"#"+t+"fnref-"+f+(p>1?"-"+p:""),dataFootnoteBackref:"",ariaLabel:typeof r=="string"?r:r(l,p),className:["data-footnote-backref"]},children:Array.isArray(g)?g:[g]})}const T=d[d.length-1];if(T&&T.type==="element"&&T.tagName==="p"){const g=T.children[T.children.length-1];g&&g.type==="text"?g.value+=" ":T.children.push({type:"text",value:" "}),T.children.push(...h)}else d.push(...h);const b={type:"element",tagName:"li",properties:{id:t+"fn-"+f},children:e.wrap(d,!0)};e.patch(u,b),s.push(b)}if(s.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:i,properties:{...wo(o),id:"footnote-label"},children:[{type:"text",value:a}]},{type:"text",value:` -`},{type:"element",tagName:"ol",properties:{},children:e.wrap(s,!0)},{type:"text",value:` -`}]}}const Wo=function(e){if(e==null)return QD;if(typeof e=="function")return Yo(e);if(typeof e=="object")return Array.isArray(e)?KD(e):XD(e);if(typeof e=="string")return ZD(e);throw new Error("Expected function, string, or object as test")};function KD(e){const t=[];let n=-1;for(;++n":""))+")"})}return f;function f(){let p=zA,h,y,T;if((!t||i(l,u,d[d.length-1]||void 0))&&(p=n0(n(l,d)),p[0]===Qf))return p;if("children"in l&&l.children){const b=l;if(b.children&&p[0]!==t0)for(y=(r?b.children.length:-1)+o,T=d.concat(b);y>-1&&y0&&n.push({type:"text",value:` -`}),n}function jb(e){let t=0,n=e.charCodeAt(t);for(;n===9||n===32;)t++,n=e.charCodeAt(t);return e.slice(t)}function Hb(e,t){const n=a0(e,t),r=n.one(e,void 0),a=YD(n),i=Array.isArray(r)?{type:"root",children:r}:r||{type:"root",children:[]};return a&&i.children.push({type:"text",value:` -`},a),i}function u0(e,t){return e&&"run"in e?async function(n,r){const a=Hb(n,{file:r,...t});await e.run(a,r)}:function(n,r){return Hb(n,{file:r,...e||t})}}function Vb(e){if(e)throw e}var Vi=Object.prototype.hasOwnProperty,qA=Object.prototype.toString,Wb=Object.defineProperty,Yb=Object.getOwnPropertyDescriptor,Kb=function(t){return typeof Array.isArray=="function"?Array.isArray(t):qA.call(t)==="[object Array]"},Xb=function(t){if(!t||qA.call(t)!=="[object Object]")return!1;var n=Vi.call(t,"constructor"),r=t.constructor&&t.constructor.prototype&&Vi.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!n&&!r)return!1;var a;for(a in t);return typeof a>"u"||Vi.call(t,a)},Zb=function(t,n){Wb&&n.name==="__proto__"?Wb(t,n.name,{enumerable:!0,configurable:!0,value:n.newValue,writable:!0}):t[n.name]=n.newValue},Qb=function(t,n){if(n==="__proto__")if(Vi.call(t,n)){if(Yb)return Yb(t,n).value}else return;return t[n]},c0=function e(){var t,n,r,a,i,o,s=arguments[0],l=1,u=arguments.length,d=!1;for(typeof s=="boolean"&&(d=s,s=arguments[1]||{},l=2),(s==null||typeof s!="object"&&typeof s!="function")&&(s={});lo.length;let l;s&&o.push(a);try{l=e.apply(this,o)}catch(u){const d=u;if(s&&n)throw d;return a(d)}s||(l&&l.then&&typeof l.then=="function"?l.then(i,a):l instanceof Error?a(l):i(l))}function a(o,...s){n||(n=!0,t(o,...s))}function i(o){a(null,o)}}const Mt={basename:f0,dirname:g0,extname:m0,join:h0,sep:"/"};function f0(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');ti(e);let n=0,r=-1,a=e.length,i;if(t===void 0||t.length===0||t.length>e.length){for(;a--;)if(e.codePointAt(a)===47){if(i){n=a+1;break}}else r<0&&(i=!0,r=a+1);return r<0?"":e.slice(n,r)}if(t===e)return"";let o=-1,s=t.length-1;for(;a--;)if(e.codePointAt(a)===47){if(i){n=a+1;break}}else o<0&&(i=!0,o=a+1),s>-1&&(e.codePointAt(a)===t.codePointAt(s--)?s<0&&(r=a):(s=-1,r=o));return n===r?r=o:r<0&&(r=e.length),e.slice(n,r)}function g0(e){if(ti(e),e.length===0)return".";let t=-1,n=e.length,r;for(;--n;)if(e.codePointAt(n)===47){if(r){t=n;break}}else r||(r=!0);return t<0?e.codePointAt(0)===47?"/":".":t===1&&e.codePointAt(0)===47?"//":e.slice(0,t)}function m0(e){ti(e);let t=e.length,n=-1,r=0,a=-1,i=0,o;for(;t--;){const s=e.codePointAt(t);if(s===47){if(o){r=t+1;break}continue}n<0&&(o=!0,n=t+1),s===46?a<0?a=t:i!==1&&(i=1):a>-1&&(i=-1)}return a<0||n<0||i===0||i===1&&a===n-1&&a===r+1?"":e.slice(a,n)}function h0(...e){let t=-1,n;for(;++t0&&e.codePointAt(e.length-1)===47&&(n+="/"),t?"/"+n:n}function y0(e,t){let n="",r=0,a=-1,i=0,o=-1,s,l;for(;++o<=e.length;){if(o2){if(l=n.lastIndexOf("/"),l!==n.length-1){l<0?(n="",r=0):(n=n.slice(0,l),r=n.length-1-n.lastIndexOf("/")),a=o,i=0;continue}}else if(n.length>0){n="",r=0,a=o,i=0;continue}}t&&(n=n.length>0?n+"/..":"..",r=2)}else n.length>0?n+="/"+e.slice(a+1,o):n=e.slice(a+1,o),r=o-a-1;a=o,i=0}else s===46&&i>-1?i++:i=-1}return n}function ti(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const E0={cwd:S0};function S0(){return"/"}function tg(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function v0(e){if(typeof e=="string")e=new URL(e);else if(!tg(e)){const t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if(e.protocol!=="file:"){const t=new TypeError("The URL must be of scheme file");throw t.code="ERR_INVALID_URL_SCHEME",t}return k0(e)}function k0(e){if(e.hostname!==""){const r=new TypeError('File URL host must be "localhost" or empty on darwin');throw r.code="ERR_INVALID_FILE_URL_HOST",r}const t=e.pathname;let n=-1;for(;++n0){let[p,...h]=d;const y=r[f][1];eg(y)&&eg(p)&&(p=Os(!0,y,p)),r[f]=[u,p,...h]}}}}const A0=new Sm().freeze();function Fs(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function Ps(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function Us(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function ey(e){if(!eg(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function ty(e,t,n){if(!n)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function Ii(e){return R0(e)?e:new jA(e)}function R0(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function I0(e){return typeof e=="string"||C0(e)}function C0(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const N0="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",ny=[],ry={allowDangerousHtml:!0},x0=/^(https?|ircs?|mailto|xmpp)$/i,O0=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function L0(e){const t=D0(e),n=M0(e);return F0(t.runSync(t.parse(n),n),e)}function D0(e){const t=e.rehypePlugins||ny,n=e.remarkPlugins||ny,r=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...ry}:ry;return A0().use(mD).use(n).use(u0,r).use(t)}function M0(e){const t=e.children||"",n=new jA;return typeof t=="string"&&(n.value=t),n}function F0(e,t){const n=t.allowedElements,r=t.allowElement,a=t.components,i=t.disallowedElements,o=t.skipHtml,s=t.unwrapDisallowed,l=t.urlTransform||P0;for(const d of O0)Object.hasOwn(t,d.from)&&(""+d.from+(d.to?"use `"+d.to+"` instead":"remove it")+N0+d.id,void 0);return t.className&&(e={type:"element",tagName:"div",properties:{className:t.className},children:e.type==="root"?e.children:[e]}),Em(e,u),QO(e,{Fragment:L.Fragment,components:a,ignoreInvalidStyle:!0,jsx:L.jsx,jsxs:L.jsxs,passKeys:!0,passNode:!0});function u(d,c,f){if(d.type==="raw"&&f&&typeof c=="number")return o?f.children.splice(c,1):f.children[c]={type:"text",value:d.value},c;if(d.type==="element"){let p;for(p in Cs)if(Object.hasOwn(Cs,p)&&Object.hasOwn(d.properties,p)){const h=d.properties[p],y=Cs[p];(y===null||y.includes(d.tagName))&&(d.properties[p]=l(String(h||""),p,d))}}if(d.type==="element"){let p=n?!n.includes(d.tagName):i?i.includes(d.tagName):!1;if(!p&&r&&typeof c=="number"&&(p=!r(d,c,f)),p&&f&&typeof c=="number")return s&&d.children?f.children.splice(c,1,...d.children):f.children.splice(c,1),c}}}function P0(e){const t=e.indexOf(":"),n=e.indexOf("?"),r=e.indexOf("#"),a=e.indexOf("/");return t===-1||a!==-1&&t>a||n!==-1&&t>n||r!==-1&&t>r||x0.test(e.slice(0,t))?e:""}function ay(e,t){const n=String(e);if(typeof t!="string")throw new TypeError("Expected character");let r=0,a=n.indexOf(t);for(;a!==-1;)r++,a=n.indexOf(t,a+t.length);return r}function U0(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function B0(e,t,n){const a=Wo((n||{}).ignore||[]),i=$0(t);let o=-1;for(;++o0?{type:"text",value:E}:void 0),E===!1?f.lastIndex=v+1:(h!==v&&g.push({type:"text",value:u.value.slice(h,v)}),Array.isArray(E)?g.push(...E):E&&g.push(E),h=v+m[0].length,b=!0),!f.global)break;m=f.exec(u.value)}return b?(h?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let n=t[0],r=n.indexOf(")");const a=ay(e,"(");let i=ay(e,")");for(;r!==-1&&a>i;)e+=n.slice(0,r+1),n=n.slice(r+1),r=n.indexOf(")"),i++;return[e,n]}function HA(e,t){const n=e.input.charCodeAt(e.index-1);return(e.index===0||Xn(n)||jo(n))&&(!t||n!==47)}VA.peek=uM;function tM(){this.buffer()}function nM(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function rM(){this.buffer()}function aM(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function iM(e){const t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=xt(this.sliceSerialize(e)).toLowerCase(),n.label=t}function oM(e){this.exit(e)}function sM(e){const t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=xt(this.sliceSerialize(e)).toLowerCase(),n.label=t}function lM(e){this.exit(e)}function uM(){return"["}function VA(e,t,n,r){const a=n.createTracker(r);let i=a.move("[^");const o=n.enter("footnoteReference"),s=n.enter("reference");return i+=a.move(n.safe(n.associationId(e),{after:"]",before:i})),s(),o(),i+=a.move("]"),i}function cM(){return{enter:{gfmFootnoteCallString:tM,gfmFootnoteCall:nM,gfmFootnoteDefinitionLabelString:rM,gfmFootnoteDefinition:aM},exit:{gfmFootnoteCallString:iM,gfmFootnoteCall:oM,gfmFootnoteDefinitionLabelString:sM,gfmFootnoteDefinition:lM}}}function dM(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:n,footnoteReference:VA},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function n(r,a,i,o){const s=i.createTracker(o);let l=s.move("[^");const u=i.enter("footnoteDefinition"),d=i.enter("label");return l+=s.move(i.safe(i.associationId(r),{before:l,after:"]"})),d(),l+=s.move("]:"),r.children&&r.children.length>0&&(s.shift(4),l+=s.move((t?` -`:" ")+i.indentLines(i.containerFlow(r,s.current()),t?WA:pM))),u(),l}}function pM(e,t,n){return t===0?e:WA(e,t,n)}function WA(e,t,n){return(n?"":" ")+e}const fM=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];YA.peek=yM;function gM(){return{canContainEols:["delete"],enter:{strikethrough:hM},exit:{strikethrough:bM}}}function mM(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:fM}],handlers:{delete:YA}}}function hM(e){this.enter({type:"delete",children:[]},e)}function bM(e){this.exit(e)}function YA(e,t,n,r){const a=n.createTracker(r),i=n.enter("strikethrough");let o=a.move("~~");return o+=n.containerPhrasing(e,{...a.current(),before:o,after:"~"}),o+=a.move("~~"),i(),o}function yM(){return"~"}function EM(e){return e.length}function SM(e,t){const n=t||{},r=(n.align||[]).concat(),a=n.stringLength||EM,i=[],o=[],s=[],l=[];let u=0,d=-1;for(;++du&&(u=e[d].length);++bl[b])&&(l[b]=m)}y.push(g)}o[d]=y,s[d]=T}let c=-1;if(typeof r=="object"&&"length"in r)for(;++cl[c]&&(l[c]=g),p[c]=g),f[c]=m}o.splice(1,0,f),s.splice(1,0,p),d=-1;const h=[];for(;++d "),i.shift(2);const o=n.indentLines(n.containerFlow(e,i.current()),wM);return a(),o}function wM(e,t,n){return">"+(n?"":" ")+e}function _M(e,t){return oy(e,t.inConstruct,!0)&&!oy(e,t.notInConstruct,!1)}function oy(e,t,n){if(typeof t=="string"&&(t=[t]),!t||t.length===0)return n;let r=-1;for(;++ro&&(o=i):i=1,a=r+t.length,r=n.indexOf(t,a);return o}function AM(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function RM(e){const t=e.options.fence||"`";if(t!=="`"&&t!=="~")throw new Error("Cannot serialize code with `"+t+"` for `options.fence`, expected `` ` `` or `~`");return t}function IM(e,t,n,r){const a=RM(n),i=e.value||"",o=a==="`"?"GraveAccent":"Tilde";if(AM(e,n)){const c=n.enter("codeIndented"),f=n.indentLines(i,CM);return c(),f}const s=n.createTracker(r),l=a.repeat(Math.max(TM(i,a)+1,3)),u=n.enter("codeFenced");let d=s.move(l);if(e.lang){const c=n.enter(`codeFencedLang${o}`);d+=s.move(n.safe(e.lang,{before:d,after:" ",encode:["`"],...s.current()})),c()}if(e.lang&&e.meta){const c=n.enter(`codeFencedMeta${o}`);d+=s.move(" "),d+=s.move(n.safe(e.meta,{before:d,after:` -`,encode:["`"],...s.current()})),c()}return d+=s.move(` -`),i&&(d+=s.move(i+` -`)),d+=s.move(l),u(),d}function CM(e,t,n){return(n?"":" ")+e}function vm(e){const t=e.options.quote||'"';if(t!=='"'&&t!=="'")throw new Error("Cannot serialize title with `"+t+"` for `options.quote`, expected `\"`, or `'`");return t}function NM(e,t,n,r){const a=vm(n),i=a==='"'?"Quote":"Apostrophe",o=n.enter("definition");let s=n.enter("label");const l=n.createTracker(r);let u=l.move("[");return u+=l.move(n.safe(n.associationId(e),{before:u,after:"]",...l.current()})),u+=l.move("]: "),s(),!e.url||/[\0- \u007F]/.test(e.url)?(s=n.enter("destinationLiteral"),u+=l.move("<"),u+=l.move(n.safe(e.url,{before:u,after:">",...l.current()})),u+=l.move(">")):(s=n.enter("destinationRaw"),u+=l.move(n.safe(e.url,{before:u,after:e.title?" ":` -`,...l.current()}))),s(),e.title&&(s=n.enter(`title${i}`),u+=l.move(" "+a),u+=l.move(n.safe(e.title,{before:u,after:a,...l.current()})),u+=l.move(a),s()),o(),u}function xM(e){const t=e.options.emphasis||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize emphasis with `"+t+"` for `options.emphasis`, expected `*`, or `_`");return t}function Ha(e){return"&#x"+e.toString(16).toUpperCase()+";"}function _o(e,t,n){const r=Pr(e),a=Pr(t);return r===void 0?a===void 0?n==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:a===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:r===1?a===void 0?{inside:!1,outside:!1}:a===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:a===void 0?{inside:!1,outside:!1}:a===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}KA.peek=OM;function KA(e,t,n,r){const a=xM(n),i=n.enter("emphasis"),o=n.createTracker(r),s=o.move(a);let l=o.move(n.containerPhrasing(e,{after:a,before:s,...o.current()}));const u=l.charCodeAt(0),d=_o(r.before.charCodeAt(r.before.length-1),u,a);d.inside&&(l=Ha(u)+l.slice(1));const c=l.charCodeAt(l.length-1),f=_o(r.after.charCodeAt(0),c,a);f.inside&&(l=l.slice(0,-1)+Ha(c));const p=o.move(a);return i(),n.attentionEncodeSurroundingInfo={after:f.outside,before:d.outside},s+l+p}function OM(e,t,n){return n.options.emphasis||"*"}function LM(e,t){let n=!1;return Em(e,function(r){if("value"in r&&/\r?\n|\r/.test(r.value)||r.type==="break")return n=!0,Qf}),!!((!e.depth||e.depth<3)&&pm(e)&&(t.options.setext||n))}function DM(e,t,n,r){const a=Math.max(Math.min(6,e.depth||1),1),i=n.createTracker(r);if(LM(e,n)){const d=n.enter("headingSetext"),c=n.enter("phrasing"),f=n.containerPhrasing(e,{...i.current(),before:` -`,after:` -`});return c(),d(),f+` -`+(a===1?"=":"-").repeat(f.length-(Math.max(f.lastIndexOf("\r"),f.lastIndexOf(` -`))+1))}const o="#".repeat(a),s=n.enter("headingAtx"),l=n.enter("phrasing");i.move(o+" ");let u=n.containerPhrasing(e,{before:"# ",after:` -`,...i.current()});return/^[\t ]/.test(u)&&(u=Ha(u.charCodeAt(0))+u.slice(1)),u=u?o+" "+u:o,n.options.closeAtx&&(u+=" "+o),l(),s(),u}XA.peek=MM;function XA(e){return e.value||""}function MM(){return"<"}ZA.peek=FM;function ZA(e,t,n,r){const a=vm(n),i=a==='"'?"Quote":"Apostrophe",o=n.enter("image");let s=n.enter("label");const l=n.createTracker(r);let u=l.move("![");return u+=l.move(n.safe(e.alt,{before:u,after:"]",...l.current()})),u+=l.move("]("),s(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(s=n.enter("destinationLiteral"),u+=l.move("<"),u+=l.move(n.safe(e.url,{before:u,after:">",...l.current()})),u+=l.move(">")):(s=n.enter("destinationRaw"),u+=l.move(n.safe(e.url,{before:u,after:e.title?" ":")",...l.current()}))),s(),e.title&&(s=n.enter(`title${i}`),u+=l.move(" "+a),u+=l.move(n.safe(e.title,{before:u,after:a,...l.current()})),u+=l.move(a),s()),u+=l.move(")"),o(),u}function FM(){return"!"}QA.peek=PM;function QA(e,t,n,r){const a=e.referenceType,i=n.enter("imageReference");let o=n.enter("label");const s=n.createTracker(r);let l=s.move("![");const u=n.safe(e.alt,{before:l,after:"]",...s.current()});l+=s.move(u+"]["),o();const d=n.stack;n.stack=[],o=n.enter("reference");const c=n.safe(n.associationId(e),{before:l,after:"]",...s.current()});return o(),n.stack=d,i(),a==="full"||!u||u!==c?l+=s.move(c+"]"):a==="shortcut"?l=l.slice(0,-1):l+=s.move("]"),l}function PM(){return"!"}JA.peek=UM;function JA(e,t,n){let r=e.value||"",a="`",i=-1;for(;new RegExp("(^|[^`])"+a+"([^`]|$)").test(r);)a+="`";for(/[^ \r\n]/.test(r)&&(/^[ \r\n]/.test(r)&&/[ \r\n]$/.test(r)||/^`|`$/.test(r))&&(r=" "+r+" ");++i\u007F]/.test(e.url))}tR.peek=BM;function tR(e,t,n,r){const a=vm(n),i=a==='"'?"Quote":"Apostrophe",o=n.createTracker(r);let s,l;if(eR(e,n)){const d=n.stack;n.stack=[],s=n.enter("autolink");let c=o.move("<");return c+=o.move(n.containerPhrasing(e,{before:c,after:">",...o.current()})),c+=o.move(">"),s(),n.stack=d,c}s=n.enter("link"),l=n.enter("label");let u=o.move("[");return u+=o.move(n.containerPhrasing(e,{before:u,after:"](",...o.current()})),u+=o.move("]("),l(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(l=n.enter("destinationLiteral"),u+=o.move("<"),u+=o.move(n.safe(e.url,{before:u,after:">",...o.current()})),u+=o.move(">")):(l=n.enter("destinationRaw"),u+=o.move(n.safe(e.url,{before:u,after:e.title?" ":")",...o.current()}))),l(),e.title&&(l=n.enter(`title${i}`),u+=o.move(" "+a),u+=o.move(n.safe(e.title,{before:u,after:a,...o.current()})),u+=o.move(a),l()),u+=o.move(")"),s(),u}function BM(e,t,n){return eR(e,n)?"<":"["}nR.peek=$M;function nR(e,t,n,r){const a=e.referenceType,i=n.enter("linkReference");let o=n.enter("label");const s=n.createTracker(r);let l=s.move("[");const u=n.containerPhrasing(e,{before:l,after:"]",...s.current()});l+=s.move(u+"]["),o();const d=n.stack;n.stack=[],o=n.enter("reference");const c=n.safe(n.associationId(e),{before:l,after:"]",...s.current()});return o(),n.stack=d,i(),a==="full"||!u||u!==c?l+=s.move(c+"]"):a==="shortcut"?l=l.slice(0,-1):l+=s.move("]"),l}function $M(){return"["}function km(e){const t=e.options.bullet||"*";if(t!=="*"&&t!=="+"&&t!=="-")throw new Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function zM(e){const t=km(e),n=e.options.bulletOther;if(!n)return t==="*"?"-":"*";if(n!=="*"&&n!=="+"&&n!=="-")throw new Error("Cannot serialize items with `"+n+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(n===t)throw new Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+n+"`) to be different");return n}function GM(e){const t=e.options.bulletOrdered||".";if(t!=="."&&t!==")")throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}function rR(e){const t=e.options.rule||"*";if(t!=="*"&&t!=="-"&&t!=="_")throw new Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}function qM(e,t,n,r){const a=n.enter("list"),i=n.bulletCurrent;let o=e.ordered?GM(n):km(n);const s=e.ordered?o==="."?")":".":zM(n);let l=t&&n.bulletLastUsed?o===n.bulletLastUsed:!1;if(!e.ordered){const d=e.children?e.children[0]:void 0;if((o==="*"||o==="-")&&d&&(!d.children||!d.children[0])&&n.stack[n.stack.length-1]==="list"&&n.stack[n.stack.length-2]==="listItem"&&n.stack[n.stack.length-3]==="list"&&n.stack[n.stack.length-4]==="listItem"&&n.indexStack[n.indexStack.length-1]===0&&n.indexStack[n.indexStack.length-2]===0&&n.indexStack[n.indexStack.length-3]===0&&(l=!0),rR(n)===o&&d){let c=-1;for(;++c-1?t.start:1)+(n.options.incrementListMarker===!1?0:t.children.indexOf(e))+i);let o=i.length+1;(a==="tab"||a==="mixed"&&(t&&t.type==="list"&&t.spread||e.spread))&&(o=Math.ceil(o/4)*4);const s=n.createTracker(r);s.move(i+" ".repeat(o-i.length)),s.shift(o);const l=n.enter("listItem"),u=n.indentLines(n.containerFlow(e,s.current()),d);return l(),u;function d(c,f,p){return f?(p?"":" ".repeat(o))+c:(p?i:i+" ".repeat(o-i.length))+c}}function VM(e,t,n,r){const a=n.enter("paragraph"),i=n.enter("phrasing"),o=n.containerPhrasing(e,r);return i(),a(),o}const WM=Wo(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function YM(e,t,n,r){return(e.children.some(function(o){return WM(o)})?n.containerPhrasing:n.containerFlow).call(n,e,r)}function KM(e){const t=e.options.strong||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}aR.peek=XM;function aR(e,t,n,r){const a=KM(n),i=n.enter("strong"),o=n.createTracker(r),s=o.move(a+a);let l=o.move(n.containerPhrasing(e,{after:a,before:s,...o.current()}));const u=l.charCodeAt(0),d=_o(r.before.charCodeAt(r.before.length-1),u,a);d.inside&&(l=Ha(u)+l.slice(1));const c=l.charCodeAt(l.length-1),f=_o(r.after.charCodeAt(0),c,a);f.inside&&(l=l.slice(0,-1)+Ha(c));const p=o.move(a+a);return i(),n.attentionEncodeSurroundingInfo={after:f.outside,before:d.outside},s+l+p}function XM(e,t,n){return n.options.strong||"*"}function ZM(e,t,n,r){return n.safe(e.value,r)}function QM(e){const t=e.options.ruleRepetition||3;if(t<3)throw new Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}function JM(e,t,n){const r=(rR(n)+(n.options.ruleSpaces?" ":"")).repeat(QM(n));return n.options.ruleSpaces?r.slice(0,-1):r}const iR={blockquote:kM,break:sy,code:IM,definition:NM,emphasis:KA,hardBreak:sy,heading:DM,html:XA,image:ZA,imageReference:QA,inlineCode:JA,link:tR,linkReference:nR,list:qM,listItem:HM,paragraph:VM,root:YM,strong:aR,text:ZM,thematicBreak:JM};function eF(){return{enter:{table:tF,tableData:ly,tableHeader:ly,tableRow:rF},exit:{codeText:aF,table:nF,tableData:Gs,tableHeader:Gs,tableRow:Gs}}}function tF(e){const t=e._align;this.enter({type:"table",align:t.map(function(n){return n==="none"?null:n}),children:[]},e),this.data.inTable=!0}function nF(e){this.exit(e),this.data.inTable=void 0}function rF(e){this.enter({type:"tableRow",children:[]},e)}function Gs(e){this.exit(e)}function ly(e){this.enter({type:"tableCell",children:[]},e)}function aF(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,iF));const n=this.stack[this.stack.length-1];n.type,n.value=t,this.exit(e)}function iF(e,t){return t==="|"?t:e}function oF(e){const t=e||{},n=t.tableCellPadding,r=t.tablePipeAlign,a=t.stringLength,i=n?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:` -`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:f,table:o,tableCell:l,tableRow:s}};function o(p,h,y,T){return u(d(p,y,T),p.align)}function s(p,h,y,T){const b=c(p,y,T),g=u([b]);return g.slice(0,g.indexOf(` -`))}function l(p,h,y,T){const b=y.enter("tableCell"),g=y.enter("phrasing"),m=y.containerPhrasing(p,{...T,before:i,after:i});return g(),b(),m}function u(p,h){return SM(p,{align:h,alignDelimiters:r,padding:n,stringLength:a})}function d(p,h,y){const T=p.children;let b=-1;const g=[],m=h.enter("table");for(;++b0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}const _F={tokenize:OF,partial:!0};function TF(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:CF,continuation:{tokenize:NF},exit:xF}},text:{91:{name:"gfmFootnoteCall",tokenize:IF},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:AF,resolveTo:RF}}}}function AF(e,t,n){const r=this;let a=r.events.length;const i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let o;for(;a--;){const l=r.events[a][1];if(l.type==="labelImage"){o=l;break}if(l.type==="gfmFootnoteCall"||l.type==="labelLink"||l.type==="label"||l.type==="image"||l.type==="link")break}return s;function s(l){if(!o||!o._balanced)return n(l);const u=xt(r.sliceSerialize({start:o.end,end:r.now()}));return u.codePointAt(0)!==94||!i.includes(u.slice(1))?n(l):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(l),e.exit("gfmFootnoteCallLabelMarker"),t(l))}}function RF(e,t){let n=e.length;for(;n--;)if(e[n][1].type==="labelImage"&&e[n][0]==="enter"){e[n][1];break}e[n+1][1].type="data",e[n+3][1].type="gfmFootnoteCallLabelMarker";const r={type:"gfmFootnoteCall",start:Object.assign({},e[n+3][1].start),end:Object.assign({},e[e.length-1][1].end)},a={type:"gfmFootnoteCallMarker",start:Object.assign({},e[n+3][1].end),end:Object.assign({},e[n+3][1].end)};a.end.column++,a.end.offset++,a.end._bufferIndex++;const i={type:"gfmFootnoteCallString",start:Object.assign({},a.end),end:Object.assign({},e[e.length-1][1].start)},o={type:"chunkString",contentType:"string",start:Object.assign({},i.start),end:Object.assign({},i.end)},s=[e[n+1],e[n+2],["enter",r,t],e[n+3],e[n+4],["enter",a,t],["exit",a,t],["enter",i,t],["enter",o,t],["exit",o,t],["exit",i,t],e[e.length-2],e[e.length-1],["exit",r,t]];return e.splice(n,e.length-n+1,...s),e}function IF(e,t,n){const r=this,a=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let i=0,o;return s;function s(c){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(c),e.exit("gfmFootnoteCallLabelMarker"),l}function l(c){return c!==94?n(c):(e.enter("gfmFootnoteCallMarker"),e.consume(c),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",u)}function u(c){if(i>999||c===93&&!o||c===null||c===91||le(c))return n(c);if(c===93){e.exit("chunkString");const f=e.exit("gfmFootnoteCallString");return a.includes(xt(r.sliceSerialize(f)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(c),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):n(c)}return le(c)||(o=!0),i++,e.consume(c),c===92?d:u}function d(c){return c===91||c===92||c===93?(e.consume(c),i++,u):u(c)}}function CF(e,t,n){const r=this,a=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let i,o=0,s;return l;function l(h){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(h),e.exit("gfmFootnoteDefinitionLabelMarker"),u}function u(h){return h===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(h),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",d):n(h)}function d(h){if(o>999||h===93&&!s||h===null||h===91||le(h))return n(h);if(h===93){e.exit("chunkString");const y=e.exit("gfmFootnoteDefinitionLabelString");return i=xt(r.sliceSerialize(y)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(h),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),f}return le(h)||(s=!0),o++,e.consume(h),h===92?c:d}function c(h){return h===91||h===92||h===93?(e.consume(h),o++,d):d(h)}function f(h){return h===58?(e.enter("definitionMarker"),e.consume(h),e.exit("definitionMarker"),a.includes(i)||a.push(i),re(e,p,"gfmFootnoteDefinitionWhitespace")):n(h)}function p(h){return t(h)}}function NF(e,t,n){return e.check(ei,t,e.attempt(_F,t,n))}function xF(e){e.exit("gfmFootnoteDefinition")}function OF(e,t,n){const r=this;return re(e,a,"gfmFootnoteDefinitionIndent",5);function a(i){const o=r.events[r.events.length-1];return o&&o[1].type==="gfmFootnoteDefinitionIndent"&&o[2].sliceSerialize(o[1],!0).length===4?t(i):n(i)}}function LF(e){let n=(e||{}).singleTilde;const r={name:"strikethrough",tokenize:i,resolveAll:a};return n==null&&(n=!0),{text:{126:r},insideSpan:{null:[r]},attentionMarkers:{null:[126]}};function a(o,s){let l=-1;for(;++l1?l(h):(o.consume(h),c++,p);if(c<2&&!n)return l(h);const T=o.exit("strikethroughSequenceTemporary"),b=Pr(h);return T._open=!b||b===2&&!!y,T._close=!y||y===2&&!!b,s(h)}}}class DF{constructor(){this.map=[]}add(t,n,r){MF(this,t,n,r)}consume(t){if(this.map.sort(function(i,o){return i[0]-o[0]}),this.map.length===0)return;let n=this.map.length;const r=[];for(;n>0;)n-=1,r.push(t.slice(this.map[n][0]+this.map[n][1]),this.map[n][2]),t.length=this.map[n][0];r.push(t.slice()),t.length=0;let a=r.pop();for(;a;){for(const i of a)t.push(i);a=r.pop()}this.map.length=0}}function MF(e,t,n,r){let a=0;if(!(n===0&&r.length===0)){for(;a-1;){const $=r.events[I][1].type;if($==="lineEnding"||$==="linePrefix")I--;else break}const D=I>-1?r.events[I][1].type:null,q=D==="tableHead"||D==="tableRow"?E:l;return q===E&&r.parser.lazy[r.now().line]?n(k):q(k)}function l(k){return e.enter("tableHead"),e.enter("tableRow"),u(k)}function u(k){return k===124||(o=!0,i+=1),d(k)}function d(k){return k===null?n(k):V(k)?i>1?(i=0,r.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(k),e.exit("lineEnding"),p):n(k):ee(k)?re(e,d,"whitespace")(k):(i+=1,o&&(o=!1,a+=1),k===124?(e.enter("tableCellDivider"),e.consume(k),e.exit("tableCellDivider"),o=!0,d):(e.enter("data"),c(k)))}function c(k){return k===null||k===124||le(k)?(e.exit("data"),d(k)):(e.consume(k),k===92?f:c)}function f(k){return k===92||k===124?(e.consume(k),c):c(k)}function p(k){return r.interrupt=!1,r.parser.lazy[r.now().line]?n(k):(e.enter("tableDelimiterRow"),o=!1,ee(k)?re(e,h,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(k):h(k))}function h(k){return k===45||k===58?T(k):k===124?(o=!0,e.enter("tableCellDivider"),e.consume(k),e.exit("tableCellDivider"),y):_(k)}function y(k){return ee(k)?re(e,T,"whitespace")(k):T(k)}function T(k){return k===58?(i+=1,o=!0,e.enter("tableDelimiterMarker"),e.consume(k),e.exit("tableDelimiterMarker"),b):k===45?(i+=1,b(k)):k===null||V(k)?v(k):_(k)}function b(k){return k===45?(e.enter("tableDelimiterFiller"),g(k)):_(k)}function g(k){return k===45?(e.consume(k),g):k===58?(o=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(k),e.exit("tableDelimiterMarker"),m):(e.exit("tableDelimiterFiller"),m(k))}function m(k){return ee(k)?re(e,v,"whitespace")(k):v(k)}function v(k){return k===124?h(k):k===null||V(k)?!o||a!==i?_(k):(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(k)):_(k)}function _(k){return n(k)}function E(k){return e.enter("tableRow"),R(k)}function R(k){return k===124?(e.enter("tableCellDivider"),e.consume(k),e.exit("tableCellDivider"),R):k===null||V(k)?(e.exit("tableRow"),t(k)):ee(k)?re(e,R,"whitespace")(k):(e.enter("data"),C(k))}function C(k){return k===null||k===124||le(k)?(e.exit("data"),R(k)):(e.consume(k),k===92?N:C)}function N(k){return k===92||k===124?(e.consume(k),C):C(k)}}function BF(e,t){let n=-1,r=!0,a=0,i=[0,0,0,0],o=[0,0,0,0],s=!1,l=0,u,d,c;const f=new DF;for(;++nn[2]+1){const h=n[2]+1,y=n[3]-n[2]-1;e.add(h,y,[])}}e.add(n[3]+1,0,[["exit",c,t]])}return a!==void 0&&(i.end=Object.assign({},sr(t.events,a)),e.add(a,0,[["exit",i,t]]),i=void 0),i}function cy(e,t,n,r,a){const i=[],o=sr(t.events,n);a&&(a.end=Object.assign({},o),i.push(["exit",a,t])),r.end=Object.assign({},o),i.push(["exit",r,t]),e.add(n+1,0,i)}function sr(e,t){const n=e[t],r=n[0]==="enter"?"start":"end";return n[1][r]}const $F={name:"tasklistCheck",tokenize:GF};function zF(){return{text:{91:$F}}}function GF(e,t,n){const r=this;return a;function a(l){return r.previous!==null||!r._gfmTasklistFirstContentOfListItem?n(l):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(l),e.exit("taskListCheckMarker"),i)}function i(l){return le(l)?(e.enter("taskListCheckValueUnchecked"),e.consume(l),e.exit("taskListCheckValueUnchecked"),o):l===88||l===120?(e.enter("taskListCheckValueChecked"),e.consume(l),e.exit("taskListCheckValueChecked"),o):n(l)}function o(l){return l===93?(e.enter("taskListCheckMarker"),e.consume(l),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),s):n(l)}function s(l){return V(l)?t(l):ee(l)?e.check({tokenize:qF},t,n)(l):n(l)}}function qF(e,t,n){return re(e,r,"whitespace");function r(a){return a===null?n(a):t(a)}}function jF(e){return wA([mF(),TF(),LF(e),PF(),zF()])}const HF={};function VF(e){const t=this,n=e||HF,r=t.data(),a=r.micromarkExtensions||(r.micromarkExtensions=[]),i=r.fromMarkdownExtensions||(r.fromMarkdownExtensions=[]),o=r.toMarkdownExtensions||(r.toMarkdownExtensions=[]);a.push(jF(n)),i.push(dF()),o.push(pF(n))}function WF(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function YF(e,t){if(e==null)return{};var n,r,a=WF(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;re.length)&&(t=e.length);for(var n=0,r=Array(t);n=4)return[e[0],e[1],e[2],e[3],"".concat(e[0],".").concat(e[1]),"".concat(e[0],".").concat(e[2]),"".concat(e[0],".").concat(e[3]),"".concat(e[1],".").concat(e[0]),"".concat(e[1],".").concat(e[2]),"".concat(e[1],".").concat(e[3]),"".concat(e[2],".").concat(e[0]),"".concat(e[2],".").concat(e[1]),"".concat(e[2],".").concat(e[3]),"".concat(e[3],".").concat(e[0]),"".concat(e[3],".").concat(e[1]),"".concat(e[3],".").concat(e[2]),"".concat(e[0],".").concat(e[1],".").concat(e[2]),"".concat(e[0],".").concat(e[1],".").concat(e[3]),"".concat(e[0],".").concat(e[2],".").concat(e[1]),"".concat(e[0],".").concat(e[2],".").concat(e[3]),"".concat(e[0],".").concat(e[3],".").concat(e[1]),"".concat(e[0],".").concat(e[3],".").concat(e[2]),"".concat(e[1],".").concat(e[0],".").concat(e[2]),"".concat(e[1],".").concat(e[0],".").concat(e[3]),"".concat(e[1],".").concat(e[2],".").concat(e[0]),"".concat(e[1],".").concat(e[2],".").concat(e[3]),"".concat(e[1],".").concat(e[3],".").concat(e[0]),"".concat(e[1],".").concat(e[3],".").concat(e[2]),"".concat(e[2],".").concat(e[0],".").concat(e[1]),"".concat(e[2],".").concat(e[0],".").concat(e[3]),"".concat(e[2],".").concat(e[1],".").concat(e[0]),"".concat(e[2],".").concat(e[1],".").concat(e[3]),"".concat(e[2],".").concat(e[3],".").concat(e[0]),"".concat(e[2],".").concat(e[3],".").concat(e[1]),"".concat(e[3],".").concat(e[0],".").concat(e[1]),"".concat(e[3],".").concat(e[0],".").concat(e[2]),"".concat(e[3],".").concat(e[1],".").concat(e[0]),"".concat(e[3],".").concat(e[1],".").concat(e[2]),"".concat(e[3],".").concat(e[2],".").concat(e[0]),"".concat(e[3],".").concat(e[2],".").concat(e[1]),"".concat(e[0],".").concat(e[1],".").concat(e[2],".").concat(e[3]),"".concat(e[0],".").concat(e[1],".").concat(e[3],".").concat(e[2]),"".concat(e[0],".").concat(e[2],".").concat(e[1],".").concat(e[3]),"".concat(e[0],".").concat(e[2],".").concat(e[3],".").concat(e[1]),"".concat(e[0],".").concat(e[3],".").concat(e[1],".").concat(e[2]),"".concat(e[0],".").concat(e[3],".").concat(e[2],".").concat(e[1]),"".concat(e[1],".").concat(e[0],".").concat(e[2],".").concat(e[3]),"".concat(e[1],".").concat(e[0],".").concat(e[3],".").concat(e[2]),"".concat(e[1],".").concat(e[2],".").concat(e[0],".").concat(e[3]),"".concat(e[1],".").concat(e[2],".").concat(e[3],".").concat(e[0]),"".concat(e[1],".").concat(e[3],".").concat(e[0],".").concat(e[2]),"".concat(e[1],".").concat(e[3],".").concat(e[2],".").concat(e[0]),"".concat(e[2],".").concat(e[0],".").concat(e[1],".").concat(e[3]),"".concat(e[2],".").concat(e[0],".").concat(e[3],".").concat(e[1]),"".concat(e[2],".").concat(e[1],".").concat(e[0],".").concat(e[3]),"".concat(e[2],".").concat(e[1],".").concat(e[3],".").concat(e[0]),"".concat(e[2],".").concat(e[3],".").concat(e[0],".").concat(e[1]),"".concat(e[2],".").concat(e[3],".").concat(e[1],".").concat(e[0]),"".concat(e[3],".").concat(e[0],".").concat(e[1],".").concat(e[2]),"".concat(e[3],".").concat(e[0],".").concat(e[2],".").concat(e[1]),"".concat(e[3],".").concat(e[1],".").concat(e[0],".").concat(e[2]),"".concat(e[3],".").concat(e[1],".").concat(e[2],".").concat(e[0]),"".concat(e[3],".").concat(e[2],".").concat(e[0],".").concat(e[1]),"".concat(e[3],".").concat(e[2],".").concat(e[1],".").concat(e[0])]}var qs={};function nP(e){if(e.length===0||e.length===1)return e;var t=e.join(".");return qs[t]||(qs[t]=tP(e)),qs[t]}function rP(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,r=e.filter(function(i){return i!=="token"}),a=nP(r);return a.reduce(function(i,o){return vr(vr({},i),n[o])},t)}function py(e){return e.join(" ")}function aP(e,t){var n=0;return function(r){return n+=1,r.map(function(a,i){return mR({node:a,stylesheet:e,useInlineStyles:t,key:"code-segment-".concat(n,"-").concat(i)})})}}function mR(e){var t=e.node,n=e.stylesheet,r=e.style,a=r===void 0?{}:r,i=e.useInlineStyles,o=e.key,s=t.properties,l=t.type,u=t.tagName,d=t.value;if(l==="text")return d;if(u){var c=aP(n,i),f;if(!i)f=vr(vr({},s),{},{className:py(s.className)});else{var p=Object.keys(n).reduce(function(b,g){return g.split(".").forEach(function(m){b.includes(m)||b.push(m)}),b},[]),h=s.className&&s.className.includes("token")?["token"]:[],y=s.className&&h.concat(s.className.filter(function(b){return!p.includes(b)}));f=vr(vr({},s),{},{className:py(y)||void 0,style:rP(s.className,Object.assign({},s.style,a),n)})}var T=c(t.children);return Ft.createElement(u,ig({key:o},f),T)}}const iP=function(e,t){var n=e.listLanguages();return n.indexOf(t)!==-1};var oP=["language","children","style","customStyle","codeTagProps","useInlineStyles","showLineNumbers","showInlineLineNumbers","startingLineNumber","lineNumberContainerStyle","lineNumberStyle","wrapLines","wrapLongLines","lineProps","renderer","PreTag","CodeTag","code","astGenerator"];function fy(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function hn(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:[],n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],r=0;r2&&arguments[2]!==void 0?arguments[2]:[];return Wi({children:_,lineNumber:E,lineNumberStyle:s,largestLineNumber:o,showInlineLineNumbers:a,lineProps:n,className:R,showLineNumbers:r,wrapLongLines:l,wrapLines:t})}function y(_,E){if(r&&E&&a){var R=bR(s,E,o);_.unshift(hR(E,R))}return _}function T(_,E){var R=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[];return t||R.length>0?h(_,E,R):y(_,E)}for(var b=function(){var E=d[p],R=E.children[0].value,C=lP(R);if(C){var N=R.split(` -`);N.forEach(function(k,I){var D=r&&c.length+i,q={type:"text",value:"".concat(k,` -`)};if(I===0){var $=d.slice(f+1,p).concat(Wi({children:[q],className:E.properties.className})),z=T($,D);c.push(z)}else if(I===N.length-1){var H=d[p+1]&&d[p+1].children&&d[p+1].children[0],Y={type:"text",value:"".concat(k)};if(H){var x=Wi({children:[Y],className:E.properties.className});d.splice(p+1,0,x)}else{var M=[Y],S=T(M,D,E.properties.className);c.push(S)}}else{var P=[q],G=T(P,D,E.properties.className);c.push(G)}}),f=p}p++};p4&&n.slice(0,4)===Im&&oU.test(t)&&(t.charAt(4)==="-"?r=uU(t):t=cU(t),a=rU),new a(r,t))}function uU(e){var t=e.slice(5).replace(IR,pU);return Im+t.charAt(0).toUpperCase()+t.slice(1)}function cU(e){var t=e.slice(4);return IR.test(t)?e:(t=t.replace(sU,dU),t.charAt(0)!=="-"&&(t="-"+t),Im+t)}function dU(e){return"-"+e.toLowerCase()}function pU(e){return e.charAt(1).toUpperCase()}var fU=gU,yy=/[#.]/g;function gU(e,t){for(var n=e||"",r=t||"div",a={},i=0,o,s,l;i=48&&t<=57}var F2=P2;function P2(e){var t=typeof e=="string"?e.charCodeAt(0):e;return t>=97&&t<=102||t>=65&&t<=70||t>=48&&t<=57}var U2=B2;function B2(e){var t=typeof e=="string"?e.charCodeAt(0):e;return t>=97&&t<=122||t>=65&&t<=90}var $2=U2,z2=xR,G2=q2;function q2(e){return $2(e)||z2(e)}var xi,j2=59,H2=V2;function V2(e){var t="&"+e+";",n;return xi=xi||document.createElement("i"),xi.innerHTML=t,n=xi.textContent,n.charCodeAt(n.length-1)===j2&&e!=="semi"||n===t?!1:n}var Ty=L2,Ay=D2,W2=xR,Y2=F2,OR=G2,K2=H2,X2=u$,Z2={}.hasOwnProperty,or=String.fromCharCode,Q2=Function.prototype,Ry={warning:null,reference:null,text:null,warningContext:null,referenceContext:null,textContext:null,position:{},additional:null,attribute:!1,nonTerminated:!0},J2=9,Iy=10,e$=12,t$=32,Cy=38,n$=59,r$=60,a$=61,i$=35,o$=88,s$=120,l$=65533,lr="named",xm="hexadecimal",Om="decimal",Lm={};Lm[xm]=16;Lm[Om]=10;var Ko={};Ko[lr]=OR;Ko[Om]=W2;Ko[xm]=Y2;var LR=1,DR=2,MR=3,FR=4,PR=5,sg=6,UR=7,On={};On[LR]="Named character references must be terminated by a semicolon";On[DR]="Numeric character references must be terminated by a semicolon";On[MR]="Named character references cannot be empty";On[FR]="Numeric character references cannot be empty";On[PR]="Named character references must be known";On[sg]="Numeric character references cannot be disallowed";On[UR]="Numeric character references cannot be outside the permissible Unicode range";function u$(e,t){var n={},r,a;t||(t={});for(a in Ry)r=t[a],n[a]=r??Ry[a];return(n.position.indent||n.position.start)&&(n.indent=n.position.indent||[],n.position=n.position.start),c$(e,n)}function c$(e,t){var n=t.additional,r=t.nonTerminated,a=t.text,i=t.reference,o=t.warning,s=t.textContext,l=t.referenceContext,u=t.warningContext,d=t.position,c=t.indent||[],f=e.length,p=0,h=-1,y=d.column||1,T=d.line||1,b="",g=[],m,v,_,E,R,C,N,k,I,D,q,$,z,H,Y,x,M,S,P;for(typeof n=="string"&&(n=n.charCodeAt(0)),x=G(),k=o?A:Q2,p--,f++;++p65535&&(C-=65536,D+=or(C>>>10|55296),C=56320|C&1023),C=D+or(C))):H!==lr&&k(FR,S)),C?(Q(),x=G(),p=P-1,y+=P-z+1,g.push(C),M=G(),M.offset++,i&&i.call(l,C,{start:x,end:M},e.slice(z-1,P)),x=M):(E=e.slice(z-1,P),b+=E,y+=E.length,p=P-1)}else R===10&&(T++,h++,y=0),R===R?(b+=or(R),y++):Q();return g.join("");function G(){return{line:T,column:y,offset:p+(d.offset||0)}}function A(ue,Z){var ce=G();ce.column+=Z,ce.offset+=Z,o.call(u,On[ue],ce,ue)}function Q(){b&&(g.push(b),a&&a.call(s,b,{start:x,end:G()}),b="")}}function d$(e){return e>=55296&&e<=57343||e>1114111}function p$(e){return e>=1&&e<=8||e===11||e>=13&&e<=31||e>=127&&e<=159||e>=64976&&e<=65007||(e&65535)===65535||(e&65535)===65534}var BR={exports:{}};(function(e){var t=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/** - * Prism: Lightweight, robust, elegant syntax highlighting - * - * @license MIT - * @author Lea Verou - * @namespace - * @public - */var n=function(r){var a=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,i=0,o={},s={manual:r.Prism&&r.Prism.manual,disableWorkerMessageHandler:r.Prism&&r.Prism.disableWorkerMessageHandler,util:{encode:function g(m){return m instanceof l?new l(m.type,g(m.content),m.alias):Array.isArray(m)?m.map(g):m.replace(/&/g,"&").replace(/"u")return null;if("currentScript"in document)return document.currentScript;try{throw new Error}catch(_){var g=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(_.stack)||[])[1];if(g){var m=document.getElementsByTagName("script");for(var v in m)if(m[v].src==g)return m[v]}return null}},isActive:function(g,m,v){for(var _="no-"+m;g;){var E=g.classList;if(E.contains(m))return!0;if(E.contains(_))return!1;g=g.parentElement}return!!v}},languages:{plain:o,plaintext:o,text:o,txt:o,extend:function(g,m){var v=s.util.clone(s.languages[g]);for(var _ in m)v[_]=m[_];return v},insertBefore:function(g,m,v,_){_=_||s.languages;var E=_[g],R={};for(var C in E)if(E.hasOwnProperty(C)){if(C==m)for(var N in v)v.hasOwnProperty(N)&&(R[N]=v[N]);v.hasOwnProperty(C)||(R[C]=E[C])}var k=_[g];return _[g]=R,s.languages.DFS(s.languages,function(I,D){D===k&&I!=g&&(this[I]=R)}),R},DFS:function g(m,v,_,E){E=E||{};var R=s.util.objId;for(var C in m)if(m.hasOwnProperty(C)){v.call(m,C,m[C],_||C);var N=m[C],k=s.util.type(N);k==="Object"&&!E[R(N)]?(E[R(N)]=!0,g(N,v,null,E)):k==="Array"&&!E[R(N)]&&(E[R(N)]=!0,g(N,v,C,E))}}},plugins:{},highlightAll:function(g,m){s.highlightAllUnder(document,g,m)},highlightAllUnder:function(g,m,v){var _={callback:v,container:g,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};s.hooks.run("before-highlightall",_),_.elements=Array.prototype.slice.apply(_.container.querySelectorAll(_.selector)),s.hooks.run("before-all-elements-highlight",_);for(var E=0,R;R=_.elements[E++];)s.highlightElement(R,m===!0,_.callback)},highlightElement:function(g,m,v){var _=s.util.getLanguage(g),E=s.languages[_];s.util.setLanguage(g,_);var R=g.parentElement;R&&R.nodeName.toLowerCase()==="pre"&&s.util.setLanguage(R,_);var C=g.textContent,N={element:g,language:_,grammar:E,code:C};function k(D){N.highlightedCode=D,s.hooks.run("before-insert",N),N.element.innerHTML=N.highlightedCode,s.hooks.run("after-highlight",N),s.hooks.run("complete",N),v&&v.call(N.element)}if(s.hooks.run("before-sanity-check",N),R=N.element.parentElement,R&&R.nodeName.toLowerCase()==="pre"&&!R.hasAttribute("tabindex")&&R.setAttribute("tabindex","0"),!N.code){s.hooks.run("complete",N),v&&v.call(N.element);return}if(s.hooks.run("before-highlight",N),!N.grammar){k(s.util.encode(N.code));return}if(m&&r.Worker){var I=new Worker(s.filename);I.onmessage=function(D){k(D.data)},I.postMessage(JSON.stringify({language:N.language,code:N.code,immediateClose:!0}))}else k(s.highlight(N.code,N.grammar,N.language))},highlight:function(g,m,v){var _={code:g,grammar:m,language:v};if(s.hooks.run("before-tokenize",_),!_.grammar)throw new Error('The language "'+_.language+'" has no grammar.');return _.tokens=s.tokenize(_.code,_.grammar),s.hooks.run("after-tokenize",_),l.stringify(s.util.encode(_.tokens),_.language)},tokenize:function(g,m){var v=m.rest;if(v){for(var _ in v)m[_]=v[_];delete m.rest}var E=new c;return f(E,E.head,g),d(g,E,m,E.head,0),h(E)},hooks:{all:{},add:function(g,m){var v=s.hooks.all;v[g]=v[g]||[],v[g].push(m)},run:function(g,m){var v=s.hooks.all[g];if(!(!v||!v.length))for(var _=0,E;E=v[_++];)E(m)}},Token:l};r.Prism=s;function l(g,m,v,_){this.type=g,this.content=m,this.alias=v,this.length=(_||"").length|0}l.stringify=function g(m,v){if(typeof m=="string")return m;if(Array.isArray(m)){var _="";return m.forEach(function(k){_+=g(k,v)}),_}var E={type:m.type,content:g(m.content,v),tag:"span",classes:["token",m.type],attributes:{},language:v},R=m.alias;R&&(Array.isArray(R)?Array.prototype.push.apply(E.classes,R):E.classes.push(R)),s.hooks.run("wrap",E);var C="";for(var N in E.attributes)C+=" "+N+'="'+(E.attributes[N]||"").replace(/"/g,""")+'"';return"<"+E.tag+' class="'+E.classes.join(" ")+'"'+C+">"+E.content+""};function u(g,m,v,_){g.lastIndex=m;var E=g.exec(v);if(E&&_&&E[1]){var R=E[1].length;E.index+=R,E[0]=E[0].slice(R)}return E}function d(g,m,v,_,E,R){for(var C in v)if(!(!v.hasOwnProperty(C)||!v[C])){var N=v[C];N=Array.isArray(N)?N:[N];for(var k=0;k=R.reach);M+=x.value.length,x=x.next){var S=x.value;if(m.length>g.length)return;if(!(S instanceof l)){var P=1,G;if($){if(G=u(Y,M,g,q),!G||G.index>=g.length)break;var Z=G.index,A=G.index+G[0].length,Q=M;for(Q+=x.value.length;Z>=Q;)x=x.next,Q+=x.value.length;if(Q-=x.value.length,M=Q,x.value instanceof l)continue;for(var ue=x;ue!==m.tail&&(QR.reach&&(R.reach=Be);var rt=x.prev;ke&&(rt=f(m,rt,ke),M+=ke.length),p(m,rt,P);var jr=new l(C,D?s.tokenize(ce,D):ce,z,ce);if(x=f(m,rt,jr),Ve&&f(m,x,Ve),P>1){var sn={cause:C+","+k,reach:Be};d(g,m,v,x.prev,M,sn),R&&sn.reach>R.reach&&(R.reach=sn.reach)}}}}}}function c(){var g={value:null,prev:null,next:null},m={value:null,prev:g,next:null};g.next=m,this.head=g,this.tail=m,this.length=0}function f(g,m,v){var _=m.next,E={value:v,prev:m,next:_};return m.next=E,_.prev=E,g.length++,E}function p(g,m,v){for(var _=m.next,E=0;E/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},e.languages.markup.tag.inside["attr-value"].inside.entity=e.languages.markup.entity,e.languages.markup.doctype.inside["internal-subset"].inside=e.languages.markup,e.hooks.add("wrap",function(t){t.type==="entity"&&(t.attributes.title=t.content.value.replace(/&/,"&"))}),Object.defineProperty(e.languages.markup.tag,"addInlined",{value:function(n,r){var a={};a["language-"+r]={pattern:/(^$)/i,lookbehind:!0,inside:e.languages[r]},a.cdata=/^$/i;var i={"included-cdata":{pattern://i,inside:a}};i["language-"+r]={pattern:/[\s\S]+/,inside:e.languages[r]};var o={};o[n]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,function(){return n}),"i"),lookbehind:!0,greedy:!0,inside:i},e.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(e.languages.markup.tag,"addAttribute",{value:function(t,n){e.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+t+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[n,"language-"+n],inside:e.languages[n]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),e.languages.html=e.languages.markup,e.languages.mathml=e.languages.markup,e.languages.svg=e.languages.markup,e.languages.xml=e.languages.extend("markup",{}),e.languages.ssml=e.languages.xml,e.languages.atom=e.languages.xml,e.languages.rss=e.languages.xml}var m$=Mm;Mm.displayName="css";Mm.aliases=[];function Mm(e){(function(t){var n=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;t.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+n.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+n.source+"$"),alias:"url"}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+n.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:n,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},t.languages.css.atrule.inside.rest=t.languages.css;var r=t.languages.markup;r&&(r.tag.addInlined("style","css"),r.tag.addAttribute("style","css"))})(e)}var h$=Fm;Fm.displayName="clike";Fm.aliases=[];function Fm(e){e.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}}var b$=Pm;Pm.displayName="javascript";Pm.aliases=["js"];function Pm(e){e.languages.javascript=e.languages.extend("clike",{"class-name":[e.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+(/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source)+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),e.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,e.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:e.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:e.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:e.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:e.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:e.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),e.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:e.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),e.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),e.languages.markup&&(e.languages.markup.tag.addInlined("script","javascript"),e.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),e.languages.js=e.languages.javascript}var fa=typeof globalThis=="object"?globalThis:typeof self=="object"?self:typeof window=="object"?window:typeof Tn=="object"?Tn:{},y$=D$();fa.Prism={manual:!0,disableWorkerMessageHandler:!0};var E$=DU,S$=X2,$R=f$,v$=g$,k$=m$,w$=h$,_$=b$;y$();var Um={}.hasOwnProperty;function zR(){}zR.prototype=$R;var Te=new zR,T$=Te;Te.highlight=R$;Te.register=ri;Te.alias=A$;Te.registered=I$;Te.listLanguages=C$;ri(v$);ri(k$);ri(w$);ri(_$);Te.util.encode=O$;Te.Token.stringify=N$;function ri(e){if(typeof e!="function"||!e.displayName)throw new Error("Expected `function` for `grammar`, got `"+e+"`");Te.languages[e.displayName]===void 0&&e(Te)}function A$(e,t){var n=Te.languages,r=e,a,i,o,s;t&&(r={},r[e]=t);for(a in r)for(i=r[a],i=typeof i=="string"?[i]:i,o=i.length,s=-1;++s code[class*="language-"]':{background:"#f5f2f0",padding:".1em",borderRadius:".3em",whiteSpace:"normal"},comment:{color:"slategray"},prolog:{color:"slategray"},doctype:{color:"slategray"},cdata:{color:"slategray"},punctuation:{color:"#999"},namespace:{Opacity:".7"},property:{color:"#905"},tag:{color:"#905"},boolean:{color:"#905"},number:{color:"#905"},constant:{color:"#905"},symbol:{color:"#905"},deleted:{color:"#905"},selector:{color:"#690"},"attr-name":{color:"#690"},string:{color:"#690"},char:{color:"#690"},builtin:{color:"#690"},inserted:{color:"#690"},operator:{color:"#9a6e3a",background:"hsla(0, 0%, 100%, .5)"},entity:{color:"#9a6e3a",background:"hsla(0, 0%, 100%, .5)",cursor:"help"},url:{color:"#9a6e3a",background:"hsla(0, 0%, 100%, .5)"},".language-css .token.string":{color:"#9a6e3a",background:"hsla(0, 0%, 100%, .5)"},".style .token.string":{color:"#9a6e3a",background:"hsla(0, 0%, 100%, .5)"},atrule:{color:"#07a"},"attr-value":{color:"#07a"},keyword:{color:"#07a"},function:{color:"#DD4A68"},"class-name":{color:"#DD4A68"},regex:{color:"#e90"},important:{color:"#e90",fontWeight:"bold"},variable:{color:"#e90"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"}};var js,Ny;function F$(){if(Ny)return js;Ny=1,js=e,e.displayName="abap",e.aliases=[];function e(t){t.languages.abap={comment:/^\*.*/m,string:/(`|')(?:\\.|(?!\1)[^\\\r\n])*\1/,"string-template":{pattern:/([|}])(?:\\.|[^\\|{\r\n])*(?=[|{])/,lookbehind:!0,alias:"string"},"eol-comment":{pattern:/(^|\s)".*/m,lookbehind:!0,alias:"comment"},keyword:{pattern:/(\s|\.|^)(?:SCIENTIFIC_WITH_LEADING_ZERO|SCALE_PRESERVING_SCIENTIFIC|RMC_COMMUNICATION_FAILURE|END-ENHANCEMENT-SECTION|MULTIPLY-CORRESPONDING|SUBTRACT-CORRESPONDING|VERIFICATION-MESSAGE|DIVIDE-CORRESPONDING|ENHANCEMENT-SECTION|CURRENCY_CONVERSION|RMC_SYSTEM_FAILURE|START-OF-SELECTION|MOVE-CORRESPONDING|RMC_INVALID_STATUS|CUSTOMER-FUNCTION|END-OF-DEFINITION|ENHANCEMENT-POINT|SYSTEM-EXCEPTIONS|ADD-CORRESPONDING|SCALE_PRESERVING|SELECTION-SCREEN|CURSOR-SELECTION|END-OF-SELECTION|LOAD-OF-PROGRAM|SCROLL-BOUNDARY|SELECTION-TABLE|EXCEPTION-TABLE|IMPLEMENTATIONS|PARAMETER-TABLE|RIGHT-JUSTIFIED|UNIT_CONVERSION|AUTHORITY-CHECK|LIST-PROCESSING|SIGN_AS_POSTFIX|COL_BACKGROUND|IMPLEMENTATION|INTERFACE-POOL|TRANSFORMATION|IDENTIFICATION|ENDENHANCEMENT|LINE-SELECTION|INITIALIZATION|LEFT-JUSTIFIED|SELECT-OPTIONS|SELECTION-SETS|COMMUNICATION|CORRESPONDING|DECIMAL_SHIFT|PRINT-CONTROL|VALUE-REQUEST|CHAIN-REQUEST|FUNCTION-POOL|FIELD-SYMBOLS|FUNCTIONALITY|INVERTED-DATE|SELECTION-SET|CLASS-METHODS|OUTPUT-LENGTH|CLASS-CODING|COL_NEGATIVE|ERRORMESSAGE|FIELD-GROUPS|HELP-REQUEST|NO-EXTENSION|NO-TOPOFPAGE|REDEFINITION|DISPLAY-MODE|ENDINTERFACE|EXIT-COMMAND|FIELD-SYMBOL|NO-SCROLLING|SHORTDUMP-ID|ACCESSPOLICY|CLASS-EVENTS|COL_POSITIVE|DECLARATIONS|ENHANCEMENTS|FILTER-TABLE|SWITCHSTATES|SYNTAX-CHECK|TRANSPORTING|ASYNCHRONOUS|SYNTAX-TRACE|TOKENIZATION|USER-COMMAND|WITH-HEADING|ABAP-SOURCE|BREAK-POINT|CHAIN-INPUT|COMPRESSION|FIXED-POINT|NEW-SECTION|NON-UNICODE|OCCURRENCES|RESPONSIBLE|SYSTEM-CALL|TRACE-TABLE|ABBREVIATED|CHAR-TO-HEX|END-OF-FILE|ENDFUNCTION|ENVIRONMENT|ASSOCIATION|COL_HEADING|EDITOR-CALL|END-OF-PAGE|ENGINEERING|IMPLEMENTED|INTENSIFIED|RADIOBUTTON|SYSTEM-EXIT|TOP-OF-PAGE|TRANSACTION|APPLICATION|CONCATENATE|DESTINATION|ENHANCEMENT|IMMEDIATELY|NO-GROUPING|PRECOMPILED|REPLACEMENT|TITLE-LINES|ACTIVATION|BYTE-ORDER|CLASS-POOL|CONNECTION|CONVERSION|DEFINITION|DEPARTMENT|EXPIRATION|INHERITING|MESSAGE-ID|NO-HEADING|PERFORMING|QUEUE-ONLY|RIGHTSPACE|SCIENTIFIC|STATUSINFO|STRUCTURES|SYNCPOINTS|WITH-TITLE|ATTRIBUTES|BOUNDARIES|CLASS-DATA|COL_NORMAL|DD\/MM\/YYYY|DESCENDING|INTERFACES|LINE-COUNT|MM\/DD\/YYYY|NON-UNIQUE|PRESERVING|SELECTIONS|STATEMENTS|SUBROUTINE|TRUNCATION|TYPE-POOLS|ARITHMETIC|BACKGROUND|ENDPROVIDE|EXCEPTIONS|IDENTIFIER|INDEX-LINE|OBLIGATORY|PARAMETERS|PERCENTAGE|PUSHBUTTON|RESOLUTION|COMPONENTS|DEALLOCATE|DISCONNECT|DUPLICATES|FIRST-LINE|HEAD-LINES|NO-DISPLAY|OCCURRENCE|RESPECTING|RETURNCODE|SUBMATCHES|TRACE-FILE|ASCENDING|BYPASSING|ENDMODULE|EXCEPTION|EXCLUDING|EXPORTING|INCREMENT|MATCHCODE|PARAMETER|PARTIALLY|PREFERRED|REFERENCE|REPLACING|RETURNING|SELECTION|SEPARATED|SPECIFIED|STATEMENT|TIMESTAMP|TYPE-POOL|ACCEPTING|APPENDAGE|ASSIGNING|COL_GROUP|COMPARING|CONSTANTS|DANGEROUS|IMPORTING|INSTANCES|LEFTSPACE|LOG-POINT|QUICKINFO|READ-ONLY|SCROLLING|SQLSCRIPT|STEP-LOOP|TOP-LINES|TRANSLATE|APPENDING|AUTHORITY|CHARACTER|COMPONENT|CONDITION|DIRECTORY|DUPLICATE|MESSAGING|RECEIVING|SUBSCREEN|ACCORDING|COL_TOTAL|END-LINES|ENDMETHOD|ENDSELECT|EXPANDING|EXTENSION|INCLUDING|INFOTYPES|INTERFACE|INTERVALS|LINE-SIZE|PF-STATUS|PROCEDURE|PROTECTED|REQUESTED|RESUMABLE|RIGHTPLUS|SAP-SPOOL|SECONDARY|STRUCTURE|SUBSTRING|TABLEVIEW|NUMOFCHAR|ADJACENT|ANALYSIS|ASSIGNED|BACKWARD|CHANNELS|CHECKBOX|CONTINUE|CRITICAL|DATAINFO|DD\/MM\/YY|DURATION|ENCODING|ENDCLASS|FUNCTION|LEFTPLUS|LINEFEED|MM\/DD\/YY|OVERFLOW|RECEIVED|SKIPPING|SORTABLE|STANDARD|SUBTRACT|SUPPRESS|TABSTRIP|TITLEBAR|TRUNCATE|UNASSIGN|WHENEVER|ANALYZER|COALESCE|COMMENTS|CONDENSE|DECIMALS|DEFERRED|ENDWHILE|EXPLICIT|KEYWORDS|MESSAGES|POSITION|PRIORITY|RECEIVER|RENAMING|TIMEZONE|TRAILING|ALLOCATE|CENTERED|CIRCULAR|CONTROLS|CURRENCY|DELETING|DESCRIBE|DISTANCE|ENDCATCH|EXPONENT|EXTENDED|GENERATE|IGNORING|INCLUDES|INTERNAL|MAJOR-ID|MODIFIER|NEW-LINE|OPTIONAL|PROPERTY|ROLLBACK|STARTING|SUPPLIED|ABSTRACT|CHANGING|CONTEXTS|CREATING|CUSTOMER|DATABASE|DAYLIGHT|DEFINING|DISTINCT|DIVISION|ENABLING|ENDCHAIN|ESCAPING|HARMLESS|IMPLICIT|INACTIVE|LANGUAGE|MINOR-ID|MULTIPLY|NEW-PAGE|NO-TITLE|POS_HIGH|SEPARATE|TEXTPOOL|TRANSFER|SELECTOR|DBMAXLEN|ITERATOR|ARCHIVE|BIT-XOR|BYTE-CO|COLLECT|COMMENT|CURRENT|DEFAULT|DISPLAY|ENDFORM|EXTRACT|LEADING|LISTBOX|LOCATOR|MEMBERS|METHODS|NESTING|POS_LOW|PROCESS|PROVIDE|RAISING|RESERVE|SECONDS|SUMMARY|VISIBLE|BETWEEN|BIT-AND|BYTE-CS|CLEANUP|COMPUTE|CONTROL|CONVERT|DATASET|ENDCASE|FORWARD|HEADERS|HOTSPOT|INCLUDE|INVERSE|KEEPING|NO-ZERO|OBJECTS|OVERLAY|PADDING|PATTERN|PROGRAM|REFRESH|SECTION|SUMMING|TESTING|VERSION|WINDOWS|WITHOUT|BIT-NOT|BYTE-CA|BYTE-NA|CASTING|CONTEXT|COUNTRY|DYNAMIC|ENABLED|ENDLOOP|EXECUTE|FRIENDS|HANDLER|HEADING|INITIAL|\*-INPUT|LOGFILE|MAXIMUM|MINIMUM|NO-GAPS|NO-SIGN|PRAGMAS|PRIMARY|PRIVATE|REDUCED|REPLACE|REQUEST|RESULTS|UNICODE|WARNING|ALIASES|BYTE-CN|BYTE-NS|CALLING|COL_KEY|COLUMNS|CONNECT|ENDEXEC|ENTRIES|EXCLUDE|FILTERS|FURTHER|HELP-ID|LOGICAL|MAPPING|MESSAGE|NAMETAB|OPTIONS|PACKAGE|PERFORM|RECEIVE|STATICS|VARYING|BINDING|CHARLEN|GREATER|XSTRLEN|ACCEPT|APPEND|DETAIL|ELSEIF|ENDING|ENDTRY|FORMAT|FRAMES|GIVING|HASHED|HEADER|IMPORT|INSERT|MARGIN|MODULE|NATIVE|OBJECT|OFFSET|REMOTE|RESUME|SAVING|SIMPLE|SUBMIT|TABBED|TOKENS|UNIQUE|UNPACK|UPDATE|WINDOW|YELLOW|ACTUAL|ASPECT|CENTER|CURSOR|DELETE|DIALOG|DIVIDE|DURING|ERRORS|EVENTS|EXTEND|FILTER|HANDLE|HAVING|IGNORE|LITTLE|MEMORY|NO-GAP|OCCURS|OPTION|PERSON|PLACES|PUBLIC|REDUCE|REPORT|RESULT|SINGLE|SORTED|SWITCH|SYNTAX|TARGET|VALUES|WRITER|ASSERT|BLOCKS|BOUNDS|BUFFER|CHANGE|COLUMN|COMMIT|CONCAT|COPIES|CREATE|DDMMYY|DEFINE|ENDIAN|ESCAPE|EXPAND|KERNEL|LAYOUT|LEGACY|LEVELS|MMDDYY|NUMBER|OUTPUT|RANGES|READER|RETURN|SCREEN|SEARCH|SELECT|SHARED|SOURCE|STABLE|STATIC|SUBKEY|SUFFIX|TABLES|UNWIND|YYMMDD|ASSIGN|BACKUP|BEFORE|BINARY|BIT-OR|BLANKS|CLIENT|CODING|COMMON|DEMAND|DYNPRO|EXCEPT|EXISTS|EXPORT|FIELDS|GLOBAL|GROUPS|LENGTH|LOCALE|MEDIUM|METHOD|MODIFY|NESTED|OTHERS|REJECT|SCROLL|SUPPLY|SYMBOL|ENDFOR|STRLEN|ALIGN|BEGIN|BOUND|ENDAT|ENTRY|EVENT|FINAL|FLUSH|GRANT|INNER|SHORT|USING|WRITE|AFTER|BLACK|BLOCK|CLOCK|COLOR|COUNT|DUMMY|EMPTY|ENDDO|ENDON|GREEN|INDEX|INOUT|LEAVE|LEVEL|LINES|MODIF|ORDER|OUTER|RANGE|RESET|RETRY|RIGHT|SMART|SPLIT|STYLE|TABLE|THROW|UNDER|UNTIL|UPPER|UTF-8|WHERE|ALIAS|BLANK|CLEAR|CLOSE|EXACT|FETCH|FIRST|FOUND|GROUP|LLANG|LOCAL|OTHER|REGEX|SPOOL|TITLE|TYPES|VALID|WHILE|ALPHA|BOXED|CATCH|CHAIN|CHECK|CLASS|COVER|ENDIF|EQUIV|FIELD|FLOOR|FRAME|INPUT|LOWER|MATCH|NODES|PAGES|PRINT|RAISE|ROUND|SHIFT|SPACE|SPOTS|STAMP|STATE|TASKS|TIMES|TRMAC|ULINE|UNION|VALUE|WIDTH|EQUAL|LOG10|TRUNC|BLOB|CASE|CEIL|CLOB|COND|EXIT|FILE|GAPS|HOLD|INCL|INTO|KEEP|KEYS|LAST|LINE|LONG|LPAD|MAIL|MODE|OPEN|PINK|READ|ROWS|TEST|THEN|ZERO|AREA|BACK|BADI|BYTE|CAST|EDIT|EXEC|FAIL|FIND|FKEQ|FONT|FREE|GKEQ|HIDE|INIT|ITNO|LATE|LOOP|MAIN|MARK|MOVE|NEXT|NULL|RISK|ROLE|UNIT|WAIT|ZONE|BASE|CALL|CODE|DATA|DATE|FKGE|GKGE|HIGH|KIND|LEFT|LIST|MASK|MESH|NAME|NODE|PACK|PAGE|POOL|SEND|SIGN|SIZE|SOME|STOP|TASK|TEXT|TIME|USER|VARY|WITH|WORD|BLUE|CONV|COPY|DEEP|ELSE|FORM|FROM|HINT|ICON|JOIN|LIKE|LOAD|ONLY|PART|SCAN|SKIP|SORT|TYPE|UNIX|VIEW|WHEN|WORK|ACOS|ASIN|ATAN|COSH|EACH|FRAC|LESS|RTTI|SINH|SQRT|TANH|AVG|BIT|DIV|ISO|LET|OUT|PAD|SQL|ALL|CI_|CPI|END|LOB|LPI|MAX|MIN|NEW|OLE|RUN|SET|\?TO|YES|ABS|ADD|AND|BIG|FOR|HDB|JOB|LOW|NOT|SAP|TRY|VIA|XML|ANY|GET|IDS|KEY|MOD|OFF|PUT|RAW|RED|REF|SUM|TAB|XSD|CNT|COS|EXP|LOG|SIN|TAN|XOR|AT|CO|CP|DO|GT|ID|IF|NS|OR|BT|CA|CS|GE|NA|NB|EQ|IN|LT|NE|NO|OF|ON|PF|TO|AS|BY|CN|IS|LE|NP|UP|E|I|M|O|Z|C|X)\b/i,lookbehind:!0},number:/\b\d+\b/,operator:{pattern:/(\s)(?:\*\*?|<[=>]?|>=?|\?=|[-+\/=])(?=\s)/,lookbehind:!0},"string-operator":{pattern:/(\s)&&?(?=\s)/,lookbehind:!0,alias:"keyword"},"token-operator":[{pattern:/(\w)(?:->?|=>|[~|{}])(?=\w)/,lookbehind:!0,alias:"punctuation"},{pattern:/[|{}]/,alias:"punctuation"}],punctuation:/[,.:()]/}}return js}var Hs,xy;function P$(){if(xy)return Hs;xy=1,Hs=e,e.displayName="abnf",e.aliases=[];function e(t){(function(n){var r="(?:ALPHA|BIT|CHAR|CR|CRLF|CTL|DIGIT|DQUOTE|HEXDIG|HTAB|LF|LWSP|OCTET|SP|VCHAR|WSP)";n.languages.abnf={comment:/;.*/,string:{pattern:/(?:%[is])?"[^"\n\r]*"/,greedy:!0,inside:{punctuation:/^%[is]/}},range:{pattern:/%(?:b[01]+-[01]+|d\d+-\d+|x[A-F\d]+-[A-F\d]+)/i,alias:"number"},terminal:{pattern:/%(?:b[01]+(?:\.[01]+)*|d\d+(?:\.\d+)*|x[A-F\d]+(?:\.[A-F\d]+)*)/i,alias:"number"},repetition:{pattern:/(^|[^\w-])(?:\d*\*\d*|\d+)/,lookbehind:!0,alias:"operator"},definition:{pattern:/(^[ \t]*)(?:[a-z][\w-]*|<[^<>\r\n]*>)(?=\s*=)/m,lookbehind:!0,alias:"keyword",inside:{punctuation:/<|>/}},"core-rule":{pattern:RegExp("(?:(^|[^<\\w-])"+r+"|<"+r+">)(?![\\w-])","i"),lookbehind:!0,alias:["rule","constant"],inside:{punctuation:/<|>/}},rule:{pattern:/(^|[^<\w-])[a-z][\w-]*|<[^<>\r\n]*>/i,lookbehind:!0,inside:{punctuation:/<|>/}},operator:/=\/?|\//,punctuation:/[()\[\]]/}})(t)}return Hs}var Vs,Oy;function U$(){if(Oy)return Vs;Oy=1,Vs=e,e.displayName="actionscript",e.aliases=[];function e(t){t.languages.actionscript=t.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<>?>?|[!=]=?)=?|[~?@]/}),t.languages.actionscript["class-name"].alias="function",delete t.languages.actionscript.parameter,delete t.languages.actionscript["literal-property"],t.languages.markup&&t.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:t.languages.markup}})}return Vs}var Ws,Ly;function B$(){if(Ly)return Ws;Ly=1,Ws=e,e.displayName="ada",e.aliases=[];function e(t){t.languages.ada={comment:/--.*/,string:/"(?:""|[^"\r\f\n])*"/,number:[{pattern:/\b\d(?:_?\d)*#[\dA-F](?:_?[\dA-F])*(?:\.[\dA-F](?:_?[\dA-F])*)?#(?:E[+-]?\d(?:_?\d)*)?/i},{pattern:/\b\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:E[+-]?\d(?:_?\d)*)?\b/i}],"attr-name":/\b'\w+/,keyword:/\b(?:abort|abs|abstract|accept|access|aliased|all|and|array|at|begin|body|case|constant|declare|delay|delta|digits|do|else|elsif|end|entry|exception|exit|for|function|generic|goto|if|in|interface|is|limited|loop|mod|new|not|null|of|others|out|overriding|package|pragma|private|procedure|protected|raise|range|record|rem|renames|requeue|return|reverse|select|separate|some|subtype|synchronized|tagged|task|terminate|then|type|until|use|when|while|with|xor)\b/i,boolean:/\b(?:false|true)\b/i,operator:/<[=>]?|>=?|=>?|:=|\/=?|\*\*?|[&+-]/,punctuation:/\.\.?|[,;():]/,char:/'.'/,variable:/\b[a-z](?:\w)*\b/i}}return Ws}var Ys,Dy;function $$(){if(Dy)return Ys;Dy=1,Ys=e,e.displayName="agda",e.aliases=[];function e(t){(function(n){n.languages.agda={comment:/\{-[\s\S]*?(?:-\}|$)|--.*/,string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},punctuation:/[(){}⦃⦄.;@]/,"class-name":{pattern:/((?:data|record) +)\S+/,lookbehind:!0},function:{pattern:/(^[ \t]*)(?!\s)[^:\r\n]+(?=:)/m,lookbehind:!0},operator:{pattern:/(^\s*|\s)(?:[=|:∀→λ\\?_]|->)(?=\s)/,lookbehind:!0},keyword:/\b(?:Set|abstract|constructor|data|eta-equality|field|forall|hiding|import|in|inductive|infix|infixl|infixr|instance|let|macro|module|mutual|no-eta-equality|open|overlap|pattern|postulate|primitive|private|public|quote|quoteContext|quoteGoal|quoteTerm|record|renaming|rewrite|syntax|tactic|unquote|unquoteDecl|unquoteDef|using|variable|where|with)\b/}})(t)}return Ys}var Ks,My;function z$(){if(My)return Ks;My=1,Ks=e,e.displayName="al",e.aliases=[];function e(t){t.languages.al={comment:/\/\/.*|\/\*[\s\S]*?\*\//,string:{pattern:/'(?:''|[^'\r\n])*'(?!')|"(?:""|[^"\r\n])*"(?!")/,greedy:!0},function:{pattern:/(\b(?:event|procedure|trigger)\s+|(?:^|[^.])\.\s*)[a-z_]\w*(?=\s*\()/i,lookbehind:!0},keyword:[/\b(?:array|asserterror|begin|break|case|do|downto|else|end|event|exit|for|foreach|function|if|implements|in|indataset|interface|internal|local|of|procedure|program|protected|repeat|runonclient|securityfiltering|suppressdispose|temporary|then|to|trigger|until|var|while|with|withevents)\b/i,/\b(?:action|actions|addafter|addbefore|addfirst|addlast|area|assembly|chartpart|codeunit|column|controladdin|cuegroup|customizes|dataitem|dataset|dotnet|elements|enum|enumextension|extends|field|fieldattribute|fieldelement|fieldgroup|fieldgroups|fields|filter|fixed|grid|group|key|keys|label|labels|layout|modify|moveafter|movebefore|movefirst|movelast|page|pagecustomization|pageextension|part|profile|query|repeater|report|requestpage|schema|separator|systempart|table|tableelement|tableextension|textattribute|textelement|type|usercontrol|value|xmlport)\b/i],number:/\b(?:0x[\da-f]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?)(?:F|LL?|U(?:LL?)?)?\b/i,boolean:/\b(?:false|true)\b/i,variable:/\b(?:Curr(?:FieldNo|Page|Report)|x?Rec|RequestOptionsPage)\b/,"class-name":/\b(?:automation|biginteger|bigtext|blob|boolean|byte|char|clienttype|code|completiontriggererrorlevel|connectiontype|database|dataclassification|datascope|date|dateformula|datetime|decimal|defaultlayout|dialog|dictionary|dotnetassembly|dotnettypedeclaration|duration|errorinfo|errortype|executioncontext|executionmode|fieldclass|fieldref|fieldtype|file|filterpagebuilder|guid|httpclient|httpcontent|httpheaders|httprequestmessage|httpresponsemessage|instream|integer|joker|jsonarray|jsonobject|jsontoken|jsonvalue|keyref|list|moduledependencyinfo|moduleinfo|none|notification|notificationscope|objecttype|option|outstream|pageresult|record|recordid|recordref|reportformat|securityfilter|sessionsettings|tableconnectiontype|tablefilter|testaction|testfield|testfilterfield|testpage|testpermissions|testrequestpage|text|textbuilder|textconst|textencoding|time|transactionmodel|transactiontype|variant|verbosity|version|view|views|webserviceactioncontext|webserviceactionresultcode|xmlattribute|xmlattributecollection|xmlcdata|xmlcomment|xmldeclaration|xmldocument|xmldocumenttype|xmlelement|xmlnamespacemanager|xmlnametable|xmlnode|xmlnodelist|xmlprocessinginstruction|xmlreadoptions|xmltext|xmlwriteoptions)\b/i,operator:/\.\.|:[=:]|[-+*/]=?|<>|[<>]=?|=|\b(?:and|div|mod|not|or|xor)\b/i,punctuation:/[()\[\]{}:.;,]/}}return Ks}var Xs,Fy;function G$(){if(Fy)return Xs;Fy=1,Xs=e,e.displayName="antlr4",e.aliases=["g4"];function e(t){t.languages.antlr4={comment:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,string:{pattern:/'(?:\\.|[^\\'\r\n])*'/,greedy:!0},"character-class":{pattern:/\[(?:\\.|[^\\\]\r\n])*\]/,greedy:!0,alias:"regex",inside:{range:{pattern:/([^[]|(?:^|[^\\])(?:\\\\)*\\\[)-(?!\])/,lookbehind:!0,alias:"punctuation"},escape:/\\(?:u(?:[a-fA-F\d]{4}|\{[a-fA-F\d]+\})|[pP]\{[=\w-]+\}|[^\r\nupP])/,punctuation:/[\[\]]/}},action:{pattern:/\{(?:[^{}]|\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\})*\}/,greedy:!0,inside:{content:{pattern:/(\{)[\s\S]+(?=\})/,lookbehind:!0},punctuation:/[{}]/}},command:{pattern:/(->\s*(?!\s))(?:\s*(?:,\s*)?\b[a-z]\w*(?:\s*\([^()\r\n]*\))?)+(?=\s*;)/i,lookbehind:!0,inside:{function:/\b\w+(?=\s*(?:[,(]|$))/,punctuation:/[,()]/}},annotation:{pattern:/@\w+(?:::\w+)*/,alias:"keyword"},label:{pattern:/#[ \t]*\w+/,alias:"punctuation"},keyword:/\b(?:catch|channels|finally|fragment|grammar|import|lexer|locals|mode|options|parser|returns|throws|tokens)\b/,definition:[{pattern:/\b[a-z]\w*(?=\s*:)/,alias:["rule","class-name"]},{pattern:/\b[A-Z]\w*(?=\s*:)/,alias:["token","constant"]}],constant:/\b[A-Z][A-Z_]*\b/,operator:/\.\.|->|[|~]|[*+?]\??/,punctuation:/[;:()=]/},t.languages.g4=t.languages.antlr4}return Xs}var Zs,Py;function q$(){if(Py)return Zs;Py=1,Zs=e,e.displayName="apacheconf",e.aliases=[];function e(t){t.languages.apacheconf={comment:/#.*/,"directive-inline":{pattern:/(^[\t ]*)\b(?:AcceptFilter|AcceptPathInfo|AccessFileName|Action|Add(?:Alt|AltByEncoding|AltByType|Charset|DefaultCharset|Description|Encoding|Handler|Icon|IconByEncoding|IconByType|InputFilter|Language|ModuleInfo|OutputFilter|OutputFilterByType|Type)|Alias|AliasMatch|Allow(?:CONNECT|EncodedSlashes|Methods|Override|OverrideList)?|Anonymous(?:_LogEmail|_MustGiveEmail|_NoUserID|_VerifyEmail)?|AsyncRequestWorkerFactor|Auth(?:BasicAuthoritative|BasicFake|BasicProvider|BasicUseDigestAlgorithm|DBDUserPWQuery|DBDUserRealmQuery|DBMGroupFile|DBMType|DBMUserFile|Digest(?:Algorithm|Domain|NonceLifetime|Provider|Qop|ShmemSize)|Form(?:Authoritative|Body|DisableNoStore|FakeBasicAuth|Location|LoginRequiredLocation|LoginSuccessLocation|LogoutLocation|Method|Mimetype|Password|Provider|SitePassphrase|Size|Username)|GroupFile|LDAP(?:AuthorizePrefix|BindAuthoritative|BindDN|BindPassword|CharsetConfig|CompareAsUser|CompareDNOnServer|DereferenceAliases|GroupAttribute|GroupAttributeIsDN|InitialBindAsUser|InitialBindPattern|MaxSubGroupDepth|RemoteUserAttribute|RemoteUserIsDN|SearchAsUser|SubGroupAttribute|SubGroupClass|Url)|Merging|Name|nCache(?:Context|Enable|ProvideFor|SOCache|Timeout)|nzFcgiCheckAuthnProvider|nzFcgiDefineProvider|Type|UserFile|zDBDLoginToReferer|zDBDQuery|zDBDRedirectQuery|zDBMType|zSendForbiddenOnFailure)|BalancerGrowth|BalancerInherit|BalancerMember|BalancerPersist|BrowserMatch|BrowserMatchNoCase|BufferedLogs|BufferSize|Cache(?:DefaultExpire|DetailHeader|DirLength|DirLevels|Disable|Enable|File|Header|IgnoreCacheControl|IgnoreHeaders|IgnoreNoLastMod|IgnoreQueryString|IgnoreURLSessionIdentifiers|KeyBaseURL|LastModifiedFactor|Lock|LockMaxAge|LockPath|MaxExpire|MaxFileSize|MinExpire|MinFileSize|NegotiatedDocs|QuickHandler|ReadSize|ReadTime|Root|Socache(?:MaxSize|MaxTime|MinTime|ReadSize|ReadTime)?|StaleOnError|StoreExpired|StoreNoStore|StorePrivate)|CGIDScriptTimeout|CGIMapExtension|CharsetDefault|CharsetOptions|CharsetSourceEnc|CheckCaseOnly|CheckSpelling|ChrootDir|ContentDigest|CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking|CoreDumpDirectory|CustomLog|Dav|DavDepthInfinity|DavGenericLockDB|DavLockDB|DavMinTimeout|DBDExptime|DBDInitSQL|DBDKeep|DBDMax|DBDMin|DBDParams|DBDPersist|DBDPrepareSQL|DBDriver|DefaultIcon|DefaultLanguage|DefaultRuntimeDir|DefaultType|Define|Deflate(?:BufferSize|CompressionLevel|FilterNote|InflateLimitRequestBody|InflateRatio(?:Burst|Limit)|MemLevel|WindowSize)|Deny|DirectoryCheckHandler|DirectoryIndex|DirectoryIndexRedirect|DirectorySlash|DocumentRoot|DTracePrivileges|DumpIOInput|DumpIOOutput|EnableExceptionHook|EnableMMAP|EnableSendfile|Error|ErrorDocument|ErrorLog|ErrorLogFormat|Example|ExpiresActive|ExpiresByType|ExpiresDefault|ExtendedStatus|ExtFilterDefine|ExtFilterOptions|FallbackResource|FileETag|FilterChain|FilterDeclare|FilterProtocol|FilterProvider|FilterTrace|ForceLanguagePriority|ForceType|ForensicLog|GprofDir|GracefulShutdownTimeout|Group|Header|HeaderName|Heartbeat(?:Address|Listen|MaxServers|Storage)|HostnameLookups|IdentityCheck|IdentityCheckTimeout|ImapBase|ImapDefault|ImapMenu|Include|IncludeOptional|Index(?:HeadInsert|Ignore|IgnoreReset|Options|OrderDefault|StyleSheet)|InputSed|ISAPI(?:AppendLogToErrors|AppendLogToQuery|CacheFile|FakeAsync|LogNotSupported|ReadAheadBuffer)|KeepAlive|KeepAliveTimeout|KeptBodySize|LanguagePriority|LDAP(?:CacheEntries|CacheTTL|ConnectionPoolTTL|ConnectionTimeout|LibraryDebug|OpCacheEntries|OpCacheTTL|ReferralHopLimit|Referrals|Retries|RetryDelay|SharedCacheFile|SharedCacheSize|Timeout|TrustedClientCert|TrustedGlobalCert|TrustedMode|VerifyServerCert)|Limit(?:InternalRecursion|Request(?:Body|Fields|FieldSize|Line)|XMLRequestBody)|Listen|ListenBackLog|LoadFile|LoadModule|LogFormat|LogLevel|LogMessage|LuaAuthzProvider|LuaCodeCache|Lua(?:Hook(?:AccessChecker|AuthChecker|CheckUserID|Fixups|InsertFilter|Log|MapToStorage|TranslateName|TypeChecker)|Inherit|InputFilter|MapHandler|OutputFilter|PackageCPath|PackagePath|QuickHandler|Root|Scope)|Max(?:ConnectionsPerChild|KeepAliveRequests|MemFree|RangeOverlaps|RangeReversals|Ranges|RequestWorkers|SpareServers|SpareThreads|Threads)|MergeTrailers|MetaDir|MetaFiles|MetaSuffix|MimeMagicFile|MinSpareServers|MinSpareThreads|MMapFile|ModemStandard|ModMimeUsePathInfo|MultiviewsMatch|Mutex|NameVirtualHost|NoProxy|NWSSLTrustedCerts|NWSSLUpgradeable|Options|Order|OutputSed|PassEnv|PidFile|PrivilegesMode|Protocol|ProtocolEcho|Proxy(?:AddHeaders|BadHeader|Block|Domain|ErrorOverride|ExpressDBMFile|ExpressDBMType|ExpressEnable|FtpDirCharset|FtpEscapeWildcards|FtpListOnWildcard|HTML(?:BufSize|CharsetOut|DocType|Enable|Events|Extended|Fixups|Interp|Links|Meta|StripComments|URLMap)|IOBufferSize|MaxForwards|Pass(?:Inherit|InterpolateEnv|Match|Reverse|ReverseCookieDomain|ReverseCookiePath)?|PreserveHost|ReceiveBufferSize|Remote|RemoteMatch|Requests|SCGIInternalRedirect|SCGISendfile|Set|SourceAddress|Status|Timeout|Via)|ReadmeName|ReceiveBufferSize|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ReflectorHeader|RemoteIP(?:Header|InternalProxy|InternalProxyList|ProxiesHeader|TrustedProxy|TrustedProxyList)|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|RequestHeader|RequestReadTimeout|Require|Rewrite(?:Base|Cond|Engine|Map|Options|Rule)|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScoreBoardFile|Script(?:Alias|AliasMatch|InterpreterSource|Log|LogBuffer|LogLength|Sock)?|SecureListen|SeeRequestTail|SendBufferSize|Server(?:Admin|Alias|Limit|Name|Path|Root|Signature|Tokens)|Session(?:Cookie(?:Name|Name2|Remove)|Crypto(?:Cipher|Driver|Passphrase|PassphraseFile)|DBD(?:CookieName|CookieName2|CookieRemove|DeleteLabel|InsertLabel|PerUser|SelectLabel|UpdateLabel)|Env|Exclude|Header|Include|MaxAge)?|SetEnv|SetEnvIf|SetEnvIfExpr|SetEnvIfNoCase|SetHandler|SetInputFilter|SetOutputFilter|SSIEndTag|SSIErrorMsg|SSIETag|SSILastModified|SSILegacyExprParser|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|SSL(?:CACertificateFile|CACertificatePath|CADNRequestFile|CADNRequestPath|CARevocationCheck|CARevocationFile|CARevocationPath|CertificateChainFile|CertificateFile|CertificateKeyFile|CipherSuite|Compression|CryptoDevice|Engine|FIPS|HonorCipherOrder|InsecureRenegotiation|OCSP(?:DefaultResponder|Enable|OverrideResponder|ResponderTimeout|ResponseMaxAge|ResponseTimeSkew|UseRequestNonce)|OpenSSLConfCmd|Options|PassPhraseDialog|Protocol|Proxy(?:CACertificateFile|CACertificatePath|CARevocation(?:Check|File|Path)|CheckPeer(?:CN|Expire|Name)|CipherSuite|Engine|MachineCertificate(?:ChainFile|File|Path)|Protocol|Verify|VerifyDepth)|RandomSeed|RenegBufferSize|Require|RequireSSL|Session(?:Cache|CacheTimeout|TicketKeyFile|Tickets)|SRPUnknownUserSeed|SRPVerifierFile|Stapling(?:Cache|ErrorCacheTimeout|FakeTryLater|ForceURL|ResponderTimeout|ResponseMaxAge|ResponseTimeSkew|ReturnResponderErrors|StandardCacheTimeout)|StrictSNIVHostCheck|UserName|UseStapling|VerifyClient|VerifyDepth)|StartServers|StartThreads|Substitute|Suexec|SuexecUserGroup|ThreadLimit|ThreadsPerChild|ThreadStackSize|TimeOut|TraceEnable|TransferLog|TypesConfig|UnDefine|UndefMacro|UnsetEnv|Use|UseCanonicalName|UseCanonicalPhysicalPort|User|UserDir|VHostCGIMode|VHostCGIPrivs|VHostGroup|VHostPrivs|VHostSecure|VHostUser|Virtual(?:DocumentRoot|ScriptAlias)(?:IP)?|WatchdogInterval|XBitHack|xml2EncAlias|xml2EncDefault|xml2StartParse)\b/im,lookbehind:!0,alias:"property"},"directive-block":{pattern:/<\/?\b(?:Auth[nz]ProviderAlias|Directory|DirectoryMatch|Else|ElseIf|Files|FilesMatch|If|IfDefine|IfModule|IfVersion|Limit|LimitExcept|Location|LocationMatch|Macro|Proxy|Require(?:All|Any|None)|VirtualHost)\b.*>/i,inside:{"directive-block":{pattern:/^<\/?\w+/,inside:{punctuation:/^<\/?/},alias:"tag"},"directive-block-parameter":{pattern:/.*[^>]/,inside:{punctuation:/:/,string:{pattern:/("|').*\1/,inside:{variable:/[$%]\{?(?:\w\.?[-+:]?)+\}?/}}},alias:"attr-value"},punctuation:/>/},alias:"tag"},"directive-flags":{pattern:/\[(?:[\w=],?)+\]/,alias:"keyword"},string:{pattern:/("|').*\1/,inside:{variable:/[$%]\{?(?:\w\.?[-+:]?)+\}?/}},variable:/[$%]\{?(?:\w\.?[-+:]?)+\}?/,regex:/\^?.*\$|\^.*\$?/}}return Zs}var Qs,Uy;function Bm(){if(Uy)return Qs;Uy=1,Qs=e,e.displayName="sql",e.aliases=[];function e(t){t.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/}}return Qs}var Js,By;function j$(){if(By)return Js;By=1;var e=Bm();Js=t,t.displayName="apex",t.aliases=[];function t(n){n.register(e),function(r){var a=/\b(?:(?:after|before)(?=\s+[a-z])|abstract|activate|and|any|array|as|asc|autonomous|begin|bigdecimal|blob|boolean|break|bulk|by|byte|case|cast|catch|char|class|collect|commit|const|continue|currency|date|datetime|decimal|default|delete|desc|do|double|else|end|enum|exception|exit|export|extends|final|finally|float|for|from|get(?=\s*[{};])|global|goto|group|having|hint|if|implements|import|in|inner|insert|instanceof|int|integer|interface|into|join|like|limit|list|long|loop|map|merge|new|not|null|nulls|number|object|of|on|or|outer|override|package|parallel|pragma|private|protected|public|retrieve|return|rollback|select|set|short|sObject|sort|static|string|super|switch|synchronized|system|testmethod|then|this|throw|time|transaction|transient|trigger|try|undelete|update|upsert|using|virtual|void|webservice|when|where|while|(?:inherited|with|without)\s+sharing)\b/i,i=/\b(?:(?=[a-z_]\w*\s*[<\[])|(?!))[A-Z_]\w*(?:\s*\.\s*[A-Z_]\w*)*\b(?:\s*(?:\[\s*\]|<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>))*/.source.replace(//g,function(){return a.source});function o(l){return RegExp(l.replace(//g,function(){return i}),"i")}var s={keyword:a,punctuation:/[()\[\]{};,:.<>]/};r.languages.apex={comment:r.languages.clike.comment,string:r.languages.clike.string,sql:{pattern:/((?:[=,({:]|\breturn)\s*)\[[^\[\]]*\]/i,lookbehind:!0,greedy:!0,alias:"language-sql",inside:r.languages.sql},annotation:{pattern:/@\w+\b/,alias:"punctuation"},"class-name":[{pattern:o(/(\b(?:class|enum|extends|implements|instanceof|interface|new|trigger\s+\w+\s+on)\s+)/.source),lookbehind:!0,inside:s},{pattern:o(/(\(\s*)(?=\s*\)\s*[\w(])/.source),lookbehind:!0,inside:s},{pattern:o(/(?=\s*\w+\s*[;=,(){:])/.source),inside:s}],trigger:{pattern:/(\btrigger\s+)\w+\b/i,lookbehind:!0,alias:"class-name"},keyword:a,function:/\b[a-z_]\w*(?=\s*\()/i,boolean:/\b(?:false|true)\b/i,number:/(?:\B\.\d+|\b\d+(?:\.\d+|L)?)\b/i,operator:/[!=](?:==?)?|\?\.?|&&|\|\||--|\+\+|[-+*/^&|]=?|:|<{1,3}=?/,punctuation:/[()\[\]{};,.]/}}(n)}return Js}var el,$y;function H$(){if($y)return el;$y=1,el=e,e.displayName="apl",e.aliases=[];function e(t){t.languages.apl={comment:/(?:⍝|#[! ]).*$/m,string:{pattern:/'(?:[^'\r\n]|'')*'/,greedy:!0},number:/¯?(?:\d*\.?\b\d+(?:e[+¯]?\d+)?|¯|∞)(?:j¯?(?:(?:\d+(?:\.\d+)?|\.\d+)(?:e[+¯]?\d+)?|¯|∞))?/i,statement:/:[A-Z][a-z][A-Za-z]*\b/,"system-function":{pattern:/⎕[A-Z]+/i,alias:"function"},constant:/[⍬⌾#⎕⍞]/,function:/[-+×÷⌈⌊∣|⍳⍸?*⍟○!⌹<≤=>≥≠≡≢∊⍷∪∩~∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⊆⊇⌷⍋⍒⊤⊥⍕⍎⊣⊢⍁⍂≈⍯↗¤→]/,"monadic-operator":{pattern:/[\\\/⌿⍀¨⍨⌶&∥]/,alias:"operator"},"dyadic-operator":{pattern:/[.⍣⍠⍤∘⌸@⌺⍥]/,alias:"operator"},assignment:{pattern:/←/,alias:"keyword"},punctuation:/[\[;\]()◇⋄]/,dfn:{pattern:/[{}⍺⍵⍶⍹∇⍫:]/,alias:"builtin"}}}return el}var tl,zy;function V$(){if(zy)return tl;zy=1,tl=e,e.displayName="applescript",e.aliases=[];function e(t){t.languages.applescript={comment:[/\(\*(?:\(\*(?:[^*]|\*(?!\)))*\*\)|(?!\(\*)[\s\S])*?\*\)/,/--.+/,/#.+/],string:/"(?:\\.|[^"\\\r\n])*"/,number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e-?\d+)?\b/i,operator:[/[&=≠≤≥*+\-\/÷^]|[<>]=?/,/\b(?:(?:begin|end|start)s? with|(?:contains?|(?:does not|doesn't) contain)|(?:is|isn't|is not) (?:contained by|in)|(?:(?:is|isn't|is not) )?(?:greater|less) than(?: or equal)?(?: to)?|(?:comes|(?:does not|doesn't) come) (?:after|before)|(?:is|isn't|is not) equal(?: to)?|(?:(?:does not|doesn't) equal|equal to|equals|is not|isn't)|(?:a )?(?:ref(?: to)?|reference to)|(?:and|as|div|mod|not|or))\b/],keyword:/\b(?:about|above|after|against|apart from|around|aside from|at|back|before|beginning|behind|below|beneath|beside|between|but|by|considering|continue|copy|does|eighth|else|end|equal|error|every|exit|false|fifth|first|for|fourth|from|front|get|given|global|if|ignoring|in|instead of|into|is|it|its|last|local|me|middle|my|ninth|of|on|onto|out of|over|prop|property|put|repeat|return|returning|second|set|seventh|since|sixth|some|tell|tenth|that|the|then|third|through|thru|timeout|times|to|transaction|true|try|until|where|while|whose|with|without)\b/,"class-name":/\b(?:POSIX file|RGB color|alias|application|boolean|centimeters|centimetres|class|constant|cubic centimeters|cubic centimetres|cubic feet|cubic inches|cubic meters|cubic metres|cubic yards|date|degrees Celsius|degrees Fahrenheit|degrees Kelvin|feet|file|gallons|grams|inches|integer|kilograms|kilometers|kilometres|list|liters|litres|meters|metres|miles|number|ounces|pounds|quarts|real|record|reference|script|square feet|square kilometers|square kilometres|square meters|square metres|square miles|square yards|text|yards)\b/,punctuation:/[{}():,¬«»《》]/}}return tl}var nl,Gy;function W$(){if(Gy)return nl;Gy=1,nl=e,e.displayName="aql",e.aliases=[];function e(t){t.languages.aql={comment:/\/\/.*|\/\*[\s\S]*?\*\//,property:{pattern:/([{,]\s*)(?:(?!\d)\w+|(["'´`])(?:(?!\2)[^\\\r\n]|\\.)*\2)(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(["'])(?:(?!\1)[^\\\r\n]|\\.)*\1/,greedy:!0},identifier:{pattern:/([´`])(?:(?!\1)[^\\\r\n]|\\.)*\1/,greedy:!0},variable:/@@?\w+/,keyword:[{pattern:/(\bWITH\s+)COUNT(?=\s+INTO\b)/i,lookbehind:!0},/\b(?:AGGREGATE|ALL|AND|ANY|ASC|COLLECT|DESC|DISTINCT|FILTER|FOR|GRAPH|IN|INBOUND|INSERT|INTO|K_PATHS|K_SHORTEST_PATHS|LET|LIKE|LIMIT|NONE|NOT|NULL|OR|OUTBOUND|REMOVE|REPLACE|RETURN|SHORTEST_PATH|SORT|UPDATE|UPSERT|WINDOW|WITH)\b/i,{pattern:/(^|[^\w.[])(?:KEEP|PRUNE|SEARCH|TO)\b/i,lookbehind:!0},{pattern:/(^|[^\w.[])(?:CURRENT|NEW|OLD)\b/,lookbehind:!0},{pattern:/\bOPTIONS(?=\s*\{)/i}],function:/\b(?!\d)\w+(?=\s*\()/,boolean:/\b(?:false|true)\b/i,range:{pattern:/\.\./,alias:"operator"},number:[/\b0b[01]+/i,/\b0x[0-9a-f]+/i,/(?:\B\.\d+|\b(?:0|[1-9]\d*)(?:\.\d+)?)(?:e[+-]?\d+)?/i],operator:/\*{2,}|[=!]~|[!=<>]=?|&&|\|\||[-+*/%]/,punctuation:/::|[?.:,;()[\]{}]/}}return nl}var rl,qy;function tr(){if(qy)return rl;qy=1,rl=e,e.displayName="c",e.aliases=[];function e(t){t.languages.c=t.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),t.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),t.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},t.languages.c.string],char:t.languages.c.char,comment:t.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:t.languages.c}}}}),t.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete t.languages.c.boolean}return rl}var al,jy;function $m(){if(jy)return al;jy=1;var e=tr();al=t,t.displayName="cpp",t.aliases=[];function t(n){n.register(e),function(r){var a=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,i=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,function(){return a.source});r.languages.cpp=r.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,function(){return a.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:a,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),r.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,function(){return i})+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),r.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:r.languages.cpp}}}}),r.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),r.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:r.languages.extend("cpp",{})}}),r.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},r.languages.cpp["base-clause"])}(n)}return al}var il,Hy;function Y$(){if(Hy)return il;Hy=1;var e=$m();il=t,t.displayName="arduino",t.aliases=["ino"];function t(n){n.register(e),n.languages.arduino=n.languages.extend("cpp",{keyword:/\b(?:String|array|bool|boolean|break|byte|case|catch|continue|default|do|double|else|finally|for|function|goto|if|in|instanceof|int|integer|long|loop|new|null|return|setup|string|switch|throw|try|void|while|word)\b/,constant:/\b(?:ANALOG_MESSAGE|DEFAULT|DIGITAL_MESSAGE|EXTERNAL|FIRMATA_STRING|HIGH|INPUT|INPUT_PULLUP|INTERNAL|INTERNAL1V1|INTERNAL2V56|LED_BUILTIN|LOW|OUTPUT|REPORT_ANALOG|REPORT_DIGITAL|SET_PIN_MODE|SYSEX_START|SYSTEM_RESET)\b/,builtin:/\b(?:Audio|BSSID|Bridge|Client|Console|EEPROM|Esplora|EsploraTFT|Ethernet|EthernetClient|EthernetServer|EthernetUDP|File|FileIO|FileSystem|Firmata|GPRS|GSM|GSMBand|GSMClient|GSMModem|GSMPIN|GSMScanner|GSMServer|GSMVoiceCall|GSM_SMS|HttpClient|IPAddress|IRread|Keyboard|KeyboardController|LiquidCrystal|LiquidCrystal_I2C|Mailbox|Mouse|MouseController|PImage|Process|RSSI|RobotControl|RobotMotor|SD|SPI|SSID|Scheduler|Serial|Server|Servo|SoftwareSerial|Stepper|Stream|TFT|Task|USBHost|WiFi|WiFiClient|WiFiServer|WiFiUDP|Wire|YunClient|YunServer|abs|addParameter|analogRead|analogReadResolution|analogReference|analogWrite|analogWriteResolution|answerCall|attach|attachGPRS|attachInterrupt|attached|autoscroll|available|background|beep|begin|beginPacket|beginSD|beginSMS|beginSpeaker|beginTFT|beginTransmission|beginWrite|bit|bitClear|bitRead|bitSet|bitWrite|blink|blinkVersion|buffer|changePIN|checkPIN|checkPUK|checkReg|circle|cityNameRead|cityNameWrite|clear|clearScreen|click|close|compassRead|config|connect|connected|constrain|cos|countryNameRead|countryNameWrite|createChar|cursor|debugPrint|delay|delayMicroseconds|detach|detachInterrupt|digitalRead|digitalWrite|disconnect|display|displayLogos|drawBMP|drawCompass|encryptionType|end|endPacket|endSMS|endTransmission|endWrite|exists|exitValue|fill|find|findUntil|flush|gatewayIP|get|getAsynchronously|getBand|getButton|getCurrentCarrier|getIMEI|getKey|getModifiers|getOemKey|getPINUsed|getResult|getSignalStrength|getSocket|getVoiceCallStatus|getXChange|getYChange|hangCall|height|highByte|home|image|interrupts|isActionDone|isDirectory|isListening|isPIN|isPressed|isValid|keyPressed|keyReleased|keyboardRead|knobRead|leftToRight|line|lineFollowConfig|listen|listenOnLocalhost|loadImage|localIP|lowByte|macAddress|maintain|map|max|messageAvailable|micros|millis|min|mkdir|motorsStop|motorsWrite|mouseDragged|mouseMoved|mousePressed|mouseReleased|move|noAutoscroll|noBlink|noBuffer|noCursor|noDisplay|noFill|noInterrupts|noListenOnLocalhost|noStroke|noTone|onReceive|onRequest|open|openNextFile|overflow|parseCommand|parseFloat|parseInt|parsePacket|pauseMode|peek|pinMode|playFile|playMelody|point|pointTo|position|pow|prepare|press|print|printFirmwareVersion|printVersion|println|process|processInput|pulseIn|put|random|randomSeed|read|readAccelerometer|readBlue|readButton|readBytes|readBytesUntil|readGreen|readJoystickButton|readJoystickSwitch|readJoystickX|readJoystickY|readLightSensor|readMessage|readMicrophone|readNetworks|readRed|readSlider|readString|readStringUntil|readTemperature|ready|rect|release|releaseAll|remoteIP|remoteNumber|remotePort|remove|requestFrom|retrieveCallingNumber|rewindDirectory|rightToLeft|rmdir|robotNameRead|robotNameWrite|run|runAsynchronously|runShellCommand|runShellCommandAsynchronously|running|scanNetworks|scrollDisplayLeft|scrollDisplayRight|seek|sendAnalog|sendDigitalPortPair|sendDigitalPorts|sendString|sendSysex|serialEvent|setBand|setBitOrder|setClockDivider|setCursor|setDNS|setDataMode|setFirmwareVersion|setMode|setPINUsed|setSpeed|setTextSize|setTimeout|shiftIn|shiftOut|shutdown|sin|size|sqrt|startLoop|step|stop|stroke|subnetMask|switchPIN|tan|tempoWrite|text|tone|transfer|tuneWrite|turn|updateIR|userNameRead|userNameWrite|voiceCall|waitContinue|width|write|writeBlue|writeGreen|writeJSON|writeMessage|writeMicroseconds|writeRGB|writeRed|yield)\b/}),n.languages.ino=n.languages.arduino}return il}var ol,Vy;function K$(){if(Vy)return ol;Vy=1,ol=e,e.displayName="arff",e.aliases=[];function e(t){t.languages.arff={comment:/%.*/,string:{pattern:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},keyword:/@(?:attribute|data|end|relation)\b/i,number:/\b\d+(?:\.\d+)?\b/,punctuation:/[{},]/}}return ol}var sl,Wy;function X$(){if(Wy)return sl;Wy=1,sl=e,e.displayName="asciidoc",e.aliases=["adoc"];function e(t){(function(n){var r={pattern:/(^[ \t]*)\[(?!\[)(?:(["'$`])(?:(?!\2)[^\\]|\\.)*\2|\[(?:[^\[\]\\]|\\.)*\]|[^\[\]\\"'$`]|\\.)*\]/m,lookbehind:!0,inside:{quoted:{pattern:/([$`])(?:(?!\1)[^\\]|\\.)*\1/,inside:{punctuation:/^[$`]|[$`]$/}},interpreted:{pattern:/'(?:[^'\\]|\\.)*'/,inside:{punctuation:/^'|'$/}},string:/"(?:[^"\\]|\\.)*"/,variable:/\w+(?==)/,punctuation:/^\[|\]$|,/,operator:/=/,"attr-value":/(?!^\s+$).+/}},a=n.languages.asciidoc={"comment-block":{pattern:/^(\/{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1/m,alias:"comment"},table:{pattern:/^\|={3,}(?:(?:\r?\n|\r(?!\n)).*)*?(?:\r?\n|\r)\|={3,}$/m,inside:{specifiers:{pattern:/(?:(?:(?:\d+(?:\.\d+)?|\.\d+)[+*](?:[<^>](?:\.[<^>])?|\.[<^>])?|[<^>](?:\.[<^>])?|\.[<^>])[a-z]*|[a-z]+)(?=\|)/,alias:"attr-value"},punctuation:{pattern:/(^|[^\\])[|!]=*/,lookbehind:!0}}},"passthrough-block":{pattern:/^(\+{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m,inside:{punctuation:/^\++|\++$/}},"literal-block":{pattern:/^(-{4,}|\.{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m,inside:{punctuation:/^(?:-+|\.+)|(?:-+|\.+)$/}},"other-block":{pattern:/^(--|\*{4,}|_{4,}|={4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m,inside:{punctuation:/^(?:-+|\*+|_+|=+)|(?:-+|\*+|_+|=+)$/}},"list-punctuation":{pattern:/(^[ \t]*)(?:-|\*{1,5}|\.{1,5}|(?:[a-z]|\d+)\.|[xvi]+\))(?= )/im,lookbehind:!0,alias:"punctuation"},"list-label":{pattern:/(^[ \t]*)[a-z\d].+(?::{2,4}|;;)(?=\s)/im,lookbehind:!0,alias:"symbol"},"indented-block":{pattern:/((\r?\n|\r)\2)([ \t]+)\S.*(?:(?:\r?\n|\r)\3.+)*(?=\2{2}|$)/,lookbehind:!0},comment:/^\/\/.*/m,title:{pattern:/^.+(?:\r?\n|\r)(?:={3,}|-{3,}|~{3,}|\^{3,}|\+{3,})$|^={1,5} .+|^\.(?![\s.]).*/m,alias:"important",inside:{punctuation:/^(?:\.|=+)|(?:=+|-+|~+|\^+|\++)$/}},"attribute-entry":{pattern:/^:[^:\r\n]+:(?: .*?(?: \+(?:\r?\n|\r).*?)*)?$/m,alias:"tag"},attributes:r,hr:{pattern:/^'{3,}$/m,alias:"punctuation"},"page-break":{pattern:/^<{3,}$/m,alias:"punctuation"},admonition:{pattern:/^(?:CAUTION|IMPORTANT|NOTE|TIP|WARNING):/m,alias:"keyword"},callout:[{pattern:/(^[ \t]*)/m,lookbehind:!0,alias:"symbol"},{pattern:/<\d+>/,alias:"symbol"}],macro:{pattern:/\b[a-z\d][a-z\d-]*::?(?:[^\s\[\]]*\[(?:[^\]\\"']|(["'])(?:(?!\1)[^\\]|\\.)*\1|\\.)*\])/,inside:{function:/^[a-z\d-]+(?=:)/,punctuation:/^::?/,attributes:{pattern:/(?:\[(?:[^\]\\"']|(["'])(?:(?!\1)[^\\]|\\.)*\1|\\.)*\])/,inside:r.inside}}},inline:{pattern:/(^|[^\\])(?:(?:\B\[(?:[^\]\\"']|(["'])(?:(?!\2)[^\\]|\\.)*\2|\\.)*\])?(?:\b_(?!\s)(?: _|[^_\\\r\n]|\\.)+(?:(?:\r?\n|\r)(?: _|[^_\\\r\n]|\\.)+)*_\b|\B``(?!\s).+?(?:(?:\r?\n|\r).+?)*''\B|\B`(?!\s)(?:[^`'\s]|\s+\S)+['`]\B|\B(['*+#])(?!\s)(?: \3|(?!\3)[^\\\r\n]|\\.)+(?:(?:\r?\n|\r)(?: \3|(?!\3)[^\\\r\n]|\\.)+)*\3\B)|(?:\[(?:[^\]\\"']|(["'])(?:(?!\4)[^\\]|\\.)*\4|\\.)*\])?(?:(__|\*\*|\+\+\+?|##|\$\$|[~^]).+?(?:(?:\r?\n|\r).+?)*\5|\{[^}\r\n]+\}|\[\[\[?.+?(?:(?:\r?\n|\r).+?)*\]?\]\]|<<.+?(?:(?:\r?\n|\r).+?)*>>|\(\(\(?.+?(?:(?:\r?\n|\r).+?)*\)?\)\)))/m,lookbehind:!0,inside:{attributes:r,url:{pattern:/^(?:\[\[\[?.+?\]?\]\]|<<.+?>>)$/,inside:{punctuation:/^(?:\[\[\[?|<<)|(?:\]\]\]?|>>)$/}},"attribute-ref":{pattern:/^\{.+\}$/,inside:{variable:{pattern:/(^\{)[a-z\d,+_-]+/,lookbehind:!0},operator:/^[=?!#%@$]|!(?=[:}])/,punctuation:/^\{|\}$|::?/}},italic:{pattern:/^(['_])[\s\S]+\1$/,inside:{punctuation:/^(?:''?|__?)|(?:''?|__?)$/}},bold:{pattern:/^\*[\s\S]+\*$/,inside:{punctuation:/^\*\*?|\*\*?$/}},punctuation:/^(?:``?|\+{1,3}|##?|\$\$|[~^]|\(\(\(?)|(?:''?|\+{1,3}|##?|\$\$|[~^`]|\)?\)\))$/}},replacement:{pattern:/\((?:C|R|TM)\)/,alias:"builtin"},entity:/&#?[\da-z]{1,8};/i,"line-continuation":{pattern:/(^| )\+$/m,lookbehind:!0,alias:"punctuation"}};function i(o){o=o.split(" ");for(var s={},l=0,u=o.length;l>=?|<<=?|&&?|\|\|?|[-+*/%&|^!=<>?]=?/,punctuation:/[(),:]/}}return ul}var cl,Xy;function Xo(){if(Xy)return cl;Xy=1,cl=e,e.displayName="csharp",e.aliases=["dotnet","cs"];function e(t){(function(n){function r(P,G){return P.replace(/<<(\d+)>>/g,function(A,Q){return"(?:"+G[+Q]+")"})}function a(P,G,A){return RegExp(r(P,G),"")}function i(P,G){for(var A=0;A>/g,function(){return"(?:"+P+")"});return P.replace(/<>/g,"[^\\s\\S]")}var o={type:"bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",typeDeclaration:"class enum interface record struct",contextual:"add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",other:"abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield"};function s(P){return"\\b(?:"+P.trim().replace(/ /g,"|")+")\\b"}var l=s(o.typeDeclaration),u=RegExp(s(o.type+" "+o.typeDeclaration+" "+o.contextual+" "+o.other)),d=s(o.typeDeclaration+" "+o.contextual+" "+o.other),c=s(o.type+" "+o.typeDeclaration+" "+o.other),f=i(/<(?:[^<>;=+\-*/%&|^]|<>)*>/.source,2),p=i(/\((?:[^()]|<>)*\)/.source,2),h=/@?\b[A-Za-z_]\w*\b/.source,y=r(/<<0>>(?:\s*<<1>>)?/.source,[h,f]),T=r(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source,[d,y]),b=/\[\s*(?:,\s*)*\]/.source,g=r(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source,[T,b]),m=r(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source,[f,p,b]),v=r(/\(<<0>>+(?:,<<0>>+)+\)/.source,[m]),_=r(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source,[v,T,b]),E={keyword:u,punctuation:/[<>()?,.:[\]]/},R=/'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source,C=/"(?:\\.|[^\\"\r\n])*"/.source,N=/@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;n.languages.csharp=n.languages.extend("clike",{string:[{pattern:a(/(^|[^$\\])<<0>>/.source,[N]),lookbehind:!0,greedy:!0},{pattern:a(/(^|[^@$\\])<<0>>/.source,[C]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:a(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source,[T]),lookbehind:!0,inside:E},{pattern:a(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source,[h,_]),lookbehind:!0,inside:E},{pattern:a(/(\busing\s+)<<0>>(?=\s*=)/.source,[h]),lookbehind:!0},{pattern:a(/(\b<<0>>\s+)<<1>>/.source,[l,y]),lookbehind:!0,inside:E},{pattern:a(/(\bcatch\s*\(\s*)<<0>>/.source,[T]),lookbehind:!0,inside:E},{pattern:a(/(\bwhere\s+)<<0>>/.source,[h]),lookbehind:!0},{pattern:a(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source,[g]),lookbehind:!0,inside:E},{pattern:a(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source,[_,c,h]),inside:E}],keyword:u,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),n.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),n.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:a(/([(,]\s*)<<0>>(?=\s*:)/.source,[h]),lookbehind:!0,alias:"punctuation"}}),n.languages.insertBefore("csharp","class-name",{namespace:{pattern:a(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source,[h]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:a(/(\b(?:default|sizeof|typeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source,[p]),lookbehind:!0,alias:"class-name",inside:E},"return-type":{pattern:a(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source,[_,T]),inside:E,alias:"class-name"},"constructor-invocation":{pattern:a(/(\bnew\s+)<<0>>(?=\s*[[({])/.source,[_]),lookbehind:!0,inside:E,alias:"class-name"},"generic-method":{pattern:a(/<<0>>\s*<<1>>(?=\s*\()/.source,[h,f]),inside:{function:a(/^<<0>>/.source,[h]),generic:{pattern:RegExp(f),alias:"class-name",inside:E}}},"type-list":{pattern:a(/\b((?:<<0>>\s+<<1>>|record\s+<<1>>\s*<<5>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>|<<1>>\s*<<5>>|<<6>>)(?:\s*,\s*(?:<<3>>|<<4>>|<<6>>))*(?=\s*(?:where|[{;]|=>|$))/.source,[l,y,h,_,u.source,p,/\bnew\s*\(\s*\)/.source]),lookbehind:!0,inside:{"record-arguments":{pattern:a(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source,[y,p]),lookbehind:!0,greedy:!0,inside:n.languages.csharp},keyword:u,"class-name":{pattern:RegExp(_),greedy:!0,inside:E},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var k=C+"|"+R,I=r(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source,[k]),D=i(r(/[^"'/()]|<<0>>|\(<>*\)/.source,[I]),2),q=/\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source,$=r(/<<0>>(?:\s*\(<<1>>*\))?/.source,[T,D]);n.languages.insertBefore("csharp","class-name",{attribute:{pattern:a(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source,[q,$]),lookbehind:!0,greedy:!0,inside:{target:{pattern:a(/^<<0>>(?=\s*:)/.source,[q]),alias:"keyword"},"attribute-arguments":{pattern:a(/\(<<0>>*\)/.source,[D]),inside:n.languages.csharp},"class-name":{pattern:RegExp(T),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var z=/:[^}\r\n]+/.source,H=i(r(/[^"'/()]|<<0>>|\(<>*\)/.source,[I]),2),Y=r(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[H,z]),x=i(r(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<>*\)/.source,[k]),2),M=r(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[x,z]);function S(P,G){return{interpolation:{pattern:a(/((?:^|[^{])(?:\{\{)*)<<0>>/.source,[P]),lookbehind:!0,inside:{"format-string":{pattern:a(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source,[G,z]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:n.languages.csharp}}},string:/[\s\S]+/}}n.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:a(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source,[Y]),lookbehind:!0,greedy:!0,inside:S(Y,H)},{pattern:a(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source,[M]),lookbehind:!0,greedy:!0,inside:S(M,x)}],char:{pattern:RegExp(R),greedy:!0}}),n.languages.dotnet=n.languages.cs=n.languages.csharp})(t)}return cl}var dl,Zy;function J$(){if(Zy)return dl;Zy=1;var e=Xo();dl=t,t.displayName="aspnet",t.aliases=[];function t(n){n.register(e),n.languages.aspnet=n.languages.extend("markup",{"page-directive":{pattern:/<%\s*@.*%>/,alias:"tag",inside:{"page-directive":{pattern:/<%\s*@\s*(?:Assembly|Control|Implements|Import|Master(?:Type)?|OutputCache|Page|PreviousPageType|Reference|Register)?|%>/i,alias:"tag"},rest:n.languages.markup.tag.inside}},directive:{pattern:/<%.*%>/,alias:"tag",inside:{directive:{pattern:/<%\s*?[$=%#:]{0,2}|%>/,alias:"tag"},rest:n.languages.csharp}}}),n.languages.aspnet.tag.pattern=/<(?!%)\/?[^\s>\/]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/,n.languages.insertBefore("inside","punctuation",{directive:n.languages.aspnet.directive},n.languages.aspnet.tag.inside["attr-value"]),n.languages.insertBefore("aspnet","comment",{"asp-comment":{pattern:/<%--[\s\S]*?--%>/,alias:["asp","comment"]}}),n.languages.insertBefore("aspnet",n.languages.javascript?"script":"tag",{"asp-script":{pattern:/(]*>)[\s\S]*?(?=<\/script>)/i,lookbehind:!0,alias:["asp","script"],inside:n.languages.csharp||{}}})}return dl}var pl,Qy;function ez(){if(Qy)return pl;Qy=1,pl=e,e.displayName="autohotkey",e.aliases=[];function e(t){t.languages.autohotkey={comment:[{pattern:/(^|\s);.*/,lookbehind:!0},{pattern:/(^[\t ]*)\/\*(?:[\r\n](?![ \t]*\*\/)|[^\r\n])*(?:[\r\n][ \t]*\*\/)?/m,lookbehind:!0,greedy:!0}],tag:{pattern:/^([ \t]*)[^\s,`":]+(?=:[ \t]*$)/m,lookbehind:!0},string:/"(?:[^"\n\r]|"")*"/,variable:/%\w+%/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/\?|\/\/?=?|:=|\|[=|]?|&[=&]?|\+[=+]?|-[=-]?|\*[=*]?|<(?:<=?|>|=)?|>>?=?|[.^!=~]=?|\b(?:AND|NOT|OR)\b/,boolean:/\b(?:false|true)\b/,selector:/\b(?:AutoTrim|BlockInput|Break|Click|ClipWait|Continue|Control|ControlClick|ControlFocus|ControlGet|ControlGetFocus|ControlGetPos|ControlGetText|ControlMove|ControlSend|ControlSendRaw|ControlSetText|CoordMode|Critical|DetectHiddenText|DetectHiddenWindows|Drive|DriveGet|DriveSpaceFree|EnvAdd|EnvDiv|EnvGet|EnvMult|EnvSet|EnvSub|EnvUpdate|Exit|ExitApp|FileAppend|FileCopy|FileCopyDir|FileCreateDir|FileCreateShortcut|FileDelete|FileEncoding|FileGetAttrib|FileGetShortcut|FileGetSize|FileGetTime|FileGetVersion|FileInstall|FileMove|FileMoveDir|FileRead|FileReadLine|FileRecycle|FileRecycleEmpty|FileRemoveDir|FileSelectFile|FileSelectFolder|FileSetAttrib|FileSetTime|FormatTime|GetKeyState|Gosub|Goto|GroupActivate|GroupAdd|GroupClose|GroupDeactivate|Gui|GuiControl|GuiControlGet|Hotkey|ImageSearch|IniDelete|IniRead|IniWrite|Input|InputBox|KeyWait|ListHotkeys|ListLines|ListVars|Loop|Menu|MouseClick|MouseClickDrag|MouseGetPos|MouseMove|MsgBox|OnExit|OutputDebug|Pause|PixelGetColor|PixelSearch|PostMessage|Process|Progress|Random|RegDelete|RegRead|RegWrite|Reload|Repeat|Return|Run|RunAs|RunWait|Send|SendEvent|SendInput|SendMessage|SendMode|SendPlay|SendRaw|SetBatchLines|SetCapslockState|SetControlDelay|SetDefaultMouseSpeed|SetEnv|SetFormat|SetKeyDelay|SetMouseDelay|SetNumlockState|SetRegView|SetScrollLockState|SetStoreCapslockMode|SetTimer|SetTitleMatchMode|SetWinDelay|SetWorkingDir|Shutdown|Sleep|Sort|SoundBeep|SoundGet|SoundGetWaveVolume|SoundPlay|SoundSet|SoundSetWaveVolume|SplashImage|SplashTextOff|SplashTextOn|SplitPath|StatusBarGetText|StatusBarWait|StringCaseSense|StringGetPos|StringLeft|StringLen|StringLower|StringMid|StringReplace|StringRight|StringSplit|StringTrimLeft|StringTrimRight|StringUpper|Suspend|SysGet|Thread|ToolTip|Transform|TrayTip|URLDownloadToFile|WinActivate|WinActivateBottom|WinClose|WinGet|WinGetActiveStats|WinGetActiveTitle|WinGetClass|WinGetPos|WinGetText|WinGetTitle|WinHide|WinKill|WinMaximize|WinMenuSelectItem|WinMinimize|WinMinimizeAll|WinMinimizeAllUndo|WinMove|WinRestore|WinSet|WinSetTitle|WinShow|WinWait|WinWaitActive|WinWaitClose|WinWaitNotActive)\b/i,constant:/\b(?:a_ahkpath|a_ahkversion|a_appdata|a_appdatacommon|a_autotrim|a_batchlines|a_caretx|a_carety|a_computername|a_controldelay|a_cursor|a_dd|a_ddd|a_dddd|a_defaultmousespeed|a_desktop|a_desktopcommon|a_detecthiddentext|a_detecthiddenwindows|a_endchar|a_eventinfo|a_exitreason|a_fileencoding|a_formatfloat|a_formatinteger|a_gui|a_guicontrol|a_guicontrolevent|a_guievent|a_guiheight|a_guiwidth|a_guix|a_guiy|a_hour|a_iconfile|a_iconhidden|a_iconnumber|a_icontip|a_index|a_ipaddress1|a_ipaddress2|a_ipaddress3|a_ipaddress4|a_is64bitos|a_isadmin|a_iscompiled|a_iscritical|a_ispaused|a_issuspended|a_isunicode|a_keydelay|a_language|a_lasterror|a_linefile|a_linenumber|a_loopfield|a_loopfileattrib|a_loopfiledir|a_loopfileext|a_loopfilefullpath|a_loopfilelongpath|a_loopfilename|a_loopfileshortname|a_loopfileshortpath|a_loopfilesize|a_loopfilesizekb|a_loopfilesizemb|a_loopfiletimeaccessed|a_loopfiletimecreated|a_loopfiletimemodified|a_loopreadline|a_loopregkey|a_loopregname|a_loopregsubkey|a_loopregtimemodified|a_loopregtype|a_mday|a_min|a_mm|a_mmm|a_mmmm|a_mon|a_mousedelay|a_msec|a_mydocuments|a_now|a_nowutc|a_numbatchlines|a_ostype|a_osversion|a_priorhotkey|a_priorkey|a_programfiles|a_programs|a_programscommon|a_ptrsize|a_regview|a_screendpi|a_screenheight|a_screenwidth|a_scriptdir|a_scriptfullpath|a_scripthwnd|a_scriptname|a_sec|a_space|a_startmenu|a_startmenucommon|a_startup|a_startupcommon|a_stringcasesense|a_tab|a_temp|a_thisfunc|a_thishotkey|a_thislabel|a_thismenu|a_thismenuitem|a_thismenuitempos|a_tickcount|a_timeidle|a_timeidlephysical|a_timesincepriorhotkey|a_timesincethishotkey|a_titlematchmode|a_titlematchmodespeed|a_username|a_wday|a_windelay|a_windir|a_workingdir|a_yday|a_year|a_yweek|a_yyyy|clipboard|clipboardall|comspec|errorlevel|programfiles)\b/i,builtin:/\b(?:abs|acos|asc|asin|atan|ceil|chr|class|comobjactive|comobjarray|comobjconnect|comobjcreate|comobjerror|comobjflags|comobjget|comobjquery|comobjtype|comobjvalue|cos|dllcall|exp|fileexist|Fileopen|floor|format|il_add|il_create|il_destroy|instr|isfunc|islabel|IsObject|ln|log|ltrim|lv_add|lv_delete|lv_deletecol|lv_getcount|lv_getnext|lv_gettext|lv_insert|lv_insertcol|lv_modify|lv_modifycol|lv_setimagelist|mod|numget|numput|onmessage|regexmatch|regexreplace|registercallback|round|rtrim|sb_seticon|sb_setparts|sb_settext|sin|sqrt|strlen|strreplace|strsplit|substr|tan|tv_add|tv_delete|tv_get|tv_getchild|tv_getcount|tv_getnext|tv_getparent|tv_getprev|tv_getselection|tv_gettext|tv_modify|varsetcapacity|winactive|winexist|__Call|__Get|__New|__Set)\b/i,symbol:/\b(?:alt|altdown|altup|appskey|backspace|browser_back|browser_favorites|browser_forward|browser_home|browser_refresh|browser_search|browser_stop|bs|capslock|ctrl|ctrlbreak|ctrldown|ctrlup|del|delete|down|end|enter|esc|escape|f1|f10|f11|f12|f13|f14|f15|f16|f17|f18|f19|f2|f20|f21|f22|f23|f24|f3|f4|f5|f6|f7|f8|f9|home|ins|insert|joy1|joy10|joy11|joy12|joy13|joy14|joy15|joy16|joy17|joy18|joy19|joy2|joy20|joy21|joy22|joy23|joy24|joy25|joy26|joy27|joy28|joy29|joy3|joy30|joy31|joy32|joy4|joy5|joy6|joy7|joy8|joy9|joyaxes|joybuttons|joyinfo|joyname|joypov|joyr|joyu|joyv|joyx|joyy|joyz|lalt|launch_app1|launch_app2|launch_mail|launch_media|lbutton|lcontrol|lctrl|left|lshift|lwin|lwindown|lwinup|mbutton|media_next|media_play_pause|media_prev|media_stop|numlock|numpad0|numpad1|numpad2|numpad3|numpad4|numpad5|numpad6|numpad7|numpad8|numpad9|numpadadd|numpadclear|numpaddel|numpaddiv|numpaddot|numpaddown|numpadend|numpadenter|numpadhome|numpadins|numpadleft|numpadmult|numpadpgdn|numpadpgup|numpadright|numpadsub|numpadup|pgdn|pgup|printscreen|ralt|rbutton|rcontrol|rctrl|right|rshift|rwin|rwindown|rwinup|scrolllock|shift|shiftdown|shiftup|space|tab|up|volume_down|volume_mute|volume_up|wheeldown|wheelleft|wheelright|wheelup|xbutton1|xbutton2)\b/i,important:/#\b(?:AllowSameLineComments|ClipboardTimeout|CommentFlag|DerefChar|ErrorStdOut|EscapeChar|HotkeyInterval|HotkeyModifierTimeout|Hotstring|If|IfTimeout|IfWinActive|IfWinExist|IfWinNotActive|IfWinNotExist|Include|IncludeAgain|InputLevel|InstallKeybdHook|InstallMouseHook|KeyHistory|MaxHotkeysPerInterval|MaxMem|MaxThreads|MaxThreadsBuffer|MaxThreadsPerHotkey|MenuMaskKey|NoEnv|NoTrayIcon|Persistent|SingleInstance|UseHook|Warn|WinActivateForce)\b/i,keyword:/\b(?:Abort|AboveNormal|Add|ahk_class|ahk_exe|ahk_group|ahk_id|ahk_pid|All|Alnum|Alpha|AltSubmit|AltTab|AltTabAndMenu|AltTabMenu|AltTabMenuDismiss|AlwaysOnTop|AutoSize|Background|BackgroundTrans|BelowNormal|between|BitAnd|BitNot|BitOr|BitShiftLeft|BitShiftRight|BitXOr|Bold|Border|Button|ByRef|Catch|Checkbox|Checked|CheckedGray|Choose|ChooseString|Close|Color|ComboBox|Contains|ControlList|Count|Date|DateTime|Days|DDL|Default|DeleteAll|Delimiter|Deref|Destroy|Digit|Disable|Disabled|DropDownList|Edit|Eject|Else|Enable|Enabled|Error|Exist|Expand|ExStyle|FileSystem|Finally|First|Flash|Float|FloatFast|Focus|Font|for|global|Grid|Group|GroupBox|GuiClose|GuiContextMenu|GuiDropFiles|GuiEscape|GuiSize|Hdr|Hidden|Hide|High|HKCC|HKCR|HKCU|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_LOCAL_MACHINE|HKEY_USERS|HKLM|HKU|Hours|HScroll|Icon|IconSmall|ID|IDLast|If|IfEqual|IfExist|IfGreater|IfGreaterOrEqual|IfInString|IfLess|IfLessOrEqual|IfMsgBox|IfNotEqual|IfNotExist|IfNotInString|IfWinActive|IfWinExist|IfWinNotActive|IfWinNotExist|Ignore|ImageList|in|Integer|IntegerFast|Interrupt|is|italic|Join|Label|LastFound|LastFoundExist|Limit|Lines|List|ListBox|ListView|local|Lock|Logoff|Low|Lower|Lowercase|MainWindow|Margin|Maximize|MaximizeBox|MaxSize|Minimize|MinimizeBox|MinMax|MinSize|Minutes|MonthCal|Mouse|Move|Multi|NA|No|NoActivate|NoDefault|NoHide|NoIcon|NoMainWindow|norm|Normal|NoSort|NoSortHdr|NoStandard|Not|NoTab|NoTimers|Number|Off|Ok|On|OwnDialogs|Owner|Parse|Password|Picture|Pixel|Pos|Pow|Priority|ProcessName|Radio|Range|Read|ReadOnly|Realtime|Redraw|Region|REG_BINARY|REG_DWORD|REG_EXPAND_SZ|REG_MULTI_SZ|REG_SZ|Relative|Rename|Report|Resize|Restore|Retry|RGB|Screen|Seconds|Section|Serial|SetLabel|ShiftAltTab|Show|Single|Slider|SortDesc|Standard|static|Status|StatusBar|StatusCD|strike|Style|Submit|SysMenu|Tab2|TabStop|Text|Theme|Throw|Tile|ToggleCheck|ToggleEnable|ToolWindow|Top|Topmost|TransColor|Transparent|Tray|TreeView|Try|TryAgain|Type|UnCheck|underline|Unicode|Unlock|Until|UpDown|Upper|Uppercase|UseErrorLevel|Vis|VisFirst|Visible|VScroll|Wait|WaitClose|WantCtrlA|WantF2|WantReturn|While|Wrap|Xdigit|xm|xp|xs|Yes|ym|yp|ys)\b/i,function:/[^(); \t,\n+*\-=?>:\\\/<&%\[\]]+(?=\()/,punctuation:/[{}[\]():,]/}}return pl}var fl,Jy;function tz(){if(Jy)return fl;Jy=1,fl=e,e.displayName="autoit",e.aliases=[];function e(t){t.languages.autoit={comment:[/;.*/,{pattern:/(^[\t ]*)#(?:comments-start|cs)[\s\S]*?^[ \t]*#(?:ce|comments-end)/m,lookbehind:!0}],url:{pattern:/(^[\t ]*#include\s+)(?:<[^\r\n>]+>|"[^\r\n"]+")/m,lookbehind:!0},string:{pattern:/(["'])(?:\1\1|(?!\1)[^\r\n])*\1/,greedy:!0,inside:{variable:/([%$@])\w+\1/}},directive:{pattern:/(^[\t ]*)#[\w-]+/m,lookbehind:!0,alias:"keyword"},function:/\b\w+(?=\()/,variable:/[$@]\w+/,keyword:/\b(?:Case|Const|Continue(?:Case|Loop)|Default|Dim|Do|Else(?:If)?|End(?:Func|If|Select|Switch|With)|Enum|Exit(?:Loop)?|For|Func|Global|If|In|Local|Next|Null|ReDim|Select|Static|Step|Switch|Then|To|Until|Volatile|WEnd|While|With)\b/i,number:/\b(?:0x[\da-f]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)\b/i,boolean:/\b(?:False|True)\b/i,operator:/<[=>]?|[-+*\/=&>]=?|[?^]|\b(?:And|Not|Or)\b/i,punctuation:/[\[\]().,:]/}}return fl}var gl,eE;function nz(){if(eE)return gl;eE=1,gl=e,e.displayName="avisynth",e.aliases=["avs"];function e(t){(function(n){function r(d,c){return d.replace(/<<(\d+)>>/g,function(f,p){return c[+p]})}function a(d,c,f){return RegExp(r(d,c),f)}var i=/bool|clip|float|int|string|val/.source,o=[/is(?:bool|clip|float|int|string)|defined|(?:(?:internal)?function|var)?exists?/.source,/apply|assert|default|eval|import|nop|select|undefined/.source,/opt_(?:allowfloataudio|avipadscanlines|dwchannelmask|enable_(?:b64a|planartopackedrgb|v210|y3_10_10|y3_10_16)|usewaveextensible|vdubplanarhack)|set(?:cachemode|maxcpu|memorymax|planarlegacyalignment|workingdir)/.source,/hex(?:value)?|value/.source,/abs|ceil|continued(?:denominator|numerator)?|exp|floor|fmod|frac|log(?:10)?|max|min|muldiv|pi|pow|rand|round|sign|spline|sqrt/.source,/a?sinh?|a?cosh?|a?tan[2h]?/.source,/(?:bit(?:and|not|x?or|[lr]?shift[aslu]?|sh[lr]|sa[lr]|[lr]rotatel?|ro[rl]|te?st|set(?:count)?|cl(?:ea)?r|ch(?:an)?ge?))/.source,/average(?:[bgr]|chroma[uv]|luma)|(?:[rgb]|chroma[uv]|luma|rgb|[yuv](?=difference(?:fromprevious|tonext)))difference(?:fromprevious|tonext)?|[yuvrgb]plane(?:median|min|max|minmaxdifference)/.source,/getprocessinfo|logmsg|script(?:dir(?:utf8)?|file(?:utf8)?|name(?:utf8)?)|setlogparams/.source,/chr|(?:fill|find|left|mid|replace|rev|right)str|format|[lu]case|ord|str(?:cmpi?|fromutf8|len|toutf8)|time|trim(?:all|left|right)/.source,/isversionorgreater|version(?:number|string)/.source,/buildpixeltype|colorspacenametopixeltype/.source,/addautoloaddir|on(?:cpu|cuda)|prefetch|setfiltermtmode/.source].join("|"),s=[/has(?:audio|video)/.source,/height|width/.source,/frame(?:count|rate)|framerate(?:denominator|numerator)/.source,/getparity|is(?:field|frame)based/.source,/bitspercomponent|componentsize|hasalpha|is(?:planar(?:rgba?)?|interleaved|rgb(?:24|32|48|64)?|y(?:8|u(?:va?|y2))?|yv(?:12|16|24|411)|420|422|444|packedrgb)|numcomponents|pixeltype/.source,/audio(?:bits|channels|duration|length(?:[fs]|hi|lo)?|rate)|isaudio(?:float|int)/.source].join("|"),l=[/avi(?:file)?source|directshowsource|image(?:reader|source|sourceanim)|opendmlsource|segmented(?:avisource|directshowsource)|wavsource/.source,/coloryuv|convertbacktoyuy2|convertto(?:RGB(?:24|32|48|64)|(?:planar)?RGBA?|Y8?|YV(?:12|16|24|411)|YUVA?(?:411|420|422|444)|YUY2)|fixluminance|gr[ae]yscale|invert|levels|limiter|mergea?rgb|merge(?:chroma|luma)|rgbadjust|show(?:alpha|blue|green|red)|swapuv|tweak|[uv]toy8?|ytouv/.source,/(?:colorkey|reset)mask|layer|mask(?:hs)?|merge|overlay|subtract/.source,/addborders|(?:bicubic|bilinear|blackman|gauss|lanczos4|lanczos|point|sinc|spline(?:16|36|64))resize|crop(?:bottom)?|flip(?:horizontal|vertical)|(?:horizontal|vertical)?reduceby2|letterbox|skewrows|turn(?:180|left|right)/.source,/blur|fixbrokenchromaupsampling|generalconvolution|(?:spatial|temporal)soften|sharpen/.source,/trim|(?:un)?alignedsplice|(?:assume|assumescaled|change|convert)FPS|(?:delete|duplicate)frame|dissolve|fade(?:in|io|out)[02]?|freezeframe|interleave|loop|reverse|select(?:even|odd|(?:range)?every)/.source,/assume[bt]ff|assume(?:field|frame)based|bob|complementparity|doubleweave|peculiarblend|pulldown|separate(?:columns|fields|rows)|swapfields|weave(?:columns|rows)?/.source,/amplify(?:db)?|assumesamplerate|audiodub(?:ex)?|audiotrim|convertaudioto(?:(?:8|16|24|32)bit|float)|converttomono|delayaudio|ensurevbrmp3sync|get(?:left|right)?channel|kill(?:audio|video)|mergechannels|mixaudio|monotostereo|normalize|resampleaudio|ssrc|supereq|timestretch/.source,/animate|applyrange|conditional(?:filter|reader|select)|frameevaluate|scriptclip|tcp(?:server|source)|writefile(?:end|if|start)?/.source,/imagewriter/.source,/blackness|blankclip|colorbars(?:hd)?|compare|dumpfiltergraph|echo|histogram|info|messageclip|preroll|setgraphanalysis|show(?:framenumber|smpte|time)|showfiveversions|stack(?:horizontal|vertical)|subtitle|tone|version/.source].join("|"),u=[o,s,l].join("|");n.languages.avisynth={comment:[{pattern:/(^|[^\\])\[\*(?:[^\[*]|\[(?!\*)|\*(?!\])|\[\*(?:[^\[*]|\[(?!\*)|\*(?!\]))*\*\])*\*\]/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\$])#.*/,lookbehind:!0,greedy:!0}],argument:{pattern:a(/\b(?:<<0>>)\s+("?)\w+\1/.source,[i],"i"),inside:{keyword:/^\w+/}},"argument-label":{pattern:/([,(][\s\\]*)\w+\s*=(?!=)/,lookbehind:!0,inside:{"argument-name":{pattern:/^\w+/,alias:"punctuation"},punctuation:/=$/}},string:[{pattern:/"""[\s\S]*?"""/,greedy:!0},{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0,inside:{constant:{pattern:/\b(?:DEFAULT_MT_MODE|(?:MAINSCRIPT|PROGRAM|SCRIPT)DIR|(?:MACHINE|USER)_(?:CLASSIC|PLUS)_PLUGINS)\b/}}}],variable:/\b(?:last)\b/i,boolean:/\b(?:false|no|true|yes)\b/i,keyword:/\b(?:catch|else|for|function|global|if|return|try|while|__END__)\b/i,constant:/\bMT_(?:MULTI_INSTANCE|NICE_FILTER|SERIALIZED|SPECIAL_MT)\b/,"builtin-function":{pattern:a(/\b(?:<<0>>)\b/.source,[u],"i"),alias:"function"},"type-cast":{pattern:a(/\b(?:<<0>>)(?=\s*\()/.source,[i],"i"),alias:"keyword"},function:{pattern:/\b[a-z_]\w*(?=\s*\()|(\.)[a-z_]\w*\b/i,lookbehind:!0},"line-continuation":{pattern:/(^[ \t]*)\\|\\(?=[ \t]*$)/m,lookbehind:!0,alias:"punctuation"},number:/\B\$(?:[\da-f]{6}|[\da-f]{8})\b|(?:(?:\b|\B-)\d+(?:\.\d*)?\b|\B\.\d+\b)/i,operator:/\+\+?|[!=<>]=?|&&|\|\||[?:*/%-]/,punctuation:/[{}\[\]();,.]/},n.languages.avs=n.languages.avisynth})(t)}return gl}var ml,tE;function rz(){if(tE)return ml;tE=1,ml=e,e.displayName="avroIdl",e.aliases=[];function e(t){t.languages["avro-idl"]={comment:{pattern:/\/\/.*|\/\*[\s\S]*?\*\//,greedy:!0},string:{pattern:/(^|[^\\])"(?:[^\r\n"\\]|\\.)*"/,lookbehind:!0,greedy:!0},annotation:{pattern:/@(?:[$\w.-]|`[^\r\n`]+`)+/,greedy:!0,alias:"function"},"function-identifier":{pattern:/`[^\r\n`]+`(?=\s*\()/,greedy:!0,alias:"function"},identifier:{pattern:/`[^\r\n`]+`/,greedy:!0},"class-name":{pattern:/(\b(?:enum|error|protocol|record|throws)\b\s+)[$\w]+/,lookbehind:!0,greedy:!0},keyword:/\b(?:array|boolean|bytes|date|decimal|double|enum|error|false|fixed|float|idl|import|int|local_timestamp_ms|long|map|null|oneway|protocol|record|schema|string|throws|time_ms|timestamp_ms|true|union|uuid|void)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:[{pattern:/(^|[^\w.])-?(?:(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|0x(?:[a-f0-9]+(?:\.[a-f0-9]*)?|\.[a-f0-9]+)(?:p[+-]?\d+)?)[dfl]?(?![\w.])/i,lookbehind:!0},/-?\b(?:Infinity|NaN)\b/],operator:/=/,punctuation:/[()\[\]{}<>.:,;-]/},t.languages.avdl=t.languages["avro-idl"]}return ml}var hl,nE;function GR(){if(nE)return hl;nE=1,hl=e,e.displayName="bash",e.aliases=["shell"];function e(t){(function(n){var r="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",a={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},i={bash:a,environment:{pattern:RegExp("\\$"+r),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+r),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};n.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+r),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:i},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:a}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:i},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:i.entity}}],environment:{pattern:RegExp("\\$?"+r),alias:"constant"},variable:i.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},a.inside=n.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],s=i.variable[1].inside,l=0;l?^\w +\-.])*"/,greedy:!0},number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?/i,keyword:/\b(?:AS|BEEP|BLOAD|BSAVE|CALL(?: ABSOLUTE)?|CASE|CHAIN|CHDIR|CLEAR|CLOSE|CLS|COM|COMMON|CONST|DATA|DECLARE|DEF(?: FN| SEG|DBL|INT|LNG|SNG|STR)|DIM|DO|DOUBLE|ELSE|ELSEIF|END|ENVIRON|ERASE|ERROR|EXIT|FIELD|FILES|FOR|FUNCTION|GET|GOSUB|GOTO|IF|INPUT|INTEGER|IOCTL|KEY|KILL|LINE INPUT|LOCATE|LOCK|LONG|LOOP|LSET|MKDIR|NAME|NEXT|OFF|ON(?: COM| ERROR| KEY| TIMER)?|OPEN|OPTION BASE|OUT|POKE|PUT|READ|REDIM|REM|RESTORE|RESUME|RETURN|RMDIR|RSET|RUN|SELECT CASE|SHARED|SHELL|SINGLE|SLEEP|STATIC|STEP|STOP|STRING|SUB|SWAP|SYSTEM|THEN|TIMER|TO|TROFF|TRON|TYPE|UNLOCK|UNTIL|USING|VIEW PRINT|WAIT|WEND|WHILE|WRITE)(?:\$|\b)/i,function:/\b(?:ABS|ACCESS|ACOS|ANGLE|AREA|ARITHMETIC|ARRAY|ASIN|ASK|AT|ATN|BASE|BEGIN|BREAK|CAUSE|CEIL|CHR|CLIP|COLLATE|COLOR|CON|COS|COSH|COT|CSC|DATE|DATUM|DEBUG|DECIMAL|DEF|DEG|DEGREES|DELETE|DET|DEVICE|DISPLAY|DOT|ELAPSED|EPS|ERASABLE|EXLINE|EXP|EXTERNAL|EXTYPE|FILETYPE|FIXED|FP|GO|GRAPH|HANDLER|IDN|IMAGE|IN|INT|INTERNAL|IP|IS|KEYED|LBOUND|LCASE|LEFT|LEN|LENGTH|LET|LINE|LINES|LOG|LOG10|LOG2|LTRIM|MARGIN|MAT|MAX|MAXNUM|MID|MIN|MISSING|MOD|NATIVE|NUL|NUMERIC|OF|OPTION|ORD|ORGANIZATION|OUTIN|OUTPUT|PI|POINT|POINTER|POINTS|POS|PRINT|PROGRAM|PROMPT|RAD|RADIANS|RANDOMIZE|RECORD|RECSIZE|RECTYPE|RELATIVE|REMAINDER|REPEAT|REST|RETRY|REWRITE|RIGHT|RND|ROUND|RTRIM|SAME|SEC|SELECT|SEQUENTIAL|SET|SETTER|SGN|SIN|SINH|SIZE|SKIP|SQR|STANDARD|STATUS|STR|STREAM|STYLE|TAB|TAN|TANH|TEMPLATE|TEXT|THERE|TIME|TIMEOUT|TRACE|TRANSFORM|TRUNCATE|UBOUND|UCASE|USE|VAL|VARIABLE|VIEWPORT|WHEN|WINDOW|WITH|ZER|ZONEWIDTH)(?:\$|\b)/i,operator:/<[=>]?|>=?|[+\-*\/^=&]|\b(?:AND|EQV|IMP|NOT|OR|XOR)\b/i,punctuation:/[,;:()]/}}return bl}var yl,aE;function az(){if(aE)return yl;aE=1,yl=e,e.displayName="batch",e.aliases=[];function e(t){(function(n){var r=/%%?[~:\w]+%?|!\S+!/,a={pattern:/\/[a-z?]+(?=[ :]|$):?|-[a-z]\b|--[a-z-]+\b/im,alias:"attr-name",inside:{punctuation:/:/}},i=/"(?:[\\"]"|[^"])*"(?!")/,o=/(?:\b|-)\d+\b/;n.languages.batch={comment:[/^::.*/m,{pattern:/((?:^|[&(])[ \t]*)rem\b(?:[^^&)\r\n]|\^(?:\r\n|[\s\S]))*/im,lookbehind:!0}],label:{pattern:/^:.*/m,alias:"property"},command:[{pattern:/((?:^|[&(])[ \t]*)for(?: \/[a-z?](?:[ :](?:"[^"]*"|[^\s"/]\S*))?)* \S+ in \([^)]+\) do/im,lookbehind:!0,inside:{keyword:/\b(?:do|in)\b|^for\b/i,string:i,parameter:a,variable:r,number:o,punctuation:/[()',]/}},{pattern:/((?:^|[&(])[ \t]*)if(?: \/[a-z?](?:[ :](?:"[^"]*"|[^\s"/]\S*))?)* (?:not )?(?:cmdextversion \d+|defined \w+|errorlevel \d+|exist \S+|(?:"[^"]*"|(?!")(?:(?!==)\S)+)?(?:==| (?:equ|geq|gtr|leq|lss|neq) )(?:"[^"]*"|[^\s"]\S*))/im,lookbehind:!0,inside:{keyword:/\b(?:cmdextversion|defined|errorlevel|exist|not)\b|^if\b/i,string:i,parameter:a,variable:r,number:o,operator:/\^|==|\b(?:equ|geq|gtr|leq|lss|neq)\b/i}},{pattern:/((?:^|[&()])[ \t]*)else\b/im,lookbehind:!0,inside:{keyword:/^else\b/i}},{pattern:/((?:^|[&(])[ \t]*)set(?: \/[a-z](?:[ :](?:"[^"]*"|[^\s"/]\S*))?)* (?:[^^&)\r\n]|\^(?:\r\n|[\s\S]))*/im,lookbehind:!0,inside:{keyword:/^set\b/i,string:i,parameter:a,variable:[r,/\w+(?=(?:[*\/%+\-&^|]|<<|>>)?=)/],number:o,operator:/[*\/%+\-&^|]=?|<<=?|>>=?|[!~_=]/,punctuation:/[()',]/}},{pattern:/((?:^|[&(])[ \t]*@?)\w+\b(?:"(?:[\\"]"|[^"])*"(?!")|[^"^&)\r\n]|\^(?:\r\n|[\s\S]))*/m,lookbehind:!0,inside:{keyword:/^\w+\b/,string:i,parameter:a,label:{pattern:/(^\s*):\S+/m,lookbehind:!0,alias:"property"},variable:r,number:o,operator:/\^/}}],operator:/[&@]/,punctuation:/[()']/}})(t)}return yl}var El,iE;function iz(){if(iE)return El;iE=1,El=e,e.displayName="bbcode",e.aliases=["shortcode"];function e(t){t.languages.bbcode={tag:{pattern:/\[\/?[^\s=\]]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'"\]=]+))?(?:\s+[^\s=\]]+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'"\]=]+))*\s*\]/,inside:{tag:{pattern:/^\[\/?[^\s=\]]+/,inside:{punctuation:/^\[\/?/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'"\]=]+)/,inside:{punctuation:[/^=/,{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\]/,"attr-name":/[^\s=\]]+/}}},t.languages.shortcode=t.languages.bbcode}return El}var Sl,oE;function oz(){if(oE)return Sl;oE=1,Sl=e,e.displayName="bicep",e.aliases=[];function e(t){t.languages.bicep={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],property:[{pattern:/([\r\n][ \t]*)[a-z_]\w*(?=[ \t]*:)/i,lookbehind:!0},{pattern:/([\r\n][ \t]*)'(?:\\.|\$(?!\{)|[^'\\\r\n$])*'(?=[ \t]*:)/,lookbehind:!0,greedy:!0}],string:[{pattern:/'''[^'][\s\S]*?'''/,greedy:!0},{pattern:/(^|[^\\'])'(?:\\.|\$(?!\{)|[^'\\\r\n$])*'/,lookbehind:!0,greedy:!0}],"interpolated-string":{pattern:/(^|[^\\'])'(?:\\.|\$(?:(?!\{)|\{[^{}\r\n]*\})|[^'\\\r\n$])*'/,lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/\$\{[^{}\r\n]*\}/,inside:{expression:{pattern:/(^\$\{)[\s\S]+(?=\}$)/,lookbehind:!0},punctuation:/^\$\{|\}$/}},string:/[\s\S]+/}},datatype:{pattern:/(\b(?:output|param)\b[ \t]+\w+[ \t]+)\w+\b/,lookbehind:!0,alias:"class-name"},boolean:/\b(?:false|true)\b/,keyword:/\b(?:existing|for|if|in|module|null|output|param|resource|targetScope|var)\b/,decorator:/@\w+\b/,function:/\b[a-z_]\w*(?=[ \t]*\()/i,number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?/i,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/,punctuation:/[{}[\];(),.:]/},t.languages.bicep["interpolated-string"].inside.interpolation.inside.expression.inside=t.languages.bicep}return Sl}var vl,sE;function sz(){if(sE)return vl;sE=1,vl=e,e.displayName="birb",e.aliases=[];function e(t){t.languages.birb=t.languages.extend("clike",{string:{pattern:/r?("|')(?:\\.|(?!\1)[^\\])*\1/,greedy:!0},"class-name":[/\b[A-Z](?:[\d_]*[a-zA-Z]\w*)?\b/,/\b(?:[A-Z]\w*|(?!(?:var|void)\b)[a-z]\w*)(?=\s+\w+\s*[;,=()])/],keyword:/\b(?:assert|break|case|class|const|default|else|enum|final|follows|for|grab|if|nest|new|next|noSeeb|return|static|switch|throw|var|void|while)\b/,operator:/\+\+|--|&&|\|\||<<=?|>>=?|~(?:\/=?)?|[+\-*\/%&^|=!<>]=?|\?|:/,variable:/\b[a-z_]\w*\b/}),t.languages.insertBefore("birb","function",{metadata:{pattern:/<\w+>/,greedy:!0,alias:"symbol"}})}return vl}var kl,lE;function lz(){if(lE)return kl;lE=1;var e=tr();kl=t,t.displayName="bison",t.aliases=[];function t(n){n.register(e),n.languages.bison=n.languages.extend("c",{}),n.languages.insertBefore("bison","comment",{bison:{pattern:/^(?:[^%]|%(?!%))*%%[\s\S]*?%%/,inside:{c:{pattern:/%\{[\s\S]*?%\}|\{(?:\{[^}]*\}|[^{}])*\}/,inside:{delimiter:{pattern:/^%?\{|%?\}$/,alias:"punctuation"},"bison-variable":{pattern:/[$@](?:<[^\s>]+>)?[\w$]+/,alias:"variable",inside:{punctuation:/<|>/}},rest:n.languages.c}},comment:n.languages.c.comment,string:n.languages.c.string,property:/\S+(?=:)/,keyword:/%\w+/,number:{pattern:/(^|[^@])\b(?:0x[\da-f]+|\d+)/i,lookbehind:!0},punctuation:/%[%?]|[|:;\[\]<>]/}}})}return kl}var wl,uE;function uz(){if(uE)return wl;uE=1,wl=e,e.displayName="bnf",e.aliases=["rbnf"];function e(t){t.languages.bnf={string:{pattern:/"[^\r\n"]*"|'[^\r\n']*'/},definition:{pattern:/<[^<>\r\n\t]+>(?=\s*::=)/,alias:["rule","keyword"],inside:{punctuation:/^<|>$/}},rule:{pattern:/<[^<>\r\n\t]+>/,inside:{punctuation:/^<|>$/}},operator:/::=|[|()[\]{}*+?]|\.{3}/},t.languages.rbnf=t.languages.bnf}return wl}var _l,cE;function cz(){if(cE)return _l;cE=1,_l=e,e.displayName="brainfuck",e.aliases=[];function e(t){t.languages.brainfuck={pointer:{pattern:/<|>/,alias:"keyword"},increment:{pattern:/\+/,alias:"inserted"},decrement:{pattern:/-/,alias:"deleted"},branching:{pattern:/\[|\]/,alias:"important"},operator:/[.,]/,comment:/\S+/}}return _l}var Tl,dE;function dz(){if(dE)return Tl;dE=1,Tl=e,e.displayName="brightscript",e.aliases=[];function e(t){t.languages.brightscript={comment:/(?:\brem|').*/i,"directive-statement":{pattern:/(^[\t ]*)#(?:const|else(?:[\t ]+if)?|end[\t ]+if|error|if).*/im,lookbehind:!0,alias:"property",inside:{"error-message":{pattern:/(^#error).+/,lookbehind:!0},directive:{pattern:/^#(?:const|else(?:[\t ]+if)?|end[\t ]+if|error|if)/,alias:"keyword"},expression:{pattern:/[\s\S]+/,inside:null}}},property:{pattern:/([\r\n{,][\t ]*)(?:(?!\d)\w+|"(?:[^"\r\n]|"")*"(?!"))(?=[ \t]*:)/,lookbehind:!0,greedy:!0},string:{pattern:/"(?:[^"\r\n]|"")*"(?!")/,greedy:!0},"class-name":{pattern:/(\bAs[\t ]+)\w+/i,lookbehind:!0},keyword:/\b(?:As|Dim|Each|Else|Elseif|End|Exit|For|Function|Goto|If|In|Print|Return|Step|Stop|Sub|Then|To|While)\b/i,boolean:/\b(?:false|true)\b/i,function:/\b(?!\d)\w+(?=[\t ]*\()/,number:/(?:\b\d+(?:\.\d+)?(?:[ed][+-]\d+)?|&h[a-f\d]+)\b[%&!#]?/i,operator:/--|\+\+|>>=?|<<=?|<>|[-+*/\\<>]=?|[:^=?]|\b(?:and|mod|not|or)\b/i,punctuation:/[.,;()[\]{}]/,constant:/\b(?:LINE_NUM)\b/i},t.languages.brightscript["directive-statement"].inside.expression.inside=t.languages.brightscript}return Tl}var Al,pE;function pz(){if(pE)return Al;pE=1,Al=e,e.displayName="bro",e.aliases=[];function e(t){t.languages.bro={comment:{pattern:/(^|[^\\$])#.*/,lookbehind:!0,inside:{italic:/\b(?:FIXME|TODO|XXX)\b/}},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},boolean:/\b[TF]\b/,function:{pattern:/(\b(?:event|function|hook)[ \t]+)\w+(?:::\w+)?/,lookbehind:!0},builtin:/(?:@(?:load(?:-(?:plugin|sigs))?|unload|prefixes|ifn?def|else|(?:end)?if|DIR|FILENAME))|(?:&?(?:add_func|create_expire|default|delete_func|encrypt|error_handler|expire_func|group|log|mergeable|optional|persistent|priority|raw_output|read_expire|redef|rotate_interval|rotate_size|synchronized|type_column|write_expire))/,constant:{pattern:/(\bconst[ \t]+)\w+/i,lookbehind:!0},keyword:/\b(?:add|addr|alarm|any|bool|break|const|continue|count|delete|double|else|enum|event|export|file|for|function|global|hook|if|in|int|interval|local|module|next|of|opaque|pattern|port|print|record|return|schedule|set|string|subnet|table|time|timeout|using|vector|when)\b/,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&|\|\|?|\?|\*|\/|~|\^|%/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,punctuation:/[{}[\];(),.:]/}}return Al}var Rl,fE;function fz(){if(fE)return Rl;fE=1,Rl=e,e.displayName="bsl",e.aliases=[];function e(t){t.languages.bsl={comment:/\/\/.*/,string:[{pattern:/"(?:[^"]|"")*"(?!")/,greedy:!0},{pattern:/'(?:[^'\r\n\\]|\\.)*'/}],keyword:[{pattern:/(^|[^\w\u0400-\u0484\u0487-\u052f\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])(?:пока|для|новый|прервать|попытка|исключение|вызватьисключение|иначе|конецпопытки|неопределено|функция|перем|возврат|конецфункции|если|иначеесли|процедура|конецпроцедуры|тогда|знач|экспорт|конецесли|из|каждого|истина|ложь|по|цикл|конеццикла|выполнить)(?![\w\u0400-\u0484\u0487-\u052f\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])/i,lookbehind:!0},{pattern:/\b(?:break|do|each|else|elseif|enddo|endfunction|endif|endprocedure|endtry|except|execute|export|false|for|function|if|in|new|null|procedure|raise|return|then|to|true|try|undefined|val|var|while)\b/i}],number:{pattern:/(^(?=\d)|[^\w\u0400-\u0484\u0487-\u052f\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?/i,lookbehind:!0},operator:[/[<>+\-*/]=?|[%=]/,{pattern:/(^|[^\w\u0400-\u0484\u0487-\u052f\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])(?:и|или|не)(?![\w\u0400-\u0484\u0487-\u052f\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])/i,lookbehind:!0},{pattern:/\b(?:and|not|or)\b/i}],punctuation:/\(\.|\.\)|[()\[\]:;,.]/,directive:[{pattern:/^([ \t]*)&.*/m,lookbehind:!0,greedy:!0,alias:"important"},{pattern:/^([ \t]*)#.*/gm,lookbehind:!0,greedy:!0,alias:"important"}]},t.languages.oscript=t.languages.bsl}return Rl}var Il,gE;function gz(){if(gE)return Il;gE=1,Il=e,e.displayName="cfscript",e.aliases=[];function e(t){t.languages.cfscript=t.languages.extend("clike",{comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,inside:{annotation:{pattern:/(?:^|[^.])@[\w\.]+/,alias:"punctuation"}}},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],keyword:/\b(?:abstract|break|catch|component|continue|default|do|else|extends|final|finally|for|function|if|in|include|package|private|property|public|remote|required|rethrow|return|static|switch|throw|try|var|while|xml)\b(?!\s*=)/,operator:[/\+\+|--|&&|\|\||::|=>|[!=]==|<=?|>=?|[-+*/%&|^!=<>]=?|\?(?:\.|:)?|[?:]/,/\b(?:and|contains|eq|equal|eqv|gt|gte|imp|is|lt|lte|mod|not|or|xor)\b/],scope:{pattern:/\b(?:application|arguments|cgi|client|cookie|local|session|super|this|variables)\b/,alias:"global"},type:{pattern:/\b(?:any|array|binary|boolean|date|guid|numeric|query|string|struct|uuid|void|xml)\b/,alias:"builtin"}}),t.languages.insertBefore("cfscript","keyword",{"function-variable":{pattern:/[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"}}),delete t.languages.cfscript["class-name"],t.languages.cfc=t.languages.cfscript}return Il}var Cl,mE;function mz(){if(mE)return Cl;mE=1;var e=$m();Cl=t,t.displayName="chaiscript",t.aliases=[];function t(n){n.register(e),n.languages.chaiscript=n.languages.extend("clike",{string:{pattern:/(^|[^\\])'(?:[^'\\]|\\[\s\S])*'/,lookbehind:!0,greedy:!0},"class-name":[{pattern:/(\bclass\s+)\w+/,lookbehind:!0},{pattern:/(\b(?:attr|def)\s+)\w+(?=\s*::)/,lookbehind:!0}],keyword:/\b(?:attr|auto|break|case|catch|class|continue|def|default|else|finally|for|fun|global|if|return|switch|this|try|var|while)\b/,number:[n.languages.cpp.number,/\b(?:Infinity|NaN)\b/],operator:/>>=?|<<=?|\|\||&&|:[:=]?|--|\+\+|[=!<>+\-*/%|&^]=?|[?~]|`[^`\r\n]{1,4}`/}),n.languages.insertBefore("chaiscript","operator",{"parameter-type":{pattern:/([,(]\s*)\w+(?=\s+\w)/,lookbehind:!0,alias:"class-name"}}),n.languages.insertBefore("chaiscript","string",{"string-interpolation":{pattern:/(^|[^\\])"(?:[^"$\\]|\\[\s\S]|\$(?!\{)|\$\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\})*"/,lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\}/,lookbehind:!0,inside:{"interpolation-expression":{pattern:/(^\$\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:n.languages.chaiscript},"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"}}},string:/[\s\S]+/}}})}return Cl}var Nl,hE;function hz(){if(hE)return Nl;hE=1,Nl=e,e.displayName="cil",e.aliases=[];function e(t){t.languages.cil={comment:/\/\/.*/,string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},directive:{pattern:/(^|\W)\.[a-z]+(?=\s)/,lookbehind:!0,alias:"class-name"},variable:/\[[\w\.]+\]/,keyword:/\b(?:abstract|ansi|assembly|auto|autochar|beforefieldinit|bool|bstr|byvalstr|catch|char|cil|class|currency|date|decimal|default|enum|error|explicit|extends|extern|famandassem|family|famorassem|final(?:ly)?|float32|float64|hidebysig|u?int(?:8|16|32|64)?|iant|idispatch|implements|import|initonly|instance|interface|iunknown|literal|lpstr|lpstruct|lptstr|lpwstr|managed|method|native(?:Type)?|nested|newslot|object(?:ref)?|pinvokeimpl|private|privatescope|public|reqsecobj|rtspecialname|runtime|sealed|sequential|serializable|specialname|static|string|struct|syschar|tbstr|unicode|unmanagedexp|unsigned|value(?:type)?|variant|virtual|void)\b/,function:/\b(?:(?:constrained|no|readonly|tail|unaligned|volatile)\.)?(?:conv\.(?:[iu][1248]?|ovf\.[iu][1248]?(?:\.un)?|r\.un|r4|r8)|ldc\.(?:i4(?:\.\d+|\.[mM]1|\.s)?|i8|r4|r8)|ldelem(?:\.[iu][1248]?|\.r[48]|\.ref|a)?|ldind\.(?:[iu][1248]?|r[48]|ref)|stelem\.?(?:i[1248]?|r[48]|ref)?|stind\.(?:i[1248]?|r[48]|ref)?|end(?:fault|filter|finally)|ldarg(?:\.[0-3s]|a(?:\.s)?)?|ldloc(?:\.\d+|\.s)?|sub(?:\.ovf(?:\.un)?)?|mul(?:\.ovf(?:\.un)?)?|add(?:\.ovf(?:\.un)?)?|stloc(?:\.[0-3s])?|refany(?:type|val)|blt(?:\.un)?(?:\.s)?|ble(?:\.un)?(?:\.s)?|bgt(?:\.un)?(?:\.s)?|bge(?:\.un)?(?:\.s)?|unbox(?:\.any)?|init(?:blk|obj)|call(?:i|virt)?|brfalse(?:\.s)?|bne\.un(?:\.s)?|ldloca(?:\.s)?|brzero(?:\.s)?|brtrue(?:\.s)?|brnull(?:\.s)?|brinst(?:\.s)?|starg(?:\.s)?|leave(?:\.s)?|shr(?:\.un)?|rem(?:\.un)?|div(?:\.un)?|clt(?:\.un)?|alignment|castclass|ldvirtftn|beq(?:\.s)?|ckfinite|ldsflda|ldtoken|localloc|mkrefany|rethrow|cgt\.un|arglist|switch|stsfld|sizeof|newobj|newarr|ldsfld|ldnull|ldflda|isinst|throw|stobj|stfld|ldstr|ldobj|ldlen|ldftn|ldfld|cpobj|cpblk|break|br\.s|xor|shl|ret|pop|not|nop|neg|jmp|dup|cgt|ceq|box|and|or|br)\b/,boolean:/\b(?:false|true)\b/,number:/\b-?(?:0x[0-9a-f]+|\d+)(?:\.[0-9a-f]+)?\b/i,punctuation:/[{}[\];(),:=]|IL_[0-9A-Za-z]+/}}return Nl}var xl,bE;function bz(){if(bE)return xl;bE=1,xl=e,e.displayName="clojure",e.aliases=[];function e(t){t.languages.clojure={comment:{pattern:/;.*/,greedy:!0},string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0},char:/\\\w+/,symbol:{pattern:/(^|[\s()\[\]{},])::?[\w*+!?'<>=/.-]+/,lookbehind:!0},keyword:{pattern:/(\()(?:-|->|->>|\.|\.\.|\*|\/|\+|<|<=|=|==|>|>=|accessor|agent|agent-errors|aget|alength|all-ns|alter|and|append-child|apply|array-map|aset|aset-boolean|aset-byte|aset-char|aset-double|aset-float|aset-int|aset-long|aset-short|assert|assoc|await|await-for|bean|binding|bit-and|bit-not|bit-or|bit-shift-left|bit-shift-right|bit-xor|boolean|branch\?|butlast|byte|cast|char|children|class|clear-agent-errors|comment|commute|comp|comparator|complement|concat|cond|conj|cons|constantly|construct-proxy|contains\?|count|create-ns|create-struct|cycle|dec|declare|def|def-|definline|definterface|defmacro|defmethod|defmulti|defn|defn-|defonce|defproject|defprotocol|defrecord|defstruct|deftype|deref|difference|disj|dissoc|distinct|do|doall|doc|dorun|doseq|dosync|dotimes|doto|double|down|drop|drop-while|edit|end\?|ensure|eval|every\?|false\?|ffirst|file-seq|filter|find|find-doc|find-ns|find-var|first|float|flush|fn|fnseq|for|frest|gensym|get|get-proxy-class|hash-map|hash-set|identical\?|identity|if|if-let|if-not|import|in-ns|inc|index|insert-child|insert-left|insert-right|inspect-table|inspect-tree|instance\?|int|interleave|intersection|into|into-array|iterate|join|key|keys|keyword|keyword\?|last|lazy-cat|lazy-cons|left|lefts|let|line-seq|list|list\*|load|load-file|locking|long|loop|macroexpand|macroexpand-1|make-array|make-node|map|map-invert|map\?|mapcat|max|max-key|memfn|merge|merge-with|meta|min|min-key|monitor-enter|name|namespace|neg\?|new|newline|next|nil\?|node|not|not-any\?|not-every\?|not=|ns|ns-imports|ns-interns|ns-map|ns-name|ns-publics|ns-refers|ns-resolve|ns-unmap|nth|nthrest|or|parse|partial|path|peek|pop|pos\?|pr|pr-str|print|print-str|println|println-str|prn|prn-str|project|proxy|proxy-mappings|quot|quote|rand|rand-int|range|re-find|re-groups|re-matcher|re-matches|re-pattern|re-seq|read|read-line|recur|reduce|ref|ref-set|refer|rem|remove|remove-method|remove-ns|rename|rename-keys|repeat|replace|replicate|resolve|rest|resultset-seq|reverse|rfirst|right|rights|root|rrest|rseq|second|select|select-keys|send|send-off|seq|seq-zip|seq\?|set|set!|short|slurp|some|sort|sort-by|sorted-map|sorted-map-by|sorted-set|special-symbol\?|split-at|split-with|str|string\?|struct|struct-map|subs|subvec|symbol|symbol\?|sync|take|take-nth|take-while|test|throw|time|to-array|to-array-2d|tree-seq|true\?|try|union|up|update-proxy|val|vals|var|var-get|var-set|var\?|vector|vector-zip|vector\?|when|when-first|when-let|when-not|with-local-vars|with-meta|with-open|with-out-str|xml-seq|xml-zip|zero\?|zipmap|zipper)(?=[\s)]|$)/,lookbehind:!0},boolean:/\b(?:false|nil|true)\b/,number:{pattern:/(^|[^\w$@])(?:\d+(?:[/.]\d+)?(?:e[+-]?\d+)?|0x[a-f0-9]+|[1-9]\d?r[a-z0-9]+)[lmn]?(?![\w$@])/i,lookbehind:!0},function:{pattern:/((?:^|[^'])\()[\w*+!?'<>=/.-]+(?=[\s)]|$)/,lookbehind:!0},operator:/[#@^`~]/,punctuation:/[{}\[\](),]/}}return xl}var Ol,yE;function yz(){if(yE)return Ol;yE=1,Ol=e,e.displayName="cmake",e.aliases=[];function e(t){t.languages.cmake={comment:/#.*/,string:{pattern:/"(?:[^\\"]|\\.)*"/,greedy:!0,inside:{interpolation:{pattern:/\$\{(?:[^{}$]|\$\{[^{}$]*\})*\}/,inside:{punctuation:/\$\{|\}/,variable:/\w+/}}}},variable:/\b(?:CMAKE_\w+|\w+_(?:(?:BINARY|SOURCE)_DIR|DESCRIPTION|HOMEPAGE_URL|ROOT|VERSION(?:_MAJOR|_MINOR|_PATCH|_TWEAK)?)|(?:ANDROID|APPLE|BORLAND|BUILD_SHARED_LIBS|CACHE|CPACK_(?:ABSOLUTE_DESTINATION_FILES|COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY|ERROR_ON_ABSOLUTE_INSTALL_DESTINATION|INCLUDE_TOPLEVEL_DIRECTORY|INSTALL_DEFAULT_DIRECTORY_PERMISSIONS|INSTALL_SCRIPT|PACKAGING_INSTALL_PREFIX|SET_DESTDIR|WARN_ON_ABSOLUTE_INSTALL_DESTINATION)|CTEST_(?:BINARY_DIRECTORY|BUILD_COMMAND|BUILD_NAME|BZR_COMMAND|BZR_UPDATE_OPTIONS|CHANGE_ID|CHECKOUT_COMMAND|CONFIGURATION_TYPE|CONFIGURE_COMMAND|COVERAGE_COMMAND|COVERAGE_EXTRA_FLAGS|CURL_OPTIONS|CUSTOM_(?:COVERAGE_EXCLUDE|ERROR_EXCEPTION|ERROR_MATCH|ERROR_POST_CONTEXT|ERROR_PRE_CONTEXT|MAXIMUM_FAILED_TEST_OUTPUT_SIZE|MAXIMUM_NUMBER_OF_(?:ERRORS|WARNINGS)|MAXIMUM_PASSED_TEST_OUTPUT_SIZE|MEMCHECK_IGNORE|POST_MEMCHECK|POST_TEST|PRE_MEMCHECK|PRE_TEST|TESTS_IGNORE|WARNING_EXCEPTION|WARNING_MATCH)|CVS_CHECKOUT|CVS_COMMAND|CVS_UPDATE_OPTIONS|DROP_LOCATION|DROP_METHOD|DROP_SITE|DROP_SITE_CDASH|DROP_SITE_PASSWORD|DROP_SITE_USER|EXTRA_COVERAGE_GLOB|GIT_COMMAND|GIT_INIT_SUBMODULES|GIT_UPDATE_CUSTOM|GIT_UPDATE_OPTIONS|HG_COMMAND|HG_UPDATE_OPTIONS|LABELS_FOR_SUBPROJECTS|MEMORYCHECK_(?:COMMAND|COMMAND_OPTIONS|SANITIZER_OPTIONS|SUPPRESSIONS_FILE|TYPE)|NIGHTLY_START_TIME|P4_CLIENT|P4_COMMAND|P4_OPTIONS|P4_UPDATE_OPTIONS|RUN_CURRENT_SCRIPT|SCP_COMMAND|SITE|SOURCE_DIRECTORY|SUBMIT_URL|SVN_COMMAND|SVN_OPTIONS|SVN_UPDATE_OPTIONS|TEST_LOAD|TEST_TIMEOUT|TRIGGER_SITE|UPDATE_COMMAND|UPDATE_OPTIONS|UPDATE_VERSION_ONLY|USE_LAUNCHERS)|CYGWIN|ENV|EXECUTABLE_OUTPUT_PATH|GHS-MULTI|IOS|LIBRARY_OUTPUT_PATH|MINGW|MSVC(?:10|11|12|14|60|70|71|80|90|_IDE|_TOOLSET_VERSION|_VERSION)?|MSYS|PROJECT_(?:BINARY_DIR|DESCRIPTION|HOMEPAGE_URL|NAME|SOURCE_DIR|VERSION|VERSION_(?:MAJOR|MINOR|PATCH|TWEAK))|UNIX|WIN32|WINCE|WINDOWS_PHONE|WINDOWS_STORE|XCODE|XCODE_VERSION))\b/,property:/\b(?:cxx_\w+|(?:ARCHIVE_OUTPUT_(?:DIRECTORY|NAME)|COMPILE_DEFINITIONS|COMPILE_PDB_NAME|COMPILE_PDB_OUTPUT_DIRECTORY|EXCLUDE_FROM_DEFAULT_BUILD|IMPORTED_(?:IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_LANGUAGES|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|NO_SONAME|OBJECTS|SONAME)|INTERPROCEDURAL_OPTIMIZATION|LIBRARY_OUTPUT_DIRECTORY|LIBRARY_OUTPUT_NAME|LINK_FLAGS|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|MAP_IMPORTED_CONFIG|OSX_ARCHITECTURES|OUTPUT_NAME|PDB_NAME|PDB_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_NAME|STATIC_LIBRARY_FLAGS|VS_CSHARP|VS_DOTNET_REFERENCEPROP|VS_DOTNET_REFERENCE|VS_GLOBAL_SECTION_POST|VS_GLOBAL_SECTION_PRE|VS_GLOBAL|XCODE_ATTRIBUTE)_\w+|\w+_(?:CLANG_TIDY|COMPILER_LAUNCHER|CPPCHECK|CPPLINT|INCLUDE_WHAT_YOU_USE|OUTPUT_NAME|POSTFIX|VISIBILITY_PRESET)|ABSTRACT|ADDITIONAL_MAKE_CLEAN_FILES|ADVANCED|ALIASED_TARGET|ALLOW_DUPLICATE_CUSTOM_TARGETS|ANDROID_(?:ANT_ADDITIONAL_OPTIONS|API|API_MIN|ARCH|ASSETS_DIRECTORIES|GUI|JAR_DEPENDENCIES|NATIVE_LIB_DEPENDENCIES|NATIVE_LIB_DIRECTORIES|PROCESS_MAX|PROGUARD|PROGUARD_CONFIG_PATH|SECURE_PROPS_PATH|SKIP_ANT_STEP|STL_TYPE)|ARCHIVE_OUTPUT_DIRECTORY|ATTACHED_FILES|ATTACHED_FILES_ON_FAIL|AUTOGEN_(?:BUILD_DIR|ORIGIN_DEPENDS|PARALLEL|SOURCE_GROUP|TARGETS_FOLDER|TARGET_DEPENDS)|AUTOMOC|AUTOMOC_(?:COMPILER_PREDEFINES|DEPEND_FILTERS|EXECUTABLE|MACRO_NAMES|MOC_OPTIONS|SOURCE_GROUP|TARGETS_FOLDER)|AUTORCC|AUTORCC_EXECUTABLE|AUTORCC_OPTIONS|AUTORCC_SOURCE_GROUP|AUTOUIC|AUTOUIC_EXECUTABLE|AUTOUIC_OPTIONS|AUTOUIC_SEARCH_PATHS|BINARY_DIR|BUILDSYSTEM_TARGETS|BUILD_RPATH|BUILD_RPATH_USE_ORIGIN|BUILD_WITH_INSTALL_NAME_DIR|BUILD_WITH_INSTALL_RPATH|BUNDLE|BUNDLE_EXTENSION|CACHE_VARIABLES|CLEAN_NO_CUSTOM|COMMON_LANGUAGE_RUNTIME|COMPATIBLE_INTERFACE_(?:BOOL|NUMBER_MAX|NUMBER_MIN|STRING)|COMPILE_(?:DEFINITIONS|FEATURES|FLAGS|OPTIONS|PDB_NAME|PDB_OUTPUT_DIRECTORY)|COST|CPACK_DESKTOP_SHORTCUTS|CPACK_NEVER_OVERWRITE|CPACK_PERMANENT|CPACK_STARTUP_SHORTCUTS|CPACK_START_MENU_SHORTCUTS|CPACK_WIX_ACL|CROSSCOMPILING_EMULATOR|CUDA_EXTENSIONS|CUDA_PTX_COMPILATION|CUDA_RESOLVE_DEVICE_SYMBOLS|CUDA_SEPARABLE_COMPILATION|CUDA_STANDARD|CUDA_STANDARD_REQUIRED|CXX_EXTENSIONS|CXX_STANDARD|CXX_STANDARD_REQUIRED|C_EXTENSIONS|C_STANDARD|C_STANDARD_REQUIRED|DEBUG_CONFIGURATIONS|DEFINE_SYMBOL|DEFINITIONS|DEPENDS|DEPLOYMENT_ADDITIONAL_FILES|DEPLOYMENT_REMOTE_DIRECTORY|DISABLED|DISABLED_FEATURES|ECLIPSE_EXTRA_CPROJECT_CONTENTS|ECLIPSE_EXTRA_NATURES|ENABLED_FEATURES|ENABLED_LANGUAGES|ENABLE_EXPORTS|ENVIRONMENT|EXCLUDE_FROM_ALL|EXCLUDE_FROM_DEFAULT_BUILD|EXPORT_NAME|EXPORT_PROPERTIES|EXTERNAL_OBJECT|EchoString|FAIL_REGULAR_EXPRESSION|FIND_LIBRARY_USE_LIB32_PATHS|FIND_LIBRARY_USE_LIB64_PATHS|FIND_LIBRARY_USE_LIBX32_PATHS|FIND_LIBRARY_USE_OPENBSD_VERSIONING|FIXTURES_CLEANUP|FIXTURES_REQUIRED|FIXTURES_SETUP|FOLDER|FRAMEWORK|Fortran_FORMAT|Fortran_MODULE_DIRECTORY|GENERATED|GENERATOR_FILE_NAME|GENERATOR_IS_MULTI_CONFIG|GHS_INTEGRITY_APP|GHS_NO_SOURCE_GROUP_FILE|GLOBAL_DEPENDS_DEBUG_MODE|GLOBAL_DEPENDS_NO_CYCLES|GNUtoMS|HAS_CXX|HEADER_FILE_ONLY|HELPSTRING|IMPLICIT_DEPENDS_INCLUDE_TRANSFORM|IMPORTED|IMPORTED_(?:COMMON_LANGUAGE_RUNTIME|CONFIGURATIONS|GLOBAL|IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_(?:LANGUAGES|LIBRARIES|MULTIPLICITY)|LOCATION|NO_SONAME|OBJECTS|SONAME)|IMPORT_PREFIX|IMPORT_SUFFIX|INCLUDE_DIRECTORIES|INCLUDE_REGULAR_EXPRESSION|INSTALL_NAME_DIR|INSTALL_RPATH|INSTALL_RPATH_USE_LINK_PATH|INTERFACE_(?:AUTOUIC_OPTIONS|COMPILE_DEFINITIONS|COMPILE_FEATURES|COMPILE_OPTIONS|INCLUDE_DIRECTORIES|LINK_DEPENDS|LINK_DIRECTORIES|LINK_LIBRARIES|LINK_OPTIONS|POSITION_INDEPENDENT_CODE|SOURCES|SYSTEM_INCLUDE_DIRECTORIES)|INTERPROCEDURAL_OPTIMIZATION|IN_TRY_COMPILE|IOS_INSTALL_COMBINED|JOB_POOLS|JOB_POOL_COMPILE|JOB_POOL_LINK|KEEP_EXTENSION|LABELS|LANGUAGE|LIBRARY_OUTPUT_DIRECTORY|LINKER_LANGUAGE|LINK_(?:DEPENDS|DEPENDS_NO_SHARED|DIRECTORIES|FLAGS|INTERFACE_LIBRARIES|INTERFACE_MULTIPLICITY|LIBRARIES|OPTIONS|SEARCH_END_STATIC|SEARCH_START_STATIC|WHAT_YOU_USE)|LISTFILE_STACK|LOCATION|MACOSX_BUNDLE|MACOSX_BUNDLE_INFO_PLIST|MACOSX_FRAMEWORK_INFO_PLIST|MACOSX_PACKAGE_LOCATION|MACOSX_RPATH|MACROS|MANUALLY_ADDED_DEPENDENCIES|MEASUREMENT|MODIFIED|NAME|NO_SONAME|NO_SYSTEM_FROM_IMPORTED|OBJECT_DEPENDS|OBJECT_OUTPUTS|OSX_ARCHITECTURES|OUTPUT_NAME|PACKAGES_FOUND|PACKAGES_NOT_FOUND|PARENT_DIRECTORY|PASS_REGULAR_EXPRESSION|PDB_NAME|PDB_OUTPUT_DIRECTORY|POSITION_INDEPENDENT_CODE|POST_INSTALL_SCRIPT|PREDEFINED_TARGETS_FOLDER|PREFIX|PRE_INSTALL_SCRIPT|PRIVATE_HEADER|PROCESSORS|PROCESSOR_AFFINITY|PROJECT_LABEL|PUBLIC_HEADER|REPORT_UNDEFINED_PROPERTIES|REQUIRED_FILES|RESOURCE|RESOURCE_LOCK|RULE_LAUNCH_COMPILE|RULE_LAUNCH_CUSTOM|RULE_LAUNCH_LINK|RULE_MESSAGES|RUNTIME_OUTPUT_DIRECTORY|RUN_SERIAL|SKIP_AUTOGEN|SKIP_AUTOMOC|SKIP_AUTORCC|SKIP_AUTOUIC|SKIP_BUILD_RPATH|SKIP_RETURN_CODE|SOURCES|SOURCE_DIR|SOVERSION|STATIC_LIBRARY_FLAGS|STATIC_LIBRARY_OPTIONS|STRINGS|SUBDIRECTORIES|SUFFIX|SYMBOLIC|TARGET_ARCHIVES_MAY_BE_SHARED_LIBS|TARGET_MESSAGES|TARGET_SUPPORTS_SHARED_LIBS|TESTS|TEST_INCLUDE_FILE|TEST_INCLUDE_FILES|TIMEOUT|TIMEOUT_AFTER_MATCH|TYPE|USE_FOLDERS|VALUE|VARIABLES|VERSION|VISIBILITY_INLINES_HIDDEN|VS_(?:CONFIGURATION_TYPE|COPY_TO_OUT_DIR|DEBUGGER_(?:COMMAND|COMMAND_ARGUMENTS|ENVIRONMENT|WORKING_DIRECTORY)|DEPLOYMENT_CONTENT|DEPLOYMENT_LOCATION|DOTNET_REFERENCES|DOTNET_REFERENCES_COPY_LOCAL|GLOBAL_KEYWORD|GLOBAL_PROJECT_TYPES|GLOBAL_ROOTNAMESPACE|INCLUDE_IN_VSIX|IOT_STARTUP_TASK|KEYWORD|RESOURCE_GENERATOR|SCC_AUXPATH|SCC_LOCALPATH|SCC_PROJECTNAME|SCC_PROVIDER|SDK_REFERENCES|SHADER_(?:DISABLE_OPTIMIZATIONS|ENABLE_DEBUG|ENTRYPOINT|FLAGS|MODEL|OBJECT_FILE_NAME|OUTPUT_HEADER_FILE|TYPE|VARIABLE_NAME)|STARTUP_PROJECT|TOOL_OVERRIDE|USER_PROPS|WINRT_COMPONENT|WINRT_EXTENSIONS|WINRT_REFERENCES|XAML_TYPE)|WILL_FAIL|WIN32_EXECUTABLE|WINDOWS_EXPORT_ALL_SYMBOLS|WORKING_DIRECTORY|WRAP_EXCLUDE|XCODE_(?:EMIT_EFFECTIVE_PLATFORM_NAME|EXPLICIT_FILE_TYPE|FILE_ATTRIBUTES|LAST_KNOWN_FILE_TYPE|PRODUCT_TYPE|SCHEME_(?:ADDRESS_SANITIZER|ADDRESS_SANITIZER_USE_AFTER_RETURN|ARGUMENTS|DISABLE_MAIN_THREAD_CHECKER|DYNAMIC_LIBRARY_LOADS|DYNAMIC_LINKER_API_USAGE|ENVIRONMENT|EXECUTABLE|GUARD_MALLOC|MAIN_THREAD_CHECKER_STOP|MALLOC_GUARD_EDGES|MALLOC_SCRIBBLE|MALLOC_STACK|THREAD_SANITIZER(?:_STOP)?|UNDEFINED_BEHAVIOUR_SANITIZER(?:_STOP)?|ZOMBIE_OBJECTS))|XCTEST)\b/,keyword:/\b(?:add_compile_definitions|add_compile_options|add_custom_command|add_custom_target|add_definitions|add_dependencies|add_executable|add_library|add_link_options|add_subdirectory|add_test|aux_source_directory|break|build_command|build_name|cmake_host_system_information|cmake_minimum_required|cmake_parse_arguments|cmake_policy|configure_file|continue|create_test_sourcelist|ctest_build|ctest_configure|ctest_coverage|ctest_empty_binary_directory|ctest_memcheck|ctest_read_custom_files|ctest_run_script|ctest_sleep|ctest_start|ctest_submit|ctest_test|ctest_update|ctest_upload|define_property|else|elseif|enable_language|enable_testing|endforeach|endfunction|endif|endmacro|endwhile|exec_program|execute_process|export|export_library_dependencies|file|find_file|find_library|find_package|find_path|find_program|fltk_wrap_ui|foreach|function|get_cmake_property|get_directory_property|get_filename_component|get_property|get_source_file_property|get_target_property|get_test_property|if|include|include_directories|include_external_msproject|include_guard|include_regular_expression|install|install_files|install_programs|install_targets|link_directories|link_libraries|list|load_cache|load_command|macro|make_directory|mark_as_advanced|math|message|option|output_required_files|project|qt_wrap_cpp|qt_wrap_ui|remove|remove_definitions|return|separate_arguments|set|set_directory_properties|set_property|set_source_files_properties|set_target_properties|set_tests_properties|site_name|source_group|string|subdir_depends|subdirs|target_compile_definitions|target_compile_features|target_compile_options|target_include_directories|target_link_directories|target_link_libraries|target_link_options|target_sources|try_compile|try_run|unset|use_mangled_mesa|utility_source|variable_requires|variable_watch|while|write_file)(?=\s*\()\b/,boolean:/\b(?:FALSE|OFF|ON|TRUE)\b/,namespace:/\b(?:INTERFACE|PRIVATE|PROPERTIES|PUBLIC|SHARED|STATIC|TARGET_OBJECTS)\b/,operator:/\b(?:AND|DEFINED|EQUAL|GREATER|LESS|MATCHES|NOT|OR|STREQUAL|STRGREATER|STRLESS|VERSION_EQUAL|VERSION_GREATER|VERSION_LESS)\b/,inserted:{pattern:/\b\w+::\w+\b/,alias:"class-name"},number:/\b\d+(?:\.\d+)*\b/,function:/\b[a-z_]\w*(?=\s*\()\b/i,punctuation:/[()>}]|\$[<{]/}}return Ol}var Ll,EE;function Ez(){if(EE)return Ll;EE=1,Ll=e,e.displayName="cobol",e.aliases=[];function e(t){t.languages.cobol={comment:{pattern:/\*>.*|(^[ \t]*)\*.*/m,lookbehind:!0,greedy:!0},string:{pattern:/[xzgn]?(?:"(?:[^\r\n"]|"")*"(?!")|'(?:[^\r\n']|'')*'(?!'))/i,greedy:!0},level:{pattern:/(^[ \t]*)\d+\b/m,lookbehind:!0,greedy:!0,alias:"number"},"class-name":{pattern:/(\bpic(?:ture)?\s+)(?:(?:[-\w$/,:*+<>]|\.(?!\s|$))(?:\(\d+\))?)+/i,lookbehind:!0,inside:{number:{pattern:/(\()\d+/,lookbehind:!0},punctuation:/[()]/}},keyword:{pattern:/(^|[^\w-])(?:ABORT|ACCEPT|ACCESS|ADD|ADDRESS|ADVANCING|AFTER|ALIGNED|ALL|ALPHABET|ALPHABETIC|ALPHABETIC-LOWER|ALPHABETIC-UPPER|ALPHANUMERIC|ALPHANUMERIC-EDITED|ALSO|ALTER|ALTERNATE|ANY|ARE|AREA|AREAS|AS|ASCENDING|ASCII|ASSIGN|ASSOCIATED-DATA|ASSOCIATED-DATA-LENGTH|AT|ATTRIBUTE|AUTHOR|AUTO|AUTO-SKIP|BACKGROUND-COLOR|BACKGROUND-COLOUR|BASIS|BEEP|BEFORE|BEGINNING|BELL|BINARY|BIT|BLANK|BLINK|BLOCK|BOTTOM|BOUNDS|BY|BYFUNCTION|BYTITLE|CALL|CANCEL|CAPABLE|CCSVERSION|CD|CF|CH|CHAINING|CHANGED|CHANNEL|CHARACTER|CHARACTERS|CLASS|CLASS-ID|CLOCK-UNITS|CLOSE|CLOSE-DISPOSITION|COBOL|CODE|CODE-SET|COL|COLLATING|COLUMN|COM-REG|COMMA|COMMITMENT|COMMON|COMMUNICATION|COMP|COMP-1|COMP-2|COMP-3|COMP-4|COMP-5|COMPUTATIONAL|COMPUTATIONAL-1|COMPUTATIONAL-2|COMPUTATIONAL-3|COMPUTATIONAL-4|COMPUTATIONAL-5|COMPUTE|CONFIGURATION|CONTAINS|CONTENT|CONTINUE|CONTROL|CONTROL-POINT|CONTROLS|CONVENTION|CONVERTING|COPY|CORR|CORRESPONDING|COUNT|CRUNCH|CURRENCY|CURSOR|DATA|DATA-BASE|DATE|DATE-COMPILED|DATE-WRITTEN|DAY|DAY-OF-WEEK|DBCS|DE|DEBUG-CONTENTS|DEBUG-ITEM|DEBUG-LINE|DEBUG-NAME|DEBUG-SUB-1|DEBUG-SUB-2|DEBUG-SUB-3|DEBUGGING|DECIMAL-POINT|DECLARATIVES|DEFAULT|DEFAULT-DISPLAY|DEFINITION|DELETE|DELIMITED|DELIMITER|DEPENDING|DESCENDING|DESTINATION|DETAIL|DFHRESP|DFHVALUE|DISABLE|DISK|DISPLAY|DISPLAY-1|DIVIDE|DIVISION|DONTCARE|DOUBLE|DOWN|DUPLICATES|DYNAMIC|EBCDIC|EGCS|EGI|ELSE|EMI|EMPTY-CHECK|ENABLE|END|END-ACCEPT|END-ADD|END-CALL|END-COMPUTE|END-DELETE|END-DIVIDE|END-EVALUATE|END-IF|END-MULTIPLY|END-OF-PAGE|END-PERFORM|END-READ|END-RECEIVE|END-RETURN|END-REWRITE|END-SEARCH|END-START|END-STRING|END-SUBTRACT|END-UNSTRING|END-WRITE|ENDING|ENTER|ENTRY|ENTRY-PROCEDURE|ENVIRONMENT|EOL|EOP|EOS|ERASE|ERROR|ESCAPE|ESI|EVALUATE|EVENT|EVERY|EXCEPTION|EXCLUSIVE|EXHIBIT|EXIT|EXPORT|EXTEND|EXTENDED|EXTERNAL|FD|FILE|FILE-CONTROL|FILLER|FINAL|FIRST|FOOTING|FOR|FOREGROUND-COLOR|FOREGROUND-COLOUR|FROM|FULL|FUNCTION|FUNCTION-POINTER|FUNCTIONNAME|GENERATE|GIVING|GLOBAL|GO|GOBACK|GRID|GROUP|HEADING|HIGH-VALUE|HIGH-VALUES|HIGHLIGHT|I-O|I-O-CONTROL|ID|IDENTIFICATION|IF|IMPLICIT|IMPORT|IN|INDEX|INDEXED|INDICATE|INITIAL|INITIALIZE|INITIATE|INPUT|INPUT-OUTPUT|INSPECT|INSTALLATION|INTEGER|INTO|INVALID|INVOKE|IS|JUST|JUSTIFIED|KANJI|KEPT|KEY|KEYBOARD|LABEL|LANGUAGE|LAST|LB|LD|LEADING|LEFT|LEFTLINE|LENGTH|LENGTH-CHECK|LIBACCESS|LIBPARAMETER|LIBRARY|LIMIT|LIMITS|LINAGE|LINAGE-COUNTER|LINE|LINE-COUNTER|LINES|LINKAGE|LIST|LOCAL|LOCAL-STORAGE|LOCK|LONG-DATE|LONG-TIME|LOW-VALUE|LOW-VALUES|LOWER|LOWLIGHT|MEMORY|MERGE|MESSAGE|MMDDYYYY|MODE|MODULES|MORE-LABELS|MOVE|MULTIPLE|MULTIPLY|NAMED|NATIONAL|NATIONAL-EDITED|NATIVE|NEGATIVE|NETWORK|NEXT|NO|NO-ECHO|NULL|NULLS|NUMBER|NUMERIC|NUMERIC-DATE|NUMERIC-EDITED|NUMERIC-TIME|OBJECT-COMPUTER|OCCURS|ODT|OF|OFF|OMITTED|ON|OPEN|OPTIONAL|ORDER|ORDERLY|ORGANIZATION|OTHER|OUTPUT|OVERFLOW|OVERLINE|OWN|PACKED-DECIMAL|PADDING|PAGE|PAGE-COUNTER|PASSWORD|PERFORM|PF|PH|PIC|PICTURE|PLUS|POINTER|PORT|POSITION|POSITIVE|PRINTER|PRINTING|PRIVATE|PROCEDURE|PROCEDURE-POINTER|PROCEDURES|PROCEED|PROCESS|PROGRAM|PROGRAM-ID|PROGRAM-LIBRARY|PROMPT|PURGE|QUEUE|QUOTE|QUOTES|RANDOM|RD|READ|READER|REAL|RECEIVE|RECEIVED|RECORD|RECORDING|RECORDS|RECURSIVE|REDEFINES|REEL|REF|REFERENCE|REFERENCES|RELATIVE|RELEASE|REMAINDER|REMARKS|REMOTE|REMOVAL|REMOVE|RENAMES|REPLACE|REPLACING|REPORT|REPORTING|REPORTS|REQUIRED|RERUN|RESERVE|RESET|RETURN|RETURN-CODE|RETURNING|REVERSE-VIDEO|REVERSED|REWIND|REWRITE|RF|RH|RIGHT|ROUNDED|RUN|SAME|SAVE|SCREEN|SD|SEARCH|SECTION|SECURE|SECURITY|SEGMENT|SEGMENT-LIMIT|SELECT|SEND|SENTENCE|SEPARATE|SEQUENCE|SEQUENTIAL|SET|SHARED|SHAREDBYALL|SHAREDBYRUNUNIT|SHARING|SHIFT-IN|SHIFT-OUT|SHORT-DATE|SIGN|SIZE|SORT|SORT-CONTROL|SORT-CORE-SIZE|SORT-FILE-SIZE|SORT-MERGE|SORT-MESSAGE|SORT-MODE-SIZE|SORT-RETURN|SOURCE|SOURCE-COMPUTER|SPACE|SPACES|SPECIAL-NAMES|STANDARD|STANDARD-1|STANDARD-2|START|STATUS|STOP|STRING|SUB-QUEUE-1|SUB-QUEUE-2|SUB-QUEUE-3|SUBTRACT|SUM|SUPPRESS|SYMBOL|SYMBOLIC|SYNC|SYNCHRONIZED|TABLE|TALLY|TALLYING|TAPE|TASK|TERMINAL|TERMINATE|TEST|TEXT|THEN|THREAD|THREAD-LOCAL|THROUGH|THRU|TIME|TIMER|TIMES|TITLE|TO|TODAYS-DATE|TODAYS-NAME|TOP|TRAILING|TRUNCATED|TYPE|TYPEDEF|UNDERLINE|UNIT|UNSTRING|UNTIL|UP|UPON|USAGE|USE|USING|VALUE|VALUES|VARYING|VIRTUAL|WAIT|WHEN|WHEN-COMPILED|WITH|WORDS|WORKING-STORAGE|WRITE|YEAR|YYYYDDD|YYYYMMDD|ZERO-FILL|ZEROES|ZEROS)(?![\w-])/i,lookbehind:!0},boolean:{pattern:/(^|[^\w-])(?:false|true)(?![\w-])/i,lookbehind:!0},number:{pattern:/(^|[^\w-])(?:[+-]?(?:(?:\d+(?:[.,]\d+)?|[.,]\d+)(?:e[+-]?\d+)?|zero))(?![\w-])/i,lookbehind:!0},operator:[/<>|[<>]=?|[=+*/&]/,{pattern:/(^|[^\w-])(?:-|and|equal|greater|less|not|or|than)(?![\w-])/i,lookbehind:!0}],punctuation:/[.:,()]/}}return Ll}var Dl,SE;function Sz(){if(SE)return Dl;SE=1,Dl=e,e.displayName="coffeescript",e.aliases=["coffee"];function e(t){(function(n){var r=/#(?!\{).+/,a={pattern:/#\{[^}]+\}/,alias:"variable"};n.languages.coffeescript=n.languages.extend("javascript",{comment:r,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:a}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),n.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:r,interpolation:a}}}),n.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:n.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:a}}]}),n.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete n.languages.coffeescript["template-string"],n.languages.coffee=n.languages.coffeescript})(t)}return Dl}var Ml,vE;function vz(){if(vE)return Ml;vE=1,Ml=e,e.displayName="concurnas",e.aliases=["conc"];function e(t){t.languages.concurnas={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?(?:\*\/|$)|\/\/.*)/,lookbehind:!0,greedy:!0},langext:{pattern:/\b\w+\s*\|\|[\s\S]+?\|\|/,greedy:!0,inside:{"class-name":/^\w+/,string:{pattern:/(^\s*\|\|)[\s\S]+(?=\|\|$)/,lookbehind:!0},punctuation:/\|\|/}},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/,lookbehind:!0},keyword:/\b(?:abstract|actor|also|annotation|assert|async|await|bool|boolean|break|byte|case|catch|changed|char|class|closed|constant|continue|def|default|del|double|elif|else|enum|every|extends|false|finally|float|for|from|global|gpudef|gpukernel|if|import|in|init|inject|int|lambda|local|long|loop|match|new|nodefault|null|of|onchange|open|out|override|package|parfor|parforsync|post|pre|private|protected|provide|provider|public|return|shared|short|single|size_t|sizeof|super|sync|this|throw|trait|trans|transient|true|try|typedef|unchecked|using|val|var|void|while|with)\b/,boolean:/\b(?:false|true)\b/,number:/\b0b[01][01_]*L?\b|\b0x(?:[\da-f_]*\.)?[\da-f_p+-]+\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfls]?/i,punctuation:/[{}[\];(),.:]/,operator:/<==|>==|=>|->|<-|<>|&==|&<>|\?:?|\.\?|\+\+|--|[-+*/=<>]=?|[!^~]|\b(?:and|as|band|bor|bxor|comp|is|isnot|mod|or)\b=?/,annotation:{pattern:/@(?:\w+:)?(?:\w+|\[[^\]]+\])?/,alias:"builtin"}},t.languages.insertBefore("concurnas","langext",{"regex-literal":{pattern:/\br("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:t.languages.concurnas},regex:/[\s\S]+/}},"string-literal":{pattern:/(?:\B|\bs)("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:t.languages.concurnas},string:/[\s\S]+/}}}),t.languages.conc=t.languages.concurnas}return Ml}var Fl,kE;function kz(){if(kE)return Fl;kE=1,Fl=e,e.displayName="coq",e.aliases=[];function e(t){(function(n){for(var r=/\(\*(?:[^(*]|\((?!\*)|\*(?!\))|)*\*\)/.source,a=0;a<2;a++)r=r.replace(//g,function(){return r});r=r.replace(//g,"[]"),n.languages.coq={comment:RegExp(r),string:{pattern:/"(?:[^"]|"")*"(?!")/,greedy:!0},attribute:[{pattern:RegExp(/#\[(?:[^\[\]("]|"(?:[^"]|"")*"(?!")|\((?!\*)|)*\]/.source.replace(//g,function(){return r})),greedy:!0,alias:"attr-name",inside:{comment:RegExp(r),string:{pattern:/"(?:[^"]|"")*"(?!")/,greedy:!0},operator:/=/,punctuation:/^#\[|\]$|[,()]/}},{pattern:/\b(?:Cumulative|Global|Local|Monomorphic|NonCumulative|Polymorphic|Private|Program)\b/,alias:"attr-name"}],keyword:/\b(?:Abort|About|Add|Admit|Admitted|All|Arguments|As|Assumptions|Axiom|Axioms|Back|BackTo|Backtrace|BinOp|BinOpSpec|BinRel|Bind|Blacklist|Canonical|Case|Cd|Check|Class|Classes|Close|CoFixpoint|CoInductive|Coercion|Coercions|Collection|Combined|Compute|Conjecture|Conjectures|Constant|Constants|Constraint|Constructors|Context|Corollary|Create|CstOp|Custom|Cut|Debug|Declare|Defined|Definition|Delimit|Dependencies|Dependent|Derive|Diffs|Drop|Elimination|End|Entry|Equality|Eval|Example|Existential|Existentials|Existing|Export|Extern|Extraction|Fact|Fail|Field|File|Firstorder|Fixpoint|Flags|Focus|From|Funclass|Function|Functional|GC|Generalizable|Goal|Grab|Grammar|Graph|Guarded|Haskell|Heap|Hide|Hint|HintDb|Hints|Hypotheses|Hypothesis|IF|Identity|Immediate|Implicit|Implicits|Import|Include|Induction|Inductive|Infix|Info|Initial|InjTyp|Inline|Inspect|Instance|Instances|Intro|Intros|Inversion|Inversion_clear|JSON|Language|Left|Lemma|Let|Lia|Libraries|Library|Load|LoadPath|Locate|Ltac|Ltac2|ML|Match|Method|Minimality|Module|Modules|Morphism|Next|NoInline|Notation|Number|OCaml|Obligation|Obligations|Opaque|Open|Optimize|Parameter|Parameters|Parametric|Path|Paths|Prenex|Preterm|Primitive|Print|Profile|Projections|Proof|Prop|PropBinOp|PropOp|PropUOp|Property|Proposition|Pwd|Qed|Quit|Rec|Record|Recursive|Redirect|Reduction|Register|Relation|Remark|Remove|Require|Reserved|Reset|Resolve|Restart|Rewrite|Right|Ring|Rings|SProp|Saturate|Save|Scheme|Scope|Scopes|Search|SearchHead|SearchPattern|SearchRewrite|Section|Separate|Set|Setoid|Show|Signatures|Solve|Solver|Sort|Sortclass|Sorted|Spec|Step|Strategies|Strategy|String|Structure|SubClass|Subgraph|SuchThat|Tactic|Term|TestCompile|Theorem|Time|Timeout|To|Transparent|Type|Typeclasses|Types|Typing|UnOp|UnOpSpec|Undelimit|Undo|Unfocus|Unfocused|Unfold|Universe|Universes|Unshelve|Variable|Variables|Variant|Verbose|View|Visibility|Zify|_|apply|as|at|by|cofix|else|end|exists|exists2|fix|for|forall|fun|if|in|let|match|measure|move|removed|return|struct|then|using|wf|where|with)\b/,number:/\b(?:0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]+)?(?:p[+-]?\d[\d_]*)?|\d[\d_]*(?:\.[\d_]+)?(?:e[+-]?\d[\d_]*)?)\b/i,punct:{pattern:/@\{|\{\||\[=|:>/,alias:"punctuation"},operator:/\/\\|\\\/|\.{2,3}|:{1,2}=|\*\*|[-=]>|<(?:->?|[+:=>]|<:)|>(?:=|->)|\|[-|]?|[-!%&*+/<=>?@^~']/,punctuation:/\.\(|`\(|@\{|`\{|\{\||\[=|:>|[:.,;(){}\[\]]/}})(t)}return Fl}var Pl,wE;function Zo(){if(wE)return Pl;wE=1,Pl=e,e.displayName="ruby",e.aliases=["rb"];function e(t){(function(n){n.languages.ruby=n.languages.extend("clike",{comment:{pattern:/#.*|^=begin\s[\s\S]*?^=end/m,greedy:!0},"class-name":{pattern:/(\b(?:class|module)\s+|\bcatch\s+\()[\w.\\]+|\b[A-Z_]\w*(?=\s*\.\s*new\b)/,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/,operator:/\.{2,3}|&\.|===||[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/,punctuation:/[(){}[\].,;]/}),n.languages.insertBefore("ruby","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}});var r={pattern:/((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/,lookbehind:!0,inside:{content:{pattern:/^(#\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:n.languages.ruby},delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"}}};delete n.languages.ruby.function;var a="(?:"+[/([^a-zA-Z0-9\s{(\[<=])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/\((?:[^()\\]|\\[\s\S]|\((?:[^()\\]|\\[\s\S])*\))*\)/.source,/\{(?:[^{}\\]|\\[\s\S]|\{(?:[^{}\\]|\\[\s\S])*\})*\}/.source,/\[(?:[^\[\]\\]|\\[\s\S]|\[(?:[^\[\]\\]|\\[\s\S])*\])*\]/.source,/<(?:[^<>\\]|\\[\s\S]|<(?:[^<>\\]|\\[\s\S])*>)*>/.source].join("|")+")",i=/(?:"(?:\\.|[^"\\\r\n])*"|(?:\b[a-zA-Z_]\w*|[^\s\0-\x7F]+)[?!]?|\$.)/.source;n.languages.insertBefore("ruby","keyword",{"regex-literal":[{pattern:RegExp(/%r/.source+a+/[egimnosux]{0,6}/.source),greedy:!0,inside:{interpolation:r,regex:/[\s\S]+/}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,lookbehind:!0,greedy:!0,inside:{interpolation:r,regex:/[\s\S]+/}}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:[{pattern:RegExp(/(^|[^:]):/.source+i),lookbehind:!0,greedy:!0},{pattern:RegExp(/([\r\n{(,][ \t]*)/.source+i+/(?=:(?!:))/.source),lookbehind:!0,greedy:!0}],"method-definition":{pattern:/(\bdef\s+)\w+(?:\s*\.\s*\w+)?/,lookbehind:!0,inside:{function:/\b\w+$/,keyword:/^self\b/,"class-name":/^\w+/,punctuation:/\./}}}),n.languages.insertBefore("ruby","string",{"string-literal":[{pattern:RegExp(/%[qQiIwWs]?/.source+a),greedy:!0,inside:{interpolation:r,string:/[\s\S]+/}},{pattern:/("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,greedy:!0,inside:{interpolation:r,string:/[\s\S]+/}},{pattern:/<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?/}},interpolation:r,string:/[\s\S]+/}},{pattern:/<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?'|'$/}},string:/[\s\S]+/}}],"command-literal":[{pattern:RegExp(/%x/.source+a),greedy:!0,inside:{interpolation:r,command:{pattern:/[\s\S]+/,alias:"string"}}},{pattern:/`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/,greedy:!0,inside:{interpolation:r,command:{pattern:/[\s\S]+/,alias:"string"}}}]}),delete n.languages.ruby.string,n.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\b/,constant:/\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/}),n.languages.rb=n.languages.ruby})(t)}return Pl}var Ul,_E;function wz(){if(_E)return Ul;_E=1;var e=Zo();Ul=t,t.displayName="crystal",t.aliases=[];function t(n){n.register(e),function(r){r.languages.crystal=r.languages.extend("ruby",{keyword:[/\b(?:__DIR__|__END_LINE__|__FILE__|__LINE__|abstract|alias|annotation|as|asm|begin|break|case|class|def|do|else|elsif|end|ensure|enum|extend|for|fun|if|ifdef|include|instance_sizeof|lib|macro|module|next|of|out|pointerof|private|protected|ptr|require|rescue|return|select|self|sizeof|struct|super|then|type|typeof|undef|uninitialized|union|unless|until|when|while|with|yield)\b/,{pattern:/(\.\s*)(?:is_a|responds_to)\?/,lookbehind:!0}],number:/\b(?:0b[01_]*[01]|0o[0-7_]*[0-7]|0x[\da-fA-F_]*[\da-fA-F]|(?:\d(?:[\d_]*\d)?)(?:\.[\d_]*\d)?(?:[eE][+-]?[\d_]*\d)?)(?:_(?:[uif](?:8|16|32|64))?)?\b/,operator:[/->/,r.languages.ruby.operator],punctuation:/[(){}[\].,;\\]/}),r.languages.insertBefore("crystal","string-literal",{attribute:{pattern:/@\[.*?\]/,inside:{delimiter:{pattern:/^@\[|\]$/,alias:"punctuation"},attribute:{pattern:/^(\s*)\w+/,lookbehind:!0,alias:"class-name"},args:{pattern:/\S(?:[\s\S]*\S)?/,inside:r.languages.crystal}}},expansion:{pattern:/\{(?:\{.*?\}|%.*?%)\}/,inside:{content:{pattern:/^(\{.)[\s\S]+(?=.\}$)/,lookbehind:!0,inside:r.languages.crystal},delimiter:{pattern:/^\{[\{%]|[\}%]\}$/,alias:"operator"}}},char:{pattern:/'(?:[^\\\r\n]{1,2}|\\(?:.|u(?:[A-Fa-f0-9]{1,4}|\{[A-Fa-f0-9]{1,6}\})))'/,greedy:!0}})}(n)}return Ul}var Bl,TE;function _z(){if(TE)return Bl;TE=1;var e=Xo();Bl=t,t.displayName="cshtml",t.aliases=["razor"];function t(n){n.register(e),function(r){var a=/\/(?![/*])|\/\/.*[\r\n]|\/\*[^*]*(?:\*(?!\/)[^*]*)*\*\//.source,i=/@(?!")|"(?:[^\r\n\\"]|\\.)*"|@"(?:[^\\"]|""|\\[\s\S])*"(?!")/.source+"|"+/'(?:(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'|(?=[^\\](?!')))/.source;function o(T,b){for(var g=0;g/g,function(){return"(?:"+T+")"});return T.replace(//g,"[^\\s\\S]").replace(//g,"(?:"+i+")").replace(//g,"(?:"+a+")")}var s=o(/\((?:[^()'"@/]|||)*\)/.source,2),l=o(/\[(?:[^\[\]'"@/]|||)*\]/.source,2),u=o(/\{(?:[^{}'"@/]|||)*\}/.source,2),d=o(/<(?:[^<>'"@/]|||)*>/.source,2),c=/(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?/.source,f=/(?!\d)[^\s>\/=$<%]+/.source+c+/\s*\/?>/.source,p=/\B@?/.source+"(?:"+/<([a-zA-Z][\w:]*)/.source+c+/\s*>/.source+"(?:"+(/[^<]/.source+"|"+/<\/?(?!\1\b)/.source+f+"|"+o(/<\1/.source+c+/\s*>/.source+"(?:"+(/[^<]/.source+"|"+/<\/?(?!\1\b)/.source+f+"|")+")*"+/<\/\1\s*>/.source,2))+")*"+/<\/\1\s*>/.source+"|"+/|\+|~|\|\|/,punctuation:/[(),]/}},n.languages.css.atrule.inside["selector-function-argument"].inside=a,n.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var i={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};n.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:i,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:i,number:o})})(t)}return zl}var Gl,IE;function Rz(){if(IE)return Gl;IE=1,Gl=e,e.displayName="csv",e.aliases=[];function e(t){t.languages.csv={value:/[^\r\n,"]+|"(?:[^"]|"")*"(?!")/,punctuation:/,/}}return Gl}var ql,CE;function Iz(){if(CE)return ql;CE=1,ql=e,e.displayName="cypher",e.aliases=[];function e(t){t.languages.cypher={comment:/\/\/.*/,string:{pattern:/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/,greedy:!0},"class-name":{pattern:/(:\s*)(?:\w+|`(?:[^`\\\r\n])*`)(?=\s*[{):])/,lookbehind:!0,greedy:!0},relationship:{pattern:/(-\[\s*(?:\w+\s*|`(?:[^`\\\r\n])*`\s*)?:\s*|\|\s*:\s*)(?:\w+|`(?:[^`\\\r\n])*`)/,lookbehind:!0,greedy:!0,alias:"property"},identifier:{pattern:/`(?:[^`\\\r\n])*`/,greedy:!0},variable:/\$\w+/,keyword:/\b(?:ADD|ALL|AND|AS|ASC|ASCENDING|ASSERT|BY|CALL|CASE|COMMIT|CONSTRAINT|CONTAINS|CREATE|CSV|DELETE|DESC|DESCENDING|DETACH|DISTINCT|DO|DROP|ELSE|END|ENDS|EXISTS|FOR|FOREACH|IN|INDEX|IS|JOIN|KEY|LIMIT|LOAD|MANDATORY|MATCH|MERGE|NODE|NOT|OF|ON|OPTIONAL|OR|ORDER(?=\s+BY)|PERIODIC|REMOVE|REQUIRE|RETURN|SCALAR|SCAN|SET|SKIP|START|STARTS|THEN|UNION|UNIQUE|UNWIND|USING|WHEN|WHERE|WITH|XOR|YIELD)\b/i,function:/\b\w+\b(?=\s*\()/,boolean:/\b(?:false|null|true)\b/i,number:/\b(?:0x[\da-fA-F]+|\d+(?:\.\d+)?(?:[eE][+-]?\d+)?)\b/,operator:/:|<--?|--?>?|<>|=~?|[<>]=?|[+*/%^|]|\.\.\.?/,punctuation:/[()[\]{},;.]/}}return ql}var jl,NE;function Cz(){if(NE)return jl;NE=1,jl=e,e.displayName="d",e.aliases=[];function e(t){t.languages.d=t.languages.extend("clike",{comment:[{pattern:/^\s*#!.+/,greedy:!0},{pattern:RegExp(/(^|[^\\])/.source+"(?:"+[/\/\+(?:\/\+(?:[^+]|\+(?!\/))*\+\/|(?!\/\+)[\s\S])*?\+\//.source,/\/\/.*/.source,/\/\*[\s\S]*?\*\//.source].join("|")+")"),lookbehind:!0,greedy:!0}],string:[{pattern:RegExp([/\b[rx]"(?:\\[\s\S]|[^\\"])*"[cwd]?/.source,/\bq"(?:\[[\s\S]*?\]|\([\s\S]*?\)|<[\s\S]*?>|\{[\s\S]*?\})"/.source,/\bq"((?!\d)\w+)$[\s\S]*?^\1"/.source,/\bq"(.)[\s\S]*?\2"/.source,/(["`])(?:\\[\s\S]|(?!\3)[^\\])*\3[cwd]?/.source].join("|"),"m"),greedy:!0},{pattern:/\bq\{(?:\{[^{}]*\}|[^{}])*\}/,greedy:!0,alias:"token-string"}],keyword:/\$|\b(?:__(?:(?:DATE|EOF|FILE|FUNCTION|LINE|MODULE|PRETTY_FUNCTION|TIMESTAMP|TIME|VENDOR|VERSION)__|gshared|parameters|traits|vector)|abstract|alias|align|asm|assert|auto|body|bool|break|byte|case|cast|catch|cdouble|cent|cfloat|char|class|const|continue|creal|dchar|debug|default|delegate|delete|deprecated|do|double|dstring|else|enum|export|extern|false|final|finally|float|for|foreach|foreach_reverse|function|goto|idouble|if|ifloat|immutable|import|inout|int|interface|invariant|ireal|lazy|long|macro|mixin|module|new|nothrow|null|out|override|package|pragma|private|protected|ptrdiff_t|public|pure|real|ref|return|scope|shared|short|size_t|static|string|struct|super|switch|synchronized|template|this|throw|true|try|typedef|typeid|typeof|ubyte|ucent|uint|ulong|union|unittest|ushort|version|void|volatile|wchar|while|with|wstring)\b/,number:[/\b0x\.?[a-f\d_]+(?:(?!\.\.)\.[a-f\d_]*)?(?:p[+-]?[a-f\d_]+)?[ulfi]{0,4}/i,{pattern:/((?:\.\.)?)(?:\b0b\.?|\b|\.)\d[\d_]*(?:(?!\.\.)\.[\d_]*)?(?:e[+-]?\d[\d_]*)?[ulfi]{0,4}/i,lookbehind:!0}],operator:/\|[|=]?|&[&=]?|\+[+=]?|-[-=]?|\.?\.\.|=[>=]?|!(?:i[ns]\b|<>?=?|>=?|=)?|\bi[ns]\b|(?:<[<>]?|>>?>?|\^\^|[*\/%^~])=?/}),t.languages.insertBefore("d","string",{char:/'(?:\\(?:\W|\w+)|[^\\])'/}),t.languages.insertBefore("d","keyword",{property:/\B@\w*/}),t.languages.insertBefore("d","function",{register:{pattern:/\b(?:[ABCD][LHX]|E?(?:BP|DI|SI|SP)|[BS]PL|[ECSDGF]S|CR[0234]|[DS]IL|DR[012367]|E[ABCD]X|X?MM[0-7]|R(?:1[0-5]|[89])[BWD]?|R[ABCD]X|R[BS]P|R[DS]I|TR[3-7]|XMM(?:1[0-5]|[89])|YMM(?:1[0-5]|\d))\b|\bST(?:\([0-7]\)|\b)/,alias:"variable"}})}return jl}var Hl,xE;function Nz(){if(xE)return Hl;xE=1,Hl=e,e.displayName="dart",e.aliases=[];function e(t){(function(n){var r=[/\b(?:async|sync|yield)\*/,/\b(?:abstract|assert|async|await|break|case|catch|class|const|continue|covariant|default|deferred|do|dynamic|else|enum|export|extends|extension|external|factory|final|finally|for|get|hide|if|implements|import|in|interface|library|mixin|new|null|on|operator|part|rethrow|return|set|show|static|super|switch|sync|this|throw|try|typedef|var|void|while|with|yield)\b/],a=/(^|[^\w.])(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,i={pattern:RegExp(a+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}}}};n.languages.dart=n.languages.extend("clike",{"class-name":[i,{pattern:RegExp(a+/[A-Z]\w*(?=\s+\w+\s*[;,=()])/.source),lookbehind:!0,inside:i.inside}],keyword:r,operator:/\bis!|\b(?:as|is)\b|\+\+|--|&&|\|\||<<=?|>>=?|~(?:\/=?)?|[+\-*\/%&^|=!<>]=?|\?/}),n.languages.insertBefore("dart","string",{"string-literal":{pattern:/r?(?:("""|''')[\s\S]*?\1|(["'])(?:\\.|(?!\2)[^\\\r\n])*\2(?!\2))/,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:\w+|\{(?:[^{}]|\{[^{}]*\})*\})/,lookbehind:!0,inside:{punctuation:/^\$\{?|\}$/,expression:{pattern:/[\s\S]+/,inside:n.languages.dart}}},string:/[\s\S]+/}},string:void 0}),n.languages.insertBefore("dart","class-name",{metadata:{pattern:/@\w+/,alias:"function"}}),n.languages.insertBefore("dart","class-name",{generics:{pattern:/<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<[\w\s,.&?]*>)*>)*>)*>/,inside:{"class-name":i,keyword:r,punctuation:/[<>(),.:]/,operator:/[?&|]/}}})})(t)}return Hl}var Vl,OE;function xz(){if(OE)return Vl;OE=1,Vl=e,e.displayName="dataweave",e.aliases=[];function e(t){(function(n){n.languages.dataweave={url:/\b[A-Za-z]+:\/\/[\w/:.?=&-]+|\burn:[\w:.?=&-]+/,property:{pattern:/(?:\b\w+#)?(?:"(?:\\.|[^\\"\r\n])*"|\b\w+)(?=\s*[:@])/,greedy:!0},string:{pattern:/(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0},"mime-type":/\b(?:application|audio|image|multipart|text|video)\/[\w+-]+/,date:{pattern:/\|[\w:+-]+\|/,greedy:!0},comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],regex:{pattern:/\/(?:[^\\\/\r\n]|\\[^\r\n])+\//,greedy:!0},keyword:/\b(?:and|as|at|case|do|else|fun|if|input|is|match|not|ns|null|or|output|type|unless|update|using|var)\b/,function:/\b[A-Z_]\w*(?=\s*\()/i,number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\];(),.:@]/,operator:/<<|>>|->|[<>~=]=?|!=|--?-?|\+\+?|!|\?/,boolean:/\b(?:false|true)\b/}})(t)}return Vl}var Wl,LE;function Oz(){if(LE)return Wl;LE=1,Wl=e,e.displayName="dax",e.aliases=[];function e(t){t.languages.dax={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/).*)/,lookbehind:!0},"data-field":{pattern:/'(?:[^']|'')*'(?!')(?:\[[ \w\xA0-\uFFFF]+\])?|\w+\[[ \w\xA0-\uFFFF]+\]/,alias:"symbol"},measure:{pattern:/\[[ \w\xA0-\uFFFF]+\]/,alias:"constant"},string:{pattern:/"(?:[^"]|"")*"(?!")/,greedy:!0},function:/\b(?:ABS|ACOS|ACOSH|ACOT|ACOTH|ADDCOLUMNS|ADDMISSINGITEMS|ALL|ALLCROSSFILTERED|ALLEXCEPT|ALLNOBLANKROW|ALLSELECTED|AND|APPROXIMATEDISTINCTCOUNT|ASIN|ASINH|ATAN|ATANH|AVERAGE|AVERAGEA|AVERAGEX|BETA\.DIST|BETA\.INV|BLANK|CALCULATE|CALCULATETABLE|CALENDAR|CALENDARAUTO|CEILING|CHISQ\.DIST|CHISQ\.DIST\.RT|CHISQ\.INV|CHISQ\.INV\.RT|CLOSINGBALANCEMONTH|CLOSINGBALANCEQUARTER|CLOSINGBALANCEYEAR|COALESCE|COMBIN|COMBINA|COMBINEVALUES|CONCATENATE|CONCATENATEX|CONFIDENCE\.NORM|CONFIDENCE\.T|CONTAINS|CONTAINSROW|CONTAINSSTRING|CONTAINSSTRINGEXACT|CONVERT|COS|COSH|COT|COTH|COUNT|COUNTA|COUNTAX|COUNTBLANK|COUNTROWS|COUNTX|CROSSFILTER|CROSSJOIN|CURRENCY|CURRENTGROUP|CUSTOMDATA|DATATABLE|DATE|DATEADD|DATEDIFF|DATESBETWEEN|DATESINPERIOD|DATESMTD|DATESQTD|DATESYTD|DATEVALUE|DAY|DEGREES|DETAILROWS|DISTINCT|DISTINCTCOUNT|DISTINCTCOUNTNOBLANK|DIVIDE|EARLIER|EARLIEST|EDATE|ENDOFMONTH|ENDOFQUARTER|ENDOFYEAR|EOMONTH|ERROR|EVEN|EXACT|EXCEPT|EXP|EXPON\.DIST|FACT|FALSE|FILTER|FILTERS|FIND|FIRSTDATE|FIRSTNONBLANK|FIRSTNONBLANKVALUE|FIXED|FLOOR|FORMAT|GCD|GENERATE|GENERATEALL|GENERATESERIES|GEOMEAN|GEOMEANX|GROUPBY|HASONEFILTER|HASONEVALUE|HOUR|IF|IF\.EAGER|IFERROR|IGNORE|INT|INTERSECT|ISBLANK|ISCROSSFILTERED|ISEMPTY|ISERROR|ISEVEN|ISFILTERED|ISINSCOPE|ISLOGICAL|ISNONTEXT|ISNUMBER|ISO\.CEILING|ISODD|ISONORAFTER|ISSELECTEDMEASURE|ISSUBTOTAL|ISTEXT|KEEPFILTERS|KEYWORDMATCH|LASTDATE|LASTNONBLANK|LASTNONBLANKVALUE|LCM|LEFT|LEN|LN|LOG|LOG10|LOOKUPVALUE|LOWER|MAX|MAXA|MAXX|MEDIAN|MEDIANX|MID|MIN|MINA|MINUTE|MINX|MOD|MONTH|MROUND|NATURALINNERJOIN|NATURALLEFTOUTERJOIN|NEXTDAY|NEXTMONTH|NEXTQUARTER|NEXTYEAR|NONVISUAL|NORM\.DIST|NORM\.INV|NORM\.S\.DIST|NORM\.S\.INV|NOT|NOW|ODD|OPENINGBALANCEMONTH|OPENINGBALANCEQUARTER|OPENINGBALANCEYEAR|OR|PARALLELPERIOD|PATH|PATHCONTAINS|PATHITEM|PATHITEMREVERSE|PATHLENGTH|PERCENTILE\.EXC|PERCENTILE\.INC|PERCENTILEX\.EXC|PERCENTILEX\.INC|PERMUT|PI|POISSON\.DIST|POWER|PREVIOUSDAY|PREVIOUSMONTH|PREVIOUSQUARTER|PREVIOUSYEAR|PRODUCT|PRODUCTX|QUARTER|QUOTIENT|RADIANS|RAND|RANDBETWEEN|RANK\.EQ|RANKX|RELATED|RELATEDTABLE|REMOVEFILTERS|REPLACE|REPT|RIGHT|ROLLUP|ROLLUPADDISSUBTOTAL|ROLLUPGROUP|ROLLUPISSUBTOTAL|ROUND|ROUNDDOWN|ROUNDUP|ROW|SAMEPERIODLASTYEAR|SAMPLE|SEARCH|SECOND|SELECTCOLUMNS|SELECTEDMEASURE|SELECTEDMEASUREFORMATSTRING|SELECTEDMEASURENAME|SELECTEDVALUE|SIGN|SIN|SINH|SQRT|SQRTPI|STARTOFMONTH|STARTOFQUARTER|STARTOFYEAR|STDEV\.P|STDEV\.S|STDEVX\.P|STDEVX\.S|SUBSTITUTE|SUBSTITUTEWITHINDEX|SUM|SUMMARIZE|SUMMARIZECOLUMNS|SUMX|SWITCH|T\.DIST|T\.DIST\.2T|T\.DIST\.RT|T\.INV|T\.INV\.2T|TAN|TANH|TIME|TIMEVALUE|TODAY|TOPN|TOPNPERLEVEL|TOPNSKIP|TOTALMTD|TOTALQTD|TOTALYTD|TREATAS|TRIM|TRUE|TRUNC|UNICHAR|UNICODE|UNION|UPPER|USERELATIONSHIP|USERNAME|USEROBJECTID|USERPRINCIPALNAME|UTCNOW|UTCTODAY|VALUE|VALUES|VAR\.P|VAR\.S|VARX\.P|VARX\.S|WEEKDAY|WEEKNUM|XIRR|XNPV|YEAR|YEARFRAC)(?=\s*\()/i,keyword:/\b(?:DEFINE|EVALUATE|MEASURE|ORDER\s+BY|RETURN|VAR|START\s+AT|ASC|DESC)\b/i,boolean:{pattern:/\b(?:FALSE|NULL|TRUE)\b/i,alias:"constant"},number:/\b\d+(?:\.\d*)?|\B\.\d+\b/,operator:/:=|[-+*\/=^]|&&?|\|\||<(?:=>?|<|>)?|>[>=]?|\b(?:IN|NOT)\b/i,punctuation:/[;\[\](){}`,.]/}}return Wl}var Yl,DE;function Lz(){if(DE)return Yl;DE=1,Yl=e,e.displayName="dhall",e.aliases=[];function e(t){t.languages.dhall={comment:/--.*|\{-(?:[^-{]|-(?!\})|\{(?!-)|\{-(?:[^-{]|-(?!\})|\{(?!-))*-\})*-\}/,string:{pattern:/"(?:[^"\\]|\\.)*"|''(?:[^']|'(?!')|'''|''\$\{)*''(?!'|\$)/,greedy:!0,inside:{interpolation:{pattern:/\$\{[^{}]*\}/,inside:{expression:{pattern:/(^\$\{)[\s\S]+(?=\}$)/,lookbehind:!0,alias:"language-dhall",inside:null},punctuation:/\$\{|\}/}}}},label:{pattern:/`[^`]*`/,greedy:!0},url:{pattern:/\bhttps?:\/\/[\w.:%!$&'*+;=@~-]+(?:\/[\w.:%!$&'*+;=@~-]*)*(?:\?[/?\w.:%!$&'*+;=@~-]*)?/,greedy:!0},env:{pattern:/\benv:(?:(?!\d)\w+|"(?:[^"\\=]|\\.)*")/,greedy:!0,inside:{function:/^env/,operator:/^:/,variable:/[\s\S]+/}},hash:{pattern:/\bsha256:[\da-fA-F]{64}\b/,inside:{function:/sha256/,operator:/:/,number:/[\da-fA-F]{64}/}},keyword:/\b(?:as|assert|else|forall|if|in|let|merge|missing|then|toMap|using|with)\b|\u2200/,builtin:/\b(?:None|Some)\b/,boolean:/\b(?:False|True)\b/,number:/\bNaN\b|-?\bInfinity\b|[+-]?\b(?:0x[\da-fA-F]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)\b/,operator:/\/\\|\/\/\\\\|&&|\|\||===|[!=]=|\/\/|->|\+\+|::|[+*#@=:?<>|\\\u2227\u2a53\u2261\u2afd\u03bb\u2192]/,punctuation:/\.\.|[{}\[\](),./]/,"class-name":/\b[A-Z]\w*\b/},t.languages.dhall.string.inside.interpolation.inside.expression.inside=t.languages.dhall}return Yl}var Kl,ME;function Dz(){if(ME)return Kl;ME=1,Kl=e,e.displayName="diff",e.aliases=[];function e(t){(function(n){n.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var r={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(r).forEach(function(a){var i=r[a],o=[];/^\w+$/.test(a)||o.push(/\w+/.exec(a)[0]),a==="diff"&&o.push("bold"),n.languages.diff[a]={pattern:RegExp("^(?:["+i+`].*(?:\r -?| -|(?![\\s\\S])))+`,"m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(a)[0]}}}}),Object.defineProperty(n.languages.diff,"PREFIXES",{value:r})})(t)}return Kl}var Xl,FE;function nt(){if(FE)return Xl;FE=1,Xl=e,e.displayName="markupTemplating",e.aliases=[];function e(t){(function(n){function r(a,i){return"___"+a.toUpperCase()+i+"___"}Object.defineProperties(n.languages["markup-templating"]={},{buildPlaceholders:{value:function(a,i,o,s){if(a.language===i){var l=a.tokenStack=[];a.code=a.code.replace(o,function(u){if(typeof s=="function"&&!s(u))return u;for(var d=l.length,c;a.code.indexOf(c=r(i,d))!==-1;)++d;return l[d]=u,c}),a.grammar=n.languages.markup}}},tokenizePlaceholders:{value:function(a,i){if(a.language!==i||!a.tokenStack)return;a.grammar=n.languages[i];var o=0,s=Object.keys(a.tokenStack);function l(u){for(var d=0;d=s.length);d++){var c=u[d];if(typeof c=="string"||c.content&&typeof c.content=="string"){var f=s[o],p=a.tokenStack[f],h=typeof c=="string"?c:c.content,y=r(i,f),T=h.indexOf(y);if(T>-1){++o;var b=h.substring(0,T),g=new n.Token(i,n.tokenize(p,a.grammar),"language-"+i,p),m=h.substring(T+y.length),v=[];b&&v.push.apply(v,l([b])),v.push(g),m&&v.push.apply(v,l([m])),typeof c=="string"?u.splice.apply(u,[d,1].concat(v)):c.content=v}}else c.content&&l(c.content)}return u}l(a.tokens)}}})})(t)}return Xl}var Zl,PE;function Mz(){if(PE)return Zl;PE=1;var e=nt();Zl=t,t.displayName="django",t.aliases=["jinja2"];function t(n){n.register(e),function(r){r.languages.django={comment:/^\{#[\s\S]*?#\}$/,tag:{pattern:/(^\{%[+-]?\s*)\w+/,lookbehind:!0,alias:"keyword"},delimiter:{pattern:/^\{[{%][+-]?|[+-]?[}%]\}$/,alias:"punctuation"},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},filter:{pattern:/(\|)\w+/,lookbehind:!0,alias:"function"},test:{pattern:/(\bis\s+(?:not\s+)?)(?!not\b)\w+/,lookbehind:!0,alias:"function"},function:/\b[a-z_]\w+(?=\s*\()/i,keyword:/\b(?:and|as|by|else|for|if|import|in|is|loop|not|or|recursive|with|without)\b/,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,number:/\b\d+(?:\.\d+)?\b/,boolean:/[Ff]alse|[Nn]one|[Tt]rue/,variable:/\b\w+\b/,punctuation:/[{}[\](),.:;]/};var a=/\{\{[\s\S]*?\}\}|\{%[\s\S]*?%\}|\{#[\s\S]*?#\}/g,i=r.languages["markup-templating"];r.hooks.add("before-tokenize",function(o){i.buildPlaceholders(o,"django",a)}),r.hooks.add("after-tokenize",function(o){i.tokenizePlaceholders(o,"django")}),r.languages.jinja2=r.languages.django,r.hooks.add("before-tokenize",function(o){i.buildPlaceholders(o,"jinja2",a)}),r.hooks.add("after-tokenize",function(o){i.tokenizePlaceholders(o,"jinja2")})}(n)}return Zl}var Ql,UE;function Fz(){if(UE)return Ql;UE=1,Ql=e,e.displayName="dnsZoneFile",e.aliases=[];function e(t){t.languages["dns-zone-file"]={comment:/;.*/,string:{pattern:/"(?:\\.|[^"\\\r\n])*"/,greedy:!0},variable:[{pattern:/(^\$ORIGIN[ \t]+)\S+/m,lookbehind:!0},{pattern:/(^|\s)@(?=\s|$)/,lookbehind:!0}],keyword:/^\$(?:INCLUDE|ORIGIN|TTL)(?=\s|$)/m,class:{pattern:/(^|\s)(?:CH|CS|HS|IN)(?=\s|$)/,lookbehind:!0,alias:"keyword"},type:{pattern:/(^|\s)(?:A|A6|AAAA|AFSDB|APL|ATMA|CAA|CDNSKEY|CDS|CERT|CNAME|DHCID|DLV|DNAME|DNSKEY|DS|EID|GID|GPOS|HINFO|HIP|IPSECKEY|ISDN|KEY|KX|LOC|MAILA|MAILB|MB|MD|MF|MG|MINFO|MR|MX|NAPTR|NB|NBSTAT|NIMLOC|NINFO|NS|NSAP|NSAP-PTR|NSEC|NSEC3|NSEC3PARAM|NULL|NXT|OPENPGPKEY|PTR|PX|RKEY|RP|RRSIG|RT|SIG|SINK|SMIMEA|SOA|SPF|SRV|SSHFP|TA|TKEY|TLSA|TSIG|TXT|UID|UINFO|UNSPEC|URI|WKS|X25)(?=\s|$)/,lookbehind:!0,alias:"keyword"},punctuation:/[()]/},t.languages["dns-zone"]=t.languages["dns-zone-file"]}return Ql}var Jl,BE;function Pz(){if(BE)return Jl;BE=1,Jl=e,e.displayName="docker",e.aliases=["dockerfile"];function e(t){(function(n){var r=/\\[\r\n](?:\s|\\[\r\n]|#.*(?!.))*(?![\s#]|\\[\r\n])/.source,a=/(?:[ \t]+(?![ \t])(?:)?|)/.source.replace(//g,function(){return r}),i=/"(?:[^"\\\r\n]|\\(?:\r\n|[\s\S]))*"|'(?:[^'\\\r\n]|\\(?:\r\n|[\s\S]))*'/.source,o=/--[\w-]+=(?:|(?!["'])(?:[^\s\\]|\\.)+)/.source.replace(//g,function(){return i}),s={pattern:RegExp(i),greedy:!0},l={pattern:/(^[ \t]*)#.*/m,lookbehind:!0,greedy:!0};function u(d,c){return d=d.replace(//g,function(){return o}).replace(//g,function(){return a}),RegExp(d,c)}n.languages.docker={instruction:{pattern:/(^[ \t]*)(?:ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|ONBUILD|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR)(?=\s)(?:\\.|[^\r\n\\])*(?:\\$(?:\s|#.*$)*(?![\s#])(?:\\.|[^\r\n\\])*)*/im,lookbehind:!0,greedy:!0,inside:{options:{pattern:u(/(^(?:ONBUILD)?\w+)(?:)*/.source,"i"),lookbehind:!0,greedy:!0,inside:{property:{pattern:/(^|\s)--[\w-]+/,lookbehind:!0},string:[s,{pattern:/(=)(?!["'])(?:[^\s\\]|\\.)+/,lookbehind:!0}],operator:/\\$/m,punctuation:/=/}},keyword:[{pattern:u(/(^(?:ONBUILD)?HEALTHCHECK(?:)*)(?:CMD|NONE)\b/.source,"i"),lookbehind:!0,greedy:!0},{pattern:u(/(^(?:ONBUILD)?FROM(?:)*(?!--)[^ \t\\]+)AS/.source,"i"),lookbehind:!0,greedy:!0},{pattern:u(/(^ONBUILD)\w+/.source,"i"),lookbehind:!0,greedy:!0},{pattern:/^\w+/,greedy:!0}],comment:l,string:s,variable:/\$(?:\w+|\{[^{}"'\\]*\})/,operator:/\\$/m}},comment:l},n.languages.dockerfile=n.languages.docker})(t)}return Jl}var eu,$E;function Uz(){if($E)return eu;$E=1,eu=e,e.displayName="dot",e.aliases=["gv"];function e(t){(function(n){var r="(?:"+[/[a-zA-Z_\x80-\uFFFF][\w\x80-\uFFFF]*/.source,/-?(?:\.\d+|\d+(?:\.\d*)?)/.source,/"[^"\\]*(?:\\[\s\S][^"\\]*)*"/.source,/<(?:[^<>]|(?!)*>/.source].join("|")+")",a={markup:{pattern:/(^<)[\s\S]+(?=>$)/,lookbehind:!0,alias:["language-markup","language-html","language-xml"],inside:n.languages.markup}};function i(o,s){return RegExp(o.replace(//g,function(){return r}),s)}n.languages.dot={comment:{pattern:/\/\/.*|\/\*[\s\S]*?\*\/|^#.*/m,greedy:!0},"graph-name":{pattern:i(/(\b(?:digraph|graph|subgraph)[ \t\r\n]+)/.source,"i"),lookbehind:!0,greedy:!0,alias:"class-name",inside:a},"attr-value":{pattern:i(/(=[ \t\r\n]*)/.source),lookbehind:!0,greedy:!0,inside:a},"attr-name":{pattern:i(/([\[;, \t\r\n])(?=[ \t\r\n]*=)/.source),lookbehind:!0,greedy:!0,inside:a},keyword:/\b(?:digraph|edge|graph|node|strict|subgraph)\b/i,"compass-point":{pattern:/(:[ \t\r\n]*)(?:[ewc_]|[ns][ew]?)(?![\w\x80-\uFFFF])/,lookbehind:!0,alias:"builtin"},node:{pattern:i(/(^|[^-.\w\x80-\uFFFF\\])/.source),lookbehind:!0,greedy:!0,inside:a},operator:/[=:]|-[->]/,punctuation:/[\[\]{};,]/},n.languages.gv=n.languages.dot})(t)}return eu}var tu,zE;function Bz(){if(zE)return tu;zE=1,tu=e,e.displayName="ebnf",e.aliases=[];function e(t){t.languages.ebnf={comment:/\(\*[\s\S]*?\*\)/,string:{pattern:/"[^"\r\n]*"|'[^'\r\n]*'/,greedy:!0},special:{pattern:/\?[^?\r\n]*\?/,greedy:!0,alias:"class-name"},definition:{pattern:/^([\t ]*)[a-z]\w*(?:[ \t]+[a-z]\w*)*(?=\s*=)/im,lookbehind:!0,alias:["rule","keyword"]},rule:/\b[a-z]\w*(?:[ \t]+[a-z]\w*)*\b/i,punctuation:/\([:/]|[:/]\)|[.,;()[\]{}]/,operator:/[-=|*/!]/}}return tu}var nu,GE;function $z(){if(GE)return nu;GE=1,nu=e,e.displayName="editorconfig",e.aliases=[];function e(t){t.languages.editorconfig={comment:/[;#].*/,section:{pattern:/(^[ \t]*)\[.+\]/m,lookbehind:!0,alias:"selector",inside:{regex:/\\\\[\[\]{},!?.*]/,operator:/[!?]|\.\.|\*{1,2}/,punctuation:/[\[\]{},]/}},key:{pattern:/(^[ \t]*)[^\s=]+(?=[ \t]*=)/m,lookbehind:!0,alias:"attr-name"},value:{pattern:/=.*/,alias:"attr-value",inside:{punctuation:/^=/}}}}return nu}var ru,qE;function zz(){if(qE)return ru;qE=1,ru=e,e.displayName="eiffel",e.aliases=[];function e(t){t.languages.eiffel={comment:/--.*/,string:[{pattern:/"([^[]*)\[[\s\S]*?\]\1"/,greedy:!0},{pattern:/"([^{]*)\{[\s\S]*?\}\1"/,greedy:!0},{pattern:/"(?:%(?:(?!\n)\s)*\n\s*%|%\S|[^%"\r\n])*"/,greedy:!0}],char:/'(?:%.|[^%'\r\n])+'/,keyword:/\b(?:across|agent|alias|all|and|as|assign|attached|attribute|check|class|convert|create|Current|debug|deferred|detachable|do|else|elseif|end|ensure|expanded|export|external|feature|from|frozen|if|implies|inherit|inspect|invariant|like|local|loop|not|note|obsolete|old|once|or|Precursor|redefine|rename|require|rescue|Result|retry|select|separate|some|then|undefine|until|variant|Void|when|xor)\b/i,boolean:/\b(?:False|True)\b/i,"class-name":/\b[A-Z][\dA-Z_]*\b/,number:[/\b0[xcb][\da-f](?:_*[\da-f])*\b/i,/(?:\b\d(?:_*\d)*)?\.(?:(?:\d(?:_*\d)*)?e[+-]?)?\d(?:_*\d)*\b|\b\d(?:_*\d)*\b\.?/i],punctuation:/:=|<<|>>|\(\||\|\)|->|\.(?=\w)|[{}[\];(),:?]/,operator:/\\\\|\|\.\.\||\.\.|\/[~\/=]?|[><]=?|[-+*^=~]/}}return ru}var au,jE;function Gz(){if(jE)return au;jE=1;var e=nt();au=t,t.displayName="ejs",t.aliases=["eta"];function t(n){n.register(e),function(r){r.languages.ejs={delimiter:{pattern:/^<%[-_=]?|[-_]?%>$/,alias:"punctuation"},comment:/^#[\s\S]*/,"language-javascript":{pattern:/[\s\S]+/,inside:r.languages.javascript}},r.hooks.add("before-tokenize",function(a){var i=/<%(?!%)[\s\S]+?%>/g;r.languages["markup-templating"].buildPlaceholders(a,"ejs",i)}),r.hooks.add("after-tokenize",function(a){r.languages["markup-templating"].tokenizePlaceholders(a,"ejs")}),r.languages.eta=r.languages.ejs}(n)}return au}var iu,HE;function qz(){if(HE)return iu;HE=1,iu=e,e.displayName="elixir",e.aliases=[];function e(t){t.languages.elixir={doc:{pattern:/@(?:doc|moduledoc)\s+(?:("""|''')[\s\S]*?\1|("|')(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2)/,inside:{attribute:/^@\w+/,string:/['"][\s\S]+/}},comment:{pattern:/#.*/,greedy:!0},regex:{pattern:/~[rR](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|[^\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[uismxfr]*/,greedy:!0},string:[{pattern:/~[cCsSwW](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|#\{[^}]+\}|#(?!\{)|[^#\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[csa]?/,greedy:!0,inside:{}},{pattern:/("""|''')[\s\S]*?\1/,greedy:!0,inside:{}},{pattern:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0,inside:{}}],atom:{pattern:/(^|[^:]):\w+/,lookbehind:!0,alias:"symbol"},module:{pattern:/\b[A-Z]\w*\b/,alias:"class-name"},"attr-name":/\b\w+\??:(?!:)/,argument:{pattern:/(^|[^&])&\d+/,lookbehind:!0,alias:"variable"},attribute:{pattern:/@\w+/,alias:"variable"},function:/\b[_a-zA-Z]\w*[?!]?(?:(?=\s*(?:\.\s*)?\()|(?=\/\d))/,number:/\b(?:0[box][a-f\d_]+|\d[\d_]*)(?:\.[\d_]+)?(?:e[+-]?[\d_]+)?\b/i,keyword:/\b(?:after|alias|and|case|catch|cond|def(?:callback|delegate|exception|impl|macro|module|n|np|p|protocol|struct)?|do|else|end|fn|for|if|import|not|or|quote|raise|require|rescue|try|unless|unquote|use|when)\b/,boolean:/\b(?:false|nil|true)\b/,operator:[/\bin\b|&&?|\|[|>]?|\\\\|::|\.\.\.?|\+\+?|-[->]?|<[-=>]|>=|!==?|\B!|=(?:==?|[>~])?|[*\/^]/,{pattern:/([^<])<(?!<)/,lookbehind:!0},{pattern:/([^>])>(?!>)/,lookbehind:!0}],punctuation:/<<|>>|[.,%\[\]{}()]/},t.languages.elixir.string.forEach(function(n){n.inside={interpolation:{pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"},rest:t.languages.elixir}}}})}return iu}var ou,VE;function jz(){if(VE)return ou;VE=1,ou=e,e.displayName="elm",e.aliases=[];function e(t){t.languages.elm={comment:/--.*|\{-[\s\S]*?-\}/,char:{pattern:/'(?:[^\\'\r\n]|\\(?:[abfnrtv\\']|\d+|x[0-9a-fA-F]+|u\{[0-9a-fA-F]+\}))'/,greedy:!0},string:[{pattern:/"""[\s\S]*?"""/,greedy:!0},{pattern:/"(?:[^\\"\r\n]|\\.)*"/,greedy:!0}],"import-statement":{pattern:/(^[\t ]*)import\s+[A-Z]\w*(?:\.[A-Z]\w*)*(?:\s+as\s+(?:[A-Z]\w*)(?:\.[A-Z]\w*)*)?(?:\s+exposing\s+)?/m,lookbehind:!0,inside:{keyword:/\b(?:as|exposing|import)\b/}},keyword:/\b(?:alias|as|case|else|exposing|if|in|infixl|infixr|let|module|of|then|type)\b/,builtin:/\b(?:abs|acos|always|asin|atan|atan2|ceiling|clamp|compare|cos|curry|degrees|e|flip|floor|fromPolar|identity|isInfinite|isNaN|logBase|max|min|negate|never|not|pi|radians|rem|round|sin|sqrt|tan|toFloat|toPolar|toString|truncate|turns|uncurry|xor)\b/,number:/\b(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?|0x[0-9a-f]+)\b/i,operator:/\s\.\s|[+\-/*=.$<>:&|^?%#@~!]{2,}|[+\-/*=$<>:&|^?%#@~!]/,hvariable:/\b(?:[A-Z]\w*\.)*[a-z]\w*\b/,constant:/\b(?:[A-Z]\w*\.)*[A-Z]\w*\b/,punctuation:/[{}[\]|(),.:]/}}return ou}var su,WE;function Hz(){if(WE)return su;WE=1;var e=Zo(),t=nt();su=n,n.displayName="erb",n.aliases=[];function n(r){r.register(e),r.register(t),function(a){a.languages.erb={delimiter:{pattern:/^(\s*)<%=?|%>(?=\s*$)/,lookbehind:!0,alias:"punctuation"},ruby:{pattern:/\s*\S[\s\S]*/,alias:"language-ruby",inside:a.languages.ruby}},a.hooks.add("before-tokenize",function(i){var o=/<%=?(?:[^\r\n]|[\r\n](?!=begin)|[\r\n]=begin\s(?:[^\r\n]|[\r\n](?!=end))*[\r\n]=end)+?%>/g;a.languages["markup-templating"].buildPlaceholders(i,"erb",o)}),a.hooks.add("after-tokenize",function(i){a.languages["markup-templating"].tokenizePlaceholders(i,"erb")})}(r)}return su}var lu,YE;function Vz(){if(YE)return lu;YE=1,lu=e,e.displayName="erlang",e.aliases=[];function e(t){t.languages.erlang={comment:/%.+/,string:{pattern:/"(?:\\.|[^\\"\r\n])*"/,greedy:!0},"quoted-function":{pattern:/'(?:\\.|[^\\'\r\n])+'(?=\()/,alias:"function"},"quoted-atom":{pattern:/'(?:\\.|[^\\'\r\n])+'/,alias:"atom"},boolean:/\b(?:false|true)\b/,keyword:/\b(?:after|case|catch|end|fun|if|of|receive|try|when)\b/,number:[/\$\\?./,/\b\d+#[a-z0-9]+/i,/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i],function:/\b[a-z][\w@]*(?=\()/,variable:{pattern:/(^|[^@])(?:\b|\?)[A-Z_][\w@]*/,lookbehind:!0},operator:[/[=\/<>:]=|=[:\/]=|\+\+?|--?|[=*\/!]|\b(?:and|andalso|band|bnot|bor|bsl|bsr|bxor|div|not|or|orelse|rem|xor)\b/,{pattern:/(^|[^<])<(?!<)/,lookbehind:!0},{pattern:/(^|[^>])>(?!>)/,lookbehind:!0}],atom:/\b[a-z][\w@]*/,punctuation:/[()[\]{}:;,.#|]|<<|>>/}}return lu}var uu,KE;function jR(){if(KE)return uu;KE=1,uu=e,e.displayName="lua",e.aliases=[];function e(t){t.languages.lua={comment:/^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m,string:{pattern:/(["'])(?:(?!\1)[^\\\r\n]|\\z(?:\r\n|\s)|\\(?:\r\n|[^z]))*\1|\[(=*)\[[\s\S]*?\]\2\]/,greedy:!0},number:/\b0x[a-f\d]+(?:\.[a-f\d]*)?(?:p[+-]?\d+)?\b|\b\d+(?:\.\B|(?:\.\d*)?(?:e[+-]?\d+)?\b)|\B\.\d+(?:e[+-]?\d+)?\b/i,keyword:/\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,function:/(?!\d)\w+(?=\s*(?:[({]))/,operator:[/[-+*%^&|#]|\/\/?|<[<=]?|>[>=]?|[=~]=?/,{pattern:/(^|[^.])\.\.(?!\.)/,lookbehind:!0}],punctuation:/[\[\](){},;]|\.+|:+/}}return uu}var cu,XE;function Wz(){if(XE)return cu;XE=1;var e=jR(),t=nt();cu=n,n.displayName="etlua",n.aliases=[];function n(r){r.register(e),r.register(t),function(a){a.languages.etlua={delimiter:{pattern:/^<%[-=]?|-?%>$/,alias:"punctuation"},"language-lua":{pattern:/[\s\S]+/,inside:a.languages.lua}},a.hooks.add("before-tokenize",function(i){var o=/<%[\s\S]+?%>/g;a.languages["markup-templating"].buildPlaceholders(i,"etlua",o)}),a.hooks.add("after-tokenize",function(i){a.languages["markup-templating"].tokenizePlaceholders(i,"etlua")})}(r)}return cu}var du,ZE;function Yz(){if(ZE)return du;ZE=1,du=e,e.displayName="excelFormula",e.aliases=[];function e(t){t.languages["excel-formula"]={comment:{pattern:/(\bN\(\s*)"(?:[^"]|"")*"(?=\s*\))/i,lookbehind:!0,greedy:!0},string:{pattern:/"(?:[^"]|"")*"(?!")/,greedy:!0},reference:{pattern:/(?:'[^']*'|(?:[^\s()[\]{}<>*?"';,$&]*\[[^^\s()[\]{}<>*?"']+\])?\w+)!/,greedy:!0,alias:"string",inside:{operator:/!$/,punctuation:/'/,sheet:{pattern:/[^[\]]+$/,alias:"function"},file:{pattern:/\[[^[\]]+\]$/,inside:{punctuation:/[[\]]/}},path:/[\s\S]+/}},"function-name":{pattern:/\b[A-Z]\w*(?=\()/i,alias:"keyword"},range:{pattern:/\$?\b(?:[A-Z]+\$?\d+:\$?[A-Z]+\$?\d+|[A-Z]+:\$?[A-Z]+|\d+:\$?\d+)\b/i,alias:"property",inside:{operator:/:/,cell:/\$?[A-Z]+\$?\d+/i,column:/\$?[A-Z]+/i,row:/\$?\d+/}},cell:{pattern:/\b[A-Z]+\d+\b|\$[A-Za-z]+\$?\d+\b|\b[A-Za-z]+\$\d+\b/,alias:"property"},number:/(?:\b\d+(?:\.\d+)?|\B\.\d+)(?:e[+-]?\d+)?\b/i,boolean:/\b(?:FALSE|TRUE)\b/i,operator:/[-+*/^%=&,]|<[=>]?|>=?/,punctuation:/[[\]();{}|]/},t.languages.xlsx=t.languages.xls=t.languages["excel-formula"]}return du}var pu,QE;function Kz(){if(QE)return pu;QE=1,pu=e,e.displayName="factor",e.aliases=[];function e(t){(function(n){var r={function:/\b(?:BUGS?|FIX(?:MES?)?|NOTES?|TODOS?|XX+|HACKS?|WARN(?:ING)?|\?{2,}|!{2,})\b/},a={number:/\\[^\s']|%\w/},i={comment:[{pattern:/(^|\s)(?:! .*|!$)/,lookbehind:!0,inside:r},{pattern:/(^|\s)\/\*\s[\s\S]*?\*\/(?=\s|$)/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|\s)!\[(={0,6})\[\s[\s\S]*?\]\2\](?=\s|$)/,lookbehind:!0,greedy:!0,inside:r}],number:[{pattern:/(^|\s)[+-]?\d+(?=\s|$)/,lookbehind:!0},{pattern:/(^|\s)[+-]?0(?:b[01]+|o[0-7]+|d\d+|x[\dA-F]+)(?=\s|$)/i,lookbehind:!0},{pattern:/(^|\s)[+-]?\d+\/\d+\.?(?=\s|$)/,lookbehind:!0},{pattern:/(^|\s)\+?\d+\+\d+\/\d+(?=\s|$)/,lookbehind:!0},{pattern:/(^|\s)-\d+-\d+\/\d+(?=\s|$)/,lookbehind:!0},{pattern:/(^|\s)[+-]?(?:\d*\.\d+|\d+\.\d*|\d+)(?:e[+-]?\d+)?(?=\s|$)/i,lookbehind:!0},{pattern:/(^|\s)NAN:\s+[\da-fA-F]+(?=\s|$)/,lookbehind:!0},{pattern:/(^|\s)[+-]?0(?:b1\.[01]*|o1\.[0-7]*|d1\.\d*|x1\.[\dA-F]*)p\d+(?=\s|$)/i,lookbehind:!0}],regexp:{pattern:/(^|\s)R\/\s(?:\\\S|[^\\/])*\/(?:[idmsr]*|[idmsr]+-[idmsr]+)(?=\s|$)/,lookbehind:!0,alias:"number",inside:{variable:/\\\S/,keyword:/[+?*\[\]^$(){}.|]/,operator:{pattern:/(\/)[idmsr]+(?:-[idmsr]+)?/,lookbehind:!0}}},boolean:{pattern:/(^|\s)[tf](?=\s|$)/,lookbehind:!0},"custom-string":{pattern:/(^|\s)[A-Z0-9\-]+"\s(?:\\\S|[^"\\])*"/,lookbehind:!0,greedy:!0,alias:"string",inside:{number:/\\\S|%\w|\//}},"multiline-string":[{pattern:/(^|\s)STRING:\s+\S+(?:\n|\r\n).*(?:\n|\r\n)\s*;(?=\s|$)/,lookbehind:!0,greedy:!0,alias:"string",inside:{number:a.number,"semicolon-or-setlocal":{pattern:/([\r\n][ \t]*);(?=\s|$)/,lookbehind:!0,alias:"function"}}},{pattern:/(^|\s)HEREDOC:\s+\S+(?:\n|\r\n).*(?:\n|\r\n)\s*\S+(?=\s|$)/,lookbehind:!0,greedy:!0,alias:"string",inside:a},{pattern:/(^|\s)\[(={0,6})\[\s[\s\S]*?\]\2\](?=\s|$)/,lookbehind:!0,greedy:!0,alias:"string",inside:a}],"special-using":{pattern:/(^|\s)USING:(?:\s\S+)*(?=\s+;(?:\s|$))/,lookbehind:!0,alias:"function",inside:{string:{pattern:/(\s)[^:\s]+/,lookbehind:!0}}},"stack-effect-delimiter":[{pattern:/(^|\s)(?:call|eval|execute)?\((?=\s)/,lookbehind:!0,alias:"operator"},{pattern:/(\s)--(?=\s)/,lookbehind:!0,alias:"operator"},{pattern:/(\s)\)(?=\s|$)/,lookbehind:!0,alias:"operator"}],combinators:{pattern:null,lookbehind:!0,alias:"keyword"},"kernel-builtin":{pattern:null,lookbehind:!0,alias:"variable"},"sequences-builtin":{pattern:null,lookbehind:!0,alias:"variable"},"math-builtin":{pattern:null,lookbehind:!0,alias:"variable"},"constructor-word":{pattern:/(^|\s)<(?!=+>|-+>)\S+>(?=\s|$)/,lookbehind:!0,alias:"keyword"},"other-builtin-syntax":{pattern:null,lookbehind:!0,alias:"operator"},"conventionally-named-word":{pattern:/(^|\s)(?!")(?:(?:change|new|set|with)-\S+|\$\S+|>[^>\s]+|[^:>\s]+>|[^>\s]+>[^>\s]+|\+[^+\s]+\+|[^?\s]+\?|\?[^?\s]+|[^>\s]+>>|>>[^>\s]+|[^<\s]+<<|\([^()\s]+\)|[^!\s]+!|[^*\s]\S*\*|[^.\s]\S*\.)(?=\s|$)/,lookbehind:!0,alias:"keyword"},"colon-syntax":{pattern:/(^|\s)(?:[A-Z0-9\-]+#?)?:{1,2}\s+(?:;\S+|(?!;)\S+)(?=\s|$)/,lookbehind:!0,greedy:!0,alias:"function"},"semicolon-or-setlocal":{pattern:/(\s)(?:;|:>)(?=\s|$)/,lookbehind:!0,alias:"function"},"curly-brace-literal-delimiter":[{pattern:/(^|\s)[a-z]*\{(?=\s)/i,lookbehind:!0,alias:"operator"},{pattern:/(\s)\}(?=\s|$)/,lookbehind:!0,alias:"operator"}],"quotation-delimiter":[{pattern:/(^|\s)\[(?=\s)/,lookbehind:!0,alias:"operator"},{pattern:/(\s)\](?=\s|$)/,lookbehind:!0,alias:"operator"}],"normal-word":{pattern:/(^|\s)[^"\s]\S*(?=\s|$)/,lookbehind:!0},string:{pattern:/"(?:\\\S|[^"\\])*"/,greedy:!0,inside:a}},o=function(d){return(d+"").replace(/([.?*+\^$\[\]\\(){}|\-])/g,"\\$1")},s=function(d){return new RegExp("(^|\\s)(?:"+d.map(o).join("|")+")(?=\\s|$)")},l={"kernel-builtin":["or","2nipd","4drop","tuck","wrapper","nip","wrapper?","callstack>array","die","dupd","callstack","callstack?","3dup","hashcode","pick","4nip","build",">boolean","nipd","clone","5nip","eq?","?","=","swapd","2over","clear","2dup","get-retainstack","not","tuple?","dup","3nipd","call","-rotd","object","drop","assert=","assert?","-rot","execute","boa","get-callstack","curried?","3drop","pickd","overd","over","roll","3nip","swap","and","2nip","rotd","throw","(clone)","hashcode*","spin","reach","4dup","equal?","get-datastack","assert","2drop","","boolean?","identity-hashcode","identity-tuple?","null","composed?","new","5drop","rot","-roll","xor","identity-tuple","boolean"],"other-builtin-syntax":["=======","recursive","flushable",">>","<<<<<<","M\\","B","PRIVATE>","\\","======","final","inline","delimiter","deprecated",">>>>>","<<<<<<<","parse-complex","malformed-complex","read-only",">>>>>>>","call-next-method","<<","foldable","$","$[","${"],"sequences-builtin":["member-eq?","mismatch","append","assert-sequence=","longer","repetition","clone-like","3sequence","assert-sequence?","last-index-from","reversed","index-from","cut*","pad-tail","join-as","remove-eq!","concat-as","but-last","snip","nths","nth","sequence","longest","slice?","","remove-nth","tail-slice","empty?","tail*","member?","virtual-sequence?","set-length","drop-prefix","iota","unclip","bounds-error?","unclip-last-slice","non-negative-integer-expected","non-negative-integer-expected?","midpoint@","longer?","?set-nth","?first","rest-slice","prepend-as","prepend","fourth","sift","subseq-start","new-sequence","?last","like","first4","1sequence","reverse","slice","virtual@","repetition?","set-last","index","4sequence","max-length","set-second","immutable-sequence","first2","first3","supremum","unclip-slice","suffix!","insert-nth","tail","3append","short","suffix","concat","flip","immutable?","reverse!","2sequence","sum","delete-all","indices","snip-slice","","check-slice","sequence?","head","append-as","halves","sequence=","collapse-slice","?second","slice-error?","product","bounds-check?","bounds-check","immutable","virtual-exemplar","harvest","remove","pad-head","last","set-fourth","cartesian-product","remove-eq","shorten","shorter","reversed?","shorter?","shortest","head-slice","pop*","tail-slice*","but-last-slice","iota?","append!","cut-slice","new-resizable","head-slice*","sequence-hashcode","pop","set-nth","?nth","second","join","immutable-sequence?","","3append-as","virtual-sequence","subseq?","remove-nth!","length","last-index","lengthen","assert-sequence","copy","move","third","first","tail?","set-first","prefix","bounds-error","","exchange","surround","cut","min-length","set-third","push-all","head?","subseq-start-from","delete-slice","rest","sum-lengths","head*","infimum","remove!","glue","slice-error","subseq","push","replace-slice","subseq-as","unclip-last"],"math-builtin":["number=","next-power-of-2","?1+","fp-special?","imaginary-part","float>bits","number?","fp-infinity?","bignum?","fp-snan?","denominator","gcd","*","+","fp-bitwise=","-","u>=","/",">=","bitand","power-of-2?","log2-expects-positive","neg?","<","log2",">","integer?","number","bits>double","2/","zero?","bits>float","float?","shift","ratio?","rect>","even?","ratio","fp-sign","bitnot",">fixnum","complex?","/i","integer>fixnum","/f","sgn",">bignum","next-float","u<","u>","mod","recip","rational",">float","2^","integer","fixnum?","neg","fixnum","sq","bignum",">rect","bit?","fp-qnan?","simple-gcd","complex","","real",">fraction","double>bits","bitor","rem","fp-nan-payload","real-part","log2-expects-positive?","prev-float","align","unordered?","float","fp-nan?","abs","bitxor","integer>fixnum-strict","u<=","odd?","<=","/mod",">integer","real?","rational?","numerator"]};Object.keys(l).forEach(function(d){i[d].pattern=s(l[d])});var u=["2bi","while","2tri","bi*","4dip","both?","same?","tri@","curry","prepose","3bi","?if","tri*","2keep","3keep","curried","2keepd","when","2bi*","2tri*","4keep","bi@","keepdd","do","unless*","tri-curry","if*","loop","bi-curry*","when*","2bi@","2tri@","with","2with","either?","bi","until","3dip","3curry","tri-curry*","tri-curry@","bi-curry","keepd","compose","2dip","if","3tri","unless","tuple","keep","2curry","tri","most","while*","dip","composed","bi-curry@","find-last-from","trim-head-slice","map-as","each-from","none?","trim-tail","partition","if-empty","accumulate*","reject!","find-from","accumulate-as","collector-for-as","reject","map","map-sum","accumulate!","2each-from","follow","supremum-by","map!","unless-empty","collector","padding","reduce-index","replicate-as","infimum-by","trim-tail-slice","count","find-index","filter","accumulate*!","reject-as","map-integers","map-find","reduce","selector","interleave","2map","filter-as","binary-reduce","map-index-as","find","produce","filter!","replicate","cartesian-map","cartesian-each","find-index-from","map-find-last","3map-as","3map","find-last","selector-as","2map-as","2map-reduce","accumulate","each","each-index","accumulate*-as","when-empty","all?","collector-as","push-either","new-like","collector-for","2selector","push-if","2all?","map-reduce","3each","any?","trim-slice","2reduce","change-nth","produce-as","2each","trim","trim-head","cartesian-find","map-index","if-zero","each-integer","unless-zero","(find-integer)","when-zero","find-last-integer","(all-integers?)","times","(each-integer)","find-integer","all-integers?","unless-negative","if-positive","when-positive","when-negative","unless-positive","if-negative","case","2cleave","cond>quot","case>quot","3cleave","wrong-values","to-fixed-point","alist>quot","cond","cleave","call-effect","recursive-hashcode","spread","deep-spread>quot","2||","0||","n||","0&&","2&&","3||","1||","1&&","n&&","3&&","smart-unless*","keep-inputs","reduce-outputs","smart-when*","cleave>array","smart-with","smart-apply","smart-if","inputs/outputs","output>sequence-n","map-outputs","map-reduce-outputs","dropping","output>array","smart-map-reduce","smart-2map-reduce","output>array-n","nullary","inputsequence"];i.combinators.pattern=s(u),n.languages.factor=i})(t)}return pu}var fu,JE;function Xz(){if(JE)return fu;JE=1,fu=e,e.displayName="$false",e.aliases=[];function e(t){(function(n){n.languages.false={comment:{pattern:/\{[^}]*\}/},string:{pattern:/"[^"]*"/,greedy:!0},"character-code":{pattern:/'(?:[^\r]|\r\n?)/,alias:"number"},"assembler-code":{pattern:/\d+`/,alias:"important"},number:/\d+/,operator:/[-!#$%&'*+,./:;=>?@\\^_`|~ßø]/,punctuation:/\[|\]/,variable:/[a-z]/,"non-standard":{pattern:/[()!=]=?|[-+*/%]|\b(?:in|is)\b/}),delete t.languages["firestore-security-rules"]["class-name"],t.languages.insertBefore("firestore-security-rules","keyword",{path:{pattern:/(^|[\s(),])(?:\/(?:[\w\xA0-\uFFFF]+|\{[\w\xA0-\uFFFF]+(?:=\*\*)?\}|\$\([\w\xA0-\uFFFF.]+\)))+/,lookbehind:!0,greedy:!0,inside:{variable:{pattern:/\{[\w\xA0-\uFFFF]+(?:=\*\*)?\}|\$\([\w\xA0-\uFFFF.]+\)/,inside:{operator:/=/,keyword:/\*\*/,punctuation:/[.$(){}]/}},punctuation:/\//}},method:{pattern:/(\ballow\s+)[a-z]+(?:\s*,\s*[a-z]+)*(?=\s*[:;])/,lookbehind:!0,alias:"builtin",inside:{punctuation:/,/}}})}return gu}var mu,tS;function Qz(){if(tS)return mu;tS=1,mu=e,e.displayName="flow",e.aliases=[];function e(t){(function(n){n.languages.flow=n.languages.extend("javascript",{}),n.languages.insertBefore("flow","keyword",{type:[{pattern:/\b(?:[Bb]oolean|Function|[Nn]umber|[Ss]tring|any|mixed|null|void)\b/,alias:"tag"}]}),n.languages.flow["function-variable"].pattern=/(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=\s*(?:function\b|(?:\([^()]*\)(?:\s*:\s*\w+)?|(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/i,delete n.languages.flow.parameter,n.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(n.languages.flow.keyword)||(n.languages.flow.keyword=[n.languages.flow.keyword]),n.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:Class|declare|opaque|type)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\b(?!\$)/,lookbehind:!0})})(t)}return mu}var hu,nS;function Jz(){if(nS)return hu;nS=1,hu=e,e.displayName="fortran",e.aliases=[];function e(t){t.languages.fortran={"quoted-number":{pattern:/[BOZ](['"])[A-F0-9]+\1/i,alias:"number"},string:{pattern:/(?:\b\w+_)?(['"])(?:\1\1|&(?:\r\n?|\n)(?:[ \t]*!.*(?:\r\n?|\n)|(?![ \t]*!))|(?!\1).)*(?:\1|&)/,inside:{comment:{pattern:/(&(?:\r\n?|\n)\s*)!.*/,lookbehind:!0}}},comment:{pattern:/!.*/,greedy:!0},boolean:/\.(?:FALSE|TRUE)\.(?:_\w+)?/i,number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[ED][+-]?\d+)?(?:_\w+)?/i,keyword:[/\b(?:CHARACTER|COMPLEX|DOUBLE ?PRECISION|INTEGER|LOGICAL|REAL)\b/i,/\b(?:END ?)?(?:BLOCK ?DATA|DO|FILE|FORALL|FUNCTION|IF|INTERFACE|MODULE(?! PROCEDURE)|PROGRAM|SELECT|SUBROUTINE|TYPE|WHERE)\b/i,/\b(?:ALLOCATABLE|ALLOCATE|BACKSPACE|CALL|CASE|CLOSE|COMMON|CONTAINS|CONTINUE|CYCLE|DATA|DEALLOCATE|DIMENSION|DO|END|EQUIVALENCE|EXIT|EXTERNAL|FORMAT|GO ?TO|IMPLICIT(?: NONE)?|INQUIRE|INTENT|INTRINSIC|MODULE PROCEDURE|NAMELIST|NULLIFY|OPEN|OPTIONAL|PARAMETER|POINTER|PRINT|PRIVATE|PUBLIC|READ|RETURN|REWIND|SAVE|SELECT|STOP|TARGET|WHILE|WRITE)\b/i,/\b(?:ASSIGNMENT|DEFAULT|ELEMENTAL|ELSE|ELSEIF|ELSEWHERE|ENTRY|IN|INCLUDE|INOUT|KIND|NULL|ONLY|OPERATOR|OUT|PURE|RECURSIVE|RESULT|SEQUENCE|STAT|THEN|USE)\b/i],operator:[/\*\*|\/\/|=>|[=\/]=|[<>]=?|::|[+\-*=%]|\.[A-Z]+\./i,{pattern:/(^|(?!\().)\/(?!\))/,lookbehind:!0}],punctuation:/\(\/|\/\)|[(),;:&]/}}return hu}var bu,rS;function eG(){if(rS)return bu;rS=1,bu=e,e.displayName="fsharp",e.aliases=[];function e(t){t.languages.fsharp=t.languages.extend("clike",{comment:[{pattern:/(^|[^\\])\(\*(?!\))[\s\S]*?\*\)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(?:"""[\s\S]*?"""|@"(?:""|[^"])*"|"(?:\\[\s\S]|[^\\"])*")B?/,greedy:!0},"class-name":{pattern:/(\b(?:exception|inherit|interface|new|of|type)\s+|\w\s*:\s*|\s:\??>\s*)[.\w]+\b(?:\s*(?:->|\*)\s*[.\w]+\b)*(?!\s*[:.])/,lookbehind:!0,inside:{operator:/->|\*/,punctuation:/\./}},keyword:/\b(?:let|return|use|yield)(?:!\B|\b)|\b(?:abstract|and|as|asr|assert|atomic|base|begin|break|checked|class|component|const|constraint|constructor|continue|default|delegate|do|done|downcast|downto|eager|elif|else|end|event|exception|extern|external|false|finally|fixed|for|fun|function|functor|global|if|in|include|inherit|inline|interface|internal|land|lazy|lor|lsl|lsr|lxor|match|member|method|mixin|mod|module|mutable|namespace|new|not|null|object|of|open|or|override|parallel|private|process|protected|public|pure|rec|sealed|select|sig|static|struct|tailcall|then|to|trait|true|try|type|upcast|val|virtual|void|volatile|when|while|with)\b/,number:[/\b0x[\da-fA-F]+(?:LF|lf|un)?\b/,/\b0b[01]+(?:uy|y)?\b/,/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[fm]|e[+-]?\d+)?\b/i,/\b\d+(?:[IlLsy]|UL|u[lsy]?)?\b/],operator:/([<>~&^])\1\1|([*.:<>&])\2|<-|->|[!=:]=|?|\??(?:<=|>=|<>|[-+*/%=<>])\??|[!?^&]|~[+~-]|:>|:\?>?/}),t.languages.insertBefore("fsharp","keyword",{preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(^#)\b(?:else|endif|if|light|line|nowarn)\b/,lookbehind:!0,alias:"keyword"}}}}),t.languages.insertBefore("fsharp","punctuation",{"computation-expression":{pattern:/\b[_a-z]\w*(?=\s*\{)/i,alias:"keyword"}}),t.languages.insertBefore("fsharp","string",{annotation:{pattern:/\[<.+?>\]/,greedy:!0,inside:{punctuation:/^\[<|>\]$/,"class-name":{pattern:/^\w+$|(^|;\s*)[A-Z]\w*(?=\()/,lookbehind:!0},"annotation-content":{pattern:/[\s\S]+/,inside:t.languages.fsharp}}},char:{pattern:/'(?:[^\\']|\\(?:.|\d{3}|x[a-fA-F\d]{2}|u[a-fA-F\d]{4}|U[a-fA-F\d]{8}))'B?/,greedy:!0}})}return bu}var yu,aS;function tG(){if(aS)return yu;aS=1;var e=nt();yu=t,t.displayName="ftl",t.aliases=[];function t(n){n.register(e),function(r){for(var a=/[^<()"']|\((?:)*\)|<(?!#--)|<#--(?:[^-]|-(?!->))*-->|"(?:[^\\"]|\\.)*"|'(?:[^\\']|\\.)*'/.source,i=0;i<2;i++)a=a.replace(//g,function(){return a});a=a.replace(//g,/[^\s\S]/.source);var o={comment:/<#--[\s\S]*?-->/,string:[{pattern:/\br("|')(?:(?!\1)[^\\]|\\.)*\1/,greedy:!0},{pattern:RegExp(/("|')(?:(?!\1|\$\{)[^\\]|\\.|\$\{(?:(?!\})(?:))*\})*\1/.source.replace(//g,function(){return a})),greedy:!0,inside:{interpolation:{pattern:RegExp(/((?:^|[^\\])(?:\\\\)*)\$\{(?:(?!\})(?:))*\}/.source.replace(//g,function(){return a})),lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:null}}}}],keyword:/\b(?:as)\b/,boolean:/\b(?:false|true)\b/,"builtin-function":{pattern:/((?:^|[^?])\?\s*)\w+/,lookbehind:!0,alias:"function"},function:/\b\w+(?=\s*\()/,number:/\b\d+(?:\.\d+)?\b/,operator:/\.\.[<*!]?|->|--|\+\+|&&|\|\||\?{1,2}|[-+*/%!=<>]=?|\b(?:gt|gte|lt|lte)\b/,punctuation:/[,;.:()[\]{}]/};o.string[1].inside.interpolation.inside.rest=o,r.languages.ftl={"ftl-comment":{pattern:/^<#--[\s\S]*/,alias:"comment"},"ftl-directive":{pattern:/^<[\s\S]+>$/,inside:{directive:{pattern:/(^<\/?)[#@][a-z]\w*/i,lookbehind:!0,alias:"keyword"},punctuation:/^<\/?|\/?>$/,content:{pattern:/\s*\S[\s\S]*/,alias:"ftl",inside:o}}},"ftl-interpolation":{pattern:/^\$\{[\s\S]*\}$/,inside:{punctuation:/^\$\{|\}$/,content:{pattern:/\s*\S[\s\S]*/,alias:"ftl",inside:o}}}},r.hooks.add("before-tokenize",function(s){var l=RegExp(/<#--[\s\S]*?-->|<\/?[#@][a-zA-Z](?:)*?>|\$\{(?:)*?\}/.source.replace(//g,function(){return a}),"gi");r.languages["markup-templating"].buildPlaceholders(s,"ftl",l)}),r.hooks.add("after-tokenize",function(s){r.languages["markup-templating"].tokenizePlaceholders(s,"ftl")})}(n)}return yu}var Eu,iS;function nG(){if(iS)return Eu;iS=1,Eu=e,e.displayName="gap",e.aliases=[];function e(t){t.languages.gap={shell:{pattern:/^gap>[\s\S]*?(?=^gap>|$(?![\s\S]))/m,greedy:!0,inside:{gap:{pattern:/^(gap>).+(?:(?:\r(?:\n|(?!\n))|\n)>.*)*/,lookbehind:!0,inside:null},punctuation:/^gap>/}},comment:{pattern:/#.*/,greedy:!0},string:{pattern:/(^|[^\\'"])(?:'(?:[^\r\n\\']|\\.){1,10}'|"(?:[^\r\n\\"]|\\.)*"(?!")|"""[\s\S]*?""")/,lookbehind:!0,greedy:!0,inside:{continuation:{pattern:/([\r\n])>/,lookbehind:!0,alias:"punctuation"}}},keyword:/\b(?:Assert|Info|IsBound|QUIT|TryNextMethod|Unbind|and|atomic|break|continue|do|elif|else|end|fi|for|function|if|in|local|mod|not|od|or|quit|readonly|readwrite|rec|repeat|return|then|until|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:{pattern:/(^|[^\w.]|\.\.)(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?(?:_[a-z]?)?(?=$|[^\w.]|\.\.)/,lookbehind:!0},continuation:{pattern:/([\r\n])>/,lookbehind:!0,alias:"punctuation"},operator:/->|[-+*/^~=!]|<>|[<>]=?|:=|\.\./,punctuation:/[()[\]{},;.:]/},t.languages.gap.shell.inside.gap.inside=t.languages.gap}return Eu}var Su,oS;function rG(){if(oS)return Su;oS=1,Su=e,e.displayName="gcode",e.aliases=[];function e(t){t.languages.gcode={comment:/;.*|\B\(.*?\)\B/,string:{pattern:/"(?:""|[^"])*"/,greedy:!0},keyword:/\b[GM]\d+(?:\.\d+)?\b/,property:/\b[A-Z]/,checksum:{pattern:/(\*)\d+/,lookbehind:!0,alias:"number"},punctuation:/[:*]/}}return Su}var vu,sS;function aG(){if(sS)return vu;sS=1,vu=e,e.displayName="gdscript",e.aliases=[];function e(t){t.languages.gdscript={comment:/#.*/,string:{pattern:/@?(?:("|')(?:(?!\1)[^\n\\]|\\[\s\S])*\1(?!"|')|"""(?:[^\\]|\\[\s\S])*?""")/,greedy:!0},"class-name":{pattern:/(^(?:class|class_name|extends)[ \t]+|^export\([ \t]*|\bas[ \t]+|(?:\b(?:const|var)[ \t]|[,(])[ \t]*\w+[ \t]*:[ \t]*|->[ \t]*)[a-zA-Z_]\w*/m,lookbehind:!0},keyword:/\b(?:and|as|assert|break|breakpoint|class|class_name|const|continue|elif|else|enum|export|extends|for|func|if|in|is|master|mastersync|match|not|null|onready|or|pass|preload|puppet|puppetsync|remote|remotesync|return|self|setget|signal|static|tool|var|while|yield)\b/,function:/\b[a-z_]\w*(?=[ \t]*\()/i,variable:/\$\w+/,number:[/\b0b[01_]+\b|\b0x[\da-fA-F_]+\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.[\d_]+)(?:e[+-]?[\d_]+)?\b/,/\b(?:INF|NAN|PI|TAU)\b/],constant:/\b[A-Z][A-Z_\d]*\b/,boolean:/\b(?:false|true)\b/,operator:/->|:=|&&|\|\||<<|>>|[-+*/%&|!<>=]=?|[~^]/,punctuation:/[.:,;()[\]{}]/}}return vu}var ku,lS;function iG(){if(lS)return ku;lS=1,ku=e,e.displayName="gedcom",e.aliases=[];function e(t){t.languages.gedcom={"line-value":{pattern:/(^[\t ]*\d+ +(?:@\w[\w!"$%&'()*+,\-./:;<=>?[\\\]^`{|}~\x80-\xfe #]*@ +)?\w+ ).+/m,lookbehind:!0,inside:{pointer:{pattern:/^@\w[\w!"$%&'()*+,\-./:;<=>?[\\\]^`{|}~\x80-\xfe #]*@$/,alias:"variable"}}},tag:{pattern:/(^[\t ]*\d+ +(?:@\w[\w!"$%&'()*+,\-./:;<=>?[\\\]^`{|}~\x80-\xfe #]*@ +)?)\w+/m,lookbehind:!0,alias:"string"},level:{pattern:/(^[\t ]*)\d+/m,lookbehind:!0,alias:"number"},pointer:{pattern:/@\w[\w!"$%&'()*+,\-./:;<=>?[\\\]^`{|}~\x80-\xfe #]*@/,alias:"variable"}}}return ku}var wu,uS;function oG(){if(uS)return wu;uS=1,wu=e,e.displayName="gherkin",e.aliases=[];function e(t){(function(n){var r=/(?:\r?\n|\r)[ \t]*\|.+\|(?:(?!\|).)*/.source;n.languages.gherkin={pystring:{pattern:/("""|''')[\s\S]+?\1/,alias:"string"},comment:{pattern:/(^[ \t]*)#.*/m,lookbehind:!0},tag:{pattern:/(^[ \t]*)@\S*/m,lookbehind:!0},feature:{pattern:/((?:^|\r?\n|\r)[ \t]*)(?:Ability|Ahoy matey!|Arwedd|Aspekt|Besigheid Behoefte|Business Need|Caracteristica|Característica|Egenskab|Egenskap|Eiginleiki|Feature|Fīča|Fitur|Fonctionnalité|Fonksyonalite|Funcionalidade|Funcionalitat|Functionalitate|Funcţionalitate|Funcționalitate|Functionaliteit|Fungsi|Funkcia|Funkcija|Funkcionalitāte|Funkcionalnost|Funkcja|Funksie|Funktionalität|Funktionalitéit|Funzionalità|Hwaet|Hwæt|Jellemző|Karakteristik|Lastnost|Mak|Mogucnost|laH|Mogućnost|Moznosti|Možnosti|OH HAI|Omadus|Ominaisuus|Osobina|Özellik|Potrzeba biznesowa|perbogh|poQbogh malja'|Požadavek|Požiadavka|Pretty much|Qap|Qu'meH 'ut|Savybė|Tính năng|Trajto|Vermoë|Vlastnosť|Właściwość|Značilnost|Δυνατότητα|Λειτουργία|Могућност|Мөмкинлек|Особина|Свойство|Үзенчәлеклелек|Функционал|Функционалност|Функция|Функціонал|תכונה|خاصية|خصوصیت|صلاحیت|کاروبار کی ضرورت|وِیژگی|रूप लेख|ਖਾਸੀਅਤ|ਨਕਸ਼ ਨੁਹਾਰ|ਮੁਹਾਂਦਰਾ|గుణము|ಹೆಚ್ಚಳ|ความต้องการทางธุรกิจ|ความสามารถ|โครงหลัก|기능|フィーチャ|功能|機能):(?:[^:\r\n]+(?:\r?\n|\r|$))*/,lookbehind:!0,inside:{important:{pattern:/(:)[^\r\n]+/,lookbehind:!0},keyword:/[^:\r\n]+:/}},scenario:{pattern:/(^[ \t]*)(?:Abstract Scenario|Abstrakt Scenario|Achtergrond|Aer|Ær|Agtergrond|All y'all|Antecedentes|Antecedents|Atburðarás|Atburðarásir|Awww, look mate|B4|Background|Baggrund|Bakgrund|Bakgrunn|Bakgrunnur|Beispiele|Beispiller|Bối cảnh|Cefndir|Cenario|Cenário|Cenario de Fundo|Cenário de Fundo|Cenarios|Cenários|Contesto|Context|Contexte|Contexto|Conto|Contoh|Contone|Dæmi|Dasar|Dead men tell no tales|Delineacao do Cenario|Delineação do Cenário|Dis is what went down|Dữ liệu|Dyagram Senaryo|Dyagram senaryo|Egzanp|Ejemplos|Eksempler|Ekzemploj|Enghreifftiau|Esbozo do escenario|Escenari|Escenario|Esempi|Esquema de l'escenari|Esquema del escenario|Esquema do Cenario|Esquema do Cenário|EXAMPLZ|Examples|Exempel|Exemple|Exemples|Exemplos|First off|Fono|Forgatókönyv|Forgatókönyv vázlat|Fundo|Geçmiş|Grundlage|Hannergrond|ghantoH|Háttér|Heave to|Istorik|Juhtumid|Keadaan|Khung kịch bản|Khung tình huống|Kịch bản|Koncept|Konsep skenario|Kontèks|Kontekst|Kontekstas|Konteksts|Kontext|Konturo de la scenaro|Latar Belakang|lut chovnatlh|lut|lutmey|Lýsing Atburðarásar|Lýsing Dæma|MISHUN SRSLY|MISHUN|Menggariskan Senario|mo'|Náčrt Scenára|Náčrt Scénáře|Náčrt Scenáru|Oris scenarija|Örnekler|Osnova|Osnova Scenára|Osnova scénáře|Osnutek|Ozadje|Paraugs|Pavyzdžiai|Példák|Piemēri|Plan du scénario|Plan du Scénario|Plan Senaryo|Plan senaryo|Plang vum Szenario|Pozadí|Pozadie|Pozadina|Príklady|Příklady|Primer|Primeri|Primjeri|Przykłady|Raamstsenaarium|Reckon it's like|Rerefons|Scenár|Scénář|Scenarie|Scenarij|Scenarijai|Scenarijaus šablonas|Scenariji|Scenārijs|Scenārijs pēc parauga|Scenarijus|Scenario|Scénario|Scenario Amlinellol|Scenario Outline|Scenario Template|Scenariomal|Scenariomall|Scenarios|Scenariu|Scenariusz|Scenaro|Schema dello scenario|Se ðe|Se the|Se þe|Senario|Senaryo Deskripsyon|Senaryo deskripsyon|Senaryo|Senaryo taslağı|Shiver me timbers|Situācija|Situai|Situasie Uiteensetting|Situasie|Skenario konsep|Skenario|Skica|Structura scenariu|Structură scenariu|Struktura scenarija|Stsenaarium|Swa hwaer swa|Swa|Swa hwær swa|Szablon scenariusza|Szenario|Szenariogrundriss|Tapaukset|Tapaus|Tapausaihio|Taust|Tausta|Template Keadaan|Template Senario|Template Situai|The thing of it is|Tình huống|Variantai|Voorbeelde|Voorbeelden|Wharrimean is|Yo-ho-ho|You'll wanna|Założenia|Παραδείγματα|Περιγραφή Σεναρίου|Σενάρια|Σενάριο|Υπόβαθρο|Кереш|Контекст|Концепт|Мисаллар|Мисоллар|Основа|Передумова|Позадина|Предистория|Предыстория|Приклади|Пример|Примери|Примеры|Рамка на сценарий|Скица|Структура сценарија|Структура сценария|Структура сценарію|Сценарий|Сценарий структураси|Сценарийның төзелеше|Сценарији|Сценарио|Сценарій|Тарих|Үрнәкләр|דוגמאות|רקע|תבנית תרחיש|תרחיש|الخلفية|الگوی سناریو|امثلة|پس منظر|زمینه|سناریو|سيناريو|سيناريو مخطط|مثالیں|منظر نامے کا خاکہ|منظرنامہ|نمونه ها|उदाहरण|परिदृश्य|परिदृश्य रूपरेखा|पृष्ठभूमि|ਉਦਾਹਰਨਾਂ|ਪਟਕਥਾ|ਪਟਕਥਾ ਢਾਂਚਾ|ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ|ਪਿਛੋਕੜ|ఉదాహరణలు|కథనం|నేపథ్యం|సన్నివేశం|ಉದಾಹರಣೆಗಳು|ಕಥಾಸಾರಾಂಶ|ವಿವರಣೆ|ಹಿನ್ನೆಲೆ|โครงสร้างของเหตุการณ์|ชุดของตัวอย่าง|ชุดของเหตุการณ์|แนวคิด|สรุปเหตุการณ์|เหตุการณ์|배경|시나리오|시나리오 개요|예|サンプル|シナリオ|シナリオアウトライン|シナリオテンプレ|シナリオテンプレート|テンプレ|例|例子|剧本|剧本大纲|劇本|劇本大綱|场景|场景大纲|場景|場景大綱|背景):[^:\r\n]*/m,lookbehind:!0,inside:{important:{pattern:/(:)[^\r\n]*/,lookbehind:!0},keyword:/[^:\r\n]+:/}},"table-body":{pattern:RegExp("("+r+")(?:"+r+")+"),lookbehind:!0,inside:{outline:{pattern:/<[^>]+>/,alias:"variable"},td:{pattern:/\s*[^\s|][^|]*/,alias:"string"},punctuation:/\|/}},"table-head":{pattern:RegExp(r),inside:{th:{pattern:/\s*[^\s|][^|]*/,alias:"variable"},punctuation:/\|/}},atrule:{pattern:/(^[ \t]+)(?:'a|'ach|'ej|7|a|A také|A taktiež|A tiež|A zároveň|Aber|Ac|Adott|Akkor|Ak|Aleshores|Ale|Ali|Allora|Alors|Als|Ama|Amennyiben|Amikor|Ampak|an|AN|Ananging|And y'all|And|Angenommen|Anrhegedig a|An|Apabila|Atès|Atesa|Atunci|Avast!|Aye|A|awer|Bagi|Banjur|Bet|Biết|Blimey!|Buh|But at the end of the day I reckon|But y'all|But|BUT|Cal|Când|Cand|Cando|Ce|Cuando|Če|Ða ðe|Ða|Dadas|Dada|Dados|Dado|DaH ghu' bejlu'|dann|Dann|Dano|Dan|Dar|Dat fiind|Data|Date fiind|Date|Dati fiind|Dati|Daţi fiind|Dați fiind|DEN|Dato|De|Den youse gotta|Dengan|Diberi|Diyelim ki|Donada|Donat|Donitaĵo|Do|Dun|Duota|Ðurh|Eeldades|Ef|Eğer ki|Entao|Então|Entón|E|En|Entonces|Epi|És|Etant donnée|Etant donné|Et|Étant données|Étant donnée|Étant donné|Etant données|Etant donnés|Étant donnés|Fakat|Gangway!|Gdy|Gegeben seien|Gegeben sei|Gegeven|Gegewe|ghu' noblu'|Gitt|Given y'all|Given|Givet|Givun|Ha|Cho|I CAN HAZ|In|Ir|It's just unbelievable|I|Ja|Jeśli|Jeżeli|Kad|Kada|Kadar|Kai|Kaj|Když|Keď|Kemudian|Ketika|Khi|Kiedy|Ko|Kuid|Kui|Kun|Lan|latlh|Le sa a|Let go and haul|Le|Lè sa a|Lè|Logo|Lorsqu'<|Lorsque|mä|Maar|Mais|Mając|Ma|Majd|Maka|Manawa|Mas|Men|Menawa|Mutta|Nalika|Nalikaning|Nanging|Når|När|Nato|Nhưng|Niin|Njuk|O zaman|Och|Og|Oletetaan|Ond|Onda|Oraz|Pak|Pero|Però|Podano|Pokiaľ|Pokud|Potem|Potom|Privzeto|Pryd|Quan|Quand|Quando|qaSDI'|Så|Sed|Se|Siis|Sipoze ke|Sipoze Ke|Sipoze|Si|Şi|Și|Soit|Stel|Tada|Tad|Takrat|Tak|Tapi|Ter|Tetapi|Tha the|Tha|Then y'all|Then|Thì|Thurh|Toda|Too right|Un|Und|ugeholl|Và|vaj|Vendar|Ve|wann|Wanneer|WEN|Wenn|When y'all|When|Wtedy|Wun|Y'know|Yeah nah|Yna|Youse know like when|Youse know when youse got|Y|Za predpokladu|Za předpokladu|Zadan|Zadani|Zadano|Zadate|Zadato|Zakładając|Zaradi|Zatati|Þa þe|Þa|Þá|Þegar|Þurh|Αλλά|Δεδομένου|Και|Όταν|Τότε|А також|Агар|Але|Али|Аммо|А|Әгәр|Әйтик|Әмма|Бирок|Ва|Вә|Дадено|Дано|Допустим|Если|Задате|Задати|Задато|И|І|К тому же|Када|Кад|Когато|Когда|Коли|Ләкин|Лекин|Нәтиҗәдә|Нехай|Но|Онда|Припустимо, що|Припустимо|Пусть|Также|Та|Тогда|Тоді|То|Унда|Һәм|Якщо|אבל|אזי|אז|בהינתן|וגם|כאשר|آنگاه|اذاً|اگر|اما|اور|با فرض|بالفرض|بفرض|پھر|تب|ثم|جب|عندما|فرض کیا|لكن|لیکن|متى|هنگامی|و|अगर|और|कदा|किन्तु|चूंकि|जब|तथा|तदा|तब|परन्तु|पर|यदि|ਅਤੇ|ਜਦੋਂ|ਜਿਵੇਂ ਕਿ|ਜੇਕਰ|ਤਦ|ਪਰ|అప్పుడు|ఈ పరిస్థితిలో|కాని|చెప్పబడినది|మరియు|ಆದರೆ|ನಂತರ|ನೀಡಿದ|ಮತ್ತು|ಸ್ಥಿತಿಯನ್ನು|กำหนดให้|ดังนั้น|แต่|เมื่อ|และ|그러면<|그리고<|단<|만약<|만일<|먼저<|조건<|하지만<|かつ<|しかし<|ただし<|ならば<|もし<|並且<|但し<|但是<|假如<|假定<|假設<|假设<|前提<|同时<|同時<|并且<|当<|當<|而且<|那么<|那麼<)(?=[ \t])/m,lookbehind:!0},string:{pattern:/"(?:\\.|[^"\\\r\n])*"|'(?:\\.|[^'\\\r\n])*'/,inside:{outline:{pattern:/<[^>]+>/,alias:"variable"}}},outline:{pattern:/<[^>]+>/,alias:"variable"}}})(t)}return wu}var _u,cS;function sG(){if(cS)return _u;cS=1,_u=e,e.displayName="git",e.aliases=[];function e(t){t.languages.git={comment:/^#.*/m,deleted:/^[-–].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m}}return _u}var Tu,dS;function lG(){if(dS)return Tu;dS=1;var e=tr();Tu=t,t.displayName="glsl",t.aliases=[];function t(n){n.register(e),n.languages.glsl=n.languages.extend("c",{keyword:/\b(?:active|asm|atomic_uint|attribute|[ibdu]?vec[234]|bool|break|buffer|case|cast|centroid|class|coherent|common|const|continue|d?mat[234](?:x[234])?|default|discard|do|double|else|enum|extern|external|false|filter|fixed|flat|float|for|fvec[234]|goto|half|highp|hvec[234]|[iu]?sampler2DMS(?:Array)?|[iu]?sampler2DRect|[iu]?samplerBuffer|[iu]?samplerCube|[iu]?samplerCubeArray|[iu]?sampler[123]D|[iu]?sampler[12]DArray|[iu]?image2DMS(?:Array)?|[iu]?image2DRect|[iu]?imageBuffer|[iu]?imageCube|[iu]?imageCubeArray|[iu]?image[123]D|[iu]?image[12]DArray|if|in|inline|inout|input|int|interface|invariant|layout|long|lowp|mediump|namespace|noinline|noperspective|out|output|partition|patch|precise|precision|public|readonly|resource|restrict|return|sample|sampler[12]DArrayShadow|sampler[12]DShadow|sampler2DRectShadow|sampler3DRect|samplerCubeArrayShadow|samplerCubeShadow|shared|short|sizeof|smooth|static|struct|subroutine|superp|switch|template|this|true|typedef|uint|uniform|union|unsigned|using|varying|void|volatile|while|writeonly)\b/})}return Tu}var Au,pS;function uG(){if(pS)return Au;pS=1,Au=e,e.displayName="gml",e.aliases=[];function e(t){t.languages.gamemakerlanguage=t.languages.gml=t.languages.extend("clike",{keyword:/\b(?:break|case|continue|default|do|else|enum|exit|for|globalvar|if|repeat|return|switch|until|var|while)\b/,number:/(?:\b0x[\da-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ulf]{0,4}/i,operator:/--|\+\+|[-+%/=]=?|!=|\*\*?=?|<[<=>]?|>[=>]?|&&?|\^\^?|\|\|?|~|\b(?:and|at|not|or|with|xor)\b/,constant:/\b(?:GM_build_date|GM_version|action_(?:continue|restart|reverse|stop)|all|gamespeed_(?:fps|microseconds)|global|local|noone|other|pi|pointer_(?:invalid|null)|self|timezone_(?:local|utc)|undefined|ev_(?:create|destroy|step|alarm|keyboard|mouse|collision|other|draw|draw_(?:begin|end|post|pre)|keypress|keyrelease|trigger|(?:left|middle|no|right)_button|(?:left|middle|right)_press|(?:left|middle|right)_release|mouse_(?:enter|leave|wheel_down|wheel_up)|global_(?:left|middle|right)_button|global_(?:left|middle|right)_press|global_(?:left|middle|right)_release|joystick(?:1|2)_(?:button1|button2|button3|button4|button5|button6|button7|button8|down|left|right|up)|outside|boundary|game_start|game_end|room_start|room_end|no_more_lives|animation_end|end_of_path|no_more_health|user\d|gui|gui_begin|gui_end|step_(?:begin|end|normal))|vk_(?:alt|anykey|backspace|control|delete|down|end|enter|escape|home|insert|left|nokey|pagedown|pageup|pause|printscreen|return|right|shift|space|tab|up|f\d|numpad\d|add|decimal|divide|lalt|lcontrol|lshift|multiply|ralt|rcontrol|rshift|subtract)|achievement_(?:filter_(?:all_players|favorites_only|friends_only)|friends_info|info|leaderboard_info|our_info|pic_loaded|show_(?:achievement|bank|friend_picker|leaderboard|profile|purchase_prompt|ui)|type_challenge|type_score_challenge)|asset_(?:font|object|path|room|script|shader|sound|sprite|tiles|timeline|unknown)|audio_(?:3d|falloff_(?:exponent_distance|exponent_distance_clamped|inverse_distance|inverse_distance_clamped|linear_distance|linear_distance_clamped|none)|mono|new_system|old_system|stereo)|bm_(?:add|complex|dest_alpha|dest_color|dest_colour|inv_dest_alpha|inv_dest_color|inv_dest_colour|inv_src_alpha|inv_src_color|inv_src_colour|max|normal|one|src_alpha|src_alpha_sat|src_color|src_colour|subtract|zero)|browser_(?:chrome|firefox|ie|ie_mobile|not_a_browser|opera|safari|safari_mobile|tizen|unknown|windows_store)|buffer_(?:bool|f16|f32|f64|fast|fixed|generalerror|grow|invalidtype|network|outofbounds|outofspace|s16|s32|s8|seek_end|seek_relative|seek_start|string|text|u16|u32|u64|u8|vbuffer|wrap)|c_(?:aqua|black|blue|dkgray|fuchsia|gray|green|lime|ltgray|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow)|cmpfunc_(?:always|equal|greater|greaterequal|less|lessequal|never|notequal)|cr_(?:appstart|arrow|beam|cross|default|drag|handpoint|hourglass|none|size_all|size_nesw|size_ns|size_nwse|size_we|uparrow)|cull_(?:clockwise|counterclockwise|noculling)|device_(?:emulator|tablet)|device_ios_(?:ipad|ipad_retina|iphone|iphone5|iphone6|iphone6plus|iphone_retina|unknown)|display_(?:landscape|landscape_flipped|portrait|portrait_flipped)|dll_(?:cdecl|cdel|stdcall)|ds_type_(?:grid|list|map|priority|queue|stack)|ef_(?:cloud|ellipse|explosion|firework|flare|rain|ring|smoke|smokeup|snow|spark|star)|fa_(?:archive|bottom|center|directory|hidden|left|middle|readonly|right|sysfile|top|volumeid)|fb_login_(?:default|fallback_to_webview|forcing_safari|forcing_webview|no_fallback_to_webview|use_system_account)|iap_(?:available|canceled|ev_consume|ev_product|ev_purchase|ev_restore|ev_storeload|failed|purchased|refunded|status_available|status_loading|status_processing|status_restoring|status_unavailable|status_uninitialised|storeload_failed|storeload_ok|unavailable)|leaderboard_type_(?:number|time_mins_secs)|lighttype_(?:dir|point)|matrix_(?:projection|view|world)|mb_(?:any|left|middle|none|right)|network_(?:config_(?:connect_timeout|disable_reliable_udp|enable_reliable_udp|use_non_blocking_socket)|socket_(?:bluetooth|tcp|udp)|type_(?:connect|data|disconnect|non_blocking_connect))|of_challenge_(?:lose|tie|win)|os_(?:android|ios|linux|macosx|ps3|ps4|psvita|unknown|uwp|win32|win8native|windows|winphone|xboxone)|phy_debug_render_(?:aabb|collision_pairs|coms|core_shapes|joints|obb|shapes)|phy_joint_(?:anchor_1_x|anchor_1_y|anchor_2_x|anchor_2_y|angle|angle_limits|damping_ratio|frequency|length_1|length_2|lower_angle_limit|max_force|max_length|max_motor_force|max_motor_torque|max_torque|motor_force|motor_speed|motor_torque|reaction_force_x|reaction_force_y|reaction_torque|speed|translation|upper_angle_limit)|phy_particle_data_flag_(?:category|color|colour|position|typeflags|velocity)|phy_particle_flag_(?:colormixing|colourmixing|elastic|powder|spring|tensile|viscous|wall|water|zombie)|phy_particle_group_flag_(?:rigid|solid)|pr_(?:linelist|linestrip|pointlist|trianglefan|trianglelist|trianglestrip)|ps_(?:distr|shape)_(?:diamond|ellipse|gaussian|invgaussian|line|linear|rectangle)|pt_shape_(?:circle|cloud|disk|explosion|flare|line|pixel|ring|smoke|snow|spark|sphere|square|star)|ty_(?:real|string)|gp_(?:face\d|axislh|axislv|axisrh|axisrv|padd|padl|padr|padu|select|shoulderl|shoulderlb|shoulderr|shoulderrb|start|stickl|stickr)|lb_disp_(?:none|numeric|time_ms|time_sec)|lb_sort_(?:ascending|descending|none)|ov_(?:achievements|community|friends|gamegroup|players|settings)|ugc_(?:filetype_(?:community|microtrans)|list_(?:Favorited|Followed|Published|Subscribed|UsedOrPlayed|VotedDown|VotedOn|VotedUp|WillVoteLater)|match_(?:AllGuides|Artwork|Collections|ControllerBindings|IntegratedGuides|Items|Items_Mtx|Items_ReadyToUse|Screenshots|UsableInGame|Videos|WebGuides)|query_(?:AcceptedForGameRankedByAcceptanceDate|CreatedByFriendsRankedByPublicationDate|FavoritedByFriendsRankedByPublicationDate|NotYetRated)|query_RankedBy(?:NumTimesReported|PublicationDate|TextSearch|TotalVotesAsc|Trend|Vote|VotesUp)|result_success|sortorder_CreationOrder(?:Asc|Desc)|sortorder_(?:ForModeration|LastUpdatedDesc|SubscriptionDateDesc|TitleAsc|VoteScoreDesc)|visibility_(?:friends_only|private|public))|vertex_usage_(?:binormal|blendindices|blendweight|color|colour|depth|fog|normal|position|psize|sample|tangent|texcoord|textcoord)|vertex_type_(?:float\d|color|colour|ubyte4)|input_type|layerelementtype_(?:background|instance|oldtilemap|particlesystem|sprite|tile|tilemap|undefined)|se_(?:chorus|compressor|echo|equalizer|flanger|gargle|none|reverb)|text_type|tile_(?:flip|index_mask|mirror|rotate)|(?:obj|rm|scr|spr)\w+)\b/,variable:/\b(?:alarm|application_surface|async_load|background_(?:alpha|blend|color|colour|foreground|height|hspeed|htiled|index|showcolor|showcolour|visible|vspeed|vtiled|width|x|xscale|y|yscale)|bbox_(?:bottom|left|right|top)|browser_(?:height|width)|caption_(?:health|lives|score)|current_(?:day|hour|minute|month|second|time|weekday|year)|cursor_sprite|debug_mode|delta_time|direction|display_aa|error_(?:last|occurred)|event_(?:action|number|object|type)|fps|fps_real|friction|game_(?:display|project|save)_(?:id|name)|gamemaker_(?:pro|registered|version)|gravity|gravity_direction|(?:h|v)speed|health|iap_data|id|image_(?:alpha|angle|blend|depth|index|number|speed|xscale|yscale)|instance_(?:count|id)|keyboard_(?:key|lastchar|lastkey|string)|layer|lives|mask_index|mouse_(?:button|lastbutton|x|y)|object_index|os_(?:browser|device|type|version)|path_(?:endaction|index|orientation|position|positionprevious|scale|speed)|persistent|phy_(?:rotation|(?:col_normal|collision|com|linear_velocity|position|speed)_(?:x|y)|angular_(?:damping|velocity)|position_(?:x|y)previous|speed|linear_damping|bullet|fixed_rotation|active|mass|inertia|dynamic|kinematic|sleeping|collision_points)|pointer_(?:invalid|null)|room|room_(?:caption|first|height|last|persistent|speed|width)|score|secure_mode|show_(?:health|lives|score)|solid|speed|sprite_(?:height|index|width|xoffset|yoffset)|temp_directory|timeline_(?:index|loop|position|running|speed)|transition_(?:color|kind|steps)|undefined|view_(?:angle|current|enabled|(?:h|v)(?:border|speed)|(?:h|w|x|y)port|(?:h|w|x|y)view|object|surface_id|visible)|visible|webgl_enabled|working_directory|(?:x|y)(?:previous|start)|x|y|argument(?:_relitive|_count|\d)|argument|global|local|other|self)\b/})}return Au}var Ru,fS;function cG(){if(fS)return Ru;fS=1,Ru=e,e.displayName="gn",e.aliases=["gni"];function e(t){t.languages.gn={comment:{pattern:/#.*/,greedy:!0},"string-literal":{pattern:/(^|[^\\"])"(?:[^\r\n"\\]|\\.)*"/,lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:\{[\s\S]*?\}|[a-zA-Z_]\w*|0x[a-fA-F0-9]{2})/,lookbehind:!0,inside:{number:/^\$0x[\s\S]{2}$/,variable:/^\$\w+$/,"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:null}}},string:/[\s\S]+/}},keyword:/\b(?:else|if)\b/,boolean:/\b(?:false|true)\b/,"builtin-function":{pattern:/\b(?:assert|defined|foreach|import|pool|print|template|tool|toolchain)(?=\s*\()/i,alias:"keyword"},function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:current_cpu|current_os|current_toolchain|default_toolchain|host_cpu|host_os|root_build_dir|root_gen_dir|root_out_dir|target_cpu|target_gen_dir|target_os|target_out_dir)\b/,number:/-?\b\d+\b/,operator:/[-+!=<>]=?|&&|\|\|/,punctuation:/[(){}[\],.]/},t.languages.gn["string-literal"].inside.interpolation.inside.expression.inside=t.languages.gn,t.languages.gni=t.languages.gn}return Ru}var Iu,gS;function dG(){if(gS)return Iu;gS=1,Iu=e,e.displayName="goModule",e.aliases=[];function e(t){t.languages["go-mod"]=t.languages["go-module"]={comment:{pattern:/\/\/.*/,greedy:!0},version:{pattern:/(^|[\s()[\],])v\d+\.\d+\.\d+(?:[+-][-+.\w]*)?(?![^\s()[\],])/,lookbehind:!0,alias:"number"},"go-version":{pattern:/((?:^|\s)go\s+)\d+(?:\.\d+){1,2}/,lookbehind:!0,alias:"number"},keyword:{pattern:/^([ \t]*)(?:exclude|go|module|replace|require|retract)\b/m,lookbehind:!0},operator:/=>/,punctuation:/[()[\],]/}}return Iu}var Cu,mS;function pG(){if(mS)return Cu;mS=1,Cu=e,e.displayName="go",e.aliases=[];function e(t){t.languages.go=t.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),t.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete t.languages.go["class-name"]}return Cu}var Nu,hS;function fG(){if(hS)return Nu;hS=1,Nu=e,e.displayName="graphql",e.aliases=[];function e(t){t.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:t.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},t.hooks.add("after-tokenize",function(r){if(r.language!=="graphql")return;var a=r.tokens.filter(function(b){return typeof b!="string"&&b.type!=="comment"&&b.type!=="scalar"}),i=0;function o(b){return a[i+b]}function s(b,g){g=g||0;for(var m=0;m0)){var h=l(/^\{$/,/^\}$/);if(h===-1)continue;for(var y=i;y=0&&u(T,"variable-input")}}}}})}return Nu}var xu,bS;function gG(){if(bS)return xu;bS=1,xu=e,e.displayName="groovy",e.aliases=[];function e(t){t.languages.groovy=t.languages.extend("clike",{string:[{pattern:/("""|''')(?:[^\\]|\\[\s\S])*?\1|\$\/(?:[^/$]|\$(?:[/$]|(?![/$]))|\/(?!\$))*\/\$/,greedy:!0},{pattern:/(["'/])(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0}],keyword:/\b(?:abstract|as|assert|boolean|break|byte|case|catch|char|class|const|continue|def|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|in|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\b/,number:/\b(?:0b[01_]+|0x[\da-f_]+(?:\.[\da-f_p\-]+)?|[\d_]+(?:\.[\d_]+)?(?:e[+-]?\d+)?)[glidf]?\b/i,operator:{pattern:/(^|[^.])(?:~|==?~?|\?[.:]?|\*(?:[.=]|\*=?)?|\.[@&]|\.\.<|\.\.(?!\.)|-[-=>]?|\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\|[|=]?|\/=?|\^=?|%=?)/,lookbehind:!0},punctuation:/\.+|[{}[\];(),:$]/}),t.languages.insertBefore("groovy","string",{shebang:{pattern:/#!.+/,alias:"comment"}}),t.languages.insertBefore("groovy","punctuation",{"spock-block":/\b(?:and|cleanup|expect|given|setup|then|when|where):/}),t.languages.insertBefore("groovy","function",{annotation:{pattern:/(^|[^.])@\w+/,lookbehind:!0,alias:"punctuation"}}),t.hooks.add("wrap",function(n){if(n.language==="groovy"&&n.type==="string"){var r=n.content.value[0];if(r!="'"){var a=/([^\\])(?:\$(?:\{.*?\}|[\w.]+))/;r==="$"&&(a=/([^\$])(?:\$(?:\{.*?\}|[\w.]+))/),n.content.value=n.content.value.replace(/</g,"<").replace(/&/g,"&"),n.content=t.highlight(n.content.value,{expression:{pattern:a,lookbehind:!0,inside:t.languages.groovy}}),n.classes.push(r==="/"?"regex":"gstring")}}})}return xu}var Ou,yS;function mG(){if(yS)return Ou;yS=1;var e=Zo();Ou=t,t.displayName="haml",t.aliases=[];function t(n){n.register(e),function(r){r.languages.haml={"multiline-comment":{pattern:/((?:^|\r?\n|\r)([\t ]*))(?:\/|-#).*(?:(?:\r?\n|\r)\2[\t ].+)*/,lookbehind:!0,alias:"comment"},"multiline-code":[{pattern:/((?:^|\r?\n|\r)([\t ]*)(?:[~-]|[&!]?=)).*,[\t ]*(?:(?:\r?\n|\r)\2[\t ].*,[\t ]*)*(?:(?:\r?\n|\r)\2[\t ].+)/,lookbehind:!0,inside:r.languages.ruby},{pattern:/((?:^|\r?\n|\r)([\t ]*)(?:[~-]|[&!]?=)).*\|[\t ]*(?:(?:\r?\n|\r)\2[\t ].*\|[\t ]*)*/,lookbehind:!0,inside:r.languages.ruby}],filter:{pattern:/((?:^|\r?\n|\r)([\t ]*)):[\w-]+(?:(?:\r?\n|\r)(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/,lookbehind:!0,inside:{"filter-name":{pattern:/^:[\w-]+/,alias:"symbol"}}},markup:{pattern:/((?:^|\r?\n|\r)[\t ]*)<.+/,lookbehind:!0,inside:r.languages.markup},doctype:{pattern:/((?:^|\r?\n|\r)[\t ]*)!!!(?: .+)?/,lookbehind:!0},tag:{pattern:/((?:^|\r?\n|\r)[\t ]*)[%.#][\w\-#.]*[\w\-](?:\([^)]+\)|\{(?:\{[^}]+\}|[^{}])+\}|\[[^\]]+\])*[\/<>]*/,lookbehind:!0,inside:{attributes:[{pattern:/(^|[^#])\{(?:\{[^}]+\}|[^{}])+\}/,lookbehind:!0,inside:r.languages.ruby},{pattern:/\([^)]+\)/,inside:{"attr-value":{pattern:/(=\s*)(?:"(?:\\.|[^\\"\r\n])*"|[^)\s]+)/,lookbehind:!0},"attr-name":/[\w:-]+(?=\s*!?=|\s*[,)])/,punctuation:/[=(),]/}},{pattern:/\[[^\]]+\]/,inside:r.languages.ruby}],punctuation:/[<>]/}},code:{pattern:/((?:^|\r?\n|\r)[\t ]*(?:[~-]|[&!]?=)).+/,lookbehind:!0,inside:r.languages.ruby},interpolation:{pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"},ruby:{pattern:/[\s\S]+/,inside:r.languages.ruby}}},punctuation:{pattern:/((?:^|\r?\n|\r)[\t ]*)[~=\-&!]+/,lookbehind:!0}};for(var a="((?:^|\\r?\\n|\\r)([\\t ]*)):{{filter_name}}(?:(?:\\r?\\n|\\r)(?:\\2[\\t ].+|\\s*?(?=\\r?\\n|\\r)))+",i=["css",{filter:"coffee",language:"coffeescript"},"erb","javascript","less","markdown","ruby","scss","textile"],o={},s=0,l=i.length;s@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},r.hooks.add("before-tokenize",function(a){var i=/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g;r.languages["markup-templating"].buildPlaceholders(a,"handlebars",i)}),r.hooks.add("after-tokenize",function(a){r.languages["markup-templating"].tokenizePlaceholders(a,"handlebars")}),r.languages.hbs=r.languages.handlebars}(n)}return Lu}var Du,SS;function zm(){if(SS)return Du;SS=1,Du=e,e.displayName="haskell",e.aliases=["hs"];function e(t){t.languages.haskell={comment:{pattern:/(^|[^-!#$%*+=?&@|~.:<>^\\\/])(?:--(?:(?=.)[^-!#$%*+=?&@|~.:<>^\\\/].*|$)|\{-[\s\S]*?-\})/m,lookbehind:!0},char:{pattern:/'(?:[^\\']|\\(?:[abfnrtv\\"'&]|\^[A-Z@[\]^_]|ACK|BEL|BS|CAN|CR|DC1|DC2|DC3|DC4|DEL|DLE|EM|ENQ|EOT|ESC|ETB|ETX|FF|FS|GS|HT|LF|NAK|NUL|RS|SI|SO|SOH|SP|STX|SUB|SYN|US|VT|\d+|o[0-7]+|x[0-9a-fA-F]+))'/,alias:"string"},string:{pattern:/"(?:[^\\"]|\\(?:\S|\s+\\))*"/,greedy:!0},keyword:/\b(?:case|class|data|deriving|do|else|if|in|infixl|infixr|instance|let|module|newtype|of|primitive|then|type|where)\b/,"import-statement":{pattern:/(^[\t ]*)import\s+(?:qualified\s+)?(?:[A-Z][\w']*)(?:\.[A-Z][\w']*)*(?:\s+as\s+(?:[A-Z][\w']*)(?:\.[A-Z][\w']*)*)?(?:\s+hiding\b)?/m,lookbehind:!0,inside:{keyword:/\b(?:as|hiding|import|qualified)\b/,punctuation:/\./}},builtin:/\b(?:abs|acos|acosh|all|and|any|appendFile|approxRational|asTypeOf|asin|asinh|atan|atan2|atanh|basicIORun|break|catch|ceiling|chr|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|denominator|digitToInt|div|divMod|drop|dropWhile|either|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromDouble|fromEnum|fromInt|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|group|head|id|inRange|index|init|intToDigit|interact|ioError|isAlpha|isAlphaNum|isAscii|isControl|isDenormalized|isDigit|isHexDigit|isIEEE|isInfinite|isLower|isNaN|isNegativeZero|isOctDigit|isPrint|isSpace|isUpper|iterate|last|lcm|length|lex|lexDigits|lexLitChar|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|numerator|odd|or|ord|otherwise|pack|pi|pred|primExitWith|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|range|rangeSize|read|readDec|readFile|readFloat|readHex|readIO|readInt|readList|readLitChar|readLn|readOct|readParen|readSigned|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showInt|showList|showLitChar|showParen|showSigned|showString|shows|showsPrec|significand|signum|sin|sinh|snd|sort|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|threadToIOResult|toEnum|toInt|toInteger|toLower|toRational|toUpper|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\b/,number:/\b(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?|0o[0-7]+|0x[0-9a-f]+)\b/i,operator:[{pattern:/`(?:[A-Z][\w']*\.)*[_a-z][\w']*`/,greedy:!0},{pattern:/(\s)\.(?=\s)/,lookbehind:!0},/[-!#$%*+=?&@|~:<>^\\\/][-!#$%*+=?&@|~.:<>^\\\/]*|\.[-!#$%*+=?&@|~.:<>^\\\/]+/],hvariable:{pattern:/\b(?:[A-Z][\w']*\.)*[_a-z][\w']*/,inside:{punctuation:/\./}},constant:{pattern:/\b(?:[A-Z][\w']*\.)*[A-Z][\w']*/,inside:{punctuation:/\./}},punctuation:/[{}[\];(),.:]/},t.languages.hs=t.languages.haskell}return Du}var Mu,vS;function bG(){if(vS)return Mu;vS=1,Mu=e,e.displayName="haxe",e.aliases=[];function e(t){t.languages.haxe=t.languages.extend("clike",{string:{pattern:/"(?:[^"\\]|\\[\s\S])*"/,greedy:!0},"class-name":[{pattern:/(\b(?:abstract|class|enum|extends|implements|interface|new|typedef)\s+)[A-Z_]\w*/,lookbehind:!0},/\b[A-Z]\w*/],keyword:/\bthis\b|\b(?:abstract|as|break|case|cast|catch|class|continue|default|do|dynamic|else|enum|extends|extern|final|for|from|function|if|implements|import|in|inline|interface|macro|new|null|operator|overload|override|package|private|public|return|static|super|switch|throw|to|try|typedef|untyped|using|var|while)(?!\.)\b/,function:{pattern:/\b[a-z_]\w*(?=\s*(?:<[^<>]*>\s*)?\()/i,greedy:!0},operator:/\.{3}|\+\+|--|&&|\|\||->|=>|(?:<{1,3}|[-+*/%!=&|^])=?|[?:~]/}),t.languages.insertBefore("haxe","string",{"string-interpolation":{pattern:/'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{interpolation:{pattern:/(^|[^\\])\$(?:\w+|\{[^{}]+\})/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:t.languages.haxe}}},string:/[\s\S]+/}}}),t.languages.insertBefore("haxe","class-name",{regex:{pattern:/~\/(?:[^\/\\\r\n]|\\.)+\/[a-z]*/,greedy:!0,inside:{"regex-flags":/\b[a-z]+$/,"regex-source":{pattern:/^(~\/)[\s\S]+(?=\/$)/,lookbehind:!0,alias:"language-regex",inside:t.languages.regex},"regex-delimiter":/^~\/|\/$/}}}),t.languages.insertBefore("haxe","keyword",{preprocessor:{pattern:/#(?:else|elseif|end|if)\b.*/,alias:"property"},metadata:{pattern:/@:?[\w.]+/,alias:"symbol"},reification:{pattern:/\$(?:\w+|(?=\{))/,alias:"important"}})}return Mu}var Fu,kS;function yG(){if(kS)return Fu;kS=1,Fu=e,e.displayName="hcl",e.aliases=[];function e(t){t.languages.hcl={comment:/(?:\/\/|#).*|\/\*[\s\S]*?(?:\*\/|$)/,heredoc:{pattern:/<<-?(\w+\b)[\s\S]*?^[ \t]*\1/m,greedy:!0,alias:"string"},keyword:[{pattern:/(?:data|resource)\s+(?:"(?:\\[\s\S]|[^\\"])*")(?=\s+"[\w-]+"\s+\{)/i,inside:{type:{pattern:/(resource|data|\s+)(?:"(?:\\[\s\S]|[^\\"])*")/i,lookbehind:!0,alias:"variable"}}},{pattern:/(?:backend|module|output|provider|provisioner|variable)\s+(?:[\w-]+|"(?:\\[\s\S]|[^\\"])*")\s+(?=\{)/i,inside:{type:{pattern:/(backend|module|output|provider|provisioner|variable)\s+(?:[\w-]+|"(?:\\[\s\S]|[^\\"])*")\s+/i,lookbehind:!0,alias:"variable"}}},/[\w-]+(?=\s+\{)/],property:[/[-\w\.]+(?=\s*=(?!=))/,/"(?:\\[\s\S]|[^\\"])+"(?=\s*[:=])/],string:{pattern:/"(?:[^\\$"]|\\[\s\S]|\$(?:(?=")|\$+(?!\$)|[^"${])|\$\{(?:[^{}"]|"(?:[^\\"]|\\[\s\S])*")*\})*"/,greedy:!0,inside:{interpolation:{pattern:/(^|[^$])\$\{(?:[^{}"]|"(?:[^\\"]|\\[\s\S])*")*\}/,lookbehind:!0,inside:{type:{pattern:/(\b(?:count|data|local|module|path|self|terraform|var)\b\.)[\w\*]+/i,lookbehind:!0,alias:"variable"},keyword:/\b(?:count|data|local|module|path|self|terraform|var)\b/i,function:/\w+(?=\()/,string:{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0},number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?(?:e[+-]?\d+)?/i,punctuation:/[!\$#%&'()*+,.\/;<=>@\[\\\]^`{|}~?:]/}}}},number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?(?:e[+-]?\d+)?/i,boolean:/\b(?:false|true)\b/i,punctuation:/[=\[\]{}]/}}return Fu}var Pu,wS;function EG(){if(wS)return Pu;wS=1;var e=tr();Pu=t,t.displayName="hlsl",t.aliases=[];function t(n){n.register(e),n.languages.hlsl=n.languages.extend("c",{"class-name":[n.languages.c["class-name"],/\b(?:AppendStructuredBuffer|BlendState|Buffer|ByteAddressBuffer|CompileShader|ComputeShader|ConsumeStructuredBuffer|DepthStencilState|DepthStencilView|DomainShader|GeometryShader|Hullshader|InputPatch|LineStream|OutputPatch|PixelShader|PointStream|RWBuffer|RWByteAddressBuffer|RWStructuredBuffer|RWTexture(?:1D|1DArray|2D|2DArray|3D)|RasterizerState|RenderTargetView|SamplerComparisonState|SamplerState|StructuredBuffer|Texture(?:1D|1DArray|2D|2DArray|2DMS|2DMSArray|3D|Cube|CubeArray)|TriangleStream|VertexShader)\b/],keyword:[/\b(?:asm|asm_fragment|auto|break|case|catch|cbuffer|centroid|char|class|column_major|compile|compile_fragment|const|const_cast|continue|default|delete|discard|do|dynamic_cast|else|enum|explicit|export|extern|for|friend|fxgroup|goto|groupshared|if|in|inline|inout|interface|line|lineadj|linear|long|matrix|mutable|namespace|new|nointerpolation|noperspective|operator|out|packoffset|pass|pixelfragment|point|precise|private|protected|public|register|reinterpret_cast|return|row_major|sample|sampler|shared|short|signed|sizeof|snorm|stateblock|stateblock_state|static|static_cast|string|struct|switch|tbuffer|technique|technique10|technique11|template|texture|this|throw|triangle|triangleadj|try|typedef|typename|uniform|union|unorm|unsigned|using|vector|vertexfragment|virtual|void|volatile|while)\b/,/\b(?:bool|double|dword|float|half|int|min(?:10float|12int|16(?:float|int|uint))|uint)(?:[1-4](?:x[1-4])?)?\b/],number:/(?:(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[eE][+-]?\d+)?|\b0x[\da-fA-F]+)[fFhHlLuU]?\b/,boolean:/\b(?:false|true)\b/})}return Pu}var Uu,_S;function SG(){if(_S)return Uu;_S=1,Uu=e,e.displayName="hoon",e.aliases=[];function e(t){t.languages.hoon={comment:{pattern:/::.*/,greedy:!0},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},constant:/%(?:\.[ny]|[\w-]+)/,"class-name":/@(?:[a-z0-9-]*[a-z0-9])?|\*/i,function:/(?:\+[-+] {2})?(?:[a-z](?:[a-z0-9-]*[a-z0-9])?)/,keyword:/\.[\^\+\*=\?]|![><:\.=\?!]|=[>|:,\.\-\^<+;/~\*\?]|\?[>|:\.\-\^<\+&~=@!]|\|[\$_%:\.\-\^~\*=@\?]|\+[|\$\+\*]|:[_\-\^\+~\*]|%[_:\.\-\^\+~\*=]|\^[|:\.\-\+&~\*=\?]|\$[|_%:<>\-\^&~@=\?]|;[:<\+;\/~\*=]|~[>|\$_%<\+\/&=\?!]|--|==/}}return Uu}var Bu,TS;function vG(){if(TS)return Bu;TS=1,Bu=e,e.displayName="hpkp",e.aliases=[];function e(t){t.languages.hpkp={directive:{pattern:/\b(?:includeSubDomains|max-age|pin-sha256|preload|report-to|report-uri|strict)(?=[\s;=]|$)/i,alias:"property"},operator:/=/,punctuation:/;/}}return Bu}var $u,AS;function kG(){if(AS)return $u;AS=1,$u=e,e.displayName="hsts",e.aliases=[];function e(t){t.languages.hsts={directive:{pattern:/\b(?:includeSubDomains|max-age|preload)(?=[\s;=]|$)/i,alias:"property"},operator:/=/,punctuation:/;/}}return $u}var zu,RS;function wG(){if(RS)return zu;RS=1,zu=e,e.displayName="http",e.aliases=[];function e(t){(function(n){function r(c){return RegExp("(^(?:"+c+"):[ ]*(?![ ]))[^]+","i")}n.languages.http={"request-line":{pattern:/^(?:CONNECT|DELETE|GET|HEAD|OPTIONS|PATCH|POST|PRI|PUT|SEARCH|TRACE)\s(?:https?:\/\/|\/)\S*\sHTTP\/[\d.]+/m,inside:{method:{pattern:/^[A-Z]+\b/,alias:"property"},"request-target":{pattern:/^(\s)(?:https?:\/\/|\/)\S*(?=\s)/,lookbehind:!0,alias:"url",inside:n.languages.uri},"http-version":{pattern:/^(\s)HTTP\/[\d.]+/,lookbehind:!0,alias:"property"}}},"response-status":{pattern:/^HTTP\/[\d.]+ \d+ .+/m,inside:{"http-version":{pattern:/^HTTP\/[\d.]+/,alias:"property"},"status-code":{pattern:/^(\s)\d+(?=\s)/,lookbehind:!0,alias:"number"},"reason-phrase":{pattern:/^(\s).+/,lookbehind:!0,alias:"string"}}},header:{pattern:/^[\w-]+:.+(?:(?:\r\n?|\n)[ \t].+)*/m,inside:{"header-value":[{pattern:r(/Content-Security-Policy/.source),lookbehind:!0,alias:["csp","languages-csp"],inside:n.languages.csp},{pattern:r(/Public-Key-Pins(?:-Report-Only)?/.source),lookbehind:!0,alias:["hpkp","languages-hpkp"],inside:n.languages.hpkp},{pattern:r(/Strict-Transport-Security/.source),lookbehind:!0,alias:["hsts","languages-hsts"],inside:n.languages.hsts},{pattern:r(/[^:]+/.source),lookbehind:!0}],"header-name":{pattern:/^[^:]+/,alias:"keyword"},punctuation:/^:/}}};var a=n.languages,i={"application/javascript":a.javascript,"application/json":a.json||a.javascript,"application/xml":a.xml,"text/xml":a.xml,"text/html":a.html,"text/css":a.css,"text/plain":a.plain},o={"application/json":!0,"application/xml":!0};function s(c){var f=c.replace(/^[a-z]+\//,""),p="\\w+/(?:[\\w.-]+\\+)+"+f+"(?![+\\w.-])";return"(?:"+c+"|"+p+")"}var l;for(var u in i)if(i[u]){l=l||{};var d=o[u]?s(u):u;l[u.replace(/\//g,"-")]={pattern:RegExp("("+/content-type:\s*/.source+d+/(?:(?:\r\n?|\n)[\w-].*)*(?:\r(?:\n|(?!\n))|\n)/.source+")"+/[^ \t\w-][\s\S]*/.source,"i"),lookbehind:!0,inside:i[u]}}l&&n.languages.insertBefore("http","header",l)})(t)}return zu}var Gu,IS;function _G(){if(IS)return Gu;IS=1,Gu=e,e.displayName="ichigojam",e.aliases=[];function e(t){t.languages.ichigojam={comment:/(?:\B'|REM)(?:[^\n\r]*)/i,string:{pattern:/"(?:""|[!#$%&'()*,\/:;<=>?^\w +\-.])*"/,greedy:!0},number:/\B#[0-9A-F]+|\B`[01]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?/i,keyword:/\b(?:BEEP|BPS|CASE|CLEAR|CLK|CLO|CLP|CLS|CLT|CLV|CONT|COPY|ELSE|END|FILE|FILES|FOR|GOSUB|GOTO|GSB|IF|INPUT|KBD|LED|LET|LIST|LOAD|LOCATE|LRUN|NEW|NEXT|OUT|PLAY|POKE|PRINT|PWM|REM|RENUM|RESET|RETURN|RIGHT|RTN|RUN|SAVE|SCROLL|SLEEP|SRND|STEP|STOP|SUB|TEMPO|THEN|TO|UART|VIDEO|WAIT)(?:\$|\b)/i,function:/\b(?:ABS|ANA|ASC|BIN|BTN|DEC|END|FREE|HELP|HEX|I2CR|I2CW|IN|INKEY|LEN|LINE|PEEK|RND|SCR|SOUND|STR|TICK|USR|VER|VPEEK|ZER)(?:\$|\b)/i,label:/(?:\B@\S+)/,operator:/<[=>]?|>=?|\|\||&&|[+\-*\/=|&^~!]|\b(?:AND|NOT|OR)\b/i,punctuation:/[\[,;:()\]]/}}return Gu}var qu,CS;function TG(){if(CS)return qu;CS=1,qu=e,e.displayName="icon",e.aliases=[];function e(t){t.languages.icon={comment:/#.*/,string:{pattern:/(["'])(?:(?!\1)[^\\\r\n_]|\\.|_(?!\1)(?:\r\n|[\s\S]))*\1/,greedy:!0},number:/\b(?:\d+r[a-z\d]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)\b|\.\d+\b/i,"builtin-keyword":{pattern:/&(?:allocated|ascii|clock|collections|cset|current|date|dateline|digits|dump|e|error(?:number|text|value)?|errout|fail|features|file|host|input|lcase|letters|level|line|main|null|output|phi|pi|pos|progname|random|regions|source|storage|subject|time|trace|ucase|version)\b/,alias:"variable"},directive:{pattern:/\$\w+/,alias:"builtin"},keyword:/\b(?:break|by|case|create|default|do|else|end|every|fail|global|if|initial|invocable|link|local|next|not|of|procedure|record|repeat|return|static|suspend|then|to|until|while)\b/,function:/\b(?!\d)\w+(?=\s*[({]|\s*!\s*\[)/,operator:/[+-]:(?!=)|(?:[\/?@^%&]|\+\+?|--?|==?=?|~==?=?|\*\*?|\|\|\|?|<(?:->?|>?=?)(?::=)?|:(?:=:?)?|[!.\\|~]/,punctuation:/[\[\](){},;]/}}return qu}var ju,NS;function AG(){if(NS)return ju;NS=1,ju=e,e.displayName="icuMessageFormat",e.aliases=[];function e(t){(function(n){function r(u,d){return d<=0?/[]/.source:u.replace(//g,function(){return r(u,d-1)})}var a=/'[{}:=,](?:[^']|'')*'(?!')/,i={pattern:/''/,greedy:!0,alias:"operator"},o={pattern:a,greedy:!0,inside:{escape:i}},s=r(/\{(?:[^{}']|'(?![{},'])|''||)*\}/.source.replace(//g,function(){return a.source}),8),l={pattern:RegExp(s),inside:{message:{pattern:/^(\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:null},"message-delimiter":{pattern:/./,alias:"punctuation"}}};n.languages["icu-message-format"]={argument:{pattern:RegExp(s),greedy:!0,inside:{content:{pattern:/^(\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:{"argument-name":{pattern:/^(\s*)[^{}:=,\s]+/,lookbehind:!0},"choice-style":{pattern:/^(\s*,\s*choice\s*,\s*)\S(?:[\s\S]*\S)?/,lookbehind:!0,inside:{punctuation:/\|/,range:{pattern:/^(\s*)[+-]?(?:\d+(?:\.\d*)?|\u221e)\s*[<#\u2264]/,lookbehind:!0,inside:{operator:/[<#\u2264]/,number:/\S+/}},rest:null}},"plural-style":{pattern:/^(\s*,\s*(?:plural|selectordinal)\s*,\s*)\S(?:[\s\S]*\S)?/,lookbehind:!0,inside:{offset:/^offset:\s*\d+/,"nested-message":l,selector:{pattern:/=\d+|[^{}:=,\s]+/,inside:{keyword:/^(?:few|many|one|other|two|zero)$/}}}},"select-style":{pattern:/^(\s*,\s*select\s*,\s*)\S(?:[\s\S]*\S)?/,lookbehind:!0,inside:{"nested-message":l,selector:{pattern:/[^{}:=,\s]+/,inside:{keyword:/^other$/}}}},keyword:/\b(?:choice|plural|select|selectordinal)\b/,"arg-type":{pattern:/\b(?:date|duration|number|ordinal|spellout|time)\b/,alias:"keyword"},"arg-skeleton":{pattern:/(,\s*)::[^{}:=,\s]+/,lookbehind:!0},"arg-style":{pattern:/(,\s*)(?:currency|full|integer|long|medium|percent|short)(?=\s*$)/,lookbehind:!0},"arg-style-text":{pattern:RegExp(/(^\s*,\s*(?=\S))/.source+r(/(?:[^{}']|'[^']*'|\{(?:)?\})+/.source,8)+"$"),lookbehind:!0,alias:"string"},punctuation:/,/}},"argument-delimiter":{pattern:/./,alias:"operator"}}},escape:i,string:o},l.inside.message.inside=n.languages["icu-message-format"],n.languages["icu-message-format"].argument.inside.content.inside["choice-style"].inside.rest=n.languages["icu-message-format"]})(t)}return ju}var Hu,xS;function RG(){if(xS)return Hu;xS=1;var e=zm();Hu=t,t.displayName="idris",t.aliases=["idr"];function t(n){n.register(e),n.languages.idris=n.languages.extend("haskell",{comment:{pattern:/(?:(?:--|\|\|\|).*$|\{-[\s\S]*?-\})/m},keyword:/\b(?:Type|case|class|codata|constructor|corecord|data|do|dsl|else|export|if|implementation|implicit|import|impossible|in|infix|infixl|infixr|instance|interface|let|module|mutual|namespace|of|parameters|partial|postulate|private|proof|public|quoteGoal|record|rewrite|syntax|then|total|using|where|with)\b/,builtin:void 0}),n.languages.insertBefore("idris","keyword",{"import-statement":{pattern:/(^\s*import\s+)(?:[A-Z][\w']*)(?:\.[A-Z][\w']*)*/m,lookbehind:!0,inside:{punctuation:/\./}}}),n.languages.idr=n.languages.idris}return Hu}var Vu,OS;function IG(){if(OS)return Vu;OS=1,Vu=e,e.displayName="iecst",e.aliases=[];function e(t){t.languages.iecst={comment:[{pattern:/(^|[^\\])(?:\/\*[\s\S]*?(?:\*\/|$)|\(\*[\s\S]*?(?:\*\)|$)|\{[\s\S]*?(?:\}|$))/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},keyword:[/\b(?:END_)?(?:PROGRAM|CONFIGURATION|INTERFACE|FUNCTION_BLOCK|FUNCTION|ACTION|TRANSITION|TYPE|STRUCT|(?:INITIAL_)?STEP|NAMESPACE|LIBRARY|CHANNEL|FOLDER|RESOURCE|VAR_(?:ACCESS|CONFIG|EXTERNAL|GLOBAL|INPUT|IN_OUT|OUTPUT|TEMP)|VAR|METHOD|PROPERTY)\b/i,/\b(?:AT|BY|(?:END_)?(?:CASE|FOR|IF|REPEAT|WHILE)|CONSTANT|CONTINUE|DO|ELSE|ELSIF|EXIT|EXTENDS|FROM|GET|GOTO|IMPLEMENTS|JMP|NON_RETAIN|OF|PRIVATE|PROTECTED|PUBLIC|RETAIN|RETURN|SET|TASK|THEN|TO|UNTIL|USING|WITH|__CATCH|__ENDTRY|__FINALLY|__TRY)\b/],"class-name":/\b(?:ANY|ARRAY|BOOL|BYTE|U?(?:D|L|S)?INT|(?:D|L)?WORD|DATE(?:_AND_TIME)?|DT|L?REAL|POINTER|STRING|TIME(?:_OF_DAY)?|TOD)\b/,address:{pattern:/%[IQM][XBWDL][\d.]*|%[IQ][\d.]*/,alias:"symbol"},number:/\b(?:16#[\da-f]+|2#[01_]+|0x[\da-f]+)\b|\b(?:D|DT|T|TOD)#[\d_shmd:]*|\b[A-Z]*#[\d.,_]*|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/,operator:/S?R?:?=>?|&&?|\*\*?|<[=>]?|>=?|[-:^/+#]|\b(?:AND|EQ|EXPT|GE|GT|LE|LT|MOD|NE|NOT|OR|XOR)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,punctuation:/[()[\].,;]/}}return Vu}var Wu,LS;function CG(){if(LS)return Wu;LS=1,Wu=e,e.displayName="ignore",e.aliases=["gitignore","hgignore","npmignore"];function e(t){(function(n){n.languages.ignore={comment:/^#.*/m,entry:{pattern:/\S(?:.*(?:(?:\\ )|\S))?/,alias:"string",inside:{operator:/^!|\*\*?|\?/,regex:{pattern:/(^|[^\\])\[[^\[\]]*\]/,lookbehind:!0},punctuation:/\//}}},n.languages.gitignore=n.languages.ignore,n.languages.hgignore=n.languages.ignore,n.languages.npmignore=n.languages.ignore})(t)}return Wu}var Yu,DS;function NG(){if(DS)return Yu;DS=1,Yu=e,e.displayName="inform7",e.aliases=[];function e(t){t.languages.inform7={string:{pattern:/"[^"]*"/,inside:{substitution:{pattern:/\[[^\[\]]+\]/,inside:{delimiter:{pattern:/\[|\]/,alias:"punctuation"}}}}},comment:{pattern:/\[[^\[\]]+\]/,greedy:!0},title:{pattern:/^[ \t]*(?:book|chapter|part(?! of)|section|table|volume)\b.+/im,alias:"important"},number:{pattern:/(^|[^-])(?:\b\d+(?:\.\d+)?(?:\^\d+)?(?:(?!\d)\w+)?|\b(?:eight|eleven|five|four|nine|one|seven|six|ten|three|twelve|two))\b(?!-)/i,lookbehind:!0},verb:{pattern:/(^|[^-])\b(?:answering|applying to|are|asking|attacking|be(?:ing)?|burning|buying|called|carries|carry(?! out)|carrying|climbing|closing|conceal(?:ing|s)?|consulting|contain(?:ing|s)?|cutting|drinking|dropping|eating|enclos(?:es?|ing)|entering|examining|exiting|getting|giving|going|ha(?:s|ve|ving)|hold(?:ing|s)?|impl(?:ies|y)|incorporat(?:es?|ing)|inserting|is|jumping|kissing|listening|locking|looking|mean(?:ing|s)?|opening|provid(?:es?|ing)|pulling|pushing|putting|relat(?:es?|ing)|removing|searching|see(?:ing|s)?|setting|showing|singing|sleeping|smelling|squeezing|support(?:ing|s)?|swearing|switching|taking|tasting|telling|thinking|throwing|touching|turning|tying|unlock(?:ing|s)?|var(?:ies|y|ying)|waiting|waking|waving|wear(?:ing|s)?)\b(?!-)/i,lookbehind:!0,alias:"operator"},keyword:{pattern:/(^|[^-])\b(?:after|before|carry out|check|continue the action|definition(?= *:)|do nothing|else|end (?:if|the story|unless)|every turn|if|include|instead(?: of)?|let|move|no|now|otherwise|repeat|report|resume the story|rule for|running through|say(?:ing)?|stop the action|test|try(?:ing)?|understand|unless|use|when|while|yes)\b(?!-)/i,lookbehind:!0},property:{pattern:/(^|[^-])\b(?:adjacent(?! to)|carried|closed|concealed|contained|dark|described|edible|empty|enclosed|enterable|even|female|fixed in place|full|handled|held|improper-named|incorporated|inedible|invisible|lighted|lit|lock(?:able|ed)|male|marked for listing|mentioned|negative|neuter|non-(?:empty|full|recurring)|odd|opaque|open(?:able)?|plural-named|portable|positive|privately-named|proper-named|provided|publically-named|pushable between rooms|recurring|related|rubbing|scenery|seen|singular-named|supported|swinging|switch(?:able|ed(?: off| on)?)|touch(?:able|ed)|transparent|unconcealed|undescribed|unlit|unlocked|unmarked for listing|unmentioned|unopenable|untouchable|unvisited|variable|visible|visited|wearable|worn)\b(?!-)/i,lookbehind:!0,alias:"symbol"},position:{pattern:/(^|[^-])\b(?:above|adjacent to|back side of|below|between|down|east|everywhere|front side|here|in|inside(?: from)?|north(?:east|west)?|nowhere|on(?: top of)?|other side|outside(?: from)?|parts? of|regionally in|south(?:east|west)?|through|up|west|within)\b(?!-)/i,lookbehind:!0,alias:"keyword"},type:{pattern:/(^|[^-])\b(?:actions?|activit(?:ies|y)|actors?|animals?|backdrops?|containers?|devices?|directions?|doors?|holders?|kinds?|lists?|m[ae]n|nobody|nothing|nouns?|numbers?|objects?|people|persons?|player(?:'s holdall)?|regions?|relations?|rooms?|rule(?:book)?s?|scenes?|someone|something|supporters?|tables?|texts?|things?|time|vehicles?|wom[ae]n)\b(?!-)/i,lookbehind:!0,alias:"variable"},punctuation:/[.,:;(){}]/},t.languages.inform7.string.inside.substitution.inside.rest=t.languages.inform7,t.languages.inform7.string.inside.substitution.inside.rest.text={pattern:/\S(?:\s*\S)*/,alias:"comment"}}return Yu}var Ku,MS;function xG(){if(MS)return Ku;MS=1,Ku=e,e.displayName="ini",e.aliases=[];function e(t){t.languages.ini={comment:{pattern:/(^[ \f\t\v]*)[#;][^\n\r]*/m,lookbehind:!0},section:{pattern:/(^[ \f\t\v]*)\[[^\n\r\]]*\]?/m,lookbehind:!0,inside:{"section-name":{pattern:/(^\[[ \f\t\v]*)[^ \f\t\v\]]+(?:[ \f\t\v]+[^ \f\t\v\]]+)*/,lookbehind:!0,alias:"selector"},punctuation:/\[|\]/}},key:{pattern:/(^[ \f\t\v]*)[^ \f\n\r\t\v=]+(?:[ \f\t\v]+[^ \f\n\r\t\v=]+)*(?=[ \f\t\v]*=)/m,lookbehind:!0,alias:"attr-name"},value:{pattern:/(=[ \f\t\v]*)[^ \f\n\r\t\v]+(?:[ \f\t\v]+[^ \f\n\r\t\v]+)*/,lookbehind:!0,alias:"attr-value",inside:{"inner-value":{pattern:/^("|').+(?=\1$)/,lookbehind:!0}}},punctuation:/=/}}return Ku}var Xu,FS;function OG(){if(FS)return Xu;FS=1,Xu=e,e.displayName="io",e.aliases=[];function e(t){t.languages.io={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?(?:\*\/|$)|\/\/.*|#.*)/,lookbehind:!0,greedy:!0},"triple-quoted-string":{pattern:/"""(?:\\[\s\S]|(?!""")[^\\])*"""/,greedy:!0,alias:"string"},string:{pattern:/"(?:\\.|[^\\\r\n"])*"/,greedy:!0},keyword:/\b(?:activate|activeCoroCount|asString|block|break|call|catch|clone|collectGarbage|compileString|continue|do|doFile|doMessage|doString|else|elseif|exit|for|foreach|forward|getEnvironmentVariable|getSlot|hasSlot|if|ifFalse|ifNil|ifNilEval|ifTrue|isActive|isNil|isResumable|list|message|method|parent|pass|pause|perform|performWithArgList|print|println|proto|raise|raiseResumable|removeSlot|resend|resume|schedulerSleepSeconds|self|sender|setSchedulerSleepSeconds|setSlot|shallowCopy|slotNames|super|system|then|thisBlock|thisContext|try|type|uniqueId|updateSlot|wait|while|write|yield)\b/,builtin:/\b(?:Array|AudioDevice|AudioMixer|BigNum|Block|Box|Buffer|CFunction|CGI|Color|Curses|DBM|DNSResolver|DOConnection|DOProxy|DOServer|Date|Directory|Duration|DynLib|Error|Exception|FFT|File|Fnmatch|Font|Future|GL|GLE|GLScissor|GLU|GLUCylinder|GLUQuadric|GLUSphere|GLUT|Host|Image|Importer|LinkList|List|Lobby|Locals|MD5|MP3Decoder|MP3Encoder|Map|Message|Movie|Notification|Number|Object|OpenGL|Point|Protos|Random|Regex|SGML|SGMLElement|SGMLParser|SQLite|Sequence|Server|ShowMessage|SleepyCat|SleepyCatCursor|Socket|SocketManager|Sound|Soup|Store|String|Tree|UDPSender|UPDReceiver|URL|User|Warning|WeakLink)\b/,boolean:/\b(?:false|nil|true)\b/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e-?\d+)?/i,operator:/[=!*/%+\-^&|]=|>>?=?|<+*\-%$|,#][.:]?|[?^]\.?|[;\[]:?|[~}"i][.:]|[ACeEIjLor]\.|(?:[_\/\\qsux]|_?\d):)/,alias:"keyword"},number:/\b_?(?:(?!\d:)\d+(?:\.\d+)?(?:(?:ad|ar|[ejpx])_?\d+(?:\.\d+)?)*(?:b_?[\da-z]+(?:\.[\da-z]+)?)?|_\b(?!\.))/,adverb:{pattern:/[~}]|[\/\\]\.?|[bfM]\.|t[.:]/,alias:"builtin"},operator:/[=a][.:]|_\./,conjunction:{pattern:/&(?:\.:?|:)?|[.:@][.:]?|[!D][.:]|[;dHT]\.|`:?|[\^LS]:|"/,alias:"variable"},punctuation:/[()]/}}return Zu}var Qu,US;function Gm(){if(US)return Qu;US=1,Qu=e,e.displayName="java",e.aliases=[];function e(t){(function(n){var r=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,a=/(^|[^\w.])(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,i={pattern:RegExp(a+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};n.languages.java=n.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[i,{pattern:RegExp(a+/[A-Z]\w*(?=\s+\w+\s*[;,=()])/.source),lookbehind:!0,inside:i.inside}],keyword:r,function:[n.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),n.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),n.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":i,keyword:r,punctuation:/[<>(),.:]/,operator:/[?&|]/}},namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(//g,function(){return r.source})),lookbehind:!0,inside:{punctuation:/\./}}})})(t)}return Qu}var Ju,BS;function Qo(){if(BS)return Ju;BS=1,Ju=e,e.displayName="javadoclike",e.aliases=[];function e(t){(function(n){var r=n.languages.javadoclike={parameter:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};function a(o,s){var l="doc-comment",u=n.languages[o];if(u){var d=u[l];if(!d){var c={};c[l]={pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"},u=n.languages.insertBefore(o,"comment",c),d=u[l]}if(d instanceof RegExp&&(d=u[l]={pattern:d}),Array.isArray(d))for(var f=0,p=d.length;f)?|/.source.replace(//g,function(){return o});a.languages.javadoc=a.languages.extend("javadoclike",{}),a.languages.insertBefore("javadoc","keyword",{reference:{pattern:RegExp(/(@(?:exception|link|linkplain|see|throws|value)\s+(?:\*\s*)?)/.source+"(?:"+s+")"),lookbehind:!0,inside:{function:{pattern:/(#\s*)\w+(?=\s*\()/,lookbehind:!0},field:{pattern:/(#\s*)\w+/,lookbehind:!0},namespace:{pattern:/\b(?:[a-z]\w*\s*\.\s*)+/,inside:{punctuation:/\./}},"class-name":/\b[A-Z]\w*/,keyword:a.languages.java.keyword,punctuation:/[#()[\],.]/}},"class-name":{pattern:/(@param\s+)<[A-Z]\w*>/,lookbehind:!0,inside:{punctuation:/[.<>]/}},"code-section":[{pattern:/(\{@code\s+(?!\s))(?:[^\s{}]|\s+(?![\s}])|\{(?:[^{}]|\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\})*\})+(?=\s*\})/,lookbehind:!0,inside:{code:{pattern:i,lookbehind:!0,inside:a.languages.java,alias:"language-java"}}},{pattern:/(<(code|pre|tt)>(?!)\s*)\S(?:\S|\s+\S)*?(?=\s*<\/\2>)/,lookbehind:!0,inside:{line:{pattern:i,lookbehind:!0,inside:{tag:a.languages.markup.tag,entity:a.languages.markup.entity,code:{pattern:/.+/,inside:a.languages.java,alias:"language-java"}}}}}],tag:a.languages.markup.tag,entity:a.languages.markup.entity}),a.languages.javadoclike.addSupport("java",a.languages.javadoc)}(r)}return ec}var tc,zS;function MG(){if(zS)return tc;zS=1,tc=e,e.displayName="javastacktrace",e.aliases=[];function e(t){t.languages.javastacktrace={summary:{pattern:/^([\t ]*)(?:(?:Caused by:|Suppressed:|Exception in thread "[^"]*")[\t ]+)?[\w$.]+(?::.*)?$/m,lookbehind:!0,inside:{keyword:{pattern:/^([\t ]*)(?:(?:Caused by|Suppressed)(?=:)|Exception in thread)/m,lookbehind:!0},string:{pattern:/^(\s*)"[^"]*"/,lookbehind:!0},exceptions:{pattern:/^(:?\s*)[\w$.]+(?=:|$)/,lookbehind:!0,inside:{"class-name":/[\w$]+$/,namespace:/\b[a-z]\w*\b/,punctuation:/\./}},message:{pattern:/(:\s*)\S.*/,lookbehind:!0,alias:"string"},punctuation:/:/}},"stack-frame":{pattern:/^([\t ]*)at (?:[\w$./]|@[\w$.+-]*\/)+(?:)?\([^()]*\)/m,lookbehind:!0,inside:{keyword:{pattern:/^(\s*)at(?= )/,lookbehind:!0},source:[{pattern:/(\()\w+\.\w+:\d+(?=\))/,lookbehind:!0,inside:{file:/^\w+\.\w+/,punctuation:/:/,"line-number":{pattern:/\b\d+\b/,alias:"number"}}},{pattern:/(\()[^()]*(?=\))/,lookbehind:!0,inside:{keyword:/^(?:Native Method|Unknown Source)$/}}],"class-name":/[\w$]+(?=\.(?:|[\w$]+)\()/,function:/(?:|[\w$]+)(?=\()/,"class-loader":{pattern:/(\s)[a-z]\w*(?:\.[a-z]\w*)*(?=\/[\w@$.]*\/)/,lookbehind:!0,alias:"namespace",inside:{punctuation:/\./}},module:{pattern:/([\s/])[a-z]\w*(?:\.[a-z]\w*)*(?:@[\w$.+-]*)?(?=\/)/,lookbehind:!0,inside:{version:{pattern:/(@)[\s\S]+/,lookbehind:!0,alias:"number"},punctuation:/[@.]/}},namespace:{pattern:/(?:\b[a-z]\w*\.)+/,inside:{punctuation:/\./}},punctuation:/[()/.]/}},more:{pattern:/^([\t ]*)\.{3} \d+ [a-z]+(?: [a-z]+)*/m,lookbehind:!0,inside:{punctuation:/\.{3}/,number:/\d+/,keyword:/\b[a-z]+(?: [a-z]+)*\b/}}}}return tc}var nc,GS;function FG(){if(GS)return nc;GS=1,nc=e,e.displayName="jexl",e.aliases=[];function e(t){t.languages.jexl={string:/(["'])(?:\\[\s\S]|(?!\1)[^\\])*\1/,transform:{pattern:/(\|\s*)[a-zA-Zа-яА-Я_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF$][\wа-яА-Я\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF$]*/,alias:"function",lookbehind:!0},function:/[a-zA-Zа-яА-Я_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF$][\wа-яА-Я\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF$]*\s*(?=\()/,number:/\b\d+(?:\.\d+)?\b|\B\.\d+\b/,operator:/[<>!]=?|-|\+|&&|==|\|\|?|\/\/?|[?:*^%]/,boolean:/\b(?:false|true)\b/,keyword:/\bin\b/,punctuation:/[{}[\](),.]/}}return nc}var rc,qS;function PG(){if(qS)return rc;qS=1,rc=e,e.displayName="jolie",e.aliases=[];function e(t){t.languages.jolie=t.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\[\s\S]|[^"\\])*"/,lookbehind:!0,greedy:!0},"class-name":{pattern:/((?:\b(?:as|courier|embed|in|inputPort|outputPort|service)\b|@)[ \t]*)\w+/,lookbehind:!0},keyword:/\b(?:as|cH|comp|concurrent|constants|courier|cset|csets|default|define|else|embed|embedded|execution|exit|extender|for|foreach|forward|from|global|if|import|in|include|init|inputPort|install|instanceof|interface|is_defined|linkIn|linkOut|main|new|nullProcess|outputPort|over|private|provide|public|scope|sequential|service|single|spawn|synchronized|this|throw|throws|type|undef|until|while|with)\b/,function:/\b[a-z_]\w*(?=[ \t]*[@(])/i,number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?l?/i,operator:/-[-=>]?|\+[+=]?|<[<=]?|[>=*!]=?|&&|\|\||[?\/%^@|]/,punctuation:/[()[\]{},;.:]/,builtin:/\b(?:Byte|any|bool|char|double|enum|float|int|length|long|ranges|regex|string|undefined|void)\b/}),t.languages.insertBefore("jolie","keyword",{aggregates:{pattern:/(\bAggregates\s*:\s*)(?:\w+(?:\s+with\s+\w+)?\s*,\s*)*\w+(?:\s+with\s+\w+)?/,lookbehind:!0,inside:{keyword:/\bwith\b/,"class-name":/\w+/,punctuation:/,/}},redirects:{pattern:/(\bRedirects\s*:\s*)(?:\w+\s*=>\s*\w+\s*,\s*)*(?:\w+\s*=>\s*\w+)/,lookbehind:!0,inside:{punctuation:/,/,"class-name":/\w+/,operator:/=>/}},property:{pattern:/\b(?:Aggregates|[Ii]nterfaces|Java|Javascript|Jolie|[Ll]ocation|OneWay|[Pp]rotocol|Redirects|RequestResponse)\b(?=[ \t]*:)/}})}return rc}var ac,jS;function UG(){if(jS)return ac;jS=1,ac=e,e.displayName="jq",e.aliases=[];function e(t){(function(n){var r=/\\\((?:[^()]|\([^()]*\))*\)/.source,a=RegExp(/(^|[^\\])"(?:[^"\r\n\\]|\\[^\r\n(]|__)*"/.source.replace(/__/g,function(){return r})),i={interpolation:{pattern:RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+r),lookbehind:!0,inside:{content:{pattern:/^(\\\()[\s\S]+(?=\)$)/,lookbehind:!0,inside:null},punctuation:/^\\\(|\)$/}}},o=n.languages.jq={comment:/#.*/,property:{pattern:RegExp(a.source+/(?=\s*:(?!:))/.source),lookbehind:!0,greedy:!0,inside:i},string:{pattern:a,lookbehind:!0,greedy:!0,inside:i},function:{pattern:/(\bdef\s+)[a-z_]\w+/i,lookbehind:!0},variable:/\B\$\w+/,"property-literal":{pattern:/\b[a-z_]\w*(?=\s*:(?!:))/i,alias:"property"},keyword:/\b(?:as|break|catch|def|elif|else|end|foreach|if|import|include|label|module|modulemeta|null|reduce|then|try|while)\b/,boolean:/\b(?:false|true)\b/,number:/(?:\b\d+\.|\B\.)?\b\d+(?:[eE][+-]?\d+)?\b/,operator:[{pattern:/\|=?/,alias:"pipe"},/\.\.|[!=<>]?=|\?\/\/|\/\/=?|[-+*/%]=?|[<>?]|\b(?:and|not|or)\b/],"c-style-function":{pattern:/\b[a-z_]\w*(?=\s*\()/i,alias:"function"},punctuation:/::|[()\[\]{},:;]|\.(?=\s*[\[\w$])/,dot:{pattern:/\./,alias:"important"}};i.interpolation.inside.content.inside=o})(t)}return ac}var ic,HS;function BG(){if(HS)return ic;HS=1,ic=e,e.displayName="jsExtras",e.aliases=[];function e(t){(function(n){n.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+n.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),n.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+n.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),n.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]});function r(u,d){return RegExp(u.replace(//g,function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source}),d)}n.languages.insertBefore("javascript","keyword",{imports:{pattern:r(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:n.languages.javascript},exports:{pattern:r(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:n.languages.javascript}}),n.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),n.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),n.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:r(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var a=["function","function-variable","method","method-variable","property-access"],i=0;i=R.length)return;var I=N[k];if(typeof I=="string"||typeof I.content=="string"){var D=R[m],q=typeof I=="string"?I:I.content,$=q.indexOf(D);if($!==-1){++m;var z=q.substring(0,$),H=c(v[D]),Y=q.substring($+D.length),x=[];if(z&&x.push(z),x.push(H),Y){var M=[Y];C(M),x.push.apply(x,M)}typeof I=="string"?(N.splice.apply(N,[k,1].concat(x)),k+=x.length-1):I.content=x}}else{var S=I.content;Array.isArray(S)?C(S):C([S])}}}return C(E),new n.Token(b,E,"language-"+b,y)}var p={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};n.hooks.add("after-tokenize",function(y){if(!(y.language in p))return;function T(b){for(var g=0,m=b.length;g]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),n.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete n.languages.typescript.parameter,delete n.languages.typescript["literal-property"];var r=n.languages.extend("typescript",{});delete r["class-name"],n.languages.typescript["class-name"].inside=r,n.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:r}}}}),n.languages.ts=n.languages.typescript})(t)}return sc}var lc,YS;function zG(){if(YS)return lc;YS=1;var e=Qo(),t=qm();lc=n,n.displayName="jsdoc",n.aliases=[];function n(r){r.register(e),r.register(t),function(a){var i=a.languages.javascript,o=/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})+\}/.source,s="(@(?:arg|argument|param|property)\\s+(?:"+o+"\\s+)?)";a.languages.jsdoc=a.languages.extend("javadoclike",{parameter:{pattern:RegExp(s+/(?:(?!\s)[$\w\xA0-\uFFFF.])+(?=\s|$)/.source),lookbehind:!0,inside:{punctuation:/\./}}}),a.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(s+/\[(?:(?!\s)[$\w\xA0-\uFFFF.])+(?:=[^[\]]+)?\](?=\s|$)/.source),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:i,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp(/(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\s+(?:\s+)?)[A-Z]\w*(?:\.[A-Z]\w*)*/.source.replace(//g,function(){return o})),lookbehind:!0,inside:{punctuation:/\./}},{pattern:RegExp("(@[a-z]+\\s+)"+o),lookbehind:!0,inside:{string:i.string,number:i.number,boolean:i.boolean,keyword:a.languages.typescript.keyword,operator:/=>|\.\.\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\]]/}}],example:{pattern:/(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^([\t ]*(?:\*\s*)?)\S.*$/m,lookbehind:!0,inside:i,alias:"language-javascript"}}}}),a.languages.javadoclike.addSupport("javascript",a.languages.jsdoc)}(r)}return lc}var uc,KS;function jm(){if(KS)return uc;KS=1,uc=e,e.displayName="json",e.aliases=["webmanifest"];function e(t){t.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},t.languages.webmanifest=t.languages.json}return uc}var cc,XS;function GG(){if(XS)return cc;XS=1;var e=jm();cc=t,t.displayName="json5",t.aliases=[];function t(n){n.register(e),function(r){var a=/("|')(?:\\(?:\r\n?|\n|.)|(?!\1)[^\\\r\n])*\1/;r.languages.json5=r.languages.extend("json",{property:[{pattern:RegExp(a.source+"(?=\\s*:)"),greedy:!0},{pattern:/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/,alias:"unquoted"}],string:{pattern:a,greedy:!0},number:/[+-]?\b(?:NaN|Infinity|0x[a-fA-F\d]+)\b|[+-]?(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[eE][+-]?\d+\b)?/})}(n)}return cc}var dc,ZS;function qG(){if(ZS)return dc;ZS=1;var e=jm();dc=t,t.displayName="jsonp",t.aliases=[];function t(n){n.register(e),n.languages.jsonp=n.languages.extend("json",{punctuation:/[{}[\]();,.]/}),n.languages.insertBefore("jsonp","punctuation",{function:/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*\()/})}return dc}var pc,QS;function jG(){if(QS)return pc;QS=1,pc=e,e.displayName="jsstacktrace",e.aliases=[];function e(t){t.languages.jsstacktrace={"error-message":{pattern:/^\S.*/m,alias:"string"},"stack-frame":{pattern:/(^[ \t]+)at[ \t].*/m,lookbehind:!0,inside:{"not-my-code":{pattern:/^at[ \t]+(?!\s)(?:node\.js||.*(?:node_modules|\(\)|\(|$|\(internal\/|\(node\.js)).*/m,alias:"comment"},filename:{pattern:/(\bat\s+(?!\s)|\()(?:[a-zA-Z]:)?[^():]+(?=:)/,lookbehind:!0,alias:"url"},function:{pattern:/(\bat\s+(?:new\s+)?)(?!\s)[_$a-zA-Z\xA0-\uFFFF<][.$\w\xA0-\uFFFF<>]*/,lookbehind:!0,inside:{punctuation:/\./}},punctuation:/[()]/,keyword:/\b(?:at|new)\b/,alias:{pattern:/\[(?:as\s+)?(?!\s)[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\]/,alias:"variable"},"line-number":{pattern:/:\d+(?::\d+)?\b/,alias:"number",inside:{punctuation:/:/}}}}}}return pc}var fc,JS;function HR(){if(JS)return fc;JS=1,fc=e,e.displayName="jsx",e.aliases=[];function e(t){(function(n){var r=n.util.clone(n.languages.javascript),a=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,i=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{*\.{3}(?:[^{}]|)*\})/.source;function s(d,c){return d=d.replace(//g,function(){return a}).replace(//g,function(){return i}).replace(//g,function(){return o}),RegExp(d,c)}o=s(o).source,n.languages.jsx=n.languages.extend("markup",r),n.languages.jsx.tag.pattern=s(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),n.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,n.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,n.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,n.languages.jsx.tag.inside.comment=r.comment,n.languages.insertBefore("inside","attr-name",{spread:{pattern:s(//.source),inside:n.languages.jsx}},n.languages.jsx.tag),n.languages.insertBefore("inside","special-attr",{script:{pattern:s(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:n.languages.jsx}}},n.languages.jsx.tag);var l=function(d){return d?typeof d=="string"?d:typeof d.content=="string"?d.content:d.content.map(l).join(""):""},u=function(d){for(var c=[],f=0;f0&&c[c.length-1].tagName===l(p.content[0].content[1])&&c.pop():p.content[p.content.length-1].content==="/>"||c.push({tagName:l(p.content[0].content[1]),openedBraces:0}):c.length>0&&p.type==="punctuation"&&p.content==="{"?c[c.length-1].openedBraces++:c.length>0&&c[c.length-1].openedBraces>0&&p.type==="punctuation"&&p.content==="}"?c[c.length-1].openedBraces--:h=!0),(h||typeof p=="string")&&c.length>0&&c[c.length-1].openedBraces===0){var y=l(p);f0&&(typeof d[f-1]=="string"||d[f-1].type==="plain-text")&&(y=l(d[f-1])+y,d.splice(f-1,1),f--),d[f]=new n.Token("plain-text",y,null,y)}p.content&&typeof p.content!="string"&&u(p.content)}};n.hooks.add("after-tokenize",function(d){d.language!=="jsx"&&d.language!=="tsx"||u(d.tokens)})})(t)}return fc}var gc,ev;function HG(){if(ev)return gc;ev=1,gc=e,e.displayName="julia",e.aliases=[];function e(t){t.languages.julia={comment:{pattern:/(^|[^\\])(?:#=(?:[^#=]|=(?!#)|#(?!=)|#=(?:[^#=]|=(?!#)|#(?!=))*=#)*=#|#.*)/,lookbehind:!0},regex:{pattern:/r"(?:\\.|[^"\\\r\n])*"[imsx]{0,4}/,greedy:!0},string:{pattern:/"""[\s\S]+?"""|(?:\b\w+)?"(?:\\.|[^"\\\r\n])*"|`(?:[^\\`\r\n]|\\.)*`/,greedy:!0},char:{pattern:/(^|[^\w'])'(?:\\[^\r\n][^'\r\n]*|[^\\\r\n])'/,lookbehind:!0,greedy:!0},keyword:/\b(?:abstract|baremodule|begin|bitstype|break|catch|ccall|const|continue|do|else|elseif|end|export|finally|for|function|global|if|immutable|import|importall|in|let|local|macro|module|print|println|quote|return|struct|try|type|typealias|using|while)\b/,boolean:/\b(?:false|true)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[box])?(?:[\da-f]+(?:_[\da-f]+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[efp][+-]?\d+(?:_\d+)*)?j?/i,operator:/&&|\|\||[-+*^%÷⊻&$\\]=?|\/[\/=]?|!=?=?|\|[=>]?|<(?:<=?|[=:|])?|>(?:=|>>?=?)?|==?=?|[~≠≤≥'√∛]/,punctuation:/::?|[{}[\]();,.?]/,constant:/\b(?:(?:Inf|NaN)(?:16|32|64)?|im|pi)\b|[πℯ]/}}return gc}var mc,tv;function VG(){if(tv)return mc;tv=1,mc=e,e.displayName="keepalived",e.aliases=[];function e(t){t.languages.keepalived={comment:{pattern:/[#!].*/,greedy:!0},string:{pattern:/(^|[^\\])(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/,lookbehind:!0,greedy:!0},ip:{pattern:RegExp(/\b(?:(?:(?:[\da-f]{1,4}:){7}[\da-f]{1,4}|(?:[\da-f]{1,4}:){6}:[\da-f]{1,4}|(?:[\da-f]{1,4}:){5}:(?:[\da-f]{1,4}:)?[\da-f]{1,4}|(?:[\da-f]{1,4}:){4}:(?:[\da-f]{1,4}:){0,2}[\da-f]{1,4}|(?:[\da-f]{1,4}:){3}:(?:[\da-f]{1,4}:){0,3}[\da-f]{1,4}|(?:[\da-f]{1,4}:){2}:(?:[\da-f]{1,4}:){0,4}[\da-f]{1,4}|(?:[\da-f]{1,4}:){6}|(?:[\da-f]{1,4}:){0,5}:|::(?:[\da-f]{1,4}:){0,5}|[\da-f]{1,4}::(?:[\da-f]{1,4}:){0,5}[\da-f]{1,4}|::(?:[\da-f]{1,4}:){0,6}[\da-f]{1,4}|(?:[\da-f]{1,4}:){1,7}:)(?:\/\d{1,3})?|(?:\/\d{1,2})?)\b/.source.replace(//g,function(){return/(?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d))/.source}),"i"),alias:"number"},path:{pattern:/(\s)\/(?:[^\/\s]+\/)*[^\/\s]*|\b[a-zA-Z]:\\(?:[^\\\s]+\\)*[^\\\s]*/,lookbehind:!0,alias:"string"},variable:/\$\{?\w+\}?/,email:{pattern:/[\w-]+@[\w-]+(?:\.[\w-]{2,3}){1,2}/,alias:"string"},"conditional-configuration":{pattern:/@\^?[\w-]+/,alias:"variable"},operator:/=/,property:/\b(?:BFD_CHECK|DNS_CHECK|FILE_CHECK|HTTP_GET|MISC_CHECK|NAME|PING_CHECK|SCRIPTS|SMTP_CHECK|SSL|SSL_GET|TCP_CHECK|UDP_CHECK|accept|advert_int|alpha|auth_pass|auth_type|authentication|bfd_cpu_affinity|bfd_instance|bfd_no_swap|bfd_priority|bfd_process_name|bfd_rlimit_rttime|bfd_rt_priority|bind_if|bind_port|bindto|ca|certificate|check_unicast_src|checker|checker_cpu_affinity|checker_log_all_failures|checker_no_swap|checker_priority|checker_rlimit_rttime|checker_rt_priority|child_wait_time|connect_ip|connect_port|connect_timeout|dbus_service_name|debug|default_interface|delay|delay_before_retry|delay_loop|digest|dont_track_primary|dynamic|dynamic_interfaces|enable_(?:dbus|script_security|sni|snmp_checker|snmp_rfc|snmp_rfcv2|snmp_rfcv3|snmp_vrrp|traps)|end|fall|fast_recovery|file|flag-[123]|fork_delay|full_command|fwmark|garp_group|garp_interval|garp_lower_prio_delay|garp_lower_prio_repeat|garp_master_delay|garp_master_refresh|garp_master_refresh_repeat|garp_master_repeat|global_defs|global_tracking|gna_interval|group|ha_suspend|hashed|helo_name|higher_prio_send_advert|hoplimit|http_protocol|hysteresis|idle_tx|include|inhibit_on_failure|init_fail|init_file|instance|interface|interfaces|interval|ip_family|ipvs_process_name|keepalived.conf|kernel_rx_buf_size|key|linkbeat_interfaces|linkbeat_use_polling|log_all_failures|log_unknown_vrids|lower_prio_no_advert|lthreshold|lvs_flush|lvs_flush_onstop|lvs_method|lvs_netlink_cmd_rcv_bufs|lvs_netlink_cmd_rcv_bufs_force|lvs_netlink_monitor_rcv_bufs|lvs_netlink_monitor_rcv_bufs_force|lvs_notify_fifo|lvs_notify_fifo_script|lvs_sched|lvs_sync_daemon|max_auto_priority|max_hops|mcast_src_ip|mh-fallback|mh-port|min_auto_priority_delay|min_rx|min_tx|misc_dynamic|misc_path|misc_timeout|multiplier|name|namespace_with_ipsets|native_ipv6|neighbor_ip|net_namespace|net_namespace_ipvs|nftables|nftables_counters|nftables_ifindex|nftables_priority|no_accept|no_checker_emails|no_email_faults|nopreempt|notification_email|notification_email_from|notify|notify_backup|notify_deleted|notify_down|notify_fault|notify_fifo|notify_fifo_script|notify_master|notify_master_rx_lower_pri|notify_priority_changes|notify_stop|notify_up|old_unicast_checksum|omega|ops|param_match|passive|password|path|persistence_engine|persistence_granularity|persistence_timeout|preempt|preempt_delay|priority|process|process_monitor_rcv_bufs|process_monitor_rcv_bufs_force|process_name|process_names|promote_secondaries|protocol|proxy_arp|proxy_arp_pvlan|quorum|quorum_down|quorum_max|quorum_up|random_seed|real_server|regex|regex_max_offset|regex_min_offset|regex_no_match|regex_options|regex_stack|reload_repeat|reload_time_file|require_reply|retry|rise|router_id|rs_init_notifies|script|script_user|sh-fallback|sh-port|shutdown_script|shutdown_script_timeout|skip_check_adv_addr|smtp_alert|smtp_alert_checker|smtp_alert_vrrp|smtp_connect_timeout|smtp_helo_name|smtp_server|snmp_socket|sorry_server|sorry_server_inhibit|sorry_server_lvs_method|source_ip|start|startup_script|startup_script_timeout|state|static_ipaddress|static_routes|static_rules|status_code|step|strict_mode|sync_group_tracking_weight|terminate_delay|timeout|track_bfd|track_file|track_group|track_interface|track_process|track_script|track_src_ip|ttl|type|umask|unicast_peer|unicast_src_ip|unicast_ttl|url|use_ipvlan|use_pid_dir|use_vmac|user|uthreshold|val[123]|version|virtual_ipaddress|virtual_ipaddress_excluded|virtual_router_id|virtual_routes|virtual_rules|virtual_server|virtual_server_group|virtualhost|vmac_xmit_base|vrrp|vrrp_(?:check_unicast_src|cpu_affinity|garp_interval|garp_lower_prio_delay|garp_lower_prio_repeat|garp_master_delay|garp_master_refresh|garp_master_refresh_repeat|garp_master_repeat|gna_interval|higher_prio_send_advert|instance|ipsets|iptables|lower_prio_no_advert|mcast_group4|mcast_group6|min_garp|netlink_cmd_rcv_bufs|netlink_cmd_rcv_bufs_force|netlink_monitor_rcv_bufs|netlink_monitor_rcv_bufs_force|no_swap|notify_fifo|notify_fifo_script|notify_priority_changes|priority|process_name|rlimit_rttime|rt_priority|rx_bufs_multiplier|rx_bufs_policy|script|skip_check_adv_addr|startup_delay|strict|sync_group|track_process|version)|warmup|weight)\b/,constant:/\b(?:A|AAAA|AH|BACKUP|CNAME|DR|MASTER|MX|NAT|NS|PASS|SCTP|SOA|TCP|TUN|TXT|UDP|dh|fo|lblc|lblcr|lc|mh|nq|ovf|rr|sed|sh|wlc|wrr)\b/,number:{pattern:/(^|[^\w.-])-?\d+(?:\.\d+)?/,lookbehind:!0},boolean:/\b(?:false|no|off|on|true|yes)\b/,punctuation:/[\{\}]/}}return mc}var hc,nv;function WG(){if(nv)return hc;nv=1,hc=e,e.displayName="keyman",e.aliases=[];function e(t){t.languages.keyman={comment:{pattern:/\bc .*/i,greedy:!0},string:{pattern:/"[^"\r\n]*"|'[^'\r\n]*'/,greedy:!0},"virtual-key":{pattern:/\[\s*(?:(?:ALT|CAPS|CTRL|LALT|LCTRL|NCAPS|RALT|RCTRL|SHIFT)\s+)*(?:[TKU]_[\w?]+|[A-E]\d\d?|"[^"\r\n]*"|'[^'\r\n]*')\s*\]/i,greedy:!0,alias:"function"},"header-keyword":{pattern:/&\w+/,alias:"bold"},"header-statement":{pattern:/\b(?:bitmap|bitmaps|caps always off|caps on only|copyright|hotkey|language|layout|message|name|shift frees caps|version)\b/i,alias:"bold"},"rule-keyword":{pattern:/\b(?:any|baselayout|beep|call|context|deadkey|dk|if|index|layer|notany|nul|outs|platform|reset|return|save|set|store|use)\b/i,alias:"keyword"},"structural-keyword":{pattern:/\b(?:ansi|begin|group|match|nomatch|unicode|using keys)\b/i,alias:"keyword"},"compile-target":{pattern:/\$(?:keyman|keymanonly|keymanweb|kmfl|weaver):/i,alias:"property"},number:/\b(?:U\+[\dA-F]+|d\d+|x[\da-f]+|\d+)\b/i,operator:/[+>\\$]|\.\./,punctuation:/[()=,]/}}return hc}var bc,rv;function YG(){if(rv)return bc;rv=1,bc=e,e.displayName="kotlin",e.aliases=["kt","kts"];function e(t){(function(n){n.languages.kotlin=n.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete n.languages.kotlin["class-name"];var r={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:n.languages.kotlin}};n.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:r},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:r},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete n.languages.kotlin.string,n.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),n.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),n.languages.kt=n.languages.kotlin,n.languages.kts=n.languages.kotlin})(t)}return bc}var yc,av;function KG(){if(av)return yc;av=1,yc=e,e.displayName="kumir",e.aliases=["kum"];function e(t){(function(n){var r=/\s\x00-\x1f\x22-\x2f\x3a-\x3f\x5b-\x5e\x60\x7b-\x7e/.source;function a(i,o){return RegExp(i.replace(//g,r),o)}n.languages.kumir={comment:{pattern:/\|.*/},prolog:{pattern:/#.*/,greedy:!0},string:{pattern:/"[^\n\r"]*"|'[^\n\r']*'/,greedy:!0},boolean:{pattern:a(/(^|[])(?:да|нет)(?=[]|$)/.source),lookbehind:!0},"operator-word":{pattern:a(/(^|[])(?:и|или|не)(?=[]|$)/.source),lookbehind:!0,alias:"keyword"},"system-variable":{pattern:a(/(^|[])знач(?=[]|$)/.source),lookbehind:!0,alias:"keyword"},type:[{pattern:a(/(^|[])(?:вещ|лит|лог|сим|цел)(?:\x20*таб)?(?=[]|$)/.source),lookbehind:!0,alias:"builtin"},{pattern:a(/(^|[])(?:компл|сканкод|файл|цвет)(?=[]|$)/.source),lookbehind:!0,alias:"important"}],keyword:{pattern:a(/(^|[])(?:алг|арг(?:\x20*рез)?|ввод|ВКЛЮЧИТЬ|вс[её]|выбор|вывод|выход|дано|для|до|дс|если|иначе|исп|использовать|кон(?:(?:\x20+|_)исп)?|кц(?:(?:\x20+|_)при)?|надо|нач|нс|нц|от|пауза|пока|при|раза?|рез|стоп|таб|то|утв|шаг)(?=[]|$)/.source),lookbehind:!0},name:{pattern:a(/(^|[])[^\d][^]*(?:\x20+[^]+)*(?=[]|$)/.source),lookbehind:!0},number:{pattern:a(/(^|[])(?:\B\$[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)(?=[]|$)/.source,"i"),lookbehind:!0},punctuation:/:=|[(),:;\[\]]/,"operator-char":{pattern:/\*\*?|<[=>]?|>=?|[-+/=]/,alias:"operator"}},n.languages.kum=n.languages.kumir})(t)}return yc}var Ec,iv;function XG(){if(iv)return Ec;iv=1,Ec=e,e.displayName="kusto",e.aliases=[];function e(t){t.languages.kusto={comment:{pattern:/\/\/.*/,greedy:!0},string:{pattern:/```[\s\S]*?```|[hH]?(?:"(?:[^\r\n\\"]|\\.)*"|'(?:[^\r\n\\']|\\.)*'|@(?:"[^\r\n"]*"|'[^\r\n']*'))/,greedy:!0},verb:{pattern:/(\|\s*)[a-z][\w-]*/i,lookbehind:!0,alias:"keyword"},command:{pattern:/\.[a-z][a-z\d-]*\b/,alias:"keyword"},"class-name":/\b(?:bool|datetime|decimal|dynamic|guid|int|long|real|string|timespan)\b/,keyword:/\b(?:access|alias|and|anti|as|asc|auto|between|by|(?:contains|(?:ends|starts)with|has(?:perfix|suffix)?)(?:_cs)?|database|declare|desc|external|from|fullouter|has_all|in|ingestion|inline|inner|innerunique|into|(?:left|right)(?:anti(?:semi)?|inner|outer|semi)?|let|like|local|not|of|on|or|pattern|print|query_parameters|range|restrict|schema|set|step|table|tables|to|view|where|with|matches\s+regex|nulls\s+(?:first|last))(?![\w-])/,boolean:/\b(?:false|null|true)\b/,function:/\b[a-z_]\w*(?=\s*\()/,datetime:[{pattern:/\b(?:(?:Fri|Friday|Mon|Monday|Sat|Saturday|Sun|Sunday|Thu|Thursday|Tue|Tuesday|Wed|Wednesday)\s*,\s*)?\d{1,2}(?:\s+|-)(?:Apr|Aug|Dec|Feb|Jan|Jul|Jun|Mar|May|Nov|Oct|Sep)(?:\s+|-)\d{2}\s+\d{2}:\d{2}(?::\d{2})?(?:\s*(?:\b(?:[A-Z]|(?:[ECMT][DS]|GM|U)T)|[+-]\d{4}))?\b/,alias:"number"},{pattern:/[+-]?\b(?:\d{4}-\d{2}-\d{2}(?:[ T]\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?)?|\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?)Z?/,alias:"number"}],number:/\b(?:0x[0-9A-Fa-f]+|\d+(?:\.\d+)?(?:[Ee][+-]?\d+)?)(?:(?:min|sec|[mnµ]s|[dhms]|microsecond|tick)\b)?|[+-]?\binf\b/,operator:/=>|[!=]~|[!=<>]=?|[-+*/%|]|\.\./,punctuation:/[()\[\]{},;.:]/}}return Ec}var Sc,ov;function ZG(){if(ov)return Sc;ov=1,Sc=e,e.displayName="latex",e.aliases=["tex","context"];function e(t){(function(n){var r=/\\(?:[^a-z()[\]]|[a-z*]+)/i,a={"equation-command":{pattern:r,alias:"regex"}};n.languages.latex={comment:/%.*/,cdata:{pattern:/(\\begin\{((?:lstlisting|verbatim)\*?)\})[\s\S]*?(?=\\end\{\2\})/,lookbehind:!0},equation:[{pattern:/\$\$(?:\\[\s\S]|[^\\$])+\$\$|\$(?:\\[\s\S]|[^\\$])+\$|\\\([\s\S]*?\\\)|\\\[[\s\S]*?\\\]/,inside:a,alias:"string"},{pattern:/(\\begin\{((?:align|eqnarray|equation|gather|math|multline)\*?)\})[\s\S]*?(?=\\end\{\2\})/,lookbehind:!0,inside:a,alias:"string"}],keyword:{pattern:/(\\(?:begin|cite|documentclass|end|label|ref|usepackage)(?:\[[^\]]+\])?\{)[^}]+(?=\})/,lookbehind:!0},url:{pattern:/(\\url\{)[^}]+(?=\})/,lookbehind:!0},headline:{pattern:/(\\(?:chapter|frametitle|paragraph|part|section|subparagraph|subsection|subsubparagraph|subsubsection|subsubsubparagraph)\*?(?:\[[^\]]+\])?\{)[^}]+(?=\})/,lookbehind:!0,alias:"class-name"},function:{pattern:r,alias:"selector"},punctuation:/[[\]{}&]/},n.languages.tex=n.languages.latex,n.languages.context=n.languages.latex})(t)}return Sc}var vc,sv;function Jo(){if(sv)return vc;sv=1;var e=nt();vc=t,t.displayName="php",t.aliases=[];function t(n){n.register(e),function(r){var a=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,i=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],o=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,s=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,l=/[{}\[\](),:;]/;r.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:a,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|new|or|parent|print|private|protected|public|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s+)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:i,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:o,operator:s,punctuation:l};var u={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:r.languages.php},d=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:u}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:u}}];r.languages.insertBefore("php","variable",{string:d,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:a,string:d,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:i,number:o,operator:s,punctuation:l}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),r.hooks.add("before-tokenize",function(c){if(/<\?/.test(c.code)){var f=/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g;r.languages["markup-templating"].buildPlaceholders(c,"php",f)}}),r.hooks.add("after-tokenize",function(c){r.languages["markup-templating"].tokenizePlaceholders(c,"php")})}(n)}return vc}var kc,lv;function QG(){if(lv)return kc;lv=1;var e=nt(),t=Jo();kc=n,n.displayName="latte",n.aliases=[];function n(r){r.register(e),r.register(t),function(a){a.languages.latte={comment:/^\{\*[\s\S]*/,"latte-tag":{pattern:/(^\{(?:\/(?=[a-z]))?)(?:[=_]|[a-z]\w*\b(?!\())/i,lookbehind:!0,alias:"important"},delimiter:{pattern:/^\{\/?|\}$/,alias:"punctuation"},php:{pattern:/\S(?:[\s\S]*\S)?/,alias:"language-php",inside:a.languages.php}};var i=a.languages.extend("markup",{});a.languages.insertBefore("inside","attr-value",{"n-attr":{pattern:/n:[\w-]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+))?/,inside:{"attr-name":{pattern:/^[^\s=]+/,alias:"important"},"attr-value":{pattern:/=[\s\S]+/,inside:{punctuation:[/^=/,{pattern:/^(\s*)["']|["']$/,lookbehind:!0}],php:{pattern:/\S(?:[\s\S]*\S)?/,inside:a.languages.php}}}}}},i.tag),a.hooks.add("before-tokenize",function(o){if(o.language==="latte"){var s=/\{\*[\s\S]*?\*\}|\{[^'"\s{}*](?:[^"'/{}]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|\/\*(?:[^*]|\*(?!\/))*\*\/)*\}/g;a.languages["markup-templating"].buildPlaceholders(o,"latte",s),o.grammar=i}}),a.hooks.add("after-tokenize",function(o){a.languages["markup-templating"].tokenizePlaceholders(o,"latte")})}(r)}return kc}var wc,uv;function JG(){if(uv)return wc;uv=1,wc=e,e.displayName="less",e.aliases=[];function e(t){t.languages.less=t.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),t.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}})}return wc}var _c,cv;function Hm(){if(cv)return _c;cv=1,_c=e,e.displayName="scheme",e.aliases=[];function e(t){(function(n){n.languages.scheme={comment:/;.*|#;\s*(?:\((?:[^()]|\([^()]*\))*\)|\[(?:[^\[\]]|\[[^\[\]]*\])*\])|#\|(?:[^#|]|#(?!\|)|\|(?!#)|#\|(?:[^#|]|#(?!\|)|\|(?!#))*\|#)*\|#/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0},symbol:{pattern:/'[^()\[\]#'\s]+/,greedy:!0},char:{pattern:/#\\(?:[ux][a-fA-F\d]+\b|[-a-zA-Z]+\b|[\uD800-\uDBFF][\uDC00-\uDFFF]|\S)/,greedy:!0},"lambda-parameter":[{pattern:/((?:^|[^'`#])[(\[]lambda\s+)(?:[^|()\[\]'\s]+|\|(?:[^\\|]|\\.)*\|)/,lookbehind:!0},{pattern:/((?:^|[^'`#])[(\[]lambda\s+[(\[])[^()\[\]']+/,lookbehind:!0}],keyword:{pattern:/((?:^|[^'`#])[(\[])(?:begin|case(?:-lambda)?|cond(?:-expand)?|define(?:-library|-macro|-record-type|-syntax|-values)?|defmacro|delay(?:-force)?|do|else|except|export|guard|if|import|include(?:-ci|-library-declarations)?|lambda|let(?:rec)?(?:-syntax|-values|\*)?|let\*-values|only|parameterize|prefix|(?:quasi-?)?quote|rename|set!|syntax-(?:case|rules)|unless|unquote(?:-splicing)?|when)(?=[()\[\]\s]|$)/,lookbehind:!0},builtin:{pattern:/((?:^|[^'`#])[(\[])(?:abs|and|append|apply|assoc|ass[qv]|binary-port\?|boolean=?\?|bytevector(?:-append|-copy|-copy!|-length|-u8-ref|-u8-set!|\?)?|caar|cadr|call-with-(?:current-continuation|port|values)|call\/cc|car|cdar|cddr|cdr|ceiling|char(?:->integer|-ready\?|\?|<\?|<=\?|=\?|>\?|>=\?)|close-(?:input-port|output-port|port)|complex\?|cons|current-(?:error|input|output)-port|denominator|dynamic-wind|eof-object\??|eq\?|equal\?|eqv\?|error|error-object(?:-irritants|-message|\?)|eval|even\?|exact(?:-integer-sqrt|-integer\?|\?)?|expt|features|file-error\?|floor(?:-quotient|-remainder|\/)?|flush-output-port|for-each|gcd|get-output-(?:bytevector|string)|inexact\??|input-port(?:-open\?|\?)|integer(?:->char|\?)|lcm|length|list(?:->string|->vector|-copy|-ref|-set!|-tail|\?)?|make-(?:bytevector|list|parameter|string|vector)|map|max|member|memq|memv|min|modulo|negative\?|newline|not|null\?|number(?:->string|\?)|numerator|odd\?|open-(?:input|output)-(?:bytevector|string)|or|output-port(?:-open\?|\?)|pair\?|peek-char|peek-u8|port\?|positive\?|procedure\?|quotient|raise|raise-continuable|rational\?|rationalize|read-(?:bytevector|bytevector!|char|error\?|line|string|u8)|real\?|remainder|reverse|round|set-c[ad]r!|square|string(?:->list|->number|->symbol|->utf8|->vector|-append|-copy|-copy!|-fill!|-for-each|-length|-map|-ref|-set!|\?|<\?|<=\?|=\?|>\?|>=\?)?|substring|symbol(?:->string|\?|=\?)|syntax-error|textual-port\?|truncate(?:-quotient|-remainder|\/)?|u8-ready\?|utf8->string|values|vector(?:->list|->string|-append|-copy|-copy!|-fill!|-for-each|-length|-map|-ref|-set!|\?)?|with-exception-handler|write-(?:bytevector|char|string|u8)|zero\?)(?=[()\[\]\s]|$)/,lookbehind:!0},operator:{pattern:/((?:^|[^'`#])[(\[])(?:[-+*%/]|[<>]=?|=>?)(?=[()\[\]\s]|$)/,lookbehind:!0},number:{pattern:RegExp(r({"":/\d+(?:\/\d+)|(?:\d+(?:\.\d*)?|\.\d+)(?:[esfdl][+-]?\d+)?/.source,"":/[+-]?|[+-](?:inf|nan)\.0/.source,"":/[+-](?:|(?:inf|nan)\.0)?i/.source,"":/(?:@|)?|/.source,"":/(?:#d(?:#[ei])?|#[ei](?:#d)?)?/.source,"":/[0-9a-f]+(?:\/[0-9a-f]+)?/.source,"":/[+-]?|[+-](?:inf|nan)\.0/.source,"":/[+-](?:|(?:inf|nan)\.0)?i/.source,"":/(?:@|)?|/.source,"":/#[box](?:#[ei])?|(?:#[ei])?#[box]/.source,"":/(^|[()\[\]\s])(?:|)(?=[()\[\]\s]|$)/.source}),"i"),lookbehind:!0},boolean:{pattern:/(^|[()\[\]\s])#(?:[ft]|false|true)(?=[()\[\]\s]|$)/,lookbehind:!0},function:{pattern:/((?:^|[^'`#])[(\[])(?:[^|()\[\]'\s]+|\|(?:[^\\|]|\\.)*\|)(?=[()\[\]\s]|$)/,lookbehind:!0},identifier:{pattern:/(^|[()\[\]\s])\|(?:[^\\|]|\\.)*\|(?=[()\[\]\s]|$)/,lookbehind:!0,greedy:!0},punctuation:/[()\[\]']/};function r(a){for(var i in a)a[i]=a[i].replace(/<[\w\s]+>/g,function(o){return"(?:"+a[o].trim()+")"});return a[i]}})(t)}return _c}var Tc,dv;function eq(){if(dv)return Tc;dv=1;var e=Hm();Tc=t,t.displayName="lilypond",t.aliases=[];function t(n){n.register(e),function(r){for(var a=/\((?:[^();"#\\]|\\[\s\S]|;.*(?!.)|"(?:[^"\\]|\\.)*"|#(?:\{(?:(?!#\})[\s\S])*#\}|[^{])|)*\)/.source,i=5,o=0;o/g,function(){return a});a=a.replace(//g,/[^\s\S]/.source);var s=r.languages.lilypond={comment:/%(?:(?!\{).*|\{[\s\S]*?%\})/,"embedded-scheme":{pattern:RegExp(/(^|[=\s])#(?:"(?:[^"\\]|\\.)*"|[^\s()"]*(?:[^\s()]|))/.source.replace(//g,function(){return a}),"m"),lookbehind:!0,greedy:!0,inside:{scheme:{pattern:/^(#)[\s\S]+$/,lookbehind:!0,alias:"language-scheme",inside:{"embedded-lilypond":{pattern:/#\{[\s\S]*?#\}/,greedy:!0,inside:{punctuation:/^#\{|#\}$/,lilypond:{pattern:/[\s\S]+/,alias:"language-lilypond",inside:null}}},rest:r.languages.scheme}},punctuation:/#/}},string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0},"class-name":{pattern:/(\\new\s+)[\w-]+/,lookbehind:!0},keyword:{pattern:/\\[a-z][-\w]*/i,inside:{punctuation:/^\\/}},operator:/[=|]|<<|>>/,punctuation:{pattern:/(^|[a-z\d])(?:'+|,+|[_^]?-[_^]?(?:[-+^!>._]|(?=\d))|[_^]\.?|[.!])|[{}()[\]<>^~]|\\[()[\]<>\\!]|--|__/,lookbehind:!0},number:/\b\d+(?:\/\d+)?\b/};s["embedded-scheme"].inside.scheme.inside["embedded-lilypond"].inside.lilypond.inside=s,r.languages.ly=s}(n)}return Tc}var Ac,pv;function tq(){if(pv)return Ac;pv=1;var e=nt();Ac=t,t.displayName="liquid",t.aliases=[];function t(n){n.register(e),n.languages.liquid={comment:{pattern:/(^\{%\s*comment\s*%\})[\s\S]+(?=\{%\s*endcomment\s*%\}$)/,lookbehind:!0},delimiter:{pattern:/^\{(?:\{\{|[%\{])-?|-?(?:\}\}|[%\}])\}$/,alias:"punctuation"},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},keyword:/\b(?:as|assign|break|(?:end)?(?:capture|case|comment|for|form|if|paginate|raw|style|tablerow|unless)|continue|cycle|decrement|echo|else|elsif|in|include|increment|limit|liquid|offset|range|render|reversed|section|when|with)\b/,object:/\b(?:address|all_country_option_tags|article|block|blog|cart|checkout|collection|color|country|country_option_tags|currency|current_page|current_tags|customer|customer_address|date|discount_allocation|discount_application|external_video|filter|filter_value|font|forloop|fulfillment|generic_file|gift_card|group|handle|image|line_item|link|linklist|localization|location|measurement|media|metafield|model|model_source|order|page|page_description|page_image|page_title|part|policy|product|product_option|recommendations|request|robots|routes|rule|script|search|selling_plan|selling_plan_allocation|selling_plan_group|shipping_method|shop|shop_locale|sitemap|store_availability|tax_line|template|theme|transaction|unit_price_measurement|user_agent|variant|video|video_source)\b/,function:[{pattern:/(\|\s*)\w+/,lookbehind:!0,alias:"filter"},{pattern:/(\.\s*)(?:first|last|size)/,lookbehind:!0}],boolean:/\b(?:false|nil|true)\b/,range:{pattern:/\.\./,alias:"operator"},number:/\b\d+(?:\.\d+)?\b/,operator:/[!=]=|<>|[<>]=?|[|?:=-]|\b(?:and|contains(?=\s)|or)\b/,punctuation:/[.,\[\]()]/,empty:{pattern:/\bempty\b/,alias:"keyword"}},n.hooks.add("before-tokenize",function(r){var a=/\{%\s*comment\s*%\}[\s\S]*?\{%\s*endcomment\s*%\}|\{(?:%[\s\S]*?%|\{\{[\s\S]*?\}\}|\{[\s\S]*?\})\}/g,i=!1;n.languages["markup-templating"].buildPlaceholders(r,"liquid",a,function(o){var s=/^\{%-?\s*(\w+)/.exec(o);if(s){var l=s[1];if(l==="raw"&&!i)return i=!0,!0;if(l==="endraw")return i=!1,!0}return!i})}),n.hooks.add("after-tokenize",function(r){n.languages["markup-templating"].tokenizePlaceholders(r,"liquid")})}return Ac}var Rc,fv;function nq(){if(fv)return Rc;fv=1,Rc=e,e.displayName="lisp",e.aliases=[];function e(t){(function(n){function r(y){return RegExp(/(\()/.source+"(?:"+y+")"+/(?=[\s\)])/.source)}function a(y){return RegExp(/([\s([])/.source+"(?:"+y+")"+/(?=[\s)])/.source)}var i=/(?!\d)[-+*/~!@$%^=<>{}\w]+/.source,o="&"+i,s="(\\()",l="(?=\\))",u="(?=\\s)",d=/(?:[^()]|\((?:[^()]|\((?:[^()]|\((?:[^()]|\((?:[^()]|\([^()]*\))*\))*\))*\))*\))*/.source,c={heading:{pattern:/;;;.*/,alias:["comment","title"]},comment:/;.*/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0,inside:{argument:/[-A-Z]+(?=[.,\s])/,symbol:RegExp("`"+i+"'")}},"quoted-symbol":{pattern:RegExp("#?'"+i),alias:["variable","symbol"]},"lisp-property":{pattern:RegExp(":"+i),alias:"property"},splice:{pattern:RegExp(",@?"+i),alias:["symbol","variable"]},keyword:[{pattern:RegExp(s+"(?:and|(?:cl-)?letf|cl-loop|cond|cons|error|if|(?:lexical-)?let\\*?|message|not|null|or|provide|require|setq|unless|use-package|when|while)"+u),lookbehind:!0},{pattern:RegExp(s+"(?:append|by|collect|concat|do|finally|for|in|return)"+u),lookbehind:!0}],declare:{pattern:r(/declare/.source),lookbehind:!0,alias:"keyword"},interactive:{pattern:r(/interactive/.source),lookbehind:!0,alias:"keyword"},boolean:{pattern:a(/nil|t/.source),lookbehind:!0},number:{pattern:a(/[-+]?\d+(?:\.\d*)?/.source),lookbehind:!0},defvar:{pattern:RegExp(s+"def(?:const|custom|group|var)\\s+"+i),lookbehind:!0,inside:{keyword:/^def[a-z]+/,variable:RegExp(i)}},defun:{pattern:RegExp(s+/(?:cl-)?(?:defmacro|defun\*?)\s+/.source+i+/\s+\(/.source+d+/\)/.source),lookbehind:!0,greedy:!0,inside:{keyword:/^(?:cl-)?def\S+/,arguments:null,function:{pattern:RegExp("(^\\s)"+i),lookbehind:!0},punctuation:/[()]/}},lambda:{pattern:RegExp(s+"lambda\\s+\\(\\s*(?:&?"+i+"(?:\\s+&?"+i+")*\\s*)?\\)"),lookbehind:!0,greedy:!0,inside:{keyword:/^lambda/,arguments:null,punctuation:/[()]/}},car:{pattern:RegExp(s+i),lookbehind:!0},punctuation:[/(?:['`,]?\(|[)\[\]])/,{pattern:/(\s)\.(?=\s)/,lookbehind:!0}]},f={"lisp-marker":RegExp(o),varform:{pattern:RegExp(/\(/.source+i+/\s+(?=\S)/.source+d+/\)/.source),inside:c},argument:{pattern:RegExp(/(^|[\s(])/.source+i),lookbehind:!0,alias:"variable"},rest:c},p="\\S+(?:\\s+\\S+)*",h={pattern:RegExp(s+d+l),lookbehind:!0,inside:{"rest-vars":{pattern:RegExp("&(?:body|rest)\\s+"+p),inside:f},"other-marker-vars":{pattern:RegExp("&(?:aux|optional)\\s+"+p),inside:f},keys:{pattern:RegExp("&key\\s+"+p+"(?:\\s+&allow-other-keys)?"),inside:f},argument:{pattern:RegExp(i),alias:"variable"},punctuation:/[()]/}};c.lambda.inside.arguments=h,c.defun.inside.arguments=n.util.clone(h),c.defun.inside.arguments.inside.sublist=h,n.languages.lisp=c,n.languages.elisp=c,n.languages.emacs=c,n.languages["emacs-lisp"]=c})(t)}return Rc}var Ic,gv;function rq(){if(gv)return Ic;gv=1,Ic=e,e.displayName="livescript",e.aliases=[];function e(t){t.languages.livescript={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\])#.*/,lookbehind:!0}],"interpolated-string":{pattern:/(^|[^"])("""|")(?:\\[\s\S]|(?!\2)[^\\])*\2(?!")/,lookbehind:!0,greedy:!0,inside:{variable:{pattern:/(^|[^\\])#[a-z_](?:-?[a-z]|[\d_])*/m,lookbehind:!0},interpolation:{pattern:/(^|[^\\])#\{[^}]+\}/m,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^#\{|\}$/,alias:"variable"}}},string:/[\s\S]+/}},string:[{pattern:/('''|')(?:\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0},{pattern:/<\[[\s\S]*?\]>/,greedy:!0},/\\[^\s,;\])}]+/],regex:[{pattern:/\/\/(?:\[[^\r\n\]]*\]|\\.|(?!\/\/)[^\\\[])+\/\/[gimyu]{0,5}/,greedy:!0,inside:{comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0}}},{pattern:/\/(?:\[[^\r\n\]]*\]|\\.|[^/\\\r\n\[])+\/[gimyu]{0,5}/,greedy:!0}],keyword:{pattern:/(^|(?!-).)\b(?:break|case|catch|class|const|continue|default|do|else|extends|fallthrough|finally|for(?: ever)?|function|if|implements|it|let|loop|new|null|otherwise|own|return|super|switch|that|then|this|throw|try|unless|until|var|void|when|while|yield)(?!-)\b/m,lookbehind:!0},"keyword-operator":{pattern:/(^|[^-])\b(?:(?:delete|require|typeof)!|(?:and|by|delete|export|from|import(?: all)?|in|instanceof|is(?: not|nt)?|not|of|or|til|to|typeof|with|xor)(?!-)\b)/m,lookbehind:!0,alias:"operator"},boolean:{pattern:/(^|[^-])\b(?:false|no|off|on|true|yes)(?!-)\b/m,lookbehind:!0},argument:{pattern:/(^|(?!\.&\.)[^&])&(?!&)\d*/m,lookbehind:!0,alias:"variable"},number:/\b(?:\d+~[\da-z]+|\d[\d_]*(?:\.\d[\d_]*)?(?:[a-z]\w*)?)/i,identifier:/[a-z_](?:-?[a-z]|[\d_])*/i,operator:[{pattern:/( )\.(?= )/,lookbehind:!0},/\.(?:[=~]|\.\.?)|\.(?:[&|^]|<<|>>>?)\.|:(?:=|:=?)|&&|\|[|>]|<(?:<[>=?]?|-(?:->?|>)?|\+\+?|@@?|%%?|\*\*?|!(?:~?=|--?>|~?~>)?|~(?:~?>|=)?|==?|\^\^?|[\/?]/],punctuation:/[(){}\[\]|.,:;`]/},t.languages.livescript["interpolated-string"].inside.interpolation.inside.rest=t.languages.livescript}return Ic}var Cc,mv;function aq(){if(mv)return Cc;mv=1,Cc=e,e.displayName="llvm",e.aliases=[];function e(t){(function(n){n.languages.llvm={comment:/;.*/,string:{pattern:/"[^"]*"/,greedy:!0},boolean:/\b(?:false|true)\b/,variable:/[%@!#](?:(?!\d)(?:[-$.\w]|\\[a-f\d]{2})+|\d+)/i,label:/(?!\d)(?:[-$.\w]|\\[a-f\d]{2})+:/i,type:{pattern:/\b(?:double|float|fp128|half|i[1-9]\d*|label|metadata|ppc_fp128|token|void|x86_fp80|x86_mmx)\b/,alias:"class-name"},keyword:/\b[a-z_][a-z_0-9]*\b/,number:/[+-]?\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b|\b0x[\dA-Fa-f]+\b|\b0xK[\dA-Fa-f]{20}\b|\b0x[ML][\dA-Fa-f]{32}\b|\b0xH[\dA-Fa-f]{4}\b/,punctuation:/[{}[\];(),.!*=<>]/}})(t)}return Cc}var Nc,hv;function iq(){if(hv)return Nc;hv=1,Nc=e,e.displayName="log",e.aliases=[];function e(t){t.languages.log={string:{pattern:/"(?:[^"\\\r\n]|\\.)*"|'(?![st] | \w)(?:[^'\\\r\n]|\\.)*'/,greedy:!0},exception:{pattern:/(^|[^\w.])[a-z][\w.]*(?:Error|Exception):.*(?:(?:\r\n?|\n)[ \t]*(?:at[ \t].+|\.{3}.*|Caused by:.*))+(?:(?:\r\n?|\n)[ \t]*\.\.\. .*)?/,lookbehind:!0,greedy:!0,alias:["javastacktrace","language-javastacktrace"],inside:t.languages.javastacktrace||{keyword:/\bat\b/,function:/[a-z_][\w$]*(?=\()/,punctuation:/[.:()]/}},level:[{pattern:/\b(?:ALERT|CRIT|CRITICAL|EMERG|EMERGENCY|ERR|ERROR|FAILURE|FATAL|SEVERE)\b/,alias:["error","important"]},{pattern:/\b(?:WARN|WARNING|WRN)\b/,alias:["warning","important"]},{pattern:/\b(?:DISPLAY|INF|INFO|NOTICE|STATUS)\b/,alias:["info","keyword"]},{pattern:/\b(?:DBG|DEBUG|FINE)\b/,alias:["debug","keyword"]},{pattern:/\b(?:FINER|FINEST|TRACE|TRC|VERBOSE|VRB)\b/,alias:["trace","comment"]}],property:{pattern:/((?:^|[\]|])[ \t]*)[a-z_](?:[\w-]|\b\/\b)*(?:[. ]\(?\w(?:[\w-]|\b\/\b)*\)?)*:(?=\s)/im,lookbehind:!0},separator:{pattern:/(^|[^-+])-{3,}|={3,}|\*{3,}|- - /m,lookbehind:!0,alias:"comment"},url:/\b(?:file|ftp|https?):\/\/[^\s|,;'"]*[^\s|,;'">.]/,email:{pattern:/(^|\s)[-\w+.]+@[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)+(?=\s)/,lookbehind:!0,alias:"url"},"ip-address":{pattern:/\b(?:\d{1,3}(?:\.\d{1,3}){3})\b/,alias:"constant"},"mac-address":{pattern:/\b[a-f0-9]{2}(?::[a-f0-9]{2}){5}\b/i,alias:"constant"},domain:{pattern:/(^|\s)[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)*\.[a-z][a-z0-9-]+(?=\s)/,lookbehind:!0,alias:"constant"},uuid:{pattern:/\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/i,alias:"constant"},hash:{pattern:/\b(?:[a-f0-9]{32}){1,2}\b/i,alias:"constant"},"file-path":{pattern:/\b[a-z]:[\\/][^\s|,;:(){}\[\]"']+|(^|[\s:\[\](>|])\.{0,2}\/\w[^\s|,;:(){}\[\]"']*/i,lookbehind:!0,greedy:!0,alias:"string"},date:{pattern:RegExp(/\b\d{4}[-/]\d{2}[-/]\d{2}(?:T(?=\d{1,2}:)|(?=\s\d{1,2}:))/.source+"|"+/\b\d{1,4}[-/ ](?:\d{1,2}|Apr|Aug|Dec|Feb|Jan|Jul|Jun|Mar|May|Nov|Oct|Sep)[-/ ]\d{2,4}T?\b/.source+"|"+/\b(?:(?:Fri|Mon|Sat|Sun|Thu|Tue|Wed)(?:\s{1,2}(?:Apr|Aug|Dec|Feb|Jan|Jul|Jun|Mar|May|Nov|Oct|Sep))?|Apr|Aug|Dec|Feb|Jan|Jul|Jun|Mar|May|Nov|Oct|Sep)\s{1,2}\d{1,2}\b/.source,"i"),alias:"number"},time:{pattern:/\b\d{1,2}:\d{1,2}:\d{1,2}(?:[.,:]\d+)?(?:\s?[+-]\d{2}:?\d{2}|Z)?\b/,alias:"number"},boolean:/\b(?:false|null|true)\b/i,number:{pattern:/(^|[^.\w])(?:0x[a-f0-9]+|0o[0-7]+|0b[01]+|v?\d[\da-f]*(?:\.\d+)*(?:e[+-]?\d+)?[a-z]{0,3}\b)\b(?!\.\w)/i,lookbehind:!0},operator:/[;:?<=>~/@!$%&+\-|^(){}*#]/,punctuation:/[\[\].,]/}}return Nc}var xc,bv;function oq(){if(bv)return xc;bv=1,xc=e,e.displayName="lolcode",e.aliases=[];function e(t){t.languages.lolcode={comment:[/\bOBTW\s[\s\S]*?\sTLDR\b/,/\bBTW.+/],string:{pattern:/"(?::.|[^":])*"/,inside:{variable:/:\{[^}]+\}/,symbol:[/:\([a-f\d]+\)/i,/:\[[^\]]+\]/,/:[)>o":]/]},greedy:!0},number:/(?:\B-)?(?:\b\d+(?:\.\d*)?|\B\.\d+)/,symbol:{pattern:/(^|\s)(?:A )?(?:BUKKIT|NOOB|NUMBAR|NUMBR|TROOF|YARN)(?=\s|,|$)/,lookbehind:!0,inside:{keyword:/A(?=\s)/}},label:{pattern:/((?:^|\s)(?:IM IN YR|IM OUTTA YR) )[a-zA-Z]\w*/,lookbehind:!0,alias:"string"},function:{pattern:/((?:^|\s)(?:HOW IZ I|I IZ|IZ) )[a-zA-Z]\w*/,lookbehind:!0},keyword:[{pattern:/(^|\s)(?:AN|FOUND YR|GIMMEH|GTFO|HAI|HAS A|HOW IZ I|I HAS A|I IZ|IF U SAY SO|IM IN YR|IM OUTTA YR|IS NOW(?: A)?|ITZ(?: A)?|IZ|KTHX|KTHXBYE|LIEK(?: A)?|MAEK|MEBBE|MKAY|NERFIN|NO WAI|O HAI IM|O RLY\?|OIC|OMG|OMGWTF|R|SMOOSH|SRS|TIL|UPPIN|VISIBLE|WILE|WTF\?|YA RLY|YR)(?=\s|,|$)/,lookbehind:!0},/'Z(?=\s|,|$)/],boolean:{pattern:/(^|\s)(?:FAIL|WIN)(?=\s|,|$)/,lookbehind:!0},variable:{pattern:/(^|\s)IT(?=\s|,|$)/,lookbehind:!0},operator:{pattern:/(^|\s)(?:NOT|BOTH SAEM|DIFFRINT|(?:ALL|ANY|BIGGR|BOTH|DIFF|EITHER|MOD|PRODUKT|QUOSHUNT|SMALLR|SUM|WON) OF)(?=\s|,|$)/,lookbehind:!0},punctuation:/\.{3}|…|,|!/}}return xc}var Oc,yv;function sq(){if(yv)return Oc;yv=1,Oc=e,e.displayName="magma",e.aliases=[];function e(t){t.languages.magma={output:{pattern:/^(>.*(?:\r(?:\n|(?!\n))|\n))(?!>)(?:.+|(?:\r(?:\n|(?!\n))|\n)(?!>).*)(?:(?:\r(?:\n|(?!\n))|\n)(?!>).*)*/m,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?\*\//,greedy:!0},string:{pattern:/(^|[^\\"])"(?:[^\r\n\\"]|\\.)*"/,lookbehind:!0,greedy:!0},keyword:/\b(?:_|adj|and|assert|assert2|assert3|assigned|break|by|case|cat|catch|clear|cmpeq|cmpne|continue|declare|default|delete|diff|div|do|elif|else|end|eq|error|eval|exists|exit|for|forall|forward|fprintf|freeze|function|ge|gt|if|iload|import|in|intrinsic|is|join|le|load|local|lt|meet|mod|ne|not|notadj|notin|notsubset|or|print|printf|procedure|quit|random|read|readi|repeat|require|requirege|requirerange|restore|return|save|sdiff|select|subset|then|time|to|try|until|vprint|vprintf|vtime|when|where|while|xor)\b/,boolean:/\b(?:false|true)\b/,generator:{pattern:/\b[a-z_]\w*(?=\s*<)/i,alias:"class-name"},function:/\b[a-z_]\w*(?=\s*\()/i,number:{pattern:/(^|[^\w.]|\.\.)(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?(?:_[a-z]?)?(?=$|[^\w.]|\.\.)/,lookbehind:!0},operator:/->|[-+*/^~!|#=]|:=|\.\./,punctuation:/[()[\]{}<>,;.:]/}}return Oc}var Lc,Ev;function lq(){if(Ev)return Lc;Ev=1,Lc=e,e.displayName="makefile",e.aliases=[];function e(t){t.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/}}return Lc}var Dc,Sv;function uq(){if(Sv)return Dc;Sv=1,Dc=e,e.displayName="markdown",e.aliases=["md"];function e(t){(function(n){var r=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function a(f){return f=f.replace(//g,function(){return r}),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+f+")")}var i=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,function(){return i}),s=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;n.languages.markdown=n.languages.extend("markup",{}),n.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:n.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+s+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+s+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(i),inside:n.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+s+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(i),alias:"important",inside:n.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:a(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:a(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:a(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:a(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach(function(f){["url","bold","italic","strike","code-snippet"].forEach(function(p){f!==p&&(n.languages.markdown[f].inside.content.inside[p]=n.languages.markdown[p])})}),n.hooks.add("after-tokenize",function(f){if(f.language!=="markdown"&&f.language!=="md")return;function p(h){if(!(!h||typeof h=="string"))for(var y=0,T=h.length;y",quot:'"'},d=String.fromCodePoint||String.fromCharCode;function c(f){var p=f.replace(l,"");return p=p.replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,function(h,y){if(y=y.toLowerCase(),y[0]==="#"){var T;return y[1]==="x"?T=parseInt(y.slice(2),16):T=Number(y.slice(1)),d(T)}else{var b=u[y];return b||h}}),p}n.languages.md=n.languages.markdown})(t)}return Dc}var Mc,vv;function cq(){if(vv)return Mc;vv=1,Mc=e,e.displayName="matlab",e.aliases=[];function e(t){t.languages.matlab={comment:[/%\{[\s\S]*?\}%/,/%.+/],string:{pattern:/\B'(?:''|[^'\r\n])*'/,greedy:!0},number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[eE][+-]?\d+)?(?:[ij])?|\b[ij]\b/,keyword:/\b(?:NaN|break|case|catch|continue|else|elseif|end|for|function|if|inf|otherwise|parfor|pause|pi|return|switch|try|while)\b/,function:/\b(?!\d)\w+(?=\s*\()/,operator:/\.?[*^\/\\']|[+\-:@]|[<>=~]=?|&&?|\|\|?/,punctuation:/\.{3}|[.,;\[\](){}!]/}}return Mc}var Fc,kv;function dq(){if(kv)return Fc;kv=1,Fc=e,e.displayName="maxscript",e.aliases=[];function e(t){(function(n){var r=/\b(?:about|and|animate|as|at|attributes|by|case|catch|collect|continue|coordsys|do|else|exit|fn|for|from|function|global|if|in|local|macroscript|mapped|max|not|of|off|on|or|parameters|persistent|plugin|rcmenu|return|rollout|set|struct|then|throw|to|tool|try|undo|utility|when|where|while|with)\b/i;n.languages.maxscript={comment:{pattern:/\/\*[\s\S]*?(?:\*\/|$)|--.*/,greedy:!0},string:{pattern:/(^|[^"\\@])(?:"(?:[^"\\]|\\[\s\S])*"|@"[^"]*")/,lookbehind:!0,greedy:!0},path:{pattern:/\$(?:[\w/\\.*?]|'[^']*')*/,greedy:!0,alias:"string"},"function-call":{pattern:RegExp("((?:"+(/^/.source+"|"+/[;=<>+\-*/^({\[]/.source+"|"+/\b(?:and|by|case|catch|collect|do|else|if|in|not|or|return|then|to|try|where|while|with)\b/.source)+")[ ]*)(?!"+r.source+")"+/[a-z_]\w*\b/.source+"(?=[ ]*(?:"+("(?!"+r.source+")"+/[a-z_]/.source+"|"+/\d|-\.?\d/.source+"|"+/[({'"$@#?]/.source)+"))","im"),lookbehind:!0,greedy:!0,alias:"function"},"function-definition":{pattern:/(\b(?:fn|function)\s+)\w+\b/i,lookbehind:!0,alias:"function"},argument:{pattern:/\b[a-z_]\w*(?=:)/i,alias:"attr-name"},keyword:r,boolean:/\b(?:false|true)\b/,time:{pattern:/(^|[^\w.])(?:(?:(?:\d+(?:\.\d*)?|\.\d+)(?:[eEdD][+-]\d+|[LP])?[msft])+|\d+:\d+(?:\.\d*)?)(?![\w.:])/,lookbehind:!0,alias:"number"},number:[{pattern:/(^|[^\w.])(?:(?:\d+(?:\.\d*)?|\.\d+)(?:[eEdD][+-]\d+|[LP])?|0x[a-fA-F0-9]+)(?![\w.:])/,lookbehind:!0},/\b(?:e|pi)\b/],constant:/\b(?:dontcollect|ok|silentValue|undefined|unsupplied)\b/,color:{pattern:/\b(?:black|blue|brown|gray|green|orange|red|white|yellow)\b/i,alias:"constant"},operator:/[-+*/<>=!]=?|[&^?]|#(?!\()/,punctuation:/[()\[\]{}.:,;]|#(?=\()|\\$/m}})(t)}return Fc}var Pc,wv;function pq(){if(wv)return Pc;wv=1,Pc=e,e.displayName="mel",e.aliases=[];function e(t){t.languages.mel={comment:/\/\/.*/,code:{pattern:/`(?:\\.|[^\\`\r\n])*`/,greedy:!0,alias:"italic",inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"}}},string:{pattern:/"(?:\\.|[^\\"\r\n])*"/,greedy:!0},variable:/\$\w+/,number:/\b0x[\da-fA-F]+\b|\b\d+(?:\.\d*)?|\B\.\d+/,flag:{pattern:/-[^\d\W]\w*/,alias:"operator"},keyword:/\b(?:break|case|continue|default|do|else|float|for|global|if|in|int|matrix|proc|return|string|switch|vector|while)\b/,function:/\b\w+(?=\()|\b(?:CBG|HfAddAttractorToAS|HfAssignAS|HfBuildEqualMap|HfBuildFurFiles|HfBuildFurImages|HfCancelAFR|HfConnectASToHF|HfCreateAttractor|HfDeleteAS|HfEditAS|HfPerformCreateAS|HfRemoveAttractorFromAS|HfSelectAttached|HfSelectAttractors|HfUnAssignAS|Mayatomr|about|abs|addAttr|addAttributeEditorNodeHelp|addDynamic|addNewShelfTab|addPP|addPanelCategory|addPrefixToName|advanceToNextDrivenKey|affectedNet|affects|aimConstraint|air|alias|aliasAttr|align|alignCtx|alignCurve|alignSurface|allViewFit|ambientLight|angle|angleBetween|animCone|animCurveEditor|animDisplay|animView|annotate|appendStringArray|applicationName|applyAttrPreset|applyTake|arcLenDimContext|arcLengthDimension|arclen|arrayMapper|art3dPaintCtx|artAttrCtx|artAttrPaintVertexCtx|artAttrSkinPaintCtx|artAttrTool|artBuildPaintMenu|artFluidAttrCtx|artPuttyCtx|artSelectCtx|artSetPaintCtx|artUserPaintCtx|assignCommand|assignInputDevice|assignViewportFactories|attachCurve|attachDeviceAttr|attachSurface|attrColorSliderGrp|attrCompatibility|attrControlGrp|attrEnumOptionMenu|attrEnumOptionMenuGrp|attrFieldGrp|attrFieldSliderGrp|attrNavigationControlGrp|attrPresetEditWin|attributeExists|attributeInfo|attributeMenu|attributeQuery|autoKeyframe|autoPlace|bakeClip|bakeFluidShading|bakePartialHistory|bakeResults|bakeSimulation|basename|basenameEx|batchRender|bessel|bevel|bevelPlus|binMembership|bindSkin|blend2|blendShape|blendShapeEditor|blendShapePanel|blendTwoAttr|blindDataType|boneLattice|boundary|boxDollyCtx|boxZoomCtx|bufferCurve|buildBookmarkMenu|buildKeyframeMenu|button|buttonManip|cacheFile|cacheFileCombine|cacheFileMerge|cacheFileTrack|camera|cameraView|canCreateManip|canvas|capitalizeString|catch|catchQuiet|ceil|changeSubdivComponentDisplayLevel|changeSubdivRegion|channelBox|character|characterMap|characterOutlineEditor|characterize|chdir|checkBox|checkBoxGrp|checkDefaultRenderGlobals|choice|circle|circularFillet|clamp|clear|clearCache|clip|clipEditor|clipEditorCurrentTimeCtx|clipSchedule|clipSchedulerOutliner|clipTrimBefore|closeCurve|closeSurface|cluster|cmdFileOutput|cmdScrollFieldExecuter|cmdScrollFieldReporter|cmdShell|coarsenSubdivSelectionList|collision|color|colorAtPoint|colorEditor|colorIndex|colorIndexSliderGrp|colorSliderButtonGrp|colorSliderGrp|columnLayout|commandEcho|commandLine|commandPort|compactHairSystem|componentEditor|compositingInterop|computePolysetVolume|condition|cone|confirmDialog|connectAttr|connectControl|connectDynamic|connectJoint|connectionInfo|constrain|constrainValue|constructionHistory|container|containsMultibyte|contextInfo|control|convertFromOldLayers|convertIffToPsd|convertLightmap|convertSolidTx|convertTessellation|convertUnit|copyArray|copyFlexor|copyKey|copySkinWeights|cos|cpButton|cpCache|cpClothSet|cpCollision|cpConstraint|cpConvClothToMesh|cpForces|cpGetSolverAttr|cpPanel|cpProperty|cpRigidCollisionFilter|cpSeam|cpSetEdit|cpSetSolverAttr|cpSolver|cpSolverTypes|cpTool|cpUpdateClothUVs|createDisplayLayer|createDrawCtx|createEditor|createLayeredPsdFile|createMotionField|createNewShelf|createNode|createRenderLayer|createSubdivRegion|cross|crossProduct|ctxAbort|ctxCompletion|ctxEditMode|ctxTraverse|currentCtx|currentTime|currentTimeCtx|currentUnit|curve|curveAddPtCtx|curveCVCtx|curveEPCtx|curveEditorCtx|curveIntersect|curveMoveEPCtx|curveOnSurface|curveSketchCtx|cutKey|cycleCheck|cylinder|dagPose|date|defaultLightListCheckBox|defaultNavigation|defineDataServer|defineVirtualDevice|deformer|deg_to_rad|delete|deleteAttr|deleteShadingGroupsAndMaterials|deleteShelfTab|deleteUI|deleteUnusedBrushes|delrandstr|detachCurve|detachDeviceAttr|detachSurface|deviceEditor|devicePanel|dgInfo|dgdirty|dgeval|dgtimer|dimWhen|directKeyCtx|directionalLight|dirmap|dirname|disable|disconnectAttr|disconnectJoint|diskCache|displacementToPoly|displayAffected|displayColor|displayCull|displayLevelOfDetail|displayPref|displayRGBColor|displaySmoothness|displayStats|displayString|displaySurface|distanceDimContext|distanceDimension|doBlur|dolly|dollyCtx|dopeSheetEditor|dot|dotProduct|doubleProfileBirailSurface|drag|dragAttrContext|draggerContext|dropoffLocator|duplicate|duplicateCurve|duplicateSurface|dynCache|dynControl|dynExport|dynExpression|dynGlobals|dynPaintEditor|dynParticleCtx|dynPref|dynRelEdPanel|dynRelEditor|dynamicLoad|editAttrLimits|editDisplayLayerGlobals|editDisplayLayerMembers|editRenderLayerAdjustment|editRenderLayerGlobals|editRenderLayerMembers|editor|editorTemplate|effector|emit|emitter|enableDevice|encodeString|endString|endsWith|env|equivalent|equivalentTol|erf|error|eval|evalDeferred|evalEcho|event|exactWorldBoundingBox|exclusiveLightCheckBox|exec|executeForEachObject|exists|exp|expression|expressionEditorListen|extendCurve|extendSurface|extrude|fcheck|fclose|feof|fflush|fgetline|fgetword|file|fileBrowserDialog|fileDialog|fileExtension|fileInfo|filetest|filletCurve|filter|filterCurve|filterExpand|filterStudioImport|findAllIntersections|findAnimCurves|findKeyframe|findMenuItem|findRelatedSkinCluster|finder|firstParentOf|fitBspline|flexor|floatEq|floatField|floatFieldGrp|floatScrollBar|floatSlider|floatSlider2|floatSliderButtonGrp|floatSliderGrp|floor|flow|fluidCacheInfo|fluidEmitter|fluidVoxelInfo|flushUndo|fmod|fontDialog|fopen|formLayout|format|fprint|frameLayout|fread|freeFormFillet|frewind|fromNativePath|fwrite|gamma|gauss|geometryConstraint|getApplicationVersionAsFloat|getAttr|getClassification|getDefaultBrush|getFileList|getFluidAttr|getInputDeviceRange|getMayaPanelTypes|getModifiers|getPanel|getParticleAttr|getPluginResource|getenv|getpid|glRender|glRenderEditor|globalStitch|gmatch|goal|gotoBindPose|grabColor|gradientControl|gradientControlNoAttr|graphDollyCtx|graphSelectContext|graphTrackCtx|gravity|grid|gridLayout|group|groupObjectsByName|hardenPointCurve|hardware|hardwareRenderPanel|headsUpDisplay|headsUpMessage|help|helpLine|hermite|hide|hilite|hitTest|hotBox|hotkey|hotkeyCheck|hsv_to_rgb|hudButton|hudSlider|hudSliderButton|hwReflectionMap|hwRender|hwRenderLoad|hyperGraph|hyperPanel|hyperShade|hypot|iconTextButton|iconTextCheckBox|iconTextRadioButton|iconTextRadioCollection|iconTextScrollList|iconTextStaticLabel|ikHandle|ikHandleCtx|ikHandleDisplayScale|ikSolver|ikSplineHandleCtx|ikSystem|ikSystemInfo|ikfkDisplayMethod|illustratorCurves|image|imfPlugins|inheritTransform|insertJoint|insertJointCtx|insertKeyCtx|insertKnotCurve|insertKnotSurface|instance|instanceable|instancer|intField|intFieldGrp|intScrollBar|intSlider|intSliderGrp|interToUI|internalVar|intersect|iprEngine|isAnimCurve|isConnected|isDirty|isParentOf|isSameObject|isTrue|isValidObjectName|isValidString|isValidUiName|isolateSelect|itemFilter|itemFilterAttr|itemFilterRender|itemFilterType|joint|jointCluster|jointCtx|jointDisplayScale|jointLattice|keyTangent|keyframe|keyframeOutliner|keyframeRegionCurrentTimeCtx|keyframeRegionDirectKeyCtx|keyframeRegionDollyCtx|keyframeRegionInsertKeyCtx|keyframeRegionMoveKeyCtx|keyframeRegionScaleKeyCtx|keyframeRegionSelectKeyCtx|keyframeRegionSetKeyCtx|keyframeRegionTrackCtx|keyframeStats|lassoContext|lattice|latticeDeformKeyCtx|launch|launchImageEditor|layerButton|layeredShaderPort|layeredTexturePort|layout|layoutDialog|lightList|lightListEditor|lightListPanel|lightlink|lineIntersection|linearPrecision|linstep|listAnimatable|listAttr|listCameras|listConnections|listDeviceAttachments|listHistory|listInputDeviceAxes|listInputDeviceButtons|listInputDevices|listMenuAnnotation|listNodeTypes|listPanelCategories|listRelatives|listSets|listTransforms|listUnselected|listerEditor|loadFluid|loadNewShelf|loadPlugin|loadPluginLanguageResources|loadPrefObjects|localizedPanelLabel|lockNode|loft|log|longNameOf|lookThru|ls|lsThroughFilter|lsType|lsUI|mag|makeIdentity|makeLive|makePaintable|makeRoll|makeSingleSurface|makeTubeOn|makebot|manipMoveContext|manipMoveLimitsCtx|manipOptions|manipRotateContext|manipRotateLimitsCtx|manipScaleContext|manipScaleLimitsCtx|marker|match|max|memory|menu|menuBarLayout|menuEditor|menuItem|menuItemToShelf|menuSet|menuSetPref|messageLine|min|minimizeApp|mirrorJoint|modelCurrentTimeCtx|modelEditor|modelPanel|mouse|movIn|movOut|move|moveIKtoFK|moveKeyCtx|moveVertexAlongDirection|multiProfileBirailSurface|mute|nParticle|nameCommand|nameField|namespace|namespaceInfo|newPanelItems|newton|nodeCast|nodeIconButton|nodeOutliner|nodePreset|nodeType|noise|nonLinear|normalConstraint|normalize|nurbsBoolean|nurbsCopyUVSet|nurbsCube|nurbsEditUV|nurbsPlane|nurbsSelect|nurbsSquare|nurbsToPoly|nurbsToPolygonsPref|nurbsToSubdiv|nurbsToSubdivPref|nurbsUVSet|nurbsViewDirectionVector|objExists|objectCenter|objectLayer|objectType|objectTypeUI|obsoleteProc|oceanNurbsPreviewPlane|offsetCurve|offsetCurveOnSurface|offsetSurface|openGLExtension|openMayaPref|optionMenu|optionMenuGrp|optionVar|orbit|orbitCtx|orientConstraint|outlinerEditor|outlinerPanel|overrideModifier|paintEffectsDisplay|pairBlend|palettePort|paneLayout|panel|panelConfiguration|panelHistory|paramDimContext|paramDimension|paramLocator|parent|parentConstraint|particle|particleExists|particleInstancer|particleRenderInfo|partition|pasteKey|pathAnimation|pause|pclose|percent|performanceOptions|pfxstrokes|pickWalk|picture|pixelMove|planarSrf|plane|play|playbackOptions|playblast|plugAttr|plugNode|pluginInfo|pluginResourceUtil|pointConstraint|pointCurveConstraint|pointLight|pointMatrixMult|pointOnCurve|pointOnSurface|pointPosition|poleVectorConstraint|polyAppend|polyAppendFacetCtx|polyAppendVertex|polyAutoProjection|polyAverageNormal|polyAverageVertex|polyBevel|polyBlendColor|polyBlindData|polyBoolOp|polyBridgeEdge|polyCacheMonitor|polyCheck|polyChipOff|polyClipboard|polyCloseBorder|polyCollapseEdge|polyCollapseFacet|polyColorBlindData|polyColorDel|polyColorPerVertex|polyColorSet|polyCompare|polyCone|polyCopyUV|polyCrease|polyCreaseCtx|polyCreateFacet|polyCreateFacetCtx|polyCube|polyCut|polyCutCtx|polyCylinder|polyCylindricalProjection|polyDelEdge|polyDelFacet|polyDelVertex|polyDuplicateAndConnect|polyDuplicateEdge|polyEditUV|polyEditUVShell|polyEvaluate|polyExtrudeEdge|polyExtrudeFacet|polyExtrudeVertex|polyFlipEdge|polyFlipUV|polyForceUV|polyGeoSampler|polyHelix|polyInfo|polyInstallAction|polyLayoutUV|polyListComponentConversion|polyMapCut|polyMapDel|polyMapSew|polyMapSewMove|polyMergeEdge|polyMergeEdgeCtx|polyMergeFacet|polyMergeFacetCtx|polyMergeUV|polyMergeVertex|polyMirrorFace|polyMoveEdge|polyMoveFacet|polyMoveFacetUV|polyMoveUV|polyMoveVertex|polyNormal|polyNormalPerVertex|polyNormalizeUV|polyOptUvs|polyOptions|polyOutput|polyPipe|polyPlanarProjection|polyPlane|polyPlatonicSolid|polyPoke|polyPrimitive|polyPrism|polyProjection|polyPyramid|polyQuad|polyQueryBlindData|polyReduce|polySelect|polySelectConstraint|polySelectConstraintMonitor|polySelectCtx|polySelectEditCtx|polySeparate|polySetToFaceNormal|polySewEdge|polyShortestPathCtx|polySmooth|polySoftEdge|polySphere|polySphericalProjection|polySplit|polySplitCtx|polySplitEdge|polySplitRing|polySplitVertex|polyStraightenUVBorder|polySubdivideEdge|polySubdivideFacet|polyToSubdiv|polyTorus|polyTransfer|polyTriangulate|polyUVSet|polyUnite|polyWedgeFace|popen|popupMenu|pose|pow|preloadRefEd|print|progressBar|progressWindow|projFileViewer|projectCurve|projectTangent|projectionContext|projectionManip|promptDialog|propModCtx|propMove|psdChannelOutliner|psdEditTextureFile|psdExport|psdTextureFile|putenv|pwd|python|querySubdiv|quit|rad_to_deg|radial|radioButton|radioButtonGrp|radioCollection|radioMenuItemCollection|rampColorPort|rand|randomizeFollicles|randstate|rangeControl|readTake|rebuildCurve|rebuildSurface|recordAttr|recordDevice|redo|reference|referenceEdit|referenceQuery|refineSubdivSelectionList|refresh|refreshAE|registerPluginResource|rehash|reloadImage|removeJoint|removeMultiInstance|removePanelCategory|rename|renameAttr|renameSelectionList|renameUI|render|renderGlobalsNode|renderInfo|renderLayerButton|renderLayerParent|renderLayerPostProcess|renderLayerUnparent|renderManip|renderPartition|renderQualityNode|renderSettings|renderThumbnailUpdate|renderWindowEditor|renderWindowSelectContext|renderer|reorder|reorderDeformers|requires|reroot|resampleFluid|resetAE|resetPfxToPolyCamera|resetTool|resolutionNode|retarget|reverseCurve|reverseSurface|revolve|rgb_to_hsv|rigidBody|rigidSolver|roll|rollCtx|rootOf|rot|rotate|rotationInterpolation|roundConstantRadius|rowColumnLayout|rowLayout|runTimeCommand|runup|sampleImage|saveAllShelves|saveAttrPreset|saveFluid|saveImage|saveInitialState|saveMenu|savePrefObjects|savePrefs|saveShelf|saveToolSettings|scale|scaleBrushBrightness|scaleComponents|scaleConstraint|scaleKey|scaleKeyCtx|sceneEditor|sceneUIReplacement|scmh|scriptCtx|scriptEditorInfo|scriptJob|scriptNode|scriptTable|scriptToShelf|scriptedPanel|scriptedPanelType|scrollField|scrollLayout|sculpt|searchPathArray|seed|selLoadSettings|select|selectContext|selectCurveCV|selectKey|selectKeyCtx|selectKeyframeRegionCtx|selectMode|selectPref|selectPriority|selectType|selectedNodes|selectionConnection|separator|setAttr|setAttrEnumResource|setAttrMapping|setAttrNiceNameResource|setConstraintRestPosition|setDefaultShadingGroup|setDrivenKeyframe|setDynamic|setEditCtx|setEditor|setFluidAttr|setFocus|setInfinity|setInputDeviceMapping|setKeyCtx|setKeyPath|setKeyframe|setKeyframeBlendshapeTargetWts|setMenuMode|setNodeNiceNameResource|setNodeTypeFlag|setParent|setParticleAttr|setPfxToPolyCamera|setPluginResource|setProject|setStampDensity|setStartupMessage|setState|setToolTo|setUITemplate|setXformManip|sets|shadingConnection|shadingGeometryRelCtx|shadingLightRelCtx|shadingNetworkCompare|shadingNode|shapeCompare|shelfButton|shelfLayout|shelfTabLayout|shellField|shortNameOf|showHelp|showHidden|showManipCtx|showSelectionInTitle|showShadingGroupAttrEditor|showWindow|sign|simplify|sin|singleProfileBirailSurface|size|sizeBytes|skinCluster|skinPercent|smoothCurve|smoothTangentSurface|smoothstep|snap2to2|snapKey|snapMode|snapTogetherCtx|snapshot|soft|softMod|softModCtx|sort|sound|soundControl|source|spaceLocator|sphere|sphrand|spotLight|spotLightPreviewPort|spreadSheetEditor|spring|sqrt|squareSurface|srtContext|stackTrace|startString|startsWith|stitchAndExplodeShell|stitchSurface|stitchSurfacePoints|strcmp|stringArrayCatenate|stringArrayContains|stringArrayCount|stringArrayInsertAtIndex|stringArrayIntersector|stringArrayRemove|stringArrayRemoveAtIndex|stringArrayRemoveDuplicates|stringArrayRemoveExact|stringArrayToString|stringToStringArray|strip|stripPrefixFromName|stroke|subdAutoProjection|subdCleanTopology|subdCollapse|subdDuplicateAndConnect|subdEditUV|subdListComponentConversion|subdMapCut|subdMapSewMove|subdMatchTopology|subdMirror|subdToBlind|subdToPoly|subdTransferUVsToCache|subdiv|subdivCrease|subdivDisplaySmoothness|substitute|substituteAllString|substituteGeometry|substring|surface|surfaceSampler|surfaceShaderList|swatchDisplayPort|switchTable|symbolButton|symbolCheckBox|sysFile|system|tabLayout|tan|tangentConstraint|texLatticeDeformContext|texManipContext|texMoveContext|texMoveUVShellContext|texRotateContext|texScaleContext|texSelectContext|texSelectShortestPathCtx|texSmudgeUVContext|texWinToolCtx|text|textCurves|textField|textFieldButtonGrp|textFieldGrp|textManip|textScrollList|textToShelf|textureDisplacePlane|textureHairColor|texturePlacementContext|textureWindow|threadCount|threePointArcCtx|timeControl|timePort|timerX|toNativePath|toggle|toggleAxis|toggleWindowVisibility|tokenize|tokenizeList|tolerance|tolower|toolButton|toolCollection|toolDropped|toolHasOptions|toolPropertyWindow|torus|toupper|trace|track|trackCtx|transferAttributes|transformCompare|transformLimits|translator|trim|trunc|truncateFluidCache|truncateHairCache|tumble|tumbleCtx|turbulence|twoPointArcCtx|uiRes|uiTemplate|unassignInputDevice|undo|undoInfo|ungroup|uniform|unit|unloadPlugin|untangleUV|untitledFileName|untrim|upAxis|updateAE|userCtx|uvLink|uvSnapshot|validateShelfName|vectorize|view2dToolCtx|viewCamera|viewClipPlane|viewFit|viewHeadOn|viewLookAt|viewManip|viewPlace|viewSet|visor|volumeAxis|vortex|waitCursor|warning|webBrowser|webBrowserPrefs|whatIs|window|windowPref|wire|wireContext|workspace|wrinkle|wrinkleContext|writeTake|xbmLangPathList|xform)\b/,operator:[/\+[+=]?|-[-=]?|&&|\|\||[<>]=|[*\/!=]=?|[%^]/,{pattern:/(^|[^<])<(?!<)/,lookbehind:!0},{pattern:/(^|[^>])>(?!>)/,lookbehind:!0}],punctuation:/<<|>>|[.,:;?\[\](){}]/},t.languages.mel.code.inside.rest=t.languages.mel}return Pc}var Uc,_v;function fq(){if(_v)return Uc;_v=1,Uc=e,e.displayName="mermaid",e.aliases=[];function e(t){t.languages.mermaid={comment:{pattern:/%%.*/,greedy:!0},style:{pattern:/^([ \t]*(?:classDef|linkStyle|style)[ \t]+[\w$-]+[ \t]+)\w.*[^\s;]/m,lookbehind:!0,inside:{property:/\b\w[\w-]*(?=[ \t]*:)/,operator:/:/,punctuation:/,/}},"inter-arrow-label":{pattern:/([^<>ox.=-])(?:-[-.]|==)(?![<>ox.=-])[ \t]*(?:"[^"\r\n]*"|[^\s".=-](?:[^\r\n.=-]*[^\s.=-])?)[ \t]*(?:\.+->?|--+[->]|==+[=>])(?![<>ox.=-])/,lookbehind:!0,greedy:!0,inside:{arrow:{pattern:/(?:\.+->?|--+[->]|==+[=>])$/,alias:"operator"},label:{pattern:/^([\s\S]{2}[ \t]*)\S(?:[\s\S]*\S)?/,lookbehind:!0,alias:"property"},"arrow-head":{pattern:/^\S+/,alias:["arrow","operator"]}}},arrow:[{pattern:/(^|[^{}|o.-])[|}][|o](?:--|\.\.)[|o][|{](?![{}|o.-])/,lookbehind:!0,alias:"operator"},{pattern:/(^|[^<>ox.=-])(?:[ox]?|(?:==+|--+|-\.*-)[>ox]|===+|---+|-\.+-)(?![<>ox.=-])/,lookbehind:!0,alias:"operator"},{pattern:/(^|[^<>()x-])(?:--?(?:>>|[x>)])(?![<>()x])|(?:<<|[x<(])--?(?!-))/,lookbehind:!0,alias:"operator"},{pattern:/(^|[^<>|*o.-])(?:[*o]--|--[*o]|<\|?(?:--|\.\.)|(?:--|\.\.)\|?>|--|\.\.)(?![<>|*o.-])/,lookbehind:!0,alias:"operator"}],label:{pattern:/(^|[^|<])\|(?:[^\r\n"|]|"[^"\r\n]*")+\|/,lookbehind:!0,greedy:!0,alias:"property"},text:{pattern:/(?:[(\[{]+|\b>)(?:[^\r\n"()\[\]{}]|"[^"\r\n]*")+(?:[)\]}]+|>)/,alias:"string"},string:{pattern:/"[^"\r\n]*"/,greedy:!0},annotation:{pattern:/<<(?:abstract|choice|enumeration|fork|interface|join|service)>>|\[\[(?:choice|fork|join)\]\]/i,alias:"important"},keyword:[{pattern:/(^[ \t]*)(?:action|callback|class|classDef|classDiagram|click|direction|erDiagram|flowchart|gantt|gitGraph|graph|journey|link|linkStyle|pie|requirementDiagram|sequenceDiagram|stateDiagram|stateDiagram-v2|style|subgraph)(?![\w$-])/m,lookbehind:!0,greedy:!0},{pattern:/(^[ \t]*)(?:activate|alt|and|as|autonumber|deactivate|else|end(?:[ \t]+note)?|loop|opt|par|participant|rect|state|note[ \t]+(?:over|(?:left|right)[ \t]+of))(?![\w$-])/im,lookbehind:!0,greedy:!0}],entity:/#[a-z0-9]+;/,operator:{pattern:/(\w[ \t]*)&(?=[ \t]*\w)|:::|:/,lookbehind:!0},punctuation:/[(){};]/}}return Uc}var Bc,Tv;function gq(){if(Tv)return Bc;Tv=1,Bc=e,e.displayName="mizar",e.aliases=[];function e(t){t.languages.mizar={comment:/::.+/,keyword:/@proof\b|\b(?:according|aggregate|all|and|antonym|are|as|associativity|assume|asymmetry|attr|be|begin|being|by|canceled|case|cases|clusters?|coherence|commutativity|compatibility|connectedness|consider|consistency|constructors|contradiction|correctness|def|deffunc|define|definitions?|defpred|do|does|end|environ|equals|ex|exactly|existence|for|from|func|given|hence|hereby|holds|idempotence|identity|iff?|implies|involutiveness|irreflexivity|is|it|let|means|mode|non|not|notations?|now|of|or|otherwise|over|per|pred|prefix|projectivity|proof|provided|qua|reconsider|redefine|reduce|reducibility|reflexivity|registrations?|requirements|reserve|sch|schemes?|section|selector|set|sethood|st|struct|such|suppose|symmetry|synonym|take|that|the|then|theorems?|thesis|thus|to|transitivity|uniqueness|vocabular(?:ies|y)|when|where|with|wrt)\b/,parameter:{pattern:/\$(?:10|\d)/,alias:"variable"},variable:/\b\w+(?=:)/,number:/(?:\b|-)\d+\b/,operator:/\.\.\.|->|&|\.?=/,punctuation:/\(#|#\)|[,:;\[\](){}]/}}return Bc}var $c,Av;function mq(){if(Av)return $c;Av=1,$c=e,e.displayName="mongodb",e.aliases=[];function e(t){(function(n){var r=["$eq","$gt","$gte","$in","$lt","$lte","$ne","$nin","$and","$not","$nor","$or","$exists","$type","$expr","$jsonSchema","$mod","$regex","$text","$where","$geoIntersects","$geoWithin","$near","$nearSphere","$all","$elemMatch","$size","$bitsAllClear","$bitsAllSet","$bitsAnyClear","$bitsAnySet","$comment","$elemMatch","$meta","$slice","$currentDate","$inc","$min","$max","$mul","$rename","$set","$setOnInsert","$unset","$addToSet","$pop","$pull","$push","$pullAll","$each","$position","$slice","$sort","$bit","$addFields","$bucket","$bucketAuto","$collStats","$count","$currentOp","$facet","$geoNear","$graphLookup","$group","$indexStats","$limit","$listLocalSessions","$listSessions","$lookup","$match","$merge","$out","$planCacheStats","$project","$redact","$replaceRoot","$replaceWith","$sample","$set","$skip","$sort","$sortByCount","$unionWith","$unset","$unwind","$setWindowFields","$abs","$accumulator","$acos","$acosh","$add","$addToSet","$allElementsTrue","$and","$anyElementTrue","$arrayElemAt","$arrayToObject","$asin","$asinh","$atan","$atan2","$atanh","$avg","$binarySize","$bsonSize","$ceil","$cmp","$concat","$concatArrays","$cond","$convert","$cos","$dateFromParts","$dateToParts","$dateFromString","$dateToString","$dayOfMonth","$dayOfWeek","$dayOfYear","$degreesToRadians","$divide","$eq","$exp","$filter","$first","$floor","$function","$gt","$gte","$hour","$ifNull","$in","$indexOfArray","$indexOfBytes","$indexOfCP","$isArray","$isNumber","$isoDayOfWeek","$isoWeek","$isoWeekYear","$last","$last","$let","$literal","$ln","$log","$log10","$lt","$lte","$ltrim","$map","$max","$mergeObjects","$meta","$min","$millisecond","$minute","$mod","$month","$multiply","$ne","$not","$objectToArray","$or","$pow","$push","$radiansToDegrees","$range","$reduce","$regexFind","$regexFindAll","$regexMatch","$replaceOne","$replaceAll","$reverseArray","$round","$rtrim","$second","$setDifference","$setEquals","$setIntersection","$setIsSubset","$setUnion","$size","$sin","$slice","$split","$sqrt","$stdDevPop","$stdDevSamp","$strcasecmp","$strLenBytes","$strLenCP","$substr","$substrBytes","$substrCP","$subtract","$sum","$switch","$tan","$toBool","$toDate","$toDecimal","$toDouble","$toInt","$toLong","$toObjectId","$toString","$toLower","$toUpper","$trim","$trunc","$type","$week","$year","$zip","$count","$dateAdd","$dateDiff","$dateSubtract","$dateTrunc","$getField","$rand","$sampleRate","$setField","$unsetField","$comment","$explain","$hint","$max","$maxTimeMS","$min","$orderby","$query","$returnKey","$showDiskLoc","$natural"],a=["ObjectId","Code","BinData","DBRef","Timestamp","NumberLong","NumberDecimal","MaxKey","MinKey","RegExp","ISODate","UUID"];r=r.map(function(o){return o.replace("$","\\$")});var i="(?:"+r.join("|")+")\\b";n.languages.mongodb=n.languages.extend("javascript",{}),n.languages.insertBefore("mongodb","string",{property:{pattern:/(?:(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)(?=\s*:)/,greedy:!0,inside:{keyword:RegExp(`^(['"])?`+i+"(?:\\1)?$")}}}),n.languages.mongodb.string.inside={url:{pattern:/https?:\/\/[-\w@:%.+~#=]{1,256}\.[a-z0-9()]{1,6}\b[-\w()@:%+.~#?&/=]*/i,greedy:!0},entity:{pattern:/\b(?:(?:[01]?\d\d?|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d\d?|2[0-4]\d|25[0-5])\b/,greedy:!0}},n.languages.insertBefore("mongodb","constant",{builtin:{pattern:RegExp("\\b(?:"+a.join("|")+")\\b"),alias:"keyword"}})})(t)}return $c}var zc,Rv;function hq(){if(Rv)return zc;Rv=1,zc=e,e.displayName="monkey",e.aliases=[];function e(t){t.languages.monkey={comment:{pattern:/^#Rem\s[\s\S]*?^#End|'.+/im,greedy:!0},string:{pattern:/"[^"\r\n]*"/,greedy:!0},preprocessor:{pattern:/(^[ \t]*)#.+/m,lookbehind:!0,greedy:!0,alias:"property"},function:/\b\w+(?=\()/,"type-char":{pattern:/\b[?%#$]/,alias:"class-name"},number:{pattern:/((?:\.\.)?)(?:(?:\b|\B-\.?|\B\.)\d+(?:(?!\.\.)\.\d*)?|\$[\da-f]+)/i,lookbehind:!0},keyword:/\b(?:Abstract|Array|Bool|Case|Catch|Class|Const|Continue|Default|Eachin|Else|ElseIf|End|EndIf|Exit|Extends|Extern|False|Field|Final|Float|For|Forever|Function|Global|If|Implements|Import|Inline|Int|Interface|Local|Method|Module|New|Next|Null|Object|Private|Property|Public|Repeat|Return|Select|Self|Step|Strict|String|Super|Then|Throw|To|True|Try|Until|Void|Wend|While)\b/i,operator:/\.\.|<[=>]?|>=?|:?=|(?:[+\-*\/&~|]|\b(?:Mod|Shl|Shr)\b)=?|\b(?:And|Not|Or)\b/i,punctuation:/[.,:;()\[\]]/}}return zc}var Gc,Iv;function bq(){if(Iv)return Gc;Iv=1,Gc=e,e.displayName="moonscript",e.aliases=["moon"];function e(t){t.languages.moonscript={comment:/--.*/,string:[{pattern:/'[^']*'|\[(=*)\[[\s\S]*?\]\1\]/,greedy:!0},{pattern:/"[^"]*"/,greedy:!0,inside:{interpolation:{pattern:/#\{[^{}]*\}/,inside:{moonscript:{pattern:/(^#\{)[\s\S]+(?=\})/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/#\{|\}/,alias:"punctuation"}}}}}],"class-name":[{pattern:/(\b(?:class|extends)[ \t]+)\w+/,lookbehind:!0},/\b[A-Z]\w*/],keyword:/\b(?:class|continue|do|else|elseif|export|extends|for|from|if|import|in|local|nil|return|self|super|switch|then|unless|using|when|while|with)\b/,variable:/@@?\w*/,property:{pattern:/\b(?!\d)\w+(?=:)|(:)(?!\d)\w+/,lookbehind:!0},function:{pattern:/\b(?:_G|_VERSION|assert|collectgarbage|coroutine\.(?:create|resume|running|status|wrap|yield)|debug\.(?:debug|getfenv|gethook|getinfo|getlocal|getmetatable|getregistry|getupvalue|setfenv|sethook|setlocal|setmetatable|setupvalue|traceback)|dofile|error|getfenv|getmetatable|io\.(?:close|flush|input|lines|open|output|popen|read|stderr|stdin|stdout|tmpfile|type|write)|ipairs|load|loadfile|loadstring|math\.(?:abs|acos|asin|atan|atan2|ceil|cos|cosh|deg|exp|floor|fmod|frexp|ldexp|log|log10|max|min|modf|pi|pow|rad|random|randomseed|sin|sinh|sqrt|tan|tanh)|module|next|os\.(?:clock|date|difftime|execute|exit|getenv|remove|rename|setlocale|time|tmpname)|package\.(?:cpath|loaded|loadlib|path|preload|seeall)|pairs|pcall|print|rawequal|rawget|rawset|require|select|setfenv|setmetatable|string\.(?:byte|char|dump|find|format|gmatch|gsub|len|lower|match|rep|reverse|sub|upper)|table\.(?:concat|insert|maxn|remove|sort)|tonumber|tostring|type|unpack|xpcall)\b/,inside:{punctuation:/\./}},boolean:/\b(?:false|true)\b/,number:/(?:\B\.\d+|\b\d+\.\d+|\b\d+(?=[eE]))(?:[eE][-+]?\d+)?\b|\b(?:0x[a-fA-F\d]+|\d+)(?:U?LL)?\b/,operator:/\.{3}|[-=]>|~=|(?:[-+*/%<>!=]|\.\.)=?|[:#^]|\b(?:and|or)\b=?|\b(?:not)\b/,punctuation:/[.,()[\]{}\\]/},t.languages.moonscript.string[1].inside.interpolation.inside.moonscript.inside=t.languages.moonscript,t.languages.moon=t.languages.moonscript}return Gc}var qc,Cv;function yq(){if(Cv)return qc;Cv=1,qc=e,e.displayName="n1ql",e.aliases=[];function e(t){t.languages.n1ql={comment:{pattern:/\/\*[\s\S]*?(?:$|\*\/)|--.*/,greedy:!0},string:{pattern:/(["'])(?:\\[\s\S]|(?!\1)[^\\]|\1\1)*\1/,greedy:!0},identifier:{pattern:/`(?:\\[\s\S]|[^\\`]|``)*`/,greedy:!0},parameter:/\$[\w.]+/,keyword:/\b(?:ADVISE|ALL|ALTER|ANALYZE|AS|ASC|AT|BEGIN|BINARY|BOOLEAN|BREAK|BUCKET|BUILD|BY|CALL|CAST|CLUSTER|COLLATE|COLLECTION|COMMIT|COMMITTED|CONNECT|CONTINUE|CORRELATE|CORRELATED|COVER|CREATE|CURRENT|DATABASE|DATASET|DATASTORE|DECLARE|DECREMENT|DELETE|DERIVED|DESC|DESCRIBE|DISTINCT|DO|DROP|EACH|ELEMENT|EXCEPT|EXCLUDE|EXECUTE|EXPLAIN|FETCH|FILTER|FLATTEN|FLUSH|FOLLOWING|FOR|FORCE|FROM|FTS|FUNCTION|GOLANG|GRANT|GROUP|GROUPS|GSI|HASH|HAVING|IF|IGNORE|ILIKE|INCLUDE|INCREMENT|INDEX|INFER|INLINE|INNER|INSERT|INTERSECT|INTO|IS|ISOLATION|JAVASCRIPT|JOIN|KEY|KEYS|KEYSPACE|KNOWN|LANGUAGE|LAST|LEFT|LET|LETTING|LEVEL|LIMIT|LSM|MAP|MAPPING|MATCHED|MATERIALIZED|MERGE|MINUS|MISSING|NAMESPACE|NEST|NL|NO|NTH_VALUE|NULL|NULLS|NUMBER|OBJECT|OFFSET|ON|OPTION|OPTIONS|ORDER|OTHERS|OUTER|OVER|PARSE|PARTITION|PASSWORD|PATH|POOL|PRECEDING|PREPARE|PRIMARY|PRIVATE|PRIVILEGE|PROBE|PROCEDURE|PUBLIC|RANGE|RAW|REALM|REDUCE|RENAME|RESPECT|RETURN|RETURNING|REVOKE|RIGHT|ROLE|ROLLBACK|ROW|ROWS|SATISFIES|SAVEPOINT|SCHEMA|SCOPE|SELECT|SELF|SEMI|SET|SHOW|SOME|START|STATISTICS|STRING|SYSTEM|TIES|TO|TRAN|TRANSACTION|TRIGGER|TRUNCATE|UNBOUNDED|UNDER|UNION|UNIQUE|UNKNOWN|UNNEST|UNSET|UPDATE|UPSERT|USE|USER|USING|VALIDATE|VALUE|VALUES|VIA|VIEW|WHERE|WHILE|WINDOW|WITH|WORK|XOR)\b/i,function:/\b[a-z_]\w*(?=\s*\()/i,boolean:/\b(?:FALSE|TRUE)\b/i,number:/(?:\b\d+\.|\B\.)\d+e[+\-]?\d+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/%]|!=|==?|\|\||<[>=]?|>=?|\b(?:AND|ANY|ARRAY|BETWEEN|CASE|ELSE|END|EVERY|EXISTS|FIRST|IN|LIKE|NOT|OR|THEN|VALUED|WHEN|WITHIN)\b/i,punctuation:/[;[\](),.{}:]/}}return qc}var jc,Nv;function Eq(){if(Nv)return jc;Nv=1,jc=e,e.displayName="n4js",e.aliases=["n4jsd"];function e(t){t.languages.n4js=t.languages.extend("javascript",{keyword:/\b(?:Array|any|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),t.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),t.languages.n4jsd=t.languages.n4js}return jc}var Hc,xv;function Sq(){if(xv)return Hc;xv=1,Hc=e,e.displayName="nand2tetrisHdl",e.aliases=[];function e(t){t.languages["nand2tetris-hdl"]={comment:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,keyword:/\b(?:BUILTIN|CHIP|CLOCKED|IN|OUT|PARTS)\b/,boolean:/\b(?:false|true)\b/,function:/\b[A-Za-z][A-Za-z0-9]*(?=\()/,number:/\b\d+\b/,operator:/=|\.\./,punctuation:/[{}[\];(),:]/}}return Hc}var Vc,Ov;function vq(){if(Ov)return Vc;Ov=1,Vc=e,e.displayName="naniscript",e.aliases=[];function e(t){(function(n){var r=/\{[^\r\n\[\]{}]*\}/,a={"quoted-string":{pattern:/"(?:[^"\\]|\\.)*"/,alias:"operator"},"command-param-id":{pattern:/(\s)\w+:/,lookbehind:!0,alias:"property"},"command-param-value":[{pattern:r,alias:"selector"},{pattern:/([\t ])\S+/,lookbehind:!0,greedy:!0,alias:"operator"},{pattern:/\S(?:.*\S)?/,alias:"operator"}]};n.languages.naniscript={comment:{pattern:/^([\t ]*);.*/m,lookbehind:!0},define:{pattern:/^>.+/m,alias:"tag",inside:{value:{pattern:/(^>\w+[\t ]+)(?!\s)[^{}\r\n]+/,lookbehind:!0,alias:"operator"},key:{pattern:/(^>)\w+/,lookbehind:!0}}},label:{pattern:/^([\t ]*)#[\t ]*\w+[\t ]*$/m,lookbehind:!0,alias:"regex"},command:{pattern:/^([\t ]*)@\w+(?=[\t ]|$).*/m,lookbehind:!0,alias:"function",inside:{"command-name":/^@\w+/,expression:{pattern:r,greedy:!0,alias:"selector"},"command-params":{pattern:/\s*\S[\s\S]*/,inside:a}}},"generic-text":{pattern:/(^[ \t]*)[^#@>;\s].*/m,lookbehind:!0,alias:"punctuation",inside:{"escaped-char":/\\[{}\[\]"]/,expression:{pattern:r,greedy:!0,alias:"selector"},"inline-command":{pattern:/\[[\t ]*\w[^\r\n\[\]]*\]/,greedy:!0,alias:"function",inside:{"command-params":{pattern:/(^\[[\t ]*\w+\b)[\s\S]+(?=\]$)/,lookbehind:!0,inside:a},"command-param-name":{pattern:/^(\[[\t ]*)\w+/,lookbehind:!0,alias:"name"},"start-stop-char":/[\[\]]/}}}}},n.languages.nani=n.languages.naniscript,n.hooks.add("after-tokenize",function(s){var l=s.tokens;l.forEach(function(u){if(typeof u!="string"&&u.type==="generic-text"){var d=o(u);i(d)||(u.type="bad-line",u.content=d)}})});function i(s){for(var l="[]{}",u=[],d=0;d=&|$!]/}}return Wc}var Yc,Dv;function wq(){if(Dv)return Yc;Dv=1,Yc=e,e.displayName="neon",e.aliases=[];function e(t){t.languages.neon={comment:{pattern:/#.*/,greedy:!0},datetime:{pattern:/(^|[[{(=:,\s])\d\d\d\d-\d\d?-\d\d?(?:(?:[Tt]| +)\d\d?:\d\d:\d\d(?:\.\d*)? *(?:Z|[-+]\d\d?(?::?\d\d)?)?)?(?=$|[\]}),\s])/,lookbehind:!0,alias:"number"},key:{pattern:/(^|[[{(,\s])[^,:=[\]{}()'"\s]+(?=\s*:(?:$|[\]}),\s])|\s*=)/,lookbehind:!0,alias:"atrule"},number:{pattern:/(^|[[{(=:,\s])[+-]?(?:0x[\da-fA-F]+|0o[0-7]+|0b[01]+|(?:\d+(?:\.\d*)?|\.?\d+)(?:[eE][+-]?\d+)?)(?=$|[\]}),:=\s])/,lookbehind:!0},boolean:{pattern:/(^|[[{(=:,\s])(?:false|no|true|yes)(?=$|[\]}),:=\s])/i,lookbehind:!0},null:{pattern:/(^|[[{(=:,\s])(?:null)(?=$|[\]}),:=\s])/i,lookbehind:!0,alias:"keyword"},string:{pattern:/(^|[[{(=:,\s])(?:('''|""")\r?\n(?:(?:[^\r\n]|\r?\n(?![\t ]*\2))*\r?\n)?[\t ]*\2|'[^'\r\n]*'|"(?:\\.|[^\\"\r\n])*")/,lookbehind:!0,greedy:!0},literal:{pattern:/(^|[[{(=:,\s])(?:[^#"',:=[\]{}()\s`-]|[:-][^"',=[\]{}()\s])(?:[^,:=\]})(\s]|:(?![\s,\]})]|$)|[ \t]+[^#,:=\]})(\s])*/,lookbehind:!0,alias:"string"},punctuation:/[,:=[\]{}()-]/}}return Yc}var Kc,Mv;function _q(){if(Mv)return Kc;Mv=1,Kc=e,e.displayName="nevod",e.aliases=[];function e(t){t.languages.nevod={comment:/\/\/.*|(?:\/\*[\s\S]*?(?:\*\/|$))/,string:{pattern:/(?:"(?:""|[^"])*"(?!")|'(?:''|[^'])*'(?!'))!?\*?/,greedy:!0,inside:{"string-attrs":/!$|!\*$|\*$/}},namespace:{pattern:/(@namespace\s+)[a-zA-Z0-9\-.]+(?=\s*\{)/,lookbehind:!0},pattern:{pattern:/(@pattern\s+)?#?[a-zA-Z0-9\-.]+(?:\s*\(\s*(?:~\s*)?[a-zA-Z0-9\-.]+\s*(?:,\s*(?:~\s*)?[a-zA-Z0-9\-.]*)*\))?(?=\s*=)/,lookbehind:!0,inside:{"pattern-name":{pattern:/^#?[a-zA-Z0-9\-.]+/,alias:"class-name"},fields:{pattern:/\(.*\)/,inside:{"field-name":{pattern:/[a-zA-Z0-9\-.]+/,alias:"variable"},punctuation:/[,()]/,operator:{pattern:/~/,alias:"field-hidden-mark"}}}}},search:{pattern:/(@search\s+|#)[a-zA-Z0-9\-.]+(?:\.\*)?(?=\s*;)/,alias:"function",lookbehind:!0},keyword:/@(?:having|inside|namespace|outside|pattern|require|search|where)\b/,"standard-pattern":{pattern:/\b(?:Alpha|AlphaNum|Any|Blank|End|LineBreak|Num|NumAlpha|Punct|Space|Start|Symbol|Word|WordBreak)\b(?:\([a-zA-Z0-9\-.,\s+]*\))?/,inside:{"standard-pattern-name":{pattern:/^[a-zA-Z0-9\-.]+/,alias:"builtin"},quantifier:{pattern:/\b\d+(?:\s*\+|\s*-\s*\d+)?(?!\w)/,alias:"number"},"standard-pattern-attr":{pattern:/[a-zA-Z0-9\-.]+/,alias:"builtin"},punctuation:/[,()]/}},quantifier:{pattern:/\b\d+(?:\s*\+|\s*-\s*\d+)?(?!\w)/,alias:"number"},operator:[{pattern:/=/,alias:"pattern-def"},{pattern:/&/,alias:"conjunction"},{pattern:/~/,alias:"exception"},{pattern:/\?/,alias:"optionality"},{pattern:/[[\]]/,alias:"repetition"},{pattern:/[{}]/,alias:"variation"},{pattern:/[+_]/,alias:"sequence"},{pattern:/\.{2,3}/,alias:"span"}],"field-capture":[{pattern:/([a-zA-Z0-9\-.]+\s*\()\s*[a-zA-Z0-9\-.]+\s*:\s*[a-zA-Z0-9\-.]+(?:\s*,\s*[a-zA-Z0-9\-.]+\s*:\s*[a-zA-Z0-9\-.]+)*(?=\s*\))/,lookbehind:!0,inside:{"field-name":{pattern:/[a-zA-Z0-9\-.]+/,alias:"variable"},colon:/:/}},{pattern:/[a-zA-Z0-9\-.]+\s*:/,inside:{"field-name":{pattern:/[a-zA-Z0-9\-.]+/,alias:"variable"},colon:/:/}}],punctuation:/[:;,()]/,name:/[a-zA-Z0-9\-.]+/}}return Kc}var Xc,Fv;function Tq(){if(Fv)return Xc;Fv=1,Xc=e,e.displayName="nginx",e.aliases=[];function e(t){(function(n){var r=/\$(?:\w[a-z\d]*(?:_[^\x00-\x1F\s"'\\()$]*)?|\{[^}\s"'\\]+\})/i;n.languages.nginx={comment:{pattern:/(^|[\s{};])#.*/,lookbehind:!0,greedy:!0},directive:{pattern:/(^|\s)\w(?:[^;{}"'\\\s]|\\.|"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'|\s+(?:#.*(?!.)|(?![#\s])))*?(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:{string:{pattern:/((?:^|[^\\])(?:\\\\)*)(?:"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')/,lookbehind:!0,greedy:!0,inside:{escape:{pattern:/\\["'\\nrt]/,alias:"entity"},variable:r}},comment:{pattern:/(\s)#.*/,lookbehind:!0,greedy:!0},keyword:{pattern:/^\S+/,greedy:!0},boolean:{pattern:/(\s)(?:off|on)(?!\S)/,lookbehind:!0},number:{pattern:/(\s)\d+[a-z]*(?!\S)/i,lookbehind:!0},variable:r}},punctuation:/[{};]/}})(t)}return Xc}var Zc,Pv;function Aq(){if(Pv)return Zc;Pv=1,Zc=e,e.displayName="nim",e.aliases=[];function e(t){t.languages.nim={comment:{pattern:/#.*/,greedy:!0},string:{pattern:/(?:\b(?!\d)(?:\w|\\x[89a-fA-F][0-9a-fA-F])+)?(?:"""[\s\S]*?"""(?!")|"(?:\\[\s\S]|""|[^"\\])*")/,greedy:!0},char:{pattern:/'(?:\\(?:\d+|x[\da-fA-F]{0,2}|.)|[^'])'/,greedy:!0},function:{pattern:/(?:(?!\d)(?:\w|\\x[89a-fA-F][0-9a-fA-F])+|`[^`\r\n]+`)\*?(?:\[[^\]]+\])?(?=\s*\()/,greedy:!0,inside:{operator:/\*$/}},identifier:{pattern:/`[^`\r\n]+`/,greedy:!0,inside:{punctuation:/`/}},number:/\b(?:0[xXoObB][\da-fA-F_]+|\d[\d_]*(?:(?!\.\.)\.[\d_]*)?(?:[eE][+-]?\d[\d_]*)?)(?:'?[iuf]\d*)?/,keyword:/\b(?:addr|as|asm|atomic|bind|block|break|case|cast|concept|const|continue|converter|defer|discard|distinct|do|elif|else|end|enum|except|export|finally|for|from|func|generic|if|import|include|interface|iterator|let|macro|method|mixin|nil|object|out|proc|ptr|raise|ref|return|static|template|try|tuple|type|using|var|when|while|with|without|yield)\b/,operator:{pattern:/(^|[({\[](?=\.\.)|(?![({\[]\.).)(?:(?:[=+\-*\/<>@$~&%|!?^:\\]|\.\.|\.(?![)}\]]))+|\b(?:and|div|in|is|isnot|mod|not|notin|of|or|shl|shr|xor)\b)/m,lookbehind:!0},punctuation:/[({\[]\.|\.[)}\]]|[`(){}\[\],:]/}}return Zc}var Qc,Uv;function Rq(){if(Uv)return Qc;Uv=1,Qc=e,e.displayName="nix",e.aliases=[];function e(t){t.languages.nix={comment:{pattern:/\/\*[\s\S]*?\*\/|#.*/,greedy:!0},string:{pattern:/"(?:[^"\\]|\\[\s\S])*"|''(?:(?!'')[\s\S]|''(?:'|\\|\$\{))*''/,greedy:!0,inside:{interpolation:{pattern:/(^|(?:^|(?!'').)[^\\])\$\{(?:[^{}]|\{[^}]*\})*\}/,lookbehind:!0,inside:null}}},url:[/\b(?:[a-z]{3,7}:\/\/)[\w\-+%~\/.:#=?&]+/,{pattern:/([^\/])(?:[\w\-+%~.:#=?&]*(?!\/\/)[\w\-+%~\/.:#=?&])?(?!\/\/)\/[\w\-+%~\/.:#=?&]*/,lookbehind:!0}],antiquotation:{pattern:/\$(?=\{)/,alias:"important"},number:/\b\d+\b/,keyword:/\b(?:assert|builtins|else|if|in|inherit|let|null|or|then|with)\b/,function:/\b(?:abort|add|all|any|attrNames|attrValues|baseNameOf|compareVersions|concatLists|currentSystem|deepSeq|derivation|dirOf|div|elem(?:At)?|fetch(?:Tarball|url)|filter(?:Source)?|fromJSON|genList|getAttr|getEnv|hasAttr|hashString|head|import|intersectAttrs|is(?:Attrs|Bool|Function|Int|List|Null|String)|length|lessThan|listToAttrs|map|mul|parseDrvName|pathExists|read(?:Dir|File)|removeAttrs|replaceStrings|seq|sort|stringLength|sub(?:string)?|tail|throw|to(?:File|JSON|Path|String|XML)|trace|typeOf)\b|\bfoldl'\B/,boolean:/\b(?:false|true)\b/,operator:/[=!<>]=?|\+\+?|\|\||&&|\/\/|->?|[?@]/,punctuation:/[{}()[\].,:;]/},t.languages.nix.string.inside.interpolation.inside=t.languages.nix}return Qc}var Jc,Bv;function Iq(){if(Bv)return Jc;Bv=1,Jc=e,e.displayName="nsis",e.aliases=[];function e(t){t.languages.nsis={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|[#;].*)/,lookbehind:!0,greedy:!0},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},keyword:{pattern:/(^[\t ]*)(?:Abort|Add(?:BrandingImage|Size)|AdvSplash|Allow(?:RootDirInstall|SkipFiles)|AutoCloseWindow|BG(?:Font|Gradient|Image)|Banner|BrandingText|BringToFront|CRCCheck|Call(?:InstDLL)?|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|Create(?:Directory|Font|ShortCut)|Delete(?:INISec|INIStr|RegKey|RegValue)?|Detail(?:Print|sButtonText)|Dialer|Dir(?:Text|Var|Verify)|EnableWindow|Enum(?:RegKey|RegValue)|Exch|Exec(?:Shell(?:Wait)?|Wait)?|ExpandEnvStrings|File(?:BufSize|Close|ErrorText|Open|Read|ReadByte|ReadUTF16LE|ReadWord|Seek|Write|WriteByte|WriteUTF16LE|WriteWord)?|Find(?:Close|First|Next|Window)|FlushINI|Get(?:CurInstType|CurrentAddress|DLLVersion(?:Local)?|DlgItem|ErrorLevel|FileTime(?:Local)?|FullPathName|Function(?:Address|End)?|InstDirError|LabelAddress|TempFileName)|Goto|HideWindow|Icon|If(?:Abort|Errors|FileExists|RebootFlag|Silent)|InitPluginsDir|InstProgressFlags|Inst(?:Type(?:GetText|SetText)?)|Install(?:ButtonText|Colors|Dir(?:RegKey)?)|Int(?:64|Ptr)?CmpU?|Int(?:64)?Fmt|Int(?:Ptr)?Op|IsWindow|Lang(?:DLL|String)|License(?:BkColor|Data|ForceSelection|LangString|Text)|LoadLanguageFile|LockWindow|Log(?:Set|Text)|Manifest(?:DPIAware|SupportedOS)|Math|MessageBox|MiscButtonText|NSISdl|Name|Nop|OutFile|PE(?:DllCharacteristics|SubsysVer)|Page(?:Callbacks)?|Pop|Push|Quit|RMDir|Read(?:EnvStr|INIStr|RegDWORD|RegStr)|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|SearchPath|Section(?:End|GetFlags|GetInstTypes|GetSize|GetText|Group|In|SetFlags|SetInstTypes|SetSize|SetText)?|SendMessage|Set(?:AutoClose|BrandingImage|Compress|Compressor(?:DictSize)?|CtlColors|CurInstType|DatablockOptimize|DateSave|Details(?:Print|View)|ErrorLevel|Errors|FileAttributes|Font|OutPath|Overwrite|PluginUnload|RebootFlag|RegView|ShellVarContext|Silent)|Show(?:InstDetails|UninstDetails|Window)|Silent(?:Install|UnInstall)|Sleep|SpaceTexts|Splash|StartMenu|Str(?:CmpS?|Cpy|Len)|SubCaption|System|UnRegDLL|Unicode|UninstPage|Uninstall(?:ButtonText|Caption|Icon|SubCaption|Text)|UserInfo|VI(?:AddVersionKey|FileVersion|ProductVersion)|VPatch|Var|WindowIcon|Write(?:INIStr|Reg(?:Bin|DWORD|ExpandStr|MultiStr|None|Str)|Uninstaller)|XPStyle|ns(?:Dialogs|Exec))\b/m,lookbehind:!0},property:/\b(?:ARCHIVE|FILE_(?:ATTRIBUTE_ARCHIVE|ATTRIBUTE_NORMAL|ATTRIBUTE_OFFLINE|ATTRIBUTE_READONLY|ATTRIBUTE_SYSTEM|ATTRIBUTE_TEMPORARY)|HK(?:(?:CR|CU|LM)(?:32|64)?|DD|PD|U)|HKEY_(?:CLASSES_ROOT|CURRENT_CONFIG|CURRENT_USER|DYN_DATA|LOCAL_MACHINE|PERFORMANCE_DATA|USERS)|ID(?:ABORT|CANCEL|IGNORE|NO|OK|RETRY|YES)|MB_(?:ABORTRETRYIGNORE|DEFBUTTON1|DEFBUTTON2|DEFBUTTON3|DEFBUTTON4|ICONEXCLAMATION|ICONINFORMATION|ICONQUESTION|ICONSTOP|OK|OKCANCEL|RETRYCANCEL|RIGHT|RTLREADING|SETFOREGROUND|TOPMOST|USERICON|YESNO)|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SYSTEM|TEMPORARY|admin|all|auto|both|colored|false|force|hide|highest|lastused|leave|listonly|none|normal|notset|off|on|open|print|show|silent|silentlog|smooth|textonly|true|user)\b/,constant:/\$\{[!\w\.:\^-]+\}|\$\([!\w\.:\^-]+\)/,variable:/\$\w[\w\.]*/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--?|\+\+?|<=?|>=?|==?=?|&&?|\|\|?|[?*\/~^%]/,punctuation:/[{}[\];(),.:]/,important:{pattern:/(^[\t ]*)!(?:addincludedir|addplugindir|appendfile|cd|define|delfile|echo|else|endif|error|execute|finalize|getdllversion|gettlbversion|if|ifdef|ifmacrodef|ifmacrondef|ifndef|include|insertmacro|macro|macroend|makensis|packhdr|pragma|searchparse|searchreplace|system|tempfile|undef|verbose|warning)\b/im,lookbehind:!0}}}return Jc}var ed,$v;function Cq(){if($v)return ed;$v=1;var e=tr();ed=t,t.displayName="objectivec",t.aliases=["objc"];function t(n){n.register(e),n.languages.objectivec=n.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete n.languages.objectivec["class-name"],n.languages.objc=n.languages.objectivec}return ed}var td,zv;function Nq(){if(zv)return td;zv=1,td=e,e.displayName="ocaml",e.aliases=[];function e(t){t.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/}}return td}var nd,Gv;function xq(){if(Gv)return nd;Gv=1;var e=tr();nd=t,t.displayName="opencl",t.aliases=[];function t(n){n.register(e),function(r){r.languages.opencl=r.languages.extend("c",{keyword:/\b(?:(?:__)?(?:constant|global|kernel|local|private|read_only|read_write|write_only)|__attribute__|auto|(?:bool|u?(?:char|int|long|short)|half|quad)(?:2|3|4|8|16)?|break|case|complex|const|continue|(?:double|float)(?:16(?:x(?:1|2|4|8|16))?|1x(?:1|2|4|8|16)|2(?:x(?:1|2|4|8|16))?|3|4(?:x(?:1|2|4|8|16))?|8(?:x(?:1|2|4|8|16))?)?|default|do|else|enum|extern|for|goto|if|imaginary|inline|packed|pipe|register|restrict|return|signed|sizeof|static|struct|switch|typedef|uniform|union|unsigned|void|volatile|while)\b/,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[fuhl]{0,4}/i,boolean:/\b(?:false|true)\b/,"constant-opencl-kernel":{pattern:/\b(?:CHAR_(?:BIT|MAX|MIN)|CLK_(?:ADDRESS_(?:CLAMP(?:_TO_EDGE)?|NONE|REPEAT)|FILTER_(?:LINEAR|NEAREST)|(?:GLOBAL|LOCAL)_MEM_FENCE|NORMALIZED_COORDS_(?:FALSE|TRUE))|CL_(?:BGRA|(?:HALF_)?FLOAT|INTENSITY|LUMINANCE|A?R?G?B?[Ax]?|(?:(?:UN)?SIGNED|[US]NORM)_(?:INT(?:8|16|32))|UNORM_(?:INT_101010|SHORT_(?:555|565)))|(?:DBL|FLT|HALF)_(?:DIG|EPSILON|(?:MAX|MIN)(?:(?:_10)?_EXP)?|MANT_DIG)|FLT_RADIX|HUGE_VALF?|(?:INT|LONG|SCHAR|SHRT)_(?:MAX|MIN)|INFINITY|MAXFLOAT|M_(?:[12]_PI|2_SQRTPI|E|LN(?:2|10)|LOG(?:2|10)E?|PI(?:_[24])?|SQRT(?:1_2|2))(?:_F|_H)?|NAN|(?:UCHAR|UINT|ULONG|USHRT)_MAX)\b/,alias:"constant"}}),r.languages.insertBefore("opencl","class-name",{"builtin-type":{pattern:/\b(?:_cl_(?:command_queue|context|device_id|event|kernel|mem|platform_id|program|sampler)|cl_(?:image_format|mem_fence_flags)|clk_event_t|event_t|image(?:1d_(?:array_|buffer_)?t|2d_(?:array_(?:depth_|msaa_depth_|msaa_)?|depth_|msaa_depth_|msaa_)?t|3d_t)|intptr_t|ndrange_t|ptrdiff_t|queue_t|reserve_id_t|sampler_t|size_t|uintptr_t)\b/,alias:"keyword"}});var a={"type-opencl-host":{pattern:/\b(?:cl_(?:GLenum|GLint|GLuin|addressing_mode|bitfield|bool|buffer_create_type|build_status|channel_(?:order|type)|(?:u?(?:char|int|long|short)|double|float)(?:2|3|4|8|16)?|command_(?:queue(?:_info|_properties)?|type)|context(?:_info|_properties)?|device_(?:exec_capabilities|fp_config|id|info|local_mem_type|mem_cache_type|type)|(?:event|sampler)(?:_info)?|filter_mode|half|image_info|kernel(?:_info|_work_group_info)?|map_flags|mem(?:_flags|_info|_object_type)?|platform_(?:id|info)|profiling_info|program(?:_build_info|_info)?))\b/,alias:"keyword"},"boolean-opencl-host":{pattern:/\bCL_(?:FALSE|TRUE)\b/,alias:"boolean"},"constant-opencl-host":{pattern:/\bCL_(?:A|ABGR|ADDRESS_(?:CLAMP(?:_TO_EDGE)?|MIRRORED_REPEAT|NONE|REPEAT)|ARGB|BGRA|BLOCKING|BUFFER_CREATE_TYPE_REGION|BUILD_(?:ERROR|IN_PROGRESS|NONE|PROGRAM_FAILURE|SUCCESS)|COMMAND_(?:ACQUIRE_GL_OBJECTS|BARRIER|COPY_(?:BUFFER(?:_RECT|_TO_IMAGE)?|IMAGE(?:_TO_BUFFER)?)|FILL_(?:BUFFER|IMAGE)|MAP(?:_BUFFER|_IMAGE)|MARKER|MIGRATE(?:_SVM)?_MEM_OBJECTS|NATIVE_KERNEL|NDRANGE_KERNEL|READ_(?:BUFFER(?:_RECT)?|IMAGE)|RELEASE_GL_OBJECTS|SVM_(?:FREE|MAP|MEMCPY|MEMFILL|UNMAP)|TASK|UNMAP_MEM_OBJECT|USER|WRITE_(?:BUFFER(?:_RECT)?|IMAGE))|COMPILER_NOT_AVAILABLE|COMPILE_PROGRAM_FAILURE|COMPLETE|CONTEXT_(?:DEVICES|INTEROP_USER_SYNC|NUM_DEVICES|PLATFORM|PROPERTIES|REFERENCE_COUNT)|DEPTH(?:_STENCIL)?|DEVICE_(?:ADDRESS_BITS|AFFINITY_DOMAIN_(?:L[1-4]_CACHE|NEXT_PARTITIONABLE|NUMA)|AVAILABLE|BUILT_IN_KERNELS|COMPILER_AVAILABLE|DOUBLE_FP_CONFIG|ENDIAN_LITTLE|ERROR_CORRECTION_SUPPORT|EXECUTION_CAPABILITIES|EXTENSIONS|GLOBAL_(?:MEM_(?:CACHELINE_SIZE|CACHE_SIZE|CACHE_TYPE|SIZE)|VARIABLE_PREFERRED_TOTAL_SIZE)|HOST_UNIFIED_MEMORY|IL_VERSION|IMAGE(?:2D_MAX_(?:HEIGHT|WIDTH)|3D_MAX_(?:DEPTH|HEIGHT|WIDTH)|_BASE_ADDRESS_ALIGNMENT|_MAX_ARRAY_SIZE|_MAX_BUFFER_SIZE|_PITCH_ALIGNMENT|_SUPPORT)|LINKER_AVAILABLE|LOCAL_MEM_SIZE|LOCAL_MEM_TYPE|MAX_(?:CLOCK_FREQUENCY|COMPUTE_UNITS|CONSTANT_ARGS|CONSTANT_BUFFER_SIZE|GLOBAL_VARIABLE_SIZE|MEM_ALLOC_SIZE|NUM_SUB_GROUPS|ON_DEVICE_(?:EVENTS|QUEUES)|PARAMETER_SIZE|PIPE_ARGS|READ_IMAGE_ARGS|READ_WRITE_IMAGE_ARGS|SAMPLERS|WORK_GROUP_SIZE|WORK_ITEM_DIMENSIONS|WORK_ITEM_SIZES|WRITE_IMAGE_ARGS)|MEM_BASE_ADDR_ALIGN|MIN_DATA_TYPE_ALIGN_SIZE|NAME|NATIVE_VECTOR_WIDTH_(?:CHAR|DOUBLE|FLOAT|HALF|INT|LONG|SHORT)|NOT_(?:AVAILABLE|FOUND)|OPENCL_C_VERSION|PARENT_DEVICE|PARTITION_(?:AFFINITY_DOMAIN|BY_AFFINITY_DOMAIN|BY_COUNTS|BY_COUNTS_LIST_END|EQUALLY|FAILED|MAX_SUB_DEVICES|PROPERTIES|TYPE)|PIPE_MAX_(?:ACTIVE_RESERVATIONS|PACKET_SIZE)|PLATFORM|PREFERRED_(?:GLOBAL_ATOMIC_ALIGNMENT|INTEROP_USER_SYNC|LOCAL_ATOMIC_ALIGNMENT|PLATFORM_ATOMIC_ALIGNMENT|VECTOR_WIDTH_(?:CHAR|DOUBLE|FLOAT|HALF|INT|LONG|SHORT))|PRINTF_BUFFER_SIZE|PROFILE|PROFILING_TIMER_RESOLUTION|QUEUE_(?:ON_(?:DEVICE_(?:MAX_SIZE|PREFERRED_SIZE|PROPERTIES)|HOST_PROPERTIES)|PROPERTIES)|REFERENCE_COUNT|SINGLE_FP_CONFIG|SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS|SVM_(?:ATOMICS|CAPABILITIES|COARSE_GRAIN_BUFFER|FINE_GRAIN_BUFFER|FINE_GRAIN_SYSTEM)|TYPE(?:_ACCELERATOR|_ALL|_CPU|_CUSTOM|_DEFAULT|_GPU)?|VENDOR(?:_ID)?|VERSION)|DRIVER_VERSION|EVENT_(?:COMMAND_(?:EXECUTION_STATUS|QUEUE|TYPE)|CONTEXT|REFERENCE_COUNT)|EXEC_(?:KERNEL|NATIVE_KERNEL|STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST)|FILTER_(?:LINEAR|NEAREST)|FLOAT|FP_(?:CORRECTLY_ROUNDED_DIVIDE_SQRT|DENORM|FMA|INF_NAN|ROUND_TO_INF|ROUND_TO_NEAREST|ROUND_TO_ZERO|SOFT_FLOAT)|GLOBAL|HALF_FLOAT|IMAGE_(?:ARRAY_SIZE|BUFFER|DEPTH|ELEMENT_SIZE|FORMAT|FORMAT_MISMATCH|FORMAT_NOT_SUPPORTED|HEIGHT|NUM_MIP_LEVELS|NUM_SAMPLES|ROW_PITCH|SLICE_PITCH|WIDTH)|INTENSITY|INVALID_(?:ARG_INDEX|ARG_SIZE|ARG_VALUE|BINARY|BUFFER_SIZE|BUILD_OPTIONS|COMMAND_QUEUE|COMPILER_OPTIONS|CONTEXT|DEVICE|DEVICE_PARTITION_COUNT|DEVICE_QUEUE|DEVICE_TYPE|EVENT|EVENT_WAIT_LIST|GLOBAL_OFFSET|GLOBAL_WORK_SIZE|GL_OBJECT|HOST_PTR|IMAGE_DESCRIPTOR|IMAGE_FORMAT_DESCRIPTOR|IMAGE_SIZE|KERNEL|KERNEL_ARGS|KERNEL_DEFINITION|KERNEL_NAME|LINKER_OPTIONS|MEM_OBJECT|MIP_LEVEL|OPERATION|PIPE_SIZE|PLATFORM|PROGRAM|PROGRAM_EXECUTABLE|PROPERTY|QUEUE_PROPERTIES|SAMPLER|VALUE|WORK_DIMENSION|WORK_GROUP_SIZE|WORK_ITEM_SIZE)|KERNEL_(?:ARG_(?:ACCESS_(?:NONE|QUALIFIER|READ_ONLY|READ_WRITE|WRITE_ONLY)|ADDRESS_(?:CONSTANT|GLOBAL|LOCAL|PRIVATE|QUALIFIER)|INFO_NOT_AVAILABLE|NAME|TYPE_(?:CONST|NAME|NONE|PIPE|QUALIFIER|RESTRICT|VOLATILE))|ATTRIBUTES|COMPILE_NUM_SUB_GROUPS|COMPILE_WORK_GROUP_SIZE|CONTEXT|EXEC_INFO_SVM_FINE_GRAIN_SYSTEM|EXEC_INFO_SVM_PTRS|FUNCTION_NAME|GLOBAL_WORK_SIZE|LOCAL_MEM_SIZE|LOCAL_SIZE_FOR_SUB_GROUP_COUNT|MAX_NUM_SUB_GROUPS|MAX_SUB_GROUP_SIZE_FOR_NDRANGE|NUM_ARGS|PREFERRED_WORK_GROUP_SIZE_MULTIPLE|PRIVATE_MEM_SIZE|PROGRAM|REFERENCE_COUNT|SUB_GROUP_COUNT_FOR_NDRANGE|WORK_GROUP_SIZE)|LINKER_NOT_AVAILABLE|LINK_PROGRAM_FAILURE|LOCAL|LUMINANCE|MAP_(?:FAILURE|READ|WRITE|WRITE_INVALIDATE_REGION)|MEM_(?:ALLOC_HOST_PTR|ASSOCIATED_MEMOBJECT|CONTEXT|COPY_HOST_PTR|COPY_OVERLAP|FLAGS|HOST_NO_ACCESS|HOST_PTR|HOST_READ_ONLY|HOST_WRITE_ONLY|KERNEL_READ_AND_WRITE|MAP_COUNT|OBJECT_(?:ALLOCATION_FAILURE|BUFFER|IMAGE1D|IMAGE1D_ARRAY|IMAGE1D_BUFFER|IMAGE2D|IMAGE2D_ARRAY|IMAGE3D|PIPE)|OFFSET|READ_ONLY|READ_WRITE|REFERENCE_COUNT|SIZE|SVM_ATOMICS|SVM_FINE_GRAIN_BUFFER|TYPE|USES_SVM_POINTER|USE_HOST_PTR|WRITE_ONLY)|MIGRATE_MEM_OBJECT_(?:CONTENT_UNDEFINED|HOST)|MISALIGNED_SUB_BUFFER_OFFSET|NONE|NON_BLOCKING|OUT_OF_(?:HOST_MEMORY|RESOURCES)|PIPE_(?:MAX_PACKETS|PACKET_SIZE)|PLATFORM_(?:EXTENSIONS|HOST_TIMER_RESOLUTION|NAME|PROFILE|VENDOR|VERSION)|PROFILING_(?:COMMAND_(?:COMPLETE|END|QUEUED|START|SUBMIT)|INFO_NOT_AVAILABLE)|PROGRAM_(?:BINARIES|BINARY_SIZES|BINARY_TYPE(?:_COMPILED_OBJECT|_EXECUTABLE|_LIBRARY|_NONE)?|BUILD_(?:GLOBAL_VARIABLE_TOTAL_SIZE|LOG|OPTIONS|STATUS)|CONTEXT|DEVICES|IL|KERNEL_NAMES|NUM_DEVICES|NUM_KERNELS|REFERENCE_COUNT|SOURCE)|QUEUED|QUEUE_(?:CONTEXT|DEVICE|DEVICE_DEFAULT|ON_DEVICE|ON_DEVICE_DEFAULT|OUT_OF_ORDER_EXEC_MODE_ENABLE|PROFILING_ENABLE|PROPERTIES|REFERENCE_COUNT|SIZE)|R|RA|READ_(?:ONLY|WRITE)_CACHE|RG|RGB|RGBA|RGBx|RGx|RUNNING|Rx|SAMPLER_(?:ADDRESSING_MODE|CONTEXT|FILTER_MODE|LOD_MAX|LOD_MIN|MIP_FILTER_MODE|NORMALIZED_COORDS|REFERENCE_COUNT)|(?:UN)?SIGNED_INT(?:8|16|32)|SNORM_INT(?:8|16)|SUBMITTED|SUCCESS|UNORM_INT(?:8|16|24|_101010|_101010_2)|UNORM_SHORT_(?:555|565)|VERSION_(?:1_0|1_1|1_2|2_0|2_1)|sBGRA|sRGB|sRGBA|sRGBx)\b/,alias:"constant"},"function-opencl-host":{pattern:/\bcl(?:BuildProgram|CloneKernel|CompileProgram|Create(?:Buffer|CommandQueue(?:WithProperties)?|Context|ContextFromType|Image|Image2D|Image3D|Kernel|KernelsInProgram|Pipe|ProgramWith(?:Binary|BuiltInKernels|IL|Source)|Sampler|SamplerWithProperties|SubBuffer|SubDevices|UserEvent)|Enqueue(?:(?:Barrier|Marker)(?:WithWaitList)?|Copy(?:Buffer(?:Rect|ToImage)?|Image(?:ToBuffer)?)|(?:Fill|Map)(?:Buffer|Image)|MigrateMemObjects|NDRangeKernel|NativeKernel|(?:Read|Write)(?:Buffer(?:Rect)?|Image)|SVM(?:Free|Map|MemFill|Memcpy|MigrateMem|Unmap)|Task|UnmapMemObject|WaitForEvents)|Finish|Flush|Get(?:CommandQueueInfo|ContextInfo|Device(?:AndHostTimer|IDs|Info)|Event(?:Profiling)?Info|ExtensionFunctionAddress(?:ForPlatform)?|HostTimer|ImageInfo|Kernel(?:ArgInfo|Info|SubGroupInfo|WorkGroupInfo)|MemObjectInfo|PipeInfo|Platform(?:IDs|Info)|Program(?:Build)?Info|SamplerInfo|SupportedImageFormats)|LinkProgram|(?:Release|Retain)(?:CommandQueue|Context|Device|Event|Kernel|MemObject|Program|Sampler)|SVM(?:Alloc|Free)|Set(?:CommandQueueProperty|DefaultDeviceCommandQueue|EventCallback|Kernel|Kernel(?:Arg(?:SVMPointer)?|ExecInfo)|MemObjectDestructorCallback|UserEventStatus)|Unload(?:Platform)?Compiler|WaitForEvents)\b/,alias:"function"}};r.languages.insertBefore("c","keyword",a),r.languages.cpp&&(a["type-opencl-host-cpp"]={pattern:/\b(?:Buffer|BufferGL|BufferRenderGL|CommandQueue|Context|Device|DeviceCommandQueue|EnqueueArgs|Event|Image|Image1D|Image1DArray|Image1DBuffer|Image2D|Image2DArray|Image2DGL|Image3D|Image3DGL|ImageFormat|ImageGL|Kernel|KernelFunctor|LocalSpaceArg|Memory|NDRange|Pipe|Platform|Program|SVMAllocator|SVMTraitAtomic|SVMTraitCoarse|SVMTraitFine|SVMTraitReadOnly|SVMTraitReadWrite|SVMTraitWriteOnly|Sampler|UserEvent)\b/,alias:"keyword"},r.languages.insertBefore("cpp","keyword",a))}(n)}return nd}var rd,qv;function Oq(){if(qv)return rd;qv=1,rd=e,e.displayName="openqasm",e.aliases=["qasm"];function e(t){t.languages.openqasm={comment:/\/\*[\s\S]*?\*\/|\/\/.*/,string:{pattern:/"[^"\r\n\t]*"|'[^'\r\n\t]*'/,greedy:!0},keyword:/\b(?:CX|OPENQASM|U|barrier|boxas|boxto|break|const|continue|ctrl|def|defcal|defcalgrammar|delay|else|end|for|gate|gphase|if|in|include|inv|kernel|lengthof|let|measure|pow|reset|return|rotary|stretchinf|while)\b|#pragma\b/,"class-name":/\b(?:angle|bit|bool|creg|fixed|float|int|length|qreg|qubit|stretch|uint)\b/,function:/\b(?:cos|exp|ln|popcount|rotl|rotr|sin|sqrt|tan)\b(?=\s*\()/,constant:/\b(?:euler|pi|tau)\b|π|𝜏|ℇ/,number:{pattern:/(^|[^.\w$])(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?(?:dt|ns|us|µs|ms|s)?/i,lookbehind:!0},operator:/->|>>=?|<<=?|&&|\|\||\+\+|--|[!=<>&|~^+\-*/%]=?|@/,punctuation:/[(){}\[\];,:.]/},t.languages.qasm=t.languages.openqasm}return rd}var ad,jv;function Lq(){if(jv)return ad;jv=1,ad=e,e.displayName="oz",e.aliases=[];function e(t){t.languages.oz={comment:{pattern:/\/\*[\s\S]*?\*\/|%.*/,greedy:!0},string:{pattern:/"(?:[^"\\]|\\[\s\S])*"/,greedy:!0},atom:{pattern:/'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,alias:"builtin"},keyword:/\$|\[\]|\b(?:_|at|attr|case|catch|choice|class|cond|declare|define|dis|else(?:case|if)?|end|export|fail|false|feat|finally|from|fun|functor|if|import|in|local|lock|meth|nil|not|of|or|prepare|proc|prop|raise|require|self|skip|then|thread|true|try|unit)\b/,function:[/\b[a-z][A-Za-z\d]*(?=\()/,{pattern:/(\{)[A-Z][A-Za-z\d]*\b/,lookbehind:!0}],number:/\b(?:0[bx][\da-f]+|\d+(?:\.\d*)?(?:e~?\d+)?)\b|&(?:[^\\]|\\(?:\d{3}|.))/i,variable:/`(?:[^`\\]|\\.)+`/,"attr-name":/\b\w+(?=[ \t]*:(?![:=]))/,operator:/:(?:=|::?)|<[-:=]?|=(?:=|=?:?|\\=:?|!!?|[|#+\-*\/,~^@]|\b(?:andthen|div|mod|orelse)\b/,punctuation:/[\[\](){}.:;?]/}}return ad}var id,Hv;function Dq(){if(Hv)return id;Hv=1,id=e,e.displayName="parigp",e.aliases=[];function e(t){t.languages.parigp={comment:/\/\*[\s\S]*?\*\/|\\\\.*/,string:{pattern:/"(?:[^"\\\r\n]|\\.)*"/,greedy:!0},keyword:function(){var n=["breakpoint","break","dbg_down","dbg_err","dbg_up","dbg_x","forcomposite","fordiv","forell","forpart","forprime","forstep","forsubgroup","forvec","for","iferr","if","local","my","next","return","until","while"];return n=n.map(function(r){return r.split("").join(" *")}).join("|"),RegExp("\\b(?:"+n+")\\b")}(),function:/\b\w(?:[\w ]*\w)?(?= *\()/,number:{pattern:/((?:\. *\. *)?)(?:\b\d(?: *\d)*(?: *(?!\. *\.)\.(?: *\d)*)?|\. *\d(?: *\d)*)(?: *e *(?:[+-] *)?\d(?: *\d)*)?/i,lookbehind:!0},operator:/\. *\.|[*\/!](?: *=)?|%(?: *=|(?: *#)?(?: *')*)?|\+(?: *[+=])?|-(?: *[-=>])?|<(?: *>|(?: *<)?(?: *=)?)?|>(?: *>)?(?: *=)?|=(?: *=){0,2}|\\(?: *\/)?(?: *=)?|&(?: *&)?|\| *\||['#~^]/,punctuation:/[\[\]{}().,:;|]/}}return id}var od,Vv;function Mq(){if(Vv)return od;Vv=1,od=e,e.displayName="parser",e.aliases=[];function e(t){(function(n){var r=n.languages.parser=n.languages.extend("markup",{keyword:{pattern:/(^|[^^])(?:\^(?:case|eval|for|if|switch|throw)\b|@(?:BASE|CLASS|GET(?:_DEFAULT)?|OPTIONS|SET_DEFAULT|USE)\b)/,lookbehind:!0},variable:{pattern:/(^|[^^])\B\$(?:\w+|(?=[.{]))(?:(?:\.|::?)\w+)*(?:\.|::?)?/,lookbehind:!0,inside:{punctuation:/\.|:+/}},function:{pattern:/(^|[^^])\B[@^]\w+(?:(?:\.|::?)\w+)*(?:\.|::?)?/,lookbehind:!0,inside:{keyword:{pattern:/(^@)(?:GET_|SET_)/,lookbehind:!0},punctuation:/\.|:+/}},escape:{pattern:/\^(?:[$^;@()\[\]{}"':]|#[a-f\d]*)/i,alias:"builtin"},punctuation:/[\[\](){};]/});r=n.languages.insertBefore("parser","keyword",{"parser-comment":{pattern:/(\s)#.*/,lookbehind:!0,alias:"comment"},expression:{pattern:/(^|[^^])\((?:[^()]|\((?:[^()]|\((?:[^()])*\))*\))*\)/,greedy:!0,lookbehind:!0,inside:{string:{pattern:/(^|[^^])(["'])(?:(?!\2)[^^]|\^[\s\S])*\2/,lookbehind:!0},keyword:r.keyword,variable:r.variable,function:r.function,boolean:/\b(?:false|true)\b/,number:/\b(?:0x[a-f\d]+|\d+(?:\.\d*)?(?:e[+-]?\d+)?)\b/i,escape:r.escape,operator:/[~+*\/\\%]|!(?:\|\|?|=)?|&&?|\|\|?|==|<[<=]?|>[>=]?|-[fd]?|\b(?:def|eq|ge|gt|in|is|le|lt|ne)\b/,punctuation:r.punctuation}}}),n.languages.insertBefore("inside","punctuation",{expression:r.expression,keyword:r.keyword,variable:r.variable,function:r.function,escape:r.escape,"parser-punctuation":{pattern:r.punctuation,alias:"punctuation"}},r.tag.inside["attr-value"])})(t)}return od}var sd,Wv;function Fq(){if(Wv)return sd;Wv=1,sd=e,e.displayName="pascal",e.aliases=["objectpascal"];function e(t){t.languages.pascal={directive:{pattern:/\{\$[\s\S]*?\}/,greedy:!0,alias:["marco","property"]},comment:{pattern:/\(\*[\s\S]*?\*\)|\{[\s\S]*?\}|\/\/.*/,greedy:!0},string:{pattern:/(?:'(?:''|[^'\r\n])*'(?!')|#[&$%]?[a-f\d]+)+|\^[a-z]/i,greedy:!0},asm:{pattern:/(\basm\b)[\s\S]+?(?=\bend\s*[;[])/i,lookbehind:!0,greedy:!0,inside:null},keyword:[{pattern:/(^|[^&])\b(?:absolute|array|asm|begin|case|const|constructor|destructor|do|downto|else|end|file|for|function|goto|if|implementation|inherited|inline|interface|label|nil|object|of|operator|packed|procedure|program|record|reintroduce|repeat|self|set|string|then|to|type|unit|until|uses|var|while|with)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:dispose|exit|false|new|true)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:class|dispinterface|except|exports|finalization|finally|initialization|inline|library|on|out|packed|property|raise|resourcestring|threadvar|try)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:absolute|abstract|alias|assembler|bitpacked|break|cdecl|continue|cppdecl|cvar|default|deprecated|dynamic|enumerator|experimental|export|external|far|far16|forward|generic|helper|implements|index|interrupt|iochecks|local|message|name|near|nodefault|noreturn|nostackframe|oldfpccall|otherwise|overload|override|pascal|platform|private|protected|public|published|read|register|reintroduce|result|safecall|saveregisters|softfloat|specialize|static|stdcall|stored|strict|unaligned|unimplemented|varargs|virtual|write)\b/i,lookbehind:!0}],number:[/(?:[&%]\d+|\$[a-f\d]+)/i,/\b\d+(?:\.\d+)?(?:e[+-]?\d+)?/i],operator:[/\.\.|\*\*|:=|<[<=>]?|>[>=]?|[+\-*\/]=?|[@^=]/,{pattern:/(^|[^&])\b(?:and|as|div|exclude|in|include|is|mod|not|or|shl|shr|xor)\b/,lookbehind:!0}],punctuation:/\(\.|\.\)|[()\[\]:;,.]/},t.languages.pascal.asm.inside=t.languages.extend("pascal",{asm:void 0,keyword:void 0,operator:void 0}),t.languages.objectpascal=t.languages.pascal}return sd}var ld,Yv;function Pq(){if(Yv)return ld;Yv=1,ld=e,e.displayName="pascaligo",e.aliases=[];function e(t){(function(n){var r=/\((?:[^()]|\((?:[^()]|\([^()]*\))*\))*\)/.source,a=/(?:\b\w+(?:)?|)/.source.replace(//g,function(){return r}),i=n.languages.pascaligo={comment:/\(\*[\s\S]+?\*\)|\/\/.*/,string:{pattern:/(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1|\^[a-z]/i,greedy:!0},"class-name":[{pattern:RegExp(/(\btype\s+\w+\s+is\s+)/.source.replace(//g,function(){return a}),"i"),lookbehind:!0,inside:null},{pattern:RegExp(/(?=\s+is\b)/.source.replace(//g,function(){return a}),"i"),inside:null},{pattern:RegExp(/(:\s*)/.source.replace(//g,function(){return a})),lookbehind:!0,inside:null}],keyword:{pattern:/(^|[^&])\b(?:begin|block|case|const|else|end|fail|for|from|function|if|is|nil|of|remove|return|skip|then|type|var|while|with)\b/i,lookbehind:!0},boolean:{pattern:/(^|[^&])\b(?:False|True)\b/i,lookbehind:!0},builtin:{pattern:/(^|[^&])\b(?:bool|int|list|map|nat|record|string|unit)\b/i,lookbehind:!0},function:/\b\w+(?=\s*\()/,number:[/%[01]+|&[0-7]+|\$[a-f\d]+/i,/\b\d+(?:\.\d+)?(?:e[+-]?\d+)?(?:mtz|n)?/i],operator:/->|=\/=|\.\.|\*\*|:=|<[<=>]?|>[>=]?|[+\-*\/]=?|[@^=|]|\b(?:and|mod|or)\b/,punctuation:/\(\.|\.\)|[()\[\]:;,.{}]/},o=["comment","keyword","builtin","operator","punctuation"].reduce(function(s,l){return s[l]=i[l],s},{});i["class-name"].forEach(function(s){s.inside=o})})(t)}return ld}var ud,Kv;function Uq(){if(Kv)return ud;Kv=1,ud=e,e.displayName="pcaxis",e.aliases=["px"];function e(t){t.languages.pcaxis={string:/"[^"]*"/,keyword:{pattern:/((?:^|;)\s*)[-A-Z\d]+(?:\s*\[[-\w]+\])?(?:\s*\("[^"]*"(?:,\s*"[^"]*")*\))?(?=\s*=)/,lookbehind:!0,greedy:!0,inside:{keyword:/^[-A-Z\d]+/,language:{pattern:/^(\s*)\[[-\w]+\]/,lookbehind:!0,inside:{punctuation:/^\[|\]$/,property:/[-\w]+/}},"sub-key":{pattern:/^(\s*)\S[\s\S]*/,lookbehind:!0,inside:{parameter:{pattern:/"[^"]*"/,alias:"property"},punctuation:/^\(|\)$|,/}}}},operator:/=/,tlist:{pattern:/TLIST\s*\(\s*\w+(?:(?:\s*,\s*"[^"]*")+|\s*,\s*"[^"]*"-"[^"]*")?\s*\)/,greedy:!0,inside:{function:/^TLIST/,property:{pattern:/^(\s*\(\s*)\w+/,lookbehind:!0},string:/"[^"]*"/,punctuation:/[(),]/,operator:/-/}},punctuation:/[;,]/,number:{pattern:/(^|\s)\d+(?:\.\d+)?(?!\S)/,lookbehind:!0},boolean:/NO|YES/},t.languages.px=t.languages.pcaxis}return ud}var cd,Xv;function Bq(){if(Xv)return cd;Xv=1,cd=e,e.displayName="peoplecode",e.aliases=["pcode"];function e(t){t.languages.peoplecode={comment:RegExp([/\/\*[\s\S]*?\*\//.source,/\bREM[^;]*;/.source,/<\*(?:[^<*]|\*(?!>)|<(?!\*)|<\*(?:(?!\*>)[\s\S])*\*>)*\*>/.source,/\/\+[\s\S]*?\+\//.source].join("|")),string:{pattern:/'(?:''|[^'\r\n])*'(?!')|"(?:""|[^"\r\n])*"(?!")/,greedy:!0},variable:/%\w+/,"function-definition":{pattern:/((?:^|[^\w-])(?:function|method)\s+)\w+/i,lookbehind:!0,alias:"function"},"class-name":{pattern:/((?:^|[^-\w])(?:as|catch|class|component|create|extends|global|implements|instance|local|of|property|returns)\s+)\w+(?::\w+)*/i,lookbehind:!0,inside:{punctuation:/:/}},keyword:/\b(?:abstract|alias|as|catch|class|component|constant|create|declare|else|end-(?:class|evaluate|for|function|get|if|method|set|try|while)|evaluate|extends|for|function|get|global|if|implements|import|instance|library|local|method|null|of|out|peopleCode|private|program|property|protected|readonly|ref|repeat|returns?|set|step|then|throw|to|try|until|value|when(?:-other)?|while)\b/i,"operator-keyword":{pattern:/\b(?:and|not|or)\b/i,alias:"operator"},function:/[_a-z]\w*(?=\s*\()/i,boolean:/\b(?:false|true)\b/i,number:/\b\d+(?:\.\d+)?\b/,operator:/<>|[<>]=?|!=|\*\*|[-+*/|=@]/,punctuation:/[:.;,()[\]]/},t.languages.pcode=t.languages.peoplecode}return cd}var dd,Zv;function $q(){if(Zv)return dd;Zv=1,dd=e,e.displayName="perl",e.aliases=[];function e(t){(function(n){var r=/(?:\((?:[^()\\]|\\[\s\S])*\)|\{(?:[^{}\\]|\\[\s\S])*\}|\[(?:[^[\]\\]|\\[\s\S])*\]|<(?:[^<>\\]|\\[\s\S])*>)/.source;n.languages.perl={comment:[{pattern:/(^\s*)=\w[\s\S]*?=cut.*/m,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\$])#.*/,lookbehind:!0,greedy:!0}],string:[{pattern:RegExp(/\b(?:q|qq|qw|qx)(?![a-zA-Z0-9])\s*/.source+"(?:"+[/([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/([a-zA-Z0-9])(?:(?!\2)[^\\]|\\[\s\S])*\2/.source,r].join("|")+")"),greedy:!0},{pattern:/("|`)(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0},{pattern:/'(?:[^'\\\r\n]|\\.)*'/,greedy:!0}],regex:[{pattern:RegExp(/\b(?:m|qr)(?![a-zA-Z0-9])\s*/.source+"(?:"+[/([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/([a-zA-Z0-9])(?:(?!\2)[^\\]|\\[\s\S])*\2/.source,r].join("|")+")"+/[msixpodualngc]*/.source),greedy:!0},{pattern:RegExp(/(^|[^-])\b(?:s|tr|y)(?![a-zA-Z0-9])\s*/.source+"(?:"+[/([^a-zA-Z0-9\s{(\[<])(?:(?!\2)[^\\]|\\[\s\S])*\2(?:(?!\2)[^\\]|\\[\s\S])*\2/.source,/([a-zA-Z0-9])(?:(?!\3)[^\\]|\\[\s\S])*\3(?:(?!\3)[^\\]|\\[\s\S])*\3/.source,r+/\s*/.source+r].join("|")+")"+/[msixpodualngcer]*/.source),lookbehind:!0,greedy:!0},{pattern:/\/(?:[^\/\\\r\n]|\\.)*\/[msixpodualngc]*(?=\s*(?:$|[\r\n,.;})&|\-+*~<>!?^]|(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|x|xor)\b))/,greedy:!0}],variable:[/[&*$@%]\{\^[A-Z]+\}/,/[&*$@%]\^[A-Z_]/,/[&*$@%]#?(?=\{)/,/[&*$@%]#?(?:(?:::)*'?(?!\d)[\w$]+(?![\w$]))+(?:::)*/,/[&*$@%]\d+/,/(?!%=)[$@%][!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~]/],filehandle:{pattern:/<(?![<=])\S*?>|\b_\b/,alias:"symbol"},"v-string":{pattern:/v\d+(?:\.\d+)*|\d+(?:\.\d+){2,}/,alias:"string"},function:{pattern:/(\bsub[ \t]+)\w+/,lookbehind:!0},keyword:/\b(?:any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|return|say|state|sub|switch|undef|unless|until|use|when|while)\b/,number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)\b/,operator:/-[rwxoRWXOezsfdlpSbctugkTBMAC]\b|\+[+=]?|-[-=>]?|\*\*?=?|\/\/?=?|=[=~>]?|~[~=]?|\|\|?=?|&&?=?|<(?:=>?|<=?)?|>>?=?|![~=]?|[%^]=?|\.(?:=|\.\.?)?|[\\?]|\bx(?:=|\b)|\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)\b/,punctuation:/[{}[\];(),:]/}})(t)}return dd}var pd,Qv;function zq(){if(Qv)return pd;Qv=1;var e=Jo();pd=t,t.displayName="phpExtras",t.aliases=[];function t(n){n.register(e),n.languages.insertBefore("php","variable",{this:{pattern:/\$this\b/,alias:"keyword"},global:/\$(?:GLOBALS|HTTP_RAW_POST_DATA|_(?:COOKIE|ENV|FILES|GET|POST|REQUEST|SERVER|SESSION)|argc|argv|http_response_header|php_errormsg)\b/,scope:{pattern:/\b[\w\\]+::/,inside:{keyword:/\b(?:parent|self|static)\b/,punctuation:/::|\\/}}})}return pd}var fd,Jv;function Gq(){if(Jv)return fd;Jv=1;var e=Jo(),t=Qo();fd=n,n.displayName="phpdoc",n.aliases=[];function n(r){r.register(e),r.register(t),function(a){var i=/(?:\b[a-zA-Z]\w*|[|\\[\]])+/.source;a.languages.phpdoc=a.languages.extend("javadoclike",{parameter:{pattern:RegExp("(@(?:global|param|property(?:-read|-write)?|var)\\s+(?:"+i+"\\s+)?)\\$\\w+"),lookbehind:!0}}),a.languages.insertBefore("phpdoc","keyword",{"class-name":[{pattern:RegExp("(@(?:global|package|param|property(?:-read|-write)?|return|subpackage|throws|var)\\s+)"+i),lookbehind:!0,inside:{keyword:/\b(?:array|bool|boolean|callback|double|false|float|int|integer|mixed|null|object|resource|self|string|true|void)\b/,punctuation:/[|\\[\]()]/}}]}),a.languages.javadoclike.addSupport("php",a.languages.phpdoc)}(r)}return fd}var gd,ek;function qq(){if(ek)return gd;ek=1;var e=Bm();gd=t,t.displayName="plsql",t.aliases=[];function t(n){n.register(e),n.languages.plsql=n.languages.extend("sql",{comment:{pattern:/\/\*[\s\S]*?\*\/|--.*/,greedy:!0},keyword:/\b(?:A|ACCESSIBLE|ADD|AGENT|AGGREGATE|ALL|ALTER|AND|ANY|ARRAY|AS|ASC|AT|ATTRIBUTE|AUTHID|AVG|BEGIN|BETWEEN|BFILE_BASE|BINARY|BLOB_BASE|BLOCK|BODY|BOTH|BOUND|BULK|BY|BYTE|C|CALL|CALLING|CASCADE|CASE|CHAR|CHARACTER|CHARSET|CHARSETFORM|CHARSETID|CHAR_BASE|CHECK|CLOB_BASE|CLONE|CLOSE|CLUSTER|CLUSTERS|COLAUTH|COLLECT|COLUMNS|COMMENT|COMMIT|COMMITTED|COMPILED|COMPRESS|CONNECT|CONSTANT|CONSTRUCTOR|CONTEXT|CONTINUE|CONVERT|COUNT|CRASH|CREATE|CREDENTIAL|CURRENT|CURSOR|CUSTOMDATUM|DANGLING|DATA|DATE|DATE_BASE|DAY|DECLARE|DEFAULT|DEFINE|DELETE|DESC|DETERMINISTIC|DIRECTORY|DISTINCT|DOUBLE|DROP|DURATION|ELEMENT|ELSE|ELSIF|EMPTY|END|ESCAPE|EXCEPT|EXCEPTION|EXCEPTIONS|EXCLUSIVE|EXECUTE|EXISTS|EXIT|EXTERNAL|FETCH|FINAL|FIRST|FIXED|FLOAT|FOR|FORALL|FORCE|FROM|FUNCTION|GENERAL|GOTO|GRANT|GROUP|HASH|HAVING|HEAP|HIDDEN|HOUR|IDENTIFIED|IF|IMMEDIATE|IMMUTABLE|IN|INCLUDING|INDEX|INDEXES|INDICATOR|INDICES|INFINITE|INSERT|INSTANTIABLE|INT|INTERFACE|INTERSECT|INTERVAL|INTO|INVALIDATE|IS|ISOLATION|JAVA|LANGUAGE|LARGE|LEADING|LENGTH|LEVEL|LIBRARY|LIKE|LIKE2|LIKE4|LIKEC|LIMIT|LIMITED|LOCAL|LOCK|LONG|LOOP|MAP|MAX|MAXLEN|MEMBER|MERGE|MIN|MINUS|MINUTE|MOD|MODE|MODIFY|MONTH|MULTISET|MUTABLE|NAME|NAN|NATIONAL|NATIVE|NCHAR|NEW|NOCOMPRESS|NOCOPY|NOT|NOWAIT|NULL|NUMBER_BASE|OBJECT|OCICOLL|OCIDATE|OCIDATETIME|OCIDURATION|OCIINTERVAL|OCILOBLOCATOR|OCINUMBER|OCIRAW|OCIREF|OCIREFCURSOR|OCIROWID|OCISTRING|OCITYPE|OF|OLD|ON|ONLY|OPAQUE|OPEN|OPERATOR|OPTION|OR|ORACLE|ORADATA|ORDER|ORGANIZATION|ORLANY|ORLVARY|OTHERS|OUT|OVERLAPS|OVERRIDING|PACKAGE|PARALLEL_ENABLE|PARAMETER|PARAMETERS|PARENT|PARTITION|PASCAL|PERSISTABLE|PIPE|PIPELINED|PLUGGABLE|POLYMORPHIC|PRAGMA|PRECISION|PRIOR|PRIVATE|PROCEDURE|PUBLIC|RAISE|RANGE|RAW|READ|RECORD|REF|REFERENCE|RELIES_ON|REM|REMAINDER|RENAME|RESOURCE|RESULT|RESULT_CACHE|RETURN|RETURNING|REVERSE|REVOKE|ROLLBACK|ROW|SAMPLE|SAVE|SAVEPOINT|SB1|SB2|SB4|SECOND|SEGMENT|SELECT|SELF|SEPARATE|SEQUENCE|SERIALIZABLE|SET|SHARE|SHORT|SIZE|SIZE_T|SOME|SPARSE|SQL|SQLCODE|SQLDATA|SQLNAME|SQLSTATE|STANDARD|START|STATIC|STDDEV|STORED|STRING|STRUCT|STYLE|SUBMULTISET|SUBPARTITION|SUBSTITUTABLE|SUBTYPE|SUM|SYNONYM|TABAUTH|TABLE|TDO|THE|THEN|TIME|TIMESTAMP|TIMEZONE_ABBR|TIMEZONE_HOUR|TIMEZONE_MINUTE|TIMEZONE_REGION|TO|TRAILING|TRANSACTION|TRANSACTIONAL|TRUSTED|TYPE|UB1|UB2|UB4|UNDER|UNION|UNIQUE|UNPLUG|UNSIGNED|UNTRUSTED|UPDATE|USE|USING|VALIST|VALUE|VALUES|VARIABLE|VARIANCE|VARRAY|VARYING|VIEW|VIEWS|VOID|WHEN|WHERE|WHILE|WITH|WORK|WRAPPED|WRITE|YEAR|ZONE)\b/i,operator:/:=?|=>|[<>^~!]=|\.\.|\|\||\*\*|[-+*/%<>=@]/}),n.languages.insertBefore("plsql","operator",{label:{pattern:/<<\s*\w+\s*>>/,alias:"symbol"}})}return gd}var md,tk;function jq(){if(tk)return md;tk=1,md=e,e.displayName="powerquery",e.aliases=[];function e(t){t.languages.powerquery={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},"quoted-identifier":{pattern:/#"(?:[^"\r\n]|"")*"(?!")/,greedy:!0},string:{pattern:/(?:#!)?"(?:[^"\r\n]|"")*"(?!")/,greedy:!0},constant:[/\bDay\.(?:Friday|Monday|Saturday|Sunday|Thursday|Tuesday|Wednesday)\b/,/\bTraceLevel\.(?:Critical|Error|Information|Verbose|Warning)\b/,/\bOccurrence\.(?:All|First|Last)\b/,/\bOrder\.(?:Ascending|Descending)\b/,/\bRoundingMode\.(?:AwayFromZero|Down|ToEven|TowardZero|Up)\b/,/\bMissingField\.(?:Error|Ignore|UseNull)\b/,/\bQuoteStyle\.(?:Csv|None)\b/,/\bJoinKind\.(?:FullOuter|Inner|LeftAnti|LeftOuter|RightAnti|RightOuter)\b/,/\bGroupKind\.(?:Global|Local)\b/,/\bExtraValues\.(?:Error|Ignore|List)\b/,/\bJoinAlgorithm\.(?:Dynamic|LeftHash|LeftIndex|PairwiseHash|RightHash|RightIndex|SortMerge)\b/,/\bJoinSide\.(?:Left|Right)\b/,/\bPrecision\.(?:Decimal|Double)\b/,/\bRelativePosition\.From(?:End|Start)\b/,/\bTextEncoding\.(?:Ascii|BigEndianUnicode|Unicode|Utf16|Utf8|Windows)\b/,/\b(?:Any|Binary|Date|DateTime|DateTimeZone|Duration|Function|Int16|Int32|Int64|Int8|List|Logical|None|Number|Record|Table|Text|Time)\.Type\b/,/\bnull\b/],boolean:/\b(?:false|true)\b/,keyword:/\b(?:and|as|each|else|error|if|in|is|let|meta|not|nullable|optional|or|otherwise|section|shared|then|try|type)\b|#(?:binary|date|datetime|datetimezone|duration|infinity|nan|sections|shared|table|time)\b/,function:{pattern:/(^|[^#\w.])[a-z_][\w.]*(?=\s*\()/i,lookbehind:!0},"data-type":{pattern:/\b(?:any|anynonnull|binary|date|datetime|datetimezone|duration|function|list|logical|none|number|record|table|text|time)\b/,alias:"class-name"},number:{pattern:/\b0x[\da-f]+\b|(?:[+-]?(?:\b\d+\.)?\b\d+|[+-]\.\d+|(^|[^.])\B\.\d+)(?:e[+-]?\d+)?\b/i,lookbehind:!0},operator:/[-+*\/&?@^]|<(?:=>?|>)?|>=?|=>?|\.\.\.?/,punctuation:/[,;\[\](){}]/},t.languages.pq=t.languages.powerquery,t.languages.mscript=t.languages.powerquery}return md}var hd,nk;function Hq(){if(nk)return hd;nk=1,hd=e,e.displayName="powershell",e.aliases=[];function e(t){(function(n){var r=n.languages.powershell={comment:[{pattern:/(^|[^`])<#[\s\S]*?#>/,lookbehind:!0},{pattern:/(^|[^`])#.*/,lookbehind:!0}],string:[{pattern:/"(?:`[\s\S]|[^`"])*"/,greedy:!0,inside:null},{pattern:/'(?:[^']|'')*'/,greedy:!0}],namespace:/\[[a-z](?:\[(?:\[[^\]]*\]|[^\[\]])*\]|[^\[\]])*\]/i,boolean:/\$(?:false|true)\b/i,variable:/\$\w+\b/,function:[/\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\b/i,/\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i],keyword:/\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,operator:{pattern:/(^|\W)(?:!|-(?:b?(?:and|x?or)|as|(?:Not)?(?:Contains|In|Like|Match)|eq|ge|gt|is(?:Not)?|Join|le|lt|ne|not|Replace|sh[lr])\b|-[-=]?|\+[+=]?|[*\/%]=?)/i,lookbehind:!0},punctuation:/[|{}[\];(),.]/};r.string[0].inside={function:{pattern:/(^|[^`])\$\((?:\$\([^\r\n()]*\)|(?!\$\()[^\r\n)])*\)/,lookbehind:!0,inside:r},boolean:r.boolean,variable:r.variable}})(t)}return hd}var bd,rk;function Vq(){if(rk)return bd;rk=1,bd=e,e.displayName="processing",e.aliases=[];function e(t){t.languages.processing=t.languages.extend("clike",{keyword:/\b(?:break|case|catch|class|continue|default|else|extends|final|for|if|implements|import|new|null|private|public|return|static|super|switch|this|try|void|while)\b/,function:/\b\w+(?=\s*\()/,operator:/<[<=]?|>[>=]?|&&?|\|\|?|[%?]|[!=+\-*\/]=?/}),t.languages.insertBefore("processing","number",{constant:/\b(?!XML\b)[A-Z][A-Z\d_]+\b/,type:{pattern:/\b(?:boolean|byte|char|color|double|float|int|[A-Z]\w*)\b/,alias:"class-name"}})}return bd}var yd,ak;function Wq(){if(ak)return yd;ak=1,yd=e,e.displayName="prolog",e.aliases=[];function e(t){t.languages.prolog={comment:{pattern:/\/\*[\s\S]*?\*\/|%.*/,greedy:!0},string:{pattern:/(["'])(?:\1\1|\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1(?!\1)/,greedy:!0},builtin:/\b(?:fx|fy|xf[xy]?|yfx?)\b/,function:/\b[a-z]\w*(?:(?=\()|\/\d+)/,number:/\b\d+(?:\.\d*)?/,operator:/[:\\=><\-?*@\/;+^|!$.]+|\b(?:is|mod|not|xor)\b/,punctuation:/[(){}\[\],]/}}return yd}var Ed,ik;function Yq(){if(ik)return Ed;ik=1,Ed=e,e.displayName="promql",e.aliases=[];function e(t){(function(n){var r=["sum","min","max","avg","group","stddev","stdvar","count","count_values","bottomk","topk","quantile"],a=["on","ignoring","group_right","group_left","by","without"],i=["offset"],o=r.concat(a,i);n.languages.promql={comment:{pattern:/(^[ \t]*)#.*/m,lookbehind:!0},"vector-match":{pattern:new RegExp("((?:"+a.join("|")+")\\s*)\\([^)]*\\)"),lookbehind:!0,inside:{"label-key":{pattern:/\b[^,]+\b/,alias:"attr-name"},punctuation:/[(),]/}},"context-labels":{pattern:/\{[^{}]*\}/,inside:{"label-key":{pattern:/\b[a-z_]\w*(?=\s*(?:=|![=~]))/,alias:"attr-name"},"label-value":{pattern:/(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0,alias:"attr-value"},punctuation:/\{|\}|=~?|![=~]|,/}},"context-range":[{pattern:/\[[\w\s:]+\]/,inside:{punctuation:/\[|\]|:/,"range-duration":{pattern:/\b(?:\d+(?:[smhdwy]|ms))+\b/i,alias:"number"}}},{pattern:/(\boffset\s+)\w+/,lookbehind:!0,inside:{"range-duration":{pattern:/\b(?:\d+(?:[smhdwy]|ms))+\b/i,alias:"number"}}}],keyword:new RegExp("\\b(?:"+o.join("|")+")\\b","i"),function:/\b[a-z_]\w*(?=\s*\()/i,number:/[-+]?(?:(?:\b\d+(?:\.\d+)?|\B\.\d+)(?:e[-+]?\d+)?\b|\b(?:0x[0-9a-f]+|nan|inf)\b)/i,operator:/[\^*/%+-]|==|!=|<=|<|>=|>|\b(?:and|or|unless)\b/i,punctuation:/[{};()`,.[\]]/}})(t)}return Ed}var Sd,ok;function Kq(){if(ok)return Sd;ok=1,Sd=e,e.displayName="properties",e.aliases=[];function e(t){t.languages.properties={comment:/^[ \t]*[#!].*$/m,"attr-value":{pattern:/(^[ \t]*(?:\\(?:\r\n|[\s\S])|[^\\\s:=])+(?: *[=:] *(?! )| ))(?:\\(?:\r\n|[\s\S])|[^\\\r\n])+/m,lookbehind:!0},"attr-name":/^[ \t]*(?:\\(?:\r\n|[\s\S])|[^\\\s:=])+(?= *[=:]| )/m,punctuation:/[=:]/}}return Sd}var vd,sk;function Xq(){if(sk)return vd;sk=1,vd=e,e.displayName="protobuf",e.aliases=[];function e(t){(function(n){var r=/\b(?:bool|bytes|double|s?fixed(?:32|64)|float|[su]?int(?:32|64)|string)\b/;n.languages.protobuf=n.languages.extend("clike",{"class-name":[{pattern:/(\b(?:enum|extend|message|service)\s+)[A-Za-z_]\w*(?=\s*\{)/,lookbehind:!0},{pattern:/(\b(?:rpc\s+\w+|returns)\s*\(\s*(?:stream\s+)?)\.?[A-Za-z_]\w*(?:\.[A-Za-z_]\w*)*(?=\s*\))/,lookbehind:!0}],keyword:/\b(?:enum|extend|extensions|import|message|oneof|option|optional|package|public|repeated|required|reserved|returns|rpc(?=\s+\w)|service|stream|syntax|to)\b(?!\s*=\s*\d)/,function:/\b[a-z_]\w*(?=\s*\()/i}),n.languages.insertBefore("protobuf","operator",{map:{pattern:/\bmap<\s*[\w.]+\s*,\s*[\w.]+\s*>(?=\s+[a-z_]\w*\s*[=;])/i,alias:"class-name",inside:{punctuation:/[<>.,]/,builtin:r}},builtin:r,"positional-class-name":{pattern:/(?:\b|\B\.)[a-z_]\w*(?:\.[a-z_]\w*)*(?=\s+[a-z_]\w*\s*[=;])/i,alias:"class-name",inside:{punctuation:/\./}},annotation:{pattern:/(\[\s*)[a-z_]\w*(?=\s*=)/i,lookbehind:!0}})})(t)}return vd}var kd,lk;function Zq(){if(lk)return kd;lk=1,kd=e,e.displayName="psl",e.aliases=[];function e(t){t.languages.psl={comment:{pattern:/#.*/,greedy:!0},string:{pattern:/"(?:\\.|[^\\"])*"/,greedy:!0,inside:{symbol:/\\[ntrbA-Z"\\]/}},"heredoc-string":{pattern:/<<<([a-zA-Z_]\w*)[\r\n](?:.*[\r\n])*?\1\b/,alias:"string",greedy:!0},keyword:/\b(?:__multi|__single|case|default|do|else|elsif|exit|export|for|foreach|function|if|last|line|local|next|requires|return|switch|until|while|word)\b/,constant:/\b(?:ALARM|CHART_ADD_GRAPH|CHART_DELETE_GRAPH|CHART_DESTROY|CHART_LOAD|CHART_PRINT|EOF|OFFLINE|OK|PSL_PROF_LOG|R_CHECK_HORIZ|R_CHECK_VERT|R_CLICKER|R_COLUMN|R_FRAME|R_ICON|R_LABEL|R_LABEL_CENTER|R_LIST_MULTIPLE|R_LIST_MULTIPLE_ND|R_LIST_SINGLE|R_LIST_SINGLE_ND|R_MENU|R_POPUP|R_POPUP_SCROLLED|R_RADIO_HORIZ|R_RADIO_VERT|R_ROW|R_SCALE_HORIZ|R_SCALE_VERT|R_SEP_HORIZ|R_SEP_VERT|R_SPINNER|R_TEXT_FIELD|R_TEXT_FIELD_LABEL|R_TOGGLE|TRIM_LEADING|TRIM_LEADING_AND_TRAILING|TRIM_REDUNDANT|TRIM_TRAILING|VOID|WARN)\b/,boolean:/\b(?:FALSE|False|NO|No|TRUE|True|YES|Yes|false|no|true|yes)\b/,variable:/\b(?:PslDebug|errno|exit_status)\b/,builtin:{pattern:/\b(?:PslExecute|PslFunctionCall|PslFunctionExists|PslSetOptions|_snmp_debug|acos|add_diary|annotate|annotate_get|ascii_to_ebcdic|asctime|asin|atan|atexit|batch_set|blackout|cat|ceil|chan_exists|change_state|close|code_cvt|cond_signal|cond_wait|console_type|convert_base|convert_date|convert_locale_date|cos|cosh|create|date|dcget_text|destroy|destroy_lock|dget_text|difference|dump_hist|ebcdic_to_ascii|encrypt|event_archive|event_catalog_get|event_check|event_query|event_range_manage|event_range_query|event_report|event_schedule|event_trigger|event_trigger2|execute|exists|exp|fabs|file|floor|fmod|fopen|fseek|ftell|full_discovery|get|get_chan_info|get_ranges|get_text|get_vars|getenv|gethostinfo|getpid|getpname|grep|history|history_get_retention|in_transition|index|int|internal|intersection|is_var|isnumber|join|kill|length|lines|lock|lock_info|log|log10|loge|matchline|msg_check|msg_get_format|msg_get_severity|msg_printf|msg_sprintf|ntharg|nthargf|nthline|nthlinef|num_bytes|num_consoles|pconfig|popen|poplines|pow|print|printf|proc_exists|process|random|read|readln|refresh_parameters|remote_check|remote_close|remote_event_query|remote_event_trigger|remote_file_send|remote_open|remove|replace|rindex|sec_check_priv|sec_store_get|sec_store_set|set|set_alarm_ranges|set_locale|share|sin|sinh|sleep|snmp_agent_config|snmp_agent_start|snmp_agent_stop|snmp_close|snmp_config|snmp_get|snmp_get_next|snmp_h_get|snmp_h_get_next|snmp_h_set|snmp_open|snmp_set|snmp_trap_ignore|snmp_trap_listen|snmp_trap_raise_std_trap|snmp_trap_receive|snmp_trap_register_im|snmp_trap_send|snmp_walk|sopen|sort|splitline|sprintf|sqrt|srandom|str_repeat|strcasecmp|subset|substr|system|tail|tan|tanh|text_domain|time|tmpnam|tolower|toupper|trace_psl_process|trim|union|unique|unlock|unset|va_arg|va_start|write)\b/,alias:"builtin-function"},"foreach-variable":{pattern:/(\bforeach\s+(?:(?:\w+\b|"(?:\\.|[^\\"])*")\s+){0,2})[_a-zA-Z]\w*(?=\s*\()/,lookbehind:!0,greedy:!0},function:/\b[_a-z]\w*\b(?=\s*\()/i,number:/\b(?:0x[0-9a-f]+|\d+(?:\.\d+)?)\b/i,operator:/--|\+\+|&&=?|\|\|=?|<<=?|>>=?|[=!]~|[-+*/%&|^!=<>]=?|\.|[:?]/,punctuation:/[(){}\[\];,]/}}return kd}var wd,uk;function Qq(){if(uk)return wd;uk=1,wd=e,e.displayName="pug",e.aliases=[];function e(t){(function(n){n.languages.pug={comment:{pattern:/(^([\t ]*))\/\/.*(?:(?:\r?\n|\r)\2[\t ].+)*/m,lookbehind:!0},"multiline-script":{pattern:/(^([\t ]*)script\b.*\.[\t ]*)(?:(?:\r?\n|\r(?!\n))(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0,inside:n.languages.javascript},filter:{pattern:/(^([\t ]*)):.+(?:(?:\r?\n|\r(?!\n))(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0,inside:{"filter-name":{pattern:/^:[\w-]+/,alias:"variable"},text:/\S[\s\S]*/}},"multiline-plain-text":{pattern:/(^([\t ]*)[\w\-#.]+\.[\t ]*)(?:(?:\r?\n|\r(?!\n))(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0},markup:{pattern:/(^[\t ]*)<.+/m,lookbehind:!0,inside:n.languages.markup},doctype:{pattern:/((?:^|\n)[\t ]*)doctype(?: .+)?/,lookbehind:!0},"flow-control":{pattern:/(^[\t ]*)(?:case|default|each|else|if|unless|when|while)\b(?: .+)?/m,lookbehind:!0,inside:{each:{pattern:/^each .+? in\b/,inside:{keyword:/\b(?:each|in)\b/,punctuation:/,/}},branch:{pattern:/^(?:case|default|else|if|unless|when|while)\b/,alias:"keyword"},rest:n.languages.javascript}},keyword:{pattern:/(^[\t ]*)(?:append|block|extends|include|prepend)\b.+/m,lookbehind:!0},mixin:[{pattern:/(^[\t ]*)mixin .+/m,lookbehind:!0,inside:{keyword:/^mixin/,function:/\w+(?=\s*\(|\s*$)/,punctuation:/[(),.]/}},{pattern:/(^[\t ]*)\+.+/m,lookbehind:!0,inside:{name:{pattern:/^\+\w+/,alias:"function"},rest:n.languages.javascript}}],script:{pattern:/(^[\t ]*script(?:(?:&[^(]+)?\([^)]+\))*[\t ]).+/m,lookbehind:!0,inside:n.languages.javascript},"plain-text":{pattern:/(^[\t ]*(?!-)[\w\-#.]*[\w\-](?:(?:&[^(]+)?\([^)]+\))*\/?[\t ]).+/m,lookbehind:!0},tag:{pattern:/(^[\t ]*)(?!-)[\w\-#.]*[\w\-](?:(?:&[^(]+)?\([^)]+\))*\/?:?/m,lookbehind:!0,inside:{attributes:[{pattern:/&[^(]+\([^)]+\)/,inside:n.languages.javascript},{pattern:/\([^)]+\)/,inside:{"attr-value":{pattern:/(=\s*(?!\s))(?:\{[^}]*\}|[^,)\r\n]+)/,lookbehind:!0,inside:n.languages.javascript},"attr-name":/[\w-]+(?=\s*!?=|\s*[,)])/,punctuation:/[!=(),]+/}}],punctuation:/:/,"attr-id":/#[\w\-]+/,"attr-class":/\.[\w\-]+/}},code:[{pattern:/(^[\t ]*(?:-|!?=)).+/m,lookbehind:!0,inside:n.languages.javascript}],punctuation:/[.\-!=|]+/};for(var r=/(^([\t ]*)):(?:(?:\r?\n|\r(?!\n))(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/.source,a=[{filter:"atpl",language:"twig"},{filter:"coffee",language:"coffeescript"},"ejs","handlebars","less","livescript","markdown",{filter:"sass",language:"scss"},"stylus"],i={},o=0,s=a.length;o",function(){return l.filter}),"m"),lookbehind:!0,inside:{"filter-name":{pattern:/^:[\w-]+/,alias:"variable"},text:{pattern:/\S[\s\S]*/,alias:[l.language,"language-"+l.language],inside:n.languages[l.language]}}})}n.languages.insertBefore("pug","filter",i)})(t)}return wd}var _d,ck;function Jq(){if(ck)return _d;ck=1,_d=e,e.displayName="puppet",e.aliases=[];function e(t){(function(n){n.languages.puppet={heredoc:[{pattern:/(@\("([^"\r\n\/):]+)"(?:\/[nrts$uL]*)?\).*(?:\r?\n|\r))(?:.*(?:\r?\n|\r(?!\n)))*?[ \t]*(?:\|[ \t]*)?(?:-[ \t]*)?\2/,lookbehind:!0,alias:"string",inside:{punctuation:/(?=\S).*\S(?= *$)/}},{pattern:/(@\(([^"\r\n\/):]+)(?:\/[nrts$uL]*)?\).*(?:\r?\n|\r))(?:.*(?:\r?\n|\r(?!\n)))*?[ \t]*(?:\|[ \t]*)?(?:-[ \t]*)?\2/,lookbehind:!0,greedy:!0,alias:"string",inside:{punctuation:/(?=\S).*\S(?= *$)/}},{pattern:/@\("?(?:[^"\r\n\/):]+)"?(?:\/[nrts$uL]*)?\)/,alias:"string",inside:{punctuation:{pattern:/(\().+?(?=\))/,lookbehind:!0}}}],"multiline-comment":{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0,greedy:!0,alias:"comment"},regex:{pattern:/((?:\bnode\s+|[~=\(\[\{,]\s*|[=+]>\s*|^\s*))\/(?:[^\/\\]|\\[\s\S])+\/(?:[imx]+\b|\B)/,lookbehind:!0,greedy:!0,inside:{"extended-regex":{pattern:/^\/(?:[^\/\\]|\\[\s\S])+\/[im]*x[im]*$/,inside:{comment:/#.*/}}}},comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},string:{pattern:/(["'])(?:\$\{(?:[^'"}]|(["'])(?:(?!\2)[^\\]|\\[\s\S])*\2)+\}|\$(?!\{)|(?!\1)[^\\$]|\\[\s\S])*\1/,greedy:!0,inside:{"double-quoted":{pattern:/^"[\s\S]*"$/,inside:{}}}},variable:{pattern:/\$(?:::)?\w+(?:::\w+)*/,inside:{punctuation:/::/}},"attr-name":/(?:\b\w+|\*)(?=\s*=>)/,function:[{pattern:/(\.)(?!\d)\w+/,lookbehind:!0},/\b(?:contain|debug|err|fail|include|info|notice|realize|require|tag|warning)\b|\b(?!\d)\w+(?=\()/],number:/\b(?:0x[a-f\d]+|\d+(?:\.\d+)?(?:e-?\d+)?)\b/i,boolean:/\b(?:false|true)\b/,keyword:/\b(?:application|attr|case|class|consumes|default|define|else|elsif|function|if|import|inherits|node|private|produces|type|undef|unless)\b/,datatype:{pattern:/\b(?:Any|Array|Boolean|Callable|Catalogentry|Class|Collection|Data|Default|Enum|Float|Hash|Integer|NotUndef|Numeric|Optional|Pattern|Regexp|Resource|Runtime|Scalar|String|Struct|Tuple|Type|Undef|Variant)\b/,alias:"symbol"},operator:/=[=~>]?|![=~]?|<(?:<\|?|[=~|-])?|>[>=]?|->?|~>|\|>?>?|[*\/%+?]|\b(?:and|in|or)\b/,punctuation:/[\[\]{}().,;]|:+/};var r=[{pattern:/(^|[^\\])\$\{(?:[^'"{}]|\{[^}]*\}|(["'])(?:(?!\2)[^\\]|\\[\s\S])*\2)+\}/,lookbehind:!0,inside:{"short-variable":{pattern:/(^\$\{)(?!\w+\()(?:::)?\w+(?:::\w+)*/,lookbehind:!0,alias:"variable",inside:{punctuation:/::/}},delimiter:{pattern:/^\$/,alias:"variable"},rest:n.languages.puppet}},{pattern:/(^|[^\\])\$(?:::)?\w+(?:::\w+)*/,lookbehind:!0,alias:"variable",inside:{punctuation:/::/}}];n.languages.puppet.heredoc[0].inside.interpolation=r,n.languages.puppet.string.inside["double-quoted"].inside.interpolation=r})(t)}return _d}var Td,dk;function ej(){if(dk)return Td;dk=1,Td=e,e.displayName="pure",e.aliases=[];function e(t){(function(n){n.languages.pure={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0},/#!.+/],"inline-lang":{pattern:/%<[\s\S]+?%>/,greedy:!0,inside:{lang:{pattern:/(^%< *)-\*-.+?-\*-/,lookbehind:!0,alias:"comment"},delimiter:{pattern:/^%<.*|%>$/,alias:"punctuation"}}},string:{pattern:/"(?:\\.|[^"\\\r\n])*"/,greedy:!0},number:{pattern:/((?:\.\.)?)(?:\b(?:inf|nan)\b|\b0x[\da-f]+|(?:\b(?:0b)?\d+(?:\.\d+)?|\B\.\d+)(?:e[+-]?\d+)?L?)/i,lookbehind:!0},keyword:/\b(?:NULL|ans|break|bt|case|catch|cd|clear|const|def|del|dump|else|end|exit|extern|false|force|help|if|infix[lr]?|interface|let|ls|mem|namespace|nonfix|of|otherwise|outfix|override|postfix|prefix|private|public|pwd|quit|run|save|show|stats|then|throw|trace|true|type|underride|using|when|with)\b/,function:/\b(?:abs|add_(?:addr|constdef|(?:fundef|interface|macdef|typedef)(?:_at)?|vardef)|all|any|applp?|arity|bigintp?|blob(?:_crc|_size|p)?|boolp?|byte_c?string(?:_pointer)?|byte_(?:matrix|pointer)|calloc|cat|catmap|ceil|char[ps]?|check_ptrtag|chr|clear_sentry|clearsym|closurep?|cmatrixp?|cols?|colcat(?:map)?|colmap|colrev|colvector(?:p|seq)?|complex(?:_float_(?:matrix|pointer)|_matrix(?:_view)?|_pointer|p)?|conj|cookedp?|cst|cstring(?:_(?:dup|list|vector))?|curry3?|cyclen?|del_(?:constdef|fundef|interface|macdef|typedef|vardef)|delete|diag(?:mat)?|dim|dmatrixp?|do|double(?:_matrix(?:_view)?|_pointer|p)?|dowith3?|drop|dropwhile|eval(?:cmd)?|exactp|filter|fix|fixity|flip|float(?:_matrix|_pointer)|floor|fold[lr]1?|frac|free|funp?|functionp?|gcd|get(?:_(?:byte|constdef|double|float|fundef|int(?:64)?|interface(?:_typedef)?|long|macdef|pointer|ptrtag|sentry|short|string|typedef|vardef))?|globsym|hash|head|id|im|imatrixp?|index|inexactp|infp|init|insert|int(?:_matrix(?:_view)?|_pointer|p)?|int64_(?:matrix|pointer)|integerp?|iteraten?|iterwhile|join|keys?|lambdap?|last(?:err(?:pos)?)?|lcd|list[2p]?|listmap|make_ptrtag|malloc|map|matcat|matrixp?|max|member|min|nanp|nargs|nmatrixp?|null|numberp?|ord|pack(?:ed)?|pointer(?:_cast|_tag|_type|p)?|pow|pred|ptrtag|put(?:_(?:byte|double|float|int(?:64)?|long|pointer|short|string))?|rationalp?|re|realp?|realloc|recordp?|redim|reduce(?:_with)?|refp?|repeatn?|reverse|rlistp?|round|rows?|rowcat(?:map)?|rowmap|rowrev|rowvector(?:p|seq)?|same|scan[lr]1?|sentry|sgn|short_(?:matrix|pointer)|slice|smatrixp?|sort|split|str|strcat|stream|stride|string(?:_(?:dup|list|vector)|p)?|subdiag(?:mat)?|submat|subseq2?|substr|succ|supdiag(?:mat)?|symbolp?|tail|take|takewhile|thunkp?|transpose|trunc|tuplep?|typep|ubyte|uint(?:64)?|ulong|uncurry3?|unref|unzip3?|update|ushort|vals?|varp?|vector(?:p|seq)?|void|zip3?|zipwith3?)\b/,special:{pattern:/\b__[a-z]+__\b/i,alias:"builtin"},operator:/(?:[!"#$%&'*+,\-.\/:<=>?@\\^`|~\u00a1-\u00bf\u00d7-\u00f7\u20d0-\u2bff]|\b_+\b)+|\b(?:and|div|mod|not|or)\b/,punctuation:/[(){}\[\];,|]/};var r=["c",{lang:"c++",alias:"cpp"},"fortran"],a=/%< *-\*- *\d* *-\*-[\s\S]+?%>/.source;r.forEach(function(i){var o=i;if(typeof i!="string"&&(o=i.alias,i=i.lang),n.languages[o]){var s={};s["inline-lang-"+o]={pattern:RegExp(a.replace("",i.replace(/([.+*?\/\\(){}\[\]])/g,"\\$1")),"i"),inside:n.util.clone(n.languages.pure["inline-lang"].inside)},s["inline-lang-"+o].inside.rest=n.util.clone(n.languages[o]),n.languages.insertBefore("pure","inline-lang",s)}}),n.languages.c&&(n.languages.pure["inline-lang"].inside.rest=n.util.clone(n.languages.c))})(t)}return Td}var Ad,pk;function tj(){if(pk)return Ad;pk=1,Ad=e,e.displayName="purebasic",e.aliases=[];function e(t){t.languages.purebasic=t.languages.extend("clike",{comment:/;.*/,keyword:/\b(?:align|and|as|break|calldebugger|case|compilercase|compilerdefault|compilerelse|compilerelseif|compilerendif|compilerendselect|compilererror|compilerif|compilerselect|continue|data|datasection|debug|debuglevel|declare|declarec|declarecdll|declaredll|declaremodule|default|define|dim|disableasm|disabledebugger|disableexplicit|else|elseif|enableasm|enabledebugger|enableexplicit|end|enddatasection|enddeclaremodule|endenumeration|endif|endimport|endinterface|endmacro|endmodule|endprocedure|endselect|endstructure|endstructureunion|endwith|enumeration|extends|fakereturn|for|foreach|forever|global|gosub|goto|if|import|importc|includebinary|includefile|includepath|interface|macro|module|newlist|newmap|next|not|or|procedure|procedurec|procedurecdll|proceduredll|procedurereturn|protected|prototype|prototypec|read|redim|repeat|restore|return|runtime|select|shared|static|step|structure|structureunion|swap|threaded|to|until|wend|while|with|xincludefile|xor)\b/i,function:/\b\w+(?:\.\w+)?\s*(?=\()/,number:/(?:\$[\da-f]+|\b-?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?)\b/i,operator:/(?:@\*?|\?|\*)\w+|-[>-]?|\+\+?|!=?|<>?=?|==?|&&?|\|?\||[~^%?*/@]/}),t.languages.insertBefore("purebasic","keyword",{tag:/#\w+\$?/,asm:{pattern:/(^[\t ]*)!.*/m,lookbehind:!0,alias:"tag",inside:{comment:/;.*/,string:{pattern:/(["'`])(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},"label-reference-anonymous":{pattern:/(!\s*j[a-z]+\s+)@[fb]/i,lookbehind:!0,alias:"fasm-label"},"label-reference-addressed":{pattern:/(!\s*j[a-z]+\s+)[A-Z._?$@][\w.?$@~#]*/i,lookbehind:!0,alias:"fasm-label"},keyword:[/\b(?:extern|global)\b[^;\r\n]*/i,/\b(?:CPU|DEFAULT|FLOAT)\b.*/],function:{pattern:/^([\t ]*!\s*)[\da-z]+(?=\s|$)/im,lookbehind:!0},"function-inline":{pattern:/(:\s*)[\da-z]+(?=\s)/i,lookbehind:!0,alias:"function"},label:{pattern:/^([\t ]*!\s*)[A-Za-z._?$@][\w.?$@~#]*(?=:)/m,lookbehind:!0,alias:"fasm-label"},register:/\b(?:st\d|[xyz]mm\d\d?|[cdt]r\d|r\d\d?[bwd]?|[er]?[abcd]x|[abcd][hl]|[er]?(?:bp|di|si|sp)|[cdefgs]s|mm\d+)\b/i,number:/(?:\b|-|(?=\$))(?:0[hx](?:[\da-f]*\.)?[\da-f]+(?:p[+-]?\d+)?|\d[\da-f]+[hx]|\$\d[\da-f]*|0[oq][0-7]+|[0-7]+[oq]|0[by][01]+|[01]+[by]|0[dt]\d+|(?:\d+(?:\.\d+)?|\.\d+)(?:\.?e[+-]?\d+)?[dt]?)\b/i,operator:/[\[\]*+\-/%<>=&|$!,.:]/}}}),delete t.languages.purebasic["class-name"],delete t.languages.purebasic.boolean,t.languages.pbfasm=t.languages.purebasic}return Ad}var Rd,fk;function nj(){if(fk)return Rd;fk=1;var e=zm();Rd=t,t.displayName="purescript",t.aliases=["purs"];function t(n){n.register(e),n.languages.purescript=n.languages.extend("haskell",{keyword:/\b(?:ado|case|class|data|derive|do|else|forall|if|in|infixl|infixr|instance|let|module|newtype|of|primitive|then|type|where)\b|∀/,"import-statement":{pattern:/(^[\t ]*)import\s+[A-Z][\w']*(?:\.[A-Z][\w']*)*(?:\s+as\s+[A-Z][\w']*(?:\.[A-Z][\w']*)*)?(?:\s+hiding\b)?/m,lookbehind:!0,inside:{keyword:/\b(?:as|hiding|import)\b/,punctuation:/\./}},builtin:/\b(?:absurd|add|ap|append|apply|between|bind|bottom|clamp|compare|comparing|compose|conj|const|degree|discard|disj|div|eq|flap|flip|gcd|identity|ifM|join|lcm|liftA1|liftM1|map|max|mempty|min|mod|mul|negate|not|notEq|one|otherwise|recip|show|sub|top|unit|unless|unlessM|void|when|whenM|zero)\b/,operator:[n.languages.haskell.operator[0],n.languages.haskell.operator[2],/[\xa2-\xa6\xa8\xa9\xac\xae-\xb1\xb4\xb8\xd7\xf7\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed\u02ef-\u02ff\u0375\u0384\u0385\u03f6\u0482\u058d-\u058f\u0606-\u0608\u060b\u060e\u060f\u06de\u06e9\u06fd\u06fe\u07f6\u07fe\u07ff\u09f2\u09f3\u09fa\u09fb\u0af1\u0b70\u0bf3-\u0bfa\u0c7f\u0d4f\u0d79\u0e3f\u0f01-\u0f03\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce\u0fcf\u0fd5-\u0fd8\u109e\u109f\u1390-\u1399\u166d\u17db\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u2044\u2052\u207a-\u207c\u208a-\u208c\u20a0-\u20bf\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u2140-\u2144\u214a-\u214d\u214f\u218a\u218b\u2190-\u2307\u230c-\u2328\u232b-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u2767\u2794-\u27c4\u27c7-\u27e5\u27f0-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2b73\u2b76-\u2b95\u2b97-\u2bff\u2ce5-\u2cea\u2e50\u2e51\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u309b\u309c\u3190\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua700-\ua716\ua720\ua721\ua789\ua78a\ua828-\ua82b\ua836-\ua839\uaa77-\uaa79\uab5b\uab6a\uab6b\ufb29\ufbb2-\ufbc1\ufdfc\ufdfd\ufe62\ufe64-\ufe66\ufe69\uff04\uff0b\uff1c-\uff1e\uff3e\uff40\uff5c\uff5e\uffe0-\uffe6\uffe8-\uffee\ufffc\ufffd]/]}),n.languages.purs=n.languages.purescript}return Rd}var Id,gk;function rj(){if(gk)return Id;gk=1,Id=e,e.displayName="python",e.aliases=["py"];function e(t){t.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},t.languages.python["string-interpolation"].inside.interpolation.inside.rest=t.languages.python,t.languages.py=t.languages.python}return Id}var Cd,mk;function aj(){if(mk)return Cd;mk=1,Cd=e,e.displayName="q",e.aliases=[];function e(t){t.languages.q={string:/"(?:\\.|[^"\\\r\n])*"/,comment:[{pattern:/([\t )\]}])\/.*/,lookbehind:!0,greedy:!0},{pattern:/(^|\r?\n|\r)\/[\t ]*(?:(?:\r?\n|\r)(?:.*(?:\r?\n|\r(?!\n)))*?(?:\\(?=[\t ]*(?:\r?\n|\r))|$)|\S.*)/,lookbehind:!0,greedy:!0},{pattern:/^\\[\t ]*(?:\r?\n|\r)[\s\S]+/m,greedy:!0},{pattern:/^#!.+/m,greedy:!0}],symbol:/`(?::\S+|[\w.]*)/,datetime:{pattern:/0N[mdzuvt]|0W[dtz]|\d{4}\.\d\d(?:m|\.\d\d(?:T(?:\d\d(?::\d\d(?::\d\d(?:[.:]\d\d\d)?)?)?)?)?[dz]?)|\d\d:\d\d(?::\d\d(?:[.:]\d\d\d)?)?[uvt]?/,alias:"number"},number:/\b(?![01]:)(?:0N[hje]?|0W[hj]?|0[wn]|0x[\da-fA-F]+|\d+(?:\.\d*)?(?:e[+-]?\d+)?[hjfeb]?)/,keyword:/\\\w+\b|\b(?:abs|acos|aj0?|all|and|any|asc|asin|asof|atan|attr|avgs?|binr?|by|ceiling|cols|cor|cos|count|cov|cross|csv|cut|delete|deltas|desc|dev|differ|distinct|div|do|dsave|ej|enlist|eval|except|exec|exit|exp|fby|fills|first|fkeys|flip|floor|from|get|getenv|group|gtime|hclose|hcount|hdel|hopen|hsym|iasc|identity|idesc|if|ij|in|insert|inter|inv|keys?|last|like|list|ljf?|load|log|lower|lsq|ltime|ltrim|mavg|maxs?|mcount|md5|mdev|med|meta|mins?|mmax|mmin|mmu|mod|msum|neg|next|not|null|or|over|parse|peach|pj|plist|prds?|prev|prior|rand|rank|ratios|raze|read0|read1|reciprocal|reval|reverse|rload|rotate|rsave|rtrim|save|scan|scov|sdev|select|set|setenv|show|signum|sin|sqrt|ssr?|string|sublist|sums?|sv|svar|system|tables|tan|til|trim|txf|type|uj|ungroup|union|update|upper|upsert|value|var|views?|vs|wavg|where|while|within|wj1?|wsum|ww|xasc|xbar|xcols?|xdesc|xexp|xgroup|xkey|xlog|xprev|xrank)\b/,adverb:{pattern:/['\/\\]:?|\beach\b/,alias:"function"},verb:{pattern:/(?:\B\.\B|\b[01]:|<[=>]?|>=?|[:+\-*%,!?~=|$&#@^]):?|\b_\b:?/,alias:"operator"},punctuation:/[(){}\[\];.]/}}return Cd}var Nd,hk;function ij(){if(hk)return Nd;hk=1,Nd=e,e.displayName="qml",e.aliases=[];function e(t){(function(n){for(var r=/"(?:\\.|[^\\"\r\n])*"|'(?:\\.|[^\\'\r\n])*'/.source,a=/\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))*\*\//.source,i=/(?:[^\\()[\]{}"'/]||\/(?![*/])||\(*\)|\[*\]|\{*\}|\\[\s\S])/.source.replace(//g,function(){return r}).replace(//g,function(){return a}),o=0;o<2;o++)i=i.replace(//g,function(){return i});i=i.replace(//g,"[^\\s\\S]"),n.languages.qml={comment:{pattern:/\/\/.*|\/\*[\s\S]*?\*\//,greedy:!0},"javascript-function":{pattern:RegExp(/((?:^|;)[ \t]*)function\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*\(*\)\s*\{*\}/.source.replace(//g,function(){return i}),"m"),lookbehind:!0,greedy:!0,alias:"language-javascript",inside:n.languages.javascript},"class-name":{pattern:/((?:^|[:;])[ \t]*)(?!\d)\w+(?=[ \t]*\{|[ \t]+on\b)/m,lookbehind:!0},property:[{pattern:/((?:^|[;{])[ \t]*)(?!\d)\w+(?:\.\w+)*(?=[ \t]*:)/m,lookbehind:!0},{pattern:/((?:^|[;{])[ \t]*)property[ \t]+(?!\d)\w+(?:\.\w+)*[ \t]+(?!\d)\w+(?:\.\w+)*(?=[ \t]*:)/m,lookbehind:!0,inside:{keyword:/^property/,property:/\w+(?:\.\w+)*/}}],"javascript-expression":{pattern:RegExp(/(:[ \t]*)(?![\s;}[])(?:(?!$|[;}]))+/.source.replace(//g,function(){return i}),"m"),lookbehind:!0,greedy:!0,alias:"language-javascript",inside:n.languages.javascript},string:{pattern:/"(?:\\.|[^\\"\r\n])*"/,greedy:!0},keyword:/\b(?:as|import|on)\b/,punctuation:/[{}[\]:;,]/}})(t)}return Nd}var xd,bk;function oj(){if(bk)return xd;bk=1,xd=e,e.displayName="qore",e.aliases=[];function e(t){t.languages.qore=t.languages.extend("clike",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:\/\/|#).*)/,lookbehind:!0},string:{pattern:/("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0},keyword:/\b(?:abstract|any|assert|binary|bool|boolean|break|byte|case|catch|char|class|code|const|continue|data|default|do|double|else|enum|extends|final|finally|float|for|goto|hash|if|implements|import|inherits|instanceof|int|interface|long|my|native|new|nothing|null|object|our|own|private|reference|rethrow|return|short|soft(?:bool|date|float|int|list|number|string)|static|strictfp|string|sub|super|switch|synchronized|this|throw|throws|transient|try|void|volatile|while)\b/,boolean:/\b(?:false|true)\b/i,function:/\$?\b(?!\d)\w+(?=\()/,number:/\b(?:0b[01]+|0x(?:[\da-f]*\.)?[\da-fp\-]+|(?:\d+(?:\.\d+)?|\.\d+)(?:e\d+)?[df]|(?:\d+(?:\.\d+)?|\.\d+))\b/i,operator:{pattern:/(^|[^.])(?:\+[+=]?|-[-=]?|[!=](?:==?|~)?|>>?=?|<(?:=>?|<=?)?|&[&=]?|\|[|=]?|[*\/%^]=?|[~?])/,lookbehind:!0},variable:/\$(?!\d)\w+\b/})}return xd}var Od,yk;function sj(){if(yk)return Od;yk=1,Od=e,e.displayName="qsharp",e.aliases=["qs"];function e(t){(function(n){function r(h,y){return h.replace(/<<(\d+)>>/g,function(T,b){return"(?:"+y[+b]+")"})}function a(h,y,T){return RegExp(r(h,y),"")}function i(h,y){for(var T=0;T>/g,function(){return"(?:"+h+")"});return h.replace(/<>/g,"[^\\s\\S]")}var o={type:"Adj BigInt Bool Ctl Double false Int One Pauli PauliI PauliX PauliY PauliZ Qubit Range Result String true Unit Zero",other:"Adjoint adjoint apply as auto body borrow borrowing Controlled controlled distribute elif else fail fixup for function if in internal intrinsic invert is let mutable namespace new newtype open operation repeat return self set until use using while within"};function s(h){return"\\b(?:"+h.trim().replace(/ /g,"|")+")\\b"}var l=RegExp(s(o.type+" "+o.other)),u=/\b[A-Za-z_]\w*\b/.source,d=r(/<<0>>(?:\s*\.\s*<<0>>)*/.source,[u]),c={keyword:l,punctuation:/[<>()?,.:[\]]/},f=/"(?:\\.|[^\\"])*"/.source;n.languages.qsharp=n.languages.extend("clike",{comment:/\/\/.*/,string:[{pattern:a(/(^|[^$\\])<<0>>/.source,[f]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:a(/(\b(?:as|open)\s+)<<0>>(?=\s*(?:;|as\b))/.source,[d]),lookbehind:!0,inside:c},{pattern:a(/(\bnamespace\s+)<<0>>(?=\s*\{)/.source,[d]),lookbehind:!0,inside:c}],keyword:l,number:/(?:\b0(?:x[\da-f]+|b[01]+|o[0-7]+)|(?:\B\.\d+|\b\d+(?:\.\d*)?)(?:e[-+]?\d+)?)l?\b/i,operator:/\band=|\bor=|\band\b|\bnot\b|\bor\b|<[-=]|[-=]>|>>>=?|<<<=?|\^\^\^=?|\|\|\|=?|&&&=?|w\/=?|~~~|[*\/+\-^=!%]=?/,punctuation:/::|[{}[\];(),.:]/}),n.languages.insertBefore("qsharp","number",{range:{pattern:/\.\./,alias:"operator"}});var p=i(r(/\{(?:[^"{}]|<<0>>|<>)*\}/.source,[f]),2);n.languages.insertBefore("qsharp","string",{"interpolation-string":{pattern:a(/\$"(?:\\.|<<0>>|[^\\"{])*"/.source,[p]),greedy:!0,inside:{interpolation:{pattern:a(/((?:^|[^\\])(?:\\\\)*)<<0>>/.source,[p]),lookbehind:!0,inside:{punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-qsharp",inside:n.languages.qsharp}}},string:/[\s\S]+/}}})})(t),t.languages.qs=t.languages.qsharp}return Od}var Ld,Ek;function lj(){if(Ek)return Ld;Ek=1,Ld=e,e.displayName="r",e.aliases=[];function e(t){t.languages.r={comment:/#.*/,string:{pattern:/(['"])(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},"percent-operator":{pattern:/%[^%\s]*%/,alias:"operator"},boolean:/\b(?:FALSE|TRUE)\b/,ellipsis:/\.\.(?:\.|\d+)/,number:[/\b(?:Inf|NaN)\b/,/(?:\b0x[\dA-Fa-f]+(?:\.\d*)?|\b\d+(?:\.\d*)?|\B\.\d+)(?:[EePp][+-]?\d+)?[iL]?/],keyword:/\b(?:NA|NA_character_|NA_complex_|NA_integer_|NA_real_|NULL|break|else|for|function|if|in|next|repeat|while)\b/,operator:/->?>?|<(?:=|=!]=?|::?|&&?|\|\|?|[+*\/^$@~]/,punctuation:/[(){}\[\],;]/}}return Ld}var Dd,Sk;function uj(){if(Sk)return Dd;Sk=1;var e=Hm();Dd=t,t.displayName="racket",t.aliases=["rkt"];function t(n){n.register(e),n.languages.racket=n.languages.extend("scheme",{"lambda-parameter":{pattern:/([(\[]lambda\s+[(\[])[^()\[\]'\s]+/,lookbehind:!0}}),n.languages.insertBefore("racket","string",{lang:{pattern:/^#lang.+/m,greedy:!0,alias:"keyword"}}),n.languages.rkt=n.languages.racket}return Dd}var Md,vk;function cj(){if(vk)return Md;vk=1,Md=e,e.displayName="reason",e.aliases=[];function e(t){t.languages.reason=t.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),t.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete t.languages.reason.function}return Md}var Fd,kk;function dj(){if(kk)return Fd;kk=1,Fd=e,e.displayName="regex",e.aliases=[];function e(t){(function(n){var r={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},a=/\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/,i={pattern:/\.|\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},o={pattern:/\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},s="(?:[^\\\\-]|"+a.source+")",l=RegExp(s+"-"+s),u={pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"};n.languages.regex={"char-class":{pattern:/((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,lookbehind:!0,inside:{"char-class-negation":{pattern:/(^\[)\^/,lookbehind:!0,alias:"operator"},"char-class-punctuation":{pattern:/^\[|\]$/,alias:"punctuation"},range:{pattern:l,inside:{escape:a,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":r,"char-set":o,escape:a}},"special-escape":r,"char-set":i,backreference:[{pattern:/\\(?![123][0-7]{2})[1-9]/,alias:"keyword"},{pattern:/\\k<[^<>']+>/,alias:"keyword",inside:{"group-name":u}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:a,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|:=]=?|!=|\b_\b/,punctuation:/[,;.\[\]{}()]/}}return Pd}var Ud,_k;function fj(){if(_k)return Ud;_k=1,Ud=e,e.displayName="renpy",e.aliases=["rpy"];function e(t){t.languages.renpy={comment:{pattern:/(^|[^\\])#.+/,lookbehind:!0},string:{pattern:/("""|''')[\s\S]+?\1|("|')(?:\\.|(?!\2)[^\\])*\2|(?:^#?(?:(?:[0-9a-fA-F]){3}|[0-9a-fA-F]{6})$)/m,greedy:!0},function:/\b[a-z_]\w*(?=\()/i,property:/\b(?:Update|UpdateVersion|action|activate_sound|adv_nvl_transition|after_load_transition|align|alpha|alt|anchor|antialias|area|auto|background|bar_invert|bar_resizing|bar_vertical|black_color|bold|bottom_bar|bottom_gutter|bottom_margin|bottom_padding|box_reverse|box_wrap|can_update|caret|child|color|crop|default_afm_enable|default_afm_time|default_fullscreen|default_text_cps|developer|directory_name|drag_handle|drag_joined|drag_name|drag_raise|draggable|dragged|drop_shadow|drop_shadow_color|droppable|dropped|easein|easeout|edgescroll|end_game_transition|end_splash_transition|enter_replay_transition|enter_sound|enter_transition|enter_yesno_transition|executable_name|exit_replay_transition|exit_sound|exit_transition|exit_yesno_transition|fadein|fadeout|first_indent|first_spacing|fit_first|focus|focus_mask|font|foreground|game_main_transition|get_installed_packages|google_play_key|google_play_salt|ground|has_music|has_sound|has_voice|height|help|hinting|hover|hover_background|hover_color|hover_sound|hovered|hyperlink_functions|idle|idle_color|image_style|include_update|insensitive|insensitive_background|insensitive_color|inside|intra_transition|italic|justify|kerning|keyboard_focus|language|layer_clipping|layers|layout|left_bar|left_gutter|left_margin|left_padding|length|line_leading|line_overlap_split|line_spacing|linear|main_game_transition|main_menu_music|maximum|min_width|minimum|minwidth|modal|mouse|mousewheel|name|narrator_menu|newline_indent|nvl_adv_transition|offset|order_reverse|outlines|overlay_functions|pos|position|prefix|radius|range|rest_indent|right_bar|right_gutter|right_margin|right_padding|rotate|rotate_pad|ruby_style|sample_sound|save_directory|say_attribute_transition|screen_height|screen_width|scrollbars|selected_hover|selected_hover_color|selected_idle|selected_idle_color|selected_insensitive|show_side_image|show_two_window|side_spacing|side_xpos|side_ypos|size|size_group|slow_cps|slow_cps_multiplier|spacing|strikethrough|subpixel|text_align|text_style|text_xpos|text_y_fudge|text_ypos|thumb|thumb_offset|thumb_shadow|thumbnail_height|thumbnail_width|time|top_bar|top_gutter|top_margin|top_padding|translations|underline|unscrollable|update|value|version|version_name|version_tuple|vertical|width|window_hide_transition|window_icon|window_left_padding|window_show_transition|window_title|windows_icon|xadjustment|xalign|xanchor|xanchoraround|xaround|xcenter|xfill|xinitial|xmargin|xmaximum|xminimum|xoffset|xofsset|xpadding|xpos|xsize|xzoom|yadjustment|yalign|yanchor|yanchoraround|yaround|ycenter|yfill|yinitial|ymargin|ymaximum|yminimum|yoffset|ypadding|ypos|ysize|ysizexysize|yzoom|zoom|zorder)\b/,tag:/\b(?:bar|block|button|buttoscreenn|drag|draggroup|fixed|frame|grid|[hv]box|hotbar|hotspot|image|imagebutton|imagemap|input|key|label|menu|mm_menu_frame|mousearea|nvl|parallel|screen|self|side|tag|text|textbutton|timer|vbar|viewport|window)\b|\$/,keyword:/\b(?:None|add|adjustment|alignaround|allow|angle|animation|around|as|assert|behind|box_layout|break|build|cache|call|center|changed|child_size|choice|circles|class|clear|clicked|clipping|clockwise|config|contains|continue|corner1|corner2|counterclockwise|def|default|define|del|delay|disabled|disabled_text|dissolve|elif|else|event|except|exclude|exec|expression|fade|finally|for|from|function|global|gm_root|has|hide|id|if|import|in|init|is|jump|knot|lambda|left|less_rounded|mm_root|movie|music|null|on|onlayer|pass|pause|persistent|play|print|python|queue|raise|random|renpy|repeat|return|right|rounded_window|scene|scope|set|show|slow|slow_abortable|slow_done|sound|stop|store|style|style_group|substitute|suffix|theme|transform|transform_anchor|transpose|try|ui|unhovered|updater|use|voice|while|widget|widget_hover|widget_selected|widget_text|yield)\b/,boolean:/\b(?:[Ff]alse|[Tt]rue)\b/,number:/(?:\b(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*(?:\.\d*)?)|\B\.\d+)(?:e[+-]?\d+)?j?/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:and|at|not|or|with)\b/,punctuation:/[{}[\];(),.:]/},t.languages.rpy=t.languages.renpy}return Ud}var Bd,Tk;function gj(){if(Tk)return Bd;Tk=1,Bd=e,e.displayName="rest",e.aliases=[];function e(t){t.languages.rest={table:[{pattern:/(^[\t ]*)(?:\+[=-]+)+\+(?:\r?\n|\r)(?:\1[+|].+[+|](?:\r?\n|\r))+\1(?:\+[=-]+)+\+/m,lookbehind:!0,inside:{punctuation:/\||(?:\+[=-]+)+\+/}},{pattern:/(^[\t ]*)=+ [ =]*=(?:(?:\r?\n|\r)\1.+)+(?:\r?\n|\r)\1=+ [ =]*=(?=(?:\r?\n|\r){2}|\s*$)/m,lookbehind:!0,inside:{punctuation:/[=-]+/}}],"substitution-def":{pattern:/(^[\t ]*\.\. )\|(?:[^|\s](?:[^|]*[^|\s])?)\| [^:]+::/m,lookbehind:!0,inside:{substitution:{pattern:/^\|(?:[^|\s]|[^|\s][^|]*[^|\s])\|/,alias:"attr-value",inside:{punctuation:/^\||\|$/}},directive:{pattern:/( )(?! )[^:]+::/,lookbehind:!0,alias:"function",inside:{punctuation:/::$/}}}},"link-target":[{pattern:/(^[\t ]*\.\. )\[[^\]]+\]/m,lookbehind:!0,alias:"string",inside:{punctuation:/^\[|\]$/}},{pattern:/(^[\t ]*\.\. )_(?:`[^`]+`|(?:[^:\\]|\\.)+):/m,lookbehind:!0,alias:"string",inside:{punctuation:/^_|:$/}}],directive:{pattern:/(^[\t ]*\.\. )[^:]+::/m,lookbehind:!0,alias:"function",inside:{punctuation:/::$/}},comment:{pattern:/(^[\t ]*\.\.)(?:(?: .+)?(?:(?:\r?\n|\r).+)+| .+)(?=(?:\r?\n|\r){2}|$)/m,lookbehind:!0},title:[{pattern:/^(([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~])\2+)(?:\r?\n|\r).+(?:\r?\n|\r)\1$/m,inside:{punctuation:/^[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]+|[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]+$/,important:/.+/}},{pattern:/(^|(?:\r?\n|\r){2}).+(?:\r?\n|\r)([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~])\2+(?=\r?\n|\r|$)/,lookbehind:!0,inside:{punctuation:/[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]+$/,important:/.+/}}],hr:{pattern:/((?:\r?\n|\r){2})([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~])\2{3,}(?=(?:\r?\n|\r){2})/,lookbehind:!0,alias:"punctuation"},field:{pattern:/(^[\t ]*):[^:\r\n]+:(?= )/m,lookbehind:!0,alias:"attr-name"},"command-line-option":{pattern:/(^[\t ]*)(?:[+-][a-z\d]|(?:--|\/)[a-z\d-]+)(?:[ =](?:[a-z][\w-]*|<[^<>]+>))?(?:, (?:[+-][a-z\d]|(?:--|\/)[a-z\d-]+)(?:[ =](?:[a-z][\w-]*|<[^<>]+>))?)*(?=(?:\r?\n|\r)? {2,}\S)/im,lookbehind:!0,alias:"symbol"},"literal-block":{pattern:/::(?:\r?\n|\r){2}([ \t]+)(?![ \t]).+(?:(?:\r?\n|\r)\1.+)*/,inside:{"literal-block-punctuation":{pattern:/^::/,alias:"punctuation"}}},"quoted-literal-block":{pattern:/::(?:\r?\n|\r){2}([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]).*(?:(?:\r?\n|\r)\1.*)*/,inside:{"literal-block-punctuation":{pattern:/^(?:::|([!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~])\1*)/m,alias:"punctuation"}}},"list-bullet":{pattern:/(^[\t ]*)(?:[*+\-•‣⁃]|\(?(?:\d+|[a-z]|[ivxdclm]+)\)|(?:\d+|[a-z]|[ivxdclm]+)\.)(?= )/im,lookbehind:!0,alias:"punctuation"},"doctest-block":{pattern:/(^[\t ]*)>>> .+(?:(?:\r?\n|\r).+)*/m,lookbehind:!0,inside:{punctuation:/^>>>/}},inline:[{pattern:/(^|[\s\-:\/'"<(\[{])(?::[^:]+:`.*?`|`.*?`:[^:]+:|(\*\*?|``?|\|)(?!\s)(?:(?!\2).)*\S\2(?=[\s\-.,:;!?\\\/'")\]}]|$))/m,lookbehind:!0,inside:{bold:{pattern:/(^\*\*).+(?=\*\*$)/,lookbehind:!0},italic:{pattern:/(^\*).+(?=\*$)/,lookbehind:!0},"inline-literal":{pattern:/(^``).+(?=``$)/,lookbehind:!0,alias:"symbol"},role:{pattern:/^:[^:]+:|:[^:]+:$/,alias:"function",inside:{punctuation:/^:|:$/}},"interpreted-text":{pattern:/(^`).+(?=`$)/,lookbehind:!0,alias:"attr-value"},substitution:{pattern:/(^\|).+(?=\|$)/,lookbehind:!0,alias:"attr-value"},punctuation:/\*\*?|``?|\|/}}],link:[{pattern:/\[[^\[\]]+\]_(?=[\s\-.,:;!?\\\/'")\]}]|$)/,alias:"string",inside:{punctuation:/^\[|\]_$/}},{pattern:/(?:\b[a-z\d]+(?:[_.:+][a-z\d]+)*_?_|`[^`]+`_?_|_`[^`]+`)(?=[\s\-.,:;!?\\\/'")\]}]|$)/i,alias:"string",inside:{punctuation:/^_?`|`$|`?_?_$/}}],punctuation:{pattern:/(^[\t ]*)(?:\|(?= |$)|(?:---?|—|\.\.|__)(?= )|\.\.$)/m,lookbehind:!0}}}return Bd}var $d,Ak;function mj(){if(Ak)return $d;Ak=1,$d=e,e.displayName="rip",e.aliases=[];function e(t){t.languages.rip={comment:{pattern:/#.*/,greedy:!0},char:{pattern:/\B`[^\s`'",.:;#\/\\()<>\[\]{}]\b/,greedy:!0},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},regex:{pattern:/(^|[^/])\/(?!\/)(?:\[[^\n\r\]]*\]|\\.|[^/\\\r\n\[])+\/(?=\s*(?:$|[\r\n,.;})]))/,lookbehind:!0,greedy:!0},keyword:/(?:=>|->)|\b(?:case|catch|class|else|exit|finally|if|raise|return|switch|try)\b/,builtin:/@|\bSystem\b/,boolean:/\b(?:false|true)\b/,date:/\b\d{4}-\d{2}-\d{2}\b/,time:/\b\d{2}:\d{2}:\d{2}\b/,datetime:/\b\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\b/,symbol:/:[^\d\s`'",.:;#\/\\()<>\[\]{}][^\s`'",.:;#\/\\()<>\[\]{}]*/,number:/[+-]?\b(?:\d+\.\d+|\d+)\b/,punctuation:/(?:\.{2,3})|[`,.:;=\/\\()<>\[\]{}]/,reference:/[^\d\s`'",.:;#\/\\()<>\[\]{}][^\s`'",.:;#\/\\()<>\[\]{}]*/}}return $d}var zd,Rk;function hj(){if(Rk)return zd;Rk=1,zd=e,e.displayName="roboconf",e.aliases=[];function e(t){t.languages.roboconf={comment:/#.*/,keyword:{pattern:/(^|\s)(?:(?:external|import)\b|(?:facet|instance of)(?=[ \t]+[\w-]+[ \t]*\{))/,lookbehind:!0},component:{pattern:/[\w-]+(?=[ \t]*\{)/,alias:"variable"},property:/[\w.-]+(?=[ \t]*:)/,value:{pattern:/(=[ \t]*(?![ \t]))[^,;]+/,lookbehind:!0,alias:"attr-value"},optional:{pattern:/\(optional\)/,alias:"builtin"},wildcard:{pattern:/(\.)\*/,lookbehind:!0,alias:"operator"},punctuation:/[{},.;:=]/}}return zd}var Gd,Ik;function bj(){if(Ik)return Gd;Ik=1,Gd=e,e.displayName="robotframework",e.aliases=[];function e(t){(function(n){var r={pattern:/(^[ \t]*| {2}|\t)#.*/m,lookbehind:!0,greedy:!0},a={pattern:/((?:^|[^\\])(?:\\{2})*)[$@&%]\{(?:[^{}\r\n]|\{[^{}\r\n]*\})*\}/,lookbehind:!0,inside:{punctuation:/^[$@&%]\{|\}$/}};function i(u,d){var c={};c["section-header"]={pattern:/^ ?\*{3}.+?\*{3}/,alias:"keyword"};for(var f in d)c[f]=d[f];return c.tag={pattern:/([\r\n](?: {2}|\t)[ \t]*)\[[-\w]+\]/,lookbehind:!0,inside:{punctuation:/\[|\]/}},c.variable=a,c.comment=r,{pattern:RegExp(/^ ?\*{3}[ \t]*[ \t]*\*{3}(?:.|[\r\n](?!\*{3}))*/.source.replace(//g,function(){return u}),"im"),alias:"section",inside:c}}var o={pattern:/(\[Documentation\](?: {2}|\t)[ \t]*)(?![ \t]|#)(?:.|(?:\r\n?|\n)[ \t]*\.{3})+/,lookbehind:!0,alias:"string"},s={pattern:/([\r\n] ?)(?!#)(?:\S(?:[ \t]\S)*)+/,lookbehind:!0,alias:"function",inside:{variable:a}},l={pattern:/([\r\n](?: {2}|\t)[ \t]*)(?!\[|\.{3}|#)(?:\S(?:[ \t]\S)*)+/,lookbehind:!0,inside:{variable:a}};n.languages.robotframework={settings:i("Settings",{documentation:{pattern:/([\r\n] ?Documentation(?: {2}|\t)[ \t]*)(?![ \t]|#)(?:.|(?:\r\n?|\n)[ \t]*\.{3})+/,lookbehind:!0,alias:"string"},property:{pattern:/([\r\n] ?)(?!\.{3}|#)(?:\S(?:[ \t]\S)*)+/,lookbehind:!0}}),variables:i("Variables"),"test-cases":i("Test Cases",{"test-name":s,documentation:o,property:l}),keywords:i("Keywords",{"keyword-name":s,documentation:o,property:l}),tasks:i("Tasks",{"task-name":s,documentation:o,property:l}),comment:r},n.languages.robot=n.languages.robotframework})(t)}return Gd}var qd,Ck;function yj(){if(Ck)return qd;Ck=1,qd=e,e.displayName="rust",e.aliases=[];function e(t){(function(n){for(var r=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|)*\*\//.source,a=0;a<2;a++)r=r.replace(//g,function(){return r});r=r.replace(//g,function(){return/[^\s\S]/.source}),n.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+r),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<>?=?|[@?]/},n.languages.rust["closure-params"].inside.rest=n.languages.rust,n.languages.rust.attribute.inside.string=n.languages.rust.string})(t)}return qd}var jd,Nk;function Ej(){if(Nk)return jd;Nk=1,jd=e,e.displayName="sas",e.aliases=[];function e(t){(function(n){var r=/(?:"(?:""|[^"])*"(?!")|'(?:''|[^'])*'(?!'))/.source,a=/\b(?:\d[\da-f]*x|\d+(?:\.\d+)?(?:e[+-]?\d+)?)\b/i,i={pattern:RegExp(r+"[bx]"),alias:"number"},o={pattern:/&[a-z_]\w*/i},s={pattern:/((?:^|\s|=|\())%(?:ABORT|BY|CMS|COPY|DISPLAY|DO|ELSE|END|EVAL|GLOBAL|GO|GOTO|IF|INC|INCLUDE|INDEX|INPUT|KTRIM|LENGTH|LET|LIST|LOCAL|PUT|QKTRIM|QSCAN|QSUBSTR|QSYSFUNC|QUPCASE|RETURN|RUN|SCAN|SUBSTR|SUPERQ|SYMDEL|SYMEXIST|SYMGLOBL|SYMLOCAL|SYSCALL|SYSEVALF|SYSEXEC|SYSFUNC|SYSGET|SYSRPUT|THEN|TO|TSO|UNQUOTE|UNTIL|UPCASE|WHILE|WINDOW)\b/i,lookbehind:!0,alias:"keyword"},l={pattern:/(^|\s)(?:proc\s+\w+|data(?!=)|quit|run)\b/i,alias:"keyword",lookbehind:!0},u=[/\/\*[\s\S]*?\*\//,{pattern:/(^[ \t]*|;\s*)\*[^;]*;/m,lookbehind:!0}],d={pattern:RegExp(r),greedy:!0},c=/[$%@.(){}\[\];,\\]/,f={pattern:/%?\b\w+(?=\()/,alias:"keyword"},p={function:f,"arg-value":{pattern:/(=\s*)[A-Z\.]+/i,lookbehind:!0},operator:/=/,"macro-variable":o,arg:{pattern:/[A-Z]+/i,alias:"keyword"},number:a,"numeric-constant":i,punctuation:c,string:d},h={pattern:/\b(?:format|put)\b=?[\w'$.]+/i,inside:{keyword:/^(?:format|put)(?==)/i,equals:/=/,format:{pattern:/(?:\w|\$\d)+\.\d?/,alias:"number"}}},y={pattern:/\b(?:format|put)\s+[\w']+(?:\s+[$.\w]+)+(?=;)/i,inside:{keyword:/^(?:format|put)/i,format:{pattern:/[\w$]+\.\d?/,alias:"number"}}},T={pattern:/((?:^|\s)=?)(?:catname|checkpoint execute_always|dm|endsas|filename|footnote|%include|libname|%list|lock|missing|options|page|resetline|%run|sasfile|skip|sysecho|title\d?)\b/i,lookbehind:!0,alias:"keyword"},b={pattern:/(^|\s)(?:submit(?:\s+(?:load|norun|parseonly))?|endsubmit)\b/i,lookbehind:!0,alias:"keyword"},g=/aStore|accessControl|aggregation|audio|autotune|bayesianNetClassifier|bioMedImage|boolRule|builtins|cardinality|cdm|clustering|conditionalRandomFields|configuration|copula|countreg|dataDiscovery|dataPreprocess|dataSciencePilot|dataStep|decisionTree|deduplication|deepLearn|deepNeural|deepRnn|ds2|ecm|entityRes|espCluster|explainModel|factmac|fastKnn|fcmpact|fedSql|freqTab|gVarCluster|gam|gleam|graphSemiSupLearn|hiddenMarkovModel|hyperGroup|ica|image|iml|kernalPca|langModel|ldaTopic|loadStreams|mbc|mixed|mlTools|modelPublishing|network|neuralNet|nmf|nonParametricBayes|nonlinear|optNetwork|optimization|panel|pca|percentile|phreg|pls|qkb|qlim|quantreg|recommend|regression|reinforcementLearn|robustPca|ruleMining|sampling|sandwich|sccasl|search(?:Analytics)?|sentimentAnalysis|sequence|session(?:Prop)?|severity|simSystem|simple|smartData|sparkEmbeddedProcess|sparseML|spatialreg|spc|stabilityMonitoring|svDataDescription|svm|table|text(?:Filters|Frequency|Mining|Parse|Rule(?:Develop|Score)|Topic|Util)|timeData|transpose|tsInfo|tsReconcile|uniTimeSeries|varReduce/.source,m={pattern:RegExp(/(^|\s)(?:action\s+)?(?:)\.[a-z]+\b[^;]+/.source.replace(//g,function(){return g}),"i"),lookbehind:!0,inside:{keyword:RegExp(/(?:)\.[a-z]+\b/.source.replace(//g,function(){return g}),"i"),action:{pattern:/(?:action)/i,alias:"keyword"},comment:u,function:f,"arg-value":p["arg-value"],operator:p.operator,argument:p.arg,number:a,"numeric-constant":i,punctuation:c,string:d}},v={pattern:/((?:^|\s)=?)(?:after|analysis|and|array|barchart|barwidth|begingraph|by|call|cas|cbarline|cfill|class(?:lev)?|close|column|computed?|contains|continue|data(?==)|define|delete|describe|document|do\s+over|do|dol|drop|dul|else|end(?:comp|source)?|entryTitle|eval(?:uate)?|exec(?:ute)?|exit|file(?:name)?|fill(?:attrs)?|flist|fnc|function(?:list)?|global|goto|group(?:by)?|headline|headskip|histogram|if|infile|keep|keylabel|keyword|label|layout|leave|legendlabel|length|libname|loadactionset|merge|midpoints|_?null_|name|noobs|nowd|ods|options|or|otherwise|out(?:put)?|over(?:lay)?|plot|print|put|raise|ranexp|rannor|rbreak|retain|return|select|session|sessref|set|source|statgraph|sum|summarize|table|temp|terminate|then\s+do|then|title\d?|to|var|when|where|xaxisopts|y2axisopts|yaxisopts)\b/i,lookbehind:!0};n.languages.sas={datalines:{pattern:/^([ \t]*)(?:cards|(?:data)?lines);[\s\S]+?^[ \t]*;/im,lookbehind:!0,alias:"string",inside:{keyword:{pattern:/^(?:cards|(?:data)?lines)/i},punctuation:/;/}},"proc-sql":{pattern:/(^proc\s+(?:fed)?sql(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|data|quit|run);|(?![\s\S]))/im,lookbehind:!0,inside:{sql:{pattern:RegExp(/^[ \t]*(?:select|alter\s+table|(?:create|describe|drop)\s+(?:index|table(?:\s+constraints)?|view)|create\s+unique\s+index|insert\s+into|update)(?:|[^;"'])+;/.source.replace(//g,function(){return r}),"im"),alias:"language-sql",inside:n.languages.sql},"global-statements":T,"sql-statements":{pattern:/(^|\s)(?:disconnect\s+from|begin|commit|exec(?:ute)?|reset|rollback|validate)\b/i,lookbehind:!0,alias:"keyword"},number:a,"numeric-constant":i,punctuation:c,string:d}},"proc-groovy":{pattern:/(^proc\s+groovy(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|data|quit|run);|(?![\s\S]))/im,lookbehind:!0,inside:{comment:u,groovy:{pattern:RegExp(/(^[ \t]*submit(?:\s+(?:load|norun|parseonly))?)(?:|[^"'])+?(?=endsubmit;)/.source.replace(//g,function(){return r}),"im"),lookbehind:!0,alias:"language-groovy",inside:n.languages.groovy},keyword:v,"submit-statement":b,"global-statements":T,number:a,"numeric-constant":i,punctuation:c,string:d}},"proc-lua":{pattern:/(^proc\s+lua(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|data|quit|run);|(?![\s\S]))/im,lookbehind:!0,inside:{comment:u,lua:{pattern:RegExp(/(^[ \t]*submit(?:\s+(?:load|norun|parseonly))?)(?:|[^"'])+?(?=endsubmit;)/.source.replace(//g,function(){return r}),"im"),lookbehind:!0,alias:"language-lua",inside:n.languages.lua},keyword:v,"submit-statement":b,"global-statements":T,number:a,"numeric-constant":i,punctuation:c,string:d}},"proc-cas":{pattern:/(^proc\s+cas(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|quit|data);|(?![\s\S]))/im,lookbehind:!0,inside:{comment:u,"statement-var":{pattern:/((?:^|\s)=?)saveresult\s[^;]+/im,lookbehind:!0,inside:{statement:{pattern:/^saveresult\s+\S+/i,inside:{keyword:/^(?:saveresult)/i}},rest:p}},"cas-actions":m,statement:{pattern:/((?:^|\s)=?)(?:default|(?:un)?set|on|output|upload)[^;]+/im,lookbehind:!0,inside:p},step:l,keyword:v,function:f,format:h,altformat:y,"global-statements":T,number:a,"numeric-constant":i,punctuation:c,string:d}},"proc-args":{pattern:RegExp(/(^proc\s+\w+\s+)(?!\s)(?:[^;"']|)+;/.source.replace(//g,function(){return r}),"im"),lookbehind:!0,inside:p},"macro-keyword":s,"macro-variable":o,"macro-string-functions":{pattern:/((?:^|\s|=))%(?:BQUOTE|NRBQUOTE|NRQUOTE|NRSTR|QUOTE|STR)\(.*?(?:[^%]\))/i,lookbehind:!0,inside:{function:{pattern:/%(?:BQUOTE|NRBQUOTE|NRQUOTE|NRSTR|QUOTE|STR)/i,alias:"keyword"},"macro-keyword":s,"macro-variable":o,"escaped-char":{pattern:/%['"()<>=¬^~;,#]/},punctuation:c}},"macro-declaration":{pattern:/^%macro[^;]+(?=;)/im,inside:{keyword:/%macro/i}},"macro-end":{pattern:/^%mend[^;]+(?=;)/im,inside:{keyword:/%mend/i}},macro:{pattern:/%_\w+(?=\()/,alias:"keyword"},input:{pattern:/\binput\s[-\w\s/*.$&]+;/i,inside:{input:{alias:"keyword",pattern:/^input/i},comment:u,number:a,"numeric-constant":i}},"options-args":{pattern:/(^options)[-'"|/\\<>*+=:()\w\s]*(?=;)/im,lookbehind:!0,inside:p},"cas-actions":m,comment:u,function:f,format:h,altformat:y,"numeric-constant":i,datetime:{pattern:RegExp(r+"(?:dt?|t)"),alias:"number"},string:d,step:l,keyword:v,"operator-keyword":{pattern:/\b(?:eq|ge|gt|in|le|lt|ne|not)\b/i,alias:"operator"},number:a,operator:/\*\*?|\|\|?|!!?|¦¦?|<[>=]?|>[<=]?|[-+\/=&]|[~¬^]=?/,punctuation:c}})(t)}return jd}var Hd,xk;function Sj(){if(xk)return Hd;xk=1,Hd=e,e.displayName="sass",e.aliases=[];function e(t){(function(n){n.languages.sass=n.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),n.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete n.languages.sass.atrule;var r=/\$[-\w]+|#\{\$[-\w]+\}/,a=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];n.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:r,operator:a}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:r,operator:a,important:n.languages.sass.important}}}),delete n.languages.sass.property,delete n.languages.sass.important,n.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})})(t)}return Hd}var Vd,Ok;function vj(){if(Ok)return Vd;Ok=1;var e=Gm();Vd=t,t.displayName="scala",t.aliases=[];function t(n){n.register(e),n.languages.scala=n.languages.extend("java",{"triple-quoted-string":{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string"},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},keyword:/<-|=>|\b(?:abstract|case|catch|class|def|do|else|extends|final|finally|for|forSome|if|implicit|import|lazy|match|new|null|object|override|package|private|protected|return|sealed|self|super|this|throw|trait|try|type|val|var|while|with|yield)\b/,number:/\b0x(?:[\da-f]*\.)?[\da-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e\d+)?[dfl]?/i,builtin:/\b(?:Any|AnyRef|AnyVal|Boolean|Byte|Char|Double|Float|Int|Long|Nothing|Short|String|Unit)\b/,symbol:/'[^\d\s\\]\w*/}),n.languages.insertBefore("scala","triple-quoted-string",{"string-interpolation":{pattern:/\b[a-z]\w*(?:"""(?:[^$]|\$(?:[^{]|\{(?:[^{}]|\{[^{}]*\})*\}))*?"""|"(?:[^$"\r\n]|\$(?:[^{]|\{(?:[^{}]|\{[^{}]*\})*\}))*")/i,greedy:!0,inside:{id:{pattern:/^\w+/,greedy:!0,alias:"function"},escape:{pattern:/\\\$"|\$[$"]/,greedy:!0,alias:"symbol"},interpolation:{pattern:/\$(?:\w+|\{(?:[^{}]|\{[^{}]*\})*\})/,greedy:!0,inside:{punctuation:/^\$\{?|\}$/,expression:{pattern:/[\s\S]+/,inside:n.languages.scala}}},string:/[\s\S]+/}}}),delete n.languages.scala["class-name"],delete n.languages.scala.function}return Vd}var Wd,Lk;function kj(){if(Lk)return Wd;Lk=1,Wd=e,e.displayName="scss",e.aliases=[];function e(t){t.languages.scss=t.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),t.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),t.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),t.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),t.languages.scss.atrule.inside.rest=t.languages.scss}return Wd}var Yd,Dk;function wj(){if(Dk)return Yd;Dk=1;var e=GR();Yd=t,t.displayName="shellSession",t.aliases=[];function t(n){n.register(e),function(r){var a=[/"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/.source,/'[^']*'/.source,/\$'(?:[^'\\]|\\[\s\S])*'/.source,/<<-?\s*(["']?)(\w+)\1\s[\s\S]*?[\r\n]\2/.source].join("|");r.languages["shell-session"]={command:{pattern:RegExp(/^/.source+"(?:"+(/[^\s@:$#%*!/\\]+@[^\r\n@:$#%*!/\\]+(?::[^\0-\x1F$#%*?"<>:;|]+)?/.source+"|"+/[/~.][^\0-\x1F$#%*?"<>@:;|]*/.source)+")?"+/[$#%](?=\s)/.source+/(?:[^\\\r\n \t'"<$]|[ \t](?:(?!#)|#.*$)|\\(?:[^\r]|\r\n?)|\$(?!')|<(?!<)|<>)+/.source.replace(/<>/g,function(){return a}),"m"),greedy:!0,inside:{info:{pattern:/^[^#$%]+/,alias:"punctuation",inside:{user:/^[^\s@:$#%*!/\\]+@[^\r\n@:$#%*!/\\]+/,punctuation:/:/,path:/[\s\S]+/}},bash:{pattern:/(^[$#%]\s*)\S[\s\S]*/,lookbehind:!0,alias:"language-bash",inside:r.languages.bash},"shell-symbol":{pattern:/^[$#%]/,alias:"important"}}},output:/.(?:.*(?:[\r\n]|.$))*/},r.languages["sh-session"]=r.languages.shellsession=r.languages["shell-session"]}(n)}return Yd}var Kd,Mk;function _j(){if(Mk)return Kd;Mk=1,Kd=e,e.displayName="smali",e.aliases=[];function e(t){t.languages.smali={comment:/#.*/,string:{pattern:/"(?:[^\r\n\\"]|\\.)*"|'(?:[^\r\n\\']|\\(?:.|u[\da-fA-F]{4}))'/,greedy:!0},"class-name":{pattern:/(^|[^L])L(?:(?:\w+|`[^`\r\n]*`)\/)*(?:[\w$]+|`[^`\r\n]*`)(?=\s*;)/,lookbehind:!0,inside:{"class-name":{pattern:/(^L|\/)(?:[\w$]+|`[^`\r\n]*`)$/,lookbehind:!0},namespace:{pattern:/^(L)(?:(?:\w+|`[^`\r\n]*`)\/)+/,lookbehind:!0,inside:{punctuation:/\//}},builtin:/^L/}},builtin:[{pattern:/([();\[])[BCDFIJSVZ]+/,lookbehind:!0},{pattern:/([\w$>]:)[BCDFIJSVZ]/,lookbehind:!0}],keyword:[{pattern:/(\.end\s+)[\w-]+/,lookbehind:!0},{pattern:/(^|[^\w.-])\.(?!\d)[\w-]+/,lookbehind:!0},{pattern:/(^|[^\w.-])(?:abstract|annotation|bridge|constructor|enum|final|interface|private|protected|public|runtime|static|synthetic|system|transient)(?![\w.-])/,lookbehind:!0}],function:{pattern:/(^|[^\w.-])(?:\w+|<[\w$-]+>)(?=\()/,lookbehind:!0},field:{pattern:/[\w$]+(?=:)/,alias:"variable"},register:{pattern:/(^|[^\w.-])[vp]\d(?![\w.-])/,lookbehind:!0,alias:"variable"},boolean:{pattern:/(^|[^\w.-])(?:false|true)(?![\w.-])/,lookbehind:!0},number:{pattern:/(^|[^/\w.-])-?(?:NAN|INFINITY|0x(?:[\dA-F]+(?:\.[\dA-F]*)?|\.[\dA-F]+)(?:p[+-]?[\dA-F]+)?|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?)[dflst]?(?![\w.-])/i,lookbehind:!0},label:{pattern:/(:)\w+/,lookbehind:!0,alias:"property"},operator:/->|\.\.|[\[=]/,punctuation:/[{}(),;:]/}}return Kd}var Xd,Fk;function Tj(){if(Fk)return Xd;Fk=1,Xd=e,e.displayName="smalltalk",e.aliases=[];function e(t){t.languages.smalltalk={comment:{pattern:/"(?:""|[^"])*"/,greedy:!0},char:{pattern:/\$./,greedy:!0},string:{pattern:/'(?:''|[^'])*'/,greedy:!0},symbol:/#[\da-z]+|#(?:-|([+\/\\*~<>=@%|&?!])\1?)|#(?=\()/i,"block-arguments":{pattern:/(\[\s*):[^\[|]*\|/,lookbehind:!0,inside:{variable:/:[\da-z]+/i,punctuation:/\|/}},"temporary-variables":{pattern:/\|[^|]+\|/,inside:{variable:/[\da-z]+/i,punctuation:/\|/}},keyword:/\b(?:new|nil|self|super)\b/,boolean:/\b(?:false|true)\b/,number:[/\d+r-?[\dA-Z]+(?:\.[\dA-Z]+)?(?:e-?\d+)?/,/\b\d+(?:\.\d+)?(?:e-?\d+)?/],operator:/[<=]=?|:=|~[~=]|\/\/?|\\\\|>[>=]?|[!^+\-*&|,@]/,punctuation:/[.;:?\[\](){}]/}}return Xd}var Zd,Pk;function Aj(){if(Pk)return Zd;Pk=1;var e=nt();Zd=t,t.displayName="smarty",t.aliases=[];function t(n){n.register(e),function(r){r.languages.smarty={comment:{pattern:/^\{\*[\s\S]*?\*\}/,greedy:!0},"embedded-php":{pattern:/^\{php\}[\s\S]*?\{\/php\}/,greedy:!0,inside:{smarty:{pattern:/^\{php\}|\{\/php\}$/,inside:null},php:{pattern:/[\s\S]+/,alias:"language-php",inside:r.languages.php}}},string:[{pattern:/"(?:\\.|[^"\\\r\n])*"/,greedy:!0,inside:{interpolation:{pattern:/\{[^{}]*\}|`[^`]*`/,inside:{"interpolation-punctuation":{pattern:/^[{`]|[`}]$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:null}}},variable:/\$\w+/}},{pattern:/'(?:\\.|[^'\\\r\n])*'/,greedy:!0}],keyword:{pattern:/(^\{\/?)[a-z_]\w*\b(?!\()/i,lookbehind:!0,greedy:!0},delimiter:{pattern:/^\{\/?|\}$/,greedy:!0,alias:"punctuation"},number:/\b0x[\dA-Fa-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][-+]?\d+)?/,variable:[/\$(?!\d)\w+/,/#(?!\d)\w+#/,{pattern:/(\.|->|\w\s*=)(?!\d)\w+\b(?!\()/,lookbehind:!0},{pattern:/(\[)(?!\d)\w+(?=\])/,lookbehind:!0}],function:{pattern:/(\|\s*)@?[a-z_]\w*|\b[a-z_]\w*(?=\()/i,lookbehind:!0},"attr-name":/\b[a-z_]\w*(?=\s*=)/i,boolean:/\b(?:false|no|off|on|true|yes)\b/,punctuation:/[\[\](){}.,:`]|->/,operator:[/[+\-*\/%]|==?=?|[!<>]=?|&&|\|\|?/,/\bis\s+(?:not\s+)?(?:div|even|odd)(?:\s+by)?\b/,/\b(?:and|eq|gt?e|gt|lt?e|lt|mod|neq?|not|or)\b/]},r.languages.smarty["embedded-php"].inside.smarty.inside=r.languages.smarty,r.languages.smarty.string[0].inside.interpolation.inside.expression.inside=r.languages.smarty;var a=/"(?:\\.|[^"\\\r\n])*"|'(?:\\.|[^'\\\r\n])*'/,i=RegExp(/\{\*[\s\S]*?\*\}/.source+"|"+/\{php\}[\s\S]*?\{\/php\}/.source+"|"+/\{(?:[^{}"']||\{(?:[^{}"']||\{(?:[^{}"']|)*\})*\})*\}/.source.replace(//g,function(){return a.source}),"g");r.hooks.add("before-tokenize",function(o){var s="{literal}",l="{/literal}",u=!1;r.languages["markup-templating"].buildPlaceholders(o,"smarty",i,function(d){return d===l&&(u=!1),u?!1:(d===s&&(u=!0),!0)})}),r.hooks.add("after-tokenize",function(o){r.languages["markup-templating"].tokenizePlaceholders(o,"smarty")})}(n)}return Zd}var Qd,Uk;function Rj(){if(Uk)return Qd;Uk=1,Qd=e,e.displayName="sml",e.aliases=["smlnj"];function e(t){(function(n){var r=/\b(?:abstype|and|andalso|as|case|datatype|do|else|end|eqtype|exception|fn|fun|functor|handle|if|in|include|infix|infixr|let|local|nonfix|of|op|open|orelse|raise|rec|sharing|sig|signature|struct|structure|then|type|val|where|while|with|withtype)\b/i;n.languages.sml={comment:/\(\*(?:[^*(]|\*(?!\))|\((?!\*)|\(\*(?:[^*(]|\*(?!\))|\((?!\*))*\*\))*\*\)/,string:{pattern:/#?"(?:[^"\\]|\\.)*"/,greedy:!0},"class-name":[{pattern:RegExp(/((?:^|[^:]):\s*)(?:\s*(?:(?:\*|->)\s*|,\s*(?:(?=)|(?!)\s+)))*/.source.replace(//g,function(){return/\s*(?:[*,]|->)/.source}).replace(//g,function(){return/(?:'[\w']*||\((?:[^()]|\([^()]*\))*\)|\{(?:[^{}]|\{[^{}]*\})*\})(?:\s+)*/.source}).replace(//g,function(){return/(?!)[a-z\d_][\w'.]*/.source}).replace(//g,function(){return r.source}),"i"),lookbehind:!0,greedy:!0,inside:null},{pattern:/((?:^|[^\w'])(?:datatype|exception|functor|signature|structure|type)\s+)[a-z_][\w'.]*/i,lookbehind:!0}],function:{pattern:/((?:^|[^\w'])fun\s+)[a-z_][\w'.]*/i,lookbehind:!0},keyword:r,variable:{pattern:/(^|[^\w'])'[\w']*/,lookbehind:!0},number:/~?\b(?:\d+(?:\.\d+)?(?:e~?\d+)?|0x[\da-f]+)\b/i,word:{pattern:/\b0w(?:\d+|x[\da-f]+)\b/i,alias:"constant"},boolean:/\b(?:false|true)\b/i,operator:/\.\.\.|:[>=:]|=>?|->|[<>]=?|[!+\-*/^#|@~]/,punctuation:/[(){}\[\].:,;]/},n.languages.sml["class-name"][0].inside=n.languages.sml,n.languages.smlnj=n.languages.sml})(t)}return Qd}var Jd,Bk;function Ij(){if(Bk)return Jd;Bk=1,Jd=e,e.displayName="solidity",e.aliases=["sol"];function e(t){t.languages.solidity=t.languages.extend("clike",{"class-name":{pattern:/(\b(?:contract|enum|interface|library|new|struct|using)\s+)(?!\d)[\w$]+/,lookbehind:!0},keyword:/\b(?:_|anonymous|as|assembly|assert|break|calldata|case|constant|constructor|continue|contract|default|delete|do|else|emit|enum|event|external|for|from|function|if|import|indexed|inherited|interface|internal|is|let|library|mapping|memory|modifier|new|payable|pragma|private|public|pure|require|returns?|revert|selfdestruct|solidity|storage|struct|suicide|switch|this|throw|using|var|view|while)\b/,operator:/=>|->|:=|=:|\*\*|\+\+|--|\|\||&&|<<=?|>>=?|[-+*/%^&|<>!=]=?|[~?]/}),t.languages.insertBefore("solidity","keyword",{builtin:/\b(?:address|bool|byte|u?int(?:8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?|string|bytes(?:[1-9]|[12]\d|3[0-2])?)\b/}),t.languages.insertBefore("solidity","number",{version:{pattern:/([<>]=?|\^)\d+\.\d+\.\d+\b/,lookbehind:!0,alias:"number"}}),t.languages.sol=t.languages.solidity}return Jd}var ep,$k;function Cj(){if($k)return ep;$k=1,ep=e,e.displayName="solutionFile",e.aliases=[];function e(t){(function(n){var r={pattern:/\{[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}\}/i,alias:"constant",inside:{punctuation:/[{}]/}};n.languages["solution-file"]={comment:{pattern:/#.*/,greedy:!0},string:{pattern:/"[^"\r\n]*"|'[^'\r\n]*'/,greedy:!0,inside:{guid:r}},object:{pattern:/^([ \t]*)(?:([A-Z]\w*)\b(?=.*(?:\r\n?|\n)(?:\1[ \t].*(?:\r\n?|\n))*\1End\2(?=[ \t]*$))|End[A-Z]\w*(?=[ \t]*$))/m,lookbehind:!0,greedy:!0,alias:"keyword"},property:{pattern:/^([ \t]*)(?!\s)[^\r\n"#=()]*[^\s"#=()](?=\s*=)/m,lookbehind:!0,inside:{guid:r}},guid:r,number:/\b\d+(?:\.\d+)*\b/,boolean:/\b(?:FALSE|TRUE)\b/,operator:/=/,punctuation:/[(),]/},n.languages.sln=n.languages["solution-file"]})(t)}return ep}var tp,zk;function Nj(){if(zk)return tp;zk=1;var e=nt();tp=t,t.displayName="soy",t.aliases=[];function t(n){n.register(e),function(r){var a=/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,i=/\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b|\b0x[\dA-F]+\b/;r.languages.soy={comment:[/\/\*[\s\S]*?\*\//,{pattern:/(\s)\/\/.*/,lookbehind:!0,greedy:!0}],"command-arg":{pattern:/(\{+\/?\s*(?:alias|call|delcall|delpackage|deltemplate|namespace|template)\s+)\.?[\w.]+/,lookbehind:!0,alias:"string",inside:{punctuation:/\./}},parameter:{pattern:/(\{+\/?\s*@?param\??\s+)\.?[\w.]+/,lookbehind:!0,alias:"variable"},keyword:[{pattern:/(\{+\/?[^\S\r\n]*)(?:\\[nrt]|alias|call|case|css|default|delcall|delpackage|deltemplate|else(?:if)?|fallbackmsg|for(?:each)?|if(?:empty)?|lb|let|literal|msg|namespace|nil|@?param\??|rb|sp|switch|template|xid)/,lookbehind:!0},/\b(?:any|as|attributes|bool|css|float|html|in|int|js|list|map|null|number|string|uri)\b/],delimiter:{pattern:/^\{+\/?|\/?\}+$/,alias:"punctuation"},property:/\w+(?==)/,variable:{pattern:/\$[^\W\d]\w*(?:\??(?:\.\w+|\[[^\]]+\]))*/,inside:{string:{pattern:a,greedy:!0},number:i,punctuation:/[\[\].?]/}},string:{pattern:a,greedy:!0},function:[/\w+(?=\()/,{pattern:/(\|[^\S\r\n]*)\w+/,lookbehind:!0}],boolean:/\b(?:false|true)\b/,number:i,operator:/\?:?|<=?|>=?|==?|!=|[+*/%-]|\b(?:and|not|or)\b/,punctuation:/[{}()\[\]|.,:]/},r.hooks.add("before-tokenize",function(o){var s=/\{\{.+?\}\}|\{.+?\}|\s\/\/.*|\/\*[\s\S]*?\*\//g,l="{literal}",u="{/literal}",d=!1;r.languages["markup-templating"].buildPlaceholders(o,"soy",s,function(c){return c===u&&(d=!1),d?!1:(c===l&&(d=!0),!0)})}),r.hooks.add("after-tokenize",function(o){r.languages["markup-templating"].tokenizePlaceholders(o,"soy")})}(n)}return tp}var np,Gk;function VR(){if(Gk)return np;Gk=1,np=e,e.displayName="turtle",e.aliases=[];function e(t){t.languages.turtle={comment:{pattern:/#.*/,greedy:!0},"multiline-string":{pattern:/"""(?:(?:""?)?(?:[^"\\]|\\.))*"""|'''(?:(?:''?)?(?:[^'\\]|\\.))*'''/,greedy:!0,alias:"string",inside:{comment:/#.*/}},string:{pattern:/"(?:[^\\"\r\n]|\\.)*"|'(?:[^\\'\r\n]|\\.)*'/,greedy:!0},url:{pattern:/<(?:[^\x00-\x20<>"{}|^`\\]|\\(?:u[\da-fA-F]{4}|U[\da-fA-F]{8}))*>/,greedy:!0,inside:{punctuation:/[<>]/}},function:{pattern:/(?:(?![-.\d\xB7])[-.\w\xB7\xC0-\uFFFD]+)?:(?:(?![-.])(?:[-.:\w\xC0-\uFFFD]|%[\da-f]{2}|\\.)+)?/i,inside:{"local-name":{pattern:/([^:]*:)[\s\S]+/,lookbehind:!0},prefix:{pattern:/[\s\S]+/,inside:{punctuation:/:/}}}},number:/[+-]?\b\d+(?:\.\d*)?(?:e[+-]?\d+)?/i,punctuation:/[{}.,;()[\]]|\^\^/,boolean:/\b(?:false|true)\b/,keyword:[/(?:\ba|@prefix|@base)\b|=/,/\b(?:base|graph|prefix)\b/i],tag:{pattern:/@[a-z]+(?:-[a-z\d]+)*/i,inside:{punctuation:/@/}}},t.languages.trig=t.languages.turtle}return np}var rp,qk;function xj(){if(qk)return rp;qk=1;var e=VR();rp=t,t.displayName="sparql",t.aliases=["rq"];function t(n){n.register(e),n.languages.sparql=n.languages.extend("turtle",{boolean:/\b(?:false|true)\b/i,variable:{pattern:/[?$]\w+/,greedy:!0}}),n.languages.insertBefore("sparql","punctuation",{keyword:[/\b(?:A|ADD|ALL|AS|ASC|ASK|BNODE|BY|CLEAR|CONSTRUCT|COPY|CREATE|DATA|DEFAULT|DELETE|DESC|DESCRIBE|DISTINCT|DROP|EXISTS|FILTER|FROM|GROUP|HAVING|INSERT|INTO|LIMIT|LOAD|MINUS|MOVE|NAMED|NOT|NOW|OFFSET|OPTIONAL|ORDER|RAND|REDUCED|SELECT|SEPARATOR|SERVICE|SILENT|STRUUID|UNION|USING|UUID|VALUES|WHERE)\b/i,/\b(?:ABS|AVG|BIND|BOUND|CEIL|COALESCE|CONCAT|CONTAINS|COUNT|DATATYPE|DAY|ENCODE_FOR_URI|FLOOR|GROUP_CONCAT|HOURS|IF|IRI|isBLANK|isIRI|isLITERAL|isNUMERIC|isURI|LANG|LANGMATCHES|LCASE|MAX|MD5|MIN|MINUTES|MONTH|REGEX|REPLACE|ROUND|sameTerm|SAMPLE|SECONDS|SHA1|SHA256|SHA384|SHA512|STR|STRAFTER|STRBEFORE|STRDT|STRENDS|STRLANG|STRLEN|STRSTARTS|SUBSTR|SUM|TIMEZONE|TZ|UCASE|URI|YEAR)\b(?=\s*\()/i,/\b(?:BASE|GRAPH|PREFIX)\b/i]}),n.languages.rq=n.languages.sparql}return rp}var ap,jk;function Oj(){if(jk)return ap;jk=1,ap=e,e.displayName="splunkSpl",e.aliases=[];function e(t){t.languages["splunk-spl"]={comment:/`comment\("(?:\\.|[^\\"])*"\)`/,string:{pattern:/"(?:\\.|[^\\"])*"/,greedy:!0},keyword:/\b(?:abstract|accum|addcoltotals|addinfo|addtotals|analyzefields|anomalies|anomalousvalue|anomalydetection|append|appendcols|appendcsv|appendlookup|appendpipe|arules|associate|audit|autoregress|bin|bucket|bucketdir|chart|cluster|cofilter|collect|concurrency|contingency|convert|correlate|datamodel|dbinspect|dedup|delete|delta|diff|erex|eval|eventcount|eventstats|extract|fieldformat|fields|fieldsummary|filldown|fillnull|findtypes|folderize|foreach|format|from|gauge|gentimes|geom|geomfilter|geostats|head|highlight|history|iconify|input|inputcsv|inputlookup|iplocation|join|kmeans|kv|kvform|loadjob|localize|localop|lookup|makecontinuous|makemv|makeresults|map|mcollect|metadata|metasearch|meventcollect|mstats|multikv|multisearch|mvcombine|mvexpand|nomv|outlier|outputcsv|outputlookup|outputtext|overlap|pivot|predict|rangemap|rare|regex|relevancy|reltime|rename|replace|rest|return|reverse|rex|rtorder|run|savedsearch|script|scrub|search|searchtxn|selfjoin|sendemail|set|setfields|sichart|sirare|sistats|sitimechart|sitop|sort|spath|stats|strcat|streamstats|table|tags|tail|timechart|timewrap|top|transaction|transpose|trendline|tscollect|tstats|typeahead|typelearner|typer|union|uniq|untable|where|x11|xmlkv|xmlunescape|xpath|xyseries)\b/i,"operator-word":{pattern:/\b(?:and|as|by|not|or|xor)\b/i,alias:"operator"},function:/\b\w+(?=\s*\()/,property:/\b\w+(?=\s*=(?!=))/,date:{pattern:/\b\d{1,2}\/\d{1,2}\/\d{1,4}(?:(?::\d{1,2}){3})?\b/,alias:"number"},number:/\b\d+(?:\.\d+)?\b/,boolean:/\b(?:f|false|t|true)\b/i,operator:/[<>=]=?|[-+*/%|]/,punctuation:/[()[\],]/}}return ap}var ip,Hk;function Lj(){if(Hk)return ip;Hk=1,ip=e,e.displayName="sqf",e.aliases=[];function e(t){t.languages.sqf=t.languages.extend("clike",{string:{pattern:/"(?:(?:"")?[^"])*"(?!")|'(?:[^'])*'/,greedy:!0},keyword:/\b(?:breakOut|breakTo|call|case|catch|default|do|echo|else|execFSM|execVM|exitWith|for|forEach|forEachMember|forEachMemberAgent|forEachMemberTeam|from|goto|if|nil|preprocessFile|preprocessFileLineNumbers|private|scopeName|spawn|step|switch|then|throw|to|try|while|with)\b/i,boolean:/\b(?:false|true)\b/i,function:/\b(?:abs|accTime|acos|action|actionIDs|actionKeys|actionKeysImages|actionKeysNames|actionKeysNamesArray|actionName|actionParams|activateAddons|activatedAddons|activateKey|add3DENConnection|add3DENEventHandler|add3DENLayer|addAction|addBackpack|addBackpackCargo|addBackpackCargoGlobal|addBackpackGlobal|addCamShake|addCuratorAddons|addCuratorCameraArea|addCuratorEditableObjects|addCuratorEditingArea|addCuratorPoints|addEditorObject|addEventHandler|addForce|addForceGeneratorRTD|addGoggles|addGroupIcon|addHandgunItem|addHeadgear|addItem|addItemCargo|addItemCargoGlobal|addItemPool|addItemToBackpack|addItemToUniform|addItemToVest|addLiveStats|addMagazine|addMagazineAmmoCargo|addMagazineCargo|addMagazineCargoGlobal|addMagazineGlobal|addMagazinePool|addMagazines|addMagazineTurret|addMenu|addMenuItem|addMissionEventHandler|addMPEventHandler|addMusicEventHandler|addOwnedMine|addPlayerScores|addPrimaryWeaponItem|addPublicVariableEventHandler|addRating|addResources|addScore|addScoreSide|addSecondaryWeaponItem|addSwitchableUnit|addTeamMember|addToRemainsCollector|addTorque|addUniform|addVehicle|addVest|addWaypoint|addWeapon|addWeaponCargo|addWeaponCargoGlobal|addWeaponGlobal|addWeaponItem|addWeaponPool|addWeaponTurret|admin|agent|agents|AGLToASL|aimedAtTarget|aimPos|airDensityCurveRTD|airDensityRTD|airplaneThrottle|airportSide|AISFinishHeal|alive|all3DENEntities|allAirports|allControls|allCurators|allCutLayers|allDead|allDeadMen|allDisplays|allGroups|allMapMarkers|allMines|allMissionObjects|allow3DMode|allowCrewInImmobile|allowCuratorLogicIgnoreAreas|allowDamage|allowDammage|allowFileOperations|allowFleeing|allowGetIn|allowSprint|allPlayers|allSimpleObjects|allSites|allTurrets|allUnits|allUnitsUAV|allVariables|ammo|ammoOnPylon|animate|animateBay|animateDoor|animatePylon|animateSource|animationNames|animationPhase|animationSourcePhase|animationState|append|apply|armoryPoints|arrayIntersect|asin|ASLToAGL|ASLToATL|assert|assignAsCargo|assignAsCargoIndex|assignAsCommander|assignAsDriver|assignAsGunner|assignAsTurret|assignCurator|assignedCargo|assignedCommander|assignedDriver|assignedGunner|assignedItems|assignedTarget|assignedTeam|assignedVehicle|assignedVehicleRole|assignItem|assignTeam|assignToAirport|atan|atan2|atg|ATLToASL|attachedObject|attachedObjects|attachedTo|attachObject|attachTo|attackEnabled|backpack|backpackCargo|backpackContainer|backpackItems|backpackMagazines|backpackSpaceFor|behaviour|benchmark|binocular|blufor|boundingBox|boundingBoxReal|boundingCenter|briefingName|buildingExit|buildingPos|buldozer_EnableRoadDiag|buldozer_IsEnabledRoadDiag|buldozer_LoadNewRoads|buldozer_reloadOperMap|buttonAction|buttonSetAction|cadetMode|callExtension|camCommand|camCommit|camCommitPrepared|camCommitted|camConstuctionSetParams|camCreate|camDestroy|cameraEffect|cameraEffectEnableHUD|cameraInterest|cameraOn|cameraView|campaignConfigFile|camPreload|camPreloaded|camPrepareBank|camPrepareDir|camPrepareDive|camPrepareFocus|camPrepareFov|camPrepareFovRange|camPreparePos|camPrepareRelPos|camPrepareTarget|camSetBank|camSetDir|camSetDive|camSetFocus|camSetFov|camSetFovRange|camSetPos|camSetRelPos|camSetTarget|camTarget|camUseNVG|canAdd|canAddItemToBackpack|canAddItemToUniform|canAddItemToVest|cancelSimpleTaskDestination|canFire|canMove|canSlingLoad|canStand|canSuspend|canTriggerDynamicSimulation|canUnloadInCombat|canVehicleCargo|captive|captiveNum|cbChecked|cbSetChecked|ceil|channelEnabled|cheatsEnabled|checkAIFeature|checkVisibility|civilian|className|clear3DENAttribute|clear3DENInventory|clearAllItemsFromBackpack|clearBackpackCargo|clearBackpackCargoGlobal|clearForcesRTD|clearGroupIcons|clearItemCargo|clearItemCargoGlobal|clearItemPool|clearMagazineCargo|clearMagazineCargoGlobal|clearMagazinePool|clearOverlay|clearRadio|clearVehicleInit|clearWeaponCargo|clearWeaponCargoGlobal|clearWeaponPool|clientOwner|closeDialog|closeDisplay|closeOverlay|collapseObjectTree|collect3DENHistory|collectiveRTD|combatMode|commandArtilleryFire|commandChat|commander|commandFire|commandFollow|commandFSM|commandGetOut|commandingMenu|commandMove|commandRadio|commandStop|commandSuppressiveFire|commandTarget|commandWatch|comment|commitOverlay|compile|compileFinal|completedFSM|composeText|configClasses|configFile|configHierarchy|configName|configNull|configProperties|configSourceAddonList|configSourceMod|configSourceModList|confirmSensorTarget|connectTerminalToUAV|controlNull|controlsGroupCtrl|copyFromClipboard|copyToClipboard|copyWaypoints|cos|count|countEnemy|countFriendly|countSide|countType|countUnknown|create3DENComposition|create3DENEntity|createAgent|createCenter|createDialog|createDiaryLink|createDiaryRecord|createDiarySubject|createDisplay|createGearDialog|createGroup|createGuardedPoint|createLocation|createMarker|createMarkerLocal|createMenu|createMine|createMissionDisplay|createMPCampaignDisplay|createSimpleObject|createSimpleTask|createSite|createSoundSource|createTask|createTeam|createTrigger|createUnit|createVehicle|createVehicleCrew|createVehicleLocal|crew|ctAddHeader|ctAddRow|ctClear|ctCurSel|ctData|ctFindHeaderRows|ctFindRowHeader|ctHeaderControls|ctHeaderCount|ctRemoveHeaders|ctRemoveRows|ctrlActivate|ctrlAddEventHandler|ctrlAngle|ctrlAutoScrollDelay|ctrlAutoScrollRewind|ctrlAutoScrollSpeed|ctrlChecked|ctrlClassName|ctrlCommit|ctrlCommitted|ctrlCreate|ctrlDelete|ctrlEnable|ctrlEnabled|ctrlFade|ctrlHTMLLoaded|ctrlIDC|ctrlIDD|ctrlMapAnimAdd|ctrlMapAnimClear|ctrlMapAnimCommit|ctrlMapAnimDone|ctrlMapCursor|ctrlMapMouseOver|ctrlMapScale|ctrlMapScreenToWorld|ctrlMapWorldToScreen|ctrlModel|ctrlModelDirAndUp|ctrlModelScale|ctrlParent|ctrlParentControlsGroup|ctrlPosition|ctrlRemoveAllEventHandlers|ctrlRemoveEventHandler|ctrlScale|ctrlSetActiveColor|ctrlSetAngle|ctrlSetAutoScrollDelay|ctrlSetAutoScrollRewind|ctrlSetAutoScrollSpeed|ctrlSetBackgroundColor|ctrlSetChecked|ctrlSetDisabledColor|ctrlSetEventHandler|ctrlSetFade|ctrlSetFocus|ctrlSetFont|ctrlSetFontH1|ctrlSetFontH1B|ctrlSetFontH2|ctrlSetFontH2B|ctrlSetFontH3|ctrlSetFontH3B|ctrlSetFontH4|ctrlSetFontH4B|ctrlSetFontH5|ctrlSetFontH5B|ctrlSetFontH6|ctrlSetFontH6B|ctrlSetFontHeight|ctrlSetFontHeightH1|ctrlSetFontHeightH2|ctrlSetFontHeightH3|ctrlSetFontHeightH4|ctrlSetFontHeightH5|ctrlSetFontHeightH6|ctrlSetFontHeightSecondary|ctrlSetFontP|ctrlSetFontPB|ctrlSetFontSecondary|ctrlSetForegroundColor|ctrlSetModel|ctrlSetModelDirAndUp|ctrlSetModelScale|ctrlSetPixelPrecision|ctrlSetPosition|ctrlSetScale|ctrlSetStructuredText|ctrlSetText|ctrlSetTextColor|ctrlSetTextColorSecondary|ctrlSetTextSecondary|ctrlSetTooltip|ctrlSetTooltipColorBox|ctrlSetTooltipColorShade|ctrlSetTooltipColorText|ctrlShow|ctrlShown|ctrlText|ctrlTextHeight|ctrlTextSecondary|ctrlTextWidth|ctrlType|ctrlVisible|ctRowControls|ctRowCount|ctSetCurSel|ctSetData|ctSetHeaderTemplate|ctSetRowTemplate|ctSetValue|ctValue|curatorAddons|curatorCamera|curatorCameraArea|curatorCameraAreaCeiling|curatorCoef|curatorEditableObjects|curatorEditingArea|curatorEditingAreaType|curatorMouseOver|curatorPoints|curatorRegisteredObjects|curatorSelected|curatorWaypointCost|current3DENOperation|currentChannel|currentCommand|currentMagazine|currentMagazineDetail|currentMagazineDetailTurret|currentMagazineTurret|currentMuzzle|currentNamespace|currentTask|currentTasks|currentThrowable|currentVisionMode|currentWaypoint|currentWeapon|currentWeaponMode|currentWeaponTurret|currentZeroing|cursorObject|cursorTarget|customChat|customRadio|cutFadeOut|cutObj|cutRsc|cutText|damage|date|dateToNumber|daytime|deActivateKey|debriefingText|debugFSM|debugLog|deg|delete3DENEntities|deleteAt|deleteCenter|deleteCollection|deleteEditorObject|deleteGroup|deleteGroupWhenEmpty|deleteIdentity|deleteLocation|deleteMarker|deleteMarkerLocal|deleteRange|deleteResources|deleteSite|deleteStatus|deleteTeam|deleteVehicle|deleteVehicleCrew|deleteWaypoint|detach|detectedMines|diag_activeMissionFSMs|diag_activeScripts|diag_activeSQFScripts|diag_activeSQSScripts|diag_captureFrame|diag_captureFrameToFile|diag_captureSlowFrame|diag_codePerformance|diag_drawMode|diag_dynamicSimulationEnd|diag_enable|diag_enabled|diag_fps|diag_fpsMin|diag_frameNo|diag_lightNewLoad|diag_list|diag_log|diag_logSlowFrame|diag_mergeConfigFile|diag_recordTurretLimits|diag_setLightNew|diag_tickTime|diag_toggle|dialog|diarySubjectExists|didJIP|didJIPOwner|difficulty|difficultyEnabled|difficultyEnabledRTD|difficultyOption|direction|directSay|disableAI|disableCollisionWith|disableConversation|disableDebriefingStats|disableMapIndicators|disableNVGEquipment|disableRemoteSensors|disableSerialization|disableTIEquipment|disableUAVConnectability|disableUserInput|displayAddEventHandler|displayCtrl|displayNull|displayParent|displayRemoveAllEventHandlers|displayRemoveEventHandler|displaySetEventHandler|dissolveTeam|distance|distance2D|distanceSqr|distributionRegion|do3DENAction|doArtilleryFire|doFire|doFollow|doFSM|doGetOut|doMove|doorPhase|doStop|doSuppressiveFire|doTarget|doWatch|drawArrow|drawEllipse|drawIcon|drawIcon3D|drawLine|drawLine3D|drawLink|drawLocation|drawPolygon|drawRectangle|drawTriangle|driver|drop|dynamicSimulationDistance|dynamicSimulationDistanceCoef|dynamicSimulationEnabled|dynamicSimulationSystemEnabled|east|edit3DENMissionAttributes|editObject|editorSetEventHandler|effectiveCommander|emptyPositions|enableAI|enableAIFeature|enableAimPrecision|enableAttack|enableAudioFeature|enableAutoStartUpRTD|enableAutoTrimRTD|enableCamShake|enableCaustics|enableChannel|enableCollisionWith|enableCopilot|enableDebriefingStats|enableDiagLegend|enableDynamicSimulation|enableDynamicSimulationSystem|enableEndDialog|enableEngineArtillery|enableEnvironment|enableFatigue|enableGunLights|enableInfoPanelComponent|enableIRLasers|enableMimics|enablePersonTurret|enableRadio|enableReload|enableRopeAttach|enableSatNormalOnDetail|enableSaving|enableSentences|enableSimulation|enableSimulationGlobal|enableStamina|enableStressDamage|enableTeamSwitch|enableTraffic|enableUAVConnectability|enableUAVWaypoints|enableVehicleCargo|enableVehicleSensor|enableWeaponDisassembly|endl|endLoadingScreen|endMission|engineOn|enginesIsOnRTD|enginesPowerRTD|enginesRpmRTD|enginesTorqueRTD|entities|environmentEnabled|estimatedEndServerTime|estimatedTimeLeft|evalObjectArgument|everyBackpack|everyContainer|exec|execEditorScript|exp|expectedDestination|exportJIPMessages|eyeDirection|eyePos|face|faction|fadeMusic|fadeRadio|fadeSound|fadeSpeech|failMission|fillWeaponsFromPool|find|findCover|findDisplay|findEditorObject|findEmptyPosition|findEmptyPositionReady|findIf|findNearestEnemy|finishMissionInit|finite|fire|fireAtTarget|firstBackpack|flag|flagAnimationPhase|flagOwner|flagSide|flagTexture|fleeing|floor|flyInHeight|flyInHeightASL|fog|fogForecast|fogParams|forceAddUniform|forceAtPositionRTD|forcedMap|forceEnd|forceFlagTexture|forceFollowRoad|forceGeneratorRTD|forceMap|forceRespawn|forceSpeed|forceWalk|forceWeaponFire|forceWeatherChange|forgetTarget|format|formation|formationDirection|formationLeader|formationMembers|formationPosition|formationTask|formatText|formLeader|freeLook|fromEditor|fuel|fullCrew|gearIDCAmmoCount|gearSlotAmmoCount|gearSlotData|get3DENActionState|get3DENAttribute|get3DENCamera|get3DENConnections|get3DENEntity|get3DENEntityID|get3DENGrid|get3DENIconsVisible|get3DENLayerEntities|get3DENLinesVisible|get3DENMissionAttribute|get3DENMouseOver|get3DENSelected|getAimingCoef|getAllEnvSoundControllers|getAllHitPointsDamage|getAllOwnedMines|getAllSoundControllers|getAmmoCargo|getAnimAimPrecision|getAnimSpeedCoef|getArray|getArtilleryAmmo|getArtilleryComputerSettings|getArtilleryETA|getAssignedCuratorLogic|getAssignedCuratorUnit|getBackpackCargo|getBleedingRemaining|getBurningValue|getCameraViewDirection|getCargoIndex|getCenterOfMass|getClientState|getClientStateNumber|getCompatiblePylonMagazines|getConnectedUAV|getContainerMaxLoad|getCursorObjectParams|getCustomAimCoef|getDammage|getDescription|getDir|getDirVisual|getDLCAssetsUsage|getDLCAssetsUsageByName|getDLCs|getDLCUsageTime|getEditorCamera|getEditorMode|getEditorObjectScope|getElevationOffset|getEngineTargetRpmRTD|getEnvSoundController|getFatigue|getFieldManualStartPage|getForcedFlagTexture|getFriend|getFSMVariable|getFuelCargo|getGroupIcon|getGroupIconParams|getGroupIcons|getHideFrom|getHit|getHitIndex|getHitPointDamage|getItemCargo|getMagazineCargo|getMarkerColor|getMarkerPos|getMarkerSize|getMarkerType|getMass|getMissionConfig|getMissionConfigValue|getMissionDLCs|getMissionLayerEntities|getMissionLayers|getModelInfo|getMousePosition|getMusicPlayedTime|getNumber|getObjectArgument|getObjectChildren|getObjectDLC|getObjectMaterials|getObjectProxy|getObjectTextures|getObjectType|getObjectViewDistance|getOxygenRemaining|getPersonUsedDLCs|getPilotCameraDirection|getPilotCameraPosition|getPilotCameraRotation|getPilotCameraTarget|getPlateNumber|getPlayerChannel|getPlayerScores|getPlayerUID|getPlayerUIDOld|getPos|getPosASL|getPosASLVisual|getPosASLW|getPosATL|getPosATLVisual|getPosVisual|getPosWorld|getPylonMagazines|getRelDir|getRelPos|getRemoteSensorsDisabled|getRepairCargo|getResolution|getRotorBrakeRTD|getShadowDistance|getShotParents|getSlingLoad|getSoundController|getSoundControllerResult|getSpeed|getStamina|getStatValue|getSuppression|getTerrainGrid|getTerrainHeightASL|getText|getTotalDLCUsageTime|getTrimOffsetRTD|getUnitLoadout|getUnitTrait|getUserMFDText|getUserMFDValue|getVariable|getVehicleCargo|getWeaponCargo|getWeaponSway|getWingsOrientationRTD|getWingsPositionRTD|getWPPos|glanceAt|globalChat|globalRadio|goggles|group|groupChat|groupFromNetId|groupIconSelectable|groupIconsVisible|groupId|groupOwner|groupRadio|groupSelectedUnits|groupSelectUnit|grpNull|gunner|gusts|halt|handgunItems|handgunMagazine|handgunWeapon|handsHit|hasInterface|hasPilotCamera|hasWeapon|hcAllGroups|hcGroupParams|hcLeader|hcRemoveAllGroups|hcRemoveGroup|hcSelected|hcSelectGroup|hcSetGroup|hcShowBar|hcShownBar|headgear|hideBody|hideObject|hideObjectGlobal|hideSelection|hint|hintC|hintCadet|hintSilent|hmd|hostMission|htmlLoad|HUDMovementLevels|humidity|image|importAllGroups|importance|in|inArea|inAreaArray|incapacitatedState|independent|inflame|inflamed|infoPanel|infoPanelComponentEnabled|infoPanelComponents|infoPanels|inGameUISetEventHandler|inheritsFrom|initAmbientLife|inPolygon|inputAction|inRangeOfArtillery|insertEditorObject|intersect|is3DEN|is3DENMultiplayer|isAbleToBreathe|isAgent|isAimPrecisionEnabled|isArray|isAutoHoverOn|isAutonomous|isAutoStartUpEnabledRTD|isAutotest|isAutoTrimOnRTD|isBleeding|isBurning|isClass|isCollisionLightOn|isCopilotEnabled|isDamageAllowed|isDedicated|isDLCAvailable|isEngineOn|isEqualTo|isEqualType|isEqualTypeAll|isEqualTypeAny|isEqualTypeArray|isEqualTypeParams|isFilePatchingEnabled|isFlashlightOn|isFlatEmpty|isForcedWalk|isFormationLeader|isGroupDeletedWhenEmpty|isHidden|isInRemainsCollector|isInstructorFigureEnabled|isIRLaserOn|isKeyActive|isKindOf|isLaserOn|isLightOn|isLocalized|isManualFire|isMarkedForCollection|isMultiplayer|isMultiplayerSolo|isNil|isNull|isNumber|isObjectHidden|isObjectRTD|isOnRoad|isPipEnabled|isPlayer|isRealTime|isRemoteExecuted|isRemoteExecutedJIP|isServer|isShowing3DIcons|isSimpleObject|isSprintAllowed|isStaminaEnabled|isSteamMission|isStreamFriendlyUIEnabled|isStressDamageEnabled|isText|isTouchingGround|isTurnedOut|isTutHintsEnabled|isUAVConnectable|isUAVConnected|isUIContext|isUniformAllowed|isVehicleCargo|isVehicleRadarOn|isVehicleSensorEnabled|isWalking|isWeaponDeployed|isWeaponRested|itemCargo|items|itemsWithMagazines|join|joinAs|joinAsSilent|joinSilent|joinString|kbAddDatabase|kbAddDatabaseTargets|kbAddTopic|kbHasTopic|kbReact|kbRemoveTopic|kbTell|kbWasSaid|keyImage|keyName|knowsAbout|land|landAt|landResult|language|laserTarget|lbAdd|lbClear|lbColor|lbColorRight|lbCurSel|lbData|lbDelete|lbIsSelected|lbPicture|lbPictureRight|lbSelection|lbSetColor|lbSetColorRight|lbSetCurSel|lbSetData|lbSetPicture|lbSetPictureColor|lbSetPictureColorDisabled|lbSetPictureColorSelected|lbSetPictureRight|lbSetPictureRightColor|lbSetPictureRightColorDisabled|lbSetPictureRightColorSelected|lbSetSelectColor|lbSetSelectColorRight|lbSetSelected|lbSetText|lbSetTextRight|lbSetTooltip|lbSetValue|lbSize|lbSort|lbSortByValue|lbText|lbTextRight|lbValue|leader|leaderboardDeInit|leaderboardGetRows|leaderboardInit|leaderboardRequestRowsFriends|leaderboardRequestRowsGlobal|leaderboardRequestRowsGlobalAroundUser|leaderboardsRequestUploadScore|leaderboardsRequestUploadScoreKeepBest|leaderboardState|leaveVehicle|libraryCredits|libraryDisclaimers|lifeState|lightAttachObject|lightDetachObject|lightIsOn|lightnings|limitSpeed|linearConversion|lineBreak|lineIntersects|lineIntersectsObjs|lineIntersectsSurfaces|lineIntersectsWith|linkItem|list|listObjects|listRemoteTargets|listVehicleSensors|ln|lnbAddArray|lnbAddColumn|lnbAddRow|lnbClear|lnbColor|lnbColorRight|lnbCurSelRow|lnbData|lnbDeleteColumn|lnbDeleteRow|lnbGetColumnsPosition|lnbPicture|lnbPictureRight|lnbSetColor|lnbSetColorRight|lnbSetColumnsPos|lnbSetCurSelRow|lnbSetData|lnbSetPicture|lnbSetPictureColor|lnbSetPictureColorRight|lnbSetPictureColorSelected|lnbSetPictureColorSelectedRight|lnbSetPictureRight|lnbSetText|lnbSetTextRight|lnbSetValue|lnbSize|lnbSort|lnbSortByValue|lnbText|lnbTextRight|lnbValue|load|loadAbs|loadBackpack|loadFile|loadGame|loadIdentity|loadMagazine|loadOverlay|loadStatus|loadUniform|loadVest|local|localize|locationNull|locationPosition|lock|lockCameraTo|lockCargo|lockDriver|locked|lockedCargo|lockedDriver|lockedTurret|lockIdentity|lockTurret|lockWP|log|logEntities|logNetwork|logNetworkTerminate|lookAt|lookAtPos|magazineCargo|magazines|magazinesAllTurrets|magazinesAmmo|magazinesAmmoCargo|magazinesAmmoFull|magazinesDetail|magazinesDetailBackpack|magazinesDetailUniform|magazinesDetailVest|magazinesTurret|magazineTurretAmmo|mapAnimAdd|mapAnimClear|mapAnimCommit|mapAnimDone|mapCenterOnCamera|mapGridPosition|markAsFinishedOnSteam|markerAlpha|markerBrush|markerColor|markerDir|markerPos|markerShape|markerSize|markerText|markerType|max|members|menuAction|menuAdd|menuChecked|menuClear|menuCollapse|menuData|menuDelete|menuEnable|menuEnabled|menuExpand|menuHover|menuPicture|menuSetAction|menuSetCheck|menuSetData|menuSetPicture|menuSetValue|menuShortcut|menuShortcutText|menuSize|menuSort|menuText|menuURL|menuValue|min|mineActive|mineDetectedBy|missionConfigFile|missionDifficulty|missionName|missionNamespace|missionStart|missionVersion|modelToWorld|modelToWorldVisual|modelToWorldVisualWorld|modelToWorldWorld|modParams|moonIntensity|moonPhase|morale|move|move3DENCamera|moveInAny|moveInCargo|moveInCommander|moveInDriver|moveInGunner|moveInTurret|moveObjectToEnd|moveOut|moveTime|moveTo|moveToCompleted|moveToFailed|musicVolume|name|nameSound|nearEntities|nearestBuilding|nearestLocation|nearestLocations|nearestLocationWithDubbing|nearestObject|nearestObjects|nearestTerrainObjects|nearObjects|nearObjectsReady|nearRoads|nearSupplies|nearTargets|needReload|netId|netObjNull|newOverlay|nextMenuItemIndex|nextWeatherChange|nMenuItems|numberOfEnginesRTD|numberToDate|objectCurators|objectFromNetId|objectParent|objNull|objStatus|onBriefingGear|onBriefingGroup|onBriefingNotes|onBriefingPlan|onBriefingTeamSwitch|onCommandModeChanged|onDoubleClick|onEachFrame|onGroupIconClick|onGroupIconOverEnter|onGroupIconOverLeave|onHCGroupSelectionChanged|onMapSingleClick|onPlayerConnected|onPlayerDisconnected|onPreloadFinished|onPreloadStarted|onShowNewObject|onTeamSwitch|openCuratorInterface|openDLCPage|openDSInterface|openMap|openSteamApp|openYoutubeVideo|opfor|orderGetIn|overcast|overcastForecast|owner|param|params|parseNumber|parseSimpleArray|parseText|parsingNamespace|particlesQuality|pi|pickWeaponPool|pitch|pixelGrid|pixelGridBase|pixelGridNoUIScale|pixelH|pixelW|playableSlotsNumber|playableUnits|playAction|playActionNow|player|playerRespawnTime|playerSide|playersNumber|playGesture|playMission|playMove|playMoveNow|playMusic|playScriptedMission|playSound|playSound3D|position|positionCameraToWorld|posScreenToWorld|posWorldToScreen|ppEffectAdjust|ppEffectCommit|ppEffectCommitted|ppEffectCreate|ppEffectDestroy|ppEffectEnable|ppEffectEnabled|ppEffectForceInNVG|precision|preloadCamera|preloadObject|preloadSound|preloadTitleObj|preloadTitleRsc|primaryWeapon|primaryWeaponItems|primaryWeaponMagazine|priority|processDiaryLink|processInitCommands|productVersion|profileName|profileNamespace|profileNameSteam|progressLoadingScreen|progressPosition|progressSetPosition|publicVariable|publicVariableClient|publicVariableServer|pushBack|pushBackUnique|putWeaponPool|queryItemsPool|queryMagazinePool|queryWeaponPool|rad|radioChannelAdd|radioChannelCreate|radioChannelRemove|radioChannelSetCallSign|radioChannelSetLabel|radioVolume|rain|rainbow|random|rank|rankId|rating|rectangular|registeredTasks|registerTask|reload|reloadEnabled|remoteControl|remoteExec|remoteExecCall|remoteExecutedOwner|remove3DENConnection|remove3DENEventHandler|remove3DENLayer|removeAction|removeAll3DENEventHandlers|removeAllActions|removeAllAssignedItems|removeAllContainers|removeAllCuratorAddons|removeAllCuratorCameraAreas|removeAllCuratorEditingAreas|removeAllEventHandlers|removeAllHandgunItems|removeAllItems|removeAllItemsWithMagazines|removeAllMissionEventHandlers|removeAllMPEventHandlers|removeAllMusicEventHandlers|removeAllOwnedMines|removeAllPrimaryWeaponItems|removeAllWeapons|removeBackpack|removeBackpackGlobal|removeCuratorAddons|removeCuratorCameraArea|removeCuratorEditableObjects|removeCuratorEditingArea|removeDrawIcon|removeDrawLinks|removeEventHandler|removeFromRemainsCollector|removeGoggles|removeGroupIcon|removeHandgunItem|removeHeadgear|removeItem|removeItemFromBackpack|removeItemFromUniform|removeItemFromVest|removeItems|removeMagazine|removeMagazineGlobal|removeMagazines|removeMagazinesTurret|removeMagazineTurret|removeMenuItem|removeMissionEventHandler|removeMPEventHandler|removeMusicEventHandler|removeOwnedMine|removePrimaryWeaponItem|removeSecondaryWeaponItem|removeSimpleTask|removeSwitchableUnit|removeTeamMember|removeUniform|removeVest|removeWeapon|removeWeaponAttachmentCargo|removeWeaponCargo|removeWeaponGlobal|removeWeaponTurret|reportRemoteTarget|requiredVersion|resetCamShake|resetSubgroupDirection|resistance|resize|resources|respawnVehicle|restartEditorCamera|reveal|revealMine|reverse|reversedMouseY|roadAt|roadsConnectedTo|roleDescription|ropeAttachedObjects|ropeAttachedTo|ropeAttachEnabled|ropeAttachTo|ropeCreate|ropeCut|ropeDestroy|ropeDetach|ropeEndPosition|ropeLength|ropes|ropeUnwind|ropeUnwound|rotorsForcesRTD|rotorsRpmRTD|round|runInitScript|safeZoneH|safeZoneW|safeZoneWAbs|safeZoneX|safeZoneXAbs|safeZoneY|save3DENInventory|saveGame|saveIdentity|saveJoysticks|saveOverlay|saveProfileNamespace|saveStatus|saveVar|savingEnabled|say|say2D|say3D|score|scoreSide|screenshot|screenToWorld|scriptDone|scriptName|scriptNull|scudState|secondaryWeapon|secondaryWeaponItems|secondaryWeaponMagazine|select|selectBestPlaces|selectDiarySubject|selectedEditorObjects|selectEditorObject|selectionNames|selectionPosition|selectLeader|selectMax|selectMin|selectNoPlayer|selectPlayer|selectRandom|selectRandomWeighted|selectWeapon|selectWeaponTurret|sendAUMessage|sendSimpleCommand|sendTask|sendTaskResult|sendUDPMessage|serverCommand|serverCommandAvailable|serverCommandExecutable|serverName|serverTime|set|set3DENAttribute|set3DENAttributes|set3DENGrid|set3DENIconsVisible|set3DENLayer|set3DENLinesVisible|set3DENLogicType|set3DENMissionAttribute|set3DENMissionAttributes|set3DENModelsVisible|set3DENObjectType|set3DENSelected|setAccTime|setActualCollectiveRTD|setAirplaneThrottle|setAirportSide|setAmmo|setAmmoCargo|setAmmoOnPylon|setAnimSpeedCoef|setAperture|setApertureNew|setArmoryPoints|setAttributes|setAutonomous|setBehaviour|setBleedingRemaining|setBrakesRTD|setCameraInterest|setCamShakeDefParams|setCamShakeParams|setCamUseTI|setCaptive|setCenterOfMass|setCollisionLight|setCombatMode|setCompassOscillation|setConvoySeparation|setCuratorCameraAreaCeiling|setCuratorCoef|setCuratorEditingAreaType|setCuratorWaypointCost|setCurrentChannel|setCurrentTask|setCurrentWaypoint|setCustomAimCoef|setCustomWeightRTD|setDamage|setDammage|setDate|setDebriefingText|setDefaultCamera|setDestination|setDetailMapBlendPars|setDir|setDirection|setDrawIcon|setDriveOnPath|setDropInterval|setDynamicSimulationDistance|setDynamicSimulationDistanceCoef|setEditorMode|setEditorObjectScope|setEffectCondition|setEngineRpmRTD|setFace|setFaceAnimation|setFatigue|setFeatureType|setFlagAnimationPhase|setFlagOwner|setFlagSide|setFlagTexture|setFog|setForceGeneratorRTD|setFormation|setFormationTask|setFormDir|setFriend|setFromEditor|setFSMVariable|setFuel|setFuelCargo|setGroupIcon|setGroupIconParams|setGroupIconsSelectable|setGroupIconsVisible|setGroupId|setGroupIdGlobal|setGroupOwner|setGusts|setHideBehind|setHit|setHitIndex|setHitPointDamage|setHorizonParallaxCoef|setHUDMovementLevels|setIdentity|setImportance|setInfoPanel|setLeader|setLightAmbient|setLightAttenuation|setLightBrightness|setLightColor|setLightDayLight|setLightFlareMaxDistance|setLightFlareSize|setLightIntensity|setLightnings|setLightUseFlare|setLocalWindParams|setMagazineTurretAmmo|setMarkerAlpha|setMarkerAlphaLocal|setMarkerBrush|setMarkerBrushLocal|setMarkerColor|setMarkerColorLocal|setMarkerDir|setMarkerDirLocal|setMarkerPos|setMarkerPosLocal|setMarkerShape|setMarkerShapeLocal|setMarkerSize|setMarkerSizeLocal|setMarkerText|setMarkerTextLocal|setMarkerType|setMarkerTypeLocal|setMass|setMimic|setMousePosition|setMusicEffect|setMusicEventHandler|setName|setNameSound|setObjectArguments|setObjectMaterial|setObjectMaterialGlobal|setObjectProxy|setObjectTexture|setObjectTextureGlobal|setObjectViewDistance|setOvercast|setOwner|setOxygenRemaining|setParticleCircle|setParticleClass|setParticleFire|setParticleParams|setParticleRandom|setPilotCameraDirection|setPilotCameraRotation|setPilotCameraTarget|setPilotLight|setPiPEffect|setPitch|setPlateNumber|setPlayable|setPlayerRespawnTime|setPos|setPosASL|setPosASL2|setPosASLW|setPosATL|setPosition|setPosWorld|setPylonLoadOut|setPylonsPriority|setRadioMsg|setRain|setRainbow|setRandomLip|setRank|setRectangular|setRepairCargo|setRotorBrakeRTD|setShadowDistance|setShotParents|setSide|setSimpleTaskAlwaysVisible|setSimpleTaskCustomData|setSimpleTaskDescription|setSimpleTaskDestination|setSimpleTaskTarget|setSimpleTaskType|setSimulWeatherLayers|setSize|setSkill|setSlingLoad|setSoundEffect|setSpeaker|setSpeech|setSpeedMode|setStamina|setStaminaScheme|setStatValue|setSuppression|setSystemOfUnits|setTargetAge|setTaskMarkerOffset|setTaskResult|setTaskState|setTerrainGrid|setText|setTimeMultiplier|setTitleEffect|setToneMapping|setToneMappingParams|setTrafficDensity|setTrafficDistance|setTrafficGap|setTrafficSpeed|setTriggerActivation|setTriggerArea|setTriggerStatements|setTriggerText|setTriggerTimeout|setTriggerType|setType|setUnconscious|setUnitAbility|setUnitLoadout|setUnitPos|setUnitPosWeak|setUnitRank|setUnitRecoilCoefficient|setUnitTrait|setUnloadInCombat|setUserActionText|setUserMFDText|setUserMFDValue|setVariable|setVectorDir|setVectorDirAndUp|setVectorUp|setVehicleAmmo|setVehicleAmmoDef|setVehicleArmor|setVehicleCargo|setVehicleId|setVehicleInit|setVehicleLock|setVehiclePosition|setVehicleRadar|setVehicleReceiveRemoteTargets|setVehicleReportOwnPosition|setVehicleReportRemoteTargets|setVehicleTIPars|setVehicleVarName|setVelocity|setVelocityModelSpace|setVelocityTransformation|setViewDistance|setVisibleIfTreeCollapsed|setWantedRpmRTD|setWaves|setWaypointBehaviour|setWaypointCombatMode|setWaypointCompletionRadius|setWaypointDescription|setWaypointForceBehaviour|setWaypointFormation|setWaypointHousePosition|setWaypointLoiterRadius|setWaypointLoiterType|setWaypointName|setWaypointPosition|setWaypointScript|setWaypointSpeed|setWaypointStatements|setWaypointTimeout|setWaypointType|setWaypointVisible|setWeaponReloadingTime|setWind|setWindDir|setWindForce|setWindStr|setWingForceScaleRTD|setWPPos|show3DIcons|showChat|showCinemaBorder|showCommandingMenu|showCompass|showCuratorCompass|showGPS|showHUD|showLegend|showMap|shownArtilleryComputer|shownChat|shownCompass|shownCuratorCompass|showNewEditorObject|shownGPS|shownHUD|shownMap|shownPad|shownRadio|shownScoretable|shownUAVFeed|shownWarrant|shownWatch|showPad|showRadio|showScoretable|showSubtitles|showUAVFeed|showWarrant|showWatch|showWaypoint|showWaypoints|side|sideAmbientLife|sideChat|sideEmpty|sideEnemy|sideFriendly|sideLogic|sideRadio|sideUnknown|simpleTasks|simulationEnabled|simulCloudDensity|simulCloudOcclusion|simulInClouds|simulWeatherSync|sin|size|sizeOf|skill|skillFinal|skipTime|sleep|sliderPosition|sliderRange|sliderSetPosition|sliderSetRange|sliderSetSpeed|sliderSpeed|slingLoadAssistantShown|soldierMagazines|someAmmo|sort|soundVolume|speaker|speed|speedMode|splitString|sqrt|squadParams|stance|startLoadingScreen|stop|stopEngineRTD|stopped|str|sunOrMoon|supportInfo|suppressFor|surfaceIsWater|surfaceNormal|surfaceType|swimInDepth|switchableUnits|switchAction|switchCamera|switchGesture|switchLight|switchMove|synchronizedObjects|synchronizedTriggers|synchronizedWaypoints|synchronizeObjectsAdd|synchronizeObjectsRemove|synchronizeTrigger|synchronizeWaypoint|systemChat|systemOfUnits|tan|targetKnowledge|targets|targetsAggregate|targetsQuery|taskAlwaysVisible|taskChildren|taskCompleted|taskCustomData|taskDescription|taskDestination|taskHint|taskMarkerOffset|taskNull|taskParent|taskResult|taskState|taskType|teamMember|teamMemberNull|teamName|teams|teamSwitch|teamSwitchEnabled|teamType|terminate|terrainIntersect|terrainIntersectASL|terrainIntersectAtASL|text|textLog|textLogFormat|tg|time|timeMultiplier|titleCut|titleFadeOut|titleObj|titleRsc|titleText|toArray|toFixed|toLower|toString|toUpper|triggerActivated|triggerActivation|triggerArea|triggerAttachedVehicle|triggerAttachObject|triggerAttachVehicle|triggerDynamicSimulation|triggerStatements|triggerText|triggerTimeout|triggerTimeoutCurrent|triggerType|turretLocal|turretOwner|turretUnit|tvAdd|tvClear|tvCollapse|tvCollapseAll|tvCount|tvCurSel|tvData|tvDelete|tvExpand|tvExpandAll|tvPicture|tvPictureRight|tvSetColor|tvSetCurSel|tvSetData|tvSetPicture|tvSetPictureColor|tvSetPictureColorDisabled|tvSetPictureColorSelected|tvSetPictureRight|tvSetPictureRightColor|tvSetPictureRightColorDisabled|tvSetPictureRightColorSelected|tvSetSelectColor|tvSetText|tvSetTooltip|tvSetValue|tvSort|tvSortByValue|tvText|tvTooltip|tvValue|type|typeName|typeOf|UAVControl|uiNamespace|uiSleep|unassignCurator|unassignItem|unassignTeam|unassignVehicle|underwater|uniform|uniformContainer|uniformItems|uniformMagazines|unitAddons|unitAimPosition|unitAimPositionVisual|unitBackpack|unitIsUAV|unitPos|unitReady|unitRecoilCoefficient|units|unitsBelowHeight|unlinkItem|unlockAchievement|unregisterTask|updateDrawIcon|updateMenuItem|updateObjectTree|useAIOperMapObstructionTest|useAISteeringComponent|useAudioTimeForMoves|userInputDisabled|vectorAdd|vectorCos|vectorCrossProduct|vectorDiff|vectorDir|vectorDirVisual|vectorDistance|vectorDistanceSqr|vectorDotProduct|vectorFromTo|vectorMagnitude|vectorMagnitudeSqr|vectorModelToWorld|vectorModelToWorldVisual|vectorMultiply|vectorNormalized|vectorUp|vectorUpVisual|vectorWorldToModel|vectorWorldToModelVisual|vehicle|vehicleCargoEnabled|vehicleChat|vehicleRadio|vehicleReceiveRemoteTargets|vehicleReportOwnPosition|vehicleReportRemoteTargets|vehicles|vehicleVarName|velocity|velocityModelSpace|verifySignature|vest|vestContainer|vestItems|vestMagazines|viewDistance|visibleCompass|visibleGPS|visibleMap|visiblePosition|visiblePositionASL|visibleScoretable|visibleWatch|waitUntil|waves|waypointAttachedObject|waypointAttachedVehicle|waypointAttachObject|waypointAttachVehicle|waypointBehaviour|waypointCombatMode|waypointCompletionRadius|waypointDescription|waypointForceBehaviour|waypointFormation|waypointHousePosition|waypointLoiterRadius|waypointLoiterType|waypointName|waypointPosition|waypoints|waypointScript|waypointsEnabledUAV|waypointShow|waypointSpeed|waypointStatements|waypointTimeout|waypointTimeoutCurrent|waypointType|waypointVisible|weaponAccessories|weaponAccessoriesCargo|weaponCargo|weaponDirection|weaponInertia|weaponLowered|weapons|weaponsItems|weaponsItemsCargo|weaponState|weaponsTurret|weightRTD|west|WFSideText|wind|windDir|windRTD|windStr|wingsForcesRTD|worldName|worldSize|worldToModel|worldToModelVisual|worldToScreen)\b/i,number:/(?:\$|\b0x)[\da-f]+\b|(?:\B\.\d+|\b\d+(?:\.\d+)?)(?:e[+-]?\d+)?\b/i,operator:/##|>>|&&|\|\||[!=<>]=?|[-+*/%#^]|\b(?:and|mod|not|or)\b/i,"magic-variable":{pattern:/\b(?:this|thisList|thisTrigger|_exception|_fnc_scriptName|_fnc_scriptNameParent|_forEachIndex|_this|_thisEventHandler|_thisFSM|_thisScript|_x)\b/i,alias:"keyword"},constant:/\bDIK(?:_[a-z\d]+)+\b/i}),t.languages.insertBefore("sqf","string",{macro:{pattern:/(^[ \t]*)#[a-z](?:[^\r\n\\]|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{directive:{pattern:/#[a-z]+\b/i,alias:"keyword"},comment:t.languages.sqf.comment}}}),delete t.languages.sqf["class-name"]}return ip}var op,Vk;function Dj(){if(Vk)return op;Vk=1,op=e,e.displayName="squirrel",e.aliases=[];function e(t){t.languages.squirrel=t.languages.extend("clike",{comment:[t.languages.clike.comment[0],{pattern:/(^|[^\\:])(?:\/\/|#).*/,lookbehind:!0,greedy:!0}],string:{pattern:/(^|[^\\"'@])(?:@"(?:[^"]|"")*"(?!")|"(?:[^\\\r\n"]|\\.)*")/,lookbehind:!0,greedy:!0},"class-name":{pattern:/(\b(?:class|enum|extends|instanceof)\s+)\w+(?:\.\w+)*/,lookbehind:!0,inside:{punctuation:/\./}},keyword:/\b(?:__FILE__|__LINE__|base|break|case|catch|class|clone|const|constructor|continue|default|delete|else|enum|extends|for|foreach|function|if|in|instanceof|local|null|resume|return|static|switch|this|throw|try|typeof|while|yield)\b/,number:/\b(?:0x[0-9a-fA-F]+|\d+(?:\.(?:\d+|[eE][+-]?\d+))?)\b/,operator:/\+\+|--|<=>|<[-<]|>>>?|&&?|\|\|?|[-+*/%!=<>]=?|[~^]|::?/,punctuation:/[(){}\[\],;.]/}),t.languages.insertBefore("squirrel","string",{char:{pattern:/(^|[^\\"'])'(?:[^\\']|\\(?:[xuU][0-9a-fA-F]{0,8}|[\s\S]))'/,lookbehind:!0,greedy:!0}}),t.languages.insertBefore("squirrel","operator",{"attribute-punctuation":{pattern:/<\/|\/>/,alias:"important"},lambda:{pattern:/@(?=\()/,alias:"operator"}})}return op}var sp,Wk;function Mj(){if(Wk)return sp;Wk=1,sp=e,e.displayName="stan",e.aliases=[];function e(t){(function(n){var r=/\b(?:algebra_solver|algebra_solver_newton|integrate_1d|integrate_ode|integrate_ode_bdf|integrate_ode_rk45|map_rect|ode_(?:adams|bdf|ckrk|rk45)(?:_tol)?|ode_adjoint_tol_ctl|reduce_sum|reduce_sum_static)\b/;n.languages.stan={comment:/\/\/.*|\/\*[\s\S]*?\*\/|#(?!include).*/,string:{pattern:/"[\x20\x21\x23-\x5B\x5D-\x7E]*"/,greedy:!0},directive:{pattern:/^([ \t]*)#include\b.*/m,lookbehind:!0,alias:"property"},"function-arg":{pattern:RegExp("("+r.source+/\s*\(\s*/.source+")"+/[a-zA-Z]\w*/.source),lookbehind:!0,alias:"function"},constraint:{pattern:/(\b(?:int|matrix|real|row_vector|vector)\s*)<[^<>]*>/,lookbehind:!0,inside:{expression:{pattern:/(=\s*)\S(?:\S|\s+(?!\s))*?(?=\s*(?:>$|,\s*\w+\s*=))/,lookbehind:!0,inside:null},property:/\b[a-z]\w*(?=\s*=)/i,operator:/=/,punctuation:/^<|>$|,/}},keyword:[{pattern:/\bdata(?=\s*\{)|\b(?:functions|generated|model|parameters|quantities|transformed)\b/,alias:"program-block"},/\b(?:array|break|cholesky_factor_corr|cholesky_factor_cov|complex|continue|corr_matrix|cov_matrix|data|else|for|if|in|increment_log_prob|int|matrix|ordered|positive_ordered|print|real|reject|return|row_vector|simplex|target|unit_vector|vector|void|while)\b/,r],function:/\b[a-z]\w*(?=\s*\()/i,number:/(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:E[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,boolean:/\b(?:false|true)\b/,operator:/<-|\.[*/]=?|\|\|?|&&|[!=<>+\-*/]=?|['^%~?:]/,punctuation:/[()\[\]{},;]/},n.languages.stan.constraint.inside.expression.inside=n.languages.stan})(t)}return sp}var lp,Yk;function Fj(){if(Yk)return lp;Yk=1,lp=e,e.displayName="stylus",e.aliases=[];function e(t){(function(n){var r={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},i={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:a,punctuation:/[{}()\[\];:,]/};i.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:i}},i.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:i}},n.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:i}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:i}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:i}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:i.interpolation}},rest:i}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:i.interpolation,comment:i.comment,punctuation:/[{},]/}},func:i.func,string:i.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:i.interpolation,punctuation:/[{}()\[\];:.]/}})(t)}return lp}var up,Kk;function Pj(){if(Kk)return up;Kk=1,up=e,e.displayName="swift",e.aliases=[];function e(t){t.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp(/(^|[^"#])/.source+"(?:"+/"(?:\\(?:\((?:[^()]|\([^()]*\))*\)|\r\n|[^(])|[^\\\r\n"])*"/.source+"|"+/"""(?:\\(?:\((?:[^()]|\([^()]*\))*\)|[^(])|[^\\"]|"(?!""))*"""/.source+")"+/(?!["#])/.source),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp(/(^|[^"#])(#+)/.source+"(?:"+/"(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|\r\n|[^#])|[^\\\r\n])*?"/.source+"|"+/"""(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|[^#])|[^\\])*?"""/.source+")\\2"),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp(/#/.source+"(?:"+(/(?:elseif|if)\b/.source+"(?:[ ]*"+/(?:![ \t]*)?(?:\b\w+\b(?:[ \t]*\((?:[^()]|\([^()]*\))*\))?|\((?:[^()]|\([^()]*\))*\))(?:[ \t]*(?:&&|\|\|))?/.source+")+")+"|"+/(?:else|endif)\b/.source+")"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},t.languages.swift["string-literal"].forEach(function(n){n.inside.interpolation.inside=t.languages.swift})}return up}var cp,Xk;function Uj(){if(Xk)return cp;Xk=1,cp=e,e.displayName="systemd",e.aliases=[];function e(t){(function(n){var r={pattern:/^[;#].*/m,greedy:!0},a=/"(?:[^\r\n"\\]|\\(?:[^\r]|\r\n?))*"(?!\S)/.source;n.languages.systemd={comment:r,section:{pattern:/^\[[^\n\r\[\]]*\](?=[ \t]*$)/m,greedy:!0,inside:{punctuation:/^\[|\]$/,"section-name":{pattern:/[\s\S]+/,alias:"selector"}}},key:{pattern:/^[^\s=]+(?=[ \t]*=)/m,greedy:!0,alias:"attr-name"},value:{pattern:RegExp(/(=[ \t]*(?!\s))/.source+"(?:"+a+`|(?=[^"\r -]))(?:`+(/[^\s\\]/.source+'|[ ]+(?:(?![ "])|'+a+")|"+/\\[\r\n]+(?:[#;].*[\r\n]+)*(?![#;])/.source)+")*"),lookbehind:!0,greedy:!0,alias:"attr-value",inside:{comment:r,quoted:{pattern:RegExp(/(^|\s)/.source+a),lookbehind:!0,greedy:!0},punctuation:/\\$/m,boolean:{pattern:/^(?:false|no|off|on|true|yes)$/,greedy:!0}}},punctuation:/=/}})(t)}return cp}var dp,Zk;function Vm(){if(Zk)return dp;Zk=1,dp=e,e.displayName="t4Templating",e.aliases=[];function e(t){(function(n){function r(i,o,s){return{pattern:RegExp("<#"+i+"[\\s\\S]*?#>"),alias:"block",inside:{delimiter:{pattern:RegExp("^<#"+i+"|#>$"),alias:"important"},content:{pattern:/[\s\S]+/,inside:o,alias:s}}}}function a(i){var o=n.languages[i],s="language-"+i;return{block:{pattern:/<#[\s\S]+?#>/,inside:{directive:r("@",{"attr-value":{pattern:/=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+)/,inside:{punctuation:/^=|^["']|["']$/}},keyword:/\b\w+(?=\s)/,"attr-name":/\b\w+/}),expression:r("=",o,s),"class-feature":r("\\+",o,s),standard:r("",o,s)}}}}n.languages["t4-templating"]=Object.defineProperty({},"createT4",{value:a})})(t)}return dp}var pp,Qk;function Bj(){if(Qk)return pp;Qk=1;var e=Vm(),t=Xo();pp=n,n.displayName="t4Cs",n.aliases=[];function n(r){r.register(e),r.register(t),r.languages.t4=r.languages["t4-cs"]=r.languages["t4-templating"].createT4("csharp")}return pp}var fp,Jk;function WR(){if(Jk)return fp;Jk=1;var e=qR();fp=t,t.displayName="vbnet",t.aliases=[];function t(n){n.register(e),n.languages.vbnet=n.languages.extend("basic",{comment:[{pattern:/(?:!|REM\b).+/i,inside:{keyword:/^REM/i}},{pattern:/(^|[^\\:])'.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(^|[^"])"(?:""|[^"])*"(?!")/,lookbehind:!0,greedy:!0},keyword:/(?:\b(?:ADDHANDLER|ADDRESSOF|ALIAS|AND|ANDALSO|AS|BEEP|BLOAD|BOOLEAN|BSAVE|BYREF|BYTE|BYVAL|CALL(?: ABSOLUTE)?|CASE|CATCH|CBOOL|CBYTE|CCHAR|CDATE|CDBL|CDEC|CHAIN|CHAR|CHDIR|CINT|CLASS|CLEAR|CLNG|CLOSE|CLS|COBJ|COM|COMMON|CONST|CONTINUE|CSBYTE|CSHORT|CSNG|CSTR|CTYPE|CUINT|CULNG|CUSHORT|DATA|DATE|DECIMAL|DECLARE|DEF(?: FN| SEG|DBL|INT|LNG|SNG|STR)|DEFAULT|DELEGATE|DIM|DIRECTCAST|DO|DOUBLE|ELSE|ELSEIF|END|ENUM|ENVIRON|ERASE|ERROR|EVENT|EXIT|FALSE|FIELD|FILES|FINALLY|FOR(?: EACH)?|FRIEND|FUNCTION|GET|GETTYPE|GETXMLNAMESPACE|GLOBAL|GOSUB|GOTO|HANDLES|IF|IMPLEMENTS|IMPORTS|IN|INHERITS|INPUT|INTEGER|INTERFACE|IOCTL|IS|ISNOT|KEY|KILL|LET|LIB|LIKE|LINE INPUT|LOCATE|LOCK|LONG|LOOP|LSET|ME|MKDIR|MOD|MODULE|MUSTINHERIT|MUSTOVERRIDE|MYBASE|MYCLASS|NAME|NAMESPACE|NARROWING|NEW|NEXT|NOT|NOTHING|NOTINHERITABLE|NOTOVERRIDABLE|OBJECT|OF|OFF|ON(?: COM| ERROR| KEY| TIMER)?|OPEN|OPERATOR|OPTION(?: BASE)?|OPTIONAL|OR|ORELSE|OUT|OVERLOADS|OVERRIDABLE|OVERRIDES|PARAMARRAY|PARTIAL|POKE|PRIVATE|PROPERTY|PROTECTED|PUBLIC|PUT|RAISEEVENT|READ|READONLY|REDIM|REM|REMOVEHANDLER|RESTORE|RESUME|RETURN|RMDIR|RSET|RUN|SBYTE|SELECT(?: CASE)?|SET|SHADOWS|SHARED|SHELL|SHORT|SINGLE|SLEEP|STATIC|STEP|STOP|STRING|STRUCTURE|SUB|SWAP|SYNCLOCK|SYSTEM|THEN|THROW|TIMER|TO|TROFF|TRON|TRUE|TRY|TRYCAST|TYPE|TYPEOF|UINTEGER|ULONG|UNLOCK|UNTIL|USHORT|USING|VIEW PRINT|WAIT|WEND|WHEN|WHILE|WIDENING|WITH|WITHEVENTS|WRITE|WRITEONLY|XOR)|\B(?:#CONST|#ELSE|#ELSEIF|#END|#IF))(?:\$|\b)/i,punctuation:/[,;:(){}]/})}return fp}var gp,ew;function $j(){if(ew)return gp;ew=1;var e=Vm(),t=WR();gp=n,n.displayName="t4Vb",n.aliases=[];function n(r){r.register(e),r.register(t),r.languages["t4-vb"]=r.languages["t4-templating"].createT4("vbnet")}return gp}var mp,tw;function YR(){if(tw)return mp;tw=1,mp=e,e.displayName="yaml",e.aliases=["yml"];function e(t){(function(n){var r=/[*&][^\s[\]{},]+/,a=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,i="(?:"+a.source+"(?:[ ]+"+r.source+")?|"+r.source+"(?:[ ]+"+a.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source}),s=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function l(u,d){d=(d||"").replace(/m/g,"")+"m";var c=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,function(){return i}).replace(/<>/g,function(){return u});return RegExp(c,d)}n.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,function(){return i})),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,function(){return i}).replace(/<>/g,function(){return"(?:"+o+"|"+s+")"})),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:l(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:l(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:l(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:l(s),lookbehind:!0,greedy:!0},number:{pattern:l(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:a,important:r,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},n.languages.yml=n.languages.yaml})(t)}return mp}var hp,nw;function zj(){if(nw)return hp;nw=1;var e=YR();hp=t,t.displayName="tap",t.aliases=[];function t(n){n.register(e),n.languages.tap={fail:/not ok[^#{\n\r]*/,pass:/ok[^#{\n\r]*/,pragma:/pragma [+-][a-z]+/,bailout:/bail out!.*/i,version:/TAP version \d+/i,plan:/\b\d+\.\.\d+(?: +#.*)?/,subtest:{pattern:/# Subtest(?:: .*)?/,greedy:!0},punctuation:/[{}]/,directive:/#.*/,yamlish:{pattern:/(^[ \t]*)---[\s\S]*?[\r\n][ \t]*\.\.\.$/m,lookbehind:!0,inside:n.languages.yaml,alias:"language-yaml"}}}return hp}var bp,rw;function Gj(){if(rw)return bp;rw=1,bp=e,e.displayName="tcl",e.aliases=[];function e(t){t.languages.tcl={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},string:{pattern:/"(?:[^"\\\r\n]|\\(?:\r\n|[\s\S]))*"/,greedy:!0},variable:[{pattern:/(\$)(?:::)?(?:[a-zA-Z0-9]+::)*\w+/,lookbehind:!0},{pattern:/(\$)\{[^}]+\}/,lookbehind:!0},{pattern:/(^[\t ]*set[ \t]+)(?:::)?(?:[a-zA-Z0-9]+::)*\w+/m,lookbehind:!0}],function:{pattern:/(^[\t ]*proc[ \t]+)\S+/m,lookbehind:!0},builtin:[{pattern:/(^[\t ]*)(?:break|class|continue|error|eval|exit|for|foreach|if|proc|return|switch|while)\b/m,lookbehind:!0},/\b(?:else|elseif)\b/],scope:{pattern:/(^[\t ]*)(?:global|upvar|variable)\b/m,lookbehind:!0,alias:"constant"},keyword:{pattern:/(^[\t ]*|\[)(?:Safe_Base|Tcl|after|append|apply|array|auto_(?:execok|import|load|mkindex|qualify|reset)|automkindex_old|bgerror|binary|catch|cd|chan|clock|close|concat|dde|dict|encoding|eof|exec|expr|fblocked|fconfigure|fcopy|file(?:event|name)?|flush|gets|glob|history|http|incr|info|interp|join|lappend|lassign|lindex|linsert|list|llength|load|lrange|lrepeat|lreplace|lreverse|lsearch|lset|lsort|math(?:func|op)|memory|msgcat|namespace|open|package|parray|pid|pkg_mkIndex|platform|puts|pwd|re_syntax|read|refchan|regexp|registry|regsub|rename|scan|seek|set|socket|source|split|string|subst|tcl(?:_endOfWord|_findLibrary|startOf(?:Next|Previous)Word|test|vars|wordBreak(?:After|Before))|tell|time|tm|trace|unknown|unload|unset|update|uplevel|vwait)\b/m,lookbehind:!0},operator:/!=?|\*\*?|==|&&?|\|\|?|<[=<]?|>[=>]?|[-+~\/%?^]|\b(?:eq|in|ne|ni)\b/,punctuation:/[{}()\[\]]/}}return bp}var yp,aw;function qj(){if(aw)return yp;aw=1,yp=e,e.displayName="textile",e.aliases=[];function e(t){(function(n){var r=/\([^|()\n]+\)|\[[^\]\n]+\]|\{[^}\n]+\}/.source,a=/\)|\((?![^|()\n]+\))/.source;function i(f,p){return RegExp(f.replace(//g,function(){return"(?:"+r+")"}).replace(//g,function(){return"(?:"+a+")"}),p||"")}var o={css:{pattern:/\{[^{}]+\}/,inside:{rest:n.languages.css}},"class-id":{pattern:/(\()[^()]+(?=\))/,lookbehind:!0,alias:"attr-value"},lang:{pattern:/(\[)[^\[\]]+(?=\])/,lookbehind:!0,alias:"attr-value"},punctuation:/[\\\/]\d+|\S/},s=n.languages.textile=n.languages.extend("markup",{phrase:{pattern:/(^|\r|\n)\S[\s\S]*?(?=$|\r?\n\r?\n|\r\r)/,lookbehind:!0,inside:{"block-tag":{pattern:i(/^[a-z]\w*(?:||[<>=])*\./.source),inside:{modifier:{pattern:i(/(^[a-z]\w*)(?:||[<>=])+(?=\.)/.source),lookbehind:!0,inside:o},tag:/^[a-z]\w*/,punctuation:/\.$/}},list:{pattern:i(/^[*#]+*\s+\S.*/.source,"m"),inside:{modifier:{pattern:i(/(^[*#]+)+/.source),lookbehind:!0,inside:o},punctuation:/^[*#]+/}},table:{pattern:i(/^(?:(?:||[<>=^~])+\.\s*)?(?:\|(?:(?:||[<>=^~_]|[\\/]\d+)+\.|(?!(?:||[<>=^~_]|[\\/]\d+)+\.))[^|]*)+\|/.source,"m"),inside:{modifier:{pattern:i(/(^|\|(?:\r?\n|\r)?)(?:||[<>=^~_]|[\\/]\d+)+(?=\.)/.source),lookbehind:!0,inside:o},punctuation:/\||^\./}},inline:{pattern:i(/(^|[^a-zA-Z\d])(\*\*|__|\?\?|[*_%@+\-^~])*.+?\2(?![a-zA-Z\d])/.source),lookbehind:!0,inside:{bold:{pattern:i(/(^(\*\*?)*).+?(?=\2)/.source),lookbehind:!0},italic:{pattern:i(/(^(__?)*).+?(?=\2)/.source),lookbehind:!0},cite:{pattern:i(/(^\?\?*).+?(?=\?\?)/.source),lookbehind:!0,alias:"string"},code:{pattern:i(/(^@*).+?(?=@)/.source),lookbehind:!0,alias:"keyword"},inserted:{pattern:i(/(^\+*).+?(?=\+)/.source),lookbehind:!0},deleted:{pattern:i(/(^-*).+?(?=-)/.source),lookbehind:!0},span:{pattern:i(/(^%*).+?(?=%)/.source),lookbehind:!0},modifier:{pattern:i(/(^\*\*|__|\?\?|[*_%@+\-^~])+/.source),lookbehind:!0,inside:o},punctuation:/[*_%?@+\-^~]+/}},"link-ref":{pattern:/^\[[^\]]+\]\S+$/m,inside:{string:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0},url:{pattern:/(^\])\S+$/,lookbehind:!0},punctuation:/[\[\]]/}},link:{pattern:i(/"*[^"]+":.+?(?=[^\w/]?(?:\s|$))/.source),inside:{text:{pattern:i(/(^"*)[^"]+(?=")/.source),lookbehind:!0},modifier:{pattern:i(/(^")+/.source),lookbehind:!0,inside:o},url:{pattern:/(:).+/,lookbehind:!0},punctuation:/[":]/}},image:{pattern:i(/!(?:||[<>=])*(?![<>=])[^!\s()]+(?:\([^)]+\))?!(?::.+?(?=[^\w/]?(?:\s|$)))?/.source),inside:{source:{pattern:i(/(^!(?:||[<>=])*)(?![<>=])[^!\s()]+(?:\([^)]+\))?(?=!)/.source),lookbehind:!0,alias:"url"},modifier:{pattern:i(/(^!)(?:||[<>=])+/.source),lookbehind:!0,inside:o},url:{pattern:/(:).+/,lookbehind:!0},punctuation:/[!:]/}},footnote:{pattern:/\b\[\d+\]/,alias:"comment",inside:{punctuation:/\[|\]/}},acronym:{pattern:/\b[A-Z\d]+\([^)]+\)/,inside:{comment:{pattern:/(\()[^()]+(?=\))/,lookbehind:!0},punctuation:/[()]/}},mark:{pattern:/\b\((?:C|R|TM)\)/,alias:"comment",inside:{punctuation:/[()]/}}}}}),l=s.phrase.inside,u={inline:l.inline,link:l.link,image:l.image,footnote:l.footnote,acronym:l.acronym,mark:l.mark};s.tag.pattern=/<\/?(?!\d)[a-z0-9]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i;var d=l.inline.inside;d.bold.inside=u,d.italic.inside=u,d.inserted.inside=u,d.deleted.inside=u,d.span.inside=u;var c=l.table.inside;c.inline=u.inline,c.link=u.link,c.image=u.image,c.footnote=u.footnote,c.acronym=u.acronym,c.mark=u.mark})(t)}return yp}var Ep,iw;function jj(){if(iw)return Ep;iw=1,Ep=e,e.displayName="toml",e.aliases=[];function e(t){(function(n){var r=/(?:[\w-]+|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*")/.source;function a(i){return i.replace(/__/g,function(){return r})}n.languages.toml={comment:{pattern:/#.*/,greedy:!0},table:{pattern:RegExp(a(/(^[\t ]*\[\s*(?:\[\s*)?)__(?:\s*\.\s*__)*(?=\s*\])/.source),"m"),lookbehind:!0,greedy:!0,alias:"class-name"},key:{pattern:RegExp(a(/(^[\t ]*|[{,]\s*)__(?:\s*\.\s*__)*(?=\s*=)/.source),"m"),lookbehind:!0,greedy:!0,alias:"property"},string:{pattern:/"""(?:\\[\s\S]|[^\\])*?"""|'''[\s\S]*?'''|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},date:[{pattern:/\b\d{4}-\d{2}-\d{2}(?:[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?\b/i,alias:"number"},{pattern:/\b\d{2}:\d{2}:\d{2}(?:\.\d+)?\b/,alias:"number"}],number:/(?:\b0(?:x[\da-zA-Z]+(?:_[\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\b|[-+]?\b\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?\b|[-+]?\b(?:inf|nan)\b/,boolean:/\b(?:false|true)\b/,punctuation:/[.,=[\]{}]/}})(t)}return Ep}var Sp,ow;function Hj(){if(ow)return Sp;ow=1,Sp=e,e.displayName="tremor",e.aliases=[];function e(t){(function(n){n.languages.tremor={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},"interpolated-string":null,extractor:{pattern:/\b[a-z_]\w*\|(?:[^\r\n\\|]|\\(?:\r\n|[\s\S]))*\|/i,greedy:!0,inside:{regex:{pattern:/(^re)\|[\s\S]+/,lookbehind:!0},function:/^\w+/,value:/\|[\s\S]+/}},identifier:{pattern:/`[^`]*`/,greedy:!0},function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())\b/,keyword:/\b(?:args|as|by|case|config|connect|connector|const|copy|create|default|define|deploy|drop|each|emit|end|erase|event|flow|fn|for|from|group|having|insert|into|intrinsic|let|links|match|merge|mod|move|of|operator|patch|pipeline|recur|script|select|set|sliding|state|stream|to|tumbling|update|use|when|where|window|with)\b/,boolean:/\b(?:false|null|true)\b/i,number:/\b(?:0b[01_]*|0x[0-9a-fA-F_]*|\d[\d_]*(?:\.\d[\d_]*)?(?:[Ee][+-]?[\d_]+)?)\b/,"pattern-punctuation":{pattern:/%(?=[({[])/,alias:"punctuation"},operator:/[-+*\/%~!^]=?|=[=>]?|&[&=]?|\|[|=]?|<>?>?=?|(?:absent|and|not|or|present|xor)\b/,punctuation:/::|[;\[\]()\{\},.:]/};var r=/#\{(?:[^"{}]|\{[^{}]*\}|"(?:[^"\\\r\n]|\\(?:\r\n|[\s\S]))*")*\}/.source;n.languages.tremor["interpolated-string"]={pattern:RegExp(/(^|[^\\])/.source+'(?:"""(?:'+/[^"\\#]|\\[\s\S]|"(?!"")|#(?!\{)/.source+"|"+r+')*"""|"(?:'+/[^"\\\r\n#]|\\(?:\r\n|[\s\S])|#(?!\{)/.source+"|"+r+')*")'),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:RegExp(r),inside:{punctuation:/^#\{|\}$/,expression:{pattern:/[\s\S]+/,inside:n.languages.tremor}}},string:/[\s\S]+/}},n.languages.troy=n.languages.tremor,n.languages.trickle=n.languages.tremor})(t)}return Sp}var vp,sw;function Vj(){if(sw)return vp;sw=1;var e=HR(),t=qm();vp=n,n.displayName="tsx",n.aliases=[];function n(r){r.register(e),r.register(t),function(a){var i=a.util.clone(a.languages.typescript);a.languages.tsx=a.languages.extend("jsx",i),delete a.languages.tsx.parameter,delete a.languages.tsx["literal-property"];var o=a.languages.tsx.tag;o.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+o.pattern.source+")",o.pattern.flags),o.lookbehind=!0}(r)}return vp}var kp,lw;function Wj(){if(lw)return kp;lw=1;var e=nt();kp=t,t.displayName="tt2",t.aliases=[];function t(n){n.register(e),function(r){r.languages.tt2=r.languages.extend("clike",{comment:/#.*|\[%#[\s\S]*?%\]/,keyword:/\b(?:BLOCK|CALL|CASE|CATCH|CLEAR|DEBUG|DEFAULT|ELSE|ELSIF|END|FILTER|FINAL|FOREACH|GET|IF|IN|INCLUDE|INSERT|LAST|MACRO|META|NEXT|PERL|PROCESS|RAWPERL|RETURN|SET|STOP|SWITCH|TAGS|THROW|TRY|UNLESS|USE|WHILE|WRAPPER)\b/,punctuation:/[[\]{},()]/}),r.languages.insertBefore("tt2","number",{operator:/=[>=]?|!=?|<=?|>=?|&&|\|\|?|\b(?:and|not|or)\b/,variable:{pattern:/\b[a-z]\w*(?:\s*\.\s*(?:\d+|\$?[a-z]\w*))*\b/i}}),r.languages.insertBefore("tt2","keyword",{delimiter:{pattern:/^(?:\[%|%%)-?|-?%\]$/,alias:"punctuation"}}),r.languages.insertBefore("tt2","string",{"single-quoted-string":{pattern:/'[^\\']*(?:\\[\s\S][^\\']*)*'/,greedy:!0,alias:"string"},"double-quoted-string":{pattern:/"[^\\"]*(?:\\[\s\S][^\\"]*)*"/,greedy:!0,alias:"string",inside:{variable:{pattern:/\$(?:[a-z]\w*(?:\.(?:\d+|\$?[a-z]\w*))*)/i}}}}),delete r.languages.tt2.string,r.hooks.add("before-tokenize",function(a){var i=/\[%[\s\S]+?%\]/g;r.languages["markup-templating"].buildPlaceholders(a,"tt2",i)}),r.hooks.add("after-tokenize",function(a){r.languages["markup-templating"].tokenizePlaceholders(a,"tt2")})}(n)}return kp}var wp,uw;function Yj(){if(uw)return wp;uw=1;var e=nt();wp=t,t.displayName="twig",t.aliases=[];function t(n){n.register(e),n.languages.twig={comment:/^\{#[\s\S]*?#\}$/,"tag-name":{pattern:/(^\{%-?\s*)\w+/,lookbehind:!0,alias:"keyword"},delimiter:{pattern:/^\{[{%]-?|-?[%}]\}$/,alias:"punctuation"},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,inside:{punctuation:/^['"]|['"]$/}},keyword:/\b(?:even|if|odd)\b/,boolean:/\b(?:false|null|true)\b/,number:/\b0x[\dA-Fa-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][-+]?\d+)?/,operator:[{pattern:/(\s)(?:and|b-and|b-or|b-xor|ends with|in|is|matches|not|or|same as|starts with)(?=\s)/,lookbehind:!0},/[=<>]=?|!=|\*\*?|\/\/?|\?:?|[-+~%|]/],punctuation:/[()\[\]{}:.,]/},n.hooks.add("before-tokenize",function(r){if(r.language==="twig"){var a=/\{(?:#[\s\S]*?#|%[\s\S]*?%|\{[\s\S]*?\})\}/g;n.languages["markup-templating"].buildPlaceholders(r,"twig",a)}}),n.hooks.add("after-tokenize",function(r){n.languages["markup-templating"].tokenizePlaceholders(r,"twig")})}return wp}var _p,cw;function Kj(){if(cw)return _p;cw=1,_p=e,e.displayName="typoscript",e.aliases=["tsconfig"];function e(t){(function(n){var r=/\b(?:ACT|ACTIFSUB|CARRAY|CASE|CLEARGIF|COA|COA_INT|CONSTANTS|CONTENT|CUR|EDITPANEL|EFFECT|EXT|FILE|FLUIDTEMPLATE|FORM|FRAME|FRAMESET|GIFBUILDER|GMENU|GMENU_FOLDOUT|GMENU_LAYERS|GP|HMENU|HRULER|HTML|IENV|IFSUB|IMAGE|IMGMENU|IMGMENUITEM|IMGTEXT|IMG_RESOURCE|INCLUDE_TYPOSCRIPT|JSMENU|JSMENUITEM|LLL|LOAD_REGISTER|NO|PAGE|RECORDS|RESTORE_REGISTER|TEMPLATE|TEXT|TMENU|TMENUITEM|TMENU_LAYERS|USER|USER_INT|_GIFBUILDER|global|globalString|globalVar)\b/;n.languages.typoscript={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:= \t]|(?:^|[^= \t])[ \t]+)\/\/.*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^"'])#.*/,lookbehind:!0,greedy:!0}],function:[{pattern://,inside:{string:{pattern:/"[^"\r\n]*"|'[^'\r\n]*'/,inside:{keyword:r}},keyword:{pattern:/INCLUDE_TYPOSCRIPT/}}},{pattern:/@import\s*(?:"[^"\r\n]*"|'[^'\r\n]*')/,inside:{string:/"[^"\r\n]*"|'[^'\r\n]*'/}}],string:{pattern:/^([^=]*=[< ]?)(?:(?!\]\n).)*/,lookbehind:!0,inside:{function:/\{\$.*\}/,keyword:r,number:/^\d+$/,punctuation:/[,|:]/}},keyword:r,number:{pattern:/\b\d+\s*[.{=]/,inside:{operator:/[.{=]/}},tag:{pattern:/\.?[-\w\\]+\.?/,inside:{punctuation:/\./}},punctuation:/[{}[\];(),.:|]/,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/},n.languages.tsconfig=n.languages.typoscript})(t)}return _p}var Tp,dw;function Xj(){if(dw)return Tp;dw=1,Tp=e,e.displayName="unrealscript",e.aliases=["uc","uscript"];function e(t){t.languages.unrealscript={comment:/\/\/.*|\/\*[\s\S]*?\*\//,string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},category:{pattern:/(\b(?:(?:autoexpand|hide|show)categories|var)\s*\()[^()]+(?=\))/,lookbehind:!0,greedy:!0,alias:"property"},metadata:{pattern:/(\w\s*)<\s*\w+\s*=[^<>|=\r\n]+(?:\|\s*\w+\s*=[^<>|=\r\n]+)*>/,lookbehind:!0,greedy:!0,inside:{property:/\b\w+(?=\s*=)/,operator:/=/,punctuation:/[<>|]/}},macro:{pattern:/`\w+/,alias:"property"},"class-name":{pattern:/(\b(?:class|enum|extends|interface|state(?:\(\))?|struct|within)\s+)\w+/,lookbehind:!0},keyword:/\b(?:abstract|actor|array|auto|autoexpandcategories|bool|break|byte|case|class|classgroup|client|coerce|collapsecategories|config|const|continue|default|defaultproperties|delegate|dependson|deprecated|do|dontcollapsecategories|editconst|editinlinenew|else|enum|event|exec|export|extends|final|float|for|forcescriptorder|foreach|function|goto|guid|hidecategories|hidedropdown|if|ignores|implements|inherits|input|int|interface|iterator|latent|local|material|name|native|nativereplication|noexport|nontransient|noteditinlinenew|notplaceable|operator|optional|out|pawn|perobjectconfig|perobjectlocalized|placeable|postoperator|preoperator|private|protected|reliable|replication|return|server|showcategories|simulated|singular|state|static|string|struct|structdefault|structdefaultproperties|switch|texture|transient|travel|unreliable|until|var|vector|while|within)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,boolean:/\b(?:false|true)\b/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/>>|<<|--|\+\+|\*\*|[-+*/~!=<>$@]=?|&&?|\|\|?|\^\^?|[?:%]|\b(?:ClockwiseFrom|Cross|Dot)\b/,punctuation:/[()[\]{};,.]/},t.languages.uc=t.languages.uscript=t.languages.unrealscript}return Tp}var Ap,pw;function Zj(){if(pw)return Ap;pw=1,Ap=e,e.displayName="uorazor",e.aliases=[];function e(t){t.languages.uorazor={"comment-hash":{pattern:/#.*/,alias:"comment",greedy:!0},"comment-slash":{pattern:/\/\/.*/,alias:"comment",greedy:!0},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,inside:{punctuation:/^['"]|['"]$/},greedy:!0},"source-layers":{pattern:/\b(?:arms|backpack|blue|bracelet|cancel|clear|cloak|criminal|earrings|enemy|facialhair|friend|friendly|gloves|gray|grey|ground|hair|head|innerlegs|innertorso|innocent|lefthand|middletorso|murderer|neck|nonfriendly|onehandedsecondary|outerlegs|outertorso|pants|red|righthand|ring|self|shirt|shoes|talisman|waist)\b/i,alias:"function"},"source-commands":{pattern:/\b(?:alliance|attack|cast|clearall|clearignore|clearjournal|clearlist|clearsysmsg|createlist|createtimer|dclick|dclicktype|dclickvar|dress|dressconfig|drop|droprelloc|emote|getlabel|guild|gumpclose|gumpresponse|hotkey|ignore|lasttarget|lift|lifttype|menu|menuresponse|msg|org|organize|organizer|overhead|pause|poplist|potion|promptresponse|pushlist|removelist|removetimer|rename|restock|say|scav|scavenger|script|setability|setlasttarget|setskill|settimer|setvar|sysmsg|target|targetloc|targetrelloc|targettype|undress|unignore|unsetvar|useobject|useonce|useskill|usetype|virtue|wait|waitforgump|waitformenu|waitforprompt|waitforstat|waitforsysmsg|waitfortarget|walk|wfsysmsg|wft|whisper|yell)\b/,alias:"function"},"tag-name":{pattern:/(^\{%-?\s*)\w+/,lookbehind:!0,alias:"keyword"},delimiter:{pattern:/^\{[{%]-?|-?[%}]\}$/,alias:"punctuation"},function:/\b(?:atlist|close|closest|count|counter|counttype|dead|dex|diffhits|diffmana|diffstam|diffweight|find|findbuff|finddebuff|findlayer|findtype|findtypelist|followers|gumpexists|hidden|hits|hp|hue|human|humanoid|ingump|inlist|insysmessage|insysmsg|int|invul|lhandempty|list|listexists|mana|maxhits|maxhp|maxmana|maxstam|maxweight|monster|mounted|name|next|noto|paralyzed|poisoned|position|prev|previous|queued|rand|random|rhandempty|skill|stam|str|targetexists|timer|timerexists|varexist|warmode|weight)\b/,keyword:/\b(?:and|as|break|continue|else|elseif|endfor|endif|endwhile|for|if|loop|not|or|replay|stop|while)\b/,boolean:/\b(?:false|null|true)\b/,number:/\b0x[\dA-Fa-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][-+]?\d+)?/,operator:[{pattern:/(\s)(?:and|b-and|b-or|b-xor|ends with|in|is|matches|not|or|same as|starts with)(?=\s)/,lookbehind:!0},/[=<>]=?|!=|\*\*?|\/\/?|\?:?|[-+~%|]/],punctuation:/[()\[\]{}:.,]/}}return Ap}var Rp,fw;function Qj(){if(fw)return Rp;fw=1,Rp=e,e.displayName="uri",e.aliases=["url"];function e(t){t.languages.uri={scheme:{pattern:/^[a-z][a-z0-9+.-]*:/im,greedy:!0,inside:{"scheme-delimiter":/:$/}},fragment:{pattern:/#[\w\-.~!$&'()*+,;=%:@/?]*/,inside:{"fragment-delimiter":/^#/}},query:{pattern:/\?[\w\-.~!$&'()*+,;=%:@/?]*/,inside:{"query-delimiter":{pattern:/^\?/,greedy:!0},"pair-delimiter":/[&;]/,pair:{pattern:/^[^=][\s\S]*/,inside:{key:/^[^=]+/,value:{pattern:/(^=)[\s\S]+/,lookbehind:!0}}}}},authority:{pattern:RegExp(/^\/\//.source+/(?:[\w\-.~!$&'()*+,;=%:]*@)?/.source+("(?:"+/\[(?:[0-9a-fA-F:.]{2,48}|v[0-9a-fA-F]+\.[\w\-.~!$&'()*+,;=]+)\]/.source+"|"+/[\w\-.~!$&'()*+,;=%]*/.source+")")+/(?::\d*)?/.source,"m"),inside:{"authority-delimiter":/^\/\//,"user-info-segment":{pattern:/^[\w\-.~!$&'()*+,;=%:]*@/,inside:{"user-info-delimiter":/@$/,"user-info":/^[\w\-.~!$&'()*+,;=%:]+/}},"port-segment":{pattern:/:\d*$/,inside:{"port-delimiter":/^:/,port:/^\d+/}},host:{pattern:/[\s\S]+/,inside:{"ip-literal":{pattern:/^\[[\s\S]+\]$/,inside:{"ip-literal-delimiter":/^\[|\]$/,"ipv-future":/^v[\s\S]+/,"ipv6-address":/^[\s\S]+/}},"ipv4-address":/^(?:(?:[03-9]\d?|[12]\d{0,2})\.){3}(?:[03-9]\d?|[12]\d{0,2})$/}}}},path:{pattern:/^[\w\-.~!$&'()*+,;=%:@/]+/m,inside:{"path-separator":/\//}}},t.languages.url=t.languages.uri}return Rp}var Ip,gw;function Jj(){if(gw)return Ip;gw=1,Ip=e,e.displayName="v",e.aliases=[];function e(t){(function(n){var r={pattern:/[\s\S]+/,inside:null};n.languages.v=n.languages.extend("clike",{string:{pattern:/r?(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,alias:"quoted-string",greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:\{[^{}]*\}|\w+(?:\.\w+(?:\([^\(\)]*\))?|\[[^\[\]]+\])*)/,lookbehind:!0,inside:{"interpolation-variable":{pattern:/^\$\w[\s\S]*$/,alias:"variable"},"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},"interpolation-expression":r}}}},"class-name":{pattern:/(\b(?:enum|interface|struct|type)\s+)(?:C\.)?\w+/,lookbehind:!0},keyword:/(?:\b(?:__global|as|asm|assert|atomic|break|chan|const|continue|defer|else|embed|enum|fn|for|go(?:to)?|if|import|in|interface|is|lock|match|module|mut|none|or|pub|return|rlock|select|shared|sizeof|static|struct|type(?:of)?|union|unsafe)|\$(?:else|for|if)|#(?:flag|include))\b/,number:/\b(?:0x[a-f\d]+(?:_[a-f\d]+)*|0b[01]+(?:_[01]+)*|0o[0-7]+(?:_[0-7]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?)\b/i,operator:/~|\?|[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\.?/,builtin:/\b(?:any(?:_float|_int)?|bool|byte(?:ptr)?|charptr|f(?:32|64)|i(?:8|16|64|128|nt)|rune|size_t|string|u(?:16|32|64|128)|voidptr)\b/}),r.inside=n.languages.v,n.languages.insertBefore("v","string",{char:{pattern:/`(?:\\`|\\?[^`]{1,2})`/,alias:"rune"}}),n.languages.insertBefore("v","operator",{attribute:{pattern:/(^[\t ]*)\[(?:deprecated|direct_array_access|flag|inline|live|ref_only|typedef|unsafe_fn|windows_stdcall)\]/m,lookbehind:!0,alias:"annotation",inside:{punctuation:/[\[\]]/,keyword:/\w+/}},generic:{pattern:/<\w+>(?=\s*[\)\{])/,inside:{punctuation:/[<>]/,"class-name":/\w+/}}}),n.languages.insertBefore("v","function",{"generic-function":{pattern:/\b\w+\s*<\w+>(?=\()/,inside:{function:/^\w+/,generic:{pattern:/<\w+>/,inside:n.languages.v.generic.inside}}}})})(t)}return Ip}var Cp,mw;function eH(){if(mw)return Cp;mw=1,Cp=e,e.displayName="vala",e.aliases=[];function e(t){t.languages.vala=t.languages.extend("clike",{"class-name":[{pattern:/\b[A-Z]\w*(?:\.\w+)*\b(?=(?:\?\s+|\*?\s+\*?)\w)/,inside:{punctuation:/\./}},{pattern:/(\[)[A-Z]\w*(?:\.\w+)*\b/,lookbehind:!0,inside:{punctuation:/\./}},{pattern:/(\b(?:class|interface)\s+[A-Z]\w*(?:\.\w+)*\s*:\s*)[A-Z]\w*(?:\.\w+)*\b/,lookbehind:!0,inside:{punctuation:/\./}},{pattern:/((?:\b(?:class|enum|interface|new|struct)\s+)|(?:catch\s+\())[A-Z]\w*(?:\.\w+)*\b/,lookbehind:!0,inside:{punctuation:/\./}}],keyword:/\b(?:abstract|as|assert|async|base|bool|break|case|catch|char|class|const|construct|continue|default|delegate|delete|do|double|dynamic|else|ensures|enum|errordomain|extern|finally|float|for|foreach|get|if|in|inline|int|int16|int32|int64|int8|interface|internal|is|lock|long|namespace|new|null|out|override|owned|params|private|protected|public|ref|requires|return|set|short|signal|sizeof|size_t|ssize_t|static|string|struct|switch|this|throw|throws|try|typeof|uchar|uint|uint16|uint32|uint64|uint8|ulong|unichar|unowned|ushort|using|value|var|virtual|void|volatile|weak|while|yield)\b/i,function:/\b\w+(?=\s*\()/,number:/(?:\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)(?:f|u?l?)?/i,operator:/\+\+|--|&&|\|\||<<=?|>>=?|=>|->|~|[+\-*\/%&^|=!<>]=?|\?\??|\.\.\./,punctuation:/[{}[\];(),.:]/,constant:/\b[A-Z0-9_]+\b/}),t.languages.insertBefore("vala","string",{"raw-string":{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string"},"template-string":{pattern:/@"[\s\S]*?"/,greedy:!0,inside:{interpolation:{pattern:/\$(?:\([^)]*\)|[a-zA-Z]\w*)/,inside:{delimiter:{pattern:/^\$\(?|\)$/,alias:"punctuation"},rest:t.languages.vala}},string:/[\s\S]+/}}}),t.languages.insertBefore("vala","keyword",{regex:{pattern:/\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[imsx]{0,4}(?=\s*(?:$|[\r\n,.;})\]]))/,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:t.languages.regex},"regex-delimiter":/^\//,"regex-flags":/^[a-z]+$/}}})}return Cp}var Np,hw;function tH(){if(hw)return Np;hw=1,Np=e,e.displayName="velocity",e.aliases=[];function e(t){(function(n){n.languages.velocity=n.languages.extend("markup",{});var r={variable:{pattern:/(^|[^\\](?:\\\\)*)\$!?(?:[a-z][\w-]*(?:\([^)]*\))?(?:\.[a-z][\w-]*(?:\([^)]*\))?|\[[^\]]+\])*|\{[^}]+\})/i,lookbehind:!0,inside:{}},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},number:/\b\d+\b/,boolean:/\b(?:false|true)\b/,operator:/[=!<>]=?|[+*/%-]|&&|\|\||\.\.|\b(?:eq|g[et]|l[et]|n(?:e|ot))\b/,punctuation:/[(){}[\]:,.]/};r.variable.inside={string:r.string,function:{pattern:/([^\w-])[a-z][\w-]*(?=\()/,lookbehind:!0},number:r.number,boolean:r.boolean,punctuation:r.punctuation},n.languages.insertBefore("velocity","comment",{unparsed:{pattern:/(^|[^\\])#\[\[[\s\S]*?\]\]#/,lookbehind:!0,greedy:!0,inside:{punctuation:/^#\[\[|\]\]#$/}},"velocity-comment":[{pattern:/(^|[^\\])#\*[\s\S]*?\*#/,lookbehind:!0,greedy:!0,alias:"comment"},{pattern:/(^|[^\\])##.*/,lookbehind:!0,greedy:!0,alias:"comment"}],directive:{pattern:/(^|[^\\](?:\\\\)*)#@?(?:[a-z][\w-]*|\{[a-z][\w-]*\})(?:\s*\((?:[^()]|\([^()]*\))*\))?/i,lookbehind:!0,inside:{keyword:{pattern:/^#@?(?:[a-z][\w-]*|\{[a-z][\w-]*\})|\bin\b/,inside:{punctuation:/[{}]/}},rest:r}},variable:r.variable}),n.languages.velocity.tag.inside["attr-value"].inside.rest=n.languages.velocity})(t)}return Np}var xp,bw;function nH(){if(bw)return xp;bw=1,xp=e,e.displayName="verilog",e.aliases=[];function e(t){t.languages.verilog={comment:{pattern:/\/\/.*|\/\*[\s\S]*?\*\//,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"kernel-function":{pattern:/\B\$\w+\b/,alias:"property"},constant:/\B`\w+\b/,function:/\b\w+(?=\()/,keyword:/\b(?:alias|and|assert|assign|assume|automatic|before|begin|bind|bins|binsof|bit|break|buf|bufif0|bufif1|byte|case|casex|casez|cell|chandle|class|clocking|cmos|config|const|constraint|context|continue|cover|covergroup|coverpoint|cross|deassign|default|defparam|design|disable|dist|do|edge|else|end|endcase|endclass|endclocking|endconfig|endfunction|endgenerate|endgroup|endinterface|endmodule|endpackage|endprimitive|endprogram|endproperty|endsequence|endspecify|endtable|endtask|enum|event|expect|export|extends|extern|final|first_match|for|force|foreach|forever|fork|forkjoin|function|generate|genvar|highz0|highz1|if|iff|ifnone|ignore_bins|illegal_bins|import|incdir|include|initial|inout|input|inside|instance|int|integer|interface|intersect|join|join_any|join_none|large|liblist|library|local|localparam|logic|longint|macromodule|matches|medium|modport|module|nand|negedge|new|nmos|nor|noshowcancelled|not|notif0|notif1|null|or|output|package|packed|parameter|pmos|posedge|primitive|priority|program|property|protected|pull0|pull1|pulldown|pullup|pulsestyle_ondetect|pulsestyle_onevent|pure|rand|randc|randcase|randsequence|rcmos|real|realtime|ref|reg|release|repeat|return|rnmos|rpmos|rtran|rtranif0|rtranif1|scalared|sequence|shortint|shortreal|showcancelled|signed|small|solve|specify|specparam|static|string|strong0|strong1|struct|super|supply0|supply1|table|tagged|task|this|throughout|time|timeprecision|timeunit|tran|tranif0|tranif1|tri|tri0|tri1|triand|trior|trireg|type|typedef|union|unique|unsigned|use|uwire|var|vectored|virtual|void|wait|wait_order|wand|weak0|weak1|while|wildcard|wire|with|within|wor|xnor|xor)\b/,important:/\b(?:always|always_comb|always_ff|always_latch)\b(?: *@)?/,number:/\B##?\d+|(?:\b\d+)?'[odbh] ?[\da-fzx_?]+|\b(?:\d*[._])?\d+(?:e[-+]?\d+)?/i,operator:/[-+{}^~%*\/?=!<>&|]+/,punctuation:/[[\];(),.:]/}}return xp}var Op,yw;function rH(){if(yw)return Op;yw=1,Op=e,e.displayName="vhdl",e.aliases=[];function e(t){t.languages.vhdl={comment:/--.+/,"vhdl-vectors":{pattern:/\b[oxb]"[\da-f_]+"|"[01uxzwlh-]+"/i,alias:"number"},"quoted-function":{pattern:/"\S+?"(?=\()/,alias:"function"},string:/"(?:[^\\"\r\n]|\\(?:\r\n|[\s\S]))*"/,constant:/\b(?:library|use)\b/i,keyword:/\b(?:'active|'ascending|'base|'delayed|'driving|'driving_value|'event|'high|'image|'instance_name|'last_active|'last_event|'last_value|'left|'leftof|'length|'low|'path_name|'pos|'pred|'quiet|'range|'reverse_range|'right|'rightof|'simple_name|'stable|'succ|'transaction|'val|'value|access|after|alias|all|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|new|next|null|of|on|open|others|out|package|port|postponed|procedure|process|pure|range|record|register|reject|report|return|select|severity|shared|signal|subtype|then|to|transport|type|unaffected|units|until|use|variable|wait|when|while|with)\b/i,boolean:/\b(?:false|true)\b/i,function:/\w+(?=\()/,number:/'[01uxzwlh-]'|\b(?:\d+#[\da-f_.]+#|\d[\d_.]*)(?:e[-+]?\d+)?/i,operator:/[<>]=?|:=|[-+*/&=]|\b(?:abs|and|mod|nand|nor|not|or|rem|rol|ror|sla|sll|sra|srl|xnor|xor)\b/i,punctuation:/[{}[\];(),.:]/}}return Op}var Lp,Ew;function aH(){if(Ew)return Lp;Ew=1,Lp=e,e.displayName="vim",e.aliases=[];function e(t){t.languages.vim={string:/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\r\n]|'')*'/,comment:/".*/,function:/\b\w+(?=\()/,keyword:/\b(?:N|Next|P|Print|X|XMLent|XMLns|ab|abbreviate|abc|abclear|abo|aboveleft|al|all|ar|arga|argadd|argd|argdelete|argdo|arge|argedit|argg|argglobal|argl|arglocal|args|argu|argument|as|ascii|b|bN|bNext|ba|bad|badd|ball|bd|bdelete|be|bel|belowright|bf|bfirst|bl|blast|bm|bmodified|bn|bnext|bo|botright|bp|bprevious|br|brea|break|breaka|breakadd|breakd|breakdel|breakl|breaklist|brewind|bro|browse|bufdo|buffer|buffers|bun|bunload|bw|bwipeout|c|cN|cNext|cNfcNfile|ca|cabbrev|cabc|cabclear|cad|caddb|caddbuffer|caddexpr|caddf|caddfile|cal|call|cat|catch|cb|cbuffer|cc|ccl|cclose|cd|ce|center|cex|cexpr|cf|cfile|cfir|cfirst|cg|cgetb|cgetbuffer|cgete|cgetexpr|cgetfile|change|changes|chd|chdir|che|checkpath|checkt|checktime|cl|cla|clast|clist|clo|close|cmapc|cmapclear|cn|cnew|cnewer|cnext|cnf|cnfile|cnorea|cnoreabbrev|co|col|colder|colo|colorscheme|comc|comclear|comp|compiler|con|conf|confirm|continue|cope|copen|copy|cp|cpf|cpfile|cprevious|cq|cquit|cr|crewind|cu|cuna|cunabbrev|cunmap|cw|cwindow|d|debugg|debuggreedy|delc|delcommand|delete|delf|delfunction|delm|delmarks|di|diffg|diffget|diffoff|diffpatch|diffpu|diffput|diffsplit|diffthis|diffu|diffupdate|dig|digraphs|display|dj|djump|dl|dlist|dr|drop|ds|dsearch|dsp|dsplit|e|earlier|echoe|echoerr|echom|echomsg|echon|edit|el|else|elsei|elseif|em|emenu|en|endf|endfo|endfor|endfun|endfunction|endif|endt|endtry|endw|endwhile|ene|enew|ex|exi|exit|exu|exusage|f|file|files|filetype|fin|fina|finally|find|fini|finish|fir|first|fix|fixdel|fo|fold|foldc|foldclose|foldd|folddoc|folddoclosed|folddoopen|foldo|foldopen|for|fu|fun|function|go|goto|gr|grep|grepa|grepadd|h|ha|hardcopy|help|helpf|helpfind|helpg|helpgrep|helpt|helptags|hid|hide|his|history|ia|iabbrev|iabc|iabclear|if|ij|ijump|il|ilist|imapc|imapclear|in|inorea|inoreabbrev|isearch|isp|isplit|iu|iuna|iunabbrev|iunmap|j|join|ju|jumps|k|kee|keepalt|keepj|keepjumps|keepmarks|l|lN|lNext|lNf|lNfile|la|lad|laddb|laddbuffer|laddexpr|laddf|laddfile|lan|language|last|later|lb|lbuffer|lc|lcd|lch|lchdir|lcl|lclose|left|lefta|leftabove|let|lex|lexpr|lf|lfile|lfir|lfirst|lg|lgetb|lgetbuffer|lgete|lgetexpr|lgetfile|lgr|lgrep|lgrepa|lgrepadd|lh|lhelpgrep|list|ll|lla|llast|lli|llist|lm|lmak|lmake|lmap|lmapc|lmapclear|ln|lne|lnew|lnewer|lnext|lnf|lnfile|lnoremap|lo|loadview|loc|lockmarks|lockv|lockvar|lol|lolder|lop|lopen|lp|lpf|lpfile|lprevious|lr|lrewind|ls|lt|ltag|lu|lunmap|lv|lvimgrep|lvimgrepa|lvimgrepadd|lw|lwindow|m|ma|mak|make|mark|marks|mat|match|menut|menutranslate|mk|mkexrc|mks|mksession|mksp|mkspell|mkv|mkvie|mkview|mkvimrc|mod|mode|move|mz|mzf|mzfile|mzscheme|n|nbkey|new|next|nmapc|nmapclear|noh|nohlsearch|norea|noreabbrev|nu|number|nun|nunmap|o|omapc|omapclear|on|only|open|opt|options|ou|ounmap|p|pc|pclose|pe|ped|pedit|perl|perld|perldo|po|pop|popu|popup|pp|ppop|pre|preserve|prev|previous|print|prof|profd|profdel|profile|promptf|promptfind|promptr|promptrepl|ps|psearch|ptN|ptNext|pta|ptag|ptf|ptfirst|ptj|ptjump|ptl|ptlast|ptn|ptnext|ptp|ptprevious|ptr|ptrewind|pts|ptselect|pu|put|pw|pwd|py|pyf|pyfile|python|q|qa|qall|quit|quita|quitall|r|read|rec|recover|red|redi|redir|redo|redr|redraw|redraws|redrawstatus|reg|registers|res|resize|ret|retab|retu|return|rew|rewind|ri|right|rightb|rightbelow|ru|rub|ruby|rubyd|rubydo|rubyf|rubyfile|runtime|rv|rviminfo|sN|sNext|sa|sal|sall|san|sandbox|sargument|sav|saveas|sb|sbN|sbNext|sba|sball|sbf|sbfirst|sbl|sblast|sbm|sbmodified|sbn|sbnext|sbp|sbprevious|sbr|sbrewind|sbuffer|scrip|scripte|scriptencoding|scriptnames|se|set|setf|setfiletype|setg|setglobal|setl|setlocal|sf|sfind|sfir|sfirst|sh|shell|sign|sil|silent|sim|simalt|sl|sla|slast|sleep|sm|smagic|smap|smapc|smapclear|sme|smenu|sn|snext|sni|sniff|sno|snomagic|snor|snoremap|snoreme|snoremenu|so|sor|sort|source|sp|spe|spelld|spelldump|spellgood|spelli|spellinfo|spellr|spellrepall|spellu|spellundo|spellw|spellwrong|split|spr|sprevious|sre|srewind|st|sta|stag|star|startg|startgreplace|startinsert|startr|startreplace|stj|stjump|stop|stopi|stopinsert|sts|stselect|sun|sunhide|sunm|sunmap|sus|suspend|sv|sview|syncbind|t|tN|tNext|ta|tab|tabN|tabNext|tabc|tabclose|tabd|tabdo|tabe|tabedit|tabf|tabfind|tabfir|tabfirst|tabl|tablast|tabm|tabmove|tabn|tabnew|tabnext|tabo|tabonly|tabp|tabprevious|tabr|tabrewind|tabs|tag|tags|tc|tcl|tcld|tcldo|tclf|tclfile|te|tearoff|tf|tfirst|th|throw|tj|tjump|tl|tlast|tm|tmenu|tn|tnext|to|topleft|tp|tprevious|tr|trewind|try|ts|tselect|tu|tunmenu|u|una|unabbreviate|undo|undoj|undojoin|undol|undolist|unh|unhide|unlet|unlo|unlockvar|unm|unmap|up|update|ve|verb|verbose|version|vert|vertical|vi|vie|view|vim|vimgrep|vimgrepa|vimgrepadd|visual|viu|viusage|vmapc|vmapclear|vne|vnew|vs|vsplit|vu|vunmap|w|wN|wNext|wa|wall|wh|while|win|winc|wincmd|windo|winp|winpos|winsize|wn|wnext|wp|wprevious|wq|wqa|wqall|write|ws|wsverb|wv|wviminfo|x|xa|xall|xit|xm|xmap|xmapc|xmapclear|xme|xmenu|xn|xnoremap|xnoreme|xnoremenu|xu|xunmap|y|yank)\b/,builtin:/\b(?:acd|ai|akm|aleph|allowrevins|altkeymap|ambiwidth|ambw|anti|antialias|arab|arabic|arabicshape|ari|arshape|autochdir|autocmd|autoindent|autoread|autowrite|autowriteall|aw|awa|background|backspace|backup|backupcopy|backupdir|backupext|backupskip|balloondelay|ballooneval|balloonexpr|bdir|bdlay|beval|bex|bexpr|bg|bh|bin|binary|biosk|bioskey|bk|bkc|bomb|breakat|brk|browsedir|bs|bsdir|bsk|bt|bufhidden|buflisted|buftype|casemap|ccv|cdpath|cedit|cfu|ch|charconvert|ci|cin|cindent|cink|cinkeys|cino|cinoptions|cinw|cinwords|clipboard|cmdheight|cmdwinheight|cmp|cms|columns|com|comments|commentstring|compatible|complete|completefunc|completeopt|consk|conskey|copyindent|cot|cpo|cpoptions|cpt|cscopepathcomp|cscopeprg|cscopequickfix|cscopetag|cscopetagorder|cscopeverbose|cspc|csprg|csqf|cst|csto|csverb|cuc|cul|cursorcolumn|cursorline|cwh|debug|deco|def|define|delcombine|dex|dg|dict|dictionary|diff|diffexpr|diffopt|digraph|dip|dir|directory|dy|ea|ead|eadirection|eb|ed|edcompatible|ef|efm|ei|ek|enc|encoding|endofline|eol|ep|equalalways|equalprg|errorbells|errorfile|errorformat|esckeys|et|eventignore|expandtab|exrc|fcl|fcs|fdc|fde|fdi|fdl|fdls|fdm|fdn|fdo|fdt|fen|fenc|fencs|fex|ff|ffs|fileencoding|fileencodings|fileformat|fileformats|fillchars|fk|fkmap|flp|fml|fmr|foldcolumn|foldenable|foldexpr|foldignore|foldlevel|foldlevelstart|foldmarker|foldmethod|foldminlines|foldnestmax|foldtext|formatexpr|formatlistpat|formatoptions|formatprg|fp|fs|fsync|ft|gcr|gd|gdefault|gfm|gfn|gfs|gfw|ghr|gp|grepformat|grepprg|gtl|gtt|guicursor|guifont|guifontset|guifontwide|guiheadroom|guioptions|guipty|guitablabel|guitabtooltip|helpfile|helpheight|helplang|hf|hh|hi|hidden|highlight|hk|hkmap|hkmapp|hkp|hl|hlg|hls|hlsearch|ic|icon|iconstring|ignorecase|im|imactivatekey|imak|imc|imcmdline|imd|imdisable|imi|iminsert|ims|imsearch|inc|include|includeexpr|incsearch|inde|indentexpr|indentkeys|indk|inex|inf|infercase|insertmode|invacd|invai|invakm|invallowrevins|invaltkeymap|invanti|invantialias|invar|invarab|invarabic|invarabicshape|invari|invarshape|invautochdir|invautoindent|invautoread|invautowrite|invautowriteall|invaw|invawa|invbackup|invballooneval|invbeval|invbin|invbinary|invbiosk|invbioskey|invbk|invbl|invbomb|invbuflisted|invcf|invci|invcin|invcindent|invcompatible|invconfirm|invconsk|invconskey|invcopyindent|invcp|invcscopetag|invcscopeverbose|invcst|invcsverb|invcuc|invcul|invcursorcolumn|invcursorline|invdeco|invdelcombine|invdg|invdiff|invdigraph|invdisable|invea|inveb|inved|invedcompatible|invek|invendofline|inveol|invequalalways|inverrorbells|invesckeys|invet|invex|invexpandtab|invexrc|invfen|invfk|invfkmap|invfoldenable|invgd|invgdefault|invguipty|invhid|invhidden|invhk|invhkmap|invhkmapp|invhkp|invhls|invhlsearch|invic|invicon|invignorecase|invim|invimc|invimcmdline|invimd|invincsearch|invinf|invinfercase|invinsertmode|invis|invjoinspaces|invjs|invlazyredraw|invlbr|invlinebreak|invlisp|invlist|invloadplugins|invlpl|invlz|invma|invmacatsui|invmagic|invmh|invml|invmod|invmodeline|invmodifiable|invmodified|invmore|invmousef|invmousefocus|invmousehide|invnu|invnumber|invodev|invopendevice|invpaste|invpi|invpreserveindent|invpreviewwindow|invprompt|invpvw|invreadonly|invremap|invrestorescreen|invrevins|invri|invrightleft|invrightleftcmd|invrl|invrlc|invro|invrs|invru|invruler|invsb|invsc|invscb|invscrollbind|invscs|invsecure|invsft|invshellslash|invshelltemp|invshiftround|invshortname|invshowcmd|invshowfulltag|invshowmatch|invshowmode|invsi|invsm|invsmartcase|invsmartindent|invsmarttab|invsmd|invsn|invsol|invspell|invsplitbelow|invsplitright|invspr|invsr|invssl|invsta|invstartofline|invstmp|invswapfile|invswf|invta|invtagbsearch|invtagrelative|invtagstack|invtbi|invtbidi|invtbs|invtermbidi|invterse|invtextauto|invtextmode|invtf|invtgst|invtildeop|invtimeout|invtitle|invto|invtop|invtr|invttimeout|invttybuiltin|invttyfast|invtx|invvb|invvisualbell|invwa|invwarn|invwb|invweirdinvert|invwfh|invwfw|invwildmenu|invwinfixheight|invwinfixwidth|invwiv|invwmnu|invwrap|invwrapscan|invwrite|invwriteany|invwritebackup|invws|isf|isfname|isi|isident|isk|iskeyword|isprint|joinspaces|js|key|keymap|keymodel|keywordprg|km|kmp|kp|langmap|langmenu|laststatus|lazyredraw|lbr|lcs|linebreak|lines|linespace|lisp|lispwords|listchars|loadplugins|lpl|lsp|lz|macatsui|magic|makeef|makeprg|matchpairs|matchtime|maxcombine|maxfuncdepth|maxmapdepth|maxmem|maxmempattern|maxmemtot|mco|mef|menuitems|mfd|mh|mis|mkspellmem|ml|mls|mm|mmd|mmp|mmt|modeline|modelines|modifiable|modified|more|mouse|mousef|mousefocus|mousehide|mousem|mousemodel|mouses|mouseshape|mouset|mousetime|mp|mps|msm|mzq|mzquantum|nf|noacd|noai|noakm|noallowrevins|noaltkeymap|noanti|noantialias|noar|noarab|noarabic|noarabicshape|noari|noarshape|noautochdir|noautoindent|noautoread|noautowrite|noautowriteall|noaw|noawa|nobackup|noballooneval|nobeval|nobin|nobinary|nobiosk|nobioskey|nobk|nobl|nobomb|nobuflisted|nocf|noci|nocin|nocindent|nocompatible|noconfirm|noconsk|noconskey|nocopyindent|nocp|nocscopetag|nocscopeverbose|nocst|nocsverb|nocuc|nocul|nocursorcolumn|nocursorline|nodeco|nodelcombine|nodg|nodiff|nodigraph|nodisable|noea|noeb|noed|noedcompatible|noek|noendofline|noeol|noequalalways|noerrorbells|noesckeys|noet|noex|noexpandtab|noexrc|nofen|nofk|nofkmap|nofoldenable|nogd|nogdefault|noguipty|nohid|nohidden|nohk|nohkmap|nohkmapp|nohkp|nohls|noic|noicon|noignorecase|noim|noimc|noimcmdline|noimd|noincsearch|noinf|noinfercase|noinsertmode|nois|nojoinspaces|nojs|nolazyredraw|nolbr|nolinebreak|nolisp|nolist|noloadplugins|nolpl|nolz|noma|nomacatsui|nomagic|nomh|noml|nomod|nomodeline|nomodifiable|nomodified|nomore|nomousef|nomousefocus|nomousehide|nonu|nonumber|noodev|noopendevice|nopaste|nopi|nopreserveindent|nopreviewwindow|noprompt|nopvw|noreadonly|noremap|norestorescreen|norevins|nori|norightleft|norightleftcmd|norl|norlc|noro|nors|noru|noruler|nosb|nosc|noscb|noscrollbind|noscs|nosecure|nosft|noshellslash|noshelltemp|noshiftround|noshortname|noshowcmd|noshowfulltag|noshowmatch|noshowmode|nosi|nosm|nosmartcase|nosmartindent|nosmarttab|nosmd|nosn|nosol|nospell|nosplitbelow|nosplitright|nospr|nosr|nossl|nosta|nostartofline|nostmp|noswapfile|noswf|nota|notagbsearch|notagrelative|notagstack|notbi|notbidi|notbs|notermbidi|noterse|notextauto|notextmode|notf|notgst|notildeop|notimeout|notitle|noto|notop|notr|nottimeout|nottybuiltin|nottyfast|notx|novb|novisualbell|nowa|nowarn|nowb|noweirdinvert|nowfh|nowfw|nowildmenu|nowinfixheight|nowinfixwidth|nowiv|nowmnu|nowrap|nowrapscan|nowrite|nowriteany|nowritebackup|nows|nrformats|numberwidth|nuw|odev|oft|ofu|omnifunc|opendevice|operatorfunc|opfunc|osfiletype|pa|para|paragraphs|paste|pastetoggle|patchexpr|patchmode|path|pdev|penc|pex|pexpr|pfn|ph|pheader|pi|pm|pmbcs|pmbfn|popt|preserveindent|previewheight|previewwindow|printdevice|printencoding|printexpr|printfont|printheader|printmbcharset|printmbfont|printoptions|prompt|pt|pumheight|pvh|pvw|qe|quoteescape|readonly|remap|report|restorescreen|revins|rightleft|rightleftcmd|rl|rlc|ro|rs|rtp|ruf|ruler|rulerformat|runtimepath|sbo|sc|scb|scr|scroll|scrollbind|scrolljump|scrolloff|scrollopt|scs|sect|sections|secure|sel|selection|selectmode|sessionoptions|sft|shcf|shellcmdflag|shellpipe|shellquote|shellredir|shellslash|shelltemp|shelltype|shellxquote|shiftround|shiftwidth|shm|shortmess|shortname|showbreak|showcmd|showfulltag|showmatch|showmode|showtabline|shq|si|sidescroll|sidescrolloff|siso|sj|slm|smartcase|smartindent|smarttab|smc|smd|softtabstop|sol|spc|spell|spellcapcheck|spellfile|spelllang|spellsuggest|spf|spl|splitbelow|splitright|sps|sr|srr|ss|ssl|ssop|stal|startofline|statusline|stl|stmp|su|sua|suffixes|suffixesadd|sw|swapfile|swapsync|swb|swf|switchbuf|sws|sxq|syn|synmaxcol|syntax|t_AB|t_AF|t_AL|t_CS|t_CV|t_Ce|t_Co|t_Cs|t_DL|t_EI|t_F1|t_F2|t_F3|t_F4|t_F5|t_F6|t_F7|t_F8|t_F9|t_IE|t_IS|t_K1|t_K3|t_K4|t_K5|t_K6|t_K7|t_K8|t_K9|t_KA|t_KB|t_KC|t_KD|t_KE|t_KF|t_KG|t_KH|t_KI|t_KJ|t_KK|t_KL|t_RI|t_RV|t_SI|t_Sb|t_Sf|t_WP|t_WS|t_ZH|t_ZR|t_al|t_bc|t_cd|t_ce|t_cl|t_cm|t_cs|t_da|t_db|t_dl|t_fs|t_k1|t_k2|t_k3|t_k4|t_k5|t_k6|t_k7|t_k8|t_k9|t_kB|t_kD|t_kI|t_kN|t_kP|t_kb|t_kd|t_ke|t_kh|t_kl|t_kr|t_ks|t_ku|t_le|t_mb|t_md|t_me|t_mr|t_ms|t_nd|t_op|t_se|t_so|t_sr|t_te|t_ti|t_ts|t_ue|t_us|t_ut|t_vb|t_ve|t_vi|t_vs|t_xs|tabline|tabpagemax|tabstop|tagbsearch|taglength|tagrelative|tagstack|tal|tb|tbi|tbidi|tbis|tbs|tenc|term|termbidi|termencoding|terse|textauto|textmode|textwidth|tgst|thesaurus|tildeop|timeout|timeoutlen|title|titlelen|titleold|titlestring|toolbar|toolbariconsize|top|tpm|tsl|tsr|ttimeout|ttimeoutlen|ttm|tty|ttybuiltin|ttyfast|ttym|ttymouse|ttyscroll|ttytype|tw|tx|uc|ul|undolevels|updatecount|updatetime|ut|vb|vbs|vdir|verbosefile|vfile|viewdir|viewoptions|viminfo|virtualedit|visualbell|vop|wak|warn|wb|wc|wcm|wd|weirdinvert|wfh|wfw|whichwrap|wi|wig|wildchar|wildcharm|wildignore|wildmenu|wildmode|wildoptions|wim|winaltkeys|window|winfixheight|winfixwidth|winheight|winminheight|winminwidth|winwidth|wiv|wiw|wm|wmh|wmnu|wmw|wop|wrap|wrapmargin|wrapscan|writeany|writebackup|writedelay|ww)\b/,number:/\b(?:0x[\da-f]+|\d+(?:\.\d+)?)\b/i,operator:/\|\||&&|[-+.]=?|[=!](?:[=~][#?]?)?|[<>]=?[#?]?|[*\/%?]|\b(?:is(?:not)?)\b/,punctuation:/[{}[\](),;:]/}}return Lp}var Dp,Sw;function iH(){if(Sw)return Dp;Sw=1,Dp=e,e.displayName="visualBasic",e.aliases=[];function e(t){t.languages["visual-basic"]={comment:{pattern:/(?:['‘’]|REM\b)(?:[^\r\n_]|_(?:\r\n?|\n)?)*/i,inside:{keyword:/^REM/i}},directive:{pattern:/#(?:Const|Else|ElseIf|End|ExternalChecksum|ExternalSource|If|Region)(?:\b_[ \t]*(?:\r\n?|\n)|.)+/i,alias:"property",greedy:!0},string:{pattern:/\$?["“”](?:["“”]{2}|[^"“”])*["“”]C?/i,greedy:!0},date:{pattern:/#[ \t]*(?:\d+([/-])\d+\1\d+(?:[ \t]+(?:\d+[ \t]*(?:AM|PM)|\d+:\d+(?::\d+)?(?:[ \t]*(?:AM|PM))?))?|\d+[ \t]*(?:AM|PM)|\d+:\d+(?::\d+)?(?:[ \t]*(?:AM|PM))?)[ \t]*#/i,alias:"number"},number:/(?:(?:\b\d+(?:\.\d+)?|\.\d+)(?:E[+-]?\d+)?|&[HO][\dA-F]+)(?:[FRD]|U?[ILS])?/i,boolean:/\b(?:False|Nothing|True)\b/i,keyword:/\b(?:AddHandler|AddressOf|Alias|And(?:Also)?|As|Boolean|ByRef|Byte|ByVal|Call|Case|Catch|C(?:Bool|Byte|Char|Date|Dbl|Dec|Int|Lng|Obj|SByte|Short|Sng|Str|Type|UInt|ULng|UShort)|Char|Class|Const|Continue|Currency|Date|Decimal|Declare|Default|Delegate|Dim|DirectCast|Do|Double|Each|Else(?:If)?|End(?:If)?|Enum|Erase|Error|Event|Exit|Finally|For|Friend|Function|Get(?:Type|XMLNamespace)?|Global|GoSub|GoTo|Handles|If|Implements|Imports|In|Inherits|Integer|Interface|Is|IsNot|Let|Lib|Like|Long|Loop|Me|Mod|Module|Must(?:Inherit|Override)|My(?:Base|Class)|Namespace|Narrowing|New|Next|Not(?:Inheritable|Overridable)?|Object|Of|On|Operator|Option(?:al)?|Or(?:Else)?|Out|Overloads|Overridable|Overrides|ParamArray|Partial|Private|Property|Protected|Public|RaiseEvent|ReadOnly|ReDim|RemoveHandler|Resume|Return|SByte|Select|Set|Shadows|Shared|short|Single|Static|Step|Stop|String|Structure|Sub|SyncLock|Then|Throw|To|Try|TryCast|Type|TypeOf|U(?:Integer|Long|Short)|Until|Using|Variant|Wend|When|While|Widening|With(?:Events)?|WriteOnly|Xor)\b/i,operator:/[+\-*/\\^<=>&#@$%!]|\b_(?=[ \t]*[\r\n])/,punctuation:/[{}().,:?]/},t.languages.vb=t.languages["visual-basic"],t.languages.vba=t.languages["visual-basic"]}return Dp}var Mp,vw;function oH(){if(vw)return Mp;vw=1,Mp=e,e.displayName="warpscript",e.aliases=[];function e(t){t.languages.warpscript={comment:/#.*|\/\/.*|\/\*[\s\S]*?\*\//,string:{pattern:/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'|<'(?:[^\\']|'(?!>)|\\.)*'>/,greedy:!0},variable:/\$\S+/,macro:{pattern:/@\S+/,alias:"property"},keyword:/\b(?:BREAK|CHECKMACRO|CONTINUE|CUDF|DEFINED|DEFINEDMACRO|EVAL|FAIL|FOR|FOREACH|FORSTEP|IFT|IFTE|MSGFAIL|NRETURN|RETHROW|RETURN|SWITCH|TRY|UDF|UNTIL|WHILE)\b/,number:/[+-]?\b(?:NaN|Infinity|\d+(?:\.\d*)?(?:[Ee][+-]?\d+)?|0x[\da-fA-F]+|0b[01]+)\b/,boolean:/\b(?:F|T|false|true)\b/,punctuation:/<%|%>|[{}[\]()]/,operator:/==|&&?|\|\|?|\*\*?|>>>?|<<|[<>!~]=?|[-/%^]|\+!?|\b(?:AND|NOT|OR)\b/}}return Mp}var Fp,kw;function sH(){if(kw)return Fp;kw=1,Fp=e,e.displayName="wasm",e.aliases=[];function e(t){t.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/}}return Fp}var Pp,ww;function lH(){if(ww)return Pp;ww=1,Pp=e,e.displayName="webIdl",e.aliases=[];function e(t){(function(n){var r=/(?:\B-|\b_|\b)[A-Za-z][\w-]*(?![\w-])/.source,a="(?:"+/\b(?:unsigned\s+)?long\s+long(?![\w-])/.source+"|"+/\b(?:unrestricted|unsigned)\s+[a-z]+(?![\w-])/.source+"|"+/(?!(?:unrestricted|unsigned)\b)/.source+r+/(?:\s*<(?:[^<>]|<[^<>]*>)*>)?/.source+")"+/(?:\s*\?)?/.source,i={};n.languages["web-idl"]={comment:{pattern:/\/\/.*|\/\*[\s\S]*?\*\//,greedy:!0},string:{pattern:/"[^"]*"/,greedy:!0},namespace:{pattern:RegExp(/(\bnamespace\s+)/.source+r),lookbehind:!0},"class-name":[{pattern:/(^|[^\w-])(?:iterable|maplike|setlike)\s*<(?:[^<>]|<[^<>]*>)*>/,lookbehind:!0,inside:i},{pattern:RegExp(/(\b(?:attribute|const|deleter|getter|optional|setter)\s+)/.source+a),lookbehind:!0,inside:i},{pattern:RegExp("("+/\bcallback\s+/.source+r+/\s*=\s*/.source+")"+a),lookbehind:!0,inside:i},{pattern:RegExp(/(\btypedef\b\s*)/.source+a),lookbehind:!0,inside:i},{pattern:RegExp(/(\b(?:callback|dictionary|enum|interface(?:\s+mixin)?)\s+)(?!(?:interface|mixin)\b)/.source+r),lookbehind:!0},{pattern:RegExp(/(:\s*)/.source+r),lookbehind:!0},RegExp(r+/(?=\s+(?:implements|includes)\b)/.source),{pattern:RegExp(/(\b(?:implements|includes)\s+)/.source+r),lookbehind:!0},{pattern:RegExp(a+"(?="+/\s*(?:\.{3}\s*)?/.source+r+/\s*[(),;=]/.source+")"),inside:i}],builtin:/\b(?:ArrayBuffer|BigInt64Array|BigUint64Array|ByteString|DOMString|DataView|Float32Array|Float64Array|FrozenArray|Int16Array|Int32Array|Int8Array|ObservableArray|Promise|USVString|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray)\b/,keyword:[/\b(?:async|attribute|callback|const|constructor|deleter|dictionary|enum|getter|implements|includes|inherit|interface|mixin|namespace|null|optional|or|partial|readonly|required|setter|static|stringifier|typedef|unrestricted)\b/,/\b(?:any|bigint|boolean|byte|double|float|iterable|long|maplike|object|octet|record|sequence|setlike|short|symbol|undefined|unsigned|void)\b/],boolean:/\b(?:false|true)\b/,number:{pattern:/(^|[^\w-])-?(?:0x[0-9a-f]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|NaN|Infinity)(?![\w-])/i,lookbehind:!0},operator:/\.{3}|[=:?<>-]/,punctuation:/[(){}[\].,;]/};for(var o in n.languages["web-idl"])o!=="class-name"&&(i[o]=n.languages["web-idl"][o]);n.languages.webidl=n.languages["web-idl"]})(t)}return Pp}var Up,_w;function uH(){if(_w)return Up;_w=1,Up=e,e.displayName="wiki",e.aliases=[];function e(t){t.languages.wiki=t.languages.extend("markup",{"block-comment":{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0,alias:"comment"},heading:{pattern:/^(=+)[^=\r\n].*?\1/m,inside:{punctuation:/^=+|=+$/,important:/.+/}},emphasis:{pattern:/('{2,5}).+?\1/,inside:{"bold-italic":{pattern:/(''''').+?(?=\1)/,lookbehind:!0,alias:["bold","italic"]},bold:{pattern:/(''')[^'](?:.*?[^'])?(?=\1)/,lookbehind:!0},italic:{pattern:/('')[^'](?:.*?[^'])?(?=\1)/,lookbehind:!0},punctuation:/^''+|''+$/}},hr:{pattern:/^-{4,}/m,alias:"punctuation"},url:[/ISBN +(?:97[89][ -]?)?(?:\d[ -]?){9}[\dx]\b|(?:PMID|RFC) +\d+/i,/\[\[.+?\]\]|\[.+?\]/],variable:[/__[A-Z]+__/,/\{{3}.+?\}{3}/,/\{\{.+?\}\}/],symbol:[/^#redirect/im,/~{3,5}/],"table-tag":{pattern:/((?:^|[|!])[|!])[^|\r\n]+\|(?!\|)/m,lookbehind:!0,inside:{"table-bar":{pattern:/\|$/,alias:"punctuation"},rest:t.languages.markup.tag.inside}},punctuation:/^(?:\{\||\|\}|\|-|[*#:;!|])|\|\||!!/m}),t.languages.insertBefore("wiki","tag",{nowiki:{pattern:/<(nowiki|pre|source)\b[^>]*>[\s\S]*?<\/\1>/i,inside:{tag:{pattern:/<(?:nowiki|pre|source)\b[^>]*>|<\/(?:nowiki|pre|source)>/i,inside:t.languages.markup.tag.inside}}}})}return Up}var Bp,Tw;function cH(){if(Tw)return Bp;Tw=1,Bp=e,e.displayName="wolfram",e.aliases=["mathematica","wl","nb"];function e(t){t.languages.wolfram={comment:/\(\*(?:\(\*(?:[^*]|\*(?!\)))*\*\)|(?!\(\*)[\s\S])*?\*\)/,string:{pattern:/"(?:\\.|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:Abs|AbsArg|Accuracy|Block|Do|For|Function|If|Manipulate|Module|Nest|NestList|None|Return|Switch|Table|Which|While)\b/,context:{pattern:/\b\w+`+\w*/,alias:"class-name"},blank:{pattern:/\b\w+_\b/,alias:"regex"},"global-variable":{pattern:/\$\w+/,alias:"variable"},boolean:/\b(?:False|True)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/\/\.|;|=\.|\^=|\^:=|:=|<<|>>|<\||\|>|:>|\|->|->|<-|@@@|@@|@|\/@|=!=|===|==|=|\+|-|\^|\[\/-+%=\]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},t.languages.mathematica=t.languages.wolfram,t.languages.wl=t.languages.wolfram,t.languages.nb=t.languages.wolfram}return Bp}var $p,Aw;function dH(){if(Aw)return $p;Aw=1,$p=e,e.displayName="wren",e.aliases=[];function e(t){t.languages.wren={comment:[{pattern:/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|\/\*(?:[^*/]|\*(?!\/)|\/(?!\*))*\*\/)*\*\/)*\*\//,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],"triple-quoted-string":{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string"},"string-literal":null,hashbang:{pattern:/^#!\/.+/,greedy:!0,alias:"comment"},attribute:{pattern:/#!?[ \t\u3000]*\w+/,alias:"keyword"},"class-name":[{pattern:/(\bclass\s+)\w+/,lookbehind:!0},/\b[A-Z][a-z\d_]*\b/],constant:/\b[A-Z][A-Z\d_]*\b/,null:{pattern:/\bnull\b/,alias:"keyword"},keyword:/\b(?:as|break|class|construct|continue|else|for|foreign|if|import|in|is|return|static|super|this|var|while)\b/,boolean:/\b(?:false|true)\b/,number:/\b(?:0x[\da-f]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)\b/i,function:/\b[a-z_]\w*(?=\s*[({])/i,operator:/<<|>>|[=!<>]=?|&&|\|\||[-+*/%~^&|?:]|\.{2,3}/,punctuation:/[\[\](){}.,;]/},t.languages.wren["string-literal"]={pattern:/(^|[^\\"])"(?:[^\\"%]|\\[\s\S]|%(?!\()|%\((?:[^()]|\((?:[^()]|\([^)]*\))*\))*\))*"/,lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)%\((?:[^()]|\((?:[^()]|\([^)]*\))*\))*\)/,lookbehind:!0,inside:{expression:{pattern:/^(%\()[\s\S]+(?=\)$)/,lookbehind:!0,inside:t.languages.wren},"interpolation-punctuation":{pattern:/^%\(|\)$/,alias:"punctuation"}}},string:/[\s\S]+/}}}return $p}var zp,Rw;function pH(){if(Rw)return zp;Rw=1,zp=e,e.displayName="xeora",e.aliases=["xeoracube"];function e(t){(function(n){n.languages.xeora=n.languages.extend("markup",{constant:{pattern:/\$(?:DomainContents|PageRenderDuration)\$/,inside:{punctuation:{pattern:/\$/}}},variable:{pattern:/\$@?(?:#+|[-+*~=^])?[\w.]+\$/,inside:{punctuation:{pattern:/[$.]/},operator:{pattern:/#+|[-+*~=^@]/}}},"function-inline":{pattern:/\$F:[-\w.]+\?[-\w.]+(?:,(?:(?:@[-#]*\w+\.[\w+.]\.*)*\|)*(?:(?:[\w+]|[-#*.~^]+[\w+]|=\S)(?:[^$=]|=+[^=])*=*|(?:@[-#]*\w+\.[\w+.]\.*)+(?:(?:[\w+]|[-#*~^][-#*.~^]*[\w+]|=\S)(?:[^$=]|=+[^=])*=*)?)?)?\$/,inside:{variable:{pattern:/(?:[,|])@?(?:#+|[-+*~=^])?[\w.]+/,inside:{punctuation:{pattern:/[,.|]/},operator:{pattern:/#+|[-+*~=^@]/}}},punctuation:{pattern:/\$\w:|[$:?.,|]/}},alias:"function"},"function-block":{pattern:/\$XF:\{[-\w.]+\?[-\w.]+(?:,(?:(?:@[-#]*\w+\.[\w+.]\.*)*\|)*(?:(?:[\w+]|[-#*.~^]+[\w+]|=\S)(?:[^$=]|=+[^=])*=*|(?:@[-#]*\w+\.[\w+.]\.*)+(?:(?:[\w+]|[-#*~^][-#*.~^]*[\w+]|=\S)(?:[^$=]|=+[^=])*=*)?)?)?\}:XF\$/,inside:{punctuation:{pattern:/[$:{}?.,|]/}},alias:"function"},"directive-inline":{pattern:/\$\w(?:#\d+\+?)?(?:\[[-\w.]+\])?:[-\/\w.]+\$/,inside:{punctuation:{pattern:/\$(?:\w:|C(?:\[|#\d))?|[:{[\]]/,inside:{tag:{pattern:/#\d/}}}},alias:"function"},"directive-block-open":{pattern:/\$\w+:\{|\$\w(?:#\d+\+?)?(?:\[[-\w.]+\])?:[-\w.]+:\{(?:![A-Z]+)?/,inside:{punctuation:{pattern:/\$(?:\w:|C(?:\[|#\d))?|[:{[\]]/,inside:{tag:{pattern:/#\d/}}},attribute:{pattern:/![A-Z]+$/,inside:{punctuation:{pattern:/!/}},alias:"keyword"}},alias:"function"},"directive-block-separator":{pattern:/\}:[-\w.]+:\{/,inside:{punctuation:{pattern:/[:{}]/}},alias:"function"},"directive-block-close":{pattern:/\}:[-\w.]+\$/,inside:{punctuation:{pattern:/[:{}$]/}},alias:"function"}}),n.languages.insertBefore("inside","punctuation",{variable:n.languages.xeora["function-inline"].inside.variable},n.languages.xeora["function-block"]),n.languages.xeoracube=n.languages.xeora})(t)}return zp}var Gp,Iw;function fH(){if(Iw)return Gp;Iw=1,Gp=e,e.displayName="xmlDoc",e.aliases=[];function e(t){(function(n){function r(s,l){n.languages[s]&&n.languages.insertBefore(s,"comment",{"doc-comment":l})}var a=n.languages.markup.tag,i={pattern:/\/\/\/.*/,greedy:!0,alias:"comment",inside:{tag:a}},o={pattern:/'''.*/,greedy:!0,alias:"comment",inside:{tag:a}};r("csharp",i),r("fsharp",i),r("vbnet",o)})(t)}return Gp}var qp,Cw;function gH(){if(Cw)return qp;Cw=1,qp=e,e.displayName="xojo",e.aliases=[];function e(t){t.languages.xojo={comment:{pattern:/(?:'|\/\/|Rem\b).+/i,greedy:!0},string:{pattern:/"(?:""|[^"])*"/,greedy:!0},number:[/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?/i,/&[bchou][a-z\d]+/i],directive:{pattern:/#(?:Else|ElseIf|Endif|If|Pragma)\b/i,alias:"property"},keyword:/\b(?:AddHandler|App|Array|As(?:signs)?|Auto|Boolean|Break|By(?:Ref|Val)|Byte|Call|Case|Catch|CFStringRef|CGFloat|Class|Color|Const|Continue|CString|Currency|CurrentMethodName|Declare|Delegate|Dim|Do(?:uble|wnTo)?|Each|Else(?:If)?|End|Enumeration|Event|Exception|Exit|Extends|False|Finally|For|Function|Get|GetTypeInfo|Global|GOTO|If|Implements|In|Inherits|Int(?:8|16|32|64|eger|erface)?|Lib|Loop|Me|Module|Next|Nil|Object|Optional|OSType|ParamArray|Private|Property|Protected|PString|Ptr|Raise(?:Event)?|ReDim|RemoveHandler|Return|Select(?:or)?|Self|Set|Shared|Short|Single|Soft|Static|Step|String|Sub|Super|Text|Then|To|True|Try|Ubound|UInt(?:8|16|32|64|eger)?|Until|Using|Var(?:iant)?|Wend|While|WindowPtr|WString)\b/i,operator:/<[=>]?|>=?|[+\-*\/\\^=]|\b(?:AddressOf|And|Ctype|IsA?|Mod|New|Not|Or|WeakAddressOf|Xor)\b/i,punctuation:/[.,;:()]/}}return qp}var jp,Nw;function mH(){if(Nw)return jp;Nw=1,jp=e,e.displayName="xquery",e.aliases=[];function e(t){(function(n){n.languages.xquery=n.languages.extend("markup",{"xquery-comment":{pattern:/\(:[\s\S]*?:\)/,greedy:!0,alias:"comment"},string:{pattern:/(["'])(?:\1\1|(?!\1)[\s\S])*\1/,greedy:!0},extension:{pattern:/\(#.+?#\)/,alias:"symbol"},variable:/\$[-\w:]+/,axis:{pattern:/(^|[^-])(?:ancestor(?:-or-self)?|attribute|child|descendant(?:-or-self)?|following(?:-sibling)?|parent|preceding(?:-sibling)?|self)(?=::)/,lookbehind:!0,alias:"operator"},"keyword-operator":{pattern:/(^|[^:-])\b(?:and|castable as|div|eq|except|ge|gt|idiv|instance of|intersect|is|le|lt|mod|ne|or|union)\b(?=$|[^:-])/,lookbehind:!0,alias:"operator"},keyword:{pattern:/(^|[^:-])\b(?:as|ascending|at|base-uri|boundary-space|case|cast as|collation|construction|copy-namespaces|declare|default|descending|else|empty (?:greatest|least)|encoding|every|external|for|function|if|import|in|inherit|lax|let|map|module|namespace|no-inherit|no-preserve|option|order(?: by|ed|ing)?|preserve|return|satisfies|schema|some|stable|strict|strip|then|to|treat as|typeswitch|unordered|validate|variable|version|where|xquery)\b(?=$|[^:-])/,lookbehind:!0},function:/[\w-]+(?::[\w-]+)*(?=\s*\()/,"xquery-element":{pattern:/(element\s+)[\w-]+(?::[\w-]+)*/,lookbehind:!0,alias:"tag"},"xquery-attribute":{pattern:/(attribute\s+)[\w-]+(?::[\w-]+)*/,lookbehind:!0,alias:"attr-name"},builtin:{pattern:/(^|[^:-])\b(?:attribute|comment|document|element|processing-instruction|text|xs:(?:ENTITIES|ENTITY|ID|IDREFS?|NCName|NMTOKENS?|NOTATION|Name|QName|anyAtomicType|anyType|anyURI|base64Binary|boolean|byte|date|dateTime|dayTimeDuration|decimal|double|duration|float|gDay|gMonth|gMonthDay|gYear|gYearMonth|hexBinary|int|integer|language|long|negativeInteger|nonNegativeInteger|nonPositiveInteger|normalizedString|positiveInteger|short|string|time|token|unsigned(?:Byte|Int|Long|Short)|untyped(?:Atomic)?|yearMonthDuration))\b(?=$|[^:-])/,lookbehind:!0},number:/\b\d+(?:\.\d+)?(?:E[+-]?\d+)?/,operator:[/[+*=?|@]|\.\.?|:=|!=|<[=<]?|>[=>]?/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}],punctuation:/[[\](){},;:/]/}),n.languages.xquery.tag.pattern=/<\/?(?!\d)[^\s>\/=$<%]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|\{(?!\{)(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\}|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/,n.languages.xquery.tag.inside["attr-value"].pattern=/=(?:("|')(?:\\[\s\S]|\{(?!\{)(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\}|(?!\1)[^\\])*\1|[^\s'">=]+)/,n.languages.xquery.tag.inside["attr-value"].inside.punctuation=/^="|"$/,n.languages.xquery.tag.inside["attr-value"].inside.expression={pattern:/\{(?!\{)(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\}/,inside:n.languages.xquery,alias:"language-xquery"};var r=function(i){return typeof i=="string"?i:typeof i.content=="string"?i.content:i.content.map(r).join("")},a=function(i){for(var o=[],s=0;s0&&o[o.length-1].tagName===r(l.content[0].content[1])&&o.pop():l.content[l.content.length-1].content==="/>"||o.push({tagName:r(l.content[0].content[1]),openedBraces:0}):o.length>0&&l.type==="punctuation"&&l.content==="{"&&(!i[s+1]||i[s+1].type!=="punctuation"||i[s+1].content!=="{")&&(!i[s-1]||i[s-1].type!=="plain-text"||i[s-1].content!=="{")?o[o.length-1].openedBraces++:o.length>0&&o[o.length-1].openedBraces>0&&l.type==="punctuation"&&l.content==="}"?o[o.length-1].openedBraces--:l.type!=="comment"&&(u=!0)),(u||typeof l=="string")&&o.length>0&&o[o.length-1].openedBraces===0){var d=r(l);s0&&(typeof i[s-1]=="string"||i[s-1].type==="plain-text")&&(d=r(i[s-1])+d,i.splice(s-1,1),s--),/^\s+$/.test(d)?i[s]=d:i[s]=new n.Token("plain-text",d,null,d)}l.content&&typeof l.content!="string"&&a(l.content)}};n.hooks.add("after-tokenize",function(i){i.language==="xquery"&&a(i.tokens)})})(t)}return jp}var Hp,xw;function hH(){if(xw)return Hp;xw=1,Hp=e,e.displayName="yang",e.aliases=[];function e(t){t.languages.yang={comment:/\/\*[\s\S]*?\*\/|\/\/.*/,string:{pattern:/"(?:[^\\"]|\\.)*"|'[^']*'/,greedy:!0},keyword:{pattern:/(^|[{};\r\n][ \t]*)[a-z_][\w.-]*/i,lookbehind:!0},namespace:{pattern:/(\s)[a-z_][\w.-]*(?=:)/i,lookbehind:!0},boolean:/\b(?:false|true)\b/,operator:/\+/,punctuation:/[{};:]/}}return Hp}var Vp,Ow;function bH(){if(Ow)return Vp;Ow=1,Vp=e,e.displayName="zig",e.aliases=[];function e(t){(function(n){function r(d){return function(){return d}}var a=/\b(?:align|allowzero|and|anyframe|anytype|asm|async|await|break|cancel|catch|comptime|const|continue|defer|else|enum|errdefer|error|export|extern|fn|for|if|inline|linksection|nakedcc|noalias|nosuspend|null|or|orelse|packed|promise|pub|resume|return|stdcallcc|struct|suspend|switch|test|threadlocal|try|undefined|union|unreachable|usingnamespace|var|volatile|while)\b/,i="\\b(?!"+a.source+")(?!\\d)\\w+\\b",o=/align\s*\((?:[^()]|\([^()]*\))*\)/.source,s=/(?:\?|\bpromise->|(?:\[[^[\]]*\]|\*(?!\*)|\*\*)(?:\s*|\s*const\b|\s*volatile\b|\s*allowzero\b)*)/.source.replace(//g,r(o)),l=/(?:\bpromise\b|(?:\berror\.)?(?:\.)*(?!\s+))/.source.replace(//g,r(i)),u="(?!\\s)(?:!?\\s*(?:"+s+"\\s*)*"+l+")+";n.languages.zig={comment:[{pattern:/\/\/[/!].*/,alias:"doc-comment"},/\/{2}.*/],string:[{pattern:/(^|[^\\@])c?"(?:[^"\\\r\n]|\\.)*"/,lookbehind:!0,greedy:!0},{pattern:/([\r\n])([ \t]+c?\\{2}).*(?:(?:\r\n?|\n)\2.*)*/,lookbehind:!0,greedy:!0}],char:{pattern:/(^|[^\\])'(?:[^'\\\r\n]|[\uD800-\uDFFF]{2}|\\(?:.|x[a-fA-F\d]{2}|u\{[a-fA-F\d]{1,6}\}))'/,lookbehind:!0,greedy:!0},builtin:/\B@(?!\d)\w+(?=\s*\()/,label:{pattern:/(\b(?:break|continue)\s*:\s*)\w+\b|\b(?!\d)\w+\b(?=\s*:\s*(?:\{|while\b))/,lookbehind:!0},"class-name":[/\b(?!\d)\w+(?=\s*=\s*(?:(?:extern|packed)\s+)?(?:enum|struct|union)\s*[({])/,{pattern:RegExp(/(:\s*)(?=\s*(?:\s*)?[=;,)])|(?=\s*(?:\s*)?\{)/.source.replace(//g,r(u)).replace(//g,r(o))),lookbehind:!0,inside:null},{pattern:RegExp(/(\)\s*)(?=\s*(?:\s*)?;)/.source.replace(//g,r(u)).replace(//g,r(o))),lookbehind:!0,inside:null}],"builtin-type":{pattern:/\b(?:anyerror|bool|c_u?(?:int|long|longlong|short)|c_longdouble|c_void|comptime_(?:float|int)|f(?:16|32|64|128)|[iu](?:8|16|32|64|128|size)|noreturn|type|void)\b/,alias:"keyword"},keyword:a,function:/\b(?!\d)\w+(?=\s*\()/,number:/\b(?:0b[01]+|0o[0-7]+|0x[a-fA-F\d]+(?:\.[a-fA-F\d]*)?(?:[pP][+-]?[a-fA-F\d]+)?|\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)\b/,boolean:/\b(?:false|true)\b/,operator:/\.[*?]|\.{2,3}|[-=]>|\*\*|\+\+|\|\||(?:<<|>>|[-+*]%|[-+*/%^&|<>!=])=?|[?~]/,punctuation:/[.:,;(){}[\]]/},n.languages.zig["class-name"].forEach(function(d){d.inside===null&&(d.inside=n.languages.zig)})})(t)}return Vp}var w=T$,yH=w;w.register(F$());w.register(P$());w.register(U$());w.register(B$());w.register($$());w.register(z$());w.register(G$());w.register(q$());w.register(j$());w.register(H$());w.register(V$());w.register(W$());w.register(Y$());w.register(K$());w.register(X$());w.register(Z$());w.register(Q$());w.register(J$());w.register(ez());w.register(tz());w.register(nz());w.register(rz());w.register(GR());w.register(qR());w.register(az());w.register(iz());w.register(oz());w.register(sz());w.register(lz());w.register(uz());w.register(cz());w.register(dz());w.register(pz());w.register(fz());w.register(tr());w.register(gz());w.register(mz());w.register(hz());w.register(bz());w.register(yz());w.register(Ez());w.register(Sz());w.register(vz());w.register(kz());w.register($m());w.register(wz());w.register(Xo());w.register(_z());w.register(Tz());w.register(Az());w.register(Rz());w.register(Iz());w.register(Cz());w.register(Nz());w.register(xz());w.register(Oz());w.register(Lz());w.register(Dz());w.register(Mz());w.register(Fz());w.register(Pz());w.register(Uz());w.register(Bz());w.register($z());w.register(zz());w.register(Gz());w.register(qz());w.register(jz());w.register(Hz());w.register(Vz());w.register(Wz());w.register(Yz());w.register(Kz());w.register(Xz());w.register(Zz());w.register(Qz());w.register(Jz());w.register(eG());w.register(tG());w.register(nG());w.register(rG());w.register(aG());w.register(iG());w.register(oG());w.register(sG());w.register(lG());w.register(uG());w.register(cG());w.register(dG());w.register(pG());w.register(fG());w.register(gG());w.register(mG());w.register(hG());w.register(zm());w.register(bG());w.register(yG());w.register(EG());w.register(SG());w.register(vG());w.register(kG());w.register(wG());w.register(_G());w.register(TG());w.register(AG());w.register(RG());w.register(IG());w.register(CG());w.register(NG());w.register(xG());w.register(OG());w.register(LG());w.register(Gm());w.register(DG());w.register(Qo());w.register(MG());w.register(FG());w.register(PG());w.register(UG());w.register(BG());w.register($G());w.register(zG());w.register(jm());w.register(GG());w.register(qG());w.register(jG());w.register(HR());w.register(HG());w.register(VG());w.register(WG());w.register(YG());w.register(KG());w.register(XG());w.register(ZG());w.register(QG());w.register(JG());w.register(eq());w.register(tq());w.register(nq());w.register(rq());w.register(aq());w.register(iq());w.register(oq());w.register(jR());w.register(sq());w.register(lq());w.register(uq());w.register(nt());w.register(cq());w.register(dq());w.register(pq());w.register(fq());w.register(gq());w.register(mq());w.register(hq());w.register(bq());w.register(yq());w.register(Eq());w.register(Sq());w.register(vq());w.register(kq());w.register(wq());w.register(_q());w.register(Tq());w.register(Aq());w.register(Rq());w.register(Iq());w.register(Cq());w.register(Nq());w.register(xq());w.register(Oq());w.register(Lq());w.register(Dq());w.register(Mq());w.register(Fq());w.register(Pq());w.register(Uq());w.register(Bq());w.register($q());w.register(zq());w.register(Jo());w.register(Gq());w.register(qq());w.register(jq());w.register(Hq());w.register(Vq());w.register(Wq());w.register(Yq());w.register(Kq());w.register(Xq());w.register(Zq());w.register(Qq());w.register(Jq());w.register(ej());w.register(tj());w.register(nj());w.register(rj());w.register(aj());w.register(ij());w.register(oj());w.register(sj());w.register(lj());w.register(uj());w.register(cj());w.register(dj());w.register(pj());w.register(fj());w.register(gj());w.register(mj());w.register(hj());w.register(bj());w.register(Zo());w.register(yj());w.register(Ej());w.register(Sj());w.register(vj());w.register(Hm());w.register(kj());w.register(wj());w.register(_j());w.register(Tj());w.register(Aj());w.register(Rj());w.register(Ij());w.register(Cj());w.register(Nj());w.register(xj());w.register(Oj());w.register(Lj());w.register(Bm());w.register(Dj());w.register(Mj());w.register(Fj());w.register(Pj());w.register(Uj());w.register(Bj());w.register(Vm());w.register($j());w.register(zj());w.register(Gj());w.register(qj());w.register(jj());w.register(Hj());w.register(Vj());w.register(Wj());w.register(VR());w.register(Yj());w.register(qm());w.register(Kj());w.register(Xj());w.register(Zj());w.register(Qj());w.register(Jj());w.register(eH());w.register(WR());w.register(tH());w.register(nH());w.register(rH());w.register(aH());w.register(iH());w.register(oH());w.register(sH());w.register(lH());w.register(uH());w.register(cH());w.register(dH());w.register(pH());w.register(fH());w.register(gH());w.register(mH());w.register(YR());w.register(hH());w.register(bH());const EH=Wa(yH);var KR=mP(EH,M$);KR.supportedLanguages=hP;const SH={'code[class*="language-"]':{background:"hsl(220, 13%, 18%)",color:"hsl(220, 14%, 71%)",textShadow:"0 1px rgba(0, 0, 0, 0.3)",fontFamily:'"Fira Code", "Fira Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace',direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",MozTabSize:"2",OTabSize:"2",tabSize:"2",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{background:"hsl(220, 13%, 18%)",color:"hsl(220, 14%, 71%)",textShadow:"0 1px rgba(0, 0, 0, 0.3)",fontFamily:'"Fira Code", "Fira Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace',direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",MozTabSize:"2",OTabSize:"2",tabSize:"2",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:"0.5em 0",overflow:"auto",borderRadius:"0.3em"},'code[class*="language-"]::-moz-selection':{background:"hsl(220, 13%, 28%)",color:"inherit",textShadow:"none"},'code[class*="language-"] *::-moz-selection':{background:"hsl(220, 13%, 28%)",color:"inherit",textShadow:"none"},'pre[class*="language-"] *::-moz-selection':{background:"hsl(220, 13%, 28%)",color:"inherit",textShadow:"none"},'code[class*="language-"]::selection':{background:"hsl(220, 13%, 28%)",color:"inherit",textShadow:"none"},'code[class*="language-"] *::selection':{background:"hsl(220, 13%, 28%)",color:"inherit",textShadow:"none"},'pre[class*="language-"] *::selection':{background:"hsl(220, 13%, 28%)",color:"inherit",textShadow:"none"},':not(pre) > code[class*="language-"]':{padding:"0.2em 0.3em",borderRadius:"0.3em",whiteSpace:"normal"},comment:{color:"hsl(220, 10%, 40%)",fontStyle:"italic"},prolog:{color:"hsl(220, 10%, 40%)"},cdata:{color:"hsl(220, 10%, 40%)"},doctype:{color:"hsl(220, 14%, 71%)"},punctuation:{color:"hsl(220, 14%, 71%)"},entity:{color:"hsl(220, 14%, 71%)",cursor:"help"},"attr-name":{color:"hsl(29, 54%, 61%)"},"class-name":{color:"hsl(29, 54%, 61%)"},boolean:{color:"hsl(29, 54%, 61%)"},constant:{color:"hsl(29, 54%, 61%)"},number:{color:"hsl(29, 54%, 61%)"},atrule:{color:"hsl(29, 54%, 61%)"},keyword:{color:"hsl(286, 60%, 67%)"},property:{color:"hsl(355, 65%, 65%)"},tag:{color:"hsl(355, 65%, 65%)"},symbol:{color:"hsl(355, 65%, 65%)"},deleted:{color:"hsl(355, 65%, 65%)"},important:{color:"hsl(355, 65%, 65%)"},selector:{color:"hsl(95, 38%, 62%)"},string:{color:"hsl(95, 38%, 62%)"},char:{color:"hsl(95, 38%, 62%)"},builtin:{color:"hsl(95, 38%, 62%)"},inserted:{color:"hsl(95, 38%, 62%)"},regex:{color:"hsl(95, 38%, 62%)"},"attr-value":{color:"hsl(95, 38%, 62%)"},"attr-value > .token.punctuation":{color:"hsl(95, 38%, 62%)"},variable:{color:"hsl(207, 82%, 66%)"},operator:{color:"hsl(207, 82%, 66%)"},function:{color:"hsl(207, 82%, 66%)"},url:{color:"hsl(187, 47%, 55%)"},"attr-value > .token.punctuation.attr-equals":{color:"hsl(220, 14%, 71%)"},"special-attr > .token.attr-value > .token.value.css":{color:"hsl(220, 14%, 71%)"},".language-css .token.selector":{color:"hsl(355, 65%, 65%)"},".language-css .token.property":{color:"hsl(220, 14%, 71%)"},".language-css .token.function":{color:"hsl(187, 47%, 55%)"},".language-css .token.url > .token.function":{color:"hsl(187, 47%, 55%)"},".language-css .token.url > .token.string.url":{color:"hsl(95, 38%, 62%)"},".language-css .token.important":{color:"hsl(286, 60%, 67%)"},".language-css .token.atrule .token.rule":{color:"hsl(286, 60%, 67%)"},".language-javascript .token.operator":{color:"hsl(286, 60%, 67%)"},".language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation":{color:"hsl(5, 48%, 51%)"},".language-json .token.operator":{color:"hsl(220, 14%, 71%)"},".language-json .token.null.keyword":{color:"hsl(29, 54%, 61%)"},".language-markdown .token.url":{color:"hsl(220, 14%, 71%)"},".language-markdown .token.url > .token.operator":{color:"hsl(220, 14%, 71%)"},".language-markdown .token.url-reference.url > .token.string":{color:"hsl(220, 14%, 71%)"},".language-markdown .token.url > .token.content":{color:"hsl(207, 82%, 66%)"},".language-markdown .token.url > .token.url":{color:"hsl(187, 47%, 55%)"},".language-markdown .token.url-reference.url":{color:"hsl(187, 47%, 55%)"},".language-markdown .token.blockquote.punctuation":{color:"hsl(220, 10%, 40%)",fontStyle:"italic"},".language-markdown .token.hr.punctuation":{color:"hsl(220, 10%, 40%)",fontStyle:"italic"},".language-markdown .token.code-snippet":{color:"hsl(95, 38%, 62%)"},".language-markdown .token.bold .token.content":{color:"hsl(29, 54%, 61%)"},".language-markdown .token.italic .token.content":{color:"hsl(286, 60%, 67%)"},".language-markdown .token.strike .token.content":{color:"hsl(355, 65%, 65%)"},".language-markdown .token.strike .token.punctuation":{color:"hsl(355, 65%, 65%)"},".language-markdown .token.list.punctuation":{color:"hsl(355, 65%, 65%)"},".language-markdown .token.title.important > .token.punctuation":{color:"hsl(355, 65%, 65%)"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},namespace:{Opacity:"0.8"},"token.tab:not(:empty):before":{color:"hsla(220, 14%, 71%, 0.15)",textShadow:"none"},"token.cr:before":{color:"hsla(220, 14%, 71%, 0.15)",textShadow:"none"},"token.lf:before":{color:"hsla(220, 14%, 71%, 0.15)",textShadow:"none"},"token.space:before":{color:"hsla(220, 14%, 71%, 0.15)",textShadow:"none"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item":{marginRight:"0.4em"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button":{background:"hsl(220, 13%, 26%)",color:"hsl(220, 9%, 55%)",padding:"0.1em 0.4em",borderRadius:"0.3em"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a":{background:"hsl(220, 13%, 26%)",color:"hsl(220, 9%, 55%)",padding:"0.1em 0.4em",borderRadius:"0.3em"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span":{background:"hsl(220, 13%, 26%)",color:"hsl(220, 9%, 55%)",padding:"0.1em 0.4em",borderRadius:"0.3em"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover":{background:"hsl(220, 13%, 28%)",color:"hsl(220, 14%, 71%)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus":{background:"hsl(220, 13%, 28%)",color:"hsl(220, 14%, 71%)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover":{background:"hsl(220, 13%, 28%)",color:"hsl(220, 14%, 71%)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus":{background:"hsl(220, 13%, 28%)",color:"hsl(220, 14%, 71%)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover":{background:"hsl(220, 13%, 28%)",color:"hsl(220, 14%, 71%)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus":{background:"hsl(220, 13%, 28%)",color:"hsl(220, 14%, 71%)"},".line-highlight.line-highlight":{background:"hsla(220, 100%, 80%, 0.04)"},".line-highlight.line-highlight:before":{background:"hsl(220, 13%, 26%)",color:"hsl(220, 14%, 71%)",padding:"0.1em 0.6em",borderRadius:"0.3em",boxShadow:"0 2px 0 0 rgba(0, 0, 0, 0.2)"},".line-highlight.line-highlight[data-end]:after":{background:"hsl(220, 13%, 26%)",color:"hsl(220, 14%, 71%)",padding:"0.1em 0.6em",borderRadius:"0.3em",boxShadow:"0 2px 0 0 rgba(0, 0, 0, 0.2)"},"pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows > span:hover:before":{backgroundColor:"hsla(220, 100%, 80%, 0.04)"},".line-numbers.line-numbers .line-numbers-rows":{borderRightColor:"hsla(220, 14%, 71%, 0.15)"},".command-line .command-line-prompt":{borderRightColor:"hsla(220, 14%, 71%, 0.15)"},".line-numbers .line-numbers-rows > span:before":{color:"hsl(220, 14%, 45%)"},".command-line .command-line-prompt > span:before":{color:"hsl(220, 14%, 45%)"},".rainbow-braces .token.token.punctuation.brace-level-1":{color:"hsl(355, 65%, 65%)"},".rainbow-braces .token.token.punctuation.brace-level-5":{color:"hsl(355, 65%, 65%)"},".rainbow-braces .token.token.punctuation.brace-level-9":{color:"hsl(355, 65%, 65%)"},".rainbow-braces .token.token.punctuation.brace-level-2":{color:"hsl(95, 38%, 62%)"},".rainbow-braces .token.token.punctuation.brace-level-6":{color:"hsl(95, 38%, 62%)"},".rainbow-braces .token.token.punctuation.brace-level-10":{color:"hsl(95, 38%, 62%)"},".rainbow-braces .token.token.punctuation.brace-level-3":{color:"hsl(207, 82%, 66%)"},".rainbow-braces .token.token.punctuation.brace-level-7":{color:"hsl(207, 82%, 66%)"},".rainbow-braces .token.token.punctuation.brace-level-11":{color:"hsl(207, 82%, 66%)"},".rainbow-braces .token.token.punctuation.brace-level-4":{color:"hsl(286, 60%, 67%)"},".rainbow-braces .token.token.punctuation.brace-level-8":{color:"hsl(286, 60%, 67%)"},".rainbow-braces .token.token.punctuation.brace-level-12":{color:"hsl(286, 60%, 67%)"},"pre.diff-highlight > code .token.token.deleted:not(.prefix)":{backgroundColor:"hsla(353, 100%, 66%, 0.15)"},"pre > code.diff-highlight .token.token.deleted:not(.prefix)":{backgroundColor:"hsla(353, 100%, 66%, 0.15)"},"pre.diff-highlight > code .token.token.deleted:not(.prefix)::-moz-selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre.diff-highlight > code .token.token.deleted:not(.prefix) *::-moz-selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre > code.diff-highlight .token.token.deleted:not(.prefix)::-moz-selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre > code.diff-highlight .token.token.deleted:not(.prefix) *::-moz-selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre.diff-highlight > code .token.token.deleted:not(.prefix)::selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre.diff-highlight > code .token.token.deleted:not(.prefix) *::selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre > code.diff-highlight .token.token.deleted:not(.prefix)::selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre > code.diff-highlight .token.token.deleted:not(.prefix) *::selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre.diff-highlight > code .token.token.inserted:not(.prefix)":{backgroundColor:"hsla(137, 100%, 55%, 0.15)"},"pre > code.diff-highlight .token.token.inserted:not(.prefix)":{backgroundColor:"hsla(137, 100%, 55%, 0.15)"},"pre.diff-highlight > code .token.token.inserted:not(.prefix)::-moz-selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre.diff-highlight > code .token.token.inserted:not(.prefix) *::-moz-selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre > code.diff-highlight .token.token.inserted:not(.prefix)::-moz-selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre > code.diff-highlight .token.token.inserted:not(.prefix) *::-moz-selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre.diff-highlight > code .token.token.inserted:not(.prefix)::selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre.diff-highlight > code .token.token.inserted:not(.prefix) *::selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre > code.diff-highlight .token.token.inserted:not(.prefix)::selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre > code.diff-highlight .token.token.inserted:not(.prefix) *::selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},".prism-previewer.prism-previewer:before":{borderColor:"hsl(224, 13%, 17%)"},".prism-previewer-gradient.prism-previewer-gradient div":{borderColor:"hsl(224, 13%, 17%)",borderRadius:"0.3em"},".prism-previewer-color.prism-previewer-color:before":{borderRadius:"0.3em"},".prism-previewer-easing.prism-previewer-easing:before":{borderRadius:"0.3em"},".prism-previewer.prism-previewer:after":{borderTopColor:"hsl(224, 13%, 17%)"},".prism-previewer-flipped.prism-previewer-flipped.after":{borderBottomColor:"hsl(224, 13%, 17%)"},".prism-previewer-angle.prism-previewer-angle:before":{background:"hsl(219, 13%, 22%)"},".prism-previewer-time.prism-previewer-time:before":{background:"hsl(219, 13%, 22%)"},".prism-previewer-easing.prism-previewer-easing":{background:"hsl(219, 13%, 22%)"},".prism-previewer-angle.prism-previewer-angle circle":{stroke:"hsl(220, 14%, 71%)",strokeOpacity:"1"},".prism-previewer-time.prism-previewer-time circle":{stroke:"hsl(220, 14%, 71%)",strokeOpacity:"1"},".prism-previewer-easing.prism-previewer-easing circle":{stroke:"hsl(220, 14%, 71%)",fill:"transparent"},".prism-previewer-easing.prism-previewer-easing path":{stroke:"hsl(220, 14%, 71%)"},".prism-previewer-easing.prism-previewer-easing line":{stroke:"hsl(220, 14%, 71%)"}},XR=({content:e})=>L.jsx(L0,{remarkPlugins:[VF],components:{code({className:t,children:n,...r}){const a=/language-(\w+)/.exec(t||""),i=String(n).replace(/\n$/,"");return a?L.jsx(KR,{style:SH,language:a[1],PreTag:"div",children:i}):L.jsx("code",{className:t,...r,children:n})}},children:e}),vH=({thinking:e})=>{const[t,n]=W.useState(!1);return e?L.jsxs("div",{className:"chat-msg__thinking",children:[L.jsxs("button",{className:"chat-msg__thinking-toggle",onClick:()=>n(r=>!r),children:[t?"▾":"▸"," Thinking..."]}),t&&L.jsx("div",{className:"chat-msg__thinking-content",children:L.jsx(XR,{content:e})})]}):null},kH=({toolCalls:e})=>!e||e.length===0?null:L.jsx("div",{className:"chat-msg__tools",children:e.map((t,n)=>L.jsxs("span",{className:`chat-msg__tool-badge chat-msg__tool-badge--${t.status}`,children:[t.status==="running"?"⚙ ":t.status==="done"?"✓ ":"✗ ",t.name]},n))}),wH=({sessionMgr:e,sessionId:t,onBack:n})=>{const{getMessages:r,setMessages:a,appendMessage:i,updateLastMessageFull:o,isStreaming:s,setIsStreaming:l,setError:u}=am(),d=r(t),[c,f]=W.useState(""),p=W.useRef(null),h=W.useRef({thinking:"",text:"",toolCalls:[]}),[y,T]=W.useState(!1),[b,g]=W.useState(!0),m=W.useRef(null),v=W.useRef(null),_=W.useCallback(async k=>{if(!(y||!b&&k))try{T(!0);const I=await e.getSessionMessages(t,50,k);if(k){const D=r(t);a(t,[...I.messages,...D])}else a(t,I.messages);g(I.has_more)}catch(I){u(I.message)}finally{T(!1)}},[e,t,a,u,r,y,b]),E=W.useCallback(()=>{const k=v.current;if(k&&k.scrollTop<100&&b&&!y){const I=r(t);I.length>0&&_(I[0].id)}},[b,y,r,t,_]);W.useEffect(()=>{e.subscribeSession(t).catch(console.error),_();const k=e.onStreamEvent(I=>{var q,$,z,H,Y;if(I.session_id!==t)return;const D=I.event_type;if(D==="stream_start"){h.current={thinking:"",text:"",toolCalls:[]},l(!0),i(t,{id:`stream-${Date.now()}`,role:"assistant",content:"",timestamp:new Date().toISOString(),metadata:{thinking:"",toolCalls:[]}});const x=(q=I.payload)==null?void 0:q.user_input;if(x&&x.trim()){const S=[...r(t)].reverse().find(P=>P.role==="user");if(!S||S.content!==x.trim()){const P=r(t),G={id:`user-remote-${Date.now()}`,role:"user",content:x.trim(),timestamp:new Date().toISOString()};a(t,[...P.slice(0,-1),G,P[P.length-1]])}}}else if(D==="text_chunk")h.current.text+=(($=I.payload)==null?void 0:$.text)||"",o(t,h.current.text,{thinking:h.current.thinking,toolCalls:h.current.toolCalls});else if(D==="thinking_chunk")h.current.thinking+=((z=I.payload)==null?void 0:z.content)||"",o(t,h.current.text,{thinking:h.current.thinking,toolCalls:h.current.toolCalls});else if(D==="tool_event"){const x=(H=I.payload)==null?void 0:H.tool_event;(x==null?void 0:x.event_type)==="Started"?(h.current.toolCalls=[...h.current.toolCalls,{name:x.tool_name,status:"running"}],o(t,h.current.text,{thinking:h.current.thinking,toolCalls:h.current.toolCalls})):(x==null?void 0:x.event_type)==="Completed"||(x==null?void 0:x.event_type)==="Succeeded"?(h.current.toolCalls=h.current.toolCalls.map(M=>M.name===x.tool_name&&M.status==="running"?{...M,status:"done"}:M),o(t,h.current.text,{thinking:h.current.thinking,toolCalls:h.current.toolCalls})):(x==null?void 0:x.event_type)==="Failed"&&(h.current.toolCalls=h.current.toolCalls.map(M=>M.name===x.tool_name&&M.status==="running"?{...M,status:"error"}:M),o(t,h.current.text,{thinking:h.current.thinking,toolCalls:h.current.toolCalls}))}else D==="stream_end"?(l(!1),h.current={thinking:"",text:"",toolCalls:[]}):D==="stream_error"?(l(!1),u(((Y=I.payload)==null?void 0:Y.error)||"Stream error"),h.current={thinking:"",text:"",toolCalls:[]}):D==="stream_cancelled"&&(l(!1),h.current={thinking:"",text:"",toolCalls:[]})});return()=>{k(),e.unsubscribeSession(t).catch(console.error)}},[t,e,l,i,o,u,a,r]),W.useEffect(()=>{var k;y||(k=m.current)==null||k.scrollIntoView({behavior:"smooth"})},[d,y]);const R=W.useCallback(async()=>{const k=c.trim();if(!(!k||s)){f(""),i(t,{id:`user-${Date.now()}`,role:"user",content:k,timestamp:new Date().toISOString()});try{await e.sendMessage(t,k)}catch(I){u(I.message)}}},[c,s,t,e,i,u]),C=k=>{k.key==="Enter"&&!k.shiftKey&&(k.preventDefault(),R())},N=async()=>{try{await e.cancelTask(t)}catch{}};return L.jsxs("div",{className:"chat-page",children:[L.jsxs("div",{className:"chat-page__header",children:[L.jsx("button",{className:"chat-page__back",onClick:n,children:"←"}),L.jsx("span",{className:"chat-page__title",children:"Session"}),s&&L.jsx("button",{className:"chat-page__cancel",onClick:N,children:"Stop"})]}),L.jsxs("div",{className:"chat-page__messages",ref:v,onScroll:E,children:[y&&L.jsx("div",{className:"chat-page__loading",children:"Loading older messages..."}),d.map(k=>{var q,$;if(k.role==="system"||k.role==="tool")return null;const I=((q=k.metadata)==null?void 0:q.thinking)||"",D=(($=k.metadata)==null?void 0:$.toolCalls)||[];return L.jsxs("div",{className:`chat-msg chat-msg--${k.role}`,children:[L.jsx("div",{className:"chat-msg__role",children:k.role==="user"?"You":"BitFun"}),L.jsxs("div",{className:"chat-msg__content",children:[k.role==="assistant"&&L.jsxs(L.Fragment,{children:[L.jsx(vH,{thinking:I}),L.jsx(kH,{toolCalls:D})]}),k.content&&L.jsx(XR,{content:k.content}),k.role==="assistant"&&s&&!k.content&&!I&&L.jsx("span",{className:"chat-msg__typing",children:"●●●"})]})]},k.id)}),L.jsx("div",{ref:m})]}),L.jsxs("div",{className:"chat-page__input-bar",children:[L.jsx("textarea",{ref:p,className:"chat-page__input",placeholder:"Type a message...",value:c,onChange:k=>f(k.target.value),onKeyDown:C,rows:1}),L.jsx("button",{className:"chat-page__send",onClick:R,disabled:!c.trim()||s,children:"Send"})]})]})},_H=()=>{const[e,t]=W.useState("pairing"),[n,r]=W.useState(null),a=W.useRef(null),i=W.useRef(null),o=W.useCallback((c,f)=>{a.current=c,i.current=f,c.setMessageHandler(p=>{f.handleMessage(p)}),t("sessions")},[]),s=W.useCallback(()=>{t("workspace")},[]),l=W.useCallback(()=>{t("sessions")},[]),u=W.useCallback(c=>{r(c),t("chat")},[]),d=W.useCallback(()=>{r(null),t("sessions")},[]);return L.jsxs("div",{className:"mobile-app",children:[e==="pairing"&&L.jsx(Zx,{onPaired:o}),e==="workspace"&&i.current&&L.jsx(Qx,{sessionMgr:i.current,onReady:l}),e==="sessions"&&i.current&&L.jsx(tO,{sessionMgr:i.current,onSelectSession:u,onOpenWorkspace:s}),e==="chat"&&i.current&&n&&L.jsx(wH,{sessionMgr:i.current,sessionId:n,onBack:d})]})};Wp.createRoot(document.getElementById("root")).render(L.jsx(Ft.StrictMode,{children:L.jsx(_H,{})})); diff --git a/src/apps/relay-server/static/assets/index-rYAMdehH.js b/src/apps/relay-server/static/assets/index-rYAMdehH.js new file mode 100644 index 0000000000..e6a03fabc0 --- /dev/null +++ b/src/apps/relay-server/static/assets/index-rYAMdehH.js @@ -0,0 +1,9 @@ +(function(){const a=document.createElement("link").relList;if(a&&a.supports&&a.supports("modulepreload"))return;for(const p of document.querySelectorAll('link[rel="modulepreload"]'))f(p);new MutationObserver(p=>{for(const d of p)if(d.type==="childList")for(const y of d.addedNodes)y.tagName==="LINK"&&y.rel==="modulepreload"&&f(y)}).observe(document,{childList:!0,subtree:!0});function l(p){const d={};return p.integrity&&(d.integrity=p.integrity),p.referrerPolicy&&(d.referrerPolicy=p.referrerPolicy),p.crossOrigin==="use-credentials"?d.credentials="include":p.crossOrigin==="anonymous"?d.credentials="omit":d.credentials="same-origin",d}function f(p){if(p.ep)return;p.ep=!0;const d=l(p);fetch(p.href,d)}})();let ri="dark";try{const i=localStorage.getItem("bitfun-mobile-theme");(i==="dark"||i==="light")&&(ri=i)}catch{window.matchMedia?.("(prefers-color-scheme: light)").matches&&(ri="light")}document.documentElement.setAttribute("data-theme",ri);document.documentElement.style.colorScheme=ri;var vg=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Ld(i){return i&&i.__esModule&&Object.prototype.hasOwnProperty.call(i,"default")?i.default:i}var Kl={exports:{}},Is={},bl={exports:{}},he={};var Kc;function qp(){if(Kc)return he;Kc=1;var i=Symbol.for("react.element"),a=Symbol.for("react.portal"),l=Symbol.for("react.fragment"),f=Symbol.for("react.strict_mode"),p=Symbol.for("react.profiler"),d=Symbol.for("react.provider"),y=Symbol.for("react.context"),w=Symbol.for("react.forward_ref"),S=Symbol.for("react.suspense"),I=Symbol.for("react.memo"),E=Symbol.for("react.lazy"),j=Symbol.iterator;function B(v){return v===null||typeof v!="object"?null:(v=j&&v[j]||v["@@iterator"],typeof v=="function"?v:null)}var U={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Q=Object.assign,W={};function O(v,T,K){this.props=v,this.context=T,this.refs=W,this.updater=K||U}O.prototype.isReactComponent={},O.prototype.setState=function(v,T){if(typeof v!="object"&&typeof v!="function"&&v!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,v,T,"setState")},O.prototype.forceUpdate=function(v){this.updater.enqueueForceUpdate(this,v,"forceUpdate")};function ne(){}ne.prototype=O.prototype;function X(v,T,K){this.props=v,this.context=T,this.refs=W,this.updater=K||U}var H=X.prototype=new ne;H.constructor=X,Q(H,O.prototype),H.isPureReactComponent=!0;var ee=Array.isArray,oe=Object.prototype.hasOwnProperty,Se={current:null},xe={key:!0,ref:!0,__self:!0,__source:!0};function Te(v,T,K){var te,ie={},le=null,pe=null;if(T!=null)for(te in T.ref!==void 0&&(pe=T.ref),T.key!==void 0&&(le=""+T.key),T)oe.call(T,te)&&!xe.hasOwnProperty(te)&&(ie[te]=T[te]);var ce=arguments.length-2;if(ce===1)ie.children=K;else if(1>>1,T=P[v];if(0>>1;vp(ie,M))lep(pe,ie)?(P[v]=pe,P[le]=M,v=le):(P[v]=ie,P[te]=M,v=te);else if(lep(pe,M))P[v]=pe,P[le]=M,v=le;else break e}}return A}function p(P,A){var M=P.sortIndex-A.sortIndex;return M!==0?M:P.id-A.id}if(typeof performance=="object"&&typeof performance.now=="function"){var d=performance;i.unstable_now=function(){return d.now()}}else{var y=Date,w=y.now();i.unstable_now=function(){return y.now()-w}}var S=[],I=[],E=1,j=null,B=3,U=!1,Q=!1,W=!1,O=typeof setTimeout=="function"?setTimeout:null,ne=typeof clearTimeout=="function"?clearTimeout:null,X=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function H(P){for(var A=l(I);A!==null;){if(A.callback===null)f(I);else if(A.startTime<=P)f(I),A.sortIndex=A.expirationTime,a(S,A);else break;A=l(I)}}function ee(P){if(W=!1,H(P),!Q)if(l(S)!==null)Q=!0,ye(oe);else{var A=l(I);A!==null&&ve(ee,A.startTime-P)}}function oe(P,A){Q=!1,W&&(W=!1,ne(Te),Te=-1),U=!0;var M=B;try{for(H(A),j=l(S);j!==null&&(!(j.expirationTime>A)||P&&!de());){var v=j.callback;if(typeof v=="function"){j.callback=null,B=j.priorityLevel;var T=v(j.expirationTime<=A);A=i.unstable_now(),typeof T=="function"?j.callback=T:j===l(S)&&f(S),H(A)}else f(S);j=l(S)}if(j!==null)var K=!0;else{var te=l(I);te!==null&&ve(ee,te.startTime-A),K=!1}return K}finally{j=null,B=M,U=!1}}var Se=!1,xe=null,Te=-1,V=5,J=-1;function de(){return!(i.unstable_now()-JP||125v?(P.sortIndex=M,a(I,P),l(S)===null&&P===l(I)&&(W?(ne(Te),Te=-1):W=!0,ve(ee,M-v))):(P.sortIndex=T,a(S,P),Q||U||(Q=!0,ye(oe))),P},i.unstable_shouldYield=de,i.unstable_wrapCallback=function(P){var A=B;return function(){var M=B;B=A;try{return P.apply(this,arguments)}finally{B=M}}}})(Yl)),Yl}var Gc;function Xp(){return Gc||(Gc=1,ql.exports=Zp()),ql.exports}var Zc;function Jp(){if(Zc)return pt;Zc=1;var i=ma(),a=Xp();function l(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),S=Object.prototype.hasOwnProperty,I=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,E={},j={};function B(e){return S.call(j,e)?!0:S.call(E,e)?!1:I.test(e)?j[e]=!0:(E[e]=!0,!1)}function U(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Q(e,t,n,r){if(t===null||typeof t>"u"||U(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function W(e,t,n,r,s,o,c){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=s,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=c}var O={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){O[e]=new W(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];O[t]=new W(t,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){O[e]=new W(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){O[e]=new W(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){O[e]=new W(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){O[e]=new W(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){O[e]=new W(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){O[e]=new W(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){O[e]=new W(e,5,!1,e.toLowerCase(),null,!1,!1)});var ne=/[\-:]([a-z])/g;function X(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(ne,X);O[t]=new W(t,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(ne,X);O[t]=new W(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(ne,X);O[t]=new W(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){O[e]=new W(e,1,!1,e.toLowerCase(),null,!1,!1)}),O.xlinkHref=new W("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){O[e]=new W(e,1,!1,e.toLowerCase(),null,!0,!0)});function H(e,t,n,r){var s=O.hasOwnProperty(t)?O[t]:null;(s!==null?s.type!==0:r||!(2h||s[c]!==o[h]){var m=` +`+s[c].replace(" at new "," at ");return e.displayName&&m.includes("")&&(m=m.replace("",e.displayName)),m}while(1<=c&&0<=h);break}}}finally{K=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?T(e):""}function ie(e){switch(e.tag){case 5:return T(e.type);case 16:return T("Lazy");case 13:return T("Suspense");case 19:return T("SuspenseList");case 0:case 2:case 15:return e=te(e.type,!1),e;case 11:return e=te(e.type.render,!1),e;case 1:return e=te(e.type,!0),e;default:return""}}function le(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case xe:return"Fragment";case Se:return"Portal";case V:return"Profiler";case Te:return"StrictMode";case ge:return"Suspense";case fe:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case de:return(e.displayName||"Context")+".Consumer";case J:return(e._context.displayName||"Context")+".Provider";case Ce:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case we:return t=e.displayName||null,t!==null?t:le(e.type)||"Memo";case ye:t=e._payload,e=e._init;try{return le(e(t))}catch{}}return null}function pe(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return le(t);case 8:return t===Te?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function ce(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function me(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Be(e){var t=me(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var s=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return s.call(this)},set:function(c){r=""+c,o.call(this,c)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(c){r=""+c},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Oe(e){e._valueTracker||(e._valueTracker=Be(e))}function je(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=me(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Pe(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function $e(e,t){var n=t.checked;return M({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function be(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=ce(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function et(e,t){t=t.checked,t!=null&&H(e,"checked",t,!1)}function lt(e,t){et(e,t);var n=ce(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?$n(e,t.type,n):t.hasOwnProperty("defaultValue")&&$n(e,t.type,ce(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function dn(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function $n(e,t,n){(t!=="number"||Pe(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var It=Array.isArray;function _t(e,t,n,r){if(e=e.options,t){t={};for(var s=0;s"+t.valueOf().toString()+"",t=Kn.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Wt(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var hn={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},bn=["Webkit","ms","Moz","O"];Object.keys(hn).forEach(function(e){bn.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),hn[t]=hn[e]})});function br(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||hn.hasOwnProperty(e)&&hn[e]?(""+t).trim():t+"px"}function Qr(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,s=br(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,s):e[n]=s}}var mn=M({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function gn(e,t){if(t){if(mn[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(l(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(l(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(l(61))}if(t.style!=null&&typeof t.style!="object")throw Error(l(62))}}function $t(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var cr=null;function Pt(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var dr=null,Ze=null,Lt=null;function qr(e){if(e=hs(e)){if(typeof dr!="function")throw Error(l(280));var t=e.stateNode;t&&(t=io(t),dr(e.stateNode,e.type,t))}}function vn(e){Ze?Lt?Lt.push(e):Lt=[e]:Ze=e}function fr(){if(Ze){var e=Ze,t=Lt;if(Lt=Ze=null,qr(e),t)for(e=0;e>>=0,e===0?32:31-(cf(e)/df|0)|0}var $s=64,Hs=4194304;function Gr(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Vs(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,s=e.suspendedLanes,o=e.pingedLanes,c=n&268435455;if(c!==0){var h=c&~s;h!==0?r=Gr(h):(o&=c,o!==0&&(r=Gr(o)))}else c=n&~s,c!==0?r=Gr(c):o!==0&&(r=Gr(o));if(r===0)return 0;if(t!==0&&t!==r&&(t&s)===0&&(s=r&-r,o=t&-t,s>=o||s===16&&(o&4194240)!==0))return t;if((r&4)!==0&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function Zr(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Rt(t),e[t]=n}function mf(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=os),Ba=" ",Oa=!1;function Fa(e,t){switch(e){case"keyup":return Hf.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Wa(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var yr=!1;function Kf(e,t){switch(e){case"compositionend":return Wa(t);case"keypress":return t.which!==32?null:(Oa=!0,Ba);case"textInput":return e=t.data,e===Ba&&Oa?null:e;default:return null}}function bf(e,t){if(yr)return e==="compositionend"||!Ni&&Fa(e,t)?(e=Ra(),Ys=wi=Nn=null,yr=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=qa(n)}}function Ga(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Ga(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Za(){for(var e=window,t=Pe();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Pe(e.document)}return t}function Ti(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function tp(e){var t=Za(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&Ga(n.ownerDocument.documentElement,n)){if(r!==null&&Ti(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var s=n.textContent.length,o=Math.min(r.start,s);r=r.end===void 0?o:Math.min(r.end,s),!e.extend&&o>r&&(s=r,r=o,o=s),s=Ya(n,o);var c=Ya(n,r);s&&c&&(e.rangeCount!==1||e.anchorNode!==s.node||e.anchorOffset!==s.offset||e.focusNode!==c.node||e.focusOffset!==c.offset)&&(t=t.createRange(),t.setStart(s.node,s.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(c.node,c.offset)):(t.setEnd(c.node,c.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,wr=null,Ii=null,us=null,Pi=!1;function Xa(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Pi||wr==null||wr!==Pe(r)||(r=wr,"selectionStart"in r&&Ti(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),us&&as(us,r)||(us=r,r=ro(Ii,"onSelect"),0Cr||(e.current=$i[Cr],$i[Cr]=null,Cr--)}function Ie(e,t){Cr++,$i[Cr]=e.current,e.current=t}var In={},tt=Tn(In),at=Tn(!1),Gn=In;function Nr(e,t){var n=e.type.contextTypes;if(!n)return In;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var s={},o;for(o in n)s[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=s),s}function ut(e){return e=e.childContextTypes,e!=null}function lo(){Re(at),Re(tt)}function pu(e,t,n){if(tt.current!==In)throw Error(l(168));Ie(tt,t),Ie(at,n)}function hu(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var s in r)if(!(s in t))throw Error(l(108,pe(e)||"Unknown",s));return M({},n,r)}function ao(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||In,Gn=tt.current,Ie(tt,e),Ie(at,at.current),!0}function mu(e,t,n){var r=e.stateNode;if(!r)throw Error(l(169));n?(e=hu(e,t,Gn),r.__reactInternalMemoizedMergedChildContext=e,Re(at),Re(tt),Ie(tt,e)):Re(at),Ie(at,n)}var Jt=null,uo=!1,Hi=!1;function gu(e){Jt===null?Jt=[e]:Jt.push(e)}function pp(e){uo=!0,gu(e)}function Pn(){if(!Hi&&Jt!==null){Hi=!0;var e=0,t=Ee;try{var n=Jt;for(Ee=1;e>=c,s-=c,en=1<<32-Rt(t)+s|n<ue?(Ge=se,se=null):Ge=se.sibling;var Ne=L(_,se,k[ue],z);if(Ne===null){se===null&&(se=Ge);break}e&&se&&Ne.alternate===null&&t(_,se),g=o(Ne,g,ue),re===null?Z=Ne:re.sibling=Ne,re=Ne,se=Ge}if(ue===k.length)return n(_,se),Me&&Xn(_,ue),Z;if(se===null){for(;ueue?(Ge=se,se=null):Ge=se.sibling;var On=L(_,se,Ne.value,z);if(On===null){se===null&&(se=Ge);break}e&&se&&On.alternate===null&&t(_,se),g=o(On,g,ue),re===null?Z=On:re.sibling=On,re=On,se=Ge}if(Ne.done)return n(_,se),Me&&Xn(_,ue),Z;if(se===null){for(;!Ne.done;ue++,Ne=k.next())Ne=D(_,Ne.value,z),Ne!==null&&(g=o(Ne,g,ue),re===null?Z=Ne:re.sibling=Ne,re=Ne);return Me&&Xn(_,ue),Z}for(se=r(_,se);!Ne.done;ue++,Ne=k.next())Ne=$(se,_,ue,Ne.value,z),Ne!==null&&(e&&Ne.alternate!==null&&se.delete(Ne.key===null?ue:Ne.key),g=o(Ne,g,ue),re===null?Z=Ne:re.sibling=Ne,re=Ne);return e&&se.forEach(function(Qp){return t(_,Qp)}),Me&&Xn(_,ue),Z}function We(_,g,k,z){if(typeof k=="object"&&k!==null&&k.type===xe&&k.key===null&&(k=k.props.children),typeof k=="object"&&k!==null){switch(k.$$typeof){case oe:e:{for(var Z=k.key,re=g;re!==null;){if(re.key===Z){if(Z=k.type,Z===xe){if(re.tag===7){n(_,re.sibling),g=s(re,k.props.children),g.return=_,_=g;break e}}else if(re.elementType===Z||typeof Z=="object"&&Z!==null&&Z.$$typeof===ye&&Su(Z)===re.type){n(_,re.sibling),g=s(re,k.props),g.ref=ms(_,re,k),g.return=_,_=g;break e}n(_,re);break}else t(_,re);re=re.sibling}k.type===xe?(g=ir(k.props.children,_.mode,z,k.key),g.return=_,_=g):(z=Bo(k.type,k.key,k.props,null,_.mode,z),z.ref=ms(_,g,k),z.return=_,_=z)}return c(_);case Se:e:{for(re=k.key;g!==null;){if(g.key===re)if(g.tag===4&&g.stateNode.containerInfo===k.containerInfo&&g.stateNode.implementation===k.implementation){n(_,g.sibling),g=s(g,k.children||[]),g.return=_,_=g;break e}else{n(_,g);break}else t(_,g);g=g.sibling}g=Fl(k,_.mode,z),g.return=_,_=g}return c(_);case ye:return re=k._init,We(_,g,re(k._payload),z)}if(It(k))return Y(_,g,k,z);if(A(k))return G(_,g,k,z);ho(_,k)}return typeof k=="string"&&k!==""||typeof k=="number"?(k=""+k,g!==null&&g.tag===6?(n(_,g.sibling),g=s(g,k),g.return=_,_=g):(n(_,g),g=Ol(k,_.mode,z),g.return=_,_=g),c(_)):n(_,g)}return We}var Ir=xu(!0),Cu=xu(!1),mo=Tn(null),go=null,Pr=null,Yi=null;function Gi(){Yi=Pr=go=null}function Zi(e){var t=mo.current;Re(mo),e._currentValue=t}function Xi(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Lr(e,t){go=e,Yi=Pr=null,e=e.dependencies,e!==null&&e.firstContext!==null&&((e.lanes&t)!==0&&(ct=!0),e.firstContext=null)}function xt(e){var t=e._currentValue;if(Yi!==e)if(e={context:e,memoizedValue:t,next:null},Pr===null){if(go===null)throw Error(l(308));Pr=e,go.dependencies={lanes:0,firstContext:e}}else Pr=Pr.next=e;return t}var Jn=null;function Ji(e){Jn===null?Jn=[e]:Jn.push(e)}function Nu(e,t,n,r){var s=t.interleaved;return s===null?(n.next=n,Ji(t)):(n.next=s.next,s.next=n),t.interleaved=n,nn(e,r)}function nn(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var Ln=!1;function el(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function ju(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function rn(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Rn(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,(ke&2)!==0){var s=r.pending;return s===null?t.next=t:(t.next=s.next,s.next=t),r.pending=t,nn(e,n)}return s=r.interleaved,s===null?(t.next=t,Ji(r)):(t.next=s.next,s.next=t),r.interleaved=t,nn(e,n)}function vo(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,hi(e,n)}}function Eu(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var s=null,o=null;if(n=n.firstBaseUpdate,n!==null){do{var c={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};o===null?s=o=c:o=o.next=c,n=n.next}while(n!==null);o===null?s=o=t:o=o.next=t}else s=o=t;n={baseState:r.baseState,firstBaseUpdate:s,lastBaseUpdate:o,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function yo(e,t,n,r){var s=e.updateQueue;Ln=!1;var o=s.firstBaseUpdate,c=s.lastBaseUpdate,h=s.shared.pending;if(h!==null){s.shared.pending=null;var m=h,x=m.next;m.next=null,c===null?o=x:c.next=x,c=m;var R=e.alternate;R!==null&&(R=R.updateQueue,h=R.lastBaseUpdate,h!==c&&(h===null?R.firstBaseUpdate=x:h.next=x,R.lastBaseUpdate=m))}if(o!==null){var D=s.baseState;c=0,R=x=m=null,h=o;do{var L=h.lane,$=h.eventTime;if((r&L)===L){R!==null&&(R=R.next={eventTime:$,lane:0,tag:h.tag,payload:h.payload,callback:h.callback,next:null});e:{var Y=e,G=h;switch(L=t,$=n,G.tag){case 1:if(Y=G.payload,typeof Y=="function"){D=Y.call($,D,L);break e}D=Y;break e;case 3:Y.flags=Y.flags&-65537|128;case 0:if(Y=G.payload,L=typeof Y=="function"?Y.call($,D,L):Y,L==null)break e;D=M({},D,L);break e;case 2:Ln=!0}}h.callback!==null&&h.lane!==0&&(e.flags|=64,L=s.effects,L===null?s.effects=[h]:L.push(h))}else $={eventTime:$,lane:L,tag:h.tag,payload:h.payload,callback:h.callback,next:null},R===null?(x=R=$,m=D):R=R.next=$,c|=L;if(h=h.next,h===null){if(h=s.shared.pending,h===null)break;L=h,h=L.next,L.next=null,s.lastBaseUpdate=L,s.shared.pending=null}}while(!0);if(R===null&&(m=D),s.baseState=m,s.firstBaseUpdate=x,s.lastBaseUpdate=R,t=s.shared.interleaved,t!==null){s=t;do c|=s.lane,s=s.next;while(s!==t)}else o===null&&(s.shared.lanes=0);nr|=c,e.lanes=c,e.memoizedState=D}}function Tu(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=ol.transition;ol.transition={};try{e(!1),t()}finally{Ee=n,ol.transition=r}}function Qu(){return Ct().memoizedState}function vp(e,t,n){var r=zn(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},qu(e))Yu(t,n);else if(n=Nu(e,t,n,r),n!==null){var s=it();Bt(n,e,r,s),Gu(n,t,r)}}function yp(e,t,n){var r=zn(e),s={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(qu(e))Yu(t,s);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var c=t.lastRenderedState,h=o(c,n);if(s.hasEagerState=!0,s.eagerState=h,Dt(h,c)){var m=t.interleaved;m===null?(s.next=s,Ji(t)):(s.next=m.next,m.next=s),t.interleaved=s;return}}catch{}n=Nu(e,t,s,r),n!==null&&(s=it(),Bt(n,e,r,s),Gu(n,t,r))}}function qu(e){var t=e.alternate;return e===ze||t!==null&&t===ze}function Yu(e,t){ws=ko=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Gu(e,t,n){if((n&4194240)!==0){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,hi(e,n)}}var Co={readContext:xt,useCallback:nt,useContext:nt,useEffect:nt,useImperativeHandle:nt,useInsertionEffect:nt,useLayoutEffect:nt,useMemo:nt,useReducer:nt,useRef:nt,useState:nt,useDebugValue:nt,useDeferredValue:nt,useTransition:nt,useMutableSource:nt,useSyncExternalStore:nt,useId:nt,unstable_isNewReconciler:!1},wp={readContext:xt,useCallback:function(e,t){return qt().memoizedState=[e,t===void 0?null:t],e},useContext:xt,useEffect:Ou,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,So(4194308,4,$u.bind(null,t,e),n)},useLayoutEffect:function(e,t){return So(4194308,4,e,t)},useInsertionEffect:function(e,t){return So(4,2,e,t)},useMemo:function(e,t){var n=qt();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=qt();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=vp.bind(null,ze,e),[r.memoizedState,e]},useRef:function(e){var t=qt();return e={current:e},t.memoizedState=e},useState:Uu,useDebugValue:fl,useDeferredValue:function(e){return qt().memoizedState=e},useTransition:function(){var e=Uu(!1),t=e[0];return e=gp.bind(null,e[1]),qt().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=ze,s=qt();if(Me){if(n===void 0)throw Error(l(407));n=n()}else{if(n=t(),Ye===null)throw Error(l(349));(tr&30)!==0||Ru(r,t,n)}s.memoizedState=n;var o={value:n,getSnapshot:t};return s.queue=o,Ou(Mu.bind(null,r,o,e),[e]),r.flags|=2048,Ss(9,Du.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=qt(),t=Ye.identifierPrefix;if(Me){var n=tn,r=en;n=(r&~(1<<32-Rt(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=_s++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=c.createElement(n,{is:r.is}):(e=c.createElement(n),n==="select"&&(c=e,r.multiple?c.multiple=!0:r.size&&(c.size=r.size))):e=c.createElementNS(e,n),e[bt]=t,e[ps]=r,gc(e,t,!1,!1),t.stateNode=e;e:{switch(c=$t(n,r),n){case"dialog":Le("cancel",e),Le("close",e),s=r;break;case"iframe":case"object":case"embed":Le("load",e),s=r;break;case"video":case"audio":for(s=0;szr&&(t.flags|=128,r=!0,xs(o,!1),t.lanes=4194304)}else{if(!r)if(e=wo(c),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),xs(o,!0),o.tail===null&&o.tailMode==="hidden"&&!c.alternate&&!Me)return rt(t),null}else 2*Fe()-o.renderingStartTime>zr&&n!==1073741824&&(t.flags|=128,r=!0,xs(o,!1),t.lanes=4194304);o.isBackwards?(c.sibling=t.child,t.child=c):(n=o.last,n!==null?n.sibling=c:t.child=c,o.last=c)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=Fe(),t.sibling=null,n=Ae.current,Ie(Ae,r?n&1|2:n&1),t):(rt(t),null);case 22:case 23:return zl(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&(t.mode&1)!==0?(wt&1073741824)!==0&&(rt(t),t.subtreeFlags&6&&(t.flags|=8192)):rt(t),null;case 24:return null;case 25:return null}throw Error(l(156,t.tag))}function Ep(e,t){switch(Ki(t),t.tag){case 1:return ut(t.type)&&lo(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Rr(),Re(at),Re(tt),sl(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 5:return nl(t),null;case 13:if(Re(Ae),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(l(340));Tr()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Re(Ae),null;case 4:return Rr(),null;case 10:return Zi(t.type._context),null;case 22:case 23:return zl(),null;case 24:return null;default:return null}}var To=!1,st=!1,Tp=typeof WeakSet=="function"?WeakSet:Set,q=null;function Mr(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){Ue(e,t,r)}else n.current=null}function Cl(e,t,n){try{n()}catch(r){Ue(e,t,r)}}var wc=!1;function Ip(e,t){if(zi=Qs,e=Za(),Ti(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var s=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var c=0,h=-1,m=-1,x=0,R=0,D=e,L=null;t:for(;;){for(var $;D!==n||s!==0&&D.nodeType!==3||(h=c+s),D!==o||r!==0&&D.nodeType!==3||(m=c+r),D.nodeType===3&&(c+=D.nodeValue.length),($=D.firstChild)!==null;)L=D,D=$;for(;;){if(D===e)break t;if(L===n&&++x===s&&(h=c),L===o&&++R===r&&(m=c),($=D.nextSibling)!==null)break;D=L,L=D.parentNode}D=$}n=h===-1||m===-1?null:{start:h,end:m}}else n=null}n=n||{start:0,end:0}}else n=null;for(Ui={focusedElem:e,selectionRange:n},Qs=!1,q=t;q!==null;)if(t=q,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,q=e;else for(;q!==null;){t=q;try{var Y=t.alternate;if((t.flags&1024)!==0)switch(t.tag){case 0:case 11:case 15:break;case 1:if(Y!==null){var G=Y.memoizedProps,We=Y.memoizedState,_=t.stateNode,g=_.getSnapshotBeforeUpdate(t.elementType===t.type?G:At(t.type,G),We);_.__reactInternalSnapshotBeforeUpdate=g}break;case 3:var k=t.stateNode.containerInfo;k.nodeType===1?k.textContent="":k.nodeType===9&&k.documentElement&&k.removeChild(k.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(l(163))}}catch(z){Ue(t,t.return,z)}if(e=t.sibling,e!==null){e.return=t.return,q=e;break}q=t.return}return Y=wc,wc=!1,Y}function Cs(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var s=r=r.next;do{if((s.tag&e)===e){var o=s.destroy;s.destroy=void 0,o!==void 0&&Cl(t,n,o)}s=s.next}while(s!==r)}}function Io(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function Nl(e){var t=e.ref;if(t!==null){var n=e.stateNode;e.tag,e=n,typeof t=="function"?t(e):t.current=e}}function _c(e){var t=e.alternate;t!==null&&(e.alternate=null,_c(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[bt],delete t[ps],delete t[Wi],delete t[dp],delete t[fp])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function kc(e){return e.tag===5||e.tag===3||e.tag===4}function Sc(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||kc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function jl(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=oo));else if(r!==4&&(e=e.child,e!==null))for(jl(e,t,n),e=e.sibling;e!==null;)jl(e,t,n),e=e.sibling}function El(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(El(e,t,n),e=e.sibling;e!==null;)El(e,t,n),e=e.sibling}var Xe=null,zt=!1;function Dn(e,t,n){for(n=n.child;n!==null;)xc(e,t,n),n=n.sibling}function xc(e,t,n){if(Kt&&typeof Kt.onCommitFiberUnmount=="function")try{Kt.onCommitFiberUnmount(Ws,n)}catch{}switch(n.tag){case 5:st||Mr(n,t);case 6:var r=Xe,s=zt;Xe=null,Dn(e,t,n),Xe=r,zt=s,Xe!==null&&(zt?(e=Xe,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):Xe.removeChild(n.stateNode));break;case 18:Xe!==null&&(zt?(e=Xe,n=n.stateNode,e.nodeType===8?Fi(e.parentNode,n):e.nodeType===1&&Fi(e,n),ns(e)):Fi(Xe,n.stateNode));break;case 4:r=Xe,s=zt,Xe=n.stateNode.containerInfo,zt=!0,Dn(e,t,n),Xe=r,zt=s;break;case 0:case 11:case 14:case 15:if(!st&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){s=r=r.next;do{var o=s,c=o.destroy;o=o.tag,c!==void 0&&((o&2)!==0||(o&4)!==0)&&Cl(n,t,c),s=s.next}while(s!==r)}Dn(e,t,n);break;case 1:if(!st&&(Mr(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(h){Ue(n,t,h)}Dn(e,t,n);break;case 21:Dn(e,t,n);break;case 22:n.mode&1?(st=(r=st)||n.memoizedState!==null,Dn(e,t,n),st=r):Dn(e,t,n);break;default:Dn(e,t,n)}}function Cc(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new Tp),t.forEach(function(r){var s=Bp.bind(null,e,r);n.has(r)||(n.add(r),r.then(s,s))})}}function Ut(e,t){var n=t.deletions;if(n!==null)for(var r=0;rs&&(s=c),r&=~o}if(r=s,r=Fe()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*Lp(r/1960))-r,10e?16:e,An===null)var r=!1;else{if(e=An,An=null,Mo=0,(ke&6)!==0)throw Error(l(331));var s=ke;for(ke|=4,q=e.current;q!==null;){var o=q,c=o.child;if((q.flags&16)!==0){var h=o.deletions;if(h!==null){for(var m=0;mFe()-Pl?sr(e,0):Il|=n),ft(e,t)}function Uc(e,t){t===0&&((e.mode&1)===0?t=1:(t=Hs,Hs<<=1,(Hs&130023424)===0&&(Hs=4194304)));var n=it();e=nn(e,t),e!==null&&(Zr(e,t,n),ft(e,n))}function Up(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Uc(e,n)}function Bp(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,s=e.memoizedState;s!==null&&(n=s.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(l(314))}r!==null&&r.delete(t),Uc(e,n)}var Bc;Bc=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||at.current)ct=!0;else{if((e.lanes&n)===0&&(t.flags&128)===0)return ct=!1,Np(e,t,n);ct=(e.flags&131072)!==0}else ct=!1,Me&&(t.flags&1048576)!==0&&vu(t,fo,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Eo(e,t),e=t.pendingProps;var s=Nr(t,tt.current);Lr(t,n),s=ll(null,t,r,e,s,n);var o=al();return t.flags|=1,typeof s=="object"&&s!==null&&typeof s.render=="function"&&s.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,ut(r)?(o=!0,ao(t)):o=!1,t.memoizedState=s.state!==null&&s.state!==void 0?s.state:null,el(t),s.updater=No,t.stateNode=s,s._reactInternals=t,hl(t,r,e,n),t=yl(null,t,r,!0,o,n)):(t.tag=0,Me&&o&&Vi(t),ot(null,t,s,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Eo(e,t),e=t.pendingProps,s=r._init,r=s(r._payload),t.type=r,s=t.tag=Fp(r),e=At(r,e),s){case 0:t=vl(null,t,r,e,n);break e;case 1:t=cc(null,t,r,e,n);break e;case 11:t=oc(null,t,r,e,n);break e;case 14:t=ic(null,t,r,At(r.type,e),n);break e}throw Error(l(306,r,""))}return t;case 0:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:At(r,s),vl(e,t,r,s,n);case 1:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:At(r,s),cc(e,t,r,s,n);case 3:e:{if(dc(t),e===null)throw Error(l(387));r=t.pendingProps,o=t.memoizedState,s=o.element,ju(e,t),yo(t,r,null,n);var c=t.memoizedState;if(r=c.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:c.cache,pendingSuspenseBoundaries:c.pendingSuspenseBoundaries,transitions:c.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){s=Dr(Error(l(423)),t),t=fc(e,t,r,n,s);break e}else if(r!==s){s=Dr(Error(l(424)),t),t=fc(e,t,r,n,s);break e}else for(yt=En(t.stateNode.containerInfo.firstChild),vt=t,Me=!0,Mt=null,n=Cu(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(Tr(),r===s){t=sn(e,t,n);break e}ot(e,t,r,n)}t=t.child}return t;case 5:return Iu(t),e===null&&Qi(t),r=t.type,s=t.pendingProps,o=e!==null?e.memoizedProps:null,c=s.children,Bi(r,s)?c=null:o!==null&&Bi(r,o)&&(t.flags|=32),uc(e,t),ot(e,t,c,n),t.child;case 6:return e===null&&Qi(t),null;case 13:return pc(e,t,n);case 4:return tl(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=Ir(t,null,r,n):ot(e,t,r,n),t.child;case 11:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:At(r,s),oc(e,t,r,s,n);case 7:return ot(e,t,t.pendingProps,n),t.child;case 8:return ot(e,t,t.pendingProps.children,n),t.child;case 12:return ot(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,s=t.pendingProps,o=t.memoizedProps,c=s.value,Ie(mo,r._currentValue),r._currentValue=c,o!==null)if(Dt(o.value,c)){if(o.children===s.children&&!at.current){t=sn(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var h=o.dependencies;if(h!==null){c=o.child;for(var m=h.firstContext;m!==null;){if(m.context===r){if(o.tag===1){m=rn(-1,n&-n),m.tag=2;var x=o.updateQueue;if(x!==null){x=x.shared;var R=x.pending;R===null?m.next=m:(m.next=R.next,R.next=m),x.pending=m}}o.lanes|=n,m=o.alternate,m!==null&&(m.lanes|=n),Xi(o.return,n,t),h.lanes|=n;break}m=m.next}}else if(o.tag===10)c=o.type===t.type?null:o.child;else if(o.tag===18){if(c=o.return,c===null)throw Error(l(341));c.lanes|=n,h=c.alternate,h!==null&&(h.lanes|=n),Xi(c,n,t),c=o.sibling}else c=o.child;if(c!==null)c.return=o;else for(c=o;c!==null;){if(c===t){c=null;break}if(o=c.sibling,o!==null){o.return=c.return,c=o;break}c=c.return}o=c}ot(e,t,s.children,n),t=t.child}return t;case 9:return s=t.type,r=t.pendingProps.children,Lr(t,n),s=xt(s),r=r(s),t.flags|=1,ot(e,t,r,n),t.child;case 14:return r=t.type,s=At(r,t.pendingProps),s=At(r.type,s),ic(e,t,r,s,n);case 15:return lc(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:At(r,s),Eo(e,t),t.tag=1,ut(r)?(e=!0,ao(t)):e=!1,Lr(t,n),Xu(t,r,s),hl(t,r,s,n),yl(null,t,r,!0,e,n);case 19:return mc(e,t,n);case 22:return ac(e,t,n)}throw Error(l(156,t.tag))};function Oc(e,t){return De(e,t)}function Op(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function jt(e,t,n,r){return new Op(e,t,n,r)}function Bl(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Fp(e){if(typeof e=="function")return Bl(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Ce)return 11;if(e===we)return 14}return 2}function Bn(e,t){var n=e.alternate;return n===null?(n=jt(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Bo(e,t,n,r,s,o){var c=2;if(r=e,typeof e=="function")Bl(e)&&(c=1);else if(typeof e=="string")c=5;else e:switch(e){case xe:return ir(n.children,s,o,t);case Te:c=8,s|=8;break;case V:return e=jt(12,n,t,s|2),e.elementType=V,e.lanes=o,e;case ge:return e=jt(13,n,t,s),e.elementType=ge,e.lanes=o,e;case fe:return e=jt(19,n,t,s),e.elementType=fe,e.lanes=o,e;case ve:return Oo(n,s,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case J:c=10;break e;case de:c=9;break e;case Ce:c=11;break e;case we:c=14;break e;case ye:c=16,r=null;break e}throw Error(l(130,e==null?e:typeof e,""))}return t=jt(c,n,t,s),t.elementType=e,t.type=r,t.lanes=o,t}function ir(e,t,n,r){return e=jt(7,e,r,t),e.lanes=n,e}function Oo(e,t,n,r){return e=jt(22,e,r,t),e.elementType=ve,e.lanes=n,e.stateNode={isHidden:!1},e}function Ol(e,t,n){return e=jt(6,e,null,t),e.lanes=n,e}function Fl(e,t,n){return t=jt(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Wp(e,t,n,r,s){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=pi(0),this.expirationTimes=pi(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=pi(0),this.identifierPrefix=r,this.onRecoverableError=s,this.mutableSourceEagerHydrationData=null}function Wl(e,t,n,r,s,o,c,h,m){return e=new Wp(e,t,n,h,m),t===1?(t=1,o===!0&&(t|=8)):t=0,o=jt(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},el(o),e}function $p(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(i)}catch(a){console.error(a)}}return i(),Ql.exports=Jp(),Ql.exports}var Jc;function th(){if(Jc)return bo;Jc=1;var i=eh();return bo.createRoot=i.createRoot,bo.hydrateRoot=i.hydrateRoot,bo}var nh=th();const rh=Ld(nh),sh="modulepreload",oh=function(i,a){return new URL(i,a).href},ed={},ih=function(a,l,f){let p=Promise.resolve();if(l&&l.length>0){let I=function(E){return Promise.all(E.map(j=>Promise.resolve(j).then(B=>({status:"fulfilled",value:B}),B=>({status:"rejected",reason:B}))))};const y=document.getElementsByTagName("link"),w=document.querySelector("meta[property=csp-nonce]"),S=w?.nonce||w?.getAttribute("nonce");p=I(l.map(E=>{if(E=oh(E,f),E in ed)return;ed[E]=!0;const j=E.endsWith(".css"),B=j?'[rel="stylesheet"]':"";if(f)for(let Q=y.length-1;Q>=0;Q--){const W=y[Q];if(W.href===E&&(!j||W.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${E}"]${B}`))return;const U=document.createElement("link");if(U.rel=j?"stylesheet":sh,j||(U.as="script"),U.crossOrigin="",U.href=E,S&&U.setAttribute("nonce",S),document.head.appendChild(U),j)return new Promise((Q,W)=>{U.addEventListener("load",Q),U.addEventListener("error",()=>W(new Error(`Unable to preload CSS for ${E}`)))})}))}function d(y){const w=new Event("vite:preloadError",{cancelable:!0});if(w.payload=y,window.dispatchEvent(w),!w.defaultPrevented)throw y}return p.then(y=>{for(const w of y||[])w.status==="rejected"&&d(w.reason);return a().catch(d)})},Wn=[{id:"zh-CN",shortName:"中",aliases:["zh","zh-Hans","zh-CN"],contentFallbacks:["en-US"]},{id:"zh-TW",shortName:"繁",aliases:["zh-TW","zh-Hant","zh-HK","zh-MO"],contentFallbacks:["zh-CN","en-US"]},{id:"en-US",shortName:"EN",aliases:["en","en-US"],contentFallbacks:["zh-CN"]}],lh=["en-US","zh-CN"],ah=Wn.flatMap(i=>i.aliases.map(a=>({locale:i,alias:a.toLowerCase()}))).sort((i,a)=>a.alias.length-i.alias.length),ua="en-US",Gl={"zh-CN":{product:{name:"BitFun",remote:"BitFun Remote"},features:{remoteControl:"远程控制",codeAgent:"代码助手",deepReview:"严格审查",settings:"设置",workspace:"工作区"},modes:{agentic:"代理模式",assistant:"助手模式",expert:"专家模式",review:"评审模式"},agents:{code:"代码会话",cowork:"协作会话",claw:"Claw",default:"默认助手"},tools:{explore:"探索",read:"读取",write:"写入",shell:"命令行",search:"搜索",edit:"编辑",todo:"待办"},connectionMethods:{lan:"局域网",ngrok:"Ngrok",bitfunServer:"BitFun Server",customServer:"自定义服务器",botFeishu:"飞书机器人",botTelegram:"Telegram Bot",botWeixin:"微信机器人"},statuses:{loading:"加载中",running:"运行中",done:"已完成",failed:"失败",cancelled:"已取消"}},"zh-TW":{product:{name:"BitFun",remote:"BitFun Remote"},features:{remoteControl:"遠端控制",codeAgent:"程式碼助手",deepReview:"嚴格審查",settings:"設定",workspace:"工作區"},modes:{agentic:"代理模式",assistant:"助手模式",expert:"專家模式",review:"審查模式"},agents:{code:"程式碼會話",cowork:"協作會話",claw:"Claw",default:"預設助手"},tools:{explore:"探索",read:"讀取",write:"寫入",shell:"命令列",search:"搜尋",edit:"編輯",todo:"待辦"},connectionMethods:{lan:"區域網路",ngrok:"Ngrok",bitfunServer:"BitFun Server",customServer:"自訂伺服器",botFeishu:"飛書機器人",botTelegram:"Telegram Bot",botWeixin:"微信機器人"},statuses:{loading:"載入中",running:"執行中",done:"已完成",failed:"失敗",cancelled:"已取消"}},"en-US":{product:{name:"BitFun",remote:"BitFun Remote"},features:{remoteControl:"Remote Control",codeAgent:"Code Agent",deepReview:"Review: Strict",settings:"Settings",workspace:"Workspace"},modes:{agentic:"Agentic Mode",assistant:"Assistant Mode",expert:"Expert Mode",review:"Review Mode"},agents:{code:"Code Session",cowork:"Cowork Session",claw:"Claw",default:"Default Assistant"},tools:{explore:"Explore",read:"Read",write:"Write",shell:"Shell",search:"Search",edit:"Edit",todo:"Todo"},connectionMethods:{lan:"LAN",ngrok:"Ngrok",bitfunServer:"BitFun Server",customServer:"Custom Server",botFeishu:"Feishu Bot",botTelegram:"Telegram Bot",botWeixin:"WeChat Bot"},statuses:{loading:"Loading",running:"Running",done:"Done",failed:"Failed",cancelled:"Cancelled"}}};function uh(i){return Wn.some(a=>a.id===i)}function ga(i){const a=i?.trim().toLowerCase();if(!a)return null;const l=Wn.find(f=>f.id.toLowerCase()===a);return l?l.id:ah.find(({alias:f})=>a===f||a.startsWith(`${f}-`))?.locale.id??null}function ch(i){const a=Wn.findIndex(l=>l.id===i);return Wn[(a+1)%Wn.length].id}function dh(i){return Wn.find(a=>a.id===i)?.shortName??i}function fh(i,a=!1){const l=ga(i),f=l?Wn.find(d=>d.id===l):null,p=f?[...a?[f.id]:[],...f.contentFallbacks]:[...lh];return Array.from(new Set(p))}const ph={"en-US":{shared:Gl["en-US"],common:{back:"Back",continue:"Continue",cancel:"Cancel",switch:"Switch",loading:"Loading...",switchLanguage:"Switch language",toggleTheme:"Toggle theme",attachImage:"Attach image",stop:"Stop",submit:"Submit",submitting:"Submitting...",submitted:"Submitted",other:"Other",customTextInput:"Custom text input",typeYourAnswer:"Type your answer...",itemCount:"{count} items",justNow:"just now",minutesAgo:"{count}m ago",hoursAgo:"{count}h ago",daysAgo:"{count}d ago"},pairing:{enterUserIdToContinue:"Enter your user ID to continue",enterAccountToContinue:"Enter your BitFun account to continue",connectingAndPairing:"Connecting and pairing...",pairedLoadingSessions:"Paired! Loading sessions...",connectionError:"Connection error",invalidQrCode:"Invalid QR code: missing room or public key",userIdRequired:"User ID is required",usernameRequired:"Username is required",passwordRequired:"Password is required",tooManyAttempts:"Too many failed attempts. Try again in {seconds}s.",pairingFailed:"Pairing failed",fieldsTooLong:"Username or password is too long.",requestTimedOut:"The relay did not respond in time. Check the network and try again.",qrExpired:"This QR code has expired or the desktop stopped sharing. Scan a new code.",rateLimited:"Too many pairing attempts. Wait one minute, then scan or try again.",relayUnavailable:"The relay or desktop is temporarily unavailable. Try again shortly.",credentialsRejected:"The username or password was not accepted.",fieldLabel:"User ID",usernameLabel:"Username",passwordLabel:"Password",placeholder:"Enter a user ID",usernamePlaceholder:"Enter your username",passwordPlaceholder:"Enter your password",note:"The first successful connection binds this URL to your user ID for the current remote session.",accountNote:"Use the same BitFun account currently logged in on the scanned desktop. Your password is not saved on this phone.",connecting:"Connecting...",retryIn:"Retry in {seconds}s",continue:"Continue"},sessions:{switchWorkspace:"Switch workspace",selectWorkspace:"Select Workspace",noWorkspaces:"No workspaces found",noWorkspaceSelected:"No workspace selected",assistant:"Assistant",switchAssistant:"Switch assistant",selectAssistant:"Select Assistant",launch:"Launch",startRemoteFlow:"Start a new remote flow",codeSessionDesc:"For coding anywhere, anytime.",coworkSessionDesc:"For assisting with everyday work.",clawSession:"Claw Session",clawSessionDesc:"Personal assistant for daily tasks.",recent:"Recent",sessionHistory:"Session history",loadingSessions:"Loading sessions...",noSessions:"No sessions yet. Create one to get started.",untitledSession:"Untitled Session",loadingMore:"Loading more...",remoteCodeSession:"Remote Code Session",remoteCoworkSession:"Remote Cowork Session",remoteClawSession:"Remote Claw Session",agentCode:"Code",agentCowork:"Cowork",agentDefault:"Default",searchSessions:"Search sessions...",renameSession:"Rename",deleteSession:"Delete",confirmDelete:"Delete session?",confirmDeleteDesc:"This action cannot be undone.",renameTitle:"Rename Session",sessionNamePlaceholder:"Session name",cancel:"Cancel",save:"Save",emptySearch:"No sessions match your search.",deleted:"Session deleted",deleteFailed:"Delete failed",renameFailed:"Rename failed",disconnect:"Disconnect",disconnectConfirm:"Disconnect from current desktop? You can re-pair later.",reconnecting:"Reconnecting...",repair:"Pair again",connectionUnpaired:"Not connected",connectionChecking:"Checking connection...",connectionConnected:"Connected",connectionUnreachable:"Connection lost",continueSession:"Continue where you left off"},workspace:{loadingInfo:"Loading workspace info...",currentWorkspace:"Current Workspace",unknownProject:"Unknown Project",noWorkspaceOpen:"No workspace is currently open on the desktop.",noWorkspaceHint:"Select a recent workspace below, or open one on the desktop first.",selectWorkspace:"Select Workspace",recentWorkspaces:"Recent Workspaces",noRecentWorkspaces:"No recent workspaces found. Please open a workspace on the desktop first.",failedToSetWorkspace:"Failed to set workspace",openingWorkspace:"Opening workspace..."},chat:{session:"Session",loadingOlderMessages:"Loading older messages...",showResponse:"Show response",hideResponse:"Hide response",analyzingImage:"Analyzing image with image understanding model...",inputPlaceholder:"How can I help you...",collapsedInputPlaceholder:"Ask BitFun...",collapsedStreamingPlaceholder:"Replying...",messageQueued:"Message queued; it will run after the current step",imageAnalyzingPlaceholder:"Analyzing image...",imageAttachmentFallback:"(see attached images)",modelSelection:"Select model",modelAuto:"Auto",modelAutoDesc:"Automatically route to the best model",modelPrimary:"Primary Model",modelFast:"Fast Model",askQuestionCount:"{count} question{suffix}",waiting:"Waiting",modeAgentic:"Agentic",modePlan:"Plan",modeDebug:"Debug",thinking:"Thinking...",allTasksCompleted:"All tasks completed",task:"Task",toolCalls:"{count} tool call{suffix}",done:"{count} done",running:"{count} running",thoughtCharacters:"Thought {count} characters",textCharacters:"Text {count} characters",readToolsDone:"{summary}",readToolsRunning:"{summary} ({doneCount} done)",fileLoading:"Loading...",fileUnavailable:"File unavailable",fileDownloading:"Downloading...",fileDownloaded:"Downloaded",clickToDownload:"Click to download",scrollToBottom:"Scroll to bottom",copyMessage:"Copy text",resendMessage:"Resend",deleteMessage:"Delete",messageCopied:"Copied",messageDeleted:"Deleted",copyFailed:"Copy failed"},devices:{title:"Devices",noDelegatedIdentity:"The paired desktop is not logged into a BitFun account. Log in on the desktop to enable multi-device control, then retry.",loading:"Loading...",refresh:"Refresh",retry:"Retry",noDevices:"No devices found",online:"Online",offline:"Offline",current:"Current",pairedDesktop:"Paired",switchFailed:"Failed to switch device",loadFailed:"Could not load devices. Check the connection and retry.",identityFailed:"Could not request account access from the paired desktop.",authorizationExpired:"Account authorization expired. Keep the paired desktop online and retry.",deviceUnavailable:"This device is offline or did not respond.",unknownDevice:"Unnamed device",controllingDevice:"Controlling {name}"},tools:{ls:"LS",glob:"Glob",grep:"Grep",delete:"Delete",task:"Task",web:"Web"}},"zh-CN":{shared:Gl["zh-CN"],common:{back:"返回",continue:"继续",cancel:"取消",switch:"切换",loading:"加载中...",switchLanguage:"切换语言",toggleTheme:"切换主题",attachImage:"添加图片",stop:"停止",submit:"提交",submitting:"提交中...",submitted:"已提交",other:"其他",customTextInput:"自定义输入",typeYourAnswer:"请输入你的回答...",itemCount:"{count} 项",justNow:"刚刚",minutesAgo:"{count} 分钟前",hoursAgo:"{count} 小时前",daysAgo:"{count} 天前"},pairing:{enterUserIdToContinue:"请输入你的用户 ID 继续",enterAccountToContinue:"请输入你的 BitFun 账号继续",connectingAndPairing:"正在连接并配对...",pairedLoadingSessions:"配对成功,正在加载会话...",connectionError:"连接异常",invalidQrCode:"二维码无效:缺少 room 或 public key",userIdRequired:"用户 ID 不能为空",usernameRequired:"用户名不能为空",passwordRequired:"密码不能为空",tooManyAttempts:"失败次数过多,请在 {seconds} 秒后重试。",pairingFailed:"配对失败",fieldsTooLong:"用户名或密码过长。",requestTimedOut:"中继服务响应超时,请检查网络后重试。",qrExpired:"此二维码已过期,或桌面端已停止共享,请重新扫码。",rateLimited:"配对尝试过多,请等待一分钟后重新扫码或重试。",relayUnavailable:"中继服务或桌面端暂时不可用,请稍后重试。",credentialsRejected:"用户名或密码未通过验证。",fieldLabel:"用户 ID",usernameLabel:"用户名",passwordLabel:"密码",placeholder:"请输入用户 ID",usernamePlaceholder:"请输入用户名",passwordPlaceholder:"请输入密码",note:"首次成功连接后,本次远程会话会把该 URL 绑定到你的用户 ID。",accountNote:"请使用被扫码桌面端当前登录的 BitFun 账号。密码不会保存在本机。",connecting:"连接中...",retryIn:"{seconds} 秒后重试",continue:"继续"},sessions:{switchWorkspace:"切换工作区",selectWorkspace:"选择工作区",noWorkspaces:"暂无工作区",noWorkspaceSelected:"未选择工作区",assistant:"助理",switchAssistant:"切换助理",selectAssistant:"选择助理",launch:"启动",startRemoteFlow:"开始一个新的远程流程",codeSessionDesc:"随时随地进行编码。",coworkSessionDesc:"处理日常协作与办公任务。",clawSession:"助理会话",clawSessionDesc:"处理日常任务的个人助手。",recent:"最近",sessionHistory:"会话历史",loadingSessions:"正在加载会话...",noSessions:"还没有会话,先创建一个开始吧。",untitledSession:"未命名会话",loadingMore:"正在加载更多...",remoteCodeSession:"远程代码会话",remoteCoworkSession:"远程协作会话",remoteClawSession:"远程助理会话",agentCode:"Code",agentCowork:"Cowork",agentDefault:"默认",searchSessions:"搜索会话...",renameSession:"重命名",deleteSession:"删除",confirmDelete:"确定删除此会话?",confirmDeleteDesc:"此操作无法撤销。",renameTitle:"重命名会话",sessionNamePlaceholder:"会话名称",cancel:"取消",save:"保存",emptySearch:"没有匹配的会话。",deleted:"会话已删除",deleteFailed:"删除失败",renameFailed:"重命名失败",disconnect:"断开连接",disconnectConfirm:"断开当前桌面连接?之后可重新配对。",reconnecting:"正在重新连接...",repair:"重新配对",connectionUnpaired:"未连接",connectionChecking:"检测连接中...",connectionConnected:"已连接",connectionUnreachable:"连接断开",continueSession:"继续上次会话"},workspace:{loadingInfo:"正在加载工作区信息...",currentWorkspace:"当前工作区",unknownProject:"未知项目",noWorkspaceOpen:"桌面端当前没有打开工作区。",noWorkspaceHint:"你可以在下方选择最近工作区,或先在桌面端打开一个工作区。",selectWorkspace:"选择工作区",recentWorkspaces:"最近工作区",noRecentWorkspaces:"没有找到最近工作区,请先在桌面端打开一个工作区。",failedToSetWorkspace:"设置工作区失败",openingWorkspace:"正在打开工作区..."},chat:{session:"会话",loadingOlderMessages:"正在加载更早的消息...",showResponse:"Show response",hideResponse:"Hide response",analyzingImage:"正在使用图像理解模型分析图片...",inputPlaceholder:"有什么可以帮您...",collapsedInputPlaceholder:"发消息...",collapsedStreamingPlaceholder:"正在回复...",messageQueued:"已加入队列,将在当前步骤结束后处理",imageAnalyzingPlaceholder:"正在分析图片...",imageAttachmentFallback:"(见附带图片)",modelSelection:"选择模型",modelAuto:"Auto",modelAutoDesc:"自动路由到最合适的模型",modelPrimary:"Primary 模型",modelFast:"Fast 模型",askQuestionCount:"{count} 个问题{suffix}",waiting:"等待中",modeAgentic:"Agentic",modePlan:"Plan",modeDebug:"Debug",thinking:"思考中...",allTasksCompleted:"所有任务已完成",task:"任务",toolCalls:"{count} 次工具调用{suffix}",done:"已完成 {count}",running:"运行中 {count}",thoughtCharacters:"思考 {count} 个字符",textCharacters:"文本 {count} 个字符",readToolsDone:"{summary}",readToolsRunning:"{summary}(已完成 {doneCount})",fileLoading:"加载中...",fileUnavailable:"文件不可用",fileDownloading:"下载中...",fileDownloaded:"已下载",clickToDownload:"点击下载",scrollToBottom:"滚动到底部",copyMessage:"复制文本",resendMessage:"重新发送",deleteMessage:"删除",messageCopied:"已复制",messageDeleted:"已删除",copyFailed:"复制失败"},devices:{title:"设备",noDelegatedIdentity:"所连接的桌面端未登录 BitFun 账号。请在桌面端登录以启用多设备控制,然后重试。",loading:"加载中...",refresh:"刷新",retry:"重试",noDevices:"未找到设备",online:"在线",offline:"离线",current:"当前",pairedDesktop:"已配对",switchFailed:"切换设备失败",loadFailed:"无法加载设备,请检查连接后重试。",identityFailed:"无法从已配对桌面端获取账号访问权限。",authorizationExpired:"账号授权已过期,请保持已配对桌面端在线并重试。",deviceUnavailable:"该设备离线或未响应。",unknownDevice:"未命名设备",controllingDevice:"正在控制 {name}"},tools:{ls:"列表",glob:"Glob",grep:"Grep",delete:"删除",task:"任务",web:"网络"}},"zh-TW":{shared:Gl["zh-TW"],common:{back:"返回",continue:"繼續",cancel:"取消",switch:"切換",loading:"加載中...",switchLanguage:"切換語言",toggleTheme:"切換主題",attachImage:"添加圖片",stop:"停止",submit:"提交",submitting:"提交中...",submitted:"已提交",other:"其他",customTextInput:"自定義輸入",typeYourAnswer:"請輸入你的回答...",itemCount:"{count} 項",justNow:"剛剛",minutesAgo:"{count} 分鐘前",hoursAgo:"{count} 小時前",daysAgo:"{count} 天前"},pairing:{enterUserIdToContinue:"請輸入你的用戶 ID 繼續",enterAccountToContinue:"請輸入你的 BitFun 帳號繼續",connectingAndPairing:"正在連接並配對...",pairedLoadingSessions:"配對成功,正在加載會話...",connectionError:"連接異常",invalidQrCode:"二維碼無效:缺少 room 或 public key",userIdRequired:"用戶 ID 不能為空",usernameRequired:"用戶名不能為空",passwordRequired:"密碼不能為空",tooManyAttempts:"失敗次數過多,請在 {seconds} 秒後重試。",pairingFailed:"配對失敗",fieldsTooLong:"帳號或密碼過長。",requestTimedOut:"中繼服務回應逾時,請檢查網路後重試。",qrExpired:"此 QR Code 已過期,或桌面端已停止分享,請重新掃描。",rateLimited:"配對嘗試過多,請等待一分鐘後重新掃描或重試。",relayUnavailable:"中繼服務或桌面端暫時無法使用,請稍後重試。",credentialsRejected:"帳號或密碼未通過驗證。",fieldLabel:"用戶 ID",usernameLabel:"用戶名",passwordLabel:"密碼",placeholder:"請輸入用戶 ID",usernamePlaceholder:"請輸入用戶名",passwordPlaceholder:"請輸入密碼",note:"首次成功連接後,本次遠程會話會把該 URL 綁定到你的用戶 ID。",accountNote:"請使用被掃碼桌面端目前登入的 BitFun 帳號。密碼不會保存在本機。",connecting:"連接中...",retryIn:"{seconds} 秒後重試",continue:"繼續"},sessions:{switchWorkspace:"切換工作區",selectWorkspace:"選擇工作區",noWorkspaces:"暫無工作區",noWorkspaceSelected:"未選擇工作區",assistant:"助理",switchAssistant:"切換助理",selectAssistant:"選擇助理",launch:"啟動",startRemoteFlow:"開始一個新的遠程流程",codeSessionDesc:"隨時隨地進行編碼。",coworkSessionDesc:"處理日常協作與辦公任務。",clawSession:"助理會話",clawSessionDesc:"處理日常任務的個人助手。",recent:"最近",sessionHistory:"會話歷史",loadingSessions:"正在加載會話...",noSessions:"還沒有會話,先創建一個開始吧。",untitledSession:"未命名會話",loadingMore:"正在加載更多...",remoteCodeSession:"遠程代碼會話",remoteCoworkSession:"遠程協作會話",remoteClawSession:"遠程助理會話",agentCode:"Code",agentCowork:"Cowork",agentDefault:"默認",searchSessions:"搜尋會話...",renameSession:"重新命名",deleteSession:"刪除",confirmDelete:"確定刪除此會話?",confirmDeleteDesc:"此操作無法復原。",renameTitle:"重新命名會話",sessionNamePlaceholder:"會話名稱",cancel:"取消",save:"儲存",emptySearch:"沒有匹配的會話。",deleted:"會話已刪除",deleteFailed:"刪除失敗",renameFailed:"重新命名失敗",disconnect:"斷開連接",disconnectConfirm:"斷開當前桌面連接?之後可重新配對。",reconnecting:"正在重新連接...",repair:"重新配對",connectionUnpaired:"未連接",connectionChecking:"檢測連接中...",connectionConnected:"已連接",connectionUnreachable:"連接斷開",continueSession:"繼續上次會話"},workspace:{loadingInfo:"正在加載工作區信息...",currentWorkspace:"當前工作區",unknownProject:"未知項目",noWorkspaceOpen:"桌面端當前沒有打開工作區。",noWorkspaceHint:"你可以在下方選擇最近工作區,或先在桌面端打開一個工作區。",selectWorkspace:"選擇工作區",recentWorkspaces:"最近工作區",noRecentWorkspaces:"沒有找到最近工作區,請先在桌面端打開一個工作區。",failedToSetWorkspace:"設置工作區失敗",openingWorkspace:"正在打開工作區..."},chat:{session:"會話",loadingOlderMessages:"正在加載更早的消息...",showResponse:"Show response",hideResponse:"Hide response",analyzingImage:"正在使用圖像理解模型分析圖片...",inputPlaceholder:"有什麼可以幫您...",collapsedInputPlaceholder:"發消息...",collapsedStreamingPlaceholder:"正在回覆...",messageQueued:"已加入隊列,將在當前步驟結束後處理",imageAnalyzingPlaceholder:"正在分析圖片...",imageAttachmentFallback:"(見附帶圖片)",modelSelection:"選擇模型",modelAuto:"Auto",modelAutoDesc:"自動路由到最合適的模型",modelPrimary:"Primary 模型",modelFast:"Fast 模型",askQuestionCount:"{count} 個問題{suffix}",waiting:"等待中",modeAgentic:"Agentic",modePlan:"Plan",modeDebug:"Debug",thinking:"思考中...",allTasksCompleted:"所有任務已完成",task:"任務",toolCalls:"{count} 次工具調用{suffix}",done:"已完成 {count}",running:"運行中 {count}",thoughtCharacters:"思考 {count} 個字符",textCharacters:"文本 {count} 個字符",readToolsDone:"{summary}",readToolsRunning:"{summary}(已完成 {doneCount})",fileLoading:"加載中...",fileUnavailable:"檔案不可用",fileDownloading:"下載中...",fileDownloaded:"已下載",clickToDownload:"點擊下載",scrollToBottom:"捲動到底部",copyMessage:"複製文本",resendMessage:"重新傳送",deleteMessage:"刪除",messageCopied:"已複製",messageDeleted:"已刪除",copyFailed:"複製失敗"},devices:{title:"設備",noDelegatedIdentity:"所連接的桌面端未登入 BitFun 帳號。請在桌面端登入以啟用多設備控制,然後重試。",loading:"加載中...",refresh:"重新整理",retry:"重試",noDevices:"未找到設備",online:"在線",offline:"離線",current:"目前",pairedDesktop:"已配對",switchFailed:"切換設備失敗",loadFailed:"無法載入裝置,請檢查連線後重試。",identityFailed:"無法從已配對桌面端取得帳號存取權限。",authorizationExpired:"帳號授權已過期,請保持已配對桌面端在線並重試。",deviceUnavailable:"該裝置離線或未回應。",unknownDevice:"未命名裝置",controllingDevice:"正在控制 {name}"},tools:{ls:"列表",glob:"Glob",grep:"Grep",delete:"刪除",task:"任務",web:"網絡"}}},Rd="bitfun-mobile-language";function hh(i,a){const l=a.split(".");let f=i;for(const p of l){if(!f||typeof f!="object"||!(p in f))return null;f=f[p]}return typeof f=="string"?f:null}function mh(i,a){return a?i.replace(/\{(\w+)\}/g,(l,f)=>{const p=a[f];return p==null?"":String(p)}):i}function gh(i,a,l){const f=fh(i,!0).map(p=>hh(ph[p],a)).find(p=>p!==null)??a;return mh(f,l)}function vh(){try{const a=localStorage.getItem(Rd);if(uh(a))return a}catch{}const i=yh();return i||(ga(navigator.language)??ua)}function yh(){const i=[];try{i.push(new URLSearchParams(window.location.search).get("lang"))}catch{}const a=window.location.hash||"",l=a.indexOf("?");if(l>=0)try{const f=a.slice(l+1);i.push(new URLSearchParams(f).get("lang"))}catch{}for(const f of i){const p=ga(f);if(p)return p}return null}const Dd=N.createContext({language:ua,setLanguage:()=>{},toggleLanguage:()=>{},t:i=>i,formatDate:(i,a)=>new Intl.DateTimeFormat(ua,a).format(i)}),wh=({children:i})=>{const[a,l]=N.useState(vh);N.useLayoutEffect(()=>{document.documentElement.lang=a;try{localStorage.setItem(Rd,a)}catch{}},[a]);const f=N.useCallback(y=>{l(y)},[]),p=N.useCallback(()=>{l(ch)},[]),d=N.useMemo(()=>({language:a,setLanguage:f,toggleLanguage:p,t:(y,w)=>gh(a,y,w),formatDate:(y,w)=>new Intl.DateTimeFormat(a,w).format(y)}),[a,f,p]);return u.jsx(Dd.Provider,{value:d,children:i})};function Hr(){return N.useContext(Dd)}const va=({className:i})=>{const{language:a,toggleLanguage:l,t:f}=Hr();return u.jsx("button",{type:"button",className:i||"mobile-lang-btn",onClick:l,"aria-label":f("common.switchLanguage"),title:f("common.switchLanguage"),children:dh(a)})};function _h(i){return i instanceof Uint8Array||ArrayBuffer.isView(i)&&i.constructor.name==="Uint8Array"}function Md(i,a=""){if(!Number.isSafeInteger(i)||i<0){const l=a&&`"${a}" `;throw new Error(`${l}expected integer >= 0, got ${i}`)}}function As(i,a,l=""){const f=_h(i),p=i?.length,d=a!==void 0;if(!f||d&&p!==a){const y=l&&`"${l}" `,w=d?` of length ${a}`:"",S=f?`length=${p}`:`type=${typeof i}`;throw new Error(y+"expected Uint8Array"+w+", got "+S)}return i}const Ad=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",kh=Array.from({length:256},(i,a)=>a.toString(16).padStart(2,"0"));function Sh(i){if(As(i),Ad)return i.toHex();let a="";for(let l=0;l=ln._0&&i<=ln._9)return i-ln._0;if(i>=ln.A&&i<=ln.F)return i-(ln.A-10);if(i>=ln.a&&i<=ln.f)return i-(ln.a-10)}function xh(i){if(typeof i!="string")throw new Error("hex string expected, got "+typeof i);if(Ad)return Uint8Array.fromHex(i);const a=i.length,l=a/2;if(a%2)throw new Error("hex string expected, got unpadded hex of length "+a);const f=new Uint8Array(l);for(let p=0,d=0;ptypeof i=="bigint"&&zd<=i;function Ih(i,a,l){return ni(i)&&ni(a)&&ni(l)&&a<=i&&iObject.entries(d).forEach(([w,S])=>f(w,S,y));p(a,!1),p(l,!0)}const Ud=BigInt(0);function Bd(i,a){const l=i%a;return l>=Ud?l:a+l}function Ot(i,a,l){let f=i;for(;a-- >Ud;)f*=f,f%=l;return f}function Lh(i,a){return function(f){const p=i(f);return{secretKey:p,publicKey:a(p)}}}const Ps=BigInt(0),Br=BigInt(1),Qo=BigInt(2);function Rh(i){return Ph(i,{adjustScalarBytes:"function",powPminus2:"function"}),Object.freeze({...i})}function Dh(i){const a=Rh(i),{P:l,type:f,adjustScalarBytes:p,powPminus2:d,randomBytes:y}=a,w=f==="x25519";if(!w&&f!=="x448")throw new Error("invalid type");const S=y||Ch,I=w?255:448,E=w?32:56,j=BigInt(w?9:5),B=BigInt(w?121665:39081),U=w?Qo**BigInt(254):Qo**BigInt(447),Q=w?BigInt(8)*Qo**BigInt(251)-Br:BigInt(4)*Qo**BigInt(445)-Br,W=U+Q+Br,O=fe=>Bd(fe,l),ne=X(j);function X(fe){return Th(O(fe),E)}function H(fe){const we=ca(As(fe,E,"uCoordinate"));return w&&(we[31]&=127),O(nd(we))}function ee(fe){return nd(p(ca(As(fe,E,"scalar"))))}function oe(fe,we){const ye=J(H(we),ee(fe));if(ye===Ps)throw new Error("invalid private or public key received");return X(ye)}function Se(fe){return oe(fe,ne)}const xe=Se,Te=oe;function V(fe,we,ye){const ve=O(fe*(we-ye));return we=O(we-ve),ye=O(ye+ve),{x_2:we,x_3:ye}}function J(fe,we){rd("u",fe,Ps,l),rd("scalar",we,U,W);const ye=we,ve=fe;let P=Br,A=Ps,M=fe,v=Br,T=Ps;for(let te=BigInt(I-1);te>=Ps;te--){const ie=ye>>te&Br;T^=ie,{x_2:P,x_3:M}=V(T,P,M),{x_2:A,x_3:v}=V(T,A,v),T=ie;const le=P+A,pe=O(le*le),ce=P-A,me=O(ce*ce),Be=pe-me,Oe=M+v,je=M-v,Pe=O(je*le),$e=O(Oe*ce),be=Pe+$e,et=Pe-$e;M=O(be*be),v=O(ve*O(et*et)),P=O(pe*me),A=O(Be*(pe+O(B*Be)))}({x_2:P,x_3:M}=V(T,P,M)),{x_2:A,x_3:v}=V(T,A,v);const K=d(A);return O(P*K)}const de={secretKey:E,publicKey:E,seed:E},Ce=(fe=S(E))=>(As(fe,de.seed,"seed"),fe),ge={randomSecretKey:Ce};return Object.freeze({keygen:Lh(Ce,xe),getSharedSecret:Te,getPublicKey:xe,scalarMult:oe,scalarMultBase:Se,utils:ge,GuBytes:ne.slice(),lengths:de})}const Mh=BigInt(1),sd=BigInt(2),Ah=BigInt(3),zh=BigInt(5);BigInt(8);const Od=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed");function Uh(i){const a=BigInt(10),l=BigInt(20),f=BigInt(40),p=BigInt(80),d=Od,w=i*i%d*i%d,S=Ot(w,sd,d)*w%d,I=Ot(S,Mh,d)*i%d,E=Ot(I,zh,d)*I%d,j=Ot(E,a,d)*E%d,B=Ot(j,l,d)*j%d,U=Ot(B,f,d)*B%d,Q=Ot(U,p,d)*U%d,W=Ot(Q,p,d)*U%d,O=Ot(W,a,d)*E%d;return{pow_p_5_8:Ot(O,sd,d)*i%d,b2:w}}function Bh(i){return i[0]&=248,i[31]&=127,i[31]|=64,i}const Fd=(()=>{const i=Od;return Dh({P:i,type:"x25519",powPminus2:a=>{const{pow_p_5_8:l,b2:f}=Uh(a);return Bd(Ot(l,Ah,i)*f,i)},adjustScalarBytes:Bh})})();function Oh(i){return i instanceof Uint8Array||ArrayBuffer.isView(i)&&i.constructor.name==="Uint8Array"}function mt(i,a,l=""){const f=Oh(i),p=i?.length,d=a!==void 0;if(!f||d&&p!==a){const y=l&&`"${l}" `,w=d?` of length ${a}`:"",S=f?`length=${p}`:`type=${typeof i}`;throw new Error(y+"expected Uint8Array"+w+", got "+S)}return i}function si(i,a=!0){if(i.destroyed)throw new Error("Hash instance has been destroyed");if(a&&i.finished)throw new Error("Hash#digest() has already been called")}function Wd(i,a){mt(i,void 0,"output");const l=a.outputLen;if(i.length{function l(f,...p){if(mt(f,void 0,"key"),!Wh)throw new Error("Non little-endian hardware is not yet supported");if(i.nonceLength!==void 0){const E=p[0];mt(E,i.varSizeNonce?void 0:i.nonceLength,"nonce")}const d=i.tagLength;d&&p[1]!==void 0&&mt(p[1],void 0,"AAD");const y=a(f,...p),w=(E,j)=>{if(j!==void 0){if(E!==2)throw new Error("cipher output not supported");mt(j,void 0,"output")}};let S=!1;return{encrypt(E,j){if(S)throw new Error("cannot encrypt() twice with same key + nonce");return S=!0,mt(E),w(y.encrypt.length,j),y.encrypt(E,j)},decrypt(E,j){if(mt(E),d&&E.length{const p=f&1;return{s3:l<<31|f>>>1,s2:a<<31|l>>>1,s1:i<<31|a>>>1,s0:i>>>1^bh<<24&-(p&1)}},Tt=i=>(i>>>0&255)<<24|(i>>>8&255)<<16|(i>>>16&255)<<8|i>>>24&255|0;function qh(i){i.reverse();const a=i[15]&1;let l=0;for(let f=0;f>>1|l,l=(p&1)<<7}return i[0]^=-a&225,i}const Yh=i=>i>64*1024?8:i>1024?4:2;class $d{blockLen=an;outputLen=an;s0=0;s1=0;s2=0;s3=0;finished=!1;t;W;windowSize;constructor(a,l){mt(a,16,"key"),a=ar(a);const f=li(a);let p=f.getUint32(0,!1),d=f.getUint32(4,!1),y=f.getUint32(8,!1),w=f.getUint32(12,!1);const S=[];for(let Q=0;Q<128;Q++)S.push({s0:Tt(p),s1:Tt(d),s2:Tt(y),s3:Tt(w)}),{s0:p,s1:d,s2:y,s3:w}=Qh(p,d,y,w);const I=Yh(l||1024);if(![1,2,4,8].includes(I))throw new Error("ghash: invalid window size, expected 2, 4 or 8");this.W=I;const j=128/I,B=this.windowSize=2**I,U=[];for(let Q=0;Q>>I-ee-1&1))continue;const{s0:Se,s1:xe,s2:Te,s3:V}=S[I*Q+ee];O^=Se,ne^=xe,X^=Te,H^=V}U.push({s0:O,s1:ne,s2:X,s3:H})}this.t=U}_updateBlock(a,l,f,p){a^=this.s0,l^=this.s1,f^=this.s2,p^=this.s3;const{W:d,t:y,windowSize:w}=this;let S=0,I=0,E=0,j=0;const B=(1<>>8*W&255;for(let ne=8/d-1;ne>=0;ne--){const X=O>>>d*ne&B,{s0:H,s1:ee,s2:oe,s3:Se}=y[U*w+X];S^=H,I^=ee,E^=oe,j^=Se,U+=1}}this.s0=S,this.s1=I,this.s2=E,this.s3=j}update(a){si(this),mt(a),a=ar(a);const l=un(a),f=Math.floor(a.length/an),p=a.length%an;for(let d=0;di(p,f.length).update(f).digest(),l=i(new Uint8Array(16),0);return a.outputLen=l.outputLen,a.blockLen=l.blockLen,a.create=(f,p)=>i(f,p),a}const od=Hd((i,a)=>new $d(i,a));Hd((i,a)=>new Gh(i,a));const da=16,Zh=4,qo=new Uint8Array(da),Xh=283;function Jh(i){if(![16,24,32].includes(i.length))throw new Error('"aes key" expected Uint8Array of length 16/24/32, got length='+i.length)}function wa(i){return i<<1^Xh&-(i>>7)}function id(i,a){let l=0;for(;a>0;a>>=1)l^=i&-(a&1),i=wa(i);return l}const em=(()=>{const i=new Uint8Array(256);for(let l=0,f=1;l<256;l++,f^=wa(f))i[l]=f;const a=new Uint8Array(256);a[0]=99;for(let l=0;l<255;l++){let f=i[255-l];f|=f<<8,a[i[l]]=(f^f>>4^f>>5^f>>6^f>>7^99)&255}return cn(i),a})(),tm=i=>i<<24|i>>>8,Zl=i=>i<<8|i>>>24;function nm(i,a){if(i.length!==256)throw new Error("Wrong sbox length");const l=new Uint32Array(256).map((I,E)=>a(i[E])),f=l.map(Zl),p=f.map(Zl),d=p.map(Zl),y=new Uint32Array(256*256),w=new Uint32Array(256*256),S=new Uint16Array(256*256);for(let I=0;I<256;I++)for(let E=0;E<256;E++){const j=I*256+E;y[j]=l[I]^f[E],w[j]=p[I]^d[E],S[j]=i[I]<<8|i[E]}return{sbox:i,sbox2:S,T0:l,T1:f,T2:p,T3:d,T01:y,T23:w}}const Vd=nm(em,i=>id(i,3)<<24|i<<16|i<<8|id(i,2)),rm=(()=>{const i=new Uint8Array(16);for(let a=0,l=1;a<16;a++,l=wa(l))i[a]=l;return i})();function sm(i){mt(i);const a=i.length;Jh(i);const{sbox2:l}=Vd,f=[];oi(i)||f.push(i=ar(i));const p=un(i),d=p.length,y=S=>Ms(l,S,S,S,S),w=new Uint32Array(a+28);w.set(p);for(let S=d;S6&&S%d===4&&(I=y(I)),w[S]=w[S-d]^I}return cn(...f),w}function Yo(i,a,l,f,p,d){return i[l<<8&65280|f>>>8&255]^a[p>>>8&65280|d>>>24&255]}function Ms(i,a,l,f,p){return i[a&255|l&65280]|i[f>>>16&255|p>>>16&65280]<<16}function ld(i,a,l,f,p){const{sbox2:d,T01:y,T23:w}=Vd;let S=0;a^=i[S++],l^=i[S++],f^=i[S++],p^=i[S++];const I=i.length/4-2;for(let Q=0;Q>>0,w.setUint32(E,B,a),{s0:U,s1:Q,s2:W,s3:O}=ld(i,y[0],y[1],y[2],y[3]);const ne=da*Math.floor(S.length/Zh);if(nea+=String.fromCharCode(l)),btoa(a)}function ii(i){const a=atob(i),l=new Uint8Array(a.length);for(let f=0;fp.abort(),f);try{return await fetch(a,{...l,signal:p.signal})}catch(y){throw y?.name==="AbortError"?new Error("Request timed out"):y}finally{window.clearTimeout(d)}}async pair(a,l){this.keyPair=await lm();const f=ii(a);this.sharedKey=await am(this.keyPair,f);const p=l.mobileInstallId,d=this.getMobileDeviceName(),y=l.userId.trim(),w=l.mobileInstallId.trim(),S=l.password&&l.password.length>0?l.password:void 0,I=await this.fetchWithTimeout(`${this.relayUrl}/api/rooms/${encodeURIComponent(this.roomId)}/pair`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({public_key:fa(this.keyPair.publicKey),device_id:p,device_name:d})},35e3);if(!I.ok)throw new Error(`Pairing failed: HTTP ${I.status}`);const E=await I.json(),j=await Zo(this.sharedKey,E.encrypted_data,E.nonce),U={challenge_echo:JSON.parse(j).challenge,device_id:p,device_name:d,mobile_install_id:w,user_id:y};S&&(U.password=S);const{data:Q,nonce:W}=await Xl(this.sharedKey,JSON.stringify(U)),O=await this.fetchWithTimeout(`${this.relayUrl}/api/rooms/${encodeURIComponent(this.roomId)}/command`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({encrypted_data:Q,nonce:W})},65e3);if(!O.ok)throw new Error(`Pairing verification failed: HTTP ${O.status}`);const ne=await O.json(),X=await Zo(this.sharedKey,ne.encrypted_data,ne.nonce),H=JSON.parse(X);if(H?.resp==="error")throw new Error(H?.message||"Pairing rejected");return H}async requestDelegatedIdentity(a){if(!a?.force&&this.hasDelegatedIdentity)return!0;a?.force&&this.clearDelegatedIdentity();const l=await this.sendCommand({cmd:"get_delegated_identity"});return l?.resp==="delegate_identity"&&l.token&&l.master_key?(this.delegatedToken=l.token,this.delegatedMasterKey=ii(l.master_key),l.device_id&&(this.homeDeviceId=l.device_id,this.pairedDeviceId||(this.pairedDeviceId=l.device_id)),!0):!1}clearDelegatedIdentity(){this.delegatedToken=null,this.delegatedMasterKey=null}async sendCommand(a){if(!this.sharedKey)throw new Error("Not paired");const l=JSON.stringify(a),{data:f,nonce:p}=await Xl(this.sharedKey,l),d=JSON.stringify({encrypted_data:f,nonce:p}),y=await this.fetchWithTimeout(`${this.relayUrl}/api/rooms/${encodeURIComponent(this.roomId)}/command`,{method:"POST",headers:{"Content-Type":"application/json"},body:d},65e3);if(!y.ok)throw new Error(`Command failed: HTTP ${y.status}`);const w=await y.json(),S=await Zo(this.sharedKey,w.encrypted_data,w.nonce);return JSON.parse(S)}get isPaired(){return this.sharedKey!==null}get hasDelegatedIdentity(){return this.delegatedToken!==null&&this.delegatedMasterKey!==null}async refreshDelegatedIdentityAfterUnauthorized(){this.clearDelegatedIdentity();try{return await this.requestDelegatedIdentity({force:!0})}catch{return!1}}async listDevices(){return this.withDelegatedAuthRetry(async()=>{if(!this.delegatedToken)throw new Error("No delegated identity");const a=await this.fetchWithTimeout(`${this.relayUrl}/api/devices`,{headers:{Authorization:`Bearer ${this.delegatedToken}`}},2e4);if(!a.ok){const l=new Error(`List devices failed: HTTP ${a.status}`);throw l.status=a.status,l}return a.json()})}async sendDeviceRpc(a,l){return this.withDelegatedAuthRetry(async()=>{if(!this.delegatedToken||!this.delegatedMasterKey)throw new Error("No delegated identity");const f=JSON.stringify(l),{data:p,nonce:d}=await Xl(this.delegatedMasterKey,f),y=await this.fetchWithTimeout(`${this.relayUrl}/api/devices/${encodeURIComponent(a)}/rpc`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.delegatedToken}`},body:JSON.stringify({encrypted_data:p,nonce:d})},13e4);if(!y.ok){const E=new Error(`Device RPC failed: HTTP ${y.status}`);throw E.status=y.status,E}const w=await y.json(),S=await Zo(this.delegatedMasterKey,w.encrypted_data,w.nonce),I=JSON.parse(S);if(I?.resp==="error")throw new Error(I.message||"Remote error");return I})}async withDelegatedAuthRetry(a){try{return await a()}catch(l){const f=l?.status,p=String(l?.message||l);if(!(f===401||p.includes("HTTP 401")||p.includes("Unauthorized")))throw l;if(!await this.refreshDelegatedIdentityAfterUnauthorized())throw new Error("No delegated identity");return a()}}getMobileDeviceName(){const a=navigator.userAgent;return/iPhone/i.test(a)?"iPhone":/iPad/i.test(a)?"iPad":/Android/i.test(a)?"Android":"Mobile Browser"}}class cm{client;constructor(a){this.client=a}async request(a){const l=`req_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,f={...a,_request_id:l},p=this.client.pairedDeviceId,d=this.client.hasDelegatedIdentity&&!!p&&p!==this.client.homeDeviceId;let y;d&&p?y=await this.client.sendDeviceRpc(p,f):y=await this.client.sendCommand(f);const w=y;if(w.resp==="error")throw new Error(w.message||"Unknown error");return y}async getWorkspaceInfo(){const a=await this.request({cmd:"get_workspace_info"});return{has_workspace:a.has_workspace,path:a.path,project_name:a.project_name,git_branch:a.git_branch,workspace_kind:a.workspace_kind,assistant_id:a.assistant_id,remote_connection_id:a.remote_connection_id,remote_ssh_host:a.remote_ssh_host}}async listRecentWorkspaces(){return(await this.request({cmd:"list_recent_workspaces"})).workspaces||[]}async setWorkspace(a,l){return this.request({cmd:"set_workspace",path:a,remote_connection_id:l?.remoteConnectionId,remote_ssh_host:l?.remoteSshHost})}async listAssistants(){return(await this.request({cmd:"list_assistants"})).assistants||[]}async setAssistant(a){return this.request({cmd:"set_assistant",path:a})}async listSessions(a,l=30,f=0,p,d){const y=await this.request({cmd:"list_sessions",workspace_path:a??null,remote_connection_id:d?.remoteConnectionId,remote_ssh_host:d?.remoteSshHost,limit:l,offset:f,query:p?.trim()||null});return{sessions:y.sessions||[],has_more:y.has_more??!1}}async createSession(a,l,f,p){return(await this.request({cmd:"create_session",agent_type:a||void 0,session_name:l||void 0,workspace_path:f??null,remote_connection_id:p?.remoteConnectionId,remote_ssh_host:p?.remoteSshHost})).session_id}async getSessionMessages(a,l,f){const p=await this.request({cmd:"get_session_messages",session_id:a,limit:l,before_message_id:f});return{messages:p.messages||[],has_more:p.has_more||!1}}async getModelCatalog(a){return(await this.request({cmd:"get_model_catalog",session_id:a??void 0})).catalog}async setSessionModel(a,l){return(await this.request({cmd:"set_session_model",session_id:a,model_id:l})).model_id}async sendMessage(a,l,f,p){return(await this.request({cmd:"send_message",session_id:a,content:l,agent_type:f||void 0,image_contexts:p&&p.length>0?p:void 0})).turn_id}async cancelTask(a,l){await this.request({cmd:"cancel_task",session_id:a,turn_id:l??void 0})}async cancelTool(a,l){await this.request({cmd:"cancel_tool",tool_id:a,reason:l??void 0})}async deleteSession(a){await this.request({cmd:"delete_session",session_id:a})}async renameSession(a,l){await this.request({cmd:"update_session_title",session_id:a,title:l})}async answerQuestion(a,l){await this.request({cmd:"answer_question",tool_id:a,answers:l})}async pollSession(a,l,f,p=0){return this.request({cmd:"poll_session",session_id:a,since_version:l,known_msg_count:f,known_model_catalog_version:p})}async ping(){await this.request({cmd:"ping"})}async getFileInfo(a,l){const f=await this.request({cmd:"get_file_info",path:a,session_id:l??void 0});return{name:f.name,size:f.size,mimeType:f.mime_type}}async readFile(a,l,f){let d=0;const y=[];let w="",S="",I=0;for(;;){const E=await this.request({cmd:"read_file_chunk",path:a,session_id:l??void 0,offset:d,limit:3145728});if(y.push(E.chunk_base64),w=E.name,S=E.mime_type,I=E.total_size,d+=E.chunk_size,f?.(Math.min(d,I),I),d>=I||E.chunk_size===0)break}return{name:w,contentBase64:y.join(""),mimeType:S,size:I}}}class yg{intervalId=null;sinceVersion=0;knownMsgCount=0;sessionId;sessionMgr;onUpdate;polling=!1;stopped=!1;hasActiveTurn=!1;knownModelCatalogVersion=0;turnJustEndedAt=null;TURN_JUST_ENDED_GRACE_PERIOD_MS=5e3;constructor(a,l,f,p=0){this.sessionMgr=a,this.sessionId=l,this.onUpdate=f,this.knownModelCatalogVersion=p}start(a=0){this.stopped=!1,this.knownMsgCount=a,this.tick(),document.addEventListener("visibilitychange",this.onVisibilityChange)}stop(){this.stopped=!0,this.intervalId!==null&&(clearTimeout(this.intervalId),this.intervalId=null),document.removeEventListener("visibilitychange",this.onVisibilityChange)}resetCursors(){this.sinceVersion=0,this.knownMsgCount=0}setKnownModelCatalogVersion(a){this.knownModelCatalogVersion=a}nudge(){this.hasActiveTurn=!0,this.intervalId!==null&&clearTimeout(this.intervalId),this.tick()}getInterval(){if(document.visibilityState!=="visible")return 5e3;const a=Date.now();return this.turnJustEndedAt!=null&&a-this.turnJustEndedAtthis.tick(),this.getInterval()))}onVisibilityChange=()=>{this.stopped||(document.visibilityState==="visible"?(this.intervalId!==null&&clearTimeout(this.intervalId),this.tick()):this.scheduleNext())};async tick(){if(this.stopped||this.polling){this.scheduleNext();return}this.polling=!0;try{const a=await this.sessionMgr.pollSession(this.sessionId,this.sinceVersion,this.knownMsgCount,this.knownModelCatalogVersion);if(a.changed){const l=this.hasActiveTurn,f=a.active_turn!=null&&a.active_turn.status==="active";this.hasActiveTurn=f,l&&!f&&(this.turnJustEndedAt=Date.now()),a.new_messages&&a.new_messages.length>0&&(this.turnJustEndedAt=null),this.sinceVersion=a.version,a.total_msg_count!=null&&(this.knownMsgCount=a.total_msg_count),a.model_catalog?.version!=null&&(this.knownModelCatalogVersion=a.model_catalog.version),this.onUpdate(a)}}catch(a){console.error("[Poller] poll error",a)}finally{this.polling=!1,this.scheduleNext()}}}const ad=i=>{let a;const l=new Set,f=(I,E)=>{const j=typeof I=="function"?I(a):I;if(!Object.is(j,a)){const B=a;a=E??(typeof j!="object"||j===null)?j:Object.assign({},a,j),l.forEach(U=>U(a,B))}},p=()=>a,w={setState:f,getState:p,getInitialState:()=>S,subscribe:I=>(l.add(I),()=>l.delete(I))},S=a=i(f,p,w);return w},dm=(i=>i?ad(i):ad),fm=i=>i;function pm(i,a=fm){const l=Wr.useSyncExternalStore(i.subscribe,Wr.useCallback(()=>a(i.getState()),[i,a]),Wr.useCallback(()=>a(i.getInitialState()),[i,a]));return Wr.useDebugValue(l),l}const ud=i=>{const a=dm(i),l=f=>pm(a,f);return Object.assign(l,a),l},hm=(i=>i?ud(i):ud),Ft=hm((i,a)=>({connectionStatus:"idle",setConnectionStatus:l=>i({connectionStatus:l}),connectionHealth:"unpaired",setConnectionHealth:l=>i({connectionHealth:l}),currentWorkspace:null,setCurrentWorkspace:l=>i({currentWorkspace:l}),currentAssistant:null,setCurrentAssistant:l=>i({currentAssistant:l}),pairedDisplayMode:null,setPairedDisplayMode:l=>i({pairedDisplayMode:l}),authenticatedUserId:null,setAuthenticatedUserId:l=>i({authenticatedUserId:l}),controlTarget:null,setControlTarget:l=>i({controlTarget:l}),sessions:[],setSessions:l=>i({sessions:l}),appendSessions:l=>i(f=>({sessions:[...f.sessions,...l]})),updateSessionName:(l,f)=>i(p=>({sessions:p.sessions.map(d=>d.session_id===l?{...d,name:f}:d)})),removeSession:l=>i(f=>{const{[l]:p,...d}=f.messagesBySession;return{sessions:f.sessions.filter(y=>y.session_id!==l),messagesBySession:d}}),activeSessionId:null,setActiveSessionId:l=>i({activeSessionId:l}),messagesBySession:{},deletedMessageIds:{},getMessages:l=>{const f=a().messagesBySession[l]||[],p=a().deletedMessageIds[l];return p?f.filter(d=>!p.has(d.id)):f},setMessages:(l,f)=>i(p=>{const d=p.deletedMessageIds[l],y=d?f.filter(w=>!d.has(w.id)):f;return{messagesBySession:{...p.messagesBySession,[l]:y}}}),appendNewMessages:(l,f)=>i(p=>{if(f.length===0)return p;const d=p.messagesBySession[l]||[],y=new Set(d.map(I=>I.id)),w=p.deletedMessageIds[l],S=f.filter(I=>!y.has(I.id)&&!w?.has(I.id));return S.length===0?p:{messagesBySession:{...p.messagesBySession,[l]:[...d,...S]}}}),deleteMessage:(l,f)=>i(p=>{const d=p.messagesBySession[l],y=new Set(p.deletedMessageIds[l]||[]);return y.add(f),{deletedMessageIds:{...p.deletedMessageIds,[l]:y},messagesBySession:d?{...p.messagesBySession,[l]:d.filter(w=>w.id!==f)}:p.messagesBySession}}),activeTurn:null,setActiveTurn:l=>i({activeTurn:l}),error:null,setError:l=>i({error:l}),resetConnectionState:()=>i({connectionStatus:"idle",currentWorkspace:null,currentAssistant:null,pairedDisplayMode:null,authenticatedUserId:null,controlTarget:null,sessions:[],activeSessionId:null,messagesBySession:{},deletedMessageIds:{},activeTurn:null,error:null}),resetForDeviceSwitch:()=>i({currentWorkspace:null,currentAssistant:null,pairedDisplayMode:null,sessions:[],activeSessionId:null,messagesBySession:{},deletedMessageIds:{},activeTurn:null,error:null})})),Qd="transparent";function b(i,a){return`rgba(${i}, ${a})`}function Xo(...i){return i.join(", ")}function $r(i,a,l,f,p=["0.04","0.08","0.15","0.25","0.4"]){return{[`${i}-50`]:b(a,p[0]),[`${i}-100`]:b(a,p[1]),[`${i}-200`]:b(a,p[2]),[`${i}-300`]:b(a,p[3]),[`${i}-400`]:b(a,p[4]),[`${i}-500`]:l,[`${i}-600`]:f}}const qd={"--color-static-white":"#ffffff","--size-radius-sm":"6px","--size-radius-base":"8px","--size-radius-lg":"12px","--size-radius-xl":"16px","--size-radius-2xl":"20px","--size-radius-full":"9999px","--size-gap-1":"4px","--size-gap-2":"8px","--size-gap-3":"12px","--size-gap-4":"16px","--size-gap-5":"20px","--size-gap-6":"24px","--size-gap-8":"32px","--size-gap-10":"40px","--size-gap-12":"48px","--size-gap-16":"64px","--motion-fast":"0.15s","--motion-base":"0.3s","--motion-slow":"0.6s","--easing-standard":"cubic-bezier(0.4, 0, 0.2, 1)","--font-family-sans":"'Noto Sans SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'SF Pro Display', Roboto, sans-serif","--font-family-mono":"'Menlo', 'SF Mono', 'Cascadia Code', 'Consolas', 'Liberation Mono', 'Courier New', 'Noto Sans Mono CJK SC', 'Noto Sans Mono', monospace","--font-weight-normal":"400","--font-weight-medium":"500","--font-weight-semibold":"600","--font-weight-bold":"700","--font-size-xs":"12px","--font-size-sm":"14px","--font-size-base":"15px","--font-size-lg":"16px","--font-size-xl":"18px","--font-size-2xl":"20px","--font-size-3xl":"24px","--line-height-tight":"1.2","--line-height-base":"1.5","--line-height-relaxed":"1.6"},Or="0, 0, 0",ht="255, 255, 255",mm="96, 165, 250",gm="139, 92, 246",vm="236, 72, 153",cd="52, 211, 153",dd="245, 158, 11",fd="239, 68, 68",Jo="225, 171, 128",Jl="#121214",pa="#18181a",pd=pa,ym="#e8e8e8",hd="#b0b0b0",ea="#858585",wm="#555555",_m="#60a5fa",km="#3b82f6",Sm="#8b5cf6",xm="#7c3aed",Cm="#ec4899",Nm="#db2777",jm="#34d399",Em="#f59e0b",Tm="#ef4444",ta="#e1ab80",Im="#f6d0a3",Yd={"--color-bg-primary":Jl,"--color-bg-secondary":pa,"--color-bg-tertiary":Jl,"--color-bg-elevated":pa,"--color-bg-workbench":Jl,"--color-bg-scene":pd,"--color-bg-flowchat":pd,"--color-text-primary":ym,"--color-text-secondary":hd,"--color-text-muted":ea,"--color-text-disabled":wm,"--element-bg-subtle":b(ht,"0.05"),"--element-bg-soft":b(ht,"0.095"),"--element-bg-base":b(ht,"0.125"),"--element-bg-medium":b(ht,"0.155"),"--element-bg-strong":b(ht,"0.19"),...$r("--color-accent",mm,_m,km),...$r("--color-purple",gm,Sm,xm),...$r("--color-pink",vm,Cm,Nm),"--color-success":jm,"--color-success-bg":b(cd,"0.1"),"--color-success-border":b(cd,"0.3"),"--color-warning":Em,"--color-warning-bg":b(dd,"0.1"),"--color-warning-border":b(dd,"0.3"),"--color-error":Tm,"--color-error-bg":b(fd,"0.1"),"--color-error-border":b(fd,"0.3"),"--color-info":ta,"--color-info-bg":b(Jo,"0.1"),"--color-info-border":b(Jo,"0.3"),"--color-highlight":ta,"--color-highlight-bg":b(Jo,"0.15"),"--color-overlay":b(Or,"0.5"),"--border-subtle":b(ht,"0.12"),"--border-base":b(ht,"0.18"),"--border-medium":b(ht,"0.24"),"--border-strong":b(ht,"0.32"),"--border-prominent":b(Jo,"0.5"),"--shadow-xs":`0 1px 2px ${b(Or,"0.9")}`,"--shadow-sm":`0 2px 4px ${b(Or,"0.8")}`,"--shadow-base":`0 4px 8px ${b(Or,"0.7")}`,"--shadow-lg":`0 8px 16px ${b(Or,"0.6")}`,"--shadow-xl":`0 12px 24px ${b(Or,"0.5")}`,"--blur-subtle":"blur(4px) saturate(1.05)","--blur-base":"blur(8px) saturate(1.1)",...qd,"--opacity-disabled":"0.6","--opacity-hover":"0.8","--opacity-focus":"0.9","--scrollbar-thumb":b(ht,"0.15"),"--scrollbar-thumb-hover":b(ht,"0.24"),"--btn-default-bg":b(ht,"0.08"),"--btn-default-color":ea,"--btn-hover-bg":b(ht,"0.12"),"--btn-hover-color":hd,"--btn-primary-bg":ta,"--btn-primary-color":"#000000","--btn-primary-hover-bg":Im,"--btn-ghost-bg":Qd,"--btn-ghost-color":ea,"--btn-ghost-hover-bg":b(ht,"0.095")},Et="0, 0, 0",Fn="120, 120, 128",Ls="60, 60, 67",na="0, 122, 255",Pm="175, 82, 222",Lm="236, 72, 153",ra="255, 149, 0",md="52, 199, 89",gd="255, 59, 48",sa="#f3f3f5",Rs="var(--color-static-white)",vd="#18181a",oa="#48484a",Rm="#8e8e93",Dm="#b0b0b0",ia="#007aff",yd="#0066cc",Mm="#af52de",Am="#9536cc",zm="#ec4899",Um="#db2777",wd="#ff9500",Bm="#34c759",Om="#ff3b30",Gd={"--color-bg-primary":sa,"--color-bg-secondary":Rs,"--color-bg-tertiary":sa,"--color-bg-elevated":Rs,"--color-bg-workbench":sa,"--color-bg-scene":Rs,"--color-bg-flowchat":Rs,"--color-text-primary":vd,"--color-text-secondary":oa,"--color-text-muted":Rm,"--color-text-disabled":Dm,"--element-bg-subtle":b(Fn,"0.04"),"--element-bg-soft":b(Fn,"0.08"),"--element-bg-base":b(Fn,"0.1"),"--element-bg-medium":b(Fn,"0.14"),"--element-bg-strong":b(Fn,"0.2"),...$r("--color-accent",na,ia,yd,["0.04","0.08","0.14","0.22","0.36"]),...$r("--color-purple",Pm,Mm,Am,["0.04","0.08","0.14","0.22","0.36"]),...$r("--color-pink",Lm,zm,Um,["0.04","0.08","0.14","0.22","0.36"]),"--color-success":Bm,"--color-success-bg":b(md,"0.08"),"--color-success-border":b(md,"0.25"),"--color-warning":wd,"--color-warning-bg":b(ra,"0.08"),"--color-warning-border":b(ra,"0.25"),"--color-error":Om,"--color-error-bg":b(gd,"0.08"),"--color-error-border":b(gd,"0.25"),"--color-info":ia,"--color-info-bg":b(na,"0.08"),"--color-info-border":b(na,"0.25"),"--color-highlight":wd,"--color-highlight-bg":b(ra,"0.1"),"--color-overlay":b(Et,"0.3"),"--border-subtle":b(Ls,"0.08"),"--border-base":b(Ls,"0.14"),"--border-medium":b(Ls,"0.22"),"--border-strong":b(Ls,"0.3"),"--border-prominent":b(Ls,"0.4"),"--shadow-xs":`0 1px 2px ${b(Et,"0.04")}`,"--shadow-sm":Xo(`0 1px 3px ${b(Et,"0.06")}`,`0 1px 2px ${b(Et,"0.04")}`),"--shadow-base":Xo(`0 2px 8px ${b(Et,"0.06")}`,`0 1px 3px ${b(Et,"0.04")}`),"--shadow-lg":Xo(`0 4px 16px ${b(Et,"0.08")}`,`0 2px 6px ${b(Et,"0.04")}`),"--shadow-xl":Xo(`0 8px 24px ${b(Et,"0.1")}`,`0 4px 8px ${b(Et,"0.04")}`),"--blur-subtle":"blur(4px) saturate(1.2)","--blur-base":"blur(8px) saturate(1.4)",...qd,"--opacity-disabled":"0.55","--opacity-hover":"0.75","--opacity-focus":"0.9","--scrollbar-thumb":b(Et,"0.15"),"--scrollbar-thumb-hover":b(Et,"0.25"),"--btn-default-bg":b(Fn,"0.08"),"--btn-default-color":oa,"--btn-hover-bg":b(Fn,"0.14"),"--btn-hover-color":vd,"--btn-primary-bg":ia,"--btn-primary-color":Rs,"--btn-primary-hover-bg":yd,"--btn-ghost-bg":Qd,"--btn-ghost-color":oa,"--btn-ghost-hover-bg":b(Fn,"0.08")},Zd="bitfun-mobile-theme",_d="data-bitfun-theme",Xd={dark:Yd,light:Gd},ha="--color-bg-primary",Jd="--color-text-primary";function zs(i,a){return Xd[i][a]}function kd(i,a){const l=zs(i,ha),f=zs(i,Jd),p=[":root {"];for(const[d,y]of Object.entries(a))p.push(` ${d}: ${y};`);return p.push(` color-scheme: ${i};`),p.push("}"),p.push(`html, body { background-color: ${l}; color: ${f}; color-scheme: ${i}; }`),p.join(` +`)}const Fm={dark:kd("dark",Yd),light:kd("light",Gd)};function Wm(i){const a=document.documentElement,l=document.body,f=Xd[i],p=document.createElement("style");p.setAttribute(_d,i),p.textContent=Fm[i],document.head.appendChild(p),document.head.querySelectorAll(`style[${_d}]`).forEach(y=>{y!==p&&y.remove()});for(const y of Object.keys(f))a.style.setProperty(y,f[y]);a.style.setProperty("color-scheme",i),a.setAttribute("data-theme",i),a.setAttribute("data-theme-type",i),l.setAttribute("data-theme",i),l.style.backgroundColor=zs(i,ha),l.style.color=zs(i,Jd);const d=document.querySelector('meta[name="theme-color"]');d&&(d.setAttribute("content",zs(i,ha)),d.removeAttribute("media"))}function $m(){try{const i=localStorage.getItem(Zd);if(i==="dark"||i==="light")return i}catch{}return window.matchMedia?.("(prefers-color-scheme: light)").matches?"light":"dark"}const ef=N.createContext({themeId:"dark",isDark:!0,setTheme:()=>{},toggleTheme:()=>{}}),Hm=280;let Sd;const Vm=({children:i})=>{const[a,l]=N.useState($m);N.useLayoutEffect(()=>{const d=document.documentElement,y=d.getAttribute("data-theme"),w=y&&y!==a;w&&(clearTimeout(Sd),d.classList.add("theme-switching"),d.offsetHeight),Wm(a),w&&(Sd=setTimeout(()=>{d.classList.remove("theme-switching")},Hm+40));try{localStorage.setItem(Zd,a)}catch{}},[a]);const f=N.useCallback(d=>l(d),[]),p=N.useCallback(()=>l(d=>d==="dark"?"light":"dark"),[]);return u.jsx(ef.Provider,{value:{themeId:a,isDark:a==="dark",setTheme:f,toggleTheme:p},children:i})};function tf(){return N.useContext(ef)}const nf=""+new URL("Logo-ICON-BOaKcXgO.png",import.meta.url).href,Km=({isDark:i})=>u.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:i?u.jsx("path",{d:"M8 1.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM3 8a5 5 0 0 1 5-5v10a5 5 0 0 1-5-5Z",fill:"currentColor"}):u.jsx("path",{d:"M8 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-1 0v-1A.5.5 0 0 1 8 1Zm0 11a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-1 0v-1A.5.5 0 0 1 8 12Zm7-4a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1 0-1h1A.5.5 0 0 1 15 8ZM3 8a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1 0-1h1A.5.5 0 0 1 3 8Zm9.95-3.54a.5.5 0 0 1 0 .71l-.71.7a.5.5 0 1 1-.7-.7l.7-.71a.5.5 0 0 1 .71 0ZM5.46 11.24a.5.5 0 0 1 0 .71l-.7.71a.5.5 0 0 1-.71-.71l.7-.71a.5.5 0 0 1 .71 0Zm7.08 1.42a.5.5 0 0 1-.7 0l-.71-.71a.5.5 0 0 1 .7-.7l.71.7a.5.5 0 0 1 0 .71ZM5.46 4.76a.5.5 0 0 1-.71 0l-.71-.7a.5.5 0 0 1 .71-.71l.7.7a.5.5 0 0 1 0 .71ZM8 5a3 3 0 1 1 0 6 3 3 0 0 1 0-6Z",fill:"currentColor"})}),xd="bitfun.mobile.install_id",Cd="bitfun.mobile.user_id",lr="bitfun.mobile.user_id_lock_until",Fr="bitfun.mobile.user_id_failure_count",bm=3,Nd=6e4;function Qm(i){return i.includes("This remote URL is already protected")||i.includes("This mobile device must continue using the previously confirmed user ID")||i.includes("Invalid username or password")||i.includes("Missing password")||i.includes("Missing username")||i.includes("Too many pairing attempts")}function qm(i){try{const a=i.replace(/^wss:\/\//,"https://").replace(/^ws:\/\//,"http://").replace(/\/ws\/?$/,"").replace(/\/$/,""),l=new URL(a);return!["http:","https:"].includes(l.protocol)||!l.hostname||l.username||l.password||l.search||l.hash?null:l.toString().replace(/\/$/,"")}catch{return null}}function Ym(i,a){return!!i&&i.length<=128&&/^[A-Za-z0-9_-]+$/.test(i)&&!["_store","page-data","pages"].includes(i)&&!!a&&a.length<=512&&/^[A-Za-z0-9+/=_-]+$/.test(a)}function Gm(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`mobile-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function jd(){const i=localStorage.getItem(xd)?.trim();if(i)return i;const a=Gm();return localStorage.setItem(xd,a),a}function Zm(){const i=window.location.hash,a=new URLSearchParams(i.replace(/^#\/pair\?/,"")),l=a.get("room"),f=a.get("pk"),p=a.get("relay"),d=a.get("auth")==="account",y=a.get("user")?.trim()||null;if(p)return{room:l,pk:f,httpBaseUrl:qm(p)??"",accountAuth:d,accountUsername:y};const w=window.location.origin,S=window.location.pathname.replace(/\/[^/]*$/,"").replace(/\/r\/[^/]*$/,"");return{room:l,pk:f,httpBaseUrl:w+S,accountAuth:d,accountUsername:y}}const Xm=({onPaired:i})=>{const{t:a}=Hr(),{isDark:l,toggleTheme:f}=tf(),{connectionStatus:p,setConnectionStatus:d,setError:y,error:w,setAuthenticatedUserId:S}=Ft(),[I,E]=N.useState(""),[j,B]=N.useState(""),[U,Q]=N.useState(""),[W,O]=N.useState(!1),[ne,X]=N.useState(0),[H,ee]=N.useState(null),[oe,Se]=N.useState(()=>Date.now()),xe=N.useRef(!1),Te=N.useRef(0),V=N.useRef(null),J=N.useMemo(()=>Zm(),[]),de=J.accountAuth,Ce=!!H&&H>oe,ge=Ce?Math.max(1,Math.ceil((H-oe)/1e3)):0,fe=N.useCallback(async(A,M,v)=>{const T=J.room,K=J.pk,te=A.trim(),ie=M,le=v?.autoReconnect===!0,pe=v?.installId||U||jd(),ce=V.current,me=!!ce&&ce>Date.now(),Be=me?Math.max(1,Math.ceil((ce-Date.now())/1e3)):0;if(!T||!K||!Ym(T,K)||!J.httpBaseUrl){y(a("pairing.invalidQrCode")),d("error");return}if(!te){y(a(de?"pairing.usernameRequired":"pairing.userIdRequired")),d("error");return}if(te.length>128||ie.length>1024){y(a("pairing.fieldsTooLong")),d("error");return}if(de&&!ie){y(a("pairing.passwordRequired")),d("error");return}if(!le&&me){y(a("pairing.tooManyAttempts",{seconds:Be})),d("error");return}Q(pe),O(!0);const Oe=new um(J.httpBaseUrl,T);try{y(null),d("pairing");const je=await Oe.pair(K,{userId:te,mobileInstallId:pe,password:de?ie:void 0});d("paired"),localStorage.setItem(Cd,te),localStorage.removeItem(Fr),localStorage.removeItem(lr),X(0),ee(null),B(""),S(je.authenticated_user_id??te);const Pe=new cm(Oe),$e=Ft.getState();je.has_workspace&&(je.workspace_kind==="assistant"&&je.path?($e.setPairedDisplayMode("assistant"),$e.setCurrentAssistant({path:je.path,name:je.project_name??"Claw",assistant_id:je.assistant_id}),$e.setCurrentWorkspace(null)):($e.setPairedDisplayMode("pro"),$e.setCurrentWorkspace({has_workspace:!0,path:je.path,project_name:je.project_name,git_branch:je.git_branch,workspace_kind:je.workspace_kind,assistant_id:je.assistant_id,remote_connection_id:je.remote_connection_id,remote_ssh_host:je.remote_ssh_host}))),je.sessions&&$e.setSessions(je.sessions);try{const be=await Promise.race([Oe.requestDelegatedIdentity(),new Promise(lt=>{window.setTimeout(()=>lt(!1),1e4)})]),et=Oe.homeDeviceId;be&&et&&($e.setControlTarget({deviceId:et,deviceName:null,isHome:!0}),Oe.listDevices().then(lt=>{const dn=lt.find($n=>$n.device_id===et);dn&&Ft.getState().setControlTarget({deviceId:et,deviceName:dn.device_name,isHome:!0})}).catch(()=>{}))}catch{}i(Oe,Pe)}catch(je){const Pe=je?.message||"",$e=Pe.includes("timed out")?a("pairing.requestTimedOut"):Pe.includes("HTTP 404")?a("pairing.qrExpired"):Pe.includes("HTTP 429")?a("pairing.rateLimited"):Pe.includes("HTTP 503")||Pe.includes("HTTP 504")?a("pairing.relayUnavailable"):Pe||a("pairing.pairingFailed");if(!le&&Qm($e)){const be=Te.current+1,et=be>=bm,lt=et?Date.now()+Nd:null;localStorage.setItem(Fr,String(be)),lt?localStorage.setItem(lr,String(lt)):localStorage.removeItem(lr),X(be),ee(lt),y(et?a("pairing.tooManyAttempts",{seconds:Math.ceil(Nd/1e3)}):Pe.includes("Too many pairing attempts")?a("pairing.rateLimited"):a("pairing.credentialsRejected"))}else y($e);d("error")}finally{O(!1)}},[U,J.httpBaseUrl,J.pk,J.room,de,S,d,y,a]);N.useEffect(()=>{const A=localStorage.getItem(Cd)?.trim()??"",v=(J.accountUsername?.trim()??"")||A,T=jd(),K=Number(localStorage.getItem(Fr)||"0"),te=Number(localStorage.getItem(lr)||"0"),ie=te>Date.now()?te:null;te&&!ie&&(localStorage.removeItem(lr),localStorage.removeItem(Fr));const le=!de&&!!A&&!!T&&!!J.room&&!!J.pk;E(v),Q(T),X(ie?K:0),ee(ie),d(le?"pairing":"idle"),y(null),le&&!xe.current&&(xe.current=!0,fe(A,"",{autoReconnect:!0,installId:T}))},[fe,J.accountUsername,J.pk,J.room,de,d,y]),N.useEffect(()=>{Te.current=ne,V.current=H},[ne,H]),N.useEffect(()=>{if(!H)return;if(H<=Date.now()){ee(null),X(0),localStorage.removeItem(lr),localStorage.removeItem(Fr);return}const A=window.setInterval(()=>{const M=Date.now();Se(M),H<=M&&(ee(null),X(0),localStorage.removeItem(lr),localStorage.removeItem(Fr))},1e3);return()=>window.clearInterval(A)},[H]);const we=async()=>{xe.current=!0,await fe(I,j,{autoReconnect:!1})},ye={idle:a(de?"pairing.enterAccountToContinue":"pairing.enterUserIdToContinue"),pairing:a("pairing.connectingAndPairing"),paired:a("pairing.pairedLoadingSessions"),error:a("pairing.connectionError")},ve=p==="pairing",P=p==="idle"||p==="error";return u.jsxs("div",{className:"pairing-page",children:[u.jsxs("div",{className:"pairing-page__actions",children:[u.jsx(va,{}),u.jsx("button",{className:"pairing-page__theme-btn",onClick:f,"aria-label":a("common.toggleTheme"),children:u.jsx(Km,{isDark:l})})]}),u.jsx("img",{src:nf,alt:"BitFun",className:"pairing-page__logo"}),u.jsx("div",{className:"pairing-page__brand",children:a("shared.product.remote")}),u.jsx("div",{className:"pairing-page__spinner-wrap",children:ve&&u.jsx("div",{className:"spinner"})}),u.jsx("div",{className:"pairing-page__state",children:ye[p]||p}),P&&u.jsxs("div",{className:"pairing-page__form",children:[u.jsxs("label",{className:"pairing-page__field",children:[u.jsx("span",{className:"pairing-page__field-label",children:a(de?"pairing.usernameLabel":"pairing.fieldLabel")}),u.jsx("input",{className:"pairing-page__input",type:"text",value:I,onChange:A=>E(A.target.value),placeholder:a(de?"pairing.usernamePlaceholder":"pairing.placeholder"),autoCapitalize:"off",autoCorrect:"off",autoComplete:"username",maxLength:128,disabled:W||Ce})]}),de&&u.jsxs("label",{className:"pairing-page__field",children:[u.jsx("span",{className:"pairing-page__field-label",children:a("pairing.passwordLabel")}),u.jsx("input",{className:"pairing-page__input",type:"password",value:j,onChange:A=>B(A.target.value),placeholder:a("pairing.passwordPlaceholder"),autoComplete:"current-password",maxLength:1024,disabled:W||Ce})]}),u.jsx("p",{className:"pairing-page__note",children:a(de?"pairing.accountNote":"pairing.note")}),u.jsx("button",{className:"pairing-page__retry",onClick:we,disabled:W||Ce,children:W?a("pairing.connecting"):Ce?a("pairing.retryIn",{seconds:ge}):a("pairing.continue")})]}),w&&u.jsx("div",{className:"pairing-page__error",children:w})]})},Jm=({sessionMgr:i,onReady:a})=>{const{t:l}=Hr(),[f,p]=N.useState(null),[d,y]=N.useState([]),[w,S]=N.useState(!0),[I,E]=N.useState(!1),[j,B]=N.useState(null),[U,Q]=N.useState(!1),W=N.useCallback(async()=>{try{const H=await i.getWorkspaceInfo();p(H)}catch(H){B(H.message)}finally{S(!1)}},[i]),O=N.useCallback(async()=>{try{const H=await i.listRecentWorkspaces();y(H)}catch(H){B(H.message)}},[i]);N.useEffect(()=>{W()},[W]);const ne=async()=>{Q(!0),await O()},X=N.useCallback(async H=>{if(!I){E(!0),B(null);try{const ee=await i.setWorkspace(H.path,{remoteConnectionId:H.remote_connection_id,remoteSshHost:H.remote_ssh_host});ee.success?(await W(),Q(!1)):B(ee.error||l("workspace.failedToSetWorkspace"))}catch(ee){B(ee.message)}finally{E(!1)}}},[W,i,I,l]);return w?u.jsx("div",{className:"workspace-page",children:u.jsxs("div",{className:"workspace-page__loading",children:[u.jsx("div",{className:"spinner"}),u.jsx("span",{children:l("workspace.loadingInfo")})]})}):u.jsxs("div",{className:"workspace-page",children:[u.jsxs("div",{className:"workspace-page__header",children:[u.jsx("h1",{children:l("shared.features.workspace")}),u.jsx(va,{})]}),u.jsxs("div",{className:"workspace-page__content",children:[f?.has_workspace?u.jsxs("div",{className:"workspace-page__current",children:[u.jsx("div",{className:"workspace-page__current-label",children:l("workspace.currentWorkspace")}),u.jsxs("div",{className:"workspace-page__current-card",children:[u.jsx("div",{className:"workspace-page__project-name",children:f.project_name||l("workspace.unknownProject")}),u.jsx("div",{className:"workspace-page__project-path",children:f.path}),f.git_branch&&u.jsxs("div",{className:"workspace-page__git-branch",children:[u.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",children:[u.jsx("circle",{cx:"5",cy:"4",r:"2",stroke:"currentColor",strokeWidth:"1.3"}),u.jsx("circle",{cx:"11",cy:"4",r:"2",stroke:"currentColor",strokeWidth:"1.3"}),u.jsx("circle",{cx:"5",cy:"12",r:"2",stroke:"currentColor",strokeWidth:"1.3"}),u.jsx("path",{d:"M5 6V10M11 6V8C11 9.1046 10.1046 10 9 10H5",stroke:"currentColor",strokeWidth:"1.3"})]}),f.git_branch]})]}),u.jsxs("div",{className:"workspace-page__actions",children:[u.jsx("button",{className:"workspace-page__btn workspace-page__btn--primary",onClick:a,children:l("common.continue")}),u.jsx("button",{className:"workspace-page__btn workspace-page__btn--secondary",onClick:ne,children:l("common.switch")})]})]}):u.jsxs("div",{className:"workspace-page__no-workspace",children:[u.jsx("div",{className:"workspace-page__no-workspace-icon",children:u.jsx("svg",{width:"40",height:"40",viewBox:"0 0 16 16",fill:"none",children:u.jsx("path",{d:"M2 4V12C2 12.5523 2.44772 13 3 13H13C13.5523 13 14 12.5523 14 12V6C14 5.44772 13.5523 5 13 5H8L6.5 3H3C2.44772 3 2 3.44772 2 4Z",stroke:"currentColor",strokeWidth:"1.3",strokeLinejoin:"round"})})}),u.jsx("div",{className:"workspace-page__no-workspace-text",children:l("workspace.noWorkspaceOpen")}),u.jsx("div",{className:"workspace-page__no-workspace-hint",children:l("workspace.noWorkspaceHint")}),!U&&u.jsx("button",{className:"workspace-page__btn workspace-page__btn--primary",onClick:ne,children:l("workspace.selectWorkspace")})]}),U&&u.jsxs("div",{className:"workspace-page__recent",children:[u.jsx("div",{className:"workspace-page__recent-label",children:l("workspace.recentWorkspaces")}),d.length===0?u.jsx("div",{className:"workspace-page__recent-empty",children:l("workspace.noRecentWorkspaces")}):u.jsx("div",{className:"workspace-page__recent-list",children:d.map(H=>u.jsxs("button",{className:"workspace-page__recent-item",onClick:()=>X(H),disabled:I,children:[u.jsx("div",{className:"workspace-page__recent-item-name",children:H.name}),u.jsx("div",{className:"workspace-page__recent-item-path",children:H.path})]},`${H.remote_connection_id??"local"}:${H.path}`))}),f?.has_workspace&&u.jsx("button",{className:"workspace-page__btn workspace-page__btn--secondary",onClick:()=>Q(!1),children:l("common.cancel")})]}),I&&u.jsxs("div",{className:"workspace-page__switching",children:[u.jsx("div",{className:"spinner spinner--sm"}),u.jsx("span",{children:l("workspace.openingWorkspace")})]}),j&&u.jsx("div",{className:"workspace-page__error",children:j})]})]})},ei=30;function Ed(i,a,l){const f=parseInt(i,10);if(!f||isNaN(f))return"";const p=new Date(f*1e3),y=new Date().getTime()-p.getTime(),w=Math.floor(y/6e4);if(w<1)return l("common.justNow");if(w<60)return l("common.minutesAgo",{count:w});const S=Math.floor(w/60);if(S<24)return l("common.hoursAgo",{count:S});const I=Math.floor(S/24);return I<7?l("common.daysAgo",{count:I}):a(p)}function Td(i,a){switch(i){case"code":case"agentic":return a("sessions.agentCode");case"cowork":case"Cowork":return a("sessions.agentCowork");case"claw":case"Claw":return a("shared.agents.claw");default:return i||a("sessions.agentDefault")}}function rf(i){return i==="cowork"||i==="Cowork"}function sf(i){return i==="claw"||i==="Claw"}function eg(i){return i.length===0?void 0:i.some(l=>l.workspace_kind!=null)?i.find(l=>l.workspace_kind!=="assistant"):i[0]}function Id(i,a){if(!i||i.length<=a)return i;const l=a-3,f=Math.ceil(l*.6),p=l-f;return i.slice(0,f)+"..."+i.slice(-p)}function Ds({agentType:i}){return rf(i)?u.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"}),u.jsx("circle",{cx:"9",cy:"7",r:"4"}),u.jsx("path",{d:"M22 21v-2a4 4 0 0 0-3-3.87"}),u.jsx("path",{d:"M16 3.13a4 4 0 0 1 0 7.75"})]}):sf(i)?u.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("rect",{width:"20",height:"14",x:"2",y:"5",rx:"2"}),u.jsx("path",{d:"M2 10h20"})]}):u.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:u.jsx("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"})})}const tg=()=>u.jsxs("svg",{width:"32",height:"32",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("polyline",{points:"4 17 10 11 4 5"}),u.jsx("line",{x1:"12",y1:"19",x2:"20",y2:"19"})]}),la=()=>u.jsxs("svg",{width:"32",height:"32",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("path",{d:"M12 8V4H8"}),u.jsx("rect",{width:"16",height:"12",x:"4",y:"8",rx:"2"}),u.jsx("path",{d:"M2 14h2"}),u.jsx("path",{d:"M20 14h2"}),u.jsx("path",{d:"M15 13v2"}),u.jsx("path",{d:"M9 13v2"})]}),Pd=()=>u.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:u.jsx("path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H18a2 2 0 0 1 2 2v2"})}),ng=({isDark:i})=>u.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:i?u.jsx("path",{d:"M8 1.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM3 8a5 5 0 0 1 5-5v10a5 5 0 0 1-5-5Z",fill:"currentColor"}):u.jsx("path",{d:"M8 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-1 0v-1A.5.5 0 0 1 8 1Zm0 11a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-1 0v-1A.5.5 0 0 1 8 12Zm7-4a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1 0-1h1A.5.5 0 0 1 15 8ZM3 8a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1 0-1h1A.5.5 0 0 1 3 8Zm9.95-3.54a.5.5 0 0 1 0 .71l-.71.7a.5.5 0 1 1-.7-.7l.7-.71a.5.5 0 0 1 .71 0ZM5.46 11.24a.5.5 0 0 1 0 .71l-.7.71a.5.5 0 0 1-.71-.71l.7-.71a.5.5 0 0 1 .71 0Zm7.08 1.42a.5.5 0 0 1-.7 0l-.71-.71a.5.5 0 0 1 .7-.7l.71.7a.5.5 0 0 1 0 .71ZM5.46 4.76a.5.5 0 0 1-.71 0l-.71-.7a.5.5 0 0 1 .71-.71l.7.7a.5.5 0 0 1 0 .71ZM8 5a3 3 0 1 1 0 6 3 3 0 0 1 0-6Z",fill:"currentColor"})}),rg=({sessionMgr:i,onSelectSession:a,onOpenWorkspace:l,onDisconnect:f,onOpenDevices:p})=>{const{t:d,formatDate:y}=Hr(),{sessions:w,setSessions:S,appendSessions:I,setError:E,currentWorkspace:j,setCurrentWorkspace:B,currentAssistant:U,setCurrentAssistant:Q,setPairedDisplayMode:W,authenticatedUserId:O,connectionHealth:ne,controlTarget:X}=Ft(),{isDark:H,toggleTheme:ee}=tf(),[oe,Se]=N.useState(!1),[xe,Te]=N.useState(!1),[V,J]=N.useState(!1),[de,Ce]=N.useState(!1),[ge,fe]=N.useState(()=>{const C=Ft.getState().pairedDisplayMode;return C==="assistant"||C==="pro"?C:"pro"}),[we,ye]=N.useState([]),[ve,P]=N.useState(!1),[A,M]=N.useState([]),[v,T]=N.useState(!1),[K,te]=N.useState(""),[ie,le]=N.useState(null),[pe,ce]=N.useState(null),[me,Be]=N.useState(""),[Oe,je]=N.useState(null),[Pe,$e]=N.useState(!1),[be,et]=N.useState(!1),[lt,dn]=N.useState(null),[$n,It]=N.useState(!1),_t=N.useRef(),Hn=N.useRef({x:0,y:0}),Vn=N.useRef(!1),fn=N.useRef(),ur=K.trim().length>0,Vr=w.length>0&&!ur,pn=()=>{_t.current&&(clearTimeout(_t.current),_t.current=void 0)},Kn=N.useCallback((C,F)=>{Pe||be||(pn(),Vn.current=!1,Hn.current={x:F.touches[0].clientX,y:F.touches[0].clientY},_t.current=setTimeout(()=>{Vn.current=!0,le(C),_t.current=void 0},500))},[Pe,be]),Kr=N.useCallback(C=>{const F=Math.abs(C.touches[0].clientX-Hn.current.x),ae=Math.abs(C.touches[0].clientY-Hn.current.y);(F>10||ae>10)&&pn()},[]),Wt=N.useCallback(()=>{pn()},[]),hn=N.useCallback((C,F)=>{if(Vn.current){F.preventDefault(),F.stopPropagation(),Vn.current=!1;return}a(C.session_id,C.name)},[a]),bn=N.useCallback(C=>{fn.current&&clearTimeout(fn.current),dn(C),fn.current=setTimeout(()=>dn(null),2500)},[]);N.useEffect(()=>()=>{pn(),fn.current&&clearTimeout(fn.current)},[]);const br=N.useCallback(async()=>{if(!(!pe||!me.trim())){et(!0);try{await i.renameSession(pe.session_id,me.trim()),Ft.getState().updateSessionName(pe.session_id,me.trim()),ce(null),le(null)}catch(C){bn(C.message||d("sessions.renameFailed"))}finally{et(!1)}}},[pe,me,i,bn,d]),Qr=N.useCallback(async()=>{if(Oe){$e(!0);try{await i.deleteSession(Oe.session_id),Ft.getState().removeSession(Oe.session_id),je(null),le(null),bn(d("sessions.deleted"))}catch(C){bn(C.message||d("sessions.deleteFailed"))}finally{$e(!1)}}},[Oe,i,bn,d]),[mn,gn]=N.useState(0),[$t,cr]=N.useState(!1),Pt=N.useRef(0),dr=N.useRef(null),Ze=N.useRef(0),Lt=N.useRef(void 0),qr=N.useRef(0),vn=N.useRef(!1),fr=N.useCallback(async()=>{try{const C=await i.listAssistants();if(ye(C),!U&&C.length>0){const F=C.find(ae=>!ae.assistant_id)||C[0];return Q(F),F.path}return U?.path}catch(C){E(C.message);return}},[i,U,Q,E]),Qe=N.useCallback(async(C,F="",ae)=>{const _e=++Ze.current;Te(!0),Pt.current=0;try{const De=await i.listSessions(C,ei,0,F,ae);if(_e!==Ze.current)return;S(De.sessions),Ce(De.has_more),Pt.current=De.sessions.length}catch(De){if(_e!==Ze.current)return;E(De.message)}finally{_e===Ze.current&&Te(!1)}},[i,S,E]),Us=N.useCallback(async()=>{try{const C=await i.listRecentWorkspaces();M(C)}catch(C){E(C.message)}},[i,E]),Yr=N.useCallback(async C=>{try{const F=await i.setWorkspace(C.path,{remoteConnectionId:C.remote_connection_id,remoteSshHost:C.remote_ssh_host});if(F.success){const ae=F.path||C.path,_e=F.remote_connection_id??C.remote_connection_id,De=F.remote_ssh_host??C.remote_ssh_host,_n={remoteConnectionId:_e,remoteSshHost:De};B({has_workspace:!0,path:ae,project_name:F.project_name||C.name,workspace_kind:_e||De?"remote":void 0,remote_connection_id:_e,remote_ssh_host:De}),T(!1),Qe(ae,K,_n)}else E(F.error||"Failed to set workspace")}catch(F){E(F.message)}},[i,B,E,Qe,K]),pr=N.useCallback(async()=>{try{const C=await i.listRecentWorkspaces(),F=eg(C);if(!F)return!1;const ae=await i.setWorkspace(F.path,{remoteConnectionId:F.remote_connection_id,remoteSshHost:F.remote_ssh_host});if(ae.success){const _e=ae.path||F.path,De=ae.remote_connection_id??F.remote_connection_id,_n=ae.remote_ssh_host??F.remote_ssh_host,ci={remoteConnectionId:De,remoteSshHost:_n};return B({has_workspace:!0,path:_e,project_name:ae.project_name||F.name,workspace_kind:De||_n?"remote":F.workspace_kind,remote_connection_id:De,remote_ssh_host:_n}),await Qe(_e,K,ci),!0}return E(ae.error||d("workspace.failedToSetWorkspace")),!1}catch(C){return E(C.message),!1}},[i,B,E,Qe,K,d]),yn=N.useCallback(async(C,F="",ae)=>{if(V||!de)return;const _e=Ze.current;J(!0);try{const De=await i.listSessions(C,ei,Pt.current,F,ae);if(_e!==Ze.current)return;I(De.sessions),Ce(De.has_more),Pt.current+=De.sessions.length}catch(De){if(_e!==Ze.current)return;E(De.message)}finally{J(!1)}},[i,I,E,V,de]);N.useEffect(()=>{let C=!1;return(async()=>{try{const ae=await i.getWorkspaceInfo();if(C)return;if(ae.workspace_kind==="assistant"&&ae.path)Q({path:ae.path,name:ae.project_name??"Claw",assistant_id:ae.assistant_id}),B(null),fe("assistant"),Lt.current=ae.path,await Qe(ae.path);else{const _e=ae.has_workspace?ae:null;B(_e),_e?.path?(Lt.current=_e.path,await Qe(_e.path,"",{remoteConnectionId:_e.remote_connection_id,remoteSshHost:_e.remote_ssh_host})):await pr()}}catch(ae){C||E(ae.message)}finally{C||W(null)}})(),()=>{C=!0}},[]);const wn=N.useCallback(async()=>{const C=++Ze.current;try{if(ge==="pro"){const F=await i.getWorkspaceInfo();if(F.workspace_kind==="assistant"){B(null),S([]),Ce(!1),Pt.current=0;return}const ae=F.has_workspace?F:null;B(ae);const _e=await i.listSessions(ae?.path,ei,0,K,{remoteConnectionId:ae?.remote_connection_id,remoteSshHost:ae?.remote_ssh_host});if(C!==Ze.current)return;S(_e.sessions),Ce(_e.has_more),Pt.current=_e.sessions.length}else{const F=await i.listSessions(U?.path,ei,0,K);if(C!==Ze.current)return;S(F.sessions),Ce(F.has_more),Pt.current=F.sessions.length}}catch{}},[i,S,B,U?.path,ge,K]);N.useEffect(()=>{const C=setInterval(wn,1e4);return()=>clearInterval(C)},[wn]),N.useEffect(()=>{const C=ge==="assistant"?U?.path:j?.path;if(!C)return;if(Lt.current===C){Lt.current=void 0;return}const F=ge==="assistant"?void 0:{remoteConnectionId:j?.remote_connection_id,remoteSshHost:j?.remote_ssh_host},ae=setTimeout(()=>{Qe(C,K,F)},250);return()=>clearTimeout(ae)},[U?.path,j?.path,j?.remote_connection_id,j?.remote_ssh_host,ge,Qe,K]);const Ht=60,ai=N.useCallback(C=>{const F=dr.current;!F||F.scrollTop>0||$t||(qr.current=C.touches[0].clientY,vn.current=!0)},[$t]),Qn=N.useCallback(C=>{if(!vn.current)return;const F=C.touches[0].clientY-qr.current;F>0?gn(Math.min(F*.5,80)):(vn.current=!1,gn(0))},[]),hr=N.useCallback(async()=>{vn.current&&(vn.current=!1,mn>=Ht&&(cr(!0),gn(Ht),await wn(),cr(!1)),gn(0))},[mn,wn]),mr=N.useCallback(C=>{const F=C.currentTarget;if(F.scrollHeight-F.scrollTop-F.clientHeight<150){const ae=ge==="assistant"?U?.path:j?.path,_e=ge==="assistant"?void 0:{remoteConnectionId:j?.remote_connection_id,remoteSshHost:j?.remote_ssh_host};yn(ae,K,_e)}},[ge,U?.path,j?.path,j?.remote_connection_id,j?.remote_ssh_host,yn,K]),qn=N.useCallback(async C=>{if(!oe){Se(!0);try{const F=ge==="assistant"?U?.path:j?.path,ae=ge==="assistant"?void 0:{remoteConnectionId:j?.remote_connection_id,remoteSshHost:j?.remote_ssh_host},_e=await i.createSession(C,void 0,F,ae);await Qe(F,K,ae);const De=sf(C)?d("sessions.remoteClawSession"):rf(C)?d("sessions.remoteCoworkSession"):d("sessions.remoteCodeSession");a(_e,De,!0)}catch(F){E(F.message)}finally{Se(!1)}}},[oe,j?.path,j?.remote_connection_id,j?.remote_ssh_host,U?.path,ge,Qe,a,K,i,E,d]),Bs=N.useCallback(async C=>{if(fe(C),P(!1),C==="assistant"){const F=await fr();Qe(F,K)}else j?.path?await Qe(j.path,K,{remoteConnectionId:j.remote_connection_id,remoteSshHost:j.remote_ssh_host}):await pr()},[j?.path,Qe,fr,K,pr]),ui=N.useCallback(async C=>{try{await i.setAssistant(C.path),Q(C),P(!1),Qe(C.path,K)}catch(F){E(F.message)}},[i,Q,E,Qe,K]),Os=j?.project_name||d("sessions.noWorkspaceSelected"),Zt=U?.name||d("shared.agents.default"),Vt=ge==="pro";return u.jsxs("div",{className:"session-list",children:[u.jsxs("div",{className:"session-list__header",children:[u.jsxs("div",{className:"session-list__header-brand",children:[u.jsx("img",{src:nf,alt:"BitFun",className:"session-list__logo"}),u.jsxs("div",{className:"session-list__header-copy",children:[u.jsx("h1",{children:d("shared.product.remote")}),O&&u.jsxs("span",{className:"session-list__header-user-id",children:[u.jsx("span",{className:`session-list__health-dot session-list__health-dot--${ne}`,title:(()=>{switch(ne){case"connected":return d("sessions.connectionConnected");case"checking":return d("sessions.connectionChecking");case"unreachable":return d("sessions.connectionUnreachable");default:return d("sessions.connectionUnpaired")}})()}),O,X&&!X.isHome&&X.deviceName&&u.jsx("span",{className:"session-list__header-target",title:d("devices.controllingDevice",{name:X.deviceName}),children:X.deviceName})]})]})]}),u.jsxs("div",{className:"session-list__header-actions",children:[p&&u.jsx("button",{className:`session-list__devices-btn ${X&&!X.isHome?"is-remote":""}`,onClick:p,title:d("devices.title"),"aria-label":d("devices.title"),children:u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2"}),u.jsx("line",{x1:"8",y1:"21",x2:"16",y2:"21"}),u.jsx("line",{x1:"12",y1:"17",x2:"12",y2:"21"})]})}),u.jsx(va,{}),u.jsx("button",{className:"session-list__theme-btn",onClick:ee,"aria-label":d("common.toggleTheme"),children:u.jsx(ng,{isDark:H})}),u.jsx("button",{className:"session-list__disconnect-btn",onClick:()=>It(!0),"aria-label":d("sessions.disconnect"),title:d("sessions.disconnect"),children:u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"}),u.jsx("polyline",{points:"16 17 21 12 16 7"}),u.jsx("line",{x1:"21",y1:"12",x2:"9",y2:"12"})]})})]})]}),u.jsxs("div",{className:"session-list__items",ref:dr,onScroll:mr,onTouchStart:ai,onTouchMove:Qn,onTouchEnd:hr,children:[(mn>0||$t)&&u.jsx("div",{className:"session-list__pull-indicator",style:{height:$t?Ht:mn},children:u.jsx("div",{className:`session-list__pull-spinner${$t||mn>=Ht?" is-active":""}`,children:u.jsx("svg",{width:"18",height:"18",viewBox:"0 0 18 18",fill:"none",style:{transform:`rotate(${mn*4}deg)`,transition:$t?"transform 0s":void 0},children:u.jsx("path",{d:"M9 2V5M9 13V16M2 9H5M13 9H16M4.22 4.22L6.34 6.34M11.66 11.66L13.78 13.78M13.78 4.22L11.66 6.34M6.34 11.66L4.22 13.78",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})})}),Vr&&u.jsxs("button",{type:"button",className:"session-list__resume-card",onClick:C=>hn(w[0],C),onTouchStart:C=>Kn(w[0],C),onTouchMove:Kr,onTouchEnd:Wt,onTouchCancel:Wt,onContextMenu:C=>{C.preventDefault(),le(w[0])},onKeyDown:C=>{(C.key==="Enter"||C.key===" ")&&(C.preventDefault(),a(w[0].session_id,w[0].name))},children:[u.jsx("div",{className:`session-list__item-icon session-list__resume-icon session-list__item-icon--${w[0].agent_type}`,children:u.jsx(Ds,{agentType:w[0].agent_type})}),u.jsxs("div",{className:"session-list__resume-body",children:[u.jsx("div",{className:"session-list__resume-label",children:d("sessions.continueSession")}),u.jsx("div",{className:"session-list__resume-name",children:w[0].name||d("sessions.untitledSession")}),u.jsxs("div",{className:"session-list__resume-meta",children:[u.jsx("span",{className:`session-list__agent-badge session-list__agent-badge--${w[0].agent_type}`,children:Td(w[0].agent_type,d)}),u.jsx("span",{className:"session-list__resume-time",children:Ed(w[0].updated_at,y,d)})]})]}),u.jsx("span",{className:"session-list__resume-arrow",children:u.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:u.jsx("path",{d:"m9 18 6-6-6-6"})})})]}),u.jsxs("div",{className:"session-list__mode-toggle",children:[u.jsxs("button",{className:`session-list__mode-toggle-btn ${Vt?"is-active":""}`,onClick:()=>Bs("pro"),children:[u.jsx(tg,{}),u.jsx("span",{children:d("shared.modes.expert")})]}),u.jsxs("button",{className:`session-list__mode-toggle-btn ${Vt?"":"is-active"}`,onClick:()=>Bs("assistant"),children:[u.jsx(la,{}),u.jsx("span",{children:d("shared.modes.assistant")})]})]}),Vt&&u.jsxs(u.Fragment,{children:[u.jsxs("div",{className:"session-list__workspace-bar",onClick:()=>{Us(),T(!0)},children:[u.jsx("span",{className:"session-list__workspace-icon",children:u.jsx(Pd,{})}),u.jsxs("div",{className:"session-list__workspace-copy",children:[u.jsx("span",{className:"session-list__workspace-label",children:d("shared.features.workspace")}),u.jsx("span",{className:"session-list__workspace-name",title:Os,children:Id(Os,24)})]}),j?.git_branch&&u.jsxs("span",{className:"session-list__workspace-branch",children:[u.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("line",{x1:"6",x2:"6",y1:"3",y2:"15"}),u.jsx("circle",{cx:"18",cy:"6",r:"3"}),u.jsx("circle",{cx:"6",cy:"18",r:"3"}),u.jsx("path",{d:"M18 9a9 9 0 0 1-9 9"})]}),Id(j.git_branch,20)]}),u.jsx("span",{className:"session-list__workspace-switch","aria-label":d("sessions.switchWorkspace"),children:u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("path",{d:"m7 15 5 5 5-5"}),u.jsx("path",{d:"m7 9 5-5 5 5"})]})})]}),v&&u.jsx("div",{className:"session-list__picker-overlay",onClick:()=>T(!1),children:u.jsxs("div",{className:"session-list__picker-modal session-list__picker-modal--workspace",onClick:C=>C.stopPropagation(),children:[u.jsxs("div",{className:"session-list__picker-header",children:[u.jsx("h3",{children:d("sessions.selectWorkspace")}),u.jsx("button",{className:"session-list__picker-close",onClick:()=>T(!1),children:u.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),u.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),u.jsx("div",{className:"session-list__picker-list",children:A.length===0?u.jsx("div",{className:"session-list__picker-empty",children:d("sessions.noWorkspaces")}):A.map((C,F)=>{const ae=j?.path===C.path&&(j?.remote_connection_id??void 0)===(C.remote_connection_id??void 0)&&(j?.remote_ssh_host??void 0)===(C.remote_ssh_host??void 0),_e=[C.remote_connection_id??"local",C.remote_ssh_host??"",C.path||String(F)].join(":");return u.jsxs("button",{className:`session-list__picker-item session-list__picker-item--workspace ${ae?"is-selected":""}`,onClick:()=>Yr(C),children:[u.jsx("span",{className:"session-list__picker-item-icon",children:u.jsx(Pd,{})}),u.jsx("span",{className:"session-list__picker-item-name",children:C.name}),ae&&u.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:u.jsx("polyline",{points:"20 6 9 17 4 12"})})]},_e)})})]})})]}),!Vt&&u.jsxs(u.Fragment,{children:[u.jsxs("div",{className:"session-list__assistant-bar",onClick:()=>{fr(),P(!0)},children:[u.jsx("span",{className:"session-list__assistant-icon",children:u.jsx(la,{})}),u.jsxs("div",{className:"session-list__assistant-copy",children:[u.jsx("span",{className:"session-list__assistant-label",children:d("sessions.assistant")}),u.jsx("span",{className:"session-list__assistant-name",children:Zt})]}),u.jsx("span",{className:"session-list__assistant-switch","aria-label":d("sessions.switchAssistant"),children:u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("path",{d:"m7 15 5 5 5-5"}),u.jsx("path",{d:"m7 9 5-5 5 5"})]})})]}),ve&&u.jsx("div",{className:"session-list__picker-overlay",onClick:()=>P(!1),children:u.jsxs("div",{className:"session-list__picker-modal",onClick:C=>C.stopPropagation(),children:[u.jsxs("div",{className:"session-list__picker-header",children:[u.jsx("h3",{children:d("sessions.selectAssistant")}),u.jsx("button",{className:"session-list__picker-close",onClick:()=>P(!1),children:u.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),u.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),u.jsx("div",{className:"session-list__picker-list",children:we.map((C,F)=>u.jsxs("button",{className:`session-list__picker-item ${U?.path===C.path?"is-selected":""}`,onClick:()=>ui(C),children:[u.jsx("span",{className:"session-list__picker-item-icon",children:u.jsx(la,{})}),u.jsx("span",{className:"session-list__picker-item-name",children:C.name}),U?.path===C.path&&u.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:u.jsx("polyline",{points:"20 6 9 17 4 12"})})]},C.path||F))})]})})]}),u.jsxs("section",{className:`session-list__panel ${Vt?"":"session-list__panel--assistant"}`,children:[u.jsx("div",{className:"session-list__section-head",children:u.jsxs("div",{children:[u.jsx("div",{className:"session-list__section-kicker",children:d("sessions.launch")}),u.jsx("div",{className:"session-list__section-title",children:d("sessions.startRemoteFlow")})]})}),Vt?j?u.jsxs("div",{className:"session-list__create-row",children:[u.jsxs("button",{className:"session-list__create-btn session-list__create-btn--code",onClick:()=>qn("code"),disabled:oe,children:[u.jsx("div",{className:"session-list__create-icon",children:u.jsx(Ds,{agentType:"code"})}),u.jsxs("div",{className:"session-list__create-copy",children:[u.jsx("span",{className:"session-list__create-title",children:d("shared.agents.code")}),u.jsx("span",{className:"session-list__create-desc",children:d("sessions.codeSessionDesc")})]}),u.jsx("span",{className:"session-list__create-arrow",children:u.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:u.jsx("path",{d:"m9 18 6-6-6-6"})})})]}),u.jsxs("button",{className:"session-list__create-btn session-list__create-btn--cowork",onClick:()=>qn("cowork"),disabled:oe,children:[u.jsx("div",{className:"session-list__create-icon",children:u.jsx(Ds,{agentType:"cowork"})}),u.jsxs("div",{className:"session-list__create-copy",children:[u.jsx("span",{className:"session-list__create-title",children:d("shared.agents.cowork")}),u.jsx("span",{className:"session-list__create-desc",children:d("sessions.coworkSessionDesc")})]}),u.jsx("span",{className:"session-list__create-arrow",children:u.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:u.jsx("path",{d:"m9 18 6-6-6-6"})})})]})]}):null:u.jsx("div",{className:"session-list__create-row",children:u.jsxs("button",{className:"session-list__create-btn session-list__create-btn--claw",onClick:()=>qn("claw"),disabled:oe,children:[u.jsx("div",{className:"session-list__create-icon",children:u.jsx(Ds,{agentType:"claw"})}),u.jsxs("div",{className:"session-list__create-copy",children:[u.jsx("span",{className:"session-list__create-title",children:d("sessions.clawSession")}),u.jsx("span",{className:"session-list__create-desc",children:d("sessions.clawSessionDesc")})]}),u.jsx("span",{className:"session-list__create-arrow",children:u.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:u.jsx("path",{d:"m9 18 6-6-6-6"})})})]})})]}),u.jsxs("section",{className:`session-list__panel session-list__panel--sessions ${Vt?"":"session-list__panel--assistant"}`,children:[u.jsxs("div",{className:"session-list__section-head",children:[u.jsxs("div",{children:[u.jsx("div",{className:"session-list__section-kicker",children:d("sessions.recent")}),u.jsx("div",{className:"session-list__section-title",children:d("sessions.sessionHistory")})]}),u.jsx("div",{className:"session-list__section-meta",children:d("common.itemCount",{count:w.length})})]}),u.jsxs("div",{className:"session-list__search",children:[u.jsxs("svg",{className:"session-list__search-icon",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("circle",{cx:"11",cy:"11",r:"8"}),u.jsx("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]}),u.jsx("input",{className:"session-list__search-input",type:"search",placeholder:d("sessions.searchSessions"),value:K,onChange:C=>te(C.target.value),enterKeyHint:"search"}),K&&u.jsx("button",{className:"session-list__search-clear",onClick:()=>te(""),"aria-label":"Clear",children:u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),u.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),xe&&w.length===0&&u.jsx("div",{className:"session-list__empty",children:d("sessions.loadingSessions")}),!xe&&w.length===0&&!ur&&u.jsx("div",{className:"session-list__empty",children:d("sessions.noSessions")}),!xe&&w.length===0&&ur&&u.jsx("div",{className:"session-list__empty",children:d("sessions.emptySearch")}),u.jsx("div",{className:"session-list__cards",children:w.slice(Vr?1:0).map(C=>u.jsxs("div",{className:`session-list__item${ie?.session_id===C.session_id?" session-list__item--active":""}`,onClick:F=>hn(C,F),onTouchStart:F=>Kn(C,F),onTouchMove:Kr,onTouchEnd:Wt,onTouchCancel:Wt,onContextMenu:F=>{F.preventDefault(),le(C)},children:[u.jsx("div",{className:`session-list__item-icon session-list__item-icon--${C.agent_type}`,children:u.jsx(Ds,{agentType:C.agent_type})}),u.jsxs("div",{className:"session-list__item-body",children:[u.jsxs("div",{className:"session-list__item-top",children:[u.jsx("div",{className:"session-list__item-name",children:C.name||d("sessions.untitledSession")}),u.jsx("span",{className:`session-list__agent-badge session-list__agent-badge--${C.agent_type}`,children:Td(C.agent_type,d)})]}),u.jsx("div",{className:"session-list__item-time",children:Ed(C.updated_at,y,d)})]})]},C.session_id))}),V&&u.jsx("div",{className:"session-list__load-more",children:d("sessions.loadingMore")})]})]}),ie&&!pe&&!Oe&&u.jsx("div",{className:"session-list__menu-overlay",onClick:()=>le(null),children:u.jsxs("div",{className:"session-list__menu-sheet",onClick:C=>C.stopPropagation(),children:[u.jsx("div",{className:"session-list__menu-handle"}),u.jsx("div",{className:"session-list__menu-title",children:ie.name||d("sessions.untitledSession")}),u.jsxs("div",{className:"session-list__menu-actions",children:[u.jsxs("button",{className:"session-list__menu-btn",onClick:()=>{ce(ie),Be(ie.name||"")},children:[u.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("path",{d:"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"}),u.jsx("path",{d:"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"})]}),u.jsx("span",{children:d("sessions.renameSession")})]}),u.jsxs("button",{className:"session-list__menu-btn session-list__menu-btn--danger",onClick:()=>je(ie),children:[u.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("polyline",{points:"3 6 5 6 21 6"}),u.jsx("path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"})]}),u.jsx("span",{children:d("sessions.deleteSession")})]})]}),u.jsx("button",{className:"session-list__menu-cancel",onClick:()=>le(null),children:d("sessions.cancel")})]})}),pe&&u.jsx("div",{className:"session-list__picker-overlay",onClick:()=>!be&&ce(null),children:u.jsxs("div",{className:"session-list__rename-modal",onClick:C=>C.stopPropagation(),children:[u.jsx("h3",{className:"session-list__rename-title",children:d("sessions.renameTitle")}),u.jsx("input",{className:"session-list__rename-input",type:"text",value:me,onChange:C=>Be(C.target.value),placeholder:d("sessions.sessionNamePlaceholder"),autoFocus:!0,onKeyDown:C=>{C.key==="Enter"&&br(),C.key==="Escape"&&ce(null)}}),u.jsxs("div",{className:"session-list__rename-actions",children:[u.jsx("button",{className:"session-list__rename-btn session-list__rename-btn--cancel",onClick:()=>ce(null),disabled:be,children:d("sessions.cancel")}),u.jsx("button",{className:"session-list__rename-btn session-list__rename-btn--save",onClick:br,disabled:be||!me.trim(),children:be?"...":d("sessions.save")})]})]})}),Oe&&u.jsx("div",{className:"session-list__picker-overlay",onClick:()=>!Pe&&je(null),onKeyDown:C=>{C.key==="Escape"&&je(null),C.key==="Enter"&&!Pe&&Qr()},children:u.jsxs("div",{className:"session-list__confirm-modal",onClick:C=>C.stopPropagation(),children:[u.jsx("div",{className:"session-list__confirm-icon",children:u.jsxs("svg",{width:"28",height:"28",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("circle",{cx:"12",cy:"12",r:"10"}),u.jsx("line",{x1:"12",y1:"8",x2:"12",y2:"12"}),u.jsx("line",{x1:"12",y1:"16",x2:"12.01",y2:"16"})]})}),u.jsx("h3",{className:"session-list__confirm-title",children:d("sessions.confirmDelete")}),u.jsxs("p",{className:"session-list__confirm-desc",children:['"',Oe.name||d("sessions.untitledSession"),'"',u.jsx("br",{}),d("sessions.confirmDeleteDesc")]}),u.jsxs("div",{className:"session-list__confirm-actions",children:[u.jsx("button",{className:"session-list__confirm-btn session-list__confirm-btn--cancel",onClick:()=>je(null),disabled:Pe,children:d("sessions.cancel")}),u.jsx("button",{className:"session-list__confirm-btn session-list__confirm-btn--danger",onClick:Qr,disabled:Pe,children:Pe?"...":d("sessions.deleteSession")})]})]})}),$n&&u.jsx("div",{className:"session-list__picker-overlay",role:"alertdialog","aria-modal":"true","aria-labelledby":"disconnect-confirm-title","aria-describedby":"disconnect-confirm-desc",onClick:()=>It(!1),onKeyDown:C=>{C.key==="Escape"&&It(!1)},children:u.jsxs("div",{className:"session-list__confirm-modal",onClick:C=>C.stopPropagation(),children:[u.jsx("div",{className:"session-list__confirm-icon",children:u.jsxs("svg",{width:"28",height:"28",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"}),u.jsx("polyline",{points:"16 17 21 12 16 7"}),u.jsx("line",{x1:"21",y1:"12",x2:"9",y2:"12"})]})}),u.jsx("h3",{id:"disconnect-confirm-title",className:"session-list__confirm-title",children:d("sessions.disconnect")}),u.jsx("p",{id:"disconnect-confirm-desc",className:"session-list__confirm-desc",children:d("sessions.disconnectConfirm")}),u.jsxs("div",{className:"session-list__confirm-actions",children:[u.jsx("button",{className:"session-list__confirm-btn session-list__confirm-btn--cancel",onClick:()=>It(!1),autoFocus:!0,children:d("common.cancel")}),u.jsx("button",{className:"session-list__confirm-btn session-list__confirm-btn--danger",onClick:()=>{It(!1),f()},children:d("sessions.disconnect")})]})]})}),lt&&u.jsx("div",{className:"session-list__toast",role:"alert","aria-live":"assertive",children:lt})]})},sg=()=>u.jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:u.jsx("path",{d:"m15 18-6-6 6-6"})}),og=()=>u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"}),u.jsx("path",{d:"M21 3v5h-5"}),u.jsx("path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"}),u.jsx("path",{d:"M3 21v-5h5"})]}),ig=()=>u.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2"}),u.jsx("line",{x1:"8",y1:"21",x2:"16",y2:"21"}),u.jsx("line",{x1:"12",y1:"17",x2:"12",y2:"21"})]}),lg=()=>u.jsxs("svg",{width:"40",height:"40",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("circle",{cx:"12",cy:"8",r:"4"}),u.jsx("path",{d:"M6 21v-1a6 6 0 0 1 9-5.2"}),u.jsx("circle",{cx:"18",cy:"18",r:"4"}),u.jsx("path",{d:"M18 16.5v1.8l1.2 1.2"})]}),ag=({client:i,onBack:a})=>{const{t:l}=Hr(),{setControlTarget:f,resetForDeviceSwitch:p}=Ft(),[d,y]=N.useState([]),[w,S]=N.useState(i.hasDelegatedIdentity),[I,E]=N.useState(!i.hasDelegatedIdentity),[j,B]=N.useState(!1),[U,Q]=N.useState(null),[W,O]=N.useState(null),ne=N.useRef(!0),X=N.useMemo(()=>[...d].sort((V,J)=>{const de=V.device_id===i.pairedDeviceId,Ce=J.device_id===i.pairedDeviceId;return de!==Ce?de?-1:1:V.online!==J.online?V.online?-1:1:(V.device_name||V.device_id).localeCompare(J.device_name||J.device_id)}),[i.pairedDeviceId,d]),H=N.useCallback((V,J)=>{const de=String(V?.message||V);return de.includes("HTTP 401")||de.includes("No delegated identity")?l("devices.authorizationExpired"):de.includes("HTTP 404")||de.includes("HTTP 503")||de.includes("HTTP 504")?l("devices.deviceUnavailable"):l(J)},[l]);N.useEffect(()=>(ne.current=!0,()=>{ne.current=!1}),[]);const ee=N.useCallback(async()=>{if(i.hasDelegatedIdentity)try{const V=await i.listDevices();if(!ne.current)return;y(V),O(null),S(!0)}catch(V){if(!ne.current)return;String(V?.message||V).includes("No delegated identity")?(S(!1),y([])):O(H(V,"devices.loadFailed"))}},[i,H]),oe=N.useCallback(async(V=!1)=>{E(!0),O(null);let J=!1;try{J=await i.requestDelegatedIdentity({force:V||!i.hasDelegatedIdentity})}catch(de){J=!1,ne.current&&O(H(de,"devices.identityFailed"))}return ne.current&&(S(J),E(!1)),J},[i,H]);N.useEffect(()=>{let V;return(async()=>!await oe(!1)||!ne.current||(B(!0),await ee(),ne.current&&B(!1),V=setInterval(ee,3e4)))(),()=>{V&&clearInterval(V)}},[oe,ee]);const Se=N.useCallback(async()=>{j||U||!await oe(!0)||(B(!0),await ee(),ne.current&&B(!1))},[oe,j,ee,U]),xe=N.useCallback(async V=>{if(!(!V.online||U)&&i.pairedDeviceId!==V.device_id){Q(V.device_id),O(null);try{const J=await i.sendDeviceRpc(V.device_id,{cmd:"host_invoke",command:"peer_mode_ping",args:{}});if(J.resp==="host_invoke_result"&&J.ok===!1)throw new Error(J.error||l("devices.switchFailed"));i.pairedDeviceId=V.device_id,p(),f({deviceId:V.device_id,deviceName:V.device_name,isHome:V.device_id===i.homeDeviceId}),a()}catch(J){if(!ne.current)return;String(J?.message||J).includes("No delegated identity")?(S(!1),y([])):O(H(J,"devices.switchFailed"))}finally{ne.current&&Q(null)}}},[i,H,a,p,f,U,l]),Te=()=>I?u.jsxs("div",{className:"devices-page__loading",children:[u.jsx("span",{className:"spinner"}),l("devices.loading")]}):w?j&&d.length===0?u.jsxs("div",{className:"devices-page__loading",children:[u.jsx("span",{className:"spinner"}),l("devices.loading")]}):d.length===0?u.jsx("div",{className:"devices-page__empty",children:l("devices.noDevices")}):u.jsx("div",{className:"devices-page__list",children:X.map(V=>{const J=i.pairedDeviceId===V.device_id,de=i.homeDeviceId===V.device_id,Ce=U===V.device_id,ge=V.online&&!J&&!U;return u.jsxs("button",{type:"button",className:["devices-page__device",V.online?"is-online":"is-offline",J?"is-current":"",Ce?"is-switching":""].filter(Boolean).join(" "),disabled:!ge,onClick:()=>ge&&xe(V),children:[u.jsx("span",{className:"devices-page__device-icon",children:u.jsx(ig,{})}),u.jsxs("span",{className:"devices-page__device-copy",children:[u.jsxs("span",{className:"devices-page__device-name-row",children:[u.jsx("span",{className:"devices-page__device-name",children:V.device_name||l("devices.unknownDevice")}),J&&u.jsx("span",{className:"devices-page__badge devices-page__badge--current",children:l("devices.current")}),de&&!J&&u.jsx("span",{className:"devices-page__badge",children:l("devices.pairedDesktop")})]}),u.jsxs("span",{className:"devices-page__device-meta",children:[u.jsx("span",{className:`devices-page__status-dot ${V.online?"is-online":"is-offline"}`}),V.online?l("devices.online"):l("devices.offline"),u.jsx("span",{className:"devices-page__device-id",children:V.device_id.slice(0,8)})]})]}),Ce?u.jsx("span",{className:"devices-page__device-spinner spinner"}):ge&&u.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:u.jsx("path",{d:"m9 18 6-6-6-6"})})]},V.device_id)})}):u.jsxs("div",{className:"devices-page__empty-card",children:[u.jsx("span",{className:"devices-page__empty-icon",children:u.jsx(lg,{})}),u.jsx("p",{className:"devices-page__empty-text",children:l("devices.noDelegatedIdentity")}),u.jsx("button",{type:"button",className:"devices-page__retry-btn",onClick:Se,children:l("devices.retry")})]});return u.jsxs("div",{className:"devices-page",children:[u.jsxs("div",{className:"devices-page__header",children:[u.jsx("button",{type:"button",className:"devices-page__back-btn",onClick:a,"aria-label":l("common.back"),children:u.jsx(sg,{})}),u.jsx("h2",{className:"devices-page__title",children:l("devices.title")}),u.jsx("button",{type:"button",className:`devices-page__refresh-btn ${j||I?"is-loading":""}`,onClick:Se,disabled:j||!!U,"aria-label":l("devices.refresh"),title:l("devices.refresh"),children:u.jsx(og,{})})]}),W&&u.jsx("div",{className:"devices-page__error",children:W}),u.jsx("div",{className:"devices-page__body",children:Te()})]})};class ug extends Wr.Component{constructor(a){super(a),this.state={hasError:!1,error:null}}static getDerivedStateFromError(a){return{hasError:!0,error:a}}componentDidCatch(a,l){console.error("[ErrorBoundary]",a.message,l.componentStack)}handleRetry=()=>{this.setState({hasError:!1,error:null})};render(){return this.state.hasError?u.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100%",padding:"32px",textAlign:"center",background:"var(--color-bg-primary)",color:"var(--color-text-primary)",fontFamily:"system-ui, sans-serif"},children:[u.jsx("div",{style:{fontSize:"48px",marginBottom:"16px"},children:"⚠"}),u.jsx("h2",{style:{fontSize:"18px",fontWeight:600,margin:"0 0 8px"},children:"Something went wrong"}),u.jsx("p",{style:{fontSize:"13px",color:"var(--color-text-muted)",margin:"0 0 24px",maxWidth:"280px"},children:this.state.error?.message||"An unexpected error occurred."}),u.jsx("button",{onClick:this.handleRetry,style:{padding:"12px 32px",border:"none",borderRadius:"14px",background:"var(--color-accent-500)",color:"var(--btn-primary-color)",fontSize:"15px",fontWeight:600,cursor:"pointer"},children:"Retry"})]}):this.props.children}}const cg=15e3,dg=1e4;function fg(i,a){let l;return Promise.race([i.ping(),new Promise((f,p)=>{l=setTimeout(()=>p(new Error("ping timeout")),a)})]).finally(()=>{l&&clearTimeout(l)})}function pg(i){const a=Ft(f=>f.setConnectionHealth),l=N.useRef();N.useEffect(()=>{let f=!1;if(!i){a("unpaired");return}a("checking");const p=async()=>{try{await fg(i,dg),f||a("connected")}catch{f||a("unreachable")}f||(l.current=setTimeout(p,cg))};return p(),()=>{f=!0,l.current&&clearTimeout(l.current)}},[i,a])}const aa=300,hg=N.lazy(()=>ih(()=>import("./ChatPage-BFmDVI_t.js"),[],import.meta.url));function ti(i,a,l,f){return f?a===i?l==="push"?"nav-push-enter":"nav-pop-enter":l==="push"?"nav-push-exit":"nav-pop-exit":""}const mg=()=>{const{t:i}=Hr(),[a,l]=N.useState("pairing"),[f,p]=N.useState(null),[d,y]=N.useState("Session"),[w,S]=N.useState(!1),I=Ft(P=>P.connectionHealth),E=N.useRef(null),j=N.useRef(null),[B,U]=N.useState(null);pg(B);const[Q,W]=N.useState(null),[O,ne]=N.useState(null),X=N.useRef(),H=N.useRef(["pairing"]),ee=N.useRef(!1),oe=N.useCallback((P,A)=>{l(M=>(ne(M),P)),W(A),clearTimeout(X.current),X.current=setTimeout(()=>{ne(null),W(null)},aa),A==="push"?(H.current=[...H.current,P],ee.current||history.pushState({page:P},"")):A==="pop"&&(H.current=H.current.slice(0,-1),ee.current||history.back())},[]);N.useEffect(()=>()=>clearTimeout(X.current),[]),N.useEffect(()=>{const P=A=>{const v=A.target.closest("a");if(v&&v.href){const T=v.href;(T.startsWith("http://")||T.startsWith("https://"))&&(A.preventDefault(),A.stopPropagation(),window.open(T,"_blank","noopener,noreferrer"))}};return document.addEventListener("click",P,!0),()=>{document.removeEventListener("click",P,!0)}},[]);const Se=N.useCallback((P,A)=>{E.current=P,j.current=A,U(A),H.current=["pairing","sessions"],history.pushState({page:"sessions"},""),l("sessions")},[]),xe=N.useCallback(()=>{oe("sessions","pop"),setTimeout(()=>p(null),aa)},[oe]),Te=N.useCallback(()=>{oe("sessions","pop")},[oe]),V=N.useCallback(()=>{oe("sessions","pop")},[oe]);N.useEffect(()=>{const P=()=>{const A=H.current,M=A[A.length-1];if(M==="pairing"||M==="sessions"){history.pushState({page:M},"");return}ee.current=!0;try{M==="chat"?xe():M==="workspace"?Te():M==="devices"&&V()}finally{ee.current=!1}};return window.addEventListener("popstate",P),()=>window.removeEventListener("popstate",P)},[xe,Te,V]);const J=N.useCallback(()=>{oe("workspace","push")},[oe]),de=N.useCallback(()=>{oe("sessions","pop")},[oe]),Ce=N.useCallback((P,A,M)=>{p(P),y(A||"Session"),S(!!M),oe("chat","push")},[oe]),ge=N.useCallback(()=>{oe("sessions","pop"),setTimeout(()=>p(null),aa)},[oe]),fe=N.useCallback(()=>{E.current=null,j.current=null,U(null),p(null),y("Session"),S(!1),ne(null),W(null),clearTimeout(X.current),localStorage.removeItem("bitfun.mobile.user_id"),Ft.getState().resetConnectionState(),H.current=["pairing"],l("pairing")},[]),we=Q!==null,ye=a,ve=P=>ye===P||we&&O===P;return u.jsxs("div",{className:"mobile-app",children:[I==="unreachable"&&a!=="pairing"&&u.jsxs("div",{className:"mobile-reconnect-banner",role:"alert",children:[u.jsx("span",{className:"mobile-reconnect-spinner"}),u.jsx("span",{children:i("sessions.reconnecting")}),u.jsx("button",{type:"button",onClick:fe,children:i("sessions.repair")})]}),a==="pairing"&&u.jsx(Xm,{onPaired:Se}),ve("workspace")&&j.current&&u.jsx("div",{className:`nav-page ${ti("workspace",ye,Q,we)}`,children:u.jsx(Jm,{sessionMgr:j.current,onReady:de})}),ve("devices")&&E.current&&u.jsx("div",{className:`nav-page ${ti("devices",ye,Q,we)}`,children:u.jsx(ag,{client:E.current,onBack:V})}),ve("sessions")&&j.current&&u.jsx("div",{className:`nav-page ${ti("sessions",ye,Q,we)}`,children:u.jsx(rg,{sessionMgr:j.current,onSelectSession:Ce,onOpenWorkspace:J,onDisconnect:fe,onOpenDevices:()=>oe("devices","push")})}),ve("chat")&&j.current&&f&&u.jsx("div",{className:`nav-page ${ti("chat",ye,Q,we)}`,children:u.jsx(N.Suspense,{fallback:u.jsx("div",{className:"spinner","aria-hidden":"true"}),children:u.jsx(hg,{sessionMgr:j.current,sessionId:f,sessionName:d,onBack:ge,autoFocus:w})})})]})},gg=()=>u.jsx(Vm,{children:u.jsx(ug,{children:u.jsx(wh,{children:u.jsx(mg,{})})})});rh.createRoot(document.getElementById("root")).render(u.jsx(Wr.StrictMode,{children:u.jsx(gg,{})}));export{Wr as R,yg as S,ih as _,Ft as a,tf as b,vg as c,Ld as g,u as j,ph as m,N as r,Hr as u}; diff --git a/src/apps/relay-server/static/index.html b/src/apps/relay-server/static/index.html index f7c493e08d..a0e4dd7c35 100644 --- a/src/apps/relay-server/static/index.html +++ b/src/apps/relay-server/static/index.html @@ -3,14 +3,20 @@ - + + + + + BitFun Remote - - + +
diff --git a/src/apps/relay-server/tests/library_compat.rs b/src/apps/relay-server/tests/library_compat.rs index ca180f2bbb..48aa0309de 100644 --- a/src/apps/relay-server/tests/library_compat.rs +++ b/src/apps/relay-server/tests/library_compat.rs @@ -28,8 +28,10 @@ fn legacy_library_path_exposes_supported_relay_api() { start_time: Instant::now(), asset_store: Arc::new(MemoryAssetStore::new()), db: None, + page_data: None, login_rate_limiter: Arc::new(routes::auth::LoginRateLimiter::new()), device_manager: relay::DeviceManager::new(), + cors_allow_origins: Arc::new(Vec::new()), }; fn require_store() {} diff --git a/src/crates/assembly/core/src/service/remote_connect/mod.rs b/src/crates/assembly/core/src/service/remote_connect/mod.rs index 8cbcb66df3..29eb417338 100644 --- a/src/crates/assembly/core/src/service/remote_connect/mod.rs +++ b/src/crates/assembly/core/src/service/remote_connect/mod.rs @@ -48,8 +48,8 @@ pub mod sync_state { } pub use account::{ - AccountClient, AccountSession, DelegateToken, DelegatedIdentity, FetchedSession, KdfParams, - ListedSessionEntry, SettingsBlob, + validate_relay_base_url, AccountClient, AccountSession, DelegateToken, DelegatedIdentity, + FetchedSession, KdfParams, ListedSessionEntry, SettingsBlob, }; pub use device::DeviceIdentity; pub use encryption::{decrypt_from_base64, encrypt_to_base64, KeyPair}; @@ -375,6 +375,12 @@ impl RemoteConnectService { trusted_mobile_identity: &Arc>>, local_device_id: &str, ) -> remote_server::RemoteResponse { + let trusted_identity = trusted_mobile_identity.read().await.clone(); + let Some(trusted_identity) = trusted_identity else { + return remote_server::RemoteResponse::Error { + message: "Pairing authorization expired; scan a new QR code".to_string(), + }; + }; let provider = delegated_identity_fn.read().await.clone(); let Some(get_identity) = provider else { return remote_server::RemoteResponse::Error { @@ -386,17 +392,11 @@ impl RemoteConnectService { message: "Desktop is not logged into a BitFun account".to_string(), }; }; - let user_id = trusted_mobile_identity - .read() - .await - .as_ref() - .map(|identity| identity.user_id.clone()) - .unwrap_or_default(); use base64::{engine::general_purpose::STANDARD as B64, Engine}; info!("Delegated identity resolved for paired client"); remote_server::RemoteResponse::DelegateIdentity { token, - user_id, + user_id: trusted_identity.user_id, master_key: B64.encode(master_key), device_id: local_device_id.to_string(), } @@ -513,8 +513,14 @@ impl RemoteConnectService { *self.ngrok_tunnel.write().await = Some(tunnel); url } - ConnectionMethod::BitfunServer => self.config.bitfun_server_url.clone(), - ConnectionMethod::CustomServer { url } => url.clone(), + ConnectionMethod::BitfunServer => validate_relay_base_url(&self.config.bitfun_server_url)? + .as_str() + .trim_end_matches('/') + .to_string(), + ConnectionMethod::CustomServer { url } => validate_relay_base_url(url)? + .as_str() + .trim_end_matches('/') + .to_string(), _ => unreachable!(), }; @@ -696,7 +702,7 @@ impl RemoteConnectService { match server.decrypt_command(&encrypted_data, &nonce) { Ok((cmd, request_id)) => { handled_as_active_command = true; - debug!("Remote command: {cmd:?}"); + debug!("Remote command decrypted"); let response = if matches!( cmd, remote_server::RemoteCommand::GetDelegatedIdentity @@ -752,6 +758,17 @@ impl RemoteConnectService { if let Ok(response) = serde_json::from_str::(&json) { + if let Err(error) = response.validate_untrusted() { + drop(p); + RemoteConnectService::send_pairing_error_response( + &relay_arc, + &correlation_id, + &shared_secret, + format!("Invalid pairing response: {error}"), + ) + .await; + continue; + } let canonical_user_id = match RemoteConnectService::resolve_pairing_user_id( &account_pairing_verifier_arc, &response, @@ -761,6 +778,11 @@ impl RemoteConnectService { Ok(user_id) => user_id, Err(message) => { drop(p); + pairing_arc + .write() + .await + .retry_after_identity_rejection() + .await; RemoteConnectService::send_pairing_error_response( &relay_arc, &correlation_id, @@ -786,6 +808,11 @@ impl RemoteConnectService { Ok(identity) => identity, Err(message) => { drop(p); + pairing_arc + .write() + .await + .retry_after_identity_rejection() + .await; RemoteConnectService::send_pairing_error_response( &relay_arc, &correlation_id, @@ -1496,6 +1523,7 @@ impl RemoteConnectService { #[cfg(test)] mod tests { use super::*; + use std::sync::atomic::{AtomicBool, Ordering}; fn pairing_response(user_id: Option<&str>, password: Option<&str>) -> pairing::PairingResponse { pairing::PairingResponse { @@ -1600,4 +1628,60 @@ mod tests { .await .is_err()); } + + #[tokio::test] + async fn delegated_identity_requires_a_trusted_pairing_before_minting_credentials() { + let provider_called = Arc::new(AtomicBool::new(false)); + let called = provider_called.clone(); + let provider: DelegatedIdentityFn = Arc::new(move || { + let called = called.clone(); + Box::pin(async move { + called.store(true, Ordering::SeqCst); + Some(("account-token".to_string(), [7_u8; 32], "relay".to_string())) + }) + }); + let provider = Arc::new(RwLock::new(Some(provider))); + let trusted = Arc::new(RwLock::new(None)); + + let response = RemoteConnectService::resolve_delegated_identity_response( + &provider, + &trusted, + "desktop-1", + ) + .await; + + assert!(matches!( + response, + remote_server::RemoteResponse::Error { .. } + )); + assert!(!provider_called.load(Ordering::SeqCst)); + } + + #[tokio::test] + async fn delegated_identity_uses_the_account_bound_during_pairing() { + let provider: DelegatedIdentityFn = Arc::new(|| { + Box::pin(async { Some(("account-token".to_string(), [7_u8; 32], "relay".to_string())) }) + }); + let provider = Arc::new(RwLock::new(Some(provider))); + let trusted = Arc::new(RwLock::new(Some(TrustedMobileIdentity { + mobile_install_id: "install-1".to_string(), + user_id: "paired-user".to_string(), + }))); + + let response = RemoteConnectService::resolve_delegated_identity_response( + &provider, + &trusted, + "desktop-1", + ) + .await; + + assert!(matches!( + response, + remote_server::RemoteResponse::DelegateIdentity { + user_id, + device_id, + .. + } if user_id == "paired-user" && device_id == "desktop-1" + )); + } } diff --git a/src/crates/services/relay-service/Cargo.toml b/src/crates/services/relay-service/Cargo.toml index 999eb345de..5134e90459 100644 --- a/src/crates/services/relay-service/Cargo.toml +++ b/src/crates/services/relay-service/Cargo.toml @@ -26,6 +26,7 @@ dashmap = "6" rand = "0.8" base64 = "0.22" sha2 = "0.10" +subtle = "2" # The relay stores encrypted blobs and password-derived hashes, not master keys. sqlx = { version = "0.8", default-features = false, features = ["runtime-tokio", "sqlite", "macros"] } diff --git a/src/crates/services/relay-service/src/db.rs b/src/crates/services/relay-service/src/db.rs index 1654ff9091..ef1b44ac9e 100644 --- a/src/crates/services/relay-service/src/db.rs +++ b/src/crates/services/relay-service/src/db.rs @@ -6,9 +6,10 @@ use anyhow::{anyhow, Result}; use chrono::Utc; -use sqlx::sqlite::{SqliteConnectOptions, SqlitePoolOptions}; +use sqlx::sqlite::{SqliteConnectOptions, SqliteJournalMode, SqlitePoolOptions, SqliteSynchronous}; use sqlx::{Pool, Sqlite}; use std::str::FromStr; +use std::time::Duration; pub type DbPool = Pool; @@ -27,19 +28,22 @@ CREATE TABLE IF NOT EXISTS users ( updated_at INTEGER NOT NULL ); CREATE TABLE IF NOT EXISTS devices ( - device_id TEXT PRIMARY KEY, - user_id TEXT NOT NULL REFERENCES users(user_id), + device_id TEXT NOT NULL, + user_id TEXT NOT NULL REFERENCES users(user_id) ON DELETE CASCADE, device_name TEXT, public_key TEXT, last_seen_at INTEGER, - online INTEGER NOT NULL DEFAULT 0 + online INTEGER NOT NULL DEFAULT 0, + PRIMARY KEY (user_id, device_id) ); CREATE TABLE IF NOT EXISTS auth_tokens ( token TEXT PRIMARY KEY, - user_id TEXT NOT NULL REFERENCES users(user_id), - device_id TEXT NOT NULL REFERENCES devices(device_id), + user_id TEXT NOT NULL REFERENCES users(user_id) ON DELETE CASCADE, + device_id TEXT NOT NULL, + token_kind TEXT NOT NULL DEFAULT 'device', created_at INTEGER NOT NULL, - expires_at INTEGER NOT NULL + expires_at INTEGER NOT NULL, + FOREIGN KEY (user_id, device_id) REFERENCES devices(user_id, device_id) ON DELETE CASCADE ); CREATE INDEX IF NOT EXISTS idx_auth_tokens_user ON auth_tokens(user_id); CREATE INDEX IF NOT EXISTS idx_devices_user ON devices(user_id); @@ -111,10 +115,18 @@ const MIGRATE_PAGES_DEPLOYED_VERSION: &str = r#" ALTER TABLE pages ADD COLUMN deployed_version_id TEXT; "#; +const MIGRATE_AUTH_TOKEN_KIND: &str = r#" +ALTER TABLE auth_tokens ADD COLUMN token_kind TEXT NOT NULL DEFAULT 'device'; +"#; + /// Open (or create) the SQLite database and ensure the schema exists. pub async fn connect(db_path: &str) -> Result { - let options = - SqliteConnectOptions::from_str(&format!("sqlite://{db_path}"))?.create_if_missing(true); + let options = SqliteConnectOptions::from_str(&format!("sqlite://{db_path}"))? + .create_if_missing(true) + .foreign_keys(true) + .journal_mode(SqliteJournalMode::Wal) + .synchronous(SqliteSynchronous::Normal) + .busy_timeout(Duration::from_secs(5)); let pool = SqlitePoolOptions::new() .max_connections(8) .connect_with(options) @@ -124,10 +136,137 @@ pub async fn connect(db_path: &str) -> Result { let _ = sqlx::query(MIGRATE_PAGES_DEPLOYED_VERSION) .execute(&pool) .await; + // Existing tokens predate delegation scopes and are full device tokens. + if let Err(error) = sqlx::query(MIGRATE_AUTH_TOKEN_KIND).execute(&pool).await { + if !error.to_string().contains("duplicate column name") { + return Err(anyhow!("migrate auth token capabilities: {error}")); + } + } + migrate_account_scoped_devices(&pool).await?; + let now = Utc::now().timestamp(); + sqlx::query("DELETE FROM auth_tokens WHERE expires_at <= ?") + .bind(now) + .execute(&pool) + .await + .map_err(|e| anyhow!("clean expired auth tokens: {e}"))?; + // Online presence is owned by the in-memory connection registry. A fresh + // process has no live sockets, so never carry stale online flags across a + // restart or crash. + sqlx::query("UPDATE devices SET online = 0") + .execute(&pool) + .await + .map_err(|e| anyhow!("reset stale device presence: {e}"))?; tracing::info!("Account database initialized at {db_path}"); Ok(pool) } +/// Migrate the original globally-keyed `devices(device_id)` table to the +/// account-scoped `(user_id, device_id)` identity model. A physical install id +/// is intentionally stable across logins, so it must be legal for two accounts +/// to register the same value without one account reassigning the other's row. +async fn migrate_account_scoped_devices(pool: &DbPool) -> Result<()> { + let columns = sqlx::query("PRAGMA table_info(devices)") + .fetch_all(pool) + .await + .map_err(|e| anyhow!("inspect devices schema: {e}"))?; + let mut user_pk_order = 0_i64; + let mut device_pk_order = 0_i64; + for column in columns { + let name: String = sqlx::Row::get(&column, "name"); + let pk_order: i64 = sqlx::Row::get(&column, "pk"); + match name.as_str() { + "user_id" => user_pk_order = pk_order, + "device_id" => device_pk_order = pk_order, + _ => {} + } + } + if user_pk_order == 1 && device_pk_order == 2 { + return Ok(()); + } + + let mut tx = pool + .begin() + .await + .map_err(|e| anyhow!("begin account-scoped device migration: {e}"))?; + sqlx::query("ALTER TABLE auth_tokens RENAME TO auth_tokens_legacy") + .execute(&mut *tx) + .await + .map_err(|e| anyhow!("rename legacy auth_tokens: {e}"))?; + sqlx::query("ALTER TABLE devices RENAME TO devices_legacy") + .execute(&mut *tx) + .await + .map_err(|e| anyhow!("rename legacy devices: {e}"))?; + sqlx::query( + "CREATE TABLE devices (\ + device_id TEXT NOT NULL,\ + user_id TEXT NOT NULL REFERENCES users(user_id) ON DELETE CASCADE,\ + device_name TEXT, public_key TEXT, last_seen_at INTEGER,\ + online INTEGER NOT NULL DEFAULT 0,\ + PRIMARY KEY (user_id, device_id)\ + )", + ) + .execute(&mut *tx) + .await + .map_err(|e| anyhow!("create account-scoped devices: {e}"))?; + sqlx::query( + "CREATE TABLE auth_tokens (\ + token TEXT PRIMARY KEY,\ + user_id TEXT NOT NULL REFERENCES users(user_id) ON DELETE CASCADE,\ + device_id TEXT NOT NULL,\ + token_kind TEXT NOT NULL DEFAULT 'device',\ + created_at INTEGER NOT NULL, expires_at INTEGER NOT NULL,\ + FOREIGN KEY (user_id, device_id)\ + REFERENCES devices(user_id, device_id) ON DELETE CASCADE\ + )", + ) + .execute(&mut *tx) + .await + .map_err(|e| anyhow!("create scoped auth_tokens: {e}"))?; + sqlx::query( + "INSERT INTO devices \ + (device_id, user_id, device_name, public_key, last_seen_at, online) \ + SELECT device_id, user_id, device_name, public_key, last_seen_at, online \ + FROM devices_legacy", + ) + .execute(&mut *tx) + .await + .map_err(|e| anyhow!("copy legacy devices: {e}"))?; + // Discard any historically inconsistent token whose user_id no longer + // matches the device row. Such a token could only arise from the old global + // upsert behavior and must not survive the ownership migration. + sqlx::query( + "INSERT INTO auth_tokens \ + (token, user_id, device_id, token_kind, created_at, expires_at) \ + SELECT a.token, a.user_id, a.device_id, a.token_kind, a.created_at, a.expires_at \ + FROM auth_tokens_legacy a \ + INNER JOIN devices_legacy d \ + ON d.user_id = a.user_id AND d.device_id = a.device_id", + ) + .execute(&mut *tx) + .await + .map_err(|e| anyhow!("copy consistent legacy auth tokens: {e}"))?; + sqlx::query("DROP TABLE auth_tokens_legacy") + .execute(&mut *tx) + .await + .map_err(|e| anyhow!("drop legacy auth_tokens: {e}"))?; + sqlx::query("DROP TABLE devices_legacy") + .execute(&mut *tx) + .await + .map_err(|e| anyhow!("drop legacy devices: {e}"))?; + sqlx::query("CREATE INDEX idx_auth_tokens_user ON auth_tokens(user_id)") + .execute(&mut *tx) + .await + .map_err(|e| anyhow!("recreate auth token index: {e}"))?; + sqlx::query("CREATE INDEX idx_devices_user ON devices(user_id)") + .execute(&mut *tx) + .await + .map_err(|e| anyhow!("recreate device index: {e}"))?; + tx.commit() + .await + .map_err(|e| anyhow!("commit account-scoped device migration: {e}"))?; + Ok(()) +} + // ── Users ─────────────────────────────────────────────────────────────── #[derive(Debug, Clone, sqlx::FromRow)] @@ -414,8 +553,7 @@ impl DeviceRow { sqlx::query( "INSERT INTO devices (device_id, user_id, device_name, public_key, last_seen_at, online) \ VALUES (?, ?, ?, ?, ?, 1) \ - ON CONFLICT(device_id) DO UPDATE SET \ - user_id = excluded.user_id, \ + ON CONFLICT(user_id, device_id) DO UPDATE SET \ device_name = excluded.device_name, \ public_key = excluded.public_key, \ last_seen_at = excluded.last_seen_at, \ @@ -432,15 +570,23 @@ impl DeviceRow { Ok(()) } - pub async fn set_online(pool: &DbPool, device_id: &str, online: bool) -> Result<()> { + pub async fn set_online( + pool: &DbPool, + user_id: &str, + device_id: &str, + online: bool, + ) -> Result<()> { let now = Utc::now().timestamp(); - sqlx::query("UPDATE devices SET online = ?, last_seen_at = ? WHERE device_id = ?") - .bind(online as i64) - .bind(now) - .bind(device_id) - .execute(pool) - .await - .map_err(|e| anyhow!("set device online: {e}"))?; + sqlx::query( + "UPDATE devices SET online = ?, last_seen_at = ? WHERE user_id = ? AND device_id = ?", + ) + .bind(online as i64) + .bind(now) + .bind(user_id) + .bind(device_id) + .execute(pool) + .await + .map_err(|e| anyhow!("set device online: {e}"))?; Ok(()) } @@ -467,16 +613,12 @@ impl DeviceRow { .await .map_err(|e| anyhow!("begin device deletion: {e}"))?; - sqlx::query( - "DELETE FROM auth_tokens WHERE device_id IN (\ - SELECT device_id FROM devices WHERE device_id = ? AND user_id = ?\ - )", - ) - .bind(device_id) - .bind(user_id) - .execute(&mut *tx) - .await - .map_err(|e| anyhow!("revoke device tokens: {e}"))?; + sqlx::query("DELETE FROM auth_tokens WHERE device_id = ? AND user_id = ?") + .bind(device_id) + .bind(user_id) + .execute(&mut *tx) + .await + .map_err(|e| anyhow!("revoke device tokens: {e}"))?; let result = sqlx::query("DELETE FROM devices WHERE device_id = ? AND user_id = ?") .bind(device_id) @@ -494,29 +636,72 @@ impl DeviceRow { // ── Auth tokens ───────────────────────────────────────────────────────── -const TOKEN_TTL_SECS: i64 = 30 * 24 * 3600; +const DEVICE_TOKEN_TTL_SECS: i64 = 30 * 24 * 3600; +const DELEGATED_TOKEN_TTL_SECS: i64 = 24 * 3600; #[derive(Debug, Clone, sqlx::FromRow)] pub struct AuthToken { pub token: String, pub user_id: String, pub device_id: String, + pub token_kind: String, pub created_at: i64, pub expires_at: i64, } impl AuthToken { pub async fn create(pool: &DbPool, user_id: &str, device_id: &str) -> Result { + Self::create_with_kind(pool, user_id, device_id, "device").await + } + + pub async fn create_delegated( + pool: &DbPool, + user_id: &str, + device_id: &str, + ) -> Result { + let now = Utc::now().timestamp(); + if let Some(existing) = sqlx::query_as::<_, AuthToken>( + "SELECT token, user_id, device_id, token_kind, created_at, expires_at \ + FROM auth_tokens \ + WHERE user_id = ? AND device_id = ? \ + AND token_kind = 'delegated_control' AND expires_at > ? \ + ORDER BY created_at DESC LIMIT 1", + ) + .bind(user_id) + .bind(device_id) + .bind(now) + .fetch_optional(pool) + .await + .map_err(|e| anyhow!("find reusable delegated token: {e}"))? + { + return Ok(existing); + } + Self::create_with_kind(pool, user_id, device_id, "delegated_control").await + } + + async fn create_with_kind( + pool: &DbPool, + user_id: &str, + device_id: &str, + token_kind: &str, + ) -> Result { let token = generate_token(); let now = Utc::now().timestamp(); - let expires_at = now + TOKEN_TTL_SECS; + let ttl = if token_kind == "delegated_control" { + DELEGATED_TOKEN_TTL_SECS + } else { + DEVICE_TOKEN_TTL_SECS + }; + let expires_at = now + ttl; sqlx::query( - "INSERT INTO auth_tokens (token, user_id, device_id, created_at, expires_at) \ - VALUES (?, ?, ?, ?, ?)", + "INSERT INTO auth_tokens \ + (token, user_id, device_id, token_kind, created_at, expires_at) \ + VALUES (?, ?, ?, ?, ?, ?)", ) .bind(&token) .bind(user_id) .bind(device_id) + .bind(token_kind) .bind(now) .bind(expires_at) .execute(pool) @@ -526,16 +711,28 @@ impl AuthToken { token, user_id: user_id.to_string(), device_id: device_id.to_string(), + token_kind: token_kind.to_string(), created_at: now, expires_at, }) } + pub fn is_device_token(&self) -> bool { + self.token_kind == "device" + } + + pub fn can_control_devices(&self) -> bool { + self.is_device_token() || self.token_kind == "delegated_control" + } + /// Look up a token; returns None if missing or expired (expired rows are /// deleted as a side effect). pub async fn find(pool: &DbPool, token: &str) -> Result> { + if !is_valid_auth_token(token) { + return Ok(None); + } let row = sqlx::query_as::<_, AuthToken>( - "SELECT token, user_id, device_id, created_at, expires_at \ + "SELECT token, user_id, device_id, token_kind, created_at, expires_at \ FROM auth_tokens WHERE token = ?", ) .bind(token) @@ -547,7 +744,7 @@ impl AuthToken { return Ok(None); }; - if auth_token.expires_at < Utc::now().timestamp() { + if auth_token.expires_at <= Utc::now().timestamp() { let _ = sqlx::query("DELETE FROM auth_tokens WHERE token = ?") .bind(token) .execute(pool) @@ -558,8 +755,9 @@ impl AuthToken { } /// Revoke (delete) all tokens belonging to a specific device. - pub async fn revoke_by_device(pool: &DbPool, device_id: &str) -> Result<()> { - sqlx::query("DELETE FROM auth_tokens WHERE device_id = ?") + pub async fn revoke_by_device(pool: &DbPool, user_id: &str, device_id: &str) -> Result<()> { + sqlx::query("DELETE FROM auth_tokens WHERE user_id = ? AND device_id = ?") + .bind(user_id) .bind(device_id) .execute(pool) .await @@ -573,6 +771,16 @@ fn generate_token() -> String { bytes.iter().map(|b| format!("{b:02x}")).collect() } +/// Account tokens are fixed-size lowercase hexadecimal bearer secrets. Check +/// the shape before hitting SQLite so oversized or malformed untrusted input +/// cannot become a database lookup key. +pub fn is_valid_auth_token(token: &str) -> bool { + token.len() == 64 + && token + .bytes() + .all(|byte| byte.is_ascii_digit() || (b'a'..=b'f').contains(&byte)) +} + // ── Sync sessions (encrypted blobs, server never decrypts) ───────────── #[derive(Debug, Clone, sqlx::FromRow)] @@ -587,18 +795,24 @@ pub struct SyncSessionRow { impl SyncSessionRow { /// Upsert an encrypted session blob. Last-writer-wins via version. - pub async fn upsert( + pub async fn upsert_with_quota( pool: &DbPool, user_id: &str, session_id: &str, encrypted_data: &str, nonce: &str, version: i64, - ) -> Result<()> { + max_sessions: i64, + max_total_bytes: i64, + ) -> Result { let now = Utc::now().timestamp(); - sqlx::query( + let result = sqlx::query( "INSERT INTO sync_sessions (user_id, session_id, encrypted_data, nonce, version, updated_at, deleted) \ - VALUES (?, ?, ?, ?, ?, ?, 0) \ + SELECT ?, ?, ?, ?, ?, ?, 0 \ + WHERE (SELECT COUNT(*) FROM sync_sessions \ + WHERE user_id = ? AND deleted = 0 AND session_id <> ?) < ? \ + AND (SELECT COALESCE(SUM(LENGTH(encrypted_data)), 0) FROM sync_sessions \ + WHERE user_id = ? AND deleted = 0 AND session_id <> ?) + ? <= ? \ ON CONFLICT(user_id, session_id) DO UPDATE SET \ encrypted_data = excluded.encrypted_data, \ nonce = excluded.nonce, \ @@ -612,10 +826,17 @@ impl SyncSessionRow { .bind(nonce) .bind(version) .bind(now) + .bind(user_id) + .bind(session_id) + .bind(max_sessions) + .bind(user_id) + .bind(session_id) + .bind(encrypted_data.len() as i64) + .bind(max_total_bytes) .execute(pool) .await .map_err(|e| anyhow!("upsert sync session: {e}"))?; - Ok(()) + Ok(result.rows_affected() > 0) } /// Fetch all non-deleted sessions for a user updated after `since_version`. @@ -626,7 +847,8 @@ impl SyncSessionRow { ) -> Result> { let rows = sqlx::query_as::<_, SyncSessionRow>( "SELECT session_id, encrypted_data, nonce, version, updated_at, deleted \ - FROM sync_sessions WHERE user_id = ? AND version > ? AND deleted = 0", + FROM sync_sessions WHERE user_id = ? AND version > ? AND deleted = 0 \ + ORDER BY version ASC, session_id ASC", ) .bind(user_id) .bind(since_version) @@ -1236,12 +1458,213 @@ mod tests { let tok = AuthToken::create(&pool, "u1", "d1").await.unwrap(); let found = AuthToken::find(&pool, &tok.token).await.unwrap(); assert!(found.is_some()); - assert_eq!(found.unwrap().user_id, "u1"); + let found = found.unwrap(); + assert_eq!(found.user_id, "u1"); + assert!(found.is_device_token()); + + let delegated = AuthToken::create_delegated(&pool, "u1", "d1") + .await + .unwrap(); + let delegated = AuthToken::find(&pool, &delegated.token) + .await + .unwrap() + .unwrap(); + assert_eq!(delegated.token_kind, "delegated_control"); + assert!(!delegated.is_device_token()); let missing = AuthToken::find(&pool, "nonexistent").await.unwrap(); assert!(missing.is_none()); } + #[tokio::test] + async fn the_same_install_device_id_is_isolated_between_accounts() { + let pool = setup().await; + UserRow::create(&pool, "u1", "alice", "s", "ks", "{}", "hash", "wmk") + .await + .unwrap(); + UserRow::create(&pool, "u2", "bob", "s", "ks", "{}", "hash", "wmk") + .await + .unwrap(); + + DeviceRow::upsert(&pool, "shared-install", "u1", "Alice laptop", None) + .await + .unwrap(); + DeviceRow::upsert(&pool, "shared-install", "u2", "Bob laptop", None) + .await + .unwrap(); + let token_u1 = AuthToken::create(&pool, "u1", "shared-install") + .await + .unwrap(); + let token_u2 = AuthToken::create(&pool, "u2", "shared-install") + .await + .unwrap(); + + assert_eq!(DeviceRow::list_by_user(&pool, "u1").await.unwrap().len(), 1); + assert_eq!(DeviceRow::list_by_user(&pool, "u2").await.unwrap().len(), 1); + DeviceRow::delete_for_user(&pool, "u1", "shared-install") + .await + .unwrap(); + assert!(AuthToken::find(&pool, &token_u1.token) + .await + .unwrap() + .is_none()); + assert!(AuthToken::find(&pool, &token_u2.token) + .await + .unwrap() + .is_some()); + assert_eq!(DeviceRow::list_by_user(&pool, "u2").await.unwrap().len(), 1); + } + + #[tokio::test] + async fn sync_session_upsert_enforces_count_and_byte_quotas_atomically() { + let pool = setup().await; + UserRow::create(&pool, "u1", "alice", "s", "ks", "{}", "hash", "wmk") + .await + .unwrap(); + + assert!( + SyncSessionRow::upsert_with_quota(&pool, "u1", "s1", "1234", "n", 1, 1, 5,) + .await + .unwrap() + ); + assert!( + SyncSessionRow::upsert_with_quota(&pool, "u1", "s1", "12345", "n", 2, 1, 5,) + .await + .unwrap() + ); + assert!( + !SyncSessionRow::upsert_with_quota(&pool, "u1", "s2", "1", "n", 1, 1, 5,) + .await + .unwrap() + ); + assert!( + !SyncSessionRow::upsert_with_quota(&pool, "u1", "s1", "123456", "n", 3, 1, 5,) + .await + .unwrap() + ); + + let stored = SyncSessionRow::get(&pool, "u1", "s1") + .await + .unwrap() + .unwrap(); + assert_eq!(stored.encrypted_data, "12345"); + } + + #[tokio::test] + async fn legacy_global_device_schema_is_migrated_without_ambiguous_tokens() { + let db_path = std::env::temp_dir().join(format!( + "bitfun-relay-device-migration-{}-{}.db", + std::process::id(), + rand::random::() + )); + let db_path_text = db_path.to_string_lossy().to_string(); + let legacy_options = SqliteConnectOptions::from_str(&format!("sqlite://{db_path_text}")) + .unwrap() + .create_if_missing(true) + .foreign_keys(false); + let legacy = SqlitePoolOptions::new() + .max_connections(1) + .connect_with(legacy_options) + .await + .unwrap(); + sqlx::query( + "CREATE TABLE users (\ + user_id TEXT PRIMARY KEY, username TEXT UNIQUE NOT NULL,\ + salt TEXT NOT NULL, kdf_salt TEXT NOT NULL, argon2_params TEXT NOT NULL,\ + password_hash TEXT NOT NULL, wrapped_master_key TEXT NOT NULL,\ + failed_attempts INTEGER NOT NULL DEFAULT 0, locked_until INTEGER NOT NULL DEFAULT 0,\ + created_at INTEGER NOT NULL, updated_at INTEGER NOT NULL\ + )", + ) + .execute(&legacy) + .await + .unwrap(); + sqlx::query( + "CREATE TABLE devices (\ + device_id TEXT PRIMARY KEY, user_id TEXT NOT NULL REFERENCES users(user_id),\ + device_name TEXT, public_key TEXT, last_seen_at INTEGER,\ + online INTEGER NOT NULL DEFAULT 0\ + )", + ) + .execute(&legacy) + .await + .unwrap(); + sqlx::query( + "CREATE TABLE auth_tokens (\ + token TEXT PRIMARY KEY, user_id TEXT NOT NULL REFERENCES users(user_id),\ + device_id TEXT NOT NULL REFERENCES devices(device_id),\ + created_at INTEGER NOT NULL, expires_at INTEGER NOT NULL\ + )", + ) + .execute(&legacy) + .await + .unwrap(); + for (user_id, username) in [("u1", "alice"), ("u2", "bob")] { + sqlx::query( + "INSERT INTO users \ + (user_id, username, salt, kdf_salt, argon2_params, password_hash,\ + wrapped_master_key, created_at, updated_at) \ + VALUES (?, ?, 's', 'ks', '{}', 'hash', 'wmk', 1, 1)", + ) + .bind(user_id) + .bind(username) + .execute(&legacy) + .await + .unwrap(); + } + sqlx::query( + "INSERT INTO devices (device_id, user_id, device_name, online) \ + VALUES ('shared-install', 'u2', 'Bob laptop', 1)", + ) + .execute(&legacy) + .await + .unwrap(); + let consistent_token = "a".repeat(64); + let inconsistent_token = "b".repeat(64); + for (token, user_id) in [(&consistent_token, "u2"), (&inconsistent_token, "u1")] { + sqlx::query( + "INSERT INTO auth_tokens \ + (token, user_id, device_id, created_at, expires_at) \ + VALUES (?, ?, 'shared-install', 1, 4102444800)", + ) + .bind(token) + .bind(user_id) + .execute(&legacy) + .await + .unwrap(); + } + legacy.close().await; + + let migrated = connect(&db_path_text).await.unwrap(); + assert!(AuthToken::find(&migrated, &consistent_token) + .await + .unwrap() + .is_some()); + assert!(AuthToken::find(&migrated, &inconsistent_token) + .await + .unwrap() + .is_none()); + DeviceRow::upsert(&migrated, "shared-install", "u1", "Alice laptop", None) + .await + .unwrap(); + assert_eq!( + DeviceRow::list_by_user(&migrated, "u1") + .await + .unwrap() + .len(), + 1 + ); + assert_eq!( + DeviceRow::list_by_user(&migrated, "u2") + .await + .unwrap() + .len(), + 1 + ); + migrated.close().await; + let _ = std::fs::remove_file(db_path); + } + #[tokio::test] async fn page_ensure_version_deploy_and_resolve() { let pool = setup().await; diff --git a/src/crates/services/relay-service/src/lib.rs b/src/crates/services/relay-service/src/lib.rs index 03edc83646..eb3aaedd2d 100644 --- a/src/crates/services/relay-service/src/lib.rs +++ b/src/crates/services/relay-service/src/lib.rs @@ -19,12 +19,145 @@ pub use relay::room::{ResponsePayload, RoomManager}; pub use routes::api::AppState; use axum::extract::DefaultBodyLimit; +use axum::http::{header, HeaderValue, Method}; use axum::routing::{get, post}; use axum::Router; use dashmap::DashMap; -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; +use std::path::{Component, Path, PathBuf}; use std::sync::Arc; +const DEFAULT_MEMORY_ASSET_STORE_MAX_BYTES: u64 = 256 * 1024 * 1024; +pub const DEFAULT_DISK_ASSET_STORE_MAX_BYTES: u64 = 1024 * 1024 * 1024; +const ASSET_CAPACITY_ERROR: &str = "relay asset store capacity exceeded"; + +pub(crate) fn asset_store_error_status(error: String) -> axum::http::StatusCode { + if error == ASSET_CAPACITY_ERROR { + tracing::warn!("Relay asset upload rejected because the configured capacity is full"); + axum::http::StatusCode::INSUFFICIENT_STORAGE + } else { + tracing::error!("Relay asset store operation failed: {error}"); + axum::http::StatusCode::INTERNAL_SERVER_ERROR + } +} + +/// Apply conservative browser security headers to API and hosted-web +/// responses. Operators can still add a stricter CSP at their reverse proxy; +/// a global CSP here would incorrectly constrain user-authored BitFun Pages. +pub async fn relay_security_headers( + request: axum::extract::Request, + next: axum::middleware::Next, +) -> axum::response::Response { + use axum::http::{HeaderName, HeaderValue}; + + let no_store = request.uri().path() == "/health" || request.uri().path().starts_with("/api/"); + let mut response = next.run(request).await; + let headers = response.headers_mut(); + for (name, value) in [ + ("x-content-type-options", "nosniff"), + ("x-frame-options", "SAMEORIGIN"), + ("referrer-policy", "no-referrer"), + ( + "permissions-policy", + "camera=(), microphone=(), geolocation=()", + ), + ("strict-transport-security", "max-age=31536000"), + ] { + headers + .entry(HeaderName::from_static(name)) + .or_insert(HeaderValue::from_static(value)); + } + if no_store { + headers + .entry(axum::http::header::CACHE_CONTROL) + .or_insert(HeaderValue::from_static("no-store")); + } + response +} + +/// Validate a caller-controlled asset namespace or file path before it is +/// joined beneath the relay's asset root. +/// +/// `PathBuf::join` discards its left-hand side when the right-hand side is +/// absolute. Rejecting every non-normal component here is therefore a security +/// boundary, not just input cleanup. Backslashes are rejected on every host so +/// a path accepted on Unix cannot become an escape after moving the same data +/// to Windows. +pub(crate) fn validated_asset_relative_path(raw: &str) -> Result { + if raw.is_empty() || raw.len() > 1024 || raw.contains('\\') || raw.chars().any(char::is_control) + { + return Err("asset path must be a non-empty portable relative path".to_string()); + } + + let path = Path::new(raw); + if path.is_absolute() { + return Err("absolute asset paths are not allowed".to_string()); + } + + let mut normalized = PathBuf::new(); + for component in path.components() { + match component { + Component::Normal(value) if value.as_encoded_bytes().len() <= 255 => { + normalized.push(value) + } + Component::Normal(_) => return Err("asset path segment is too long".to_string()), + Component::Prefix(_) + | Component::RootDir + | Component::CurDir + | Component::ParentDir => { + return Err("asset path contains a forbidden component".to_string()) + } + } + } + + if normalized.as_os_str().is_empty() { + return Err("asset path must not be empty".to_string()); + } + Ok(normalized) +} + +fn validated_asset_namespace(raw: &str) -> Result { + let namespace = validated_asset_relative_path(raw)?; + if matches!(raw, "_store" | "page-data" | "pages") { + return Err("asset namespace is reserved by the relay".to_string()); + } + Ok(namespace) +} + +pub(crate) fn is_valid_content_hash(hash: &str) -> bool { + hash.len() == 64 + && hash + .bytes() + .all(|byte| byte.is_ascii_digit() || matches!(byte, b'a'..=b'f')) +} + +pub(crate) fn normalized_browser_origin(raw: &str) -> Option { + let value = raw.trim().trim_end_matches('/'); + if value == "*" { + return Some(value.to_string()); + } + let uri = value.parse::().ok()?; + let scheme = uri.scheme_str()?; + if !matches!(scheme, "http" | "https") || uri.query().is_some() { + return None; + } + let authority = uri.authority()?.as_str(); + if authority.contains('@') || !matches!(uri.path(), "" | "/") { + return None; + } + Some(format!("{scheme}://{authority}")) +} + +fn content_matches_hash(hash: &str, data: &[u8]) -> bool { + use sha2::{Digest, Sha256}; + + if !is_valid_content_hash(hash) { + return false; + } + let actual = Sha256::digest(data); + format!("{actual:x}") == hash +} + // ── WebAssetStore trait ─────────────────────────────────────────────── /// Abstract storage for per-room mobile-web static assets. @@ -32,6 +165,12 @@ use std::sync::Arc; /// The standalone relay uses `DiskAssetStore` (filesystem-backed), while /// the embedded relay uses `MemoryAssetStore` (in-memory DashMap-backed). pub trait WebAssetStore: Send + Sync + 'static { + /// Total content-addressed bytes currently retained by this process/store. + fn stored_bytes(&self) -> u64; + + /// Configured global content-addressed capacity. + fn max_store_bytes(&self) -> u64; + /// Check if content with this SHA-256 hash exists in the store. fn has_content(&self, hash: &str) -> bool; @@ -70,13 +209,23 @@ pub trait WebAssetStore: Send + Sync + 'static { pub struct MemoryAssetStore { content_store: DashMap>>, room_manifests: DashMap>, + stored_bytes: std::sync::Mutex, + mutation_lock: std::sync::Mutex<()>, + max_store_bytes: u64, } impl MemoryAssetStore { pub fn new() -> Self { + Self::new_with_max_bytes(DEFAULT_MEMORY_ASSET_STORE_MAX_BYTES) + } + + pub fn new_with_max_bytes(max_store_bytes: u64) -> Self { Self { content_store: DashMap::new(), room_manifests: DashMap::new(), + stored_bytes: std::sync::Mutex::new(0), + mutation_lock: std::sync::Mutex::new(()), + max_store_bytes, } } } @@ -88,18 +237,66 @@ impl Default for MemoryAssetStore { } impl WebAssetStore for MemoryAssetStore { + fn stored_bytes(&self) -> u64 { + self.stored_bytes + .lock() + .map(|value| *value) + .unwrap_or(u64::MAX) + } + + fn max_store_bytes(&self) -> u64 { + self.max_store_bytes + } + fn has_content(&self, hash: &str) -> bool { - self.content_store.contains_key(hash) + is_valid_content_hash(hash) && self.content_store.contains_key(hash) } fn store_content(&self, hash: &str, data: Vec) -> Result<(), String> { - self.content_store - .entry(hash.to_string()) - .or_insert_with(|| Arc::new(data)); + if !content_matches_hash(hash, &data) { + return Err("content does not match its lowercase SHA-256 digest".to_string()); + } + if self.content_store.contains_key(hash) { + return Ok(()); + } + let _mutation = self + .mutation_lock + .lock() + .map_err(|_| "relay asset store mutation lock poisoned".to_string())?; + let mut stored_bytes = self + .stored_bytes + .lock() + .map_err(|_| "relay asset store accounting lock poisoned".to_string())?; + if self.content_store.contains_key(hash) { + return Ok(()); + } + let new_total = stored_bytes + .checked_add(data.len() as u64) + .ok_or_else(|| ASSET_CAPACITY_ERROR.to_string())?; + if new_total > self.max_store_bytes { + return Err(ASSET_CAPACITY_ERROR.to_string()); + } + self.content_store.insert(hash.to_string(), Arc::new(data)); + *stored_bytes = new_total; Ok(()) } fn map_to_room(&self, room_id: &str, rel_path: &str, hash: &str) -> Result<(), String> { + validated_asset_namespace(room_id)?; + validated_asset_relative_path(rel_path)?; + if !is_valid_content_hash(hash) { + return Err("content hash must be a lowercase SHA-256 digest".to_string()); + } + if !self.content_store.contains_key(hash) { + return Err("content hash is not present in the relay store".to_string()); + } + let _mutation = self + .mutation_lock + .lock() + .map_err(|_| "relay asset store mutation lock poisoned".to_string())?; + if !self.content_store.contains_key(hash) { + return Err("content hash is not present in the relay store".to_string()); + } self.room_manifests .entry(room_id.to_string()) .or_default() @@ -108,6 +305,8 @@ impl WebAssetStore for MemoryAssetStore { } fn get_file(&self, room_id: &str, path: &str) -> Option> { + validated_asset_namespace(room_id).ok()?; + validated_asset_relative_path(path).ok()?; let manifest = self.room_manifests.get(room_id)?; let hash = manifest.get(path).or_else(|| manifest.get("index.html"))?; let content = self.content_store.get(hash)?; @@ -115,6 +314,8 @@ impl WebAssetStore for MemoryAssetStore { } fn get_file_exact(&self, room_id: &str, path: &str) -> Option> { + validated_asset_namespace(room_id).ok()?; + validated_asset_relative_path(path).ok()?; let manifest = self.room_manifests.get(room_id)?; let hash = manifest.get(path)?; let content = self.content_store.get(hash)?; @@ -122,6 +323,9 @@ impl WebAssetStore for MemoryAssetStore { } fn list_room_entries(&self, room_id: &str) -> Vec<(String, String)> { + if validated_asset_namespace(room_id).is_err() { + return Vec::new(); + } self.room_manifests .get(room_id) .map(|m| m.iter().map(|(p, h)| (p.clone(), h.clone())).collect()) @@ -129,6 +333,9 @@ impl WebAssetStore for MemoryAssetStore { } fn room_total_bytes(&self, room_id: &str) -> u64 { + if validated_asset_namespace(room_id).is_err() { + return 0; + } self.room_manifests .get(room_id) .map(|m| { @@ -152,11 +359,41 @@ impl WebAssetStore for MemoryAssetStore { } fn has_room_files(&self, room_id: &str) -> bool { + if validated_asset_namespace(room_id).is_err() { + return false; + } self.room_manifests.contains_key(room_id) } fn cleanup_room(&self, room_id: &str) { - self.room_manifests.remove(room_id); + if validated_asset_namespace(room_id).is_err() { + return; + } + let Ok(_mutation) = self.mutation_lock.lock() else { + tracing::warn!("Failed to lock in-memory relay asset store for cleanup"); + return; + }; + let Some((_, removed_manifest)) = self.room_manifests.remove(room_id) else { + return; + }; + let candidates = removed_manifest.into_values().collect::>(); + let still_referenced = self + .room_manifests + .iter() + .flat_map(|manifest| manifest.value().values().cloned().collect::>()) + .collect::>(); + let mut reclaimed = 0u64; + for hash in candidates.difference(&still_referenced) { + if let Some((_, content)) = self.content_store.remove(hash) { + reclaimed = reclaimed.saturating_add(content.len() as u64); + } + } + if reclaimed > 0 { + if let Ok(mut stored_bytes) = self.stored_bytes.lock() { + *stored_bytes = stored_bytes.saturating_sub(reclaimed); + } + tracing::info!("Reclaimed {reclaimed} unreferenced in-memory relay asset bytes"); + } } } @@ -167,23 +404,54 @@ impl WebAssetStore for MemoryAssetStore { /// Content is stored in `{base_dir}/_store/{hash}` and symlinked into /// per-room directories `{base_dir}/{room_id}/{path}`. pub struct DiskAssetStore { - base_dir: String, + base_dir: PathBuf, known_hashes: DashMap, + stored_bytes: std::sync::Mutex, + mutation_lock: std::sync::Mutex<()>, + max_store_bytes: u64, } impl DiskAssetStore { pub fn new(base_dir: &str) -> Self { - let store_dir = std::path::PathBuf::from(base_dir).join("_store"); - let _ = std::fs::create_dir_all(&store_dir); + Self::new_with_max_bytes(base_dir, DEFAULT_DISK_ASSET_STORE_MAX_BYTES) + } + + pub fn new_with_max_bytes(base_dir: &str, max_store_bytes: u64) -> Self { + let requested_base = PathBuf::from(base_dir); + if let Err(error) = std::fs::create_dir_all(&requested_base) { + tracing::warn!("Failed to create relay asset root {base_dir}: {error}"); + } + let base_dir = std::fs::canonicalize(&requested_base).unwrap_or_else(|_| { + if requested_base.is_absolute() { + requested_base + } else { + std::env::current_dir() + .unwrap_or_default() + .join(requested_base) + } + }); + let store_dir = base_dir.join("_store"); + if let Err(error) = std::fs::create_dir_all(&store_dir) { + tracing::warn!( + "Failed to create relay content store {}: {error}", + store_dir.display() + ); + } let known: DashMap = DashMap::new(); if store_dir.is_dir() { if let Ok(entries) = std::fs::read_dir(&store_dir) { for entry in entries.flatten() { - if let Ok(meta) = entry.metadata() { - if meta.is_file() { + if entry + .file_type() + .map(|file_type| file_type.is_file()) + .unwrap_or(false) + { + if let Ok(meta) = entry.metadata() { if let Some(name) = entry.file_name().to_str() { - known.insert(name.to_string(), meta.len()); + if is_valid_content_hash(name) { + known.insert(name.to_string(), meta.len()); + } } } } @@ -191,56 +459,226 @@ impl DiskAssetStore { } } tracing::info!( - "DiskAssetStore initialized with {} entries from {base_dir}", - known.len() + "DiskAssetStore initialized with {} entries ({} bytes, capacity {} bytes) from {}", + known.len(), + known.iter().map(|entry| *entry.value()).sum::(), + max_store_bytes, + base_dir.display() ); + let stored_bytes = known.iter().map(|entry| *entry.value()).sum(); + if stored_bytes > max_store_bytes { + tracing::warn!( + "Relay asset store already exceeds configured capacity; existing content remains readable but new content is blocked" + ); + } Self { - base_dir: base_dir.to_string(), + base_dir, known_hashes: known, + stored_bytes: std::sync::Mutex::new(stored_bytes), + mutation_lock: std::sync::Mutex::new(()), + max_store_bytes, } } - fn store_dir(&self) -> std::path::PathBuf { - std::path::PathBuf::from(&self.base_dir).join("_store") + fn store_dir(&self) -> PathBuf { + self.base_dir.join("_store") } - fn room_dir(&self, room_id: &str) -> std::path::PathBuf { - std::path::PathBuf::from(&self.base_dir).join(room_id) + fn safe_relative_path(&self, relative: PathBuf) -> Result { + let candidate = self.base_dir.join(relative); + + // Refuse traversal through a pre-existing symlink. This also protects + // installations that may contain directories created by an older, + // vulnerable relay version. + let mut existing_ancestor = candidate.as_path(); + while !existing_ancestor.exists() { + existing_ancestor = existing_ancestor + .parent() + .ok_or_else(|| "asset path has no existing ancestor".to_string())?; + } + let canonical_ancestor = std::fs::canonicalize(existing_ancestor) + .map_err(|error| format!("canonicalize asset path: {error}"))?; + if !canonical_ancestor.starts_with(&self.base_dir) { + return Err("asset path escapes the configured asset root".to_string()); + } + + Ok(candidate) + } + + fn room_dir(&self, room_id: &str) -> Result { + self.safe_relative_path(validated_asset_namespace(room_id)?) + } + + fn room_file_path(&self, room_id: &str, rel_path: &str) -> Result { + let room = validated_asset_namespace(room_id)?; + let file = validated_asset_relative_path(rel_path)?; + self.safe_relative_path(room.join(file)) + } + + fn referenced_candidate_hashes(&self, candidates: &HashSet) -> HashSet { + fn walk( + dir: &Path, + store_dir: &Path, + page_data_dir: &Path, + candidates: &HashSet, + referenced: &mut HashSet, + ) { + let Ok(entries) = std::fs::read_dir(dir) else { + return; + }; + for entry in entries.flatten() { + let path = entry.path(); + if path == store_dir || path == page_data_dir { + continue; + } + let Ok(file_type) = entry.file_type() else { + continue; + }; + if file_type.is_dir() { + walk(&path, store_dir, page_data_dir, candidates, referenced); + continue; + } + + let linked_hash = std::fs::canonicalize(&path).ok().and_then(|canonical| { + canonical + .strip_prefix(store_dir) + .ok() + .and_then(|relative| relative.file_name()) + .and_then(|name| name.to_str()) + .filter(|hash| candidates.contains(*hash)) + .map(str::to_string) + }); + if let Some(hash) = linked_hash { + referenced.insert(hash); + continue; + } + + // Windows may use a hard link or copy instead of a symlink; + // hash only candidate-backed regular files as a fallback. + if file_type.is_file() { + if let Ok(bytes) = std::fs::read(&path) { + use sha2::{Digest, Sha256}; + let hash = format!("{:x}", Sha256::digest(bytes)); + if candidates.contains(&hash) { + referenced.insert(hash); + } + } + } + } + } + + let mut referenced = HashSet::new(); + walk( + &self.base_dir, + &self.store_dir(), + &self.base_dir.join("page-data"), + candidates, + &mut referenced, + ); + referenced } } impl WebAssetStore for DiskAssetStore { + fn stored_bytes(&self) -> u64 { + self.stored_bytes + .lock() + .map(|value| *value) + .unwrap_or(u64::MAX) + } + + fn max_store_bytes(&self) -> u64 { + self.max_store_bytes + } + fn has_content(&self, hash: &str) -> bool { - self.known_hashes.contains_key(hash) + is_valid_content_hash(hash) && self.known_hashes.contains_key(hash) } fn store_content(&self, hash: &str, data: Vec) -> Result<(), String> { + if !content_matches_hash(hash, &data) { + return Err("content does not match its lowercase SHA-256 digest".to_string()); + } + if self.known_hashes.contains_key(hash) { + return Ok(()); + } + let _mutation = self + .mutation_lock + .lock() + .map_err(|_| "relay asset store mutation lock poisoned".to_string())?; + let mut stored_bytes = self + .stored_bytes + .lock() + .map_err(|_| "relay asset store accounting lock poisoned".to_string())?; + if self.known_hashes.contains_key(hash) { + return Ok(()); + } let store_path = self.store_dir().join(hash); - if !store_path.exists() { - std::fs::write(&store_path, &data).map_err(|e| e.to_string())?; - self.known_hashes - .insert(hash.to_string(), data.len() as u64); + if store_path.is_file() { + let size = std::fs::metadata(&store_path) + .map_err(|error| error.to_string())? + .len(); + self.known_hashes.insert(hash.to_string(), size); + *stored_bytes = stored_bytes.saturating_add(size); + return Ok(()); + } + + let new_total = stored_bytes + .checked_add(data.len() as u64) + .ok_or_else(|| ASSET_CAPACITY_ERROR.to_string())?; + if new_total > self.max_store_bytes { + return Err(ASSET_CAPACITY_ERROR.to_string()); + } + + let temp_path = self + .store_dir() + .join(format!(".{hash}.{}.tmp", uuid::Uuid::new_v4())); + std::fs::write(&temp_path, &data).map_err(|e| e.to_string())?; + if let Err(error) = std::fs::rename(&temp_path, &store_path) { + let _ = std::fs::remove_file(&temp_path); + return Err(error.to_string()); } + self.known_hashes + .insert(hash.to_string(), data.len() as u64); + *stored_bytes = new_total; Ok(()) } fn map_to_room(&self, room_id: &str, rel_path: &str, hash: &str) -> Result<(), String> { + if !is_valid_content_hash(hash) { + return Err("content hash must be a lowercase SHA-256 digest".to_string()); + } + if !self.has_content(hash) { + return Err("content hash is not present in the relay store".to_string()); + } + let _mutation = self + .mutation_lock + .lock() + .map_err(|_| "relay asset store mutation lock poisoned".to_string())?; + if !self.has_content(hash) { + return Err("content hash is not present in the relay store".to_string()); + } let store_path = self.store_dir().join(hash); - let dest = self.room_dir(room_id).join(rel_path); + if !store_path.is_file() { + return Err("content hash is not present in the relay store".to_string()); + } + let dest = self.room_file_path(room_id, rel_path)?; if let Some(parent) = dest.parent() { - let _ = std::fs::create_dir_all(parent); + std::fs::create_dir_all(parent).map_err(|error| error.to_string())?; + } + if dest.exists() || std::fs::symlink_metadata(&dest).is_ok() { + std::fs::remove_file(&dest).map_err(|error| error.to_string())?; } - let _ = std::fs::remove_file(&dest); create_link(&store_path, &dest).map_err(|e| e.to_string()) } fn get_file(&self, room_id: &str, path: &str) -> Option> { - let room_dir = self.room_dir(room_id); - let target = room_dir.join(path); + self.room_dir(room_id).ok()?; + let target = self.room_file_path(room_id, path).ok()?; let file = if target.is_file() { target } else { - room_dir.join("index.html") + self.room_file_path(room_id, "index.html").ok()? }; if file.is_file() { std::fs::read(&file).ok() @@ -250,7 +688,7 @@ impl WebAssetStore for DiskAssetStore { } fn get_file_exact(&self, room_id: &str, path: &str) -> Option> { - let target = self.room_dir(room_id).join(path); + let target = self.room_file_path(room_id, path).ok()?; if target.is_file() { std::fs::read(&target).ok() } else { @@ -259,7 +697,9 @@ impl WebAssetStore for DiskAssetStore { } fn list_room_entries(&self, room_id: &str) -> Vec<(String, String)> { - let room_dir = self.room_dir(room_id); + let Ok(room_dir) = self.room_dir(room_id) else { + return Vec::new(); + }; if !room_dir.is_dir() { return Vec::new(); } @@ -325,11 +765,15 @@ impl WebAssetStore for DiskAssetStore { } fn has_room_files(&self, room_id: &str) -> bool { - self.room_dir(room_id).exists() + self.room_dir(room_id) + .map(|path| path.exists()) + .unwrap_or(false) } fn room_total_bytes(&self, room_id: &str) -> u64 { - let room_dir = self.room_dir(room_id); + let Ok(room_dir) = self.room_dir(room_id) else { + return 0; + }; if !room_dir.is_dir() { return 0; } @@ -354,7 +798,24 @@ impl WebAssetStore for DiskAssetStore { } fn cleanup_room(&self, room_id: &str) { - let dir = self.room_dir(room_id); + let Ok(dir) = self.room_dir(room_id) else { + tracing::warn!("Rejected unsafe relay asset namespace during cleanup"); + return; + }; + if dir == self.base_dir || dir == self.store_dir() { + tracing::warn!("Refused to clean protected relay asset directory"); + return; + } + let Ok(_mutation) = self.mutation_lock.lock() else { + tracing::warn!("Failed to lock disk relay asset store for cleanup"); + return; + }; + let candidates = self + .list_room_entries(room_id) + .into_iter() + .map(|(_, hash)| hash) + .filter(|hash| is_valid_content_hash(hash)) + .collect::>(); if dir.exists() { if let Err(e) = std::fs::remove_dir_all(&dir) { tracing::warn!("Failed to clean up room web dir {}: {e}", dir.display()); @@ -362,6 +823,147 @@ impl WebAssetStore for DiskAssetStore { tracing::info!("Cleaned up room web dir for {room_id}"); } } + if candidates.is_empty() { + return; + } + let still_referenced = self.referenced_candidate_hashes(&candidates); + let mut reclaimed = 0u64; + for hash in candidates.difference(&still_referenced) { + let store_path = self.store_dir().join(hash); + match std::fs::remove_file(&store_path) { + Ok(()) => { + if let Some((_, size)) = self.known_hashes.remove(hash) { + reclaimed = reclaimed.saturating_add(size); + } + } + Err(error) if error.kind() == std::io::ErrorKind::NotFound => { + if let Some((_, size)) = self.known_hashes.remove(hash) { + reclaimed = reclaimed.saturating_add(size); + } + } + Err(error) => { + tracing::warn!("Failed to reclaim relay asset {hash}: {error}"); + } + } + } + if reclaimed > 0 { + if let Ok(mut stored_bytes) = self.stored_bytes.lock() { + *stored_bytes = stored_bytes.saturating_sub(reclaimed); + } + tracing::info!("Reclaimed {reclaimed} unreferenced disk relay asset bytes"); + } + } +} + +#[cfg(test)] +mod asset_store_security_tests { + use super::*; + + #[test] + fn asset_paths_reject_absolute_and_non_normal_components() { + for invalid in [ + "", + "/tmp/relay-owned", + "../outside", + "room/../../outside", + "./room", + "room\\..\\outside", + ] { + assert!( + validated_asset_relative_path(invalid).is_err(), + "path should be rejected: {invalid}" + ); + } + assert!(validated_asset_relative_path("pages/user-1/site/v/v1").is_ok()); + assert!(validated_asset_relative_path("assets/app.js").is_ok()); + assert!(validated_asset_namespace("pages/user-1/site/v/v1").is_ok()); + for reserved in ["_store", "page-data", "pages"] { + assert!(validated_asset_namespace(reserved).is_err()); + } + assert!(is_valid_content_hash(&"a".repeat(64))); + assert!(!is_valid_content_hash("../room/index.html")); + assert!(!is_valid_content_hash(&"A".repeat(64))); + } + + #[test] + fn disk_asset_store_cannot_write_or_delete_outside_its_root() { + let root = tempfile::tempdir().unwrap(); + let outside = tempfile::tempdir().unwrap(); + let outside_file = outside.path().join("keep.txt"); + std::fs::write(&outside_file, b"keep").unwrap(); + + let store = DiskAssetStore::new(root.path().to_str().unwrap()); + use sha2::{Digest, Sha256}; + let hash = format!("{:x}", Sha256::digest(b"owned")); + store.store_content(&hash, b"owned".to_vec()).unwrap(); + + for reserved in ["_store", "page-data", "pages"] { + assert!(store.map_to_room(reserved, &hash, &hash).is_err()); + } + assert_eq!( + std::fs::read(store.store_dir().join(&hash)).unwrap(), + b"owned" + ); + assert!(store + .map_to_room("room-a", "index.html", "../outside/keep.txt") + .is_err()); + assert!(store + .map_to_room("room-a", outside_file.to_str().unwrap(), &hash) + .is_err()); + assert!(store.map_to_room("../outside", "file.txt", &hash).is_err()); + store.cleanup_room(outside.path().to_str().unwrap()); + + assert_eq!(std::fs::read(&outside_file).unwrap(), b"keep"); + } + + #[test] + fn asset_stores_enforce_global_content_capacity_without_double_counting() { + use sha2::{Digest, Sha256}; + + let first = b"12345".to_vec(); + let second = b"67890".to_vec(); + let first_hash = format!("{:x}", Sha256::digest(&first)); + let second_hash = format!("{:x}", Sha256::digest(&second)); + + let memory = MemoryAssetStore::new_with_max_bytes(first.len() as u64); + memory.store_content(&first_hash, first.clone()).unwrap(); + memory.store_content(&first_hash, first.clone()).unwrap(); + memory + .map_to_room("room-a", "index.html", &first_hash) + .unwrap(); + memory + .map_to_room("room-b", "index.html", &first_hash) + .unwrap(); + assert_eq!( + memory + .store_content(&second_hash, second.clone()) + .unwrap_err(), + ASSET_CAPACITY_ERROR + ); + memory.cleanup_room("room-a"); + assert!(memory.has_content(&first_hash)); + memory.cleanup_room("room-b"); + assert!(!memory.has_content(&first_hash)); + memory.store_content(&second_hash, second.clone()).unwrap(); + + let root = tempfile::tempdir().unwrap(); + let disk = + DiskAssetStore::new_with_max_bytes(root.path().to_str().unwrap(), first.len() as u64); + disk.store_content(&first_hash, first.clone()).unwrap(); + disk.store_content(&first_hash, first).unwrap(); + disk.map_to_room("room-a", "index.html", &first_hash) + .unwrap(); + disk.map_to_room("room-b", "index.html", &first_hash) + .unwrap(); + assert_eq!( + disk.store_content(&second_hash, second).unwrap_err(), + ASSET_CAPACITY_ERROR + ); + assert!(!disk.store_dir().join(second_hash).exists()); + disk.cleanup_room("room-a"); + assert!(disk.has_content(&first_hash)); + disk.cleanup_room("room-b"); + assert!(!disk.has_content(&first_hash)); } } @@ -407,8 +1009,41 @@ pub fn build_relay_router_with_page_data( db: Option>, host_version: &'static str, page_data_dir: Option, +) -> Router { + build_relay_router_with_page_data_and_origins( + room_manager, + asset_store, + start_time, + db, + host_version, + page_data_dir, + Vec::new(), + ) +} + +/// Build a relay with an explicit browser-origin allowlist. An empty list is +/// same-origin only. `*` remains available for intentionally public relays but +/// should not be combined with account APIs. +pub fn build_relay_router_with_page_data_and_origins( + room_manager: Arc, + asset_store: Arc, + start_time: std::time::Instant, + db: Option>, + host_version: &'static str, + page_data_dir: Option, + cors_allow_origins: Vec, ) -> Router { let page_data = page_data_dir.map(crate::page_data::PageDataStore::new); + let cors_allow_origins = cors_allow_origins + .into_iter() + .filter_map(|origin| match normalized_browser_origin(&origin) { + Some(origin) => Some(origin), + None => { + tracing::warn!("Ignoring invalid relay CORS origin {origin:?}"); + None + } + }) + .collect::>(); let state = AppState { room_manager, start_time, @@ -417,9 +1052,10 @@ pub fn build_relay_router_with_page_data( page_data, login_rate_limiter: std::sync::Arc::new(crate::routes::auth::LoginRateLimiter::new()), device_manager: crate::relay::DeviceManager::new(), + cors_allow_origins: Arc::new(cors_allow_origins.clone()), }; - Router::new() + let router = Router::new() .route( "/health", get(move |state| routes::api::health_check_for_host(state, host_version)), @@ -457,8 +1093,36 @@ pub fn build_relay_router_with_page_data( .merge(routes::sync::sync_router()) .merge(routes::devices::device_router()) .merge(routes::pages::pages_router()) - .layer(tower_http::cors::CorsLayer::permissive()) .with_state(state) + .layer(axum::middleware::from_fn(relay_security_headers)); + + if cors_allow_origins.is_empty() { + return router; + } + + use tower_http::cors::{AllowOrigin, CorsLayer}; + let allow_origin = if cors_allow_origins.iter().any(|origin| origin == "*") { + tracing::warn!("Relay browser CORS is configured for every origin"); + AllowOrigin::any() + } else { + let values = cors_allow_origins + .iter() + .filter_map(|origin| match origin.parse::() { + Ok(value) => Some(value), + Err(error) => { + tracing::warn!("Ignoring invalid relay CORS origin {origin:?}: {error}"); + None + } + }) + .collect::>(); + AllowOrigin::list(values) + }; + router.layer( + CorsLayer::new() + .allow_origin(allow_origin) + .allow_methods([Method::GET, Method::POST, Method::DELETE, Method::OPTIONS]) + .allow_headers([header::AUTHORIZATION, header::CONTENT_TYPE]), + ) } #[cfg(test)] @@ -500,6 +1164,27 @@ mod tests { assert_eq!(health["rooms"], 0); assert_eq!(health["connections"], 0); assert_eq!(health["version"], "test-host-version"); + assert_eq!(health["asset_store_bytes"], 0); + assert_eq!( + health["asset_store_max_bytes"], + DEFAULT_MEMORY_ASSET_STORE_MAX_BYTES + ); + + let headers_response = app + .clone() + .oneshot( + Request::builder() + .uri("/health") + .body(axum::body::Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + assert_eq!( + headers_response.headers()["x-content-type-options"], + "nosniff" + ); + assert_eq!(headers_response.headers()["referrer-policy"], "no-referrer"); let info = get_json(app, "/api/info").await; assert_eq!(info["name"], "BitFun Relay Server"); diff --git a/src/crates/services/relay-service/src/relay/device_manager.rs b/src/crates/services/relay-service/src/relay/device_manager.rs index 3f9b3c98a6..983cccae29 100644 --- a/src/crates/services/relay-service/src/relay/device_manager.rs +++ b/src/crates/services/relay-service/src/relay/device_manager.rs @@ -12,22 +12,28 @@ use dashmap::DashMap; use std::sync::Arc; -use tokio::sync::{mpsc, oneshot}; +use tokio::sync::{mpsc, oneshot, watch, OwnedSemaphorePermit, Semaphore}; use tracing::{debug, info}; use crate::relay::room::{ConnId, OutboundMessage}; +pub const MAX_PENDING_DEVICE_RPCS: usize = 1024; + /// An online device connection belonging to a user. struct DeviceConn { #[allow(dead_code)] conn_id: ConnId, device_name: String, tx: mpsc::Sender, + force_close_tx: watch::Sender, } /// Pending HTTP RPC response, keyed by correlation_id. struct PendingRpc { tx: oneshot::Sender, + user_id: String, + target_device_id: String, + _permit: OwnedSemaphorePermit, } /// The response payload from a device RPC call. @@ -46,6 +52,7 @@ pub struct DeviceManager { conn_to_device: DashMap, /// correlation_id → pending RPC response sender (for HTTP→WS→HTTP bridge). pending_rpcs: DashMap, + pending_rpc_permits: Arc, } impl DeviceManager { @@ -54,6 +61,7 @@ impl DeviceManager { users: DashMap::new(), conn_to_device: DashMap::new(), pending_rpcs: DashMap::new(), + pending_rpc_permits: Arc::new(Semaphore::new(MAX_PENDING_DEVICE_RPCS)), }) } @@ -68,6 +76,7 @@ impl DeviceManager { device_name: &str, conn_id: ConnId, tx: mpsc::Sender, + force_close_tx: watch::Sender, ) -> Vec<(String, String)> { // Remove any stale conn mapping for this conn first. if let Some((_, (old_user, old_device))) = self.conn_to_device.remove(&conn_id) { @@ -87,9 +96,13 @@ impl DeviceManager { // If this device already has a live conn, drop the stale conn→device // mapping so a later disconnect of the old socket cannot unregister // the replacement connection. - if let Some(prior) = entry.get(device_id) { - if prior.conn_id != conn_id { - self.conn_to_device.remove(&prior.conn_id); + let prior = entry + .get(device_id) + .map(|prior| (prior.conn_id, prior.force_close_tx.clone())); + if let Some((prior_conn_id, prior_close_tx)) = prior { + if prior_conn_id != conn_id { + self.conn_to_device.remove(&prior_conn_id); + let _ = prior_close_tx.send(true); } } let others: Vec<(String, String)> = entry @@ -103,6 +116,7 @@ impl DeviceManager { conn_id, device_name: device_name.to_string(), tx, + force_close_tx, }, ); self.conn_to_device @@ -141,18 +155,22 @@ impl DeviceManager { removed.map(|(_, v)| v) } - /// Force-disconnect a specific device from the account by sending a - /// close on its WS sender. The actual cleanup is done by the WS read - /// loop's `unregister` when it detects the broken pipe. - pub fn disconnect_device(&self, user_id: &str, device_id: &str) { - if let Some(user_devices) = self.users.get(user_id) { - if let Some(dev) = user_devices.get(device_id) { - let _ = dev.tx.try_send(OutboundMessage { - text: r#"{"type":"force_disconnect"}"#.to_string(), - }); - debug!("Force-disconnect sent to device {device_id}"); - } - } + /// Immediately revoke a device's in-memory authorization and close its + /// WebSocket through a dedicated control channel. The close signal cannot + /// be starved by a saturated outbound data queue. + pub fn disconnect_device(&self, user_id: &str, device_id: &str) -> bool { + let removed = self + .users + .get(user_id) + .and_then(|devices| devices.remove(device_id).map(|(_, device)| device)); + let Some(device) = removed else { + return false; + }; + + self.conn_to_device.remove(&device.conn_id); + let _ = device.force_close_tx.send(true); + debug!("Force-disconnected device {device_id}"); + true } /// Route a raw JSON text message to `target_device_id` within `user_id`. @@ -164,9 +182,7 @@ impl DeviceManager { let Some(dev) = user_devices.get(target_device_id) else { return false; }; - match dev.tx.try_send(OutboundMessage { - text: text.to_string(), - }) { + match dev.tx.try_send(OutboundMessage::text(text)) { Ok(()) => true, Err(tokio::sync::mpsc::error::TrySendError::Full(_)) => { debug!("route_message: target {target_device_id} queue full, dropping"); @@ -189,6 +205,14 @@ impl DeviceManager { .unwrap_or_default() } + pub fn connection_count(&self) -> usize { + self.conn_to_device.len() + } + + pub fn pending_rpc_count(&self) -> usize { + self.pending_rpcs.len() + } + /// Look up the `(user_id, device_id)` owning a connection (for routing /// device-to-device messages from the sender's conn). Returns an owned /// copy because the registry guard is released on return. @@ -204,9 +228,7 @@ impl DeviceManager { for entry in user_devices.iter() { if entry.key() != exclude_device_id { let tx = entry.tx.clone(); - let msg = OutboundMessage { - text: text.to_string(), - }; + let msg = OutboundMessage::text(text); // best-effort; don't block the caller on a slow peer let _ = tx.try_send(msg); } @@ -217,18 +239,49 @@ impl DeviceManager { /// Register a pending RPC response keyed by `correlation_id`. /// Returns the receiver end that the HTTP handler will await. - pub fn register_rpc(&self, correlation_id: &str) -> oneshot::Receiver { + pub fn register_rpc( + &self, + correlation_id: &str, + user_id: &str, + target_device_id: &str, + ) -> Option> { + let permit = Arc::clone(&self.pending_rpc_permits) + .try_acquire_owned() + .ok()?; let (tx, rx) = oneshot::channel(); - self.pending_rpcs - .insert(correlation_id.to_string(), PendingRpc { tx }); - rx + self.pending_rpcs.insert( + correlation_id.to_string(), + PendingRpc { + tx, + user_id: user_id.to_string(), + target_device_id: target_device_id.to_string(), + _permit: permit, + }, + ); + Some(rx) } /// Resolve a pending RPC by `correlation_id` (called when a device /// sends back a DeviceMessage response via WS). Returns false if no /// pending RPC matches (e.g. it was a fire-and-forget WS message, not /// an HTTP-initiated RPC). - pub fn resolve_rpc(&self, correlation_id: &str, response: RpcResponse) -> bool { + pub fn resolve_rpc( + &self, + correlation_id: &str, + user_id: &str, + source_device_id: &str, + response: RpcResponse, + ) -> bool { + let is_expected_source = self + .pending_rpcs + .get(correlation_id) + .map(|pending| { + pending.user_id == user_id && pending.target_device_id == source_device_id + }) + .unwrap_or(false); + if !is_expected_source { + return false; + } if let Some(entry) = self.pending_rpcs.remove(correlation_id) { let _ = entry.1.tx.send(response); true @@ -256,15 +309,18 @@ mod tests { fn stale_unregister_does_not_drop_replacement_connection() { let mgr = DeviceManager::new(); let tx = dummy_tx(); + let (close_tx_1, mut close_rx_1) = watch::channel(false); - mgr.register("user-1", "dev-1", "A", 1, tx.clone()); + mgr.register("user-1", "dev-1", "A", 1, tx.clone(), close_tx_1); assert_eq!(mgr.online_devices("user-1").len(), 1); // Reconnect with a new conn id. - mgr.register("user-1", "dev-1", "A", 2, tx); + let (close_tx_2, _close_rx_2) = watch::channel(false); + mgr.register("user-1", "dev-1", "A", 2, tx, close_tx_2); assert_eq!(mgr.online_devices("user-1").len(), 1); assert_eq!(mgr.conn_mapping(2), Some(("user-1".into(), "dev-1".into()))); assert_eq!(mgr.conn_mapping(1), None); + assert!(*close_rx_1.borrow_and_update()); // Late disconnect of the old socket must not remove the new registration. assert_eq!(mgr.unregister(1), None); @@ -275,4 +331,63 @@ mod tests { assert_eq!(mgr.unregister(2), Some(("user-1".into(), "dev-1".into()))); assert!(mgr.online_devices("user-1").is_empty()); } + + #[tokio::test] + async fn disconnect_revokes_routing_before_socket_close_is_consumed() { + let mgr = DeviceManager::new(); + let (tx, _rx) = mpsc::channel(8); + let (close_tx, mut close_rx) = watch::channel(false); + mgr.register("user-1", "dev-1", "A", 1, tx, close_tx); + + assert!(mgr.disconnect_device("user-1", "dev-1")); + assert!(mgr.conn_mapping(1).is_none()); + assert!(mgr.online_devices("user-1").is_empty()); + close_rx.changed().await.expect("close signal"); + assert!(*close_rx.borrow()); + } + + #[tokio::test] + async fn rpc_response_must_come_from_the_expected_account_and_device() { + let mgr = DeviceManager::new(); + let mut response_rx = mgr + .register_rpc("corr-1", "user-1", "desktop-1") + .expect("RPC registration"); + let response = RpcResponse { + encrypted_data: "ciphertext".to_string(), + nonce: "nonce".to_string(), + }; + + assert!(!mgr.resolve_rpc("corr-1", "user-2", "desktop-1", response.clone())); + assert!(!mgr.resolve_rpc("corr-1", "user-1", "desktop-2", response.clone())); + assert!(response_rx.try_recv().is_err()); + assert!(mgr.resolve_rpc("corr-1", "user-1", "desktop-1", response)); + assert_eq!( + response_rx + .await + .expect("expected RPC response") + .encrypted_data, + "ciphertext" + ); + } + + #[test] + fn pending_device_rpcs_are_bounded_and_permits_are_reclaimed() { + let mgr = DeviceManager::new(); + let mut receivers = Vec::new(); + for index in 0..MAX_PENDING_DEVICE_RPCS { + receivers.push( + mgr.register_rpc(&format!("corr-{index}"), "user-1", "desktop-1") + .expect("registration within global limit"), + ); + } + assert!(mgr + .register_rpc("overflow", "user-1", "desktop-1") + .is_none()); + + mgr.cancel_rpc("corr-0"); + assert!(mgr + .register_rpc("after-cancel", "user-1", "desktop-1") + .is_some()); + drop(receivers); + } } diff --git a/src/crates/services/relay-service/src/relay/room.rs b/src/crates/services/relay-service/src/relay/room.rs index c2662e996f..e13450ab6e 100644 --- a/src/crates/services/relay-service/src/relay/room.rs +++ b/src/crates/services/relay-service/src/relay/room.rs @@ -15,6 +15,19 @@ use tracing::{debug, info, warn}; pub type ConnId = u64; pub const MAX_PENDING_REQUESTS: usize = 1024; pub const MAX_PENDING_REQUESTS_PER_ROOM: usize = 128; +pub const MAX_ACTIVE_ROOMS: usize = 10_000; + +/// Room IDs cross an untrusted WebSocket boundary and later become asset +/// namespace names. Keep them to one portable path segment so they can never +/// influence filesystem traversal in a disk-backed relay host. +pub fn is_valid_room_id(room_id: &str) -> bool { + !room_id.is_empty() + && room_id.len() <= 128 + && !matches!(room_id, "_store" | "page-data" | "pages") + && room_id + .bytes() + .all(|byte| byte.is_ascii_alphanumeric() || matches!(byte, b'-' | b'_')) +} struct PendingRequest { tx: oneshot::Sender, @@ -38,6 +51,12 @@ pub struct OutboundMessage { pub text: String, } +impl OutboundMessage { + pub fn text(text: impl Into) -> Self { + Self { text: text.into() } + } +} + /// Payload returned by the desktop in response to a bridged HTTP request. #[derive(Debug, Clone)] pub struct ResponsePayload { @@ -134,20 +153,14 @@ impl RoomManager { public_key: &str, tx: mpsc::Sender, ) -> bool { - if let Some((_, old_room_id)) = self.conn_to_room.remove(&conn_id) { - let should_remove = if let Some(mut room) = self.rooms.get_mut(&old_room_id) { - room.desktop = None; - room.is_empty() - } else { - false - }; - if should_remove { - self.rooms.remove(&old_room_id); - } + if !is_valid_room_id(room_id) { + warn!("Rejected invalid room id"); + return false; + } + if self.rooms.len() >= MAX_ACTIVE_ROOMS && !self.rooms.contains_key(room_id) { + warn!("Rejected room creation because the active-room limit was reached"); + return false; } - - self.rooms.remove(room_id); - let now = Utc::now().timestamp(); let mut room = RelayRoom::new(room_id.to_string()); room.desktop = Some(DesktopConnection { @@ -159,8 +172,50 @@ impl RoomManager { last_heartbeat: now, }); - self.rooms.insert(room_id.to_string(), room); - self.conn_to_room.insert(conn_id, room_id.to_string()); + // Room ids are bearer secrets embedded in pairing QR codes. A second + // socket must never be able to evict the desktop that currently owns + // one by guessing or observing the id. Re-sending create_room from the + // same socket is harmless and remains supported. + match self.rooms.entry(room_id.to_string()) { + Entry::Occupied(mut existing) => { + let owned_by_other_connection = existing + .get() + .desktop + .as_ref() + .is_some_and(|desktop| desktop.conn_id != conn_id); + if owned_by_other_connection { + warn!("Rejected attempt to replace an active relay room"); + return false; + } + existing.insert(room); + } + Entry::Vacant(vacant) => { + vacant.insert(room); + } + } + + if let Some(previous_room_id) = self + .conn_to_room + .insert(conn_id, room_id.to_string()) + .filter(|previous| previous != room_id) + { + let should_remove = + if let Some(mut previous_room) = self.rooms.get_mut(&previous_room_id) { + if previous_room + .desktop + .as_ref() + .is_some_and(|desktop| desktop.conn_id == conn_id) + { + previous_room.desktop = None; + } + previous_room.is_empty() + } else { + false + }; + if should_remove { + self.rooms.remove(&previous_room_id); + } + } info!("Room {room_id} created by desktop {device_id}"); true @@ -175,13 +230,7 @@ impl RoomManager { }; if let Some(tx) = tx { - send_outbound_message( - &tx, - OutboundMessage { - text: message.to_string(), - }, - ) - .await + send_outbound_message(&tx, OutboundMessage::text(message)).await } else { false } @@ -223,7 +272,34 @@ impl RoomManager { Some((guard, rx)) } - pub fn resolve_pending(&self, correlation_id: &str, payload: ResponsePayload) -> bool { + /// Resolve a pending response only when it originates from the desktop + /// socket that currently owns the associated room. Correlation ids are not + /// authorization secrets and must not be sufficient on their own. + pub fn resolve_pending_from_conn( + &self, + conn_id: ConnId, + correlation_id: &str, + payload: ResponsePayload, + ) -> bool { + let expected_room_id = self + .pending_requests + .get(correlation_id) + .map(|pending| pending.room_id.clone()); + let owns_expected_room = expected_room_id.as_ref().is_some_and(|expected| { + self.conn_to_room + .get(&conn_id) + .is_some_and(|actual| actual.value() == expected) + && self.rooms.get(expected).is_some_and(|room| { + room.desktop + .as_ref() + .is_some_and(|desktop| desktop.conn_id == conn_id) + }) + }); + if !owns_expected_room { + warn!("Rejected relay response from a socket that does not own the pending room"); + return false; + } + if let Some((_, pending)) = self.pending_requests.remove(correlation_id) { self.release_room_pending(&pending.room_id); pending.tx.send(payload).is_ok() @@ -300,15 +376,27 @@ impl RoomManager { } pub fn cleanup_stale_rooms(&self, ttl_secs: u64) -> Vec { + if ttl_secs == 0 { + return Vec::new(); + } let now = Utc::now().timestamp(); let stale_ids: Vec = self .rooms .iter() - .filter(|r| (now - r.last_activity) as u64 > ttl_secs) + .filter(|r| now.saturating_sub(r.last_activity) as u64 > ttl_secs) .map(|r| r.room_id.clone()) .collect(); for room_id in &stale_ids { + let pending_ids: Vec = self + .pending_requests + .iter() + .filter(|pending| pending.room_id == *room_id) + .map(|pending| pending.key().clone()) + .collect(); + for correlation_id in pending_ids { + self.cancel_pending(&correlation_id); + } if let Some((_, room)) = self.rooms.remove(room_id) { if let Some(ref desktop) = room.desktop { self.conn_to_room.remove(&desktop.conn_id); @@ -335,6 +423,14 @@ impl RoomManager { pub fn connection_count(&self) -> usize { self.conn_to_room.len() } + + pub fn pending_request_count(&self) -> usize { + self.pending_requests.len() + } + + pub fn has_connection(&self, conn_id: ConnId) -> bool { + self.conn_to_room.contains_key(&conn_id) + } } #[cfg(test)] @@ -346,27 +442,11 @@ mod tests { async fn outbound_send_waits_for_bounded_queue_capacity() { let (tx, mut rx) = mpsc::channel(1); - assert!( - send_outbound_message( - &tx, - OutboundMessage { - text: "first".to_string(), - }, - ) - .await - ); + assert!(send_outbound_message(&tx, OutboundMessage::text("first"),).await); let blocked_send = tokio::spawn({ let tx = tx.clone(); - async move { - send_outbound_message( - &tx, - OutboundMessage { - text: "second".to_string(), - }, - ) - .await - } + async move { send_outbound_message(&tx, OutboundMessage::text("second")).await } }); tokio::task::yield_now().await; @@ -440,7 +520,10 @@ mod tests { let (_guard, _rx) = manager .try_register_pending("room-b", "pending-b".to_string()) .expect("pending registration"); - assert!(manager.resolve_pending( + let (tx, _rx) = mpsc::channel(1); + assert!(manager.create_room("room-b", 2, "desktop-b", "public-key", tx)); + assert!(manager.resolve_pending_from_conn( + 2, "pending-b", ResponsePayload { encrypted_data: "encrypted".to_string(), @@ -449,4 +532,58 @@ mod tests { )); assert!(!manager.pending_room_counts.contains_key("room-b")); } + + #[test] + fn active_room_cannot_be_replaced_by_another_connection() { + let manager = RoomManager::new(); + let (tx_a, _rx_a) = mpsc::channel(1); + let (tx_b, _rx_b) = mpsc::channel(1); + + assert!(manager.create_room("room-a", 1, "desktop-a", "key-a", tx_a)); + assert!(!manager.create_room("room-a", 2, "desktop-b", "key-b", tx_b)); + assert!(manager.heartbeat(1)); + assert!(!manager.heartbeat(2)); + } + + #[test] + fn pending_response_must_come_from_owning_room_connection() { + let manager = RoomManager::new(); + let (tx_a, _rx_a) = mpsc::channel(1); + let (tx_b, _rx_b) = mpsc::channel(1); + assert!(manager.create_room("room-a", 1, "desktop-a", "key-a", tx_a)); + assert!(manager.create_room("room-b", 2, "desktop-b", "key-b", tx_b)); + let (_guard, mut rx) = manager + .try_register_pending("room-a", "pending-a".to_string()) + .expect("pending registration"); + let response = ResponsePayload { + encrypted_data: "encrypted".to_string(), + nonce: "nonce".to_string(), + }; + + assert!(!manager.resolve_pending_from_conn(2, "pending-a", response.clone())); + assert!(rx.try_recv().is_err()); + assert!(manager.resolve_pending_from_conn(1, "pending-a", response)); + } + + #[test] + fn room_ids_are_single_portable_path_segments() { + for valid in ["room-a", "ROOM_1", "0123456789abcdef"] { + assert!(is_valid_room_id(valid), "room id should be valid: {valid}"); + } + for invalid in [ + "", + "../room", + "/tmp/room", + "room/child", + "room\\child", + "_store", + "page-data", + "pages", + ] { + assert!( + !is_valid_room_id(invalid), + "room id should be rejected: {invalid}" + ); + } + } } diff --git a/src/crates/services/relay-service/src/routes/api.rs b/src/crates/services/relay-service/src/routes/api.rs index 45e6aa12c3..6388ee4055 100644 --- a/src/crates/services/relay-service/src/routes/api.rs +++ b/src/crates/services/relay-service/src/routes/api.rs @@ -28,6 +28,32 @@ use crate::WebAssetStore; const DESKTOP_ENQUEUE_TIMEOUT: Duration = Duration::from_secs(5); #[cfg(test)] const DESKTOP_ENQUEUE_TIMEOUT: Duration = Duration::from_millis(25); +const MAX_IDENTIFIER_BYTES: usize = 128; +const MAX_DEVICE_NAME_BYTES: usize = 256; +const MAX_PUBLIC_KEY_BYTES: usize = 512; +const MAX_ENCRYPTED_PAYLOAD_BYTES: usize = 10 * 1024 * 1024; +const MAX_NONCE_BYTES: usize = 256; +const MAX_ROOM_WEB_FILES: usize = 4096; + +fn is_valid_identifier(value: &str) -> bool { + !value.is_empty() + && value.len() <= MAX_IDENTIFIER_BYTES + && value + .bytes() + .all(|byte| byte.is_ascii_alphanumeric() || matches!(byte, b'-' | b'_' | b'.')) +} + +fn is_valid_display_text(value: &str, max_bytes: usize) -> bool { + !value.trim().is_empty() && value.len() <= max_bytes && !value.chars().any(char::is_control) +} + +fn is_valid_encrypted_payload(encrypted_data: &str, nonce: &str) -> bool { + !encrypted_data.is_empty() + && encrypted_data.len() <= MAX_ENCRYPTED_PAYLOAD_BYTES + && !nonce.is_empty() + && nonce.len() <= MAX_NONCE_BYTES + && !nonce.chars().any(char::is_control) +} #[derive(Clone)] pub struct AppState { @@ -43,6 +69,9 @@ pub struct AppState { pub login_rate_limiter: Arc, /// Per-user online device registry for account-based device routing. pub device_manager: Arc, + /// Browser origins explicitly allowed to call this relay. An empty list + /// means same-origin only; non-browser clients normally omit Origin. + pub cors_allow_origins: Arc>, } // ── Health & Info ────────────────────────────────────────────────────────── @@ -54,6 +83,12 @@ pub struct HealthResponse { pub uptime_seconds: u64, pub rooms: usize, pub connections: usize, + pub account_features: bool, + pub device_connections: usize, + pub pending_room_requests: usize, + pub pending_device_rpcs: usize, + pub asset_store_bytes: u64, + pub asset_store_max_bytes: u64, } pub async fn health_check(State(state): State) -> Json { @@ -70,6 +105,12 @@ pub(crate) async fn health_check_for_host( uptime_seconds: state.start_time.elapsed().as_secs(), rooms: state.room_manager.room_count(), connections: state.room_manager.connection_count(), + account_features: state.db.is_some(), + device_connections: state.device_manager.connection_count(), + pending_room_requests: state.room_manager.pending_request_count(), + pending_device_rpcs: state.device_manager.pending_rpc_count(), + asset_store_bytes: state.asset_store.stored_bytes(), + asset_store_max_bytes: state.asset_store.max_store_bytes(), }) } @@ -116,6 +157,13 @@ pub async fn pair( Path(room_id): Path, Json(body): Json, ) -> Result, StatusCode> { + if !crate::relay::room::is_valid_room_id(&room_id) + || !is_valid_identifier(&body.device_id) + || !is_valid_display_text(&body.device_name, MAX_DEVICE_NAME_BYTES) + || !is_valid_display_text(&body.public_key, MAX_PUBLIC_KEY_BYTES) + { + return Err(StatusCode::BAD_REQUEST); + } if !state.room_manager.has_desktop(&room_id) { return Err(StatusCode::NOT_FOUND); } @@ -179,6 +227,11 @@ pub async fn command( Path(room_id): Path, Json(body): Json, ) -> Result, StatusCode> { + if !crate::relay::room::is_valid_room_id(&room_id) + || !is_valid_encrypted_payload(&body.encrypted_data, &body.nonce) + { + return Err(StatusCode::BAD_REQUEST); + } if !state.room_manager.has_desktop(&room_id) { return Err(StatusCode::NOT_FOUND); } @@ -263,6 +316,14 @@ pub async fn upload_web( if !state.room_manager.room_exists(&room_id) { return Err(StatusCode::NOT_FOUND); } + if body.files.len() > MAX_ROOM_WEB_FILES + || body + .files + .keys() + .any(|path| crate::validated_asset_relative_path(path).is_err()) + { + return Err(StatusCode::BAD_REQUEST); + } let asset_store = Arc::clone(&state.asset_store); let room_id_for_io = room_id.clone(); @@ -311,6 +372,14 @@ pub async fn check_web_files( if !state.room_manager.room_exists(&room_id) { return Err(StatusCode::NOT_FOUND); } + if body.files.len() > MAX_ROOM_WEB_FILES + || body.files.iter().any(|entry| { + crate::validated_asset_relative_path(&entry.path).is_err() + || !crate::is_valid_content_hash(&entry.hash) + }) + { + return Err(StatusCode::BAD_REQUEST); + } let asset_store = Arc::clone(&state.asset_store); let room_id_for_io = room_id.clone(); @@ -350,6 +419,14 @@ pub async fn upload_web_files( if !state.room_manager.room_exists(&room_id) { return Err(StatusCode::NOT_FOUND); } + if body.files.len() > MAX_ROOM_WEB_FILES + || body.files.iter().any(|(path, entry)| { + crate::validated_asset_relative_path(path).is_err() + || !crate::is_valid_content_hash(&entry.hash) + }) + { + return Err(StatusCode::BAD_REQUEST); + } let asset_store = Arc::clone(&state.asset_store); let room_id_for_io = room_id.clone(); @@ -390,6 +467,8 @@ pub async fn serve_room_web_catchall( file_path } .to_string(); + crate::validated_asset_relative_path(room_id).map_err(|_| StatusCode::BAD_REQUEST)?; + crate::validated_asset_relative_path(&lookup_path).map_err(|_| StatusCode::BAD_REQUEST)?; let asset_store = Arc::clone(&state.asset_store); let room_id_for_io = room_id.to_string(); @@ -402,7 +481,14 @@ pub async fn serve_room_web_catchall( .ok_or(StatusCode::NOT_FOUND)?; let mime = mime_from_path(&lookup_path); - Ok(([(header::CONTENT_TYPE, mime)], Body::from(content)).into_response()) + Ok(( + [ + (header::CONTENT_TYPE, mime), + (header::X_FRAME_OPTIONS, "DENY"), + ], + Body::from(content), + ) + .into_response()) } fn process_upload_web( @@ -413,9 +499,7 @@ fn process_upload_web( let mut written = 0usize; let mut reused = 0usize; for (rel_path, b64_content) in files { - if rel_path.contains("..") { - continue; - } + crate::validated_asset_relative_path(&rel_path).map_err(|_| StatusCode::BAD_REQUEST)?; let decoded = B64 .decode(b64_content) .map_err(|_| StatusCode::BAD_REQUEST)?; @@ -424,7 +508,7 @@ fn process_upload_web( if !asset_store.has_content(&hash) { asset_store .store_content(&hash, decoded) - .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + .map_err(crate::asset_store_error_status)?; written += 1; } else { reused += 1; @@ -448,7 +532,10 @@ fn process_check_web_files( let total_count = files.len(); for entry in files { - if entry.path.contains("..") { + if crate::validated_asset_relative_path(&entry.path).is_err() + || !crate::is_valid_content_hash(&entry.hash) + { + needed.push(entry.path); continue; } if asset_store.has_content(&entry.hash) { @@ -473,9 +560,7 @@ fn process_upload_web_files( ) -> Result { let mut stored = 0usize; for (rel_path, entry) in files { - if rel_path.contains("..") { - continue; - } + crate::validated_asset_relative_path(&rel_path).map_err(|_| StatusCode::BAD_REQUEST)?; let decoded = B64 .decode(&entry.content) .map_err(|_| StatusCode::BAD_REQUEST)?; @@ -491,7 +576,7 @@ fn process_upload_web_files( if !asset_store.has_content(&actual_hash) { asset_store .store_content(&actual_hash, decoded) - .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + .map_err(crate::asset_store_error_status)?; stored += 1; } @@ -527,6 +612,7 @@ mod tests { use crate::MemoryAssetStore; use axum::extract::{Path, State}; use axum::Json; + use std::collections::HashMap; use tokio::sync::mpsc; fn test_state(room_manager: Arc) -> AppState { @@ -538,6 +624,7 @@ mod tests { page_data: None, login_rate_limiter: Arc::new(crate::routes::auth::LoginRateLimiter::new()), device_manager: crate::relay::DeviceManager::new(), + cors_allow_origins: Arc::new(Vec::new()), } } @@ -545,11 +632,9 @@ mod tests { async fn pair_reports_backpressure_before_response_timeout() { let room_manager = RoomManager::new(); let (tx, _rx) = mpsc::channel(1); - tx.send(OutboundMessage { - text: "queued".to_string(), - }) - .await - .expect("queue should accept first message"); + tx.send(OutboundMessage::text("queued")) + .await + .expect("queue should accept first message"); room_manager.create_room("room-a", 1, "desktop-a", "public-key", tx); let result = tokio::time::timeout( @@ -569,4 +654,22 @@ mod tests { assert!(matches!(result, Err(StatusCode::SERVICE_UNAVAILABLE))); } + + #[tokio::test] + async fn room_web_upload_rejects_absolute_file_paths() { + let room_manager = RoomManager::new(); + let (tx, _rx) = mpsc::channel(1); + assert!(room_manager.create_room("room-a", 1, "desktop-a", "public-key", tx)); + let mut files = HashMap::new(); + files.insert("/tmp/relay-owned".to_string(), B64.encode(b"owned")); + + let result = upload_web( + State(test_state(room_manager)), + Path("room-a".to_string()), + Json(UploadWebRequest { files }), + ) + .await; + + assert!(matches!(result, Err(StatusCode::BAD_REQUEST))); + } } diff --git a/src/crates/services/relay-service/src/routes/auth.rs b/src/crates/services/relay-service/src/routes/auth.rs index 1d06e982fe..f30defe931 100644 --- a/src/crates/services/relay-service/src/routes/auth.rs +++ b/src/crates/services/relay-service/src/routes/auth.rs @@ -11,12 +11,16 @@ //! - per-IP sliding-window rate limit (in-memory) //! - Argon2id high parameters slow offline attacks (client-enforced) -use axum::extract::State; +use axum::extract::{ConnectInfo, State}; use axum::http::{HeaderMap, StatusCode}; -use axum::Json; +use axum::{Extension, Json}; +use base64::{engine::general_purpose::STANDARD as BASE64, Engine}; use chrono::Utc; use dashmap::DashMap; use serde::{Deserialize, Serialize}; +use std::net::SocketAddr; +use std::sync::OnceLock; +use subtle::ConstantTimeEq; use crate::db::{AuthToken, DeviceRow, UserRow}; use crate::routes::api::AppState; @@ -26,6 +30,64 @@ use crate::routes::api::AppState; const MAX_LOGIN_ATTEMPTS_PER_MIN: usize = 10; /// Max challenge requests per IP per minute (stops bulk salt harvesting). const MAX_CHALLENGE_PER_MIN: usize = 20; +const MAX_RATE_LIMIT_BUCKETS: usize = 50_000; +const MAX_USERNAME_BYTES: usize = 128; +const MAX_PASSWORD_HASH_BYTES: usize = 128; +const MAX_DEVICE_ID_BYTES: usize = 128; +const MAX_DEVICE_NAME_BYTES: usize = 256; + +fn valid_bounded_text(value: &str, max_bytes: usize) -> bool { + !value.trim().is_empty() && value.len() <= max_bytes && !value.chars().any(char::is_control) +} + +fn valid_device_id(value: &str) -> bool { + !value.is_empty() + && value.len() <= MAX_DEVICE_ID_BYTES + && value + .bytes() + .all(|byte| byte.is_ascii_alphanumeric() || matches!(byte, b'-' | b'_' | b'.')) +} + +fn valid_password_hash(value: &str) -> bool { + !value.is_empty() + && value.len() <= MAX_PASSWORD_HASH_BYTES + && value.bytes().all(|byte| { + byte.is_ascii_alphanumeric() || matches!(byte, b'+' | b'/' | b'=' | b'-' | b'_') + }) +} + +fn decoy_login_challenge(username: &str) -> LoginChallengeResponse { + use sha2::{Digest, Sha256}; + + static SECRET: OnceLock<[u8; 32]> = OnceLock::new(); + let secret = SECRET.get_or_init(rand::random); + let material = |label: &[u8]| { + let mut hasher = Sha256::new(); + hasher.update(secret); + hasher.update(label); + hasher.update(username.as_bytes()); + hasher.finalize() + }; + let salt_material = material(b"salt"); + let kdf_salt_material = material(b"kdf-salt"); + let ciphertext_head = material(b"wrapped-key-1"); + let ciphertext_tail = material(b"wrapped-key-2"); + let nonce_material = material(b"nonce"); + let mut ciphertext = Vec::with_capacity(48); + ciphertext.extend_from_slice(&ciphertext_head); + ciphertext.extend_from_slice(&ciphertext_tail[..16]); + + LoginChallengeResponse { + salt: BASE64.encode(&salt_material[..16]), + kdf_salt: BASE64.encode(&kdf_salt_material[..16]), + argon2_params: r#"{"m":65536,"t":3,"p":4}"#.to_string(), + wrapped_master_key: format!( + "{}.{}", + BASE64.encode(ciphertext), + BASE64.encode(&nonce_material[..12]) + ), + } +} // ── IP rate limiter (sliding window, in-memory) ───────────────────────── @@ -48,6 +110,15 @@ impl LoginRateLimiter { fn check_and_record(&self, ip: &str, max_per_min: usize) -> bool { let now = Utc::now().timestamp(); let cutoff = now - 60; + if self.attempts.len() >= MAX_RATE_LIMIT_BUCKETS && !self.attempts.contains_key(ip) { + self.attempts.retain(|_, timestamps| { + timestamps.retain(|timestamp| *timestamp > cutoff); + !timestamps.is_empty() + }); + if self.attempts.len() >= MAX_RATE_LIMIT_BUCKETS { + return false; + } + } let mut entry = self.attempts.entry(ip.to_string()).or_default(); let timestamps = entry.value_mut(); timestamps.retain(|t| *t > cutoff); @@ -67,14 +138,27 @@ impl Default for LoginRateLimiter { /// Extract the client IP from `X-Forwarded-For` (first hop) or fall back to a /// static bucket so all headerless requests share one limiter entry. -fn client_ip(headers: &HeaderMap) -> String { - headers - .get("x-forwarded-for") - .and_then(|v| v.to_str().ok()) - .and_then(|s| s.split(',').next()) - .map(|s| s.trim().to_string()) - .filter(|s| !s.is_empty()) - .unwrap_or_else(|| "unknown".to_string()) +fn client_ip(headers: &HeaderMap, peer_addr: Option) -> String { + let Some(peer_addr) = peer_addr else { + return "unknown".to_string(); + }; + + // Forwarded headers are caller-controlled unless the immediate peer is a + // local reverse proxy. Parse the value as an IP as well, so arbitrary + // strings cannot create unbounded rate-limit buckets. + if peer_addr.ip().is_loopback() { + if let Some(forwarded_ip) = headers + .get("x-forwarded-for") + .and_then(|value| value.to_str().ok()) + .and_then(|value| value.split(',').next()) + .map(str::trim) + .and_then(|value| value.parse::().ok()) + { + return forwarded_ip.to_string(); + } + } + + peer_addr.ip().to_string() } // ── Request / response types ──────────────────────────────────────────── @@ -90,7 +174,7 @@ pub struct LoginChallengeRequest { pub username: String, } -#[derive(Serialize)] +#[derive(Serialize, Deserialize)] pub struct LoginChallengeResponse { pub salt: String, pub kdf_salt: String, @@ -129,6 +213,7 @@ fn err(error: &str, status: StatusCode) -> (StatusCode, Json) { /// so the client can derive the KEK locally and attempt decryption. pub async fn login_challenge( State(state): State, + connect_info: Option>>, headers: HeaderMap, Json(body): Json, ) -> Result, (StatusCode, Json)> { @@ -139,7 +224,10 @@ pub async fn login_challenge( )); }; - let ip = client_ip(&headers); + let ip = client_ip( + &headers, + connect_info.map(|Extension(ConnectInfo(addr))| addr), + ); if !state .login_rate_limiter .check_and_record(&ip, MAX_CHALLENGE_PER_MIN) @@ -150,13 +238,23 @@ pub async fn login_challenge( )); } - let user = UserRow::find_by_username(db, body.username.trim()) - .await - .map_err(|e| { - tracing::error!("challenge: db error: {e}"); - err("internal error", StatusCode::INTERNAL_SERVER_ERROR) - })? - .ok_or_else(|| err("user not found", StatusCode::NOT_FOUND))?; + if !valid_bounded_text(&body.username, MAX_USERNAME_BYTES) { + return Err(err("invalid username", StatusCode::BAD_REQUEST)); + } + + let username = body.username.trim(); + let user = UserRow::find_by_username(db, username).await.map_err(|e| { + tracing::error!("challenge: db error: {e}"); + err("internal error", StatusCode::INTERNAL_SERVER_ERROR) + })?; + + // Unknown accounts receive a deterministic, process-keyed decoy with the + // same shape and KDF cost as a real challenge. The client then fails with + // the same local "invalid username or password" path, without exposing a + // bulk username-enumeration oracle at this endpoint. + let Some(user) = user else { + return Ok(Json(decoy_login_challenge(username))); + }; Ok(Json(LoginChallengeResponse { salt: user.salt, @@ -169,6 +267,7 @@ pub async fn login_challenge( /// `POST /api/auth/login` — verify the password hash and issue a token. pub async fn login( State(state): State, + connect_info: Option>>, headers: HeaderMap, Json(body): Json, ) -> Result, (StatusCode, Json)> { @@ -179,7 +278,10 @@ pub async fn login( )); }; - let ip = client_ip(&headers); + let ip = client_ip( + &headers, + connect_info.map(|Extension(ConnectInfo(addr))| addr), + ); if !state .login_rate_limiter .check_and_record(&ip, MAX_LOGIN_ATTEMPTS_PER_MIN) @@ -190,6 +292,14 @@ pub async fn login( )); } + if !valid_bounded_text(&body.username, MAX_USERNAME_BYTES) + || !valid_password_hash(&body.password_hash) + || !valid_device_id(&body.device_id) + || !valid_bounded_text(&body.device_name, MAX_DEVICE_NAME_BYTES) + { + return Err(err("invalid login parameters", StatusCode::BAD_REQUEST)); + } + let user = UserRow::find_by_username(db, body.username.trim()) .await .map_err(|e| { @@ -210,9 +320,16 @@ pub async fn login( )); } - // Verify password hash (constant-time comparison not needed: these are - // Argon2id outputs over distinct salts, compared as strings). - if user.password_hash != body.password_hash { + // The client already paid the Argon2id cost. Compare the resulting fixed + // secret without data-dependent early exit so the relay does not expose a + // prefix timing oracle. + let password_matches = user.password_hash.len() == body.password_hash.len() + && bool::from( + user.password_hash + .as_bytes() + .ct_eq(body.password_hash.as_bytes()), + ); + if !password_matches { let locked_until = UserRow::record_failed_attempt(db, &user.user_id) .await .map_err(|e| { @@ -282,13 +399,43 @@ pub async fn logout(State(state): State, headers: HeaderMap) -> Status match AuthToken::find(db, &token).await { Ok(Some(auth)) => { // Delete the token row - let _ = sqlx::query("DELETE FROM auth_tokens WHERE token = ?") + if let Err(error) = sqlx::query("DELETE FROM auth_tokens WHERE token = ?") .bind(&token) .execute(&**db) - .await; - // Mark device offline - let _ = crate::db::DeviceRow::set_online(db, &auth.device_id, false).await; - tracing::info!("Token revoked for device_id={}", auth.device_id); + .await + { + tracing::error!(%error, "Failed to revoke account token"); + return StatusCode::INTERNAL_SERVER_ERROR; + } + // A delegated control token borrows the desktop's device id but + // does not own its live connection. Logging out that client must + // never disconnect or mark the desktop offline. + if auth.is_device_token() { + let _ = crate::db::DeviceRow::set_online(db, &auth.user_id, &auth.device_id, false) + .await; + state + .device_manager + .disconnect_device(&auth.user_id, &auth.device_id); + let devices = state + .device_manager + .online_devices(&auth.user_id) + .into_iter() + .map( + |(device_id, device_name)| crate::routes::websocket::DevicePresenceEntry { + device_id, + device_name, + }, + ) + .collect(); + let presence = + crate::routes::websocket::OutboundProtocol::DevicePresence { devices }; + if let Ok(message) = serde_json::to_string(&presence) { + state + .device_manager + .broadcast_except(&auth.user_id, &auth.device_id, &message); + } + } + tracing::info!("Account token revoked for device_id={}", auth.device_id); StatusCode::NO_CONTENT } _ => StatusCode::UNAUTHORIZED, @@ -299,10 +446,10 @@ pub async fn logout(State(state): State, headers: HeaderMap) -> Status /// requests a new token for the same account, to be delegated to a paired /// mobile-web or IM bot client. Returns `{token, user_id}`. /// -/// The delegate token carries the same `user_id` as the caller's token but -/// references the caller's `device_id` (the paired desktop) for tracking. -/// The desktop is responsible for securely transmitting the token + master_key -/// to the paired client via the existing E2E room channel. +/// The delegated token carries the same `user_id` and references the caller's +/// `device_id` for lifetime tracking, but is limited to device discovery and +/// RPC. It cannot open a device WebSocket, mint more credentials, delete a +/// device, or access account sync/page APIs. pub async fn delegate( State(state): State, headers: HeaderMap, @@ -320,9 +467,13 @@ pub async fn delegate( .await .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)? .ok_or(StatusCode::UNAUTHORIZED)?; + if !auth.is_device_token() { + return Err(StatusCode::FORBIDDEN); + } - // Issue a new token for the same user, same device (the desktop's). - let new_token = AuthToken::create(db, &auth.user_id, &auth.device_id) + // Issue a capability-limited token for the same account and bind its + // lifetime to the delegating device row. + let new_token = AuthToken::create_delegated(db, &auth.user_id, &auth.device_id) .await .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; @@ -337,3 +488,145 @@ pub async fn delegate( user_id: auth.user_id, })) } + +#[cfg(test)] +mod tests { + use super::*; + use crate::db::{connect, DbPool}; + use crate::relay::RoomManager; + use crate::MemoryAssetStore; + use axum::body::{to_bytes, Body}; + use axum::http::{header, Request}; + use std::sync::Arc; + use tower::ServiceExt; + + #[test] + fn forwarded_ip_is_only_trusted_from_a_local_proxy() { + let mut headers = HeaderMap::new(); + headers.insert("x-forwarded-for", "198.51.100.25".parse().unwrap()); + + assert_eq!( + client_ip(&headers, Some("203.0.113.10:443".parse().unwrap())), + "203.0.113.10" + ); + assert_eq!( + client_ip(&headers, Some("127.0.0.1:8080".parse().unwrap())), + "198.51.100.25" + ); + } + + async fn setup_app() -> (axum::Router, Arc, String) { + let db = Arc::new(connect(":memory:").await.unwrap()); + UserRow::create(&db, "owner", "alice", "s", "ks", "{}", "hash", "wmk") + .await + .unwrap(); + DeviceRow::upsert(&db, "owner-device", "owner", "Owner", None) + .await + .unwrap(); + let token = AuthToken::create(&db, "owner", "owner-device") + .await + .unwrap() + .token; + let app = crate::build_relay_router( + RoomManager::new(), + Arc::new(MemoryAssetStore::new()), + std::time::Instant::now(), + Some(db.clone()), + "test", + ); + (app, db, token) + } + + async fn post(app: &axum::Router, path: &str, token: &str) -> axum::response::Response { + app.clone() + .oneshot( + Request::builder() + .method("POST") + .uri(path) + .header(header::AUTHORIZATION, format!("Bearer {token}")) + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap() + } + + #[tokio::test] + async fn delegated_tokens_cannot_chain_or_log_out_the_parent_device() { + let (app, db, device_token) = setup_app().await; + + let response = post(&app, "/api/auth/delegate", &device_token).await; + assert_eq!(response.status(), StatusCode::OK); + let body = to_bytes(response.into_body(), 16 * 1024).await.unwrap(); + let delegated_token = serde_json::from_slice::(&body).unwrap()["token"] + .as_str() + .unwrap() + .to_string(); + let delegated = AuthToken::find(&db, &delegated_token) + .await + .unwrap() + .unwrap(); + assert!(!delegated.is_device_token()); + + assert_eq!( + post(&app, "/api/auth/delegate", &delegated_token) + .await + .status(), + StatusCode::FORBIDDEN + ); + let sync_response = app + .clone() + .oneshot( + Request::builder() + .method("GET") + .uri("/api/sync/settings") + .header(header::AUTHORIZATION, format!("Bearer {delegated_token}")) + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + assert_eq!(sync_response.status(), StatusCode::FORBIDDEN); + + DeviceRow::set_online(&db, "owner", "owner-device", true) + .await + .unwrap(); + assert_eq!( + post(&app, "/api/auth/logout", &delegated_token) + .await + .status(), + StatusCode::NO_CONTENT + ); + assert!(AuthToken::find(&db, &device_token).await.unwrap().is_some()); + let devices = DeviceRow::list_by_user(&db, "owner").await.unwrap(); + assert_eq!(devices.len(), 1); + assert_eq!(devices[0].online, 1); + } + + #[tokio::test] + async fn unknown_login_challenge_has_a_stable_valid_decoy_shape() { + let (app, _db, _token) = setup_app().await; + let request = || { + Request::builder() + .method("POST") + .uri("/api/auth/login/challenge") + .header(header::CONTENT_TYPE, "application/json") + .body(Body::from(r#"{"username":"missing-user"}"#)) + .unwrap() + }; + + let first = app.clone().oneshot(request()).await.unwrap(); + assert_eq!(first.status(), StatusCode::OK); + let first_body = to_bytes(first.into_body(), 16 * 1024).await.unwrap(); + let first_json: LoginChallengeResponse = serde_json::from_slice(&first_body).unwrap(); + assert_eq!(BASE64.decode(&first_json.salt).unwrap().len(), 16); + assert_eq!(BASE64.decode(&first_json.kdf_salt).unwrap().len(), 16); + let (ciphertext, nonce) = first_json.wrapped_master_key.split_once('.').unwrap(); + assert_eq!(BASE64.decode(ciphertext).unwrap().len(), 48); + assert_eq!(BASE64.decode(nonce).unwrap().len(), 12); + + let second = app.oneshot(request()).await.unwrap(); + let second_body = to_bytes(second.into_body(), 16 * 1024).await.unwrap(); + assert_eq!(first_body, second_body); + } +} diff --git a/src/crates/services/relay-service/src/routes/devices.rs b/src/crates/services/relay-service/src/routes/devices.rs index 556fc850fd..b1e1a3b876 100644 --- a/src/crates/services/relay-service/src/routes/devices.rs +++ b/src/crates/services/relay-service/src/routes/devices.rs @@ -24,8 +24,28 @@ const RPC_TIMEOUT: Duration = Duration::from_secs(120); #[cfg(test)] const RPC_TIMEOUT: Duration = Duration::from_millis(100); -/// Validate bearer token, returns user_id. -async fn validate_user(state: &AppState, headers: &HeaderMap) -> Result { +const MAX_DEVICE_ID_BYTES: usize = 128; +const MAX_ENCRYPTED_PAYLOAD_BYTES: usize = 48 * 1024 * 1024; +const MAX_NONCE_BYTES: usize = 256; + +fn is_valid_device_id(value: &str) -> bool { + !value.is_empty() + && value.len() <= MAX_DEVICE_ID_BYTES + && value + .bytes() + .all(|byte| byte.is_ascii_alphanumeric() || matches!(byte, b'-' | b'_' | b'.')) +} + +fn is_valid_encrypted_payload(encrypted_data: &str, nonce: &str) -> bool { + !encrypted_data.is_empty() + && encrypted_data.len() <= MAX_ENCRYPTED_PAYLOAD_BYTES + && !nonce.is_empty() + && nonce.len() <= MAX_NONCE_BYTES + && !nonce.chars().any(char::is_control) +} + +/// Validate bearer token and return its account principal and capability kind. +async fn validate_user(state: &AppState, headers: &HeaderMap) -> Result { let db = state.db.as_ref().ok_or(StatusCode::NOT_IMPLEMENTED)?; let token = headers .get(header::AUTHORIZATION) @@ -38,7 +58,10 @@ async fn validate_user(state: &AppState, headers: &HeaderMap) -> Result Router { @@ -63,7 +86,8 @@ async fn list_devices( State(state): State, headers: HeaderMap, ) -> Result>, StatusCode> { - let user_id = validate_user(&state, &headers).await?; + let auth = validate_user(&state, &headers).await?; + let user_id = auth.user_id; // Get online devices from DeviceManager (in-memory) let online = state.device_manager.online_devices(&user_id); @@ -128,7 +152,14 @@ async fn device_rpc( Path(target_device_id): Path, Json(body): Json, ) -> Result, StatusCode> { - let user_id = validate_user(&state, &headers).await?; + let auth = validate_user(&state, &headers).await?; + let user_id = auth.user_id; + + if !is_valid_device_id(&target_device_id) + || !is_valid_encrypted_payload(&body.encrypted_data, &body.nonce) + { + return Err(StatusCode::BAD_REQUEST); + } // Check target device is online in this account let online = state.device_manager.online_devices(&user_id); @@ -141,7 +172,10 @@ async fn device_rpc( // Register a pending RPC response (the WS handler will resolve it when // the target device sends back a DeviceMessage with the same correlation_id) - let rx = state.device_manager.register_rpc(&correlation_id); + let rx = state + .device_manager + .register_rpc(&correlation_id, &user_id, &target_device_id) + .ok_or(StatusCode::TOO_MANY_REQUESTS)?; // Build the WS message to send to the target device. // The relay acts as a "virtual" source — the target device sees this @@ -181,32 +215,24 @@ async fn device_rpc( /// `DELETE /api/devices/:target_device_id` /// /// Removes a device from the account (DB row + any active WS session). -/// The caller cannot delete itself. +/// Deleting the caller's own device revokes its current token as well. async fn delete_device( State(state): State, headers: HeaderMap, Path(target_device_id): Path, ) -> Result { - let user_id = validate_user(&state, &headers).await?; - - // Get the caller's own device_id from the auth token. - let db = state.db.as_ref().ok_or(StatusCode::NOT_IMPLEMENTED)?; - let token = headers - .get(header::AUTHORIZATION) - .and_then(|v| v.to_str().ok()) - .and_then(|s| s.strip_prefix("Bearer ")) - .map(|t| t.trim().to_string()) - .ok_or(StatusCode::UNAUTHORIZED)?; - let auth = AuthToken::find(db, &token) - .await - .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)? - .ok_or(StatusCode::UNAUTHORIZED)?; + let auth = validate_user(&state, &headers).await?; + if !auth.is_device_token() { + return Err(StatusCode::FORBIDDEN); + } + let user_id = auth.user_id; - // Prevent self-deletion. - if auth.device_id == target_device_id { + if !is_valid_device_id(&target_device_id) { return Err(StatusCode::BAD_REQUEST); } + let db = state.db.as_ref().ok_or(StatusCode::NOT_IMPLEMENTED)?; + // Revoke the target's auth tokens before removing its device row. The DB // helper also scopes the deletion to this account and performs both writes // atomically so a guessed device id cannot affect another account. @@ -230,6 +256,23 @@ async fn delete_device( .device_manager .disconnect_device(&user_id, &target_device_id); + let online = state.device_manager.online_devices(&user_id); + let presence = online + .iter() + .map( + |(device_id, device_name)| crate::routes::websocket::DevicePresenceEntry { + device_id: device_id.clone(), + device_name: device_name.clone(), + }, + ) + .collect(); + let presence_json = + serde_json::to_string(&OutboundProtocol::DevicePresence { devices: presence }) + .unwrap_or_default(); + state + .device_manager + .broadcast_except(&user_id, &target_device_id, &presence_json); + tracing::info!("Device {target_device_id} removed from account {user_id}"); Ok(StatusCode::NO_CONTENT) } @@ -249,6 +292,7 @@ mod tests { app: axum::Router, db: Arc, owner_token: String, + delegated_token: String, target_token: String, other_token: String, } @@ -275,6 +319,10 @@ mod tests { .await .unwrap() .token; + let delegated_token = AuthToken::create_delegated(&db, "owner", "owner-device") + .await + .unwrap() + .token; let target_token = AuthToken::create(&db, "owner", "target-device") .await .unwrap() @@ -295,6 +343,7 @@ mod tests { app, db, owner_token, + delegated_token, target_token, other_token, } @@ -315,6 +364,21 @@ mod tests { .status() } + async fn list(app: &axum::Router, token: &str) -> StatusCode { + app.clone() + .oneshot( + Request::builder() + .method("GET") + .uri("/api/devices") + .header(header::AUTHORIZATION, format!("Bearer {token}")) + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap() + .status() + } + #[tokio::test] async fn deleting_owned_device_revokes_token_before_device_row() { let ctx = setup_app().await; @@ -332,13 +396,26 @@ mod tests { } #[tokio::test] - async fn deleting_own_or_another_accounts_device_is_rejected() { + async fn deleting_current_device_revokes_the_callers_token() { let ctx = setup_app().await; assert_eq!( delete(&ctx.app, &ctx.owner_token, "owner-device").await, - StatusCode::BAD_REQUEST + StatusCode::NO_CONTENT ); + assert!(AuthToken::find(&ctx.db, &ctx.owner_token) + .await + .unwrap() + .is_none()); + let devices = DeviceRow::list_by_user(&ctx.db, "owner").await.unwrap(); + assert_eq!(devices.len(), 1); + assert_eq!(devices[0].device_id, "target-device"); + } + + #[tokio::test] + async fn deleting_another_accounts_device_is_rejected() { + let ctx = setup_app().await; + assert_eq!( delete(&ctx.app, &ctx.owner_token, "other-device").await, StatusCode::NOT_FOUND @@ -352,4 +429,24 @@ mod tests { .unwrap() .is_some()); } + + #[tokio::test] + async fn delegated_control_token_cannot_delete_its_parent_device() { + let ctx = setup_app().await; + + assert_eq!(list(&ctx.app, &ctx.delegated_token).await, StatusCode::OK); + assert_eq!( + delete(&ctx.app, &ctx.delegated_token, "owner-device").await, + StatusCode::FORBIDDEN + ); + assert!(AuthToken::find(&ctx.db, &ctx.owner_token) + .await + .unwrap() + .is_some()); + assert!(DeviceRow::list_by_user(&ctx.db, "owner") + .await + .unwrap() + .iter() + .any(|device| device.device_id == "owner-device")); + } } diff --git a/src/crates/services/relay-service/src/routes/pages.rs b/src/crates/services/relay-service/src/routes/pages.rs index b0169da678..5209905feb 100644 --- a/src/crates/services/relay-service/src/routes/pages.rs +++ b/src/crates/services/relay-service/src/routes/pages.rs @@ -236,7 +236,9 @@ async fn check_page_files( let mut total_bytes: u64 = 0; for entry in &body.files { - if entry.path.contains("..") || entry.path.starts_with('/') { + if crate::validated_asset_relative_path(&entry.path).is_err() + || !crate::is_valid_content_hash(&entry.hash) + { return Err(StatusCode::BAD_REQUEST); } if entry.size > MAX_FILE_BYTES { @@ -283,7 +285,9 @@ async fn upload_page_files( let visibility = PageVisibility::parse(&body.visibility).ok_or(StatusCode::BAD_REQUEST)?; for (rel_path, entry) in &body.files { - if rel_path.contains("..") || rel_path.starts_with('/') { + if crate::validated_asset_relative_path(rel_path).is_err() + || !crate::is_valid_content_hash(&entry.hash) + { return Err(StatusCode::BAD_REQUEST); } let approx = (entry.content.len() as u64).saturating_mul(3) / 4; @@ -1042,7 +1046,10 @@ fn process_check_page_files( let mut existing_count = 0usize; let total_count = files.len(); for entry in files { - if entry.path.contains("..") { + if crate::validated_asset_relative_path(&entry.path).is_err() + || !crate::is_valid_content_hash(&entry.hash) + { + needed.push(entry.path); continue; } if asset_store.has_content(&entry.hash) { @@ -1070,8 +1077,9 @@ fn process_upload_page_files( let mut decoded_files: Vec<(String, String, Vec)> = Vec::with_capacity(files.len()); let mut batch_bytes: u64 = 0; for (rel_path, entry) in files { - if rel_path.contains("..") { - continue; + crate::validated_asset_relative_path(&rel_path).map_err(|_| StatusCode::BAD_REQUEST)?; + if !crate::is_valid_content_hash(&entry.hash) { + return Err(StatusCode::BAD_REQUEST); } let decoded = B64 .decode(&entry.content) @@ -1099,7 +1107,7 @@ fn process_upload_page_files( if !asset_store.has_content(&actual_hash) { asset_store .store_content(&actual_hash, decoded) - .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + .map_err(crate::asset_store_error_status)?; stored += 1; } asset_store diff --git a/src/crates/services/relay-service/src/routes/sync.rs b/src/crates/services/relay-service/src/routes/sync.rs index d55d8e42da..d61afcf28a 100644 --- a/src/crates/services/relay-service/src/routes/sync.rs +++ b/src/crates/services/relay-service/src/routes/sync.rs @@ -20,6 +20,26 @@ use crate::routes::api::AppState; /// conversations. Keep an explicit ceiling so reverse proxies and operators /// can align `client_max_body_size` (nginx) / equivalent limits. pub const SYNC_BODY_LIMIT: usize = 64 * 1024 * 1024; +const MAX_ENCRYPTED_BLOB_BYTES: usize = 48 * 1024 * 1024; +const MAX_SESSION_ID_BYTES: usize = 256; +const MAX_NONCE_BYTES: usize = 256; +const MAX_SYNC_SESSIONS_PER_USER: i64 = 2048; +const MAX_SYNC_SESSION_BYTES_PER_USER: i64 = 128 * 1024 * 1024; + +fn valid_session_id(value: &str) -> bool { + !value.trim().is_empty() + && value.len() <= MAX_SESSION_ID_BYTES + && !value.chars().any(char::is_control) +} + +fn valid_encrypted_blob(encrypted_data: &str, nonce: &str, version: i64) -> bool { + !encrypted_data.is_empty() + && encrypted_data.len() <= MAX_ENCRYPTED_BLOB_BYTES + && !nonce.is_empty() + && nonce.len() <= MAX_NONCE_BYTES + && !nonce.chars().any(char::is_control) + && version > 0 +} /// Validated principal extracted from the bearer token. pub struct AuthUser { @@ -51,6 +71,9 @@ pub async fn validate_token(state: &AppState, token: &str) -> Result, ) -> Result { let auth = validate_auth(&state, &headers).await?; + if !valid_session_id(&body.session_id) + || !valid_encrypted_blob(&body.encrypted_data, &body.nonce, body.version) + { + return Err(StatusCode::BAD_REQUEST); + } let db = state.db.as_ref().ok_or(StatusCode::NOT_IMPLEMENTED)?; - SyncSessionRow::upsert( + let stored = SyncSessionRow::upsert_with_quota( db, &auth.user_id, &body.session_id, &body.encrypted_data, &body.nonce, body.version, + MAX_SYNC_SESSIONS_PER_USER, + MAX_SYNC_SESSION_BYTES_PER_USER, ) .await .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + if !stored { + return Err(StatusCode::INSUFFICIENT_STORAGE); + } Ok(StatusCode::NO_CONTENT) } @@ -150,6 +183,9 @@ async fn sessions_get( Path(session_id): Path, ) -> Result, StatusCode> { let auth = validate_auth(&state, &headers).await?; + if !valid_session_id(&session_id) { + return Err(StatusCode::BAD_REQUEST); + } let db = state.db.as_ref().ok_or(StatusCode::NOT_IMPLEMENTED)?; let row = SyncSessionRow::get(db, &auth.user_id, &session_id) .await @@ -170,6 +206,9 @@ async fn sessions_delete( Path(session_id): Path, ) -> Result { let auth = validate_auth(&state, &headers).await?; + if !valid_session_id(&session_id) { + return Err(StatusCode::BAD_REQUEST); + } let db = state.db.as_ref().ok_or(StatusCode::NOT_IMPLEMENTED)?; SyncSessionRow::delete(db, &auth.user_id, &session_id) .await @@ -200,6 +239,9 @@ async fn settings_upsert( Json(body): Json, ) -> Result { let auth = validate_auth(&state, &headers).await?; + if !valid_encrypted_blob(&body.encrypted_data, &body.nonce, body.version) { + return Err(StatusCode::BAD_REQUEST); + } let db = state.db.as_ref().ok_or(StatusCode::NOT_IMPLEMENTED)?; SyncSettingsRow::upsert( db, diff --git a/src/crates/services/relay-service/src/routes/websocket.rs b/src/crates/services/relay-service/src/routes/websocket.rs index 4a30b975ca..3478a891a4 100644 --- a/src/crates/services/relay-service/src/routes/websocket.rs +++ b/src/crates/services/relay-service/src/routes/websocket.rs @@ -9,28 +9,55 @@ use axum::{ ws::{Message, WebSocket, WebSocketUpgrade}, State, }, - response::Response, + http::{header, HeaderMap, StatusCode}, + response::{IntoResponse, Response}, }; use futures_util::{SinkExt, StreamExt}; use serde::{Deserialize, Serialize}; -use tokio::sync::mpsc::{self, error::TrySendError}; +use std::time::{Duration, Instant}; +use tokio::sync::{ + mpsc::{self, error::TrySendError}, + watch, +}; use tracing::{debug, error, info, warn}; use crate::relay::room::{send_outbound_message, ConnId, OutboundMessage, ResponsePayload}; use crate::routes::api::AppState; const OUTBOUND_QUEUE_CAPACITY: usize = 256; +const MAX_WS_MESSAGE_BYTES: usize = 64 * 1024 * 1024; +const MAX_ENCRYPTED_PAYLOAD_BYTES: usize = 48 * 1024 * 1024; +const MAX_IDENTIFIER_BYTES: usize = 128; +const MAX_DEVICE_NAME_BYTES: usize = 256; +const MAX_PUBLIC_KEY_BYTES: usize = 512; +const MAX_NONCE_BYTES: usize = 256; +const RATE_LIMIT_WINDOW: Duration = Duration::from_secs(60); +const MAX_MESSAGES_PER_WINDOW: u32 = 600; + +struct ConnectionRateLimiter { + window_started: Instant, + message_count: u32, +} -fn truncate_preview(text: &str, max_bytes: usize) -> &str { - if text.len() <= max_bytes { - return text; +impl ConnectionRateLimiter { + fn new() -> Self { + Self { + window_started: Instant::now(), + message_count: 0, + } } - let mut end = max_bytes; - while end > 0 && !text.is_char_boundary(end) { - end -= 1; + fn allow(&mut self) -> bool { + if self.window_started.elapsed() >= RATE_LIMIT_WINDOW { + self.window_started = Instant::now(); + self.message_count = 0; + } + if self.message_count >= MAX_MESSAGES_PER_WINDOW { + return false; + } + self.message_count += 1; + true } - &text[..end] } /// Messages received from the desktop via WebSocket. @@ -117,37 +144,129 @@ pub struct DevicePresenceEntry { pub device_name: String, } -pub async fn websocket_handler(ws: WebSocketUpgrade, State(state): State) -> Response { - ws.max_message_size(64 * 1024 * 1024) - .max_frame_size(64 * 1024 * 1024) - .max_write_buffer_size(64 * 1024 * 1024) +pub async fn websocket_handler( + ws: WebSocketUpgrade, + State(state): State, + headers: HeaderMap, +) -> Response { + if !is_websocket_origin_allowed(&headers, &state.cors_allow_origins) { + warn!("Rejected WebSocket connection from a disallowed browser origin"); + return StatusCode::FORBIDDEN.into_response(); + } + ws.max_message_size(MAX_WS_MESSAGE_BYTES) + .max_frame_size(MAX_WS_MESSAGE_BYTES) + .max_write_buffer_size(MAX_WS_MESSAGE_BYTES) .on_upgrade(move |socket| handle_socket(socket, state)) } +fn is_websocket_origin_allowed(headers: &HeaderMap, allowed_origins: &[String]) -> bool { + let Some(origin) = headers + .get(header::ORIGIN) + .and_then(|value| value.to_str().ok()) + .map(str::trim) + else { + // Native clients do not send Origin and authenticate at the protocol + // layer. Origin is a browser boundary, not a replacement for auth. + return true; + }; + if origin.eq_ignore_ascii_case("null") { + return false; + } + let Some(origin) = crate::normalized_browser_origin(origin) else { + return false; + }; + if allowed_origins + .iter() + .any(|allowed| allowed == "*" || allowed.eq_ignore_ascii_case(&origin)) + { + return true; + } + + let Some(host) = headers + .get(header::HOST) + .and_then(|value| value.to_str().ok()) + .map(str::trim) + else { + return false; + }; + let origin_authority = origin + .split_once("://") + .map(|(_, authority)| authority) + .and_then(|authority| authority.split('/').next()); + origin_authority.is_some_and(|authority| authority.eq_ignore_ascii_case(host)) +} + async fn handle_socket(socket: WebSocket, state: AppState) { let (mut ws_sender, mut ws_receiver) = socket.split(); let (out_tx, mut out_rx) = mpsc::channel::(OUTBOUND_QUEUE_CAPACITY); + let (force_close_tx, mut force_close_rx) = watch::channel(false); let conn_id = state.room_manager.next_conn_id(); + let mut rate_limiter = ConnectionRateLimiter::new(); + let mut token_expiry_task: Option> = None; info!("WebSocket connected: conn_id={conn_id}"); + let mut writer_force_close_rx = force_close_rx.clone(); let write_task = tokio::spawn(async move { - while let Some(msg) = out_rx.recv().await { - if !msg.text.is_empty() - && ws_sender - .send(Message::Text(msg.text.into())) - .await - .is_err() - { - break; + loop { + tokio::select! { + changed = writer_force_close_rx.changed() => { + if changed.is_ok() && *writer_force_close_rx.borrow() { + info!("Closing revoked WebSocket connection"); + let _ = ws_sender.send(Message::Close(None)).await; + } + break; + } + msg = out_rx.recv() => { + let Some(msg) = msg else { break }; + if !msg.text.is_empty() + && ws_sender + .send(Message::Text(msg.text.into())) + .await + .is_err() + { + break; + } + } } } }); - while let Some(msg_result) = ws_receiver.next().await { + loop { + let msg_result = tokio::select! { + changed = force_close_rx.changed() => { + if changed.is_ok() && *force_close_rx.borrow() { + info!("Revoked WebSocket connection: conn_id={conn_id}"); + } + break; + } + msg = ws_receiver.next() => { + let Some(msg) = msg else { break }; + msg + } + }; + if !rate_limiter.allow() { + warn!("WebSocket rate limit exceeded: conn_id={conn_id}"); + let _ = send_json_best_effort( + &out_tx, + &OutboundProtocol::Error { + message: "message rate limit exceeded".into(), + }, + ); + break; + } match msg_result { Ok(Message::Text(text)) => { - if !handle_text_message(&text, conn_id, &state, &out_tx).await { + if !handle_text_message( + &text, + conn_id, + &state, + &out_tx, + &force_close_tx, + &mut token_expiry_task, + ) + .await + { break; } } @@ -156,6 +275,16 @@ async fn handle_socket(socket: WebSocket, state: AppState) { info!("WebSocket close from conn_id={conn_id}"); break; } + Ok(Message::Binary(_)) => { + warn!("Rejected binary WebSocket message: conn_id={conn_id}"); + let _ = send_json_best_effort( + &out_tx, + &OutboundProtocol::Error { + message: "binary messages are not supported".into(), + }, + ); + break; + } Err(e) => { error!("WebSocket error conn_id={conn_id}: {e}"); break; @@ -164,11 +293,15 @@ async fn handle_socket(socket: WebSocket, state: AppState) { } } + if let Some(task) = token_expiry_task { + task.abort(); + } + state.room_manager.on_disconnect(conn_id); if let Some((user_id, device_id)) = state.device_manager.unregister(conn_id) { // Best-effort: mark the device offline in the DB and notify peers. if let Some(db) = state.db.as_ref() { - let _ = crate::db::DeviceRow::set_online(db, &device_id, false).await; + let _ = crate::db::DeviceRow::set_online(db, &user_id, &device_id, false).await; } let remaining = state.device_manager.online_devices(&user_id); let presence = build_presence(&remaining); @@ -189,11 +322,12 @@ async fn handle_text_message( conn_id: ConnId, state: &AppState, out_tx: &mpsc::Sender, + force_close_tx: &watch::Sender, + token_expiry_task: &mut Option>, ) -> bool { - debug!( - "Received from conn_id={conn_id}: {}", - truncate_preview(text, 200) - ); + if text.len() > MAX_WS_MESSAGE_BYTES { + return reject_protocol(out_tx, "message is too large"); + } let msg: InboundMessage = match serde_json::from_str(text) { Ok(m) => m, Err(e) => { @@ -201,19 +335,45 @@ async fn handle_text_message( return send_json_best_effort( out_tx, &OutboundProtocol::Error { - message: format!("invalid message format: {e}"), + message: "invalid message format".into(), }, ); } }; + let message_type = match &msg { + InboundMessage::CreateRoom { .. } => "create_room", + InboundMessage::RelayResponse { .. } => "relay_response", + InboundMessage::Heartbeat => "heartbeat", + InboundMessage::AuthConnect { .. } => "auth_connect", + InboundMessage::DeviceMessage { .. } => "device_message", + }; + debug!( + "Received WebSocket message: conn_id={conn_id} type={message_type} bytes={}", + text.len() + ); match msg { InboundMessage::CreateRoom { room_id, device_id, - device_type: _, + device_type, public_key, } => { + if state.device_manager.conn_mapping(conn_id).is_some() { + return reject_protocol( + out_tx, + "an authenticated device connection cannot create a pairing room", + ); + } + if !is_valid_identifier(&device_id) + || !is_valid_display_text(&device_type, 32) + || !is_valid_display_text(&public_key, MAX_PUBLIC_KEY_BYTES) + || room_id + .as_deref() + .is_some_and(|value| !crate::relay::room::is_valid_room_id(value)) + { + return reject_protocol(out_tx, "invalid room parameters"); + } let room_id = room_id.unwrap_or_else(generate_room_id); let ok = state.room_manager.create_room( &room_id, @@ -240,14 +400,22 @@ async fn handle_text_message( encrypted_data, nonce, } => { + if !is_valid_identifier(&correlation_id) + || !is_valid_encrypted_payload(&encrypted_data, &nonce) + { + return reject_protocol(out_tx, "invalid relay response"); + } debug!("RelayResponse from desktop conn_id={conn_id} corr={correlation_id}"); - state.room_manager.resolve_pending( + if !state.room_manager.resolve_pending_from_conn( + conn_id, &correlation_id, ResponsePayload { encrypted_data, nonce, }, - ); + ) { + return reject_protocol(out_tx, "relay response does not match this room"); + } true } @@ -269,6 +437,16 @@ async fn handle_text_message( } InboundMessage::AuthConnect { token, device_name } => { + if state.room_manager.has_connection(conn_id) + || state.device_manager.conn_mapping(conn_id).is_some() + { + return reject_protocol(out_tx, "connection is already authenticated"); + } + if !crate::db::is_valid_auth_token(&token) + || !is_valid_display_text(&device_name, MAX_DEVICE_NAME_BYTES) + { + return reject_protocol(out_tx, "invalid authentication parameters"); + } let Some(db) = state.db.as_ref() else { return send_json_best_effort( out_tx, @@ -288,6 +466,14 @@ async fn handle_text_message( ) } }; + if !auth.is_device_token() { + return send_json_best_effort( + out_tx, + &OutboundProtocol::AuthError { + message: "token is not valid for a device connection".into(), + }, + ); + } // Mark the device online in the DB and the in-memory registry. let _ = crate::db::DeviceRow::upsert( db, @@ -297,14 +483,25 @@ async fn handle_text_message( None, ) .await; - let _ = crate::db::DeviceRow::set_online(db, &auth.device_id, true).await; + let _ = + crate::db::DeviceRow::set_online(db, &auth.user_id, &auth.device_id, true).await; let _others = state.device_manager.register( &auth.user_id, &auth.device_id, &device_name, conn_id, out_tx.clone(), + force_close_tx.clone(), ); + let expires_in = auth + .expires_at + .saturating_sub(chrono::Utc::now().timestamp()) + .max(0) as u64; + let expiry_close_tx = force_close_tx.clone(); + *token_expiry_task = Some(tokio::spawn(async move { + tokio::time::sleep(Duration::from_secs(expires_in)).await; + let _ = expiry_close_tx.send(true); + })); send_json( out_tx, &OutboundProtocol::AuthOk { @@ -338,6 +535,12 @@ async fn handle_text_message( encrypted_data, nonce, } => { + if !is_valid_identifier(&target_device_id) + || !is_valid_identifier(&correlation_id) + || !is_valid_encrypted_payload(&encrypted_data, &nonce) + { + return reject_protocol(out_tx, "invalid device message"); + } // Look up the sender's (user_id, device_id) from the conn map. let sender = state.device_manager.conn_mapping(conn_id); let Some((user_id, source_device_id)) = sender else { @@ -355,10 +558,12 @@ async fn handle_text_message( encrypted_data: encrypted_data.clone(), nonce: nonce.clone(), }; - if state - .device_manager - .resolve_rpc(&correlation_id, rpc_response) - { + if state.device_manager.resolve_rpc( + &correlation_id, + &user_id, + &source_device_id, + rpc_response, + ) { // HTTP RPC resolved — the HTTP caller gets the response. return true; } @@ -387,6 +592,36 @@ async fn handle_text_message( } } +fn is_valid_identifier(value: &str) -> bool { + !value.is_empty() + && value.len() <= MAX_IDENTIFIER_BYTES + && value + .bytes() + .all(|byte| byte.is_ascii_alphanumeric() || matches!(byte, b'-' | b'_' | b'.')) +} + +fn is_valid_display_text(value: &str, max_bytes: usize) -> bool { + !value.trim().is_empty() && value.len() <= max_bytes && !value.chars().any(char::is_control) +} + +fn is_valid_encrypted_payload(encrypted_data: &str, nonce: &str) -> bool { + !encrypted_data.is_empty() + && encrypted_data.len() <= MAX_ENCRYPTED_PAYLOAD_BYTES + && !nonce.is_empty() + && nonce.len() <= MAX_NONCE_BYTES + && !nonce.chars().any(char::is_control) +} + +fn reject_protocol(tx: &mpsc::Sender, message: &str) -> bool { + let _ = send_json_best_effort( + tx, + &OutboundProtocol::Error { + message: message.to_string(), + }, + ); + false +} + fn build_presence(devices: &[(String, String)]) -> Vec { devices .iter() @@ -399,7 +634,7 @@ fn build_presence(devices: &[(String, String)]) -> Vec { async fn send_json(tx: &mpsc::Sender, msg: &T) -> bool { match serde_json::to_string(msg) { - Ok(json) => send_outbound_message(tx, OutboundMessage { text: json }).await, + Ok(json) => send_outbound_message(tx, OutboundMessage::text(json)).await, Err(e) => { warn!("Failed to serialize outbound websocket message: {e}"); false @@ -409,7 +644,7 @@ async fn send_json(tx: &mpsc::Sender, msg: &T) -> fn send_json_best_effort(tx: &mpsc::Sender, msg: &T) -> bool { match serde_json::to_string(msg) { - Ok(json) => match tx.try_send(OutboundMessage { text: json }) { + Ok(json) => match tx.try_send(OutboundMessage::text(json)) { Ok(()) => true, Err(TrySendError::Full(_)) => { warn!("Outbound websocket queue is full; dropping best-effort control response"); @@ -431,16 +666,14 @@ fn generate_room_id() -> String { #[cfg(test)] mod tests { - use super::{send_json_best_effort, truncate_preview, OutboundProtocol}; + use super::{ + is_valid_display_text, is_valid_encrypted_payload, is_valid_identifier, + is_websocket_origin_allowed, send_json_best_effort, ConnectionRateLimiter, + OutboundProtocol, MAX_MESSAGES_PER_WINDOW, + }; + use axum::http::{header, HeaderMap}; use tokio::sync::mpsc; - #[test] - fn truncate_preview_respects_utf8_boundaries() { - let text = format!("{}{}", "a".repeat(199), "你"); - - assert_eq!(truncate_preview(&text, 200), "a".repeat(199)); - } - #[test] fn best_effort_control_response_does_not_block_on_full_queue() { let (tx, _rx) = mpsc::channel(1); @@ -451,4 +684,51 @@ mod tests { "full queue should drop best-effort control response without closing read loop" ); } + + #[test] + fn protocol_fields_are_bounded() { + assert!(is_valid_identifier("device-1")); + assert!(!is_valid_identifier("../device")); + assert!(!is_valid_identifier(&"x".repeat(129))); + assert!(is_valid_display_text("MacBook Pro", 256)); + assert!(!is_valid_display_text("bad\nname", 256)); + assert!(is_valid_encrypted_payload("ciphertext", "nonce")); + assert!(!is_valid_encrypted_payload("", "nonce")); + } + + #[test] + fn websocket_message_rate_is_bounded() { + let mut limiter = ConnectionRateLimiter::new(); + for _ in 0..MAX_MESSAGES_PER_WINDOW { + assert!(limiter.allow()); + } + assert!(!limiter.allow()); + } + + #[test] + fn websocket_browser_origin_is_same_origin_or_explicitly_allowed() { + let mut headers = HeaderMap::new(); + headers.insert(header::HOST, "relay.example.com".parse().unwrap()); + headers.insert(header::ORIGIN, "https://relay.example.com".parse().unwrap()); + assert!(is_websocket_origin_allowed(&headers, &[])); + + headers.insert(header::ORIGIN, "https://app.example.com".parse().unwrap()); + assert!(!is_websocket_origin_allowed(&headers, &[])); + assert!(is_websocket_origin_allowed( + &headers, + &["https://app.example.com".to_string()] + )); + + headers.insert(header::ORIGIN, "null".parse().unwrap()); + assert!(!is_websocket_origin_allowed(&headers, &["*".to_string()])); + + for invalid in [ + "file://relay.example.com", + "https://relay.example.com/path", + "https://user@relay.example.com", + ] { + headers.insert(header::ORIGIN, invalid.parse().unwrap()); + assert!(!is_websocket_origin_allowed(&headers, &[])); + } + } } diff --git a/src/crates/services/services-integrations/src/remote_connect.rs b/src/crates/services/services-integrations/src/remote_connect.rs index 445ba0249d..79d467905a 100644 --- a/src/crates/services/services-integrations/src/remote_connect.rs +++ b/src/crates/services/services-integrations/src/remote_connect.rs @@ -540,14 +540,13 @@ fn is_remote_absolute_workspace_path(path: &str) -> bool { pub fn resolve_remote_workspace_path(raw: &str, workspace_root: Option<&Path>) -> Option { let stripped = strip_remote_workspace_path_prefix(raw); - - if is_remote_absolute_workspace_path(stripped) { - return Some(PathBuf::from(stripped)); - } - let workspace_root = workspace_root?; let canonical_root = std::fs::canonicalize(workspace_root).ok()?; - let candidate = canonical_root.join(stripped); + let candidate = if is_remote_absolute_workspace_path(stripped) { + PathBuf::from(stripped) + } else { + canonical_root.join(stripped) + }; let canonical_candidate = std::fs::canonicalize(candidate).ok()?; if canonical_candidate.starts_with(&canonical_root) { diff --git a/src/crates/services/services-integrations/src/remote_connect/account.rs b/src/crates/services/services-integrations/src/remote_connect/account.rs index b70a159e05..a085cf9191 100644 --- a/src/crates/services/services-integrations/src/remote_connect/account.rs +++ b/src/crates/services/services-integrations/src/remote_connect/account.rs @@ -47,6 +47,17 @@ impl Default for KdfParams { impl KdfParams { fn build(&self) -> Result> { + // KDF parameters come from a remote server. Bound them before Argon2 + // allocates memory so a malicious or corrupted relay cannot force the + // client into multi-gigabyte allocation or an excessive CPU loop. + if !(8 * 1024..=256 * 1024).contains(&self.m) + || !(1..=10).contains(&self.t) + || !(1..=16).contains(&self.p) + { + return Err(anyhow!( + "argon2 parameters are outside the supported safety range" + )); + } let params = Params::new(self.m, self.t, self.p, Some(MASTER_KEY_LEN)) .map_err(|e| anyhow!("invalid argon2 params: {e}"))?; Ok(Argon2::new(Algorithm::Argon2id, Version::V0x13, params)) @@ -194,6 +205,26 @@ pub fn error_indicates_expired_token(message: &str) -> bool { || lower.contains("relay auth error") } +/// Parse a user/config supplied relay base URL at the shared transport +/// boundary. Paths are allowed for reverse-proxy prefixes; credentials, +/// query strings, fragments, and non-HTTP schemes are not. +pub fn validate_relay_base_url(relay_url: &str) -> Result { + let url = reqwest::Url::parse(relay_url.trim()) + .map_err(|error| anyhow!("invalid relay URL: {error}"))?; + if !matches!(url.scheme(), "http" | "https") + || url.host_str().is_none() + || !url.username().is_empty() + || url.password().is_some() + || url.query().is_some() + || url.fragment().is_some() + { + return Err(anyhow!( + "relay URL must be an http(s) server address without credentials, query, or fragment" + )); + } + Ok(url) +} + impl Default for AccountClient { fn default() -> Self { Self::new() @@ -212,9 +243,11 @@ impl AccountClient { } } - fn endpoint(relay_url: &str, path: &str) -> String { - let base = relay_url.trim_end_matches('/'); - format!("{base}{path}") + fn endpoint(relay_url: &str, path: &str) -> Result { + let mut url = validate_relay_base_url(relay_url)?; + let base_path = url.path().trim_end_matches('/').to_string(); + url.set_path(&format!("{base_path}{path}")); + Ok(url) } /// Map a non-2xx relay response into a human-readable error. @@ -228,6 +261,11 @@ impl AccountClient { client_max_body_size)" ); } + if status == reqwest::StatusCode::INSUFFICIENT_STORAGE { + return anyhow!( + "relay returned HTTP 507 Insufficient Storage (the configured account or asset quota is full)" + ); + } match resp.json::().await { Ok(body) => { let msg = body.error; @@ -249,10 +287,17 @@ impl AccountClient { username: &str, password: &str, ) -> Result<([u8; MASTER_KEY_LEN], ChallengeResponse)> { + if username.trim().is_empty() + || username.len() > 128 + || password.is_empty() + || password.len() > 1024 + { + return Err(anyhow!("invalid account credential fields")); + } let challenge_req = serde_json::json!({ "username": username }); let resp = self .http - .post(Self::endpoint(relay_url, "/api/auth/login/challenge")) + .post(Self::endpoint(relay_url, "/api/auth/login/challenge")?) .json(&challenge_req) .send() .await?; @@ -264,6 +309,9 @@ impl AccountClient { let salt = BASE64 .decode(&challenge.salt) .map_err(|e| anyhow!("b64 decode salt: {e}"))?; + if salt.len() != SALT_LEN { + return Err(anyhow!("invalid account salt length")); + } let params: KdfParams = serde_json::from_str(&challenge.argon2_params) .map_err(|e| anyhow!("parse argon2_params: {e}"))?; @@ -310,6 +358,9 @@ impl AccountClient { let kdf_salt = BASE64 .decode(&challenge.kdf_salt) .map_err(|e| anyhow!("b64 decode kdf_salt: {e}"))?; + if kdf_salt.len() != SALT_LEN { + return Err(anyhow!("invalid account KDF salt length")); + } let params: KdfParams = serde_json::from_str(&challenge.argon2_params) .map_err(|e| anyhow!("parse argon2_params: {e}"))?; @@ -323,7 +374,7 @@ impl AccountClient { }); let resp = self .http - .post(Self::endpoint(relay_url, "/api/auth/login")) + .post(Self::endpoint(relay_url, "/api/auth/login")?) .json(&login_req) .send() .await?; @@ -392,7 +443,7 @@ impl AccountClient { }); let resp = self .http - .post(Self::endpoint(relay_url, "/api/sync/sessions")) + .post(Self::endpoint(relay_url, "/api/sync/sessions")?) .header("Authorization", Self::auth_header(session)) .json(&body) .send() @@ -411,11 +462,9 @@ impl AccountClient { session: &AccountSession, since: i64, ) -> Result> { - let url = format!( - "{}?since={}", - Self::endpoint(relay_url, "/api/sync/sessions"), - since.max(0) - ); + let mut url = Self::endpoint(relay_url, "/api/sync/sessions")?; + url.query_pairs_mut() + .append_pair("since", &since.max(0).to_string()); let resp = self .http .get(url) @@ -479,8 +528,8 @@ impl AccountClient { .http .get(Self::endpoint( relay_url, - &format!("/api/sync/sessions/{session_id}"), - )) + &format!("/api/sync/sessions/{}", urlencoding::encode(session_id)), + )?) .header("Authorization", Self::auth_header(session)) .send() .await?; @@ -510,8 +559,8 @@ impl AccountClient { .http .delete(Self::endpoint( relay_url, - &format!("/api/sync/sessions/{session_id}"), - )) + &format!("/api/sync/sessions/{}", urlencoding::encode(session_id)), + )?) .header("Authorization", Self::auth_header(session)) .send() .await?; @@ -539,7 +588,7 @@ impl AccountClient { }); let resp = self .http - .post(Self::endpoint(relay_url, "/api/sync/settings")) + .post(Self::endpoint(relay_url, "/api/sync/settings")?) .header("Authorization", Self::auth_header(session)) .json(&body) .send() @@ -572,7 +621,7 @@ impl AccountClient { ) -> Result> { let resp = self .http - .get(Self::endpoint(relay_url, "/api/sync/settings")) + .get(Self::endpoint(relay_url, "/api/sync/settings")?) .header("Authorization", Self::auth_header(session)) .send() .await?; @@ -607,7 +656,7 @@ impl AccountClient { ) -> Result { let resp = self .http - .post(Self::endpoint(relay_url, "/api/auth/delegate")) + .post(Self::endpoint(relay_url, "/api/auth/delegate")?) .header("Authorization", Self::auth_header(session)) .send() .await?; @@ -625,7 +674,7 @@ impl AccountClient { pub async fn revoke_token(&self, relay_url: &str, session: &AccountSession) -> Result<()> { let resp = self .http - .post(Self::endpoint(relay_url, "/api/auth/logout")) + .post(Self::endpoint(relay_url, "/api/auth/logout")?) .header("Authorization", Self::auth_header(session)) .send() .await?; @@ -645,7 +694,7 @@ impl AccountClient { ) -> Result> { let resp = self .http - .get(Self::endpoint(relay_url, "/api/devices")) + .get(Self::endpoint(relay_url, "/api/devices")?) .header("Authorization", Self::auth_header(session)) .send() .await?; @@ -677,8 +726,8 @@ impl AccountClient { .http .delete(Self::endpoint( relay_url, - &format!("/api/devices/{target_device_id}"), - )) + &format!("/api/devices/{}", urlencoding::encode(target_device_id)), + )?) .header("Authorization", Self::auth_header(session)) .send() .await?; @@ -710,8 +759,8 @@ impl AccountClient { .http .post(Self::endpoint( relay_url, - &format!("/api/devices/{target_device_id}/rpc"), - )) + &format!("/api/devices/{}/rpc", urlencoding::encode(target_device_id)), + )?) .header("Authorization", Self::auth_header(session)) .json(&body) .send() @@ -842,5 +891,32 @@ mod tests { assert_eq!(parsed.m, params.m); assert_eq!(parsed.t, params.t); assert_eq!(parsed.p, params.p); + assert!(params.build().is_ok()); + assert!(KdfParams { + m: u32::MAX, + t: 3, + p: 4, + } + .build() + .is_err()); + } + + #[test] + fn relay_endpoint_accepts_http_servers_and_rejects_ambiguous_urls() { + let endpoint = + AccountClient::endpoint("https://relay.example.com/prefix/", "/api/devices").unwrap(); + assert_eq!( + endpoint.as_str(), + "https://relay.example.com/prefix/api/devices" + ); + + for invalid in [ + "file:///tmp/relay", + "https://user:pass@relay.example.com", + "https://relay.example.com?target=other", + "https://relay.example.com/#fragment", + ] { + assert!(AccountClient::endpoint(invalid, "/api/devices").is_err()); + } } } diff --git a/src/crates/services/services-integrations/src/remote_connect/pairing.rs b/src/crates/services/services-integrations/src/remote_connect/pairing.rs index 69c7887d66..2fad29aaa1 100644 --- a/src/crates/services/services-integrations/src/remote_connect/pairing.rs +++ b/src/crates/services/services-integrations/src/remote_connect/pairing.rs @@ -13,6 +13,8 @@ use tokio::sync::RwLock; use super::device::DeviceIdentity; use super::encryption::{self, KeyPair}; +const PAIRING_CHALLENGE_TTL_SECS: i64 = 120; + /// Current state of the pairing process. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] @@ -60,6 +62,49 @@ pub struct PairingResponse { pub password: Option, } +impl PairingResponse { + /// Validate the decrypted but still untrusted mobile payload before it is + /// cloned, persisted, or passed into password verification. + pub fn validate_untrusted(&self) -> Result<()> { + fn portable_id(value: &str, max_bytes: usize) -> bool { + !value.is_empty() + && value.len() <= max_bytes + && value + .bytes() + .all(|byte| byte.is_ascii_alphanumeric() || matches!(byte, b'-' | b'_' | b'.')) + } + fn bounded_text(value: &str, max_bytes: usize) -> bool { + !value.trim().is_empty() + && value.len() <= max_bytes + && !value.chars().any(char::is_control) + } + + if self.challenge_echo.len() != 32 + || !self + .challenge_echo + .bytes() + .all(|byte| byte.is_ascii_digit() || (b'a'..=b'f').contains(&byte)) + || !portable_id(&self.device_id, 128) + || !bounded_text(&self.device_name, 256) + || self + .mobile_install_id + .as_deref() + .is_some_and(|value| !portable_id(value.trim(), 128)) + || self + .user_id + .as_deref() + .is_some_and(|value| !bounded_text(value, 128)) + || self + .password + .as_deref() + .is_some_and(|value| value.len() > 1024 || value.chars().any(char::is_control)) + { + return Err(anyhow!("invalid pairing response fields")); + } + Ok(()) + } +} + /// Manages the pairing state machine. pub struct PairingProtocol { state: Arc>, @@ -68,6 +113,7 @@ pub struct PairingProtocol { room_id: Option, device_identity: DeviceIdentity, challenge: Option, + challenge_issued_at: Option, peer_device_id: Option, peer_device_name: Option, } @@ -81,6 +127,7 @@ impl PairingProtocol { room_id: None, device_identity, challenge: None, + challenge_issued_at: None, peer_device_id: None, peer_device_name: None, } @@ -125,6 +172,9 @@ impl PairingProtocol { /// Step 2 (Desktop): Peer joined with their public key — derive shared secret. pub async fn on_peer_joined(&mut self, peer_public_key_b64: &str) -> Result { + if self.state().await != PairingState::WaitingForScan { + return Err(anyhow!("pairing request is not valid in the current state")); + } let keypair = self .keypair .as_ref() @@ -136,10 +186,12 @@ impl PairingProtocol { let challenge = generate_challenge(); self.challenge = Some(challenge.clone()); + let issued_at = chrono::Utc::now().timestamp(); + self.challenge_issued_at = Some(issued_at); let challenge_payload = PairingChallenge { challenge, - timestamp: chrono::Utc::now().timestamp(), + timestamp: issued_at, }; *self.state.write().await = PairingState::Verifying; @@ -148,12 +200,28 @@ impl PairingProtocol { /// Step 3 (Desktop): Verify the peer's challenge response. pub async fn verify_response(&mut self, response: &PairingResponse) -> Result { + if self.state().await != PairingState::Verifying { + return Err(anyhow!( + "pairing response is not valid in the current state" + )); + } let expected = self .challenge - .as_ref() + .take() .ok_or_else(|| anyhow!("no challenge issued"))?; + let issued_at = self + .challenge_issued_at + .take() + .ok_or_else(|| anyhow!("challenge timestamp missing"))?; + + if chrono::Utc::now().timestamp().saturating_sub(issued_at) > PAIRING_CHALLENGE_TTL_SECS { + *self.state.write().await = PairingState::Failed { + reason: "challenge expired".to_string(), + }; + return Ok(false); + } - if response.challenge_echo != *expected { + if response.challenge_echo != expected { *self.state.write().await = PairingState::Failed { reason: "challenge mismatch".to_string(), }; @@ -204,16 +272,32 @@ impl PairingProtocol { *self.state.write().await = PairingState::Disconnected; self.shared_secret = None; self.challenge = None; + self.challenge_issued_at = None; self.peer_device_id = None; self.peer_device_name = None; } + /// Keep the QR room/keypair but discard the failed mobile handshake so the + /// user can correct account credentials without restarting Remote Connect. + /// Call only after an authenticated, encrypted pairing response fails an + /// identity/account policy check; cryptographic challenge mismatches remain + /// terminal for the current QR. + pub async fn retry_after_identity_rejection(&mut self) { + self.shared_secret = None; + self.challenge = None; + self.challenge_issued_at = None; + self.peer_device_id = None; + self.peer_device_name = None; + *self.state.write().await = PairingState::WaitingForScan; + } + pub async fn reset(&mut self) { *self.state.write().await = PairingState::Idle; self.keypair = None; self.shared_secret = None; self.room_id = None; self.challenge = None; + self.challenge_issued_at = None; self.peer_device_id = None; self.peer_device_name = None; } @@ -293,6 +377,36 @@ mod tests { let desktop_pub = encryption::parse_public_key(&qr.public_key).unwrap(); let mobile_shared = mobile_keypair.derive_shared_secret(&desktop_pub); assert_eq!(*desktop_secret, mobile_shared); + + // Challenges are single-use even when a response is replayed verbatim. + assert!(protocol.verify_response(&response).await.is_err()); + } + + #[tokio::test] + async fn expired_pairing_challenge_is_rejected_and_consumed() { + let device = DeviceIdentity { + device_id: "test-desktop-id".into(), + device_name: "TestDesktop".into(), + mac_address: "AA:BB:CC:DD:EE:FF".into(), + }; + let mobile_device = DeviceIdentity { + device_id: "test-mobile-id".into(), + device_name: "TestMobile".into(), + mac_address: "11:22:33:44:55:66".into(), + }; + let mut protocol = PairingProtocol::new(device); + protocol.initiate("wss://relay.example.com").await.unwrap(); + let mobile_keypair = KeyPair::generate(); + let challenge = protocol + .on_peer_joined(&mobile_keypair.public_key_base64()) + .await + .unwrap(); + protocol.challenge_issued_at = + Some(chrono::Utc::now().timestamp() - PAIRING_CHALLENGE_TTL_SECS - 1); + let response = PairingProtocol::answer_challenge(&challenge, &mobile_device, None, None); + + assert!(!protocol.verify_response(&response).await.unwrap()); + assert!(protocol.verify_response(&response).await.is_err()); } #[test] diff --git a/src/crates/services/services-integrations/src/remote_connect/session_store.rs b/src/crates/services/services-integrations/src/remote_connect/session_store.rs index bc28e63133..46adb54ac5 100644 --- a/src/crates/services/services-integrations/src/remote_connect/session_store.rs +++ b/src/crates/services/services-integrations/src/remote_connect/session_store.rs @@ -1,15 +1,18 @@ //! Machine-bound persistent session store. //! -//! Saves the full `AccountSession` (token + master_key + user_id) and -//! relay URL to disk, encrypted with a machine-derived key so the file -//! is useless if copied to another machine. This lets Desktop / CLI -//! restart without requiring a fresh password entry. +//! Saves the full `AccountSession` (token + master_key + user_id) and relay +//! URL to disk, encrypted with a key that combines machine identity and a +//! random per-install secret. Secret files are owner-only on Unix and replaced +//! through a private temporary file. This lets Desktop / CLI restart without +//! requiring a fresh password entry while keeping copied session ciphertext +//! unusable without the separate install key. //! //! File location: `~/.bitfun/account_session.enc` //! Format: base64(nonce || ciphertext) where the plaintext is a JSON //! payload `{ token, user_id, master_key_b64, relay_url }`. use std::path::PathBuf; +use std::{fs::OpenOptions, io::Write}; use aes_gcm::aead::{Aead, KeyInit, OsRng}; use aes_gcm::{Aes256Gcm, Nonce}; @@ -41,12 +44,80 @@ fn session_file_path() -> Result { Ok(home.join(".bitfun").join("account_session.enc")) } +fn session_key_file_path() -> Result { + let home = dirs::home_dir().ok_or_else(|| anyhow!("cannot determine home directory"))?; + Ok(home.join(".bitfun").join("account_session.key")) +} + +/// Atomically replace a secret-bearing file and restrict it to the current +/// OS user where Unix permission bits are available. The parent is also made +/// private because older releases may have created `~/.bitfun` under a broad +/// process umask. +fn write_private_file(path: &std::path::Path, contents: &[u8]) -> Result<()> { + let parent = path + .parent() + .ok_or_else(|| anyhow!("secret file has no parent directory"))?; + std::fs::create_dir_all(parent).context("create private data directory")?; + #[cfg(unix)] + { + use std::os::unix::fs::PermissionsExt; + std::fs::set_permissions(parent, std::fs::Permissions::from_mode(0o700)) + .context("restrict private data directory permissions")?; + } + + let mut random = [0u8; 8]; + OsRng.fill_bytes(&mut random); + let suffix = random + .iter() + .map(|byte| format!("{byte:02x}")) + .collect::(); + let file_name = path + .file_name() + .and_then(|name| name.to_str()) + .ok_or_else(|| anyhow!("secret file has an invalid name"))?; + let temp_path = parent.join(format!(".{file_name}.{suffix}.tmp")); + + let mut options = OpenOptions::new(); + options.write(true).create_new(true); + #[cfg(unix)] + { + use std::os::unix::fs::OpenOptionsExt; + options.mode(0o600); + } + let write_result = (|| -> Result<()> { + let mut file = options + .open(&temp_path) + .context("create temporary secret file")?; + file.write_all(contents) + .context("write temporary secret file")?; + file.sync_all().context("flush temporary secret file")?; + drop(file); + + #[cfg(windows)] + if path.exists() { + std::fs::remove_file(path).context("replace existing secret file")?; + } + std::fs::rename(&temp_path, path).context("install private secret file")?; + #[cfg(unix)] + { + use std::os::unix::fs::PermissionsExt; + std::fs::set_permissions(path, std::fs::Permissions::from_mode(0o600)) + .context("restrict secret file permissions")?; + } + Ok(()) + })(); + if write_result.is_err() { + let _ = std::fs::remove_file(&temp_path); + } + write_result +} + /// Derive a machine-bound AES-256 key from stable machine identifiers. /// /// Combines hostname, OS username, OS type, and platform constant into /// SHA-256 to produce a 32-byte key. The file is useless on a different /// machine (different hostname / username combination). -fn derive_machine_key() -> [u8; 32] { +fn derive_legacy_machine_key() -> [u8; 32] { let mut hasher = Sha256::new(); // Hostname / machine name @@ -74,6 +145,66 @@ fn derive_machine_key() -> [u8; 32] { key } +fn derive_machine_key(local_secret: &[u8; 32]) -> [u8; 32] { + let mut hasher = Sha256::new(); + hasher.update(derive_legacy_machine_key()); + hasher.update(b"|BitFun::session_store::v2|"); + hasher.update(local_secret); + let result = hasher.finalize(); + let mut key = [0u8; 32]; + key.copy_from_slice(&result); + key +} + +fn load_or_create_local_session_secret() -> Result<[u8; 32]> { + let path = session_key_file_path()?; + match std::fs::read(&path) { + Ok(bytes) => { + return bytes + .try_into() + .map_err(|_| anyhow!("local account session key has an invalid length")); + } + Err(error) if error.kind() == std::io::ErrorKind::NotFound => {} + Err(error) => return Err(anyhow!("read local account session key: {error}")), + } + + let mut secret = [0u8; 32]; + OsRng.fill_bytes(&mut secret); + let parent = path + .parent() + .ok_or_else(|| anyhow!("session key has no parent directory"))?; + std::fs::create_dir_all(parent).context("create session key directory")?; + #[cfg(unix)] + { + use std::os::unix::fs::PermissionsExt; + std::fs::set_permissions(parent, std::fs::Permissions::from_mode(0o700)) + .context("restrict session key directory permissions")?; + } + + let mut options = OpenOptions::new(); + options.write(true).create_new(true); + #[cfg(unix)] + { + use std::os::unix::fs::OpenOptionsExt; + options.mode(0o600); + } + match options.open(&path) { + Ok(mut file) => { + file.write_all(&secret) + .context("write local account session key")?; + file.sync_all().context("flush local account session key")?; + Ok(secret) + } + Err(error) if error.kind() == std::io::ErrorKind::AlreadyExists => { + let bytes = std::fs::read(&path).context("read concurrently created session key")?; + bytes + .try_into() + .map_err(|_| anyhow!("local account session key has an invalid length")) + } + Err(error) => Err(anyhow!("create local account session key: {error}")), + } +} + /// Best-effort hostname retrieval (cross-platform). fn hostname_string() -> Option { // `hostname::get()` from the `hostname` crate would be cleaner, but @@ -148,7 +279,8 @@ pub fn save_session_with_device( }; let json = serde_json::to_string(&payload).context("serialize session payload")?; - let key = derive_machine_key(); + let local_secret = load_or_create_local_session_secret()?; + let key = derive_machine_key(&local_secret); let cipher = Aes256Gcm::new_from_slice(&key).map_err(|e| anyhow!("cipher init: {e}"))?; let mut nonce_bytes = [0u8; NONCE_SIZE]; @@ -166,10 +298,7 @@ pub fn save_session_with_device( let encoded = BASE64.encode(&packed); let path = session_file_path()?; - if let Some(parent) = path.parent() { - std::fs::create_dir_all(parent).context("create session dir")?; - } - std::fs::write(&path, encoded).context("write session file")?; + write_private_file(&path, encoded.as_bytes()).context("write session file")?; log::debug!("Session persisted to {:?}", path); Ok(()) @@ -216,11 +345,24 @@ pub fn load_session_detailed() -> Result> { .try_into() .map_err(|_| anyhow!("nonce conversion"))?; - let key = derive_machine_key(); + let local_secret = load_or_create_local_session_secret()?; + let key = derive_machine_key(&local_secret); let cipher = Aes256Gcm::new_from_slice(&key).map_err(|e| anyhow!("cipher init: {e}"))?; - let plaintext = cipher - .decrypt(Nonce::from_slice(&nonce_arr), ciphertext) - .map_err(|e| anyhow!("decrypt session: {e}"))?; + let (plaintext, used_legacy_key) = + match cipher.decrypt(Nonce::from_slice(&nonce_arr), ciphertext) { + Ok(plaintext) => (plaintext, false), + Err(_) => { + // Compatibility with v1 sessions. Successful legacy loads are + // immediately re-encrypted with the per-install random secret. + let legacy_key = derive_legacy_machine_key(); + let legacy_cipher = Aes256Gcm::new_from_slice(&legacy_key) + .map_err(|e| anyhow!("legacy cipher init: {e}"))?; + let plaintext = legacy_cipher + .decrypt(Nonce::from_slice(&nonce_arr), ciphertext) + .map_err(|e| anyhow!("decrypt session: {e}"))?; + (plaintext, true) + } + }; let payload: SessionPayload = serde_json::from_slice(&plaintext).context("deserialize session payload")?; @@ -234,13 +376,25 @@ pub fn load_session_detailed() -> Result> { } master_key.copy_from_slice(&master_key_bytes); - Ok(Some(LoadedSession { + let loaded = LoadedSession { token: payload.token, user_id: payload.user_id, master_key, relay_url: payload.relay_url, device_id: payload.device_id, - })) + }; + if used_legacy_key { + if let Err(error) = save_session_with_device( + &loaded.token, + &loaded.user_id, + &loaded.master_key, + &loaded.relay_url, + loaded.device_id.as_deref(), + ) { + log::warn!("Failed to migrate legacy account session encryption: {error}"); + } + } + Ok(Some(loaded)) } /// Remove the persisted session file (called on logout). @@ -278,7 +432,7 @@ pub fn save_credential_hint(username: &str, relay_url: &str) { let _ = std::fs::create_dir_all(parent); } if let Ok(json) = serde_json::to_string(&hint) { - let _ = std::fs::write(&path, json); + let _ = write_private_file(&path, json.as_bytes()); } } @@ -295,3 +449,36 @@ pub fn clear_credential_hint() { let _ = std::fs::remove_file(&path); } } + +#[cfg(all(test, unix))] +mod tests { + use super::*; + use std::os::unix::fs::PermissionsExt; + + #[test] + fn private_file_writer_uses_owner_only_permissions_and_replaces_atomically() { + let root = tempfile::tempdir().unwrap(); + let private_dir = root.path().join("private"); + let path = private_dir.join("session.enc"); + + write_private_file(&path, b"first").unwrap(); + write_private_file(&path, b"second").unwrap(); + + assert_eq!(std::fs::read(&path).unwrap(), b"second"); + assert_eq!( + std::fs::metadata(&private_dir) + .unwrap() + .permissions() + .mode() + & 0o777, + 0o700 + ); + assert_eq!( + std::fs::metadata(&path).unwrap().permissions().mode() & 0o777, + 0o600 + ); + assert!(std::fs::read_dir(&private_dir) + .unwrap() + .all(|entry| entry.unwrap().path() == path)); + } +} diff --git a/src/crates/services/services-integrations/tests/remote_connect_contracts.rs b/src/crates/services/services-integrations/tests/remote_connect_contracts.rs index bd64f7f433..65bc878758 100644 --- a/src/crates/services/services-integrations/tests/remote_connect_contracts.rs +++ b/src/crates/services/services-integrations/tests/remote_connect_contracts.rs @@ -1416,13 +1416,28 @@ fn make_temp_remote_workspace() -> (PathBuf, PathBuf, PathBuf) { #[test] fn remote_connect_file_path_resolution_stays_within_workspace_root() { let (base, workspace, report) = make_temp_remote_workspace(); + let secret = base.join("secret.md"); + std::fs::write(&secret, b"outside workspace").expect("write outside file"); let resolved = resolve_remote_workspace_path("computer://artifacts/report.md", Some(&workspace)) .expect("workspace-relative file resolves"); assert_eq!(resolved, report.canonicalize().expect("canonical report")); + let absolute_resolved = + resolve_remote_workspace_path(report.to_str().expect("UTF-8 test path"), Some(&workspace)) + .expect("absolute path within workspace resolves"); + assert_eq!( + absolute_resolved, + report.canonicalize().expect("canonical report") + ); + assert!(resolve_remote_workspace_path("../secret.md", Some(&workspace)).is_none()); + assert!(resolve_remote_workspace_path( + secret.to_str().expect("UTF-8 test path"), + Some(&workspace) + ) + .is_none()); assert!(resolve_remote_workspace_path("artifacts/report.md", None).is_none()); std::fs::remove_dir_all(base).expect("cleanup remote workspace"); diff --git a/src/mobile-web/index.html b/src/mobile-web/index.html index 3dfd18e75d..5e7a8fc874 100644 --- a/src/mobile-web/index.html +++ b/src/mobile-web/index.html @@ -5,18 +5,11 @@ + BitFun Remote - +