plab-ultra

Userscript for PornoLab.Net

作者のサイトでサポートを受ける。または、このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください
// ==UserScript==
// @name         plab-ultra
// @namespace    https://github.com/clangmoyai/plab-ultra
// @version      2025.08.30
// @author       clangmoyai
// @description  Userscript for PornoLab.Net
// @license      MIT
// @icon         https://github.com/clangmoyai/plab-ultra/raw/main/src/assets/logo64.png
// @homepage     https://github.com/clangmoyai/plab-ultra
// @supportURL   https://github.com/clangmoyai/plab-ultra/issues
// @match        https://pornolab.net/forum/viewtopic.php*
// @tag          pornolab
// @tag          pornolab.net
// @connect      *
// @grant        GM_addStyle
// @grant        GM_xmlhttpRequest
// @run-at       document-start
// ==/UserScript==

(function () {
  'use strict';

  const d=new Set;const importCSS = async e=>{d.has(e)||(d.add(e),(t=>{typeof GM_addStyle=="function"?GM_addStyle(t):document.head.appendChild(document.createElement("style")).append(t);})(e));};

  importCSS(` .ultra-logo.svelte-14s75i7{width:16px;display:inline-flex;vertical-align:top;margin:0 .45rem 0 0}.ultra-logo.svelte-14s75i7:hover{cursor:pointer}#x-header.svelte-14s75i7{--header-height: 4.5rem;display:grid;grid-template-columns:auto 1fr;column-gap:1rem;margin-bottom:var(--content-margin);min-height:var(--header-height)}.floatingDownload.svelte-14s75i7{padding-right:5rem}.logo.svelte-14s75i7{height:var(--header-height)}.logo.svelte-14s75i7 img:where(.svelte-14s75i7){height:100%;border-radius:var(--border-radius-large)}.align-right.svelte-14s75i7{display:flex;justify-content:flex-end;min-width:0}.container.svelte-14s75i7{display:flex;flex-direction:column;min-width:0;row-gap:1rem}.links.svelte-14s75i7{display:flex;min-width:0;flex-wrap:nowrap;justify-content:end}.unread.svelte-14s75i7{color:var(--highlighted);filter:brightness(1.25)}.item.svelte-14s75i7{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.item.svelte-14s75i7+.item:where(.svelte-14s75i7):before{display:inline-block;content:"|";margin:0 .8rem;color:var(--post-border-color);transform:translateY(-1px)}.search.svelte-14s75i7{display:flex;gap:.5rem}.search.svelte-14s75i7 input:where(.svelte-14s75i7){flex:1 1 auto;min-width:0;border:1px solid var(--post-border-color);color:var(--search-color);background:var(--input-bg)!important;padding:.3rem .5rem .4rem;border-radius:var(--border-radius-small);font-size:.8rem!important;font-family:inherit}.search.svelte-14s75i7 button:where(.svelte-14s75i7){background:var(--input-bg)!important;border:1px solid var(--post-border-color)!important;width:1.75rem;border-radius:var(--border-radius-small)}.incognito.svelte-14s75i7{filter:var(--incognito-filter)!important}.themeIcon.svelte-14s75i7 a,.themeIcon.svelte-14s75i7 a:hover{text-decoration:none!important}@media (max-width: 768px){#x-header.svelte-14s75i7{grid-template-columns:1fr}.logo.svelte-14s75i7{display:none}.container.svelte-14s75i7{width:100%}}.container.svelte-5e73jo{display:flex;gap:1.15rem;justify-content:space-between}.column.svelte-5e73jo{display:flex;flex-direction:column;overflow:hidden;gap:.75rem}h2.svelte-5e73jo{margin:0;margin-bottom:.25rem;font-size:1rem;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}input[type=checkbox].svelte-5e73jo{margin:4px}label.svelte-5e73jo{display:flex;align-items:center;gap:.5rem}.disabled.svelte-5e73jo{text-decoration:line-through;cursor:default}span.svelte-5e73jo{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.description.svelte-5e73jo{opacity:.5}input[type=checkbox].svelte-5e73jo:disabled{cursor:default}@media (max-width: 1200px){.container.svelte-5e73jo{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(2,auto);gap:1rem;justify-content:stretch}.column.svelte-5e73jo{min-width:0}}@media (max-width: 768px){.container.svelte-5e73jo{display:flex;flex-direction:column;gap:1rem}.column.svelte-5e73jo{min-width:0;width:100%}}button.svelte-ig1se8{all:unset;display:flex;justify-content:center;align-items:center;cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;background:var(--button-color)!important;border:none!important;border-radius:var(--border-radius-small);padding:.4rem .5rem;font-family:inherit;font-weight:500;font-size:.8rem;color:#fff;transition:background-color opacity 1.8s ease-in-out}button.svelte-ig1se8:disabled{background-color:var(--post-border-color)!important;opacity:.5;cursor:not-allowed}svg.svelte-ig1se8{position:absolute}svg.svelte-ig1se8 path:where(.svelte-ig1se8){transform-origin:center;fill:#fff}.container.svelte-d5217q{display:flex;justify-content:space-between;align-items:center;margin-top:1rem}.align-right.svelte-d5217q{display:flex;gap:.5rem}.container.svelte-6don7f{display:flex;flex-direction:column;margin-top:1.25rem}.item.svelte-6don7f{display:grid;grid-template-columns:min-content minmax(0,10rem) 1fr auto;align-items:center;gap:.75rem;min-width:0;margin-bottom:.5rem}img.svelte-6don7f{width:.9rem;height:.9rem;flex-shrink:0}input[type=text].svelte-6don7f{padding:.3rem .5rem .4rem;border:1px solid var(--post-border-color);border-radius:var(--border-radius-small);font-size:.8rem!important;background:var(--input-bg)!important;color:inherit;font:inherit;min-width:0}button.svelte-6don7f{background:#a62f2fbf!important;border-radius:var(--border-radius-small);font-size:1.2rem;border:none!important;color:#fff!important;display:flex;align-items:center;width:1.5rem;height:1.5rem;align-items:flex-end;justify-content:center;-webkit-user-select:none;user-select:none}button.svelte-6don7f:hover{background:#a62f2f!important}div.svelte-rmjlst{font-size:.8rem;position:relative;background:var(--post-bg);border:1px solid var(--post-border-color);padding:.9rem 1rem 1rem;border-radius:var(--border-radius-large);overflow:hidden;display:flex;flex-flow:column;font-family:inherit;margin-bottom:var(--content-margin)}button.svelte-rmjlst{position:absolute;top:.6rem;right:.6rem;background:none!important;border:none;font-size:1.5rem;cursor:pointer;flex-shrink:0;-webkit-user-select:none;user-select:none}div.svelte-hyxnps{position:fixed;top:1.3rem;right:2.5rem;z-index:9999;border-radius:var(--border-radius-large);padding:.35rem;border:1px solid var(--post-border-color);background-color:#009c3c!important}button.svelte-hyxnps{cursor:pointer;aspect-ratio:1 / 1;--size: 1.7rem;width:var(--size);background-color:#fff!important}.ic--sharp-download.svelte-hyxnps{display:inline-block;--svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23000' d='M19 9h-4V3H9v6H5l7 7zM5 18v2h14v-2z'/%3E%3C/svg%3E");background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%}.container.svelte-m808n{position:absolute;z-index:2;transform:translate(-50%);padding-top:.2rem}.indicator.svelte-m808n{position:absolute;left:calc(50% - 8px);border-left:8px solid transparent;border-right:8px solid transparent;border-bottom:7px solid var(--post-border-color)}.items.svelte-m808n{margin-top:7px;position:relative;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-radius:var(--border-radius-large);-webkit-user-select:none;user-select:none;border:1px solid var(--post-border-color);box-shadow:#00000040 0 25px 50px -12px;background:var(--overlay-bg);white-space:nowrap}.items.svelte-m808n img:where(.svelte-m808n){width:.9rem;height:1rem;width:1rem;-webkit-user-drag:none}.items.svelte-m808n a:where(.svelte-m808n){display:flex;align-items:center;gap:.75rem;font-size:.9rem;font-weight:500;text-decoration:none;padding:.5rem 1rem;-webkit-user-drag:none}.items.svelte-m808n a:where(.svelte-m808n):hover{color:unset}.items.svelte-m808n a:where(.svelte-m808n):first-of-type{padding-top:.9rem}.items.svelte-m808n a:where(.svelte-m808n):last-of-type{padding-bottom:1rem}#x-title.svelte-12bxepp{font-size:1.375rem;margin-top:0;margin-bottom:var(--content-margin)}.original-title.svelte-12bxepp{text-decoration:none}.title-item.svelte-12bxepp{color:unset;text-decoration:none}.title-item.svelte-12bxepp:hover,.title-item--hover{text-decoration:underline!important;color:var(--link-color)!important;cursor:pointer}button.svelte-1ilvoyd{all:unset;cursor:pointer;background:none!important}button.svelte-1ilvoyd:disabled{cursor:text;-webkit-user-select:text;user-select:text}#thx-btn{all:unset!important}#x-stats.svelte-7pdkl5{display:flex;flex-wrap:wrap;gap:.8rem;font-weight:500;font-size:.8rem;margin-bottom:var(--content-margin)}.item.svelte-7pdkl5:not(:last-child):after{display:inline-block;content:"|";color:var(--post-border-color);margin-left:.8rem;transform:translateY(-1px)}button.svelte-7pdkl5{all:unset;cursor:pointer;background:none!important}button.svelte-7pdkl5:disabled{cursor:text;-webkit-user-select:text;user-select:text}.seeders.svelte-7pdkl5{color:var(--seed-color)}.leechers.svelte-7pdkl5,.error.svelte-7pdkl5{color:var(--leech-color)}#x-tags.svelte-hxarl5{display:flex;flex-wrap:wrap;gap:.35rem;margin-bottom:var(--content-margin)}.tag-item.svelte-hxarl5{display:inline-flex;align-items:center;justify-content:center;padding:.25rem .6rem .255rem;border-radius:var(--border-radius-small);font-size:.7rem;white-space:nowrap;text-decoration:none;cursor:pointer;font-weight:500;opacity:.75;transition:opacity .1s ease;color:var(--tag-color);background-color:var(--tag-bg);row-gap:.35rem;column-gap:.35rem;transition:opacity .15s ease-in-out}.tag-item.svelte-hxarl5:hover,.tag-item--hover{opacity:1!important;text-decoration:none!important}.tag-res.svelte-hxarl5{background:var(--highlighted)!important;color:#fff!important;opacity:1}.filelist.svelte-eqeghx{background:var(--post-bg);border:1px solid var(--post-border-color);padding:.75rem;border-radius:var(--border-radius-large);margin-bottom:var(--content-margin)}.filelist.svelte-eqeghx i{color:var(--link-color);font-style:normal;font-weight:500}div.svelte-1rhiyed{display:flex;flex-direction:column;gap:1rem;will-change:width;position:relative}.dragging.svelte-1rhiyed{cursor:ew-resize}.loader.svelte-10rouec{width:15%;height:auto;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);pointer-events:none}svg.svelte-10rouec{width:100%;height:auto;will-change:transform}svg.svelte-10rouec path:where(.svelte-10rouec){fill:#fff}.animate.svelte-10rouec{animation:svelte-10rouec-spin 1s linear infinite;transform-origin:center center}@keyframes svelte-10rouec-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.debug.svelte-zizdl6{position:relative;display:flex;flex-direction:column;font-family:monospace;background:var(--button-color);padding:1rem;width:-webkit-fill-available;color:#fff;-webkit-user-select:text;user-select:text;word-wrap:break-word;gap:.4rem}.debug.svelte-zizdl6 a:where(.svelte-zizdl6){color:#fff;text-decoration:none;display:contents}.error.svelte-zizdl6{color:red}.copy.svelte-zizdl6{position:absolute;top:.5rem;right:.5rem;background:none!important;border:none;font-size:1.5rem;cursor:pointer;flex-shrink:0}svg.svelte-zizdl6 path:where(.svelte-zizdl6){transform-origin:center;fill:#fff;transform:translateY(2px)}.section.svelte-ojhdzd{display:flex;padding:1rem;flex-direction:column;align-items:center;-webkit-user-select:none;user-select:none;margin-bottom:var(--content-margin)}a.svelte-ojhdzd{position:relative;display:block;overflow:hidden}.container.svelte-ojhdzd{border-radius:var(--border-radius-small);overflow:hidden}img.svelte-ojhdzd{width:100%;height:auto;border:none;flex:1 0 100%;-webkit-user-select:none;user-select:none;will-change:width;display:block}a.gif.svelte-ojhdzd{width:fit-content}img.gif.svelte-ojhdzd{width:auto;max-width:100%}.incognito.svelte-ojhdzd{filter:var(--incognito-filter)!important}.dragging.svelte-ojhdzd a:where(.svelte-ojhdzd),.dragging.svelte-ojhdzd img:where(.svelte-ojhdzd){pointer-events:none}.forumline.svelte-14j3c1y{padding:1rem;position:relative;display:flex;flex-direction:column;align-items:center}.section.svelte-14j3c1y{margin-bottom:var(--content-margin)}a.svelte-14j3c1y{color:#4da3ff;text-decoration:none}a.svelte-14j3c1y:hover{text-decoration:underline}.post.svelte-14j3c1y{display:flex;gap:1rem;padding:1rem;border-bottom:1px solid var(--post-border-color)}.post.svelte-14j3c1y:nth-child(2n){background-color:var(--post-odd-bg)}.post.svelte-14j3c1y:last-child{border-bottom:none}.avatar.svelte-14j3c1y img:where(.svelte-14j3c1y){width:48px;height:48px;border-radius:var(--border-radius-small);object-fit:cover;border:1px solid var(--post-border-color)}.no-avatar.svelte-14j3c1y{display:flex;width:48px;height:48px;text-align:center;line-height:48px;background:var(--main-bg);border:1px solid var(--post-border-color);border-radius:var(--border-radius-small);font-size:1.3rem;cursor:pointer;justify-content:center;align-items:center}.no-avatar.svelte-14j3c1y svg:where(.svelte-14j3c1y){width:55%;height:55%}.no-avatar.svelte-14j3c1y:hover{text-decoration:none!important}.content.svelte-14j3c1y{flex:1}.header.svelte-14j3c1y{font-size:.8rem;color:#bbb;margin-block-end:.4rem;display:flex;gap:.5rem;align-items:center}.nick.svelte-14j3c1y{font-weight:600}.date.svelte-14j3c1y{all:unset!important;color:var(--post-date-color)!important;font-weight:400!important;opacity:.8!important;cursor:pointer!important}.date.svelte-14j3c1y:hover{opacity:1!important}.message.svelte-14j3c1y{margin:0;line-height:1.4}#ultra-pagination.svelte-13k3ejc{display:flex;justify-content:space-between;font-size:.75rem;font-weight:600;margin-bottom:var(--content-margin)}#ultra-pagination a{text-decoration:none!important} `);

  const DEV = false;
  var is_array = Array.isArray;
  var index_of = Array.prototype.indexOf;
  var array_from = Array.from;
  var define_property = Object.defineProperty;
  var get_descriptor = Object.getOwnPropertyDescriptor;
  var get_descriptors = Object.getOwnPropertyDescriptors;
  var object_prototype = Object.prototype;
  var array_prototype = Array.prototype;
  var get_prototype_of = Object.getPrototypeOf;
  var is_extensible = Object.isExtensible;
  function is_function(thing) {
    return typeof thing === "function";
  }
  const noop = () => {
  };
  function is_promise(value) {
    return typeof value?.then === "function";
  }
  function run(fn) {
    return fn();
  }
  function run_all(arr) {
    for (var i = 0; i < arr.length; i++) {
      arr[i]();
    }
  }
  function deferred() {
    var resolve;
    var reject;
    var promise = new Promise((res, rej) => {
      resolve = res;
      reject = rej;
    });
    return { promise, resolve, reject };
  }
  function to_array(value, n) {
    if (Array.isArray(value)) {
      return value;
    }
    if (!(Symbol.iterator in value)) {
      return Array.from(value);
    }
    const array = [];
    for (const element of value) {
      array.push(element);
      if (array.length === n) break;
    }
    return array;
  }
  const DERIVED = 1 << 1;
  const EFFECT = 1 << 2;
  const RENDER_EFFECT = 1 << 3;
  const BLOCK_EFFECT = 1 << 4;
  const BRANCH_EFFECT = 1 << 5;
  const ROOT_EFFECT = 1 << 6;
  const BOUNDARY_EFFECT = 1 << 7;
  const UNOWNED = 1 << 8;
  const DISCONNECTED = 1 << 9;
  const CLEAN = 1 << 10;
  const DIRTY = 1 << 11;
  const MAYBE_DIRTY = 1 << 12;
  const INERT = 1 << 13;
  const DESTROYED = 1 << 14;
  const EFFECT_RAN = 1 << 15;
  const EFFECT_TRANSPARENT = 1 << 16;
  const INSPECT_EFFECT = 1 << 17;
  const HEAD_EFFECT = 1 << 18;
  const EFFECT_PRESERVED = 1 << 19;
  const USER_EFFECT = 1 << 20;
  const REACTION_IS_UPDATING = 1 << 21;
  const ASYNC = 1 << 22;
  const ERROR_VALUE = 1 << 23;
  const STATE_SYMBOL = Symbol("$state");
  const LEGACY_PROPS = Symbol("legacy props");
  const LOADING_ATTR_SYMBOL = Symbol("");
  const STALE_REACTION = new class StaleReactionError extends Error {
    name = "StaleReactionError";
    message = "The reaction that called `getAbortSignal()` was re-run or destroyed";
  }();
  function await_outside_boundary() {
    {
      throw new Error(`https://svelte.dev/e/await_outside_boundary`);
    }
  }
  function lifecycle_outside_component(name) {
    {
      throw new Error(`https://svelte.dev/e/lifecycle_outside_component`);
    }
  }
  function async_derived_orphan() {
    {
      throw new Error(`https://svelte.dev/e/async_derived_orphan`);
    }
  }
  function effect_in_teardown(rune) {
    {
      throw new Error(`https://svelte.dev/e/effect_in_teardown`);
    }
  }
  function effect_in_unowned_derived() {
    {
      throw new Error(`https://svelte.dev/e/effect_in_unowned_derived`);
    }
  }
  function effect_orphan(rune) {
    {
      throw new Error(`https://svelte.dev/e/effect_orphan`);
    }
  }
  function effect_update_depth_exceeded() {
    {
      throw new Error(`https://svelte.dev/e/effect_update_depth_exceeded`);
    }
  }
  function state_descriptors_fixed() {
    {
      throw new Error(`https://svelte.dev/e/state_descriptors_fixed`);
    }
  }
  function state_prototype_fixed() {
    {
      throw new Error(`https://svelte.dev/e/state_prototype_fixed`);
    }
  }
  function state_unsafe_mutation() {
    {
      throw new Error(`https://svelte.dev/e/state_unsafe_mutation`);
    }
  }
  const EACH_ITEM_REACTIVE = 1;
  const EACH_INDEX_REACTIVE = 1 << 1;
  const EACH_IS_CONTROLLED = 1 << 2;
  const EACH_IS_ANIMATED = 1 << 3;
  const EACH_ITEM_IMMUTABLE = 1 << 4;
  const PROPS_IS_IMMUTABLE = 1;
  const PROPS_IS_RUNES = 1 << 1;
  const PROPS_IS_UPDATED = 1 << 2;
  const PROPS_IS_BINDABLE = 1 << 3;
  const PROPS_IS_LAZY_INITIAL = 1 << 4;
  const TRANSITION_IN = 1;
  const TRANSITION_OUT = 1 << 1;
  const TRANSITION_GLOBAL = 1 << 2;
  const TEMPLATE_FRAGMENT = 1;
  const TEMPLATE_USE_IMPORT_NODE = 1 << 1;
  const UNINITIALIZED = Symbol();
  const NAMESPACE_HTML = "http://www.w3.org/1999/xhtml";
  let hydrating = false;
  function equals(value) {
    return value === this.v;
  }
  function safe_not_equal(a, b) {
    return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
  }
  function safe_equals(value) {
    return !safe_not_equal(value, this.v);
  }
  let legacy_mode_flag = false;
  let tracing_mode_flag = false;
  function enable_legacy_mode_flag() {
    legacy_mode_flag = true;
  }
  let component_context = null;
  function set_component_context(context) {
    component_context = context;
  }
  function push(props, runes = false, fn) {
    component_context = {
      p: component_context,
      c: null,
      e: null,
      s: props,
      x: null,
      l: legacy_mode_flag && !runes ? { s: null, u: null, $: [] } : null
    };
  }
  function pop(component) {
    var context = (
component_context
    );
    var effects = context.e;
    if (effects !== null) {
      context.e = null;
      for (var fn of effects) {
        create_user_effect(fn);
      }
    }
    component_context = context.p;
    return (
{}
    );
  }
  function is_runes() {
    return !legacy_mode_flag || component_context !== null && component_context.l === null;
  }
  const adjustments = new WeakMap();
  function handle_error(error) {
    var effect2 = active_effect;
    if (effect2 === null) {
      active_reaction.f |= ERROR_VALUE;
      return error;
    }
    if ((effect2.f & EFFECT_RAN) === 0) {
      if ((effect2.f & BOUNDARY_EFFECT) === 0) {
        if (!effect2.parent && error instanceof Error) {
          apply_adjustments(error);
        }
        throw error;
      }
      effect2.b.error(error);
    } else {
      invoke_error_boundary(error, effect2);
    }
  }
  function invoke_error_boundary(error, effect2) {
    while (effect2 !== null) {
      if ((effect2.f & BOUNDARY_EFFECT) !== 0) {
        try {
          effect2.b.error(error);
          return;
        } catch (e) {
          error = e;
        }
      }
      effect2 = effect2.parent;
    }
    if (error instanceof Error) {
      apply_adjustments(error);
    }
    throw error;
  }
  function apply_adjustments(error) {
    const adjusted = adjustments.get(error);
    if (adjusted) {
      define_property(error, "message", {
        value: adjusted.message
      });
      define_property(error, "stack", {
        value: adjusted.stack
      });
    }
  }
  let micro_tasks = [];
  let idle_tasks = [];
  function run_micro_tasks() {
    var tasks2 = micro_tasks;
    micro_tasks = [];
    run_all(tasks2);
  }
  function run_idle_tasks() {
    var tasks2 = idle_tasks;
    idle_tasks = [];
    run_all(tasks2);
  }
  function queue_micro_task(fn) {
    if (micro_tasks.length === 0) {
      queueMicrotask(run_micro_tasks);
    }
    micro_tasks.push(fn);
  }
  function flush_tasks() {
    if (micro_tasks.length > 0) {
      run_micro_tasks();
    }
    if (idle_tasks.length > 0) {
      run_idle_tasks();
    }
  }
  function get_pending_boundary() {
    var boundary = (
active_effect.b
    );
    while (boundary !== null && !boundary.has_pending_snippet()) {
      boundary = boundary.parent;
    }
    if (boundary === null) {
      await_outside_boundary();
    }
    return boundary;
  }
function derived(fn) {
    var flags = DERIVED | DIRTY;
    var parent_derived = active_reaction !== null && (active_reaction.f & DERIVED) !== 0 ? (
active_reaction
    ) : null;
    if (active_effect === null || parent_derived !== null && (parent_derived.f & UNOWNED) !== 0) {
      flags |= UNOWNED;
    } else {
      active_effect.f |= EFFECT_PRESERVED;
    }
    const signal = {
      ctx: component_context,
      deps: null,
      effects: null,
      equals,
      f: flags,
      fn,
      reactions: null,
      rv: 0,
      v: (
UNINITIALIZED
      ),
      wv: 0,
      parent: parent_derived ?? active_effect,
      ac: null
    };
    return signal;
  }
function async_derived(fn, location2) {
    let parent = (
active_effect
    );
    if (parent === null) {
      async_derived_orphan();
    }
    var boundary = (
parent.b
    );
    var promise = (

void 0
    );
    var signal = source(
UNINITIALIZED
    );
    var prev = null;
    var should_suspend = !active_reaction;
    async_effect(() => {
      try {
        var p = fn();
        if (prev) Promise.resolve(p).catch(() => {
        });
      } catch (error) {
        p = Promise.reject(error);
      }
      var r2 = () => p;
      promise = prev?.then(r2, r2) ?? Promise.resolve(p);
      prev = promise;
      var batch = (
current_batch
      );
      var pending = boundary.pending;
      if (should_suspend) {
        boundary.update_pending_count(1);
        if (!pending) batch.increment();
      }
      const handler = (value, error = void 0) => {
        prev = null;
        if (!pending) batch.activate();
        if (error) {
          if (error !== STALE_REACTION) {
            signal.f |= ERROR_VALUE;
            internal_set(signal, error);
          }
        } else {
          if ((signal.f & ERROR_VALUE) !== 0) {
            signal.f ^= ERROR_VALUE;
          }
          internal_set(signal, value);
        }
        if (should_suspend) {
          boundary.update_pending_count(-1);
          if (!pending) batch.decrement();
        }
        unset_context();
      };
      promise.then(handler, (e) => handler(null, e || "unknown"));
      if (batch) {
        return () => {
          queueMicrotask(() => batch.neuter());
        };
      }
    });
    return new Promise((fulfil) => {
      function next(p) {
        function go() {
          if (p === promise) {
            fulfil(signal);
          } else {
            next(promise);
          }
        }
        p.then(go, go);
      }
      next(promise);
    });
  }
function user_derived(fn) {
    const d = derived(fn);
    push_reaction_value(d);
    return d;
  }
function derived_safe_equal(fn) {
    const signal = derived(fn);
    signal.equals = safe_equals;
    return signal;
  }
  function destroy_derived_effects(derived2) {
    var effects = derived2.effects;
    if (effects !== null) {
      derived2.effects = null;
      for (var i = 0; i < effects.length; i += 1) {
        destroy_effect(
effects[i]
        );
      }
    }
  }
  function get_derived_parent_effect(derived2) {
    var parent = derived2.parent;
    while (parent !== null) {
      if ((parent.f & DERIVED) === 0) {
        return (
parent
        );
      }
      parent = parent.parent;
    }
    return null;
  }
  function execute_derived(derived2) {
    var value;
    var prev_active_effect = active_effect;
    set_active_effect(get_derived_parent_effect(derived2));
    {
      try {
        destroy_derived_effects(derived2);
        value = update_reaction(derived2);
      } finally {
        set_active_effect(prev_active_effect);
      }
    }
    return value;
  }
  function update_derived(derived2) {
    var value = execute_derived(derived2);
    if (!derived2.equals(value)) {
      derived2.v = value;
      derived2.wv = increment_write_version();
    }
    if (is_destroying_effect) {
      return;
    }
    {
      var status = (skip_reaction || (derived2.f & UNOWNED) !== 0) && derived2.deps !== null ? MAYBE_DIRTY : CLEAN;
      set_signal_status(derived2, status);
    }
  }
  function flatten(sync, async, fn) {
    const d = is_runes() ? derived : derived_safe_equal;
    if (async.length === 0) {
      fn(sync.map(d));
      return;
    }
    var batch = current_batch;
    var parent = (
active_effect
    );
    var restore = capture();
    var boundary = get_pending_boundary();
    Promise.all(async.map((expression) => async_derived(expression))).then((result) => {
      batch?.activate();
      restore();
      try {
        fn([...sync.map(d), ...result]);
      } catch (error) {
        if ((parent.f & DESTROYED) === 0) {
          invoke_error_boundary(error, parent);
        }
      }
      batch?.deactivate();
      unset_context();
    }).catch((error) => {
      boundary.error(error);
    });
  }
  function capture() {
    var previous_effect = active_effect;
    var previous_reaction = active_reaction;
    var previous_component_context = component_context;
    var previous_batch2 = current_batch;
    return function restore() {
      set_active_effect(previous_effect);
      set_active_reaction(previous_reaction);
      set_component_context(previous_component_context);
      previous_batch2?.activate();
    };
  }
  function unset_context() {
    set_active_effect(null);
    set_active_reaction(null);
    set_component_context(null);
  }
  const batches = new Set();
  let current_batch = null;
  let previous_batch = null;
  let effect_pending_updates = new Set();
  let tasks = [];
  function dequeue() {
    const task = (
tasks.shift()
    );
    if (tasks.length > 0) {
      queueMicrotask(dequeue);
    }
    task();
  }
  let queued_root_effects = [];
  let last_scheduled_effect = null;
  let is_flushing = false;
  let is_flushing_sync = false;
  class Batch {
current = new Map();
#previous = new Map();
#callbacks = new Set();
#pending = 0;
#deferred = null;
#neutered = false;
#async_effects = [];
#boundary_async_effects = [];
#render_effects = [];
#effects = [];
#block_effects = [];
#dirty_effects = [];
#maybe_dirty_effects = [];
skipped_effects = new Set();
process(root_effects) {
      queued_root_effects = [];
      previous_batch = null;
      for (const root2 of root_effects) {
        this.#traverse_effect_tree(root2);
      }
      if (this.#async_effects.length === 0 && this.#pending === 0) {
        this.#commit();
        var render_effects = this.#render_effects;
        var effects = this.#effects;
        this.#render_effects = [];
        this.#effects = [];
        this.#block_effects = [];
        previous_batch = current_batch;
        current_batch = null;
        flush_queued_effects(render_effects);
        flush_queued_effects(effects);
        if (current_batch === null) {
          current_batch = this;
        } else {
          batches.delete(this);
        }
        this.#deferred?.resolve();
      } else {
        this.#defer_effects(this.#render_effects);
        this.#defer_effects(this.#effects);
        this.#defer_effects(this.#block_effects);
      }
      for (const effect2 of this.#async_effects) {
        update_effect(effect2);
      }
      for (const effect2 of this.#boundary_async_effects) {
        update_effect(effect2);
      }
      this.#async_effects = [];
      this.#boundary_async_effects = [];
    }
#traverse_effect_tree(root2) {
      root2.f ^= CLEAN;
      var effect2 = root2.first;
      while (effect2 !== null) {
        var flags = effect2.f;
        var is_branch = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0;
        var is_skippable_branch = is_branch && (flags & CLEAN) !== 0;
        var skip = is_skippable_branch || (flags & INERT) !== 0 || this.skipped_effects.has(effect2);
        if (!skip && effect2.fn !== null) {
          if (is_branch) {
            effect2.f ^= CLEAN;
          } else if ((flags & EFFECT) !== 0) {
            this.#effects.push(effect2);
          } else if ((flags & CLEAN) === 0) {
            if ((flags & ASYNC) !== 0) {
              var effects = effect2.b?.pending ? this.#boundary_async_effects : this.#async_effects;
              effects.push(effect2);
            } else if (is_dirty(effect2)) {
              if ((effect2.f & BLOCK_EFFECT) !== 0) this.#block_effects.push(effect2);
              update_effect(effect2);
            }
          }
          var child2 = effect2.first;
          if (child2 !== null) {
            effect2 = child2;
            continue;
          }
        }
        var parent = effect2.parent;
        effect2 = effect2.next;
        while (effect2 === null && parent !== null) {
          effect2 = parent.next;
          parent = parent.parent;
        }
      }
    }
#defer_effects(effects) {
      for (const e of effects) {
        const target = (e.f & DIRTY) !== 0 ? this.#dirty_effects : this.#maybe_dirty_effects;
        target.push(e);
        set_signal_status(e, CLEAN);
      }
      effects.length = 0;
    }
capture(source2, value) {
      if (!this.#previous.has(source2)) {
        this.#previous.set(source2, value);
      }
      this.current.set(source2, source2.v);
    }
    activate() {
      current_batch = this;
    }
    deactivate() {
      current_batch = null;
      previous_batch = null;
      for (const update of effect_pending_updates) {
        effect_pending_updates.delete(update);
        update();
        if (current_batch !== null) {
          break;
        }
      }
    }
    neuter() {
      this.#neutered = true;
    }
    flush() {
      if (queued_root_effects.length > 0) {
        flush_effects();
      } else {
        this.#commit();
      }
      if (current_batch !== this) {
        return;
      }
      if (this.#pending === 0) {
        batches.delete(this);
      }
      this.deactivate();
    }
#commit() {
      if (!this.#neutered) {
        for (const fn of this.#callbacks) {
          fn();
        }
      }
      this.#callbacks.clear();
    }
    increment() {
      this.#pending += 1;
    }
    decrement() {
      this.#pending -= 1;
      if (this.#pending === 0) {
        for (const e of this.#dirty_effects) {
          set_signal_status(e, DIRTY);
          schedule_effect(e);
        }
        for (const e of this.#maybe_dirty_effects) {
          set_signal_status(e, MAYBE_DIRTY);
          schedule_effect(e);
        }
        this.#render_effects = [];
        this.#effects = [];
        this.flush();
      } else {
        this.deactivate();
      }
    }
add_callback(fn) {
      this.#callbacks.add(fn);
    }
    settled() {
      return (this.#deferred ??= deferred()).promise;
    }
    static ensure() {
      if (current_batch === null) {
        const batch = current_batch = new Batch();
        batches.add(current_batch);
        if (!is_flushing_sync) {
          Batch.enqueue(() => {
            if (current_batch !== batch) {
              return;
            }
            batch.flush();
          });
        }
      }
      return current_batch;
    }
static enqueue(task) {
      if (tasks.length === 0) {
        queueMicrotask(dequeue);
      }
      tasks.unshift(task);
    }
  }
  function flushSync(fn) {
    var was_flushing_sync = is_flushing_sync;
    is_flushing_sync = true;
    try {
      var result;
      if (fn) ;
      while (true) {
        flush_tasks();
        if (queued_root_effects.length === 0) {
          current_batch?.flush();
          if (queued_root_effects.length === 0) {
            last_scheduled_effect = null;
            return (
result
            );
          }
        }
        flush_effects();
      }
    } finally {
      is_flushing_sync = was_flushing_sync;
    }
  }
  function flush_effects() {
    var was_updating_effect = is_updating_effect;
    is_flushing = true;
    try {
      var flush_count = 0;
      set_is_updating_effect(true);
      while (queued_root_effects.length > 0) {
        var batch = Batch.ensure();
        if (flush_count++ > 1e3) {
          var updates, entry;
          if (DEV) ;
          infinite_loop_guard();
        }
        batch.process(queued_root_effects);
        old_values.clear();
      }
    } finally {
      is_flushing = false;
      set_is_updating_effect(was_updating_effect);
      last_scheduled_effect = null;
    }
  }
  function infinite_loop_guard() {
    try {
      effect_update_depth_exceeded();
    } catch (error) {
      invoke_error_boundary(error, last_scheduled_effect);
    }
  }
  let eager_block_effects = null;
  function flush_queued_effects(effects) {
    var length = effects.length;
    if (length === 0) return;
    var i = 0;
    while (i < length) {
      var effect2 = effects[i++];
      if ((effect2.f & (DESTROYED | INERT)) === 0 && is_dirty(effect2)) {
        eager_block_effects = [];
        update_effect(effect2);
        if (effect2.deps === null && effect2.first === null && effect2.nodes_start === null) {
          if (effect2.teardown === null && effect2.ac === null) {
            unlink_effect(effect2);
          } else {
            effect2.fn = null;
          }
        }
        if (eager_block_effects?.length > 0) {
          old_values.clear();
          for (const e of eager_block_effects) {
            update_effect(e);
          }
          eager_block_effects = [];
        }
      }
    }
    eager_block_effects = null;
  }
  function schedule_effect(signal) {
    var effect2 = last_scheduled_effect = signal;
    while (effect2.parent !== null) {
      effect2 = effect2.parent;
      var flags = effect2.f;
      if (is_flushing && effect2 === active_effect && (flags & BLOCK_EFFECT) !== 0) {
        return;
      }
      if ((flags & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {
        if ((flags & CLEAN) === 0) return;
        effect2.f ^= CLEAN;
      }
    }
    queued_root_effects.push(effect2);
  }
  const old_values = new Map();
  function source(v, stack) {
    var signal = {
      f: 0,
v,
      reactions: null,
      equals,
      rv: 0,
      wv: 0
    };
    return signal;
  }
function state$1(v, stack) {
    const s = source(v);
    push_reaction_value(s);
    return s;
  }
function mutable_source(initial_value, immutable = false, trackable = true) {
    const s = source(initial_value);
    if (!immutable) {
      s.equals = safe_equals;
    }
    if (legacy_mode_flag && trackable && component_context !== null && component_context.l !== null) {
      (component_context.l.s ??= []).push(s);
    }
    return s;
  }
  function set(source2, value, should_proxy = false) {
    if (active_reaction !== null &&

(!untracking || (active_reaction.f & INSPECT_EFFECT) !== 0) && is_runes() && (active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | INSPECT_EFFECT)) !== 0 && !current_sources?.includes(source2)) {
      state_unsafe_mutation();
    }
    let new_value = should_proxy ? proxy(value) : value;
    return internal_set(source2, new_value);
  }
  function internal_set(source2, value) {
    if (!source2.equals(value)) {
      var old_value = source2.v;
      if (is_destroying_effect) {
        old_values.set(source2, value);
      } else {
        old_values.set(source2, old_value);
      }
      source2.v = value;
      var batch = Batch.ensure();
      batch.capture(source2, old_value);
      if ((source2.f & DERIVED) !== 0) {
        if ((source2.f & DIRTY) !== 0) {
          execute_derived(
source2
          );
        }
        set_signal_status(source2, (source2.f & UNOWNED) === 0 ? CLEAN : MAYBE_DIRTY);
      }
      source2.wv = increment_write_version();
      mark_reactions(source2, DIRTY);
      if (is_runes() && active_effect !== null && (active_effect.f & CLEAN) !== 0 && (active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0) {
        if (untracked_writes === null) {
          set_untracked_writes([source2]);
        } else {
          untracked_writes.push(source2);
        }
      }
    }
    return value;
  }
  function increment(source2) {
    set(source2, source2.v + 1);
  }
  function mark_reactions(signal, status) {
    var reactions = signal.reactions;
    if (reactions === null) return;
    var runes = is_runes();
    var length = reactions.length;
    for (var i = 0; i < length; i++) {
      var reaction = reactions[i];
      var flags = reaction.f;
      if (!runes && reaction === active_effect) continue;
      var not_dirty = (flags & DIRTY) === 0;
      if (not_dirty) {
        set_signal_status(reaction, status);
      }
      if ((flags & DERIVED) !== 0) {
        mark_reactions(
reaction,
          MAYBE_DIRTY
        );
      } else if (not_dirty) {
        if ((flags & BLOCK_EFFECT) !== 0) {
          if (eager_block_effects !== null) {
            eager_block_effects.push(
reaction
            );
          }
        }
        schedule_effect(
reaction
        );
      }
    }
  }
  function proxy(value) {
    if (typeof value !== "object" || value === null || STATE_SYMBOL in value) {
      return value;
    }
    const prototype = get_prototype_of(value);
    if (prototype !== object_prototype && prototype !== array_prototype) {
      return value;
    }
    var sources = new Map();
    var is_proxied_array = is_array(value);
    var version = state$1(0);
    var parent_version = update_version;
    var with_parent = (fn) => {
      if (update_version === parent_version) {
        return fn();
      }
      var reaction = active_reaction;
      var version2 = update_version;
      set_active_reaction(null);
      set_update_version(parent_version);
      var result = fn();
      set_active_reaction(reaction);
      set_update_version(version2);
      return result;
    };
    if (is_proxied_array) {
      sources.set("length", state$1(
value.length
      ));
    }
    return new Proxy(
value,
      {
        defineProperty(_, prop2, descriptor) {
          if (!("value" in descriptor) || descriptor.configurable === false || descriptor.enumerable === false || descriptor.writable === false) {
            state_descriptors_fixed();
          }
          var s = sources.get(prop2);
          if (s === void 0) {
            s = with_parent(() => {
              var s2 = state$1(descriptor.value);
              sources.set(prop2, s2);
              return s2;
            });
          } else {
            set(s, descriptor.value, true);
          }
          return true;
        },
        deleteProperty(target, prop2) {
          var s = sources.get(prop2);
          if (s === void 0) {
            if (prop2 in target) {
              const s2 = with_parent(() => state$1(UNINITIALIZED));
              sources.set(prop2, s2);
              increment(version);
            }
          } else {
            set(s, UNINITIALIZED);
            increment(version);
          }
          return true;
        },
        get(target, prop2, receiver) {
          if (prop2 === STATE_SYMBOL) {
            return value;
          }
          var s = sources.get(prop2);
          var exists = prop2 in target;
          if (s === void 0 && (!exists || get_descriptor(target, prop2)?.writable)) {
            s = with_parent(() => {
              var p = proxy(exists ? target[prop2] : UNINITIALIZED);
              var s2 = state$1(p);
              return s2;
            });
            sources.set(prop2, s);
          }
          if (s !== void 0) {
            var v = get(s);
            return v === UNINITIALIZED ? void 0 : v;
          }
          return Reflect.get(target, prop2, receiver);
        },
        getOwnPropertyDescriptor(target, prop2) {
          var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2);
          if (descriptor && "value" in descriptor) {
            var s = sources.get(prop2);
            if (s) descriptor.value = get(s);
          } else if (descriptor === void 0) {
            var source2 = sources.get(prop2);
            var value2 = source2?.v;
            if (source2 !== void 0 && value2 !== UNINITIALIZED) {
              return {
                enumerable: true,
                configurable: true,
                value: value2,
                writable: true
              };
            }
          }
          return descriptor;
        },
        has(target, prop2) {
          if (prop2 === STATE_SYMBOL) {
            return true;
          }
          var s = sources.get(prop2);
          var has = s !== void 0 && s.v !== UNINITIALIZED || Reflect.has(target, prop2);
          if (s !== void 0 || active_effect !== null && (!has || get_descriptor(target, prop2)?.writable)) {
            if (s === void 0) {
              s = with_parent(() => {
                var p = has ? proxy(target[prop2]) : UNINITIALIZED;
                var s2 = state$1(p);
                return s2;
              });
              sources.set(prop2, s);
            }
            var value2 = get(s);
            if (value2 === UNINITIALIZED) {
              return false;
            }
          }
          return has;
        },
        set(target, prop2, value2, receiver) {
          var s = sources.get(prop2);
          var has = prop2 in target;
          if (is_proxied_array && prop2 === "length") {
            for (var i = value2; i <
s.v; i += 1) {
              var other_s = sources.get(i + "");
              if (other_s !== void 0) {
                set(other_s, UNINITIALIZED);
              } else if (i in target) {
                other_s = with_parent(() => state$1(UNINITIALIZED));
                sources.set(i + "", other_s);
              }
            }
          }
          if (s === void 0) {
            if (!has || get_descriptor(target, prop2)?.writable) {
              s = with_parent(() => state$1(void 0));
              set(s, proxy(value2));
              sources.set(prop2, s);
            }
          } else {
            has = s.v !== UNINITIALIZED;
            var p = with_parent(() => proxy(value2));
            set(s, p);
          }
          var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2);
          if (descriptor?.set) {
            descriptor.set.call(receiver, value2);
          }
          if (!has) {
            if (is_proxied_array && typeof prop2 === "string") {
              var ls = (
sources.get("length")
              );
              var n = Number(prop2);
              if (Number.isInteger(n) && n >= ls.v) {
                set(ls, n + 1);
              }
            }
            increment(version);
          }
          return true;
        },
        ownKeys(target) {
          get(version);
          var own_keys = Reflect.ownKeys(target).filter((key2) => {
            var source3 = sources.get(key2);
            return source3 === void 0 || source3.v !== UNINITIALIZED;
          });
          for (var [key, source2] of sources) {
            if (source2.v !== UNINITIALIZED && !(key in target)) {
              own_keys.push(key);
            }
          }
          return own_keys;
        },
        setPrototypeOf() {
          state_prototype_fixed();
        }
      }
    );
  }
  var $window;
  var $document;
  var is_firefox;
  var first_child_getter;
  var next_sibling_getter;
  function init_operations() {
    if ($window !== void 0) {
      return;
    }
    $window = window;
    $document = document;
    is_firefox = /Firefox/.test(navigator.userAgent);
    var element_prototype = Element.prototype;
    var node_prototype = Node.prototype;
    var text_prototype = Text.prototype;
    first_child_getter = get_descriptor(node_prototype, "firstChild").get;
    next_sibling_getter = get_descriptor(node_prototype, "nextSibling").get;
    if (is_extensible(element_prototype)) {
      element_prototype.__click = void 0;
      element_prototype.__className = void 0;
      element_prototype.__attributes = null;
      element_prototype.__style = void 0;
      element_prototype.__e = void 0;
    }
    if (is_extensible(text_prototype)) {
      text_prototype.__t = void 0;
    }
  }
  function create_text(value = "") {
    return document.createTextNode(value);
  }
function get_first_child(node) {
    return first_child_getter.call(node);
  }
function get_next_sibling(node) {
    return next_sibling_getter.call(node);
  }
  function child(node, is_text) {
    {
      return get_first_child(node);
    }
  }
  function first_child(fragment, is_text) {
    {
      var first = (

get_first_child(
fragment
        )
      );
      if (first instanceof Comment && first.data === "") return get_next_sibling(first);
      return first;
    }
  }
  function sibling(node, count = 1, is_text = false) {
    let next_sibling = node;
    while (count--) {
      next_sibling =

get_next_sibling(next_sibling);
    }
    {
      return next_sibling;
    }
  }
  function clear_text_content(node) {
    node.textContent = "";
  }
  let listening_to_form_reset = false;
  function add_form_reset_listener() {
    if (!listening_to_form_reset) {
      listening_to_form_reset = true;
      document.addEventListener(
        "reset",
        (evt) => {
          Promise.resolve().then(() => {
            if (!evt.defaultPrevented) {
              for (
                const e of
evt.target.elements
              ) {
                e.__on_r?.();
              }
            }
          });
        },
{ capture: true }
      );
    }
  }
  function without_reactive_context(fn) {
    var previous_reaction = active_reaction;
    var previous_effect = active_effect;
    set_active_reaction(null);
    set_active_effect(null);
    try {
      return fn();
    } finally {
      set_active_reaction(previous_reaction);
      set_active_effect(previous_effect);
    }
  }
  function listen_to_event_and_reset_event(element, event2, handler, on_reset = handler) {
    element.addEventListener(event2, () => without_reactive_context(handler));
    const prev = element.__on_r;
    if (prev) {
      element.__on_r = () => {
        prev();
        on_reset(true);
      };
    } else {
      element.__on_r = () => on_reset(true);
    }
    add_form_reset_listener();
  }
  function validate_effect(rune) {
    if (active_effect === null && active_reaction === null) {
      effect_orphan();
    }
    if (active_reaction !== null && (active_reaction.f & UNOWNED) !== 0 && active_effect === null) {
      effect_in_unowned_derived();
    }
    if (is_destroying_effect) {
      effect_in_teardown();
    }
  }
  function push_effect(effect2, parent_effect) {
    var parent_last = parent_effect.last;
    if (parent_last === null) {
      parent_effect.last = parent_effect.first = effect2;
    } else {
      parent_last.next = effect2;
      effect2.prev = parent_last;
      parent_effect.last = effect2;
    }
  }
  function create_effect(type, fn, sync, push2 = true) {
    var parent = active_effect;
    if (parent !== null && (parent.f & INERT) !== 0) {
      type |= INERT;
    }
    var effect2 = {
      ctx: component_context,
      deps: null,
      nodes_start: null,
      nodes_end: null,
      f: type | DIRTY,
      first: null,
      fn,
      last: null,
      next: null,
      parent,
      b: parent && parent.b,
      prev: null,
      teardown: null,
      transitions: null,
      wv: 0,
      ac: null
    };
    if (sync) {
      try {
        update_effect(effect2);
        effect2.f |= EFFECT_RAN;
      } catch (e2) {
        destroy_effect(effect2);
        throw e2;
      }
    } else if (fn !== null) {
      schedule_effect(effect2);
    }
    if (push2) {
      var e = effect2;
      if (sync && e.deps === null && e.teardown === null && e.nodes_start === null && e.first === e.last &&
(e.f & EFFECT_PRESERVED) === 0) {
        e = e.first;
      }
      if (e !== null) {
        e.parent = parent;
        if (parent !== null) {
          push_effect(e, parent);
        }
        if (active_reaction !== null && (active_reaction.f & DERIVED) !== 0 && (type & ROOT_EFFECT) === 0) {
          var derived2 = (
active_reaction
          );
          (derived2.effects ??= []).push(e);
        }
      }
    }
    return effect2;
  }
  function teardown(fn) {
    const effect2 = create_effect(RENDER_EFFECT, null, false);
    set_signal_status(effect2, CLEAN);
    effect2.teardown = fn;
    return effect2;
  }
  function user_effect(fn) {
    validate_effect();
    var flags = (
active_effect.f
    );
    var defer = !active_reaction && (flags & BRANCH_EFFECT) !== 0 && (flags & EFFECT_RAN) === 0;
    if (defer) {
      var context = (
component_context
      );
      (context.e ??= []).push(fn);
    } else {
      return create_user_effect(fn);
    }
  }
  function create_user_effect(fn) {
    return create_effect(EFFECT | USER_EFFECT, fn, false);
  }
  function user_pre_effect(fn) {
    validate_effect();
    return create_effect(RENDER_EFFECT | USER_EFFECT, fn, true);
  }
  function component_root(fn) {
    Batch.ensure();
    const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn, true);
    return (options = {}) => {
      return new Promise((fulfil) => {
        if (options.outro) {
          pause_effect(effect2, () => {
            destroy_effect(effect2);
            fulfil(void 0);
          });
        } else {
          destroy_effect(effect2);
          fulfil(void 0);
        }
      });
    };
  }
  function effect(fn) {
    return create_effect(EFFECT, fn, false);
  }
  function async_effect(fn) {
    return create_effect(ASYNC | EFFECT_PRESERVED, fn, true);
  }
  function render_effect(fn, flags = 0) {
    return create_effect(RENDER_EFFECT | flags, fn, true);
  }
  function template_effect(fn, sync = [], async = []) {
    flatten(sync, async, (values) => {
      create_effect(RENDER_EFFECT, () => fn(...values.map(get)), true);
    });
  }
  function block(fn, flags = 0) {
    var effect2 = create_effect(BLOCK_EFFECT | flags, fn, true);
    return effect2;
  }
  function branch(fn, push2 = true) {
    return create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn, true, push2);
  }
  function execute_effect_teardown(effect2) {
    var teardown2 = effect2.teardown;
    if (teardown2 !== null) {
      const previously_destroying_effect = is_destroying_effect;
      const previous_reaction = active_reaction;
      set_is_destroying_effect(true);
      set_active_reaction(null);
      try {
        teardown2.call(null);
      } finally {
        set_is_destroying_effect(previously_destroying_effect);
        set_active_reaction(previous_reaction);
      }
    }
  }
  function destroy_effect_children(signal, remove_dom = false) {
    var effect2 = signal.first;
    signal.first = signal.last = null;
    while (effect2 !== null) {
      const controller = effect2.ac;
      if (controller !== null) {
        without_reactive_context(() => {
          controller.abort(STALE_REACTION);
        });
      }
      var next = effect2.next;
      if ((effect2.f & ROOT_EFFECT) !== 0) {
        effect2.parent = null;
      } else {
        destroy_effect(effect2, remove_dom);
      }
      effect2 = next;
    }
  }
  function destroy_block_effect_children(signal) {
    var effect2 = signal.first;
    while (effect2 !== null) {
      var next = effect2.next;
      if ((effect2.f & BRANCH_EFFECT) === 0) {
        destroy_effect(effect2);
      }
      effect2 = next;
    }
  }
  function destroy_effect(effect2, remove_dom = true) {
    var removed = false;
    if ((remove_dom || (effect2.f & HEAD_EFFECT) !== 0) && effect2.nodes_start !== null && effect2.nodes_end !== null) {
      remove_effect_dom(
        effect2.nodes_start,
effect2.nodes_end
      );
      removed = true;
    }
    destroy_effect_children(effect2, remove_dom && !removed);
    remove_reactions(effect2, 0);
    set_signal_status(effect2, DESTROYED);
    var transitions = effect2.transitions;
    if (transitions !== null) {
      for (const transition2 of transitions) {
        transition2.stop();
      }
    }
    execute_effect_teardown(effect2);
    var parent = effect2.parent;
    if (parent !== null && parent.first !== null) {
      unlink_effect(effect2);
    }
    effect2.next = effect2.prev = effect2.teardown = effect2.ctx = effect2.deps = effect2.fn = effect2.nodes_start = effect2.nodes_end = effect2.ac = null;
  }
  function remove_effect_dom(node, end) {
    while (node !== null) {
      var next = node === end ? null : (

get_next_sibling(node)
      );
      node.remove();
      node = next;
    }
  }
  function unlink_effect(effect2) {
    var parent = effect2.parent;
    var prev = effect2.prev;
    var next = effect2.next;
    if (prev !== null) prev.next = next;
    if (next !== null) next.prev = prev;
    if (parent !== null) {
      if (parent.first === effect2) parent.first = next;
      if (parent.last === effect2) parent.last = prev;
    }
  }
  function pause_effect(effect2, callback) {
    var transitions = [];
    pause_children(effect2, transitions, true);
    run_out_transitions(transitions, () => {
      destroy_effect(effect2);
      if (callback) callback();
    });
  }
  function run_out_transitions(transitions, fn) {
    var remaining = transitions.length;
    if (remaining > 0) {
      var check = () => --remaining || fn();
      for (var transition2 of transitions) {
        transition2.out(check);
      }
    } else {
      fn();
    }
  }
  function pause_children(effect2, transitions, local) {
    if ((effect2.f & INERT) !== 0) return;
    effect2.f ^= INERT;
    if (effect2.transitions !== null) {
      for (const transition2 of effect2.transitions) {
        if (transition2.is_global || local) {
          transitions.push(transition2);
        }
      }
    }
    var child2 = effect2.first;
    while (child2 !== null) {
      var sibling2 = child2.next;
      var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || (child2.f & BRANCH_EFFECT) !== 0;
      pause_children(child2, transitions, transparent ? local : false);
      child2 = sibling2;
    }
  }
  function resume_effect(effect2) {
    resume_children(effect2, true);
  }
  function resume_children(effect2, local) {
    if ((effect2.f & INERT) === 0) return;
    effect2.f ^= INERT;
    if ((effect2.f & CLEAN) === 0) {
      set_signal_status(effect2, DIRTY);
      schedule_effect(effect2);
    }
    var child2 = effect2.first;
    while (child2 !== null) {
      var sibling2 = child2.next;
      var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || (child2.f & BRANCH_EFFECT) !== 0;
      resume_children(child2, transparent ? local : false);
      child2 = sibling2;
    }
    if (effect2.transitions !== null) {
      for (const transition2 of effect2.transitions) {
        if (transition2.is_global || local) {
          transition2.in();
        }
      }
    }
  }
  let is_updating_effect = false;
  function set_is_updating_effect(value) {
    is_updating_effect = value;
  }
  let is_destroying_effect = false;
  function set_is_destroying_effect(value) {
    is_destroying_effect = value;
  }
  let active_reaction = null;
  let untracking = false;
  function set_active_reaction(reaction) {
    active_reaction = reaction;
  }
  let active_effect = null;
  function set_active_effect(effect2) {
    active_effect = effect2;
  }
  let current_sources = null;
  function push_reaction_value(value) {
    if (active_reaction !== null && true) {
      if (current_sources === null) {
        current_sources = [value];
      } else {
        current_sources.push(value);
      }
    }
  }
  let new_deps = null;
  let skipped_deps = 0;
  let untracked_writes = null;
  function set_untracked_writes(value) {
    untracked_writes = value;
  }
  let write_version = 1;
  let read_version = 0;
  let update_version = read_version;
  function set_update_version(value) {
    update_version = value;
  }
  let skip_reaction = false;
  function increment_write_version() {
    return ++write_version;
  }
  function is_dirty(reaction) {
    var flags = reaction.f;
    if ((flags & DIRTY) !== 0) {
      return true;
    }
    if ((flags & MAYBE_DIRTY) !== 0) {
      var dependencies = reaction.deps;
      var is_unowned = (flags & UNOWNED) !== 0;
      if (dependencies !== null) {
        var i;
        var dependency;
        var is_disconnected = (flags & DISCONNECTED) !== 0;
        var is_unowned_connected = is_unowned && active_effect !== null && !skip_reaction;
        var length = dependencies.length;
        if ((is_disconnected || is_unowned_connected) && (active_effect === null || (active_effect.f & DESTROYED) === 0)) {
          var derived2 = (
reaction
          );
          var parent = derived2.parent;
          for (i = 0; i < length; i++) {
            dependency = dependencies[i];
            if (is_disconnected || !dependency?.reactions?.includes(derived2)) {
              (dependency.reactions ??= []).push(derived2);
            }
          }
          if (is_disconnected) {
            derived2.f ^= DISCONNECTED;
          }
          if (is_unowned_connected && parent !== null && (parent.f & UNOWNED) === 0) {
            derived2.f ^= UNOWNED;
          }
        }
        for (i = 0; i < length; i++) {
          dependency = dependencies[i];
          if (is_dirty(
dependency
          )) {
            update_derived(
dependency
            );
          }
          if (dependency.wv > reaction.wv) {
            return true;
          }
        }
      }
      if (!is_unowned || active_effect !== null && !skip_reaction) {
        set_signal_status(reaction, CLEAN);
      }
    }
    return false;
  }
  function schedule_possible_effect_self_invalidation(signal, effect2, root2 = true) {
    var reactions = signal.reactions;
    if (reactions === null) return;
    if (current_sources?.includes(signal)) {
      return;
    }
    for (var i = 0; i < reactions.length; i++) {
      var reaction = reactions[i];
      if ((reaction.f & DERIVED) !== 0) {
        schedule_possible_effect_self_invalidation(
reaction,
          effect2,
          false
        );
      } else if (effect2 === reaction) {
        if (root2) {
          set_signal_status(reaction, DIRTY);
        } else if ((reaction.f & CLEAN) !== 0) {
          set_signal_status(reaction, MAYBE_DIRTY);
        }
        schedule_effect(
reaction
        );
      }
    }
  }
  function update_reaction(reaction) {
    var previous_deps = new_deps;
    var previous_skipped_deps = skipped_deps;
    var previous_untracked_writes = untracked_writes;
    var previous_reaction = active_reaction;
    var previous_skip_reaction = skip_reaction;
    var previous_sources = current_sources;
    var previous_component_context = component_context;
    var previous_untracking = untracking;
    var previous_update_version = update_version;
    var flags = reaction.f;
    new_deps =
null;
    skipped_deps = 0;
    untracked_writes = null;
    skip_reaction = (flags & UNOWNED) !== 0 && (untracking || !is_updating_effect || active_reaction === null);
    active_reaction = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null;
    current_sources = null;
    set_component_context(reaction.ctx);
    untracking = false;
    update_version = ++read_version;
    if (reaction.ac !== null) {
      without_reactive_context(() => {
        reaction.ac.abort(STALE_REACTION);
      });
      reaction.ac = null;
    }
    try {
      reaction.f |= REACTION_IS_UPDATING;
      var fn = (
reaction.fn
      );
      var result = fn();
      var deps = reaction.deps;
      if (new_deps !== null) {
        var i;
        remove_reactions(reaction, skipped_deps);
        if (deps !== null && skipped_deps > 0) {
          deps.length = skipped_deps + new_deps.length;
          for (i = 0; i < new_deps.length; i++) {
            deps[skipped_deps + i] = new_deps[i];
          }
        } else {
          reaction.deps = deps = new_deps;
        }
        if (!skip_reaction ||
(flags & DERIVED) !== 0 &&
reaction.reactions !== null) {
          for (i = skipped_deps; i < deps.length; i++) {
            (deps[i].reactions ??= []).push(reaction);
          }
        }
      } else if (deps !== null && skipped_deps < deps.length) {
        remove_reactions(reaction, skipped_deps);
        deps.length = skipped_deps;
      }
      if (is_runes() && untracked_writes !== null && !untracking && deps !== null && (reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0) {
        for (i = 0; i <
untracked_writes.length; i++) {
          schedule_possible_effect_self_invalidation(
            untracked_writes[i],
reaction
          );
        }
      }
      if (previous_reaction !== null && previous_reaction !== reaction) {
        read_version++;
        if (untracked_writes !== null) {
          if (previous_untracked_writes === null) {
            previous_untracked_writes = untracked_writes;
          } else {
            previous_untracked_writes.push(...
untracked_writes);
          }
        }
      }
      if ((reaction.f & ERROR_VALUE) !== 0) {
        reaction.f ^= ERROR_VALUE;
      }
      return result;
    } catch (error) {
      return handle_error(error);
    } finally {
      reaction.f ^= REACTION_IS_UPDATING;
      new_deps = previous_deps;
      skipped_deps = previous_skipped_deps;
      untracked_writes = previous_untracked_writes;
      active_reaction = previous_reaction;
      skip_reaction = previous_skip_reaction;
      current_sources = previous_sources;
      set_component_context(previous_component_context);
      untracking = previous_untracking;
      update_version = previous_update_version;
    }
  }
  function remove_reaction(signal, dependency) {
    let reactions = dependency.reactions;
    if (reactions !== null) {
      var index2 = index_of.call(reactions, signal);
      if (index2 !== -1) {
        var new_length = reactions.length - 1;
        if (new_length === 0) {
          reactions = dependency.reactions = null;
        } else {
          reactions[index2] = reactions[new_length];
          reactions.pop();
        }
      }
    }
    if (reactions === null && (dependency.f & DERIVED) !== 0 &&


(new_deps === null || !new_deps.includes(dependency))) {
      set_signal_status(dependency, MAYBE_DIRTY);
      if ((dependency.f & (UNOWNED | DISCONNECTED)) === 0) {
        dependency.f ^= DISCONNECTED;
      }
      destroy_derived_effects(
dependency
      );
      remove_reactions(
dependency,
        0
      );
    }
  }
  function remove_reactions(signal, start_index) {
    var dependencies = signal.deps;
    if (dependencies === null) return;
    for (var i = start_index; i < dependencies.length; i++) {
      remove_reaction(signal, dependencies[i]);
    }
  }
  function update_effect(effect2) {
    var flags = effect2.f;
    if ((flags & DESTROYED) !== 0) {
      return;
    }
    set_signal_status(effect2, CLEAN);
    var previous_effect = active_effect;
    var was_updating_effect = is_updating_effect;
    active_effect = effect2;
    is_updating_effect = true;
    try {
      if ((flags & BLOCK_EFFECT) !== 0) {
        destroy_block_effect_children(effect2);
      } else {
        destroy_effect_children(effect2);
      }
      execute_effect_teardown(effect2);
      var teardown2 = update_reaction(effect2);
      effect2.teardown = typeof teardown2 === "function" ? teardown2 : null;
      effect2.wv = write_version;
      var dep;
      if (DEV && tracing_mode_flag && (effect2.f & DIRTY) !== 0 && effect2.deps !== null) ;
    } finally {
      is_updating_effect = was_updating_effect;
      active_effect = previous_effect;
    }
  }
  async function tick() {
    await Promise.resolve();
    flushSync();
  }
  function get(signal) {
    var flags = signal.f;
    var is_derived = (flags & DERIVED) !== 0;
    if (active_reaction !== null && !untracking) {
      var destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0;
      if (!destroyed && !current_sources?.includes(signal)) {
        var deps = active_reaction.deps;
        if ((active_reaction.f & REACTION_IS_UPDATING) !== 0) {
          if (signal.rv < read_version) {
            signal.rv = read_version;
            if (new_deps === null && deps !== null && deps[skipped_deps] === signal) {
              skipped_deps++;
            } else if (new_deps === null) {
              new_deps = [signal];
            } else if (!skip_reaction || !new_deps.includes(signal)) {
              new_deps.push(signal);
            }
          }
        } else {
          (active_reaction.deps ??= []).push(signal);
          var reactions = signal.reactions;
          if (reactions === null) {
            signal.reactions = [active_reaction];
          } else if (!reactions.includes(active_reaction)) {
            reactions.push(active_reaction);
          }
        }
      }
    } else if (is_derived &&
signal.deps === null &&
signal.effects === null) {
      var derived2 = (
signal
      );
      var parent = derived2.parent;
      if (parent !== null && (parent.f & UNOWNED) === 0) {
        derived2.f ^= UNOWNED;
      }
    }
    if (is_destroying_effect) {
      if (old_values.has(signal)) {
        return old_values.get(signal);
      }
      if (is_derived) {
        derived2 =
signal;
        var value = derived2.v;
        if ((derived2.f & CLEAN) === 0 && derived2.reactions !== null || depends_on_old_values(derived2)) {
          value = execute_derived(derived2);
        }
        old_values.set(derived2, value);
        return value;
      }
    } else if (is_derived) {
      derived2 =
signal;
      if (is_dirty(derived2)) {
        update_derived(derived2);
      }
    }
    if ((signal.f & ERROR_VALUE) !== 0) {
      throw signal.v;
    }
    return signal.v;
  }
  function depends_on_old_values(derived2) {
    if (derived2.v === UNINITIALIZED) return true;
    if (derived2.deps === null) return false;
    for (const dep of derived2.deps) {
      if (old_values.has(dep)) {
        return true;
      }
      if ((dep.f & DERIVED) !== 0 && depends_on_old_values(
dep
      )) {
        return true;
      }
    }
    return false;
  }
  function untrack(fn) {
    var previous_untracking = untracking;
    try {
      untracking = true;
      return fn();
    } finally {
      untracking = previous_untracking;
    }
  }
  const STATUS_MASK = -7169;
  function set_signal_status(signal, status) {
    signal.f = signal.f & STATUS_MASK | status;
  }
  function deep_read_state(value) {
    if (typeof value !== "object" || !value || value instanceof EventTarget) {
      return;
    }
    if (STATE_SYMBOL in value) {
      deep_read(value);
    } else if (!Array.isArray(value)) {
      for (let key in value) {
        const prop2 = value[key];
        if (typeof prop2 === "object" && prop2 && STATE_SYMBOL in prop2) {
          deep_read(prop2);
        }
      }
    }
  }
  function deep_read(value, visited = new Set()) {
    if (typeof value === "object" && value !== null &&
!(value instanceof EventTarget) && !visited.has(value)) {
      visited.add(value);
      if (value instanceof Date) {
        value.getTime();
      }
      for (let key in value) {
        try {
          deep_read(value[key], visited);
        } catch (e) {
        }
      }
      const proto = get_prototype_of(value);
      if (proto !== Object.prototype && proto !== Array.prototype && proto !== Map.prototype && proto !== Set.prototype && proto !== Date.prototype) {
        const descriptors = get_descriptors(proto);
        for (let key in descriptors) {
          const get2 = descriptors[key].get;
          if (get2) {
            try {
              get2.call(value);
            } catch (e) {
            }
          }
        }
      }
    }
  }
  const PASSIVE_EVENTS = ["touchstart", "touchmove"];
  function is_passive_event(name) {
    return PASSIVE_EVENTS.includes(name);
  }
  const all_registered_events = new Set();
  const root_event_handles = new Set();
  function create_event(event_name, dom, handler, options = {}) {
    function target_handler(event2) {
      if (!options.capture) {
        handle_event_propagation.call(dom, event2);
      }
      if (!event2.cancelBubble) {
        return without_reactive_context(() => {
          return handler?.call(this, event2);
        });
      }
    }
    if (event_name.startsWith("pointer") || event_name.startsWith("touch") || event_name === "wheel") {
      queue_micro_task(() => {
        dom.addEventListener(event_name, target_handler, options);
      });
    } else {
      dom.addEventListener(event_name, target_handler, options);
    }
    return target_handler;
  }
  function on(element, type, handler, options = {}) {
    var target_handler = create_event(type, element, handler, options);
    return () => {
      element.removeEventListener(type, target_handler, options);
    };
  }
  function event(event_name, dom, handler, capture2, passive) {
    var options = { capture: capture2, passive };
    var target_handler = create_event(event_name, dom, handler, options);
    if (dom === document.body ||
dom === window ||
dom === document ||
dom instanceof HTMLMediaElement) {
      teardown(() => {
        dom.removeEventListener(event_name, target_handler, options);
      });
    }
  }
  function delegate(events) {
    for (var i = 0; i < events.length; i++) {
      all_registered_events.add(events[i]);
    }
    for (var fn of root_event_handles) {
      fn(events);
    }
  }
  let last_propagated_event = null;
  function handle_event_propagation(event2) {
    var handler_element = this;
    var owner_document = (
handler_element.ownerDocument
    );
    var event_name = event2.type;
    var path = event2.composedPath?.() || [];
    var current_target = (
path[0] || event2.target
    );
    last_propagated_event = event2;
    var path_idx = 0;
    var handled_at = last_propagated_event === event2 && event2.__root;
    if (handled_at) {
      var at_idx = path.indexOf(handled_at);
      if (at_idx !== -1 && (handler_element === document || handler_element ===
window)) {
        event2.__root = handler_element;
        return;
      }
      var handler_idx = path.indexOf(handler_element);
      if (handler_idx === -1) {
        return;
      }
      if (at_idx <= handler_idx) {
        path_idx = at_idx;
      }
    }
    current_target =
path[path_idx] || event2.target;
    if (current_target === handler_element) return;
    define_property(event2, "currentTarget", {
      configurable: true,
      get() {
        return current_target || owner_document;
      }
    });
    var previous_reaction = active_reaction;
    var previous_effect = active_effect;
    set_active_reaction(null);
    set_active_effect(null);
    try {
      var throw_error;
      var other_errors = [];
      while (current_target !== null) {
        var parent_element = current_target.assignedSlot || current_target.parentNode ||
current_target.host || null;
        try {
          var delegated = current_target["__" + event_name];
          if (delegated != null && (!
current_target.disabled ||

event2.target === current_target)) {
            if (is_array(delegated)) {
              var [fn, ...data2] = delegated;
              fn.apply(current_target, [event2, ...data2]);
            } else {
              delegated.call(current_target, event2);
            }
          }
        } catch (error) {
          if (throw_error) {
            other_errors.push(error);
          } else {
            throw_error = error;
          }
        }
        if (event2.cancelBubble || parent_element === handler_element || parent_element === null) {
          break;
        }
        current_target = parent_element;
      }
      if (throw_error) {
        for (let error of other_errors) {
          queueMicrotask(() => {
            throw error;
          });
        }
        throw throw_error;
      }
    } finally {
      event2.__root = handler_element;
      delete event2.currentTarget;
      set_active_reaction(previous_reaction);
      set_active_effect(previous_effect);
    }
  }
  function head(render_fn) {
    var anchor;
    {
      anchor = document.head.appendChild(create_text());
    }
    try {
      block(() => render_fn(anchor), HEAD_EFFECT);
    } finally {
    }
  }
  function create_fragment_from_html(html2) {
    var elem = document.createElement("template");
    elem.innerHTML = html2.replaceAll("<!>", "<!---->");
    return elem.content;
  }
  function assign_nodes(start, end) {
    var effect2 = (
active_effect
    );
    if (effect2.nodes_start === null) {
      effect2.nodes_start = start;
      effect2.nodes_end = end;
    }
  }
function from_html(content, flags) {
    var is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;
    var use_import_node = (flags & TEMPLATE_USE_IMPORT_NODE) !== 0;
    var node;
    var has_start = !content.startsWith("<!>");
    return () => {
      if (node === void 0) {
        node = create_fragment_from_html(has_start ? content : "<!>" + content);
        if (!is_fragment) node =

get_first_child(node);
      }
      var clone = (
use_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)
      );
      if (is_fragment) {
        var start = (

get_first_child(clone)
        );
        var end = (
clone.lastChild
        );
        assign_nodes(start, end);
      } else {
        assign_nodes(clone, clone);
      }
      return clone;
    };
  }
function from_namespace(content, flags, ns = "svg") {
    var has_start = !content.startsWith("<!>");
    var wrapped = `<${ns}>${has_start ? content : "<!>" + content}</${ns}>`;
    var node;
    return () => {
      if (!node) {
        var fragment = (
create_fragment_from_html(wrapped)
        );
        var root2 = (

get_first_child(fragment)
        );
        {
          node =

get_first_child(root2);
        }
      }
      var clone = (
node.cloneNode(true)
      );
      {
        assign_nodes(clone, clone);
      }
      return clone;
    };
  }
function from_svg(content, flags) {
    return from_namespace(content, flags, "svg");
  }
  function text(value = "") {
    {
      var t = create_text(value + "");
      assign_nodes(t, t);
      return t;
    }
  }
  function comment() {
    var frag = document.createDocumentFragment();
    var start = document.createComment("");
    var anchor = create_text();
    frag.append(start, anchor);
    assign_nodes(start, anchor);
    return frag;
  }
  function append(anchor, dom) {
    if (anchor === null) {
      return;
    }
    anchor.before(
dom
    );
  }
  let should_intro = true;
  function set_text(text2, value) {
    var str = value == null ? "" : typeof value === "object" ? value + "" : value;
    if (str !== (text2.__t ??= text2.nodeValue)) {
      text2.__t = str;
      text2.nodeValue = str + "";
    }
  }
  function mount(component, options) {
    return _mount(component, options);
  }
  const document_listeners = new Map();
  function _mount(Component, { target, anchor, props = {}, events, context, intro = true }) {
    init_operations();
    var registered_events = new Set();
    var event_handle = (events2) => {
      for (var i = 0; i < events2.length; i++) {
        var event_name = events2[i];
        if (registered_events.has(event_name)) continue;
        registered_events.add(event_name);
        var passive = is_passive_event(event_name);
        target.addEventListener(event_name, handle_event_propagation, { passive });
        var n = document_listeners.get(event_name);
        if (n === void 0) {
          document.addEventListener(event_name, handle_event_propagation, { passive });
          document_listeners.set(event_name, 1);
        } else {
          document_listeners.set(event_name, n + 1);
        }
      }
    };
    event_handle(array_from(all_registered_events));
    root_event_handles.add(event_handle);
    var component = void 0;
    var unmount = component_root(() => {
      var anchor_node = anchor ?? target.appendChild(create_text());
      branch(() => {
        if (context) {
          push({});
          var ctx = (
component_context
          );
          ctx.c = context;
        }
        if (events) {
          props.$$events = events;
        }
        should_intro = intro;
        component = Component(anchor_node, props) || {};
        should_intro = true;
        if (context) {
          pop();
        }
      });
      return () => {
        for (var event_name of registered_events) {
          target.removeEventListener(event_name, handle_event_propagation);
          var n = (
document_listeners.get(event_name)
          );
          if (--n === 0) {
            document.removeEventListener(event_name, handle_event_propagation);
            document_listeners.delete(event_name);
          } else {
            document_listeners.set(event_name, n);
          }
        }
        root_event_handles.delete(event_handle);
        if (anchor_node !== anchor) {
          anchor_node.parentNode?.removeChild(anchor_node);
        }
      };
    });
    mounted_components.set(component, unmount);
    return component;
  }
  let mounted_components = new WeakMap();
  const PENDING = 0;
  const THEN = 1;
  const CATCH = 2;
  function await_block(node, get_input, pending_fn, then_fn, catch_fn) {
    var anchor = node;
    var runes = is_runes();
    var active_component_context = component_context;
    var input = UNINITIALIZED;
    var pending_effect;
    var then_effect;
    var catch_effect;
    var input_source = runes ? source(
void 0
    ) : mutable_source(
void 0,
      false,
      false
    );
    var error_source = runes ? source(void 0) : mutable_source(void 0, false, false);
    var resolved = false;
    function update(state2, restore) {
      resolved = true;
      if (restore) {
        set_active_effect(effect2);
        set_active_reaction(effect2);
        set_component_context(active_component_context);
      }
      try {
        if (state2 === PENDING && pending_fn) ;
        if (state2 === THEN && then_fn) {
          if (then_effect) resume_effect(then_effect);
          else then_effect = branch(() => then_fn(anchor, input_source));
        }
        if (state2 === CATCH && catch_fn) ;
        if (state2 !== PENDING && pending_effect) {
          pause_effect(pending_effect, () => pending_effect = null);
        }
        if (state2 !== THEN && then_effect) {
          pause_effect(then_effect, () => then_effect = null);
        }
        if (state2 !== CATCH && catch_effect) {
          pause_effect(catch_effect, () => catch_effect = null);
        }
      } finally {
        if (restore) {
          set_component_context(null);
          set_active_reaction(null);
          set_active_effect(null);
          flushSync();
        }
      }
    }
    var effect2 = block(() => {
      if (input === (input = get_input())) return;
      if (is_promise(input)) {
        var promise = input;
        resolved = false;
        promise.then(
          (value) => {
            if (promise !== input) return;
            internal_set(input_source, value);
            update(THEN, true);
          },
          (error) => {
            if (promise !== input) return;
            internal_set(error_source, error);
            update(CATCH, true);
            {
              throw error_source.v;
            }
          }
        );
        {
          queue_micro_task(() => {
            if (!resolved) update(PENDING, true);
          });
        }
      } else {
        internal_set(input_source, input);
        update(THEN, false);
      }
      return () => input = UNINITIALIZED;
    });
  }
  function if_block(node, fn, elseif = false) {
    var anchor = node;
    var consequent_effect = null;
    var alternate_effect = null;
    var condition = UNINITIALIZED;
    var flags = elseif ? EFFECT_TRANSPARENT : 0;
    var has_branch = false;
    const set_branch = (fn2, flag = true) => {
      has_branch = true;
      update_branch(flag, fn2);
    };
    function commit() {
      var active = condition ? consequent_effect : alternate_effect;
      var inactive = condition ? alternate_effect : consequent_effect;
      if (active) {
        resume_effect(active);
      }
      if (inactive) {
        pause_effect(inactive, () => {
          if (condition) {
            alternate_effect = null;
          } else {
            consequent_effect = null;
          }
        });
      }
    }
    const update_branch = (new_condition, fn2) => {
      if (condition === (condition = new_condition)) return;
      var target = anchor;
      if (condition) {
        consequent_effect ??= fn2 && branch(() => fn2(target));
      } else {
        alternate_effect ??= fn2 && branch(() => fn2(target));
      }
      {
        commit();
      }
    };
    block(() => {
      has_branch = false;
      fn(set_branch);
      if (!has_branch) {
        update_branch(null, null);
      }
    }, flags);
  }
  function index(_, i) {
    return i;
  }
  function pause_effects(state2, items, controlled_anchor) {
    var items_map = state2.items;
    var transitions = [];
    var length = items.length;
    for (var i = 0; i < length; i++) {
      pause_children(items[i].e, transitions, true);
    }
    var is_controlled = length > 0 && transitions.length === 0 && controlled_anchor !== null;
    if (is_controlled) {
      var parent_node = (

controlled_anchor.parentNode
      );
      clear_text_content(parent_node);
      parent_node.append(
controlled_anchor
      );
      items_map.clear();
      link(state2, items[0].prev, items[length - 1].next);
    }
    run_out_transitions(transitions, () => {
      for (var i2 = 0; i2 < length; i2++) {
        var item = items[i2];
        if (!is_controlled) {
          items_map.delete(item.k);
          link(state2, item.prev, item.next);
        }
        destroy_effect(item.e, !is_controlled);
      }
    });
  }
  function each(node, flags, get_collection, get_key, render_fn, fallback_fn = null) {
    var anchor = node;
    var state2 = { flags, items: new Map(), first: null };
    var is_controlled = (flags & EACH_IS_CONTROLLED) !== 0;
    if (is_controlled) {
      var parent_node = (
node
      );
      anchor = parent_node.appendChild(create_text());
    }
    var fallback = null;
    var was_empty = false;
    var offscreen_items = new Map();
    var each_array = derived_safe_equal(() => {
      var collection = get_collection();
      return is_array(collection) ? collection : collection == null ? [] : array_from(collection);
    });
    var array;
    var each_effect;
    function commit() {
      reconcile(
        each_effect,
        array,
        state2,
        offscreen_items,
        anchor,
        render_fn,
        flags,
        get_key,
        get_collection
      );
      if (fallback_fn !== null) {
        if (array.length === 0) {
          if (fallback) {
            resume_effect(fallback);
          } else {
            fallback = branch(() => fallback_fn(anchor));
          }
        } else if (fallback !== null) {
          pause_effect(fallback, () => {
            fallback = null;
          });
        }
      }
    }
    block(() => {
      each_effect ??=
active_effect;
      array =
get(each_array);
      var length = array.length;
      if (was_empty && length === 0) {
        return;
      }
      was_empty = length === 0;
      {
        {
          commit();
        }
      }
      get(each_array);
    });
  }
  function reconcile(each_effect, array, state2, offscreen_items, anchor, render_fn, flags, get_key, get_collection) {
    var is_animated = (flags & EACH_IS_ANIMATED) !== 0;
    var should_update = (flags & (EACH_ITEM_REACTIVE | EACH_INDEX_REACTIVE)) !== 0;
    var length = array.length;
    var items = state2.items;
    var first = state2.first;
    var current = first;
    var seen;
    var prev = null;
    var to_animate;
    var matched = [];
    var stashed = [];
    var value;
    var key;
    var item;
    var i;
    if (is_animated) {
      for (i = 0; i < length; i += 1) {
        value = array[i];
        key = get_key(value, i);
        item = items.get(key);
        if (item !== void 0) {
          item.a?.measure();
          (to_animate ??= new Set()).add(item);
        }
      }
    }
    for (i = 0; i < length; i += 1) {
      value = array[i];
      key = get_key(value, i);
      item = items.get(key);
      if (item === void 0) {
        var pending = offscreen_items.get(key);
        if (pending !== void 0) {
          offscreen_items.delete(key);
          items.set(key, pending);
          var next = prev ? prev.next : current;
          link(state2, prev, pending);
          link(state2, pending, next);
          move(pending, next, anchor);
          prev = pending;
        } else {
          var child_anchor = current ? (
current.e.nodes_start
          ) : anchor;
          prev = create_item(
            child_anchor,
            state2,
            prev,
            prev === null ? state2.first : prev.next,
            value,
            key,
            i,
            render_fn,
            flags,
            get_collection
          );
        }
        items.set(key, prev);
        matched = [];
        stashed = [];
        current = prev.next;
        continue;
      }
      if (should_update) {
        update_item(item, value, i, flags);
      }
      if ((item.e.f & INERT) !== 0) {
        resume_effect(item.e);
        if (is_animated) {
          item.a?.unfix();
          (to_animate ??= new Set()).delete(item);
        }
      }
      if (item !== current) {
        if (seen !== void 0 && seen.has(item)) {
          if (matched.length < stashed.length) {
            var start = stashed[0];
            var j;
            prev = start.prev;
            var a = matched[0];
            var b = matched[matched.length - 1];
            for (j = 0; j < matched.length; j += 1) {
              move(matched[j], start, anchor);
            }
            for (j = 0; j < stashed.length; j += 1) {
              seen.delete(stashed[j]);
            }
            link(state2, a.prev, b.next);
            link(state2, prev, a);
            link(state2, b, start);
            current = start;
            prev = b;
            i -= 1;
            matched = [];
            stashed = [];
          } else {
            seen.delete(item);
            move(item, current, anchor);
            link(state2, item.prev, item.next);
            link(state2, item, prev === null ? state2.first : prev.next);
            link(state2, prev, item);
            prev = item;
          }
          continue;
        }
        matched = [];
        stashed = [];
        while (current !== null && current.k !== key) {
          if ((current.e.f & INERT) === 0) {
            (seen ??= new Set()).add(current);
          }
          stashed.push(current);
          current = current.next;
        }
        if (current === null) {
          continue;
        }
        item = current;
      }
      matched.push(item);
      prev = item;
      current = item.next;
    }
    if (current !== null || seen !== void 0) {
      var to_destroy = seen === void 0 ? [] : array_from(seen);
      while (current !== null) {
        if ((current.e.f & INERT) === 0) {
          to_destroy.push(current);
        }
        current = current.next;
      }
      var destroy_length = to_destroy.length;
      if (destroy_length > 0) {
        var controlled_anchor = (flags & EACH_IS_CONTROLLED) !== 0 && length === 0 ? anchor : null;
        if (is_animated) {
          for (i = 0; i < destroy_length; i += 1) {
            to_destroy[i].a?.measure();
          }
          for (i = 0; i < destroy_length; i += 1) {
            to_destroy[i].a?.fix();
          }
        }
        pause_effects(state2, to_destroy, controlled_anchor);
      }
    }
    if (is_animated) {
      queue_micro_task(() => {
        if (to_animate === void 0) return;
        for (item of to_animate) {
          item.a?.apply();
        }
      });
    }
    each_effect.first = state2.first && state2.first.e;
    each_effect.last = prev && prev.e;
    for (var unused of offscreen_items.values()) {
      destroy_effect(unused.e);
    }
    offscreen_items.clear();
  }
  function update_item(item, value, index2, type) {
    if ((type & EACH_ITEM_REACTIVE) !== 0) {
      internal_set(item.v, value);
    }
    if ((type & EACH_INDEX_REACTIVE) !== 0) {
      internal_set(
item.i,
        index2
      );
    } else {
      item.i = index2;
    }
  }
  function create_item(anchor, state2, prev, next, value, key, index2, render_fn, flags, get_collection, deferred2) {
    var reactive = (flags & EACH_ITEM_REACTIVE) !== 0;
    var mutable = (flags & EACH_ITEM_IMMUTABLE) === 0;
    var v = reactive ? mutable ? mutable_source(value, false, false) : source(value) : value;
    var i = (flags & EACH_INDEX_REACTIVE) === 0 ? index2 : source(index2);
    var item = {
      i,
      v,
      k: key,
      a: null,
e: null,
      prev,
      next
    };
    try {
      if (anchor === null) {
        var fragment = document.createDocumentFragment();
        fragment.append(anchor = create_text());
      }
      item.e = branch(() => render_fn(
anchor,
        v,
        i,
        get_collection
      ), hydrating);
      item.e.prev = prev && prev.e;
      item.e.next = next && next.e;
      if (prev === null) {
        if (!deferred2) {
          state2.first = item;
        }
      } else {
        prev.next = item;
        prev.e.next = item.e;
      }
      if (next !== null) {
        next.prev = item;
        next.e.prev = item.e;
      }
      return item;
    } finally {
    }
  }
  function move(item, next, anchor) {
    var end = item.next ? (
item.next.e.nodes_start
    ) : anchor;
    var dest = next ? (
next.e.nodes_start
    ) : anchor;
    var node = (
item.e.nodes_start
    );
    while (node !== null && node !== end) {
      var next_node = (

get_next_sibling(node)
      );
      dest.before(node);
      node = next_node;
    }
  }
  function link(state2, prev, next) {
    if (prev === null) {
      state2.first = next;
    } else {
      prev.next = next;
      prev.e.next = next && next.e;
    }
    if (next !== null) {
      next.prev = prev;
      next.e.prev = prev && prev.e;
    }
  }
  function html(node, get_value, svg = false, mathml = false, skip_warning = false) {
    var anchor = node;
    var value = "";
    template_effect(() => {
      var effect2 = (
active_effect
      );
      if (value === (value = get_value() ?? "")) {
        return;
      }
      if (effect2.nodes_start !== null) {
        remove_effect_dom(
          effect2.nodes_start,
effect2.nodes_end
        );
        effect2.nodes_start = effect2.nodes_end = null;
      }
      if (value === "") return;
      var html2 = value + "";
      if (svg) html2 = `<svg>${html2}</svg>`;
      else if (mathml) html2 = `<math>${html2}</math>`;
      var node2 = create_fragment_from_html(html2);
      if (svg || mathml) {
        node2 =

get_first_child(node2);
      }
      assign_nodes(

get_first_child(node2),
node2.lastChild
      );
      if (svg || mathml) {
        while ( get_first_child(node2)) {
          anchor.before(

get_first_child(node2)
          );
        }
      } else {
        anchor.before(node2);
      }
    });
  }
  function snippet(node, get_snippet, ...args) {
    var anchor = node;
    var snippet2 = noop;
    var snippet_effect;
    block(() => {
      if (snippet2 === (snippet2 = get_snippet())) return;
      if (snippet_effect) {
        destroy_effect(snippet_effect);
        snippet_effect = null;
      }
      snippet_effect = branch(() => (
snippet2(anchor, ...args)
      ));
    }, EFFECT_TRANSPARENT);
  }
  function attach(node, get_fn) {
    var fn = void 0;
    var e;
    block(() => {
      if (fn !== (fn = get_fn())) {
        if (e) {
          destroy_effect(e);
          e = null;
        }
        if (fn) {
          e = branch(() => {
            effect(() => (
fn(node)
            ));
          });
        }
      }
    });
  }
  function r(e) {
    var t, f, n = "";
    if ("string" == typeof e || "number" == typeof e) n += e;
    else if ("object" == typeof e) if (Array.isArray(e)) {
      var o = e.length;
      for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
    } else for (f in e) e[f] && (n && (n += " "), n += f);
    return n;
  }
  function clsx$1() {
    for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
    return n;
  }
  function clsx(value) {
    if (typeof value === "object") {
      return clsx$1(value);
    } else {
      return value ?? "";
    }
  }
  const whitespace = [..." 	\n\r\f \v\uFEFF"];
  function to_class(value, hash, directives) {
    var classname = value == null ? "" : "" + value;
    if (hash) {
      classname = classname ? classname + " " + hash : hash;
    }
    if (directives) {
      for (var key in directives) {
        if (directives[key]) {
          classname = classname ? classname + " " + key : key;
        } else if (classname.length) {
          var len = key.length;
          var a = 0;
          while ((a = classname.indexOf(key, a)) >= 0) {
            var b = a + len;
            if ((a === 0 || whitespace.includes(classname[a - 1])) && (b === classname.length || whitespace.includes(classname[b]))) {
              classname = (a === 0 ? "" : classname.substring(0, a)) + classname.substring(b + 1);
            } else {
              a = b;
            }
          }
        }
      }
    }
    return classname === "" ? null : classname;
  }
  function append_styles(styles, important = false) {
    var separator = important ? " !important;" : ";";
    var css = "";
    for (var key in styles) {
      var value = styles[key];
      if (value != null && value !== "") {
        css += " " + key + ": " + value + separator;
      }
    }
    return css;
  }
  function to_style(value, styles) {
    if (styles) {
      var new_style = "";
      var normal_styles;
      var important_styles;
      if (Array.isArray(styles)) {
        normal_styles = styles[0];
        important_styles = styles[1];
      } else {
        normal_styles = styles;
      }
      if (normal_styles) {
        new_style += append_styles(normal_styles);
      }
      if (important_styles) {
        new_style += append_styles(important_styles, true);
      }
      new_style = new_style.trim();
      return new_style === "" ? null : new_style;
    }
    return String(value);
  }
  function set_class(dom, is_html, value, hash, prev_classes, next_classes) {
    var prev = dom.__className;
    if (prev !== value || prev === void 0) {
      var next_class_name = to_class(value, hash, next_classes);
      {
        if (next_class_name == null) {
          dom.removeAttribute("class");
        } else {
          dom.className = next_class_name;
        }
      }
      dom.__className = value;
    } else if (next_classes && prev_classes !== next_classes) {
      for (var key in next_classes) {
        var is_present = !!next_classes[key];
        if (prev_classes == null || is_present !== !!prev_classes[key]) {
          dom.classList.toggle(key, is_present);
        }
      }
    }
    return next_classes;
  }
  function update_styles(dom, prev = {}, next, priority) {
    for (var key in next) {
      var value = next[key];
      if (prev[key] !== value) {
        if (next[key] == null) {
          dom.style.removeProperty(key);
        } else {
          dom.style.setProperty(key, value, priority);
        }
      }
    }
  }
  function set_style(dom, value, prev_styles, next_styles) {
    var prev = dom.__style;
    if (prev !== value) {
      var next_style_attr = to_style(value, next_styles);
      {
        if (next_style_attr == null) {
          dom.removeAttribute("style");
        } else {
          dom.style.cssText = next_style_attr;
        }
      }
      dom.__style = value;
    } else if (next_styles) {
      if (Array.isArray(next_styles)) {
        update_styles(dom, prev_styles?.[0], next_styles[0]);
        update_styles(dom, prev_styles?.[1], next_styles[1], "important");
      } else {
        update_styles(dom, prev_styles, next_styles);
      }
    }
    return next_styles;
  }
  const IS_CUSTOM_ELEMENT = Symbol("is custom element");
  const IS_HTML = Symbol("is html");
  function set_attribute(element, attribute, value, skip_warning) {
    var attributes = get_attributes(element);
    if (attributes[attribute] === (attributes[attribute] = value)) return;
    if (attribute === "loading") {
      element[LOADING_ATTR_SYMBOL] = value;
    }
    if (value == null) {
      element.removeAttribute(attribute);
    } else if (typeof value !== "string" && get_setters(element).includes(attribute)) {
      element[attribute] = value;
    } else {
      element.setAttribute(attribute, value);
    }
  }
  function get_attributes(element) {
    return (

element.__attributes ??= {
        [IS_CUSTOM_ELEMENT]: element.nodeName.includes("-"),
        [IS_HTML]: element.namespaceURI === NAMESPACE_HTML
      }
    );
  }
  var setters_cache = new Map();
  function get_setters(element) {
    var cache_key = element.getAttribute("is") || element.nodeName;
    var setters = setters_cache.get(cache_key);
    if (setters) return setters;
    setters_cache.set(cache_key, setters = []);
    var descriptors;
    var proto = element;
    var element_proto = Element.prototype;
    while (element_proto !== proto) {
      descriptors = get_descriptors(proto);
      for (var key in descriptors) {
        if (descriptors[key].set) {
          setters.push(key);
        }
      }
      proto = get_prototype_of(proto);
    }
    return setters;
  }
  const now = () => performance.now();
  const raf = {


tick: (
(_) => requestAnimationFrame(_)
    ),
    now: () => now(),
    tasks: new Set()
  };
  function run_tasks() {
    const now2 = raf.now();
    raf.tasks.forEach((task) => {
      if (!task.c(now2)) {
        raf.tasks.delete(task);
        task.f();
      }
    });
    if (raf.tasks.size !== 0) {
      raf.tick(run_tasks);
    }
  }
  function loop(callback) {
    let task;
    if (raf.tasks.size === 0) {
      raf.tick(run_tasks);
    }
    return {
      promise: new Promise((fulfill) => {
        raf.tasks.add(task = { c: callback, f: fulfill });
      }),
      abort() {
        raf.tasks.delete(task);
      }
    };
  }
  function dispatch_event(element, type) {
    without_reactive_context(() => {
      element.dispatchEvent(new CustomEvent(type));
    });
  }
  function css_property_to_camelcase(style) {
    if (style === "float") return "cssFloat";
    if (style === "offset") return "cssOffset";
    if (style.startsWith("--")) return style;
    const parts = style.split("-");
    if (parts.length === 1) return parts[0];
    return parts[0] + parts.slice(1).map(
(word) => word[0].toUpperCase() + word.slice(1)
    ).join("");
  }
  function css_to_keyframe(css) {
    const keyframe = {};
    const parts = css.split(";");
    for (const part of parts) {
      const [property, value] = part.split(":");
      if (!property || value === void 0) break;
      const formatted_property = css_property_to_camelcase(property.trim());
      keyframe[formatted_property] = value.trim();
    }
    return keyframe;
  }
  const linear$1 = (t) => t;
  function transition(flags, element, get_fn, get_params) {
    var is_intro = (flags & TRANSITION_IN) !== 0;
    var is_outro = (flags & TRANSITION_OUT) !== 0;
    var is_both = is_intro && is_outro;
    var is_global = (flags & TRANSITION_GLOBAL) !== 0;
    var direction = is_both ? "both" : is_intro ? "in" : "out";
    var current_options;
    var inert = element.inert;
    var overflow = element.style.overflow;
    var intro;
    var outro;
    function get_options() {
      return without_reactive_context(() => {
        return current_options ??= get_fn()(element, get_params?.() ??
{}, {
          direction
        });
      });
    }
    var transition2 = {
      is_global,
      in() {
        element.inert = inert;
        if (!is_intro) {
          outro?.abort();
          outro?.reset?.();
          return;
        }
        if (!is_outro) {
          intro?.abort();
        }
        dispatch_event(element, "introstart");
        intro = animate(element, get_options(), outro, 1, () => {
          dispatch_event(element, "introend");
          intro?.abort();
          intro = current_options = void 0;
          element.style.overflow = overflow;
        });
      },
      out(fn) {
        if (!is_outro) {
          fn?.();
          current_options = void 0;
          return;
        }
        element.inert = true;
        dispatch_event(element, "outrostart");
        outro = animate(element, get_options(), intro, 0, () => {
          dispatch_event(element, "outroend");
          fn?.();
        });
      },
      stop: () => {
        intro?.abort();
        outro?.abort();
      }
    };
    var e = (
active_effect
    );
    (e.transitions ??= []).push(transition2);
    if (is_intro && should_intro) {
      var run2 = is_global;
      if (!run2) {
        var block2 = (
e.parent
        );
        while (block2 && (block2.f & EFFECT_TRANSPARENT) !== 0) {
          while (block2 = block2.parent) {
            if ((block2.f & BLOCK_EFFECT) !== 0) break;
          }
        }
        run2 = !block2 || (block2.f & EFFECT_RAN) !== 0;
      }
      if (run2) {
        effect(() => {
          untrack(() => transition2.in());
        });
      }
    }
  }
  function animate(element, options, counterpart, t2, on_finish) {
    var is_intro = t2 === 1;
    if (is_function(options)) {
      var a;
      var aborted = false;
      queue_micro_task(() => {
        if (aborted) return;
        var o = options({ direction: is_intro ? "in" : "out" });
        a = animate(element, o, counterpart, t2, on_finish);
      });
      return {
        abort: () => {
          aborted = true;
          a?.abort();
        },
        deactivate: () => a.deactivate(),
        reset: () => a.reset(),
        t: () => a.t()
      };
    }
    counterpart?.deactivate();
    if (!options?.duration) {
      on_finish();
      return {
        abort: noop,
        deactivate: noop,
        reset: noop,
        t: () => t2
      };
    }
    const { delay = 0, css, tick: tick2, easing = linear$1 } = options;
    var keyframes = [];
    if (is_intro && counterpart === void 0) {
      if (tick2) {
        tick2(0, 1);
      }
      if (css) {
        var styles = css_to_keyframe(css(0, 1));
        keyframes.push(styles, styles);
      }
    }
    var get_t = () => 1 - t2;
    var animation = element.animate(keyframes, { duration: delay, fill: "forwards" });
    animation.onfinish = () => {
      animation.cancel();
      var t1 = counterpart?.t() ?? 1 - t2;
      counterpart?.abort();
      var delta = t2 - t1;
      var duration = (
options.duration * Math.abs(delta)
      );
      var keyframes2 = [];
      if (duration > 0) {
        var needs_overflow_hidden = false;
        if (css) {
          var n = Math.ceil(duration / (1e3 / 60));
          for (var i = 0; i <= n; i += 1) {
            var t = t1 + delta * easing(i / n);
            var styles2 = css_to_keyframe(css(t, 1 - t));
            keyframes2.push(styles2);
            needs_overflow_hidden ||= styles2.overflow === "hidden";
          }
        }
        if (needs_overflow_hidden) {
          element.style.overflow = "hidden";
        }
        get_t = () => {
          var time = (

animation.currentTime
          );
          return t1 + delta * easing(time / duration);
        };
        if (tick2) {
          loop(() => {
            if (animation.playState !== "running") return false;
            var t3 = get_t();
            tick2(t3, 1 - t3);
            return true;
          });
        }
      }
      animation = element.animate(keyframes2, { duration, fill: "forwards" });
      animation.onfinish = () => {
        get_t = () => t2;
        tick2?.(t2, 1 - t2);
        on_finish();
      };
    };
    return {
      abort: () => {
        if (animation) {
          animation.cancel();
          animation.effect = null;
          animation.onfinish = noop;
        }
      },
      deactivate: () => {
        on_finish = noop;
      },
      reset: () => {
        if (t2 === 0) {
          tick2?.(1, 0);
        }
      },
      t: () => get_t()
    };
  }
  function bind_value(input, get2, set2 = get2) {
    var batches2 = new WeakSet();
    listen_to_event_and_reset_event(input, "input", async (is_reset) => {
      var value = is_reset ? input.defaultValue : input.value;
      value = is_numberlike_input(input) ? to_number(value) : value;
      set2(value);
      if (current_batch !== null) {
        batches2.add(current_batch);
      }
      await tick();
      if (value !== (value = get2())) {
        var start = input.selectionStart;
        var end = input.selectionEnd;
        input.value = value ?? "";
        if (end !== null) {
          input.selectionStart = start;
          input.selectionEnd = Math.min(end, input.value.length);
        }
      }
    });
    if (



untrack(get2) == null && input.value
    ) {
      set2(is_numberlike_input(input) ? to_number(input.value) : input.value);
      if (current_batch !== null) {
        batches2.add(current_batch);
      }
    }
    render_effect(() => {
      var value = get2();
      if (input === document.activeElement) {
        var batch = (
previous_batch ?? current_batch
        );
        if (batches2.has(batch)) {
          return;
        }
      }
      if (is_numberlike_input(input) && value === to_number(input.value)) {
        return;
      }
      if (input.type === "date" && !value && !input.value) {
        return;
      }
      if (value !== input.value) {
        input.value = value ?? "";
      }
    });
  }
  function bind_checked(input, get2, set2 = get2) {
    listen_to_event_and_reset_event(input, "change", (is_reset) => {
      var value = is_reset ? input.defaultChecked : input.checked;
      set2(value);
    });
    if (


untrack(get2) == null
    ) {
      set2(input.checked);
    }
    render_effect(() => {
      var value = get2();
      input.checked = Boolean(value);
    });
  }
  function is_numberlike_input(input) {
    var type = input.type;
    return type === "number" || type === "range";
  }
  function to_number(value) {
    return value === "" ? null : +value;
  }
  class ResizeObserverSingleton {
#listeners = new WeakMap();
#observer;
#options;
static entries = new WeakMap();
constructor(options) {
      this.#options = options;
    }
observe(element, listener) {
      var listeners = this.#listeners.get(element) || new Set();
      listeners.add(listener);
      this.#listeners.set(element, listeners);
      this.#getObserver().observe(element, this.#options);
      return () => {
        var listeners2 = this.#listeners.get(element);
        listeners2.delete(listener);
        if (listeners2.size === 0) {
          this.#listeners.delete(element);
          this.#observer.unobserve(element);
        }
      };
    }
    #getObserver() {
      return this.#observer ?? (this.#observer = new ResizeObserver(
(entries) => {
          for (var entry of entries) {
            ResizeObserverSingleton.entries.set(entry.target, entry);
            for (var listener of this.#listeners.get(entry.target) || []) {
              listener(entry);
            }
          }
        }
      ));
    }
  }
  var resize_observer_border_box = new ResizeObserverSingleton({
    box: "border-box"
  });
  function bind_element_size(element, type, set2) {
    var unsub = resize_observer_border_box.observe(element, () => set2(element[type]));
    effect(() => {
      untrack(() => set2(element[type]));
      return unsub;
    });
  }
  function is_bound_this(bound_value, element_or_component) {
    return bound_value === element_or_component || bound_value?.[STATE_SYMBOL] === element_or_component;
  }
  function bind_this(element_or_component = {}, update, get_value, get_parts) {
    effect(() => {
      var old_parts;
      var parts;
      render_effect(() => {
        old_parts = parts;
        parts = get_parts?.() || [];
        untrack(() => {
          if (element_or_component !== get_value(...parts)) {
            update(element_or_component, ...parts);
            if (old_parts && is_bound_this(get_value(...old_parts), element_or_component)) {
              update(null, ...old_parts);
            }
          }
        });
      });
      return () => {
        queue_micro_task(() => {
          if (parts && is_bound_this(get_value(...parts), element_or_component)) {
            update(null, ...parts);
          }
        });
      };
    });
    return element_or_component;
  }
  function init(immutable = false) {
    const context = (
component_context
    );
    const callbacks = context.l.u;
    if (!callbacks) return;
    let props = () => deep_read_state(context.s);
    if (immutable) {
      let version = 0;
      let prev = (
{}
      );
      const d = derived(() => {
        let changed = false;
        const props2 = context.s;
        for (const key in props2) {
          if (props2[key] !== prev[key]) {
            prev[key] = props2[key];
            changed = true;
          }
        }
        if (changed) version++;
        return version;
      });
      props = () => get(d);
    }
    if (callbacks.b.length) {
      user_pre_effect(() => {
        observe_all(context, props);
        run_all(callbacks.b);
      });
    }
    user_effect(() => {
      const fns = untrack(() => callbacks.m.map(run));
      return () => {
        for (const fn of fns) {
          if (typeof fn === "function") {
            fn();
          }
        }
      };
    });
    if (callbacks.a.length) {
      user_effect(() => {
        observe_all(context, props);
        run_all(callbacks.a);
      });
    }
  }
  function observe_all(context, props) {
    if (context.l.s) {
      for (const signal of context.l.s) get(signal);
    }
    props();
  }
  function reactive_import(fn) {
    var s = source(0);
    return function() {
      if (arguments.length === 1) {
        set(s, get(s) + 1);
        return arguments[0];
      } else {
        get(s);
        return fn();
      }
    };
  }
  let is_store_binding = false;
  function capture_store_binding(fn) {
    var previous_is_store_binding = is_store_binding;
    try {
      is_store_binding = false;
      return [fn(), is_store_binding];
    } finally {
      is_store_binding = previous_is_store_binding;
    }
  }
  function prop(props, key, flags, fallback) {
    var runes = !legacy_mode_flag || (flags & PROPS_IS_RUNES) !== 0;
    var bindable = (flags & PROPS_IS_BINDABLE) !== 0;
    var lazy = (flags & PROPS_IS_LAZY_INITIAL) !== 0;
    var fallback_value = (
fallback
    );
    var fallback_dirty = true;
    var get_fallback = () => {
      if (fallback_dirty) {
        fallback_dirty = false;
        fallback_value = lazy ? untrack(
fallback
        ) : (
fallback
        );
      }
      return fallback_value;
    };
    var setter;
    if (bindable) {
      var is_entry_props = STATE_SYMBOL in props || LEGACY_PROPS in props;
      setter = get_descriptor(props, key)?.set ?? (is_entry_props && key in props ? (v) => props[key] = v : void 0);
    }
    var initial_value;
    var is_store_sub = false;
    if (bindable) {
      [initial_value, is_store_sub] = capture_store_binding(() => (
props[key]
      ));
    } else {
      initial_value =
props[key];
    }
    var getter;
    if (runes) {
      getter = () => {
        var value = (
props[key]
        );
        if (value === void 0) return get_fallback();
        fallback_dirty = true;
        return value;
      };
    } else {
      getter = () => {
        var value = (
props[key]
        );
        if (value !== void 0) {
          fallback_value =
void 0;
        }
        return value === void 0 ? fallback_value : value;
      };
    }
    if (runes && (flags & PROPS_IS_UPDATED) === 0) {
      return getter;
    }
    if (setter) {
      var legacy_parent = props.$$legacy;
      return (
(function(value, mutation) {
          if (arguments.length > 0) {
            if (!runes || !mutation || legacy_parent || is_store_sub) {
              setter(mutation ? getter() : value);
            }
            return value;
          }
          return getter();
        })
      );
    }
    var overridden = false;
    var d = ((flags & PROPS_IS_IMMUTABLE) !== 0 ? derived : derived_safe_equal)(() => {
      overridden = false;
      return getter();
    });
    if (bindable) get(d);
    var parent_effect = (
active_effect
    );
    return (
(function(value, mutation) {
        if (arguments.length > 0) {
          const new_value = mutation ? get(d) : runes && bindable ? proxy(value) : value;
          set(d, new_value);
          overridden = true;
          if (fallback_value !== void 0) {
            fallback_value = new_value;
          }
          return value;
        }
        if (is_destroying_effect && overridden || (parent_effect.f & DESTROYED) !== 0) {
          return d.v;
        }
        return get(d);
      })
    );
  }
  function onMount(fn) {
    if (component_context === null) {
      lifecycle_outside_component();
    }
    if (legacy_mode_flag && component_context.l !== null) {
      init_update_callbacks(component_context).m.push(fn);
    } else {
      user_effect(() => {
        const cleanup = untrack(fn);
        if (typeof cleanup === "function") return (
cleanup
        );
      });
    }
  }
  function onDestroy(fn) {
    if (component_context === null) {
      lifecycle_outside_component();
    }
    onMount(() => () => untrack(fn));
  }
  function init_update_callbacks(context) {
    var l = (
context.l
    );
    return l.u ??= { a: [], b: [], m: [] };
  }
  const PUBLIC_VERSION = "5";
  if (typeof window !== "undefined") {
    ((window.__svelte ??= {}).v ??= new Set()).add(PUBLIC_VERSION);
  }
  function cubicOut(t) {
    const f = t - 1;
    return f * f * f + 1;
  }
  function quadInOut(t) {
    t /= 0.5;
    if (t < 1) return 0.5 * t * t;
    t--;
    return -0.5 * (t * (t - 2) - 1);
  }
  const LINKS_KEY = "performer-links";
  const defaultLinks = [
    {
      label: "Pornolab",
      url: "http://pornolab.net/forum/tracker.php?search_id=&nm={q}"
    },
    {
      label: "Simpcity",
      url: "https://simpcity.su/search/1/?page=99&o=date&q={q}"
    },
    {
      label: "MissAV",
      url: "https://missav.ws/en/search/{q}"
    },
    {
      label: "Bunkr",
      url: "https://bunkr-albums.io/?search={q}"
    }
  ];
  function generateId(link2) {
    const performerLink = { ...link2 };
    performerLink.id = crypto.randomUUID();
    return performerLink;
  }
  function stripId(link2) {
    const performerLink = { ...link2 };
    delete performerLink.id;
    return performerLink;
  }
  function savePerformerLinks() {
    const stored = store.performerLinks.map(stripId);
    localStorage.setItem(LINKS_KEY, JSON.stringify(stored));
  }
  function loadPerformerLinks() {
    try {
      const stored = localStorage.getItem(LINKS_KEY);
      if (stored === null) return defaultLinks.map(generateId);
      const parsed = JSON.parse(stored);
      return parsed.map(generateId);
    } catch {
      return defaultLinks.map(generateId);
    }
  }
  function addPerformerLink() {
    const emptyLink = { label: "", url: "" };
    store.performerLinks.push(generateId(emptyLink));
    savePerformerLinks();
  }
  function removePerformerLink(index2) {
    if (index2 < 0 || index2 >= store.performerLinks.length) return;
    store.performerLinks.splice(index2, 1);
    savePerformerLinks();
  }
  function updatePerformerLink(index2, data2) {
    if (index2 < 0 || index2 >= store.performerLinks.length) return;
    const link2 = store.performerLinks[index2];
    if (link2) Object.assign(link2, data2);
    savePerformerLinks();
  }
  function getLinkUrl(link2, query) {
    const linkUrl = link2.url;
    if (!query || !linkUrl.includes("{q}")) return linkUrl;
    return linkUrl.replace("{q}", encodeURIComponent(query));
  }
  function getFaviconUrl(url) {
    try {
      const domain = new URL(url).host;
      return `https://icons.duckduckgo.com/ip3/${domain}.ico`;
    } catch {
      return "https://icons.duckduckgo.com/ip3/invalid.ico";
    }
  }
  function restorePerformerLinks() {
    localStorage.removeItem(LINKS_KEY);
    for (let i = 0; i < defaultLinks.length; i++) {
      const defaultSite = defaultLinks[i];
      if (i < store.performerLinks.length) {
        const existingLink = store.performerLinks[i];
        if (existingLink?.label !== defaultSite?.label || existingLink?.url !== defaultSite?.url) {
          if (existingLink) Object.assign(existingLink, defaultSite);
        }
      } else {
        if (defaultSite) store.performerLinks.push(generateId(defaultSite));
      }
    }
    if (store.performerLinks.length > defaultLinks.length) {
      store.performerLinks.splice(defaultLinks.length);
    }
    savePerformerLinks();
  }
  const store = proxy({
    readyStateComplete: false,
    showSettings: false,
    options: {
      Title: [],
      Images: [],
      Download: [],
      Shortcuts: [],
      Developer: []
    },
    performerLinks: [],
    resizeWidth: 100,
    dropdown: null,
    openDropdown(event2, item, classList) {
      if (this.dropdown) {
        this.closeDropdown();
      } else {
        this.dropdown = {
          item,
          classList,
          clientX: event2.clientX,
          clientY: event2.clientY,
          currentTarget: event2.currentTarget
        };
      }
    },
    closeDropdown() {
      if (this.dropdown) {
        const currentTarget = this.dropdown.currentTarget;
        const classList = this.dropdown.classList;
        if (currentTarget && classList) currentTarget.classList.remove(...classList);
        this.dropdown = null;
      }
    },
    upgradeImgData: {},
    downloadState: "idle",
    ultraImages: null,
    ultraPost: null,
    imgRefs: [],
    showFileList: false,
    fileListData: null,
    toggleFileList() {
      this.showFileList = !this.showFileList;
    },
    documentHidden: false,
    get transition() {
      return {
        duration: this.readyStateComplete !== false && !this.documentHidden ? 180 : 0,
        easing: quadInOut
      };
    },
    get favIcons() {
      return Object.fromEntries(this.performerLinks.filter((link2) => link2.url).map((link2) => [link2.url, getFaviconUrl(link2.url)]));
    }
  });
  function handleUser(element) {
    if (!element) return;
    const name = element?.textContent;
    const link2 = element.getAttribute("href");
    if (name && link2 && link2?.includes("viewprofile")) {
      return { name, link: link2 };
    }
    return;
  }
  function handleTheme(element) {
    if (!element) return;
    const parentNode = element.closest("a");
    const darkmode = element.classList.contains("fa-sun");
    return { element: parentNode, darkmode };
  }
  function handleTimes(element) {
    if (!element) return;
    const part = element?.textContent?.split(" ")[0];
    if (!part) return;
    const parsed = parseInt(part);
    if (isNaN(parsed)) return;
    return parsed;
  }
  function handleImages(postImgs) {
    const images = [];
    if (!postImgs) return images;
    postImgs.forEach((varElement) => {
      const src = varElement.getAttribute("title");
      if (src) {
        const parentAnchor = varElement.closest("a");
        const href = parentAnchor?.href;
        images.push({
          id: crypto.randomUUID(),
          href,
          src
        });
      }
    });
    return images;
  }
  function handlePosts(posts) {
    if (posts) {
      return Array.from(posts).map((msg) => {
        const row = msg?.closest("tbody");
        const nickEl = row?.querySelector(".nick");
        const dateEl = row?.querySelector(".small");
        const avatarImg = row?.querySelector(".avatar img");
        const profileLink = row?.querySelector(
          'a.txtb[href*="viewprofile"]'
        );
        return {
          nick: nickEl?.textContent,
          date: dateEl?.textContent,
          avatar: avatarImg?.getAttribute("src"),
          link: profileLink?.getAttribute("href"),
          message: msg
        };
      });
    }
    return [];
  }
  function handleDate(dateString) {
    if (!dateString) return null;
    const ruMonthMap = {
      Янв: "Jan",
      Фев: "Feb",
      Мар: "Mar",
      Апр: "Apr",
      Май: "May",
      Июн: "Jun",
      Июл: "Jul",
      Авг: "Aug",
      Сен: "Sep",
      Окт: "Oct",
      Ноя: "Nov",
      Дек: "Dec"
    };
    const match = dateString.match(
      /(\d{2})-([А-Яа-я]{3})-(\d{2}) (\d{2}:\d{2}:\d{2})/
    );
    if (!match) return null;
    const [, day, ruMonth, shortYear, time] = match;
    if (!ruMonth || !shortYear) return null;
    const enMonth = ruMonthMap[ruMonth];
    const year = 2e3 + parseInt(shortYear, 10);
    const isoString = `${day} ${enMonth} ${year} ${time}`;
    return new Date(isoString);
  }
  function handleRelativeDate(dateLike) {
    if (dateLike === null) return "";
    const locale = "en";
    const rtf = new Intl.RelativeTimeFormat(locale, { numeric: "auto" });
    const divisions = [
      { amount: 60, name: "seconds" },
      { amount: 60, name: "minutes" },
      { amount: 24, name: "hours" },
      { amount: 7, name: "days" },
      { amount: 4.34524, name: "weeks" },
      { amount: 12, name: "months" },
      { amount: Infinity, name: "years" }
    ];
    let delta = (new Date(dateLike).getTime() - Date.now()) / 1e3;
    for (const { amount, name } of divisions) {
      if (Math.abs(delta) < amount) {
        return rtf.format(Math.round(delta), name);
      }
      delta /= amount;
    }
    return "";
  }
  function handleThankList(element) {
    if (!element) return new Set();
    const userIds = new Set();
    const uElements = element.querySelectorAll("u");
    uElements.forEach((uElement) => {
      const uid = uElement.textContent;
      if (uid) userIds.add(uid);
    });
    return userIds;
  }
  function handleTitle(topicEl) {
    const text2 = topicEl?.textContent?.trim();
    if (!text2) return null;
    const tags = extractTags(text2);
    const parsed = text2.replace(TAG_RE, "").trim();
    const searchTerms = extractSearchTerms(parsed);
    return { original: text2, parsed, searchTerms, tags };
  }
  function extractTags(text2) {
    const all = [...text2.matchAll(TAG_RE)].flatMap((m) => m[1]?.split(",") ?? []).map((t) => t.trim()).filter(Boolean);
    return [...new Set(all)];
  }
  function extractSearchTerms(text2) {
    const terms = [];
    let cursor = 0;
    const splitOnSeparators = (fragment) => fragment.trim() ? fragment.split(SEP_RE).map((s) => s.trim()).filter(Boolean) : [];
    for (const match of text2.matchAll(BRACKETS_RE)) {
      terms.push(...splitOnSeparators(text2.slice(cursor, match.index)));
      const inner = match[1] ?? match[2] ?? "";
      terms.push(...splitOnSeparators(inner));
      cursor = match.index + match[0].length;
    }
    terms.push(...splitOnSeparators(text2.slice(cursor)));
    return terms.filter((t, i) => terms.indexOf(t) === i);
  }
  const TAG_RE = /\[([^\]]+)]/g;
  const BRACKETS_RE = /\(([^)]+)\)|\{([^}]+)\}/g;
  const SEPARATORS = [",", "|", "/", "&", "-", "—", "aka"];
  const SEP_RE = new RegExp(
    SEPARATORS.map((str) => {
      const escaped = str.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&");
      switch (str) {
case "-":
        case "—":
        case "/":
        case "aka":
          return `(?<=\\s)${escaped}(?=\\s)`;
default:
          return escaped;
      }
    }).join("|"),
    "g"
  );
  function handleData() {
    const sel = Object.fromEntries(Object.entries({
      title: "a#topic-title",
      images: "#topic_main > tbody:nth-of-type(2) div.sp-wrap var.postImg",
      user: "div.topmenu td a",
      messages: "div.topmenu a.new-pm-link",
      theme: "div.topmenu .fas.fa-sun, div.topmenu .fas.fa-moon",
      seeders: "span.seed > b",
      leechers: "b.leech > b",
      size: "#tor-reged tr:nth-of-type(5) td:last-of-type",
      date: "div.post_head a.small",
      times: "td.borderless.bCenter.pad_8 > b",
      link: "a.dl-stub.dl-link",
      thank: "input#thx-btn",
      list: "div.thx-list",
      pagination: "table#pagination",
      logo: "img.site-logo",
      forumline: "table.forumline.message"
    }).map(([key, value]) => [key, document.querySelectorAll(value)]));
    return {
      title: handleTitle(sel?.["title"]?.[0]),
      posts: [],
      images: handleImages(sel["images"]),
      user: handleUser(sel?.["user"]?.[0]),
      messages: sel["messages"]?.[0],
      theme: handleTheme(sel["theme"]?.[0]),
      torrent: {
        seeders: sel?.["seeders"]?.[0]?.textContent,
        leechers: sel?.["leechers"]?.[0]?.textContent?.trim(),
        size: sel?.["size"]?.[0]?.textContent,
        date: handleDate(sel?.["date"]?.[0]?.textContent),
        times: handleTimes(sel?.["times"]?.[2]),
        link: sel?.["link"]?.[0]?.href
      },
      thank: {
        element: sel?.["thank"]?.[0],
        list: handleThankList(sel?.["list"]?.[0])
      },
      pagination: sel?.["pagination"]?.[0],
      logo: sel?.["logo"]?.[0]?.src,
      forumline: sel?.["forumline"]?.[0]
    };
  }
  const data = proxy({});
  var _GM_xmlhttpRequest = (() => typeof GM_xmlhttpRequest != "undefined" ? GM_xmlhttpRequest : void 0)();
  function GM_fetch(method, url, responseType, headers, data2) {
    return new Promise((resolve, reject) => {
      _GM_xmlhttpRequest({
        method,
        url,
        responseType,
        headers,
        data: data2,
        onload: (response) => resolve(response),
        onerror: () => reject(new Error(`GM_fetch failed: ${url}`))
      });
    });
  }
  const KEY$1 = "resolved-urls";
  const cache = JSON.parse(
    sessionStorage.getItem(KEY$1) || "{}"
  );
  function getCache$1(url) {
    return cache[url];
  }
  function setCache$1(url, src) {
    cache[url] = src;
    sessionStorage.setItem(KEY$1, JSON.stringify(cache));
  }
  function clearCache() {
    Object.keys(cache).forEach((key) => delete cache[key]);
    sessionStorage.removeItem(KEY$1);
  }
  async function getBlob(url) {
    if (getSettings("proxyCache"))
      return "https://corsproxy.io/?url=" + encodeURIComponent(url);
    const { response } = await GM_fetch("GET", url, "blob");
    return URL.createObjectURL(response);
  }
  const OPTIONS_KEY = "user-settings";
  const defaultOptions = {
    Title: [
      { label: "Parse title", key: "parseTitle", value: true },
      { label: "Show tags", key: "showTags", value: true },
      {
        label: "Performer links",
        key: "performerLinks",
        value: true
      }
    ],
    Images: [
      {
        label: "Upgrade images",
        key: "upgradeImages",
        value: true
      },
      {
        label: "Last image first",
        key: "lastImageFirst",
        value: true
      },
      {
        label: "Drag to resize",
        key: "dragResize",
        value: true
      }
    ],
    Download: [
      {
        label: "Floating download button",
        key: "floatingDownload",
        value: false
      },
      {
        label: 'Send to <a href="https://github.com/valpackett/transmitter" target="_blank">Transmitter</a>',
        key: "sendToTransmitter",
        value: false
      },
      {
        label: "Auto-expand file list",
        key: "expandFiles",
        value: false
      }
    ],
    Shortcuts: [
      {
        label: "Navigate with number keys",
        key: "numKeys",
        value: true,
        description: "[1, 2, 3, 4]"
      },
      {
        label: "Anchor images",
        key: "spaceImageAnchor",
        value: true,
        description: "[Space, Shift + Space]"
      },
      {
        label: "Download torrent",
        key: "dKeyToDownload",
        value: false,
        description: "[d]"
      }
    ],
    Network: [
      {
        label: "Cache resolved urls",
        key: "cacheImages",
        value: true
      },
      {
        label: "Limit concurrent upgrades",
        key: "limitConcurrent",
        value: true
      },
      {
        label: "CorsProxy.io",
        key: "proxyCache",
        value: false,
        description: "cache hotlinked"
      }
    ],
    Developer: [
      {
        label: "Toggle settings",
        key: "sKeySettings",
        value: false,
        description: "[s]"
      },
      {
        label: "Debug upgrade",
        key: "debugImgs",
        value: false
      },
      {
        label: "Incognito",
        key: "incognito",
        value: false
      }
    ]
  };
  function loadOptions() {
    const options = structuredClone(defaultOptions);
    const stored = localStorage.getItem(OPTIONS_KEY);
    if (stored) {
      try {
        const saved = JSON.parse(stored);
        Object.values(options).flat().forEach((opt) => {
          const value = saved[opt.key];
          if (value !== void 0) {
            opt.value = value;
          }
        });
      } catch (error) {
        console.warn(`Failed to load ${OPTIONS_KEY} from localStorage:`, error);
      }
    }
    return options;
  }
  function saveOptions() {
    const options = Object.values(store.options).flat();
    const json = Object.fromEntries(options.map((opt) => [opt.key, opt.value]));
    localStorage.setItem(OPTIONS_KEY, JSON.stringify(json));
  }
  function updateOption(key, value) {
    const option = Object.values(store.options).flat().find((opt) => opt.key === key);
    if (option) option.value = value;
    saveOptions();
  }
  function restoreOptions() {
    Object.entries(defaultOptions).forEach(([groupKey, groupSettings]) => {
      groupSettings.forEach((defaultSetting) => {
        const currentOpt = store.options[groupKey]?.find(
          (opt) => opt.key === defaultSetting.key
        );
        if (currentOpt) {
          currentOpt.value = defaultSetting.value;
        }
      });
    });
    localStorage.removeItem(OPTIONS_KEY);
    saveOptions();
  }
  const DEFAULT_WIDTH = 100;
  const RESIZE_KEY = "images-resize-width";
  function loadResize() {
    try {
      const stored = localStorage.getItem(RESIZE_KEY);
      if (stored) return parseInt(stored);
    } catch (error) {
      console.warn(`Failed to load ${RESIZE_KEY} from localStorage:`, error);
    }
    return DEFAULT_WIDTH;
  }
  function saveResize(value) {
    try {
      localStorage.setItem(RESIZE_KEY, value.toString());
    } catch (error) {
      console.warn(`Failed to save ${RESIZE_KEY} to localStorage:`, error);
    }
  }
  function restoreResize() {
    localStorage.setItem(RESIZE_KEY, DEFAULT_WIDTH.toString());
    store.resizeWidth = DEFAULT_WIDTH;
  }
  const parser$3 = new DOMParser();
  const decoder = new TextDecoder("windows-1251");
  const regex = /\b\d+[pk]\b/gi;
  async function getRelated(title) {
    const query = stripResolution(title);
    const cache2 = getCache();
    if (cache2[query]) return cache2[query];
    const elements = await handleSearch(query);
    const results = [];
    elements.forEach((element) => {
      if (element instanceof HTMLAnchorElement && element.href && element.textContent) {
        const resolution = getResolution(element.textContent);
        if (resolution) {
          results.push({
            href: element.href,
            textContent: element.textContent,
            resolution
          });
        }
      }
    });
    cache2[query] = results;
    setCache(cache2);
    return results;
  }
  async function handleSearch(searchQuery) {
    const headers = { "Content-Type": "application/x-www-form-urlencoded" };
    const body = `max=1&to=1&nm=${encodeURIComponent(searchQuery)}`;
    const response = await fetch("/forum/tracker.php", {
      method: "POST",
      headers,
      body
    });
    const buffer = await response.arrayBuffer();
    const result = decoder.decode(buffer);
    const doc = parser$3.parseFromString(result, "text/html");
    const nothingFound = doc.querySelector(".info_msg_wrap");
    if (nothingFound) return [];
    const related = doc.querySelectorAll(".med.tLink.bold");
    return Array.from(related);
  }
  function stripResolution(title) {
    return title.replace(regex, "").replace(/ ,/g, "").replace(/\s*,\s*(?=\])/g, "").replace(/\[\]/g, "");
  }
  function getResolution(title) {
    const match = title.match(regex);
    return match?.[0];
  }
  const CACHE_KEY = "related-cache";
  function getCache() {
    const cached = sessionStorage.getItem(CACHE_KEY);
    return cached ? JSON.parse(cached) : {};
  }
  function setCache(cache2) {
    sessionStorage.setItem(CACHE_KEY, JSON.stringify(cache2));
  }
  function restoreRelated() {
    sessionStorage.removeItem(CACHE_KEY);
  }
  const SETTINGS_KEY = "show-settings";
  function getSettings(key) {
    const setting = Object.values(store.options).flat().find((opt) => opt.key === key);
    return setting?.value || false;
  }
  function loadShowSettings() {
    const stored = localStorage.getItem(SETTINGS_KEY);
    if (stored === null) return false;
    try {
      return JSON.parse(stored);
    } catch (error) {
      console.warn(`Failed to parse settings from localStorage:`, stored, error);
      return false;
    }
  }
  function saveShowSettings(value) {
    try {
      localStorage.setItem(SETTINGS_KEY, JSON.stringify(value));
    } catch (error) {
      console.warn(`Failed to save ${SETTINGS_KEY} to localStorage:`, error);
    }
  }
  function toggleShowSettings(event2) {
    event2.preventDefault();
    store.showSettings = !store.showSettings;
    saveShowSettings(store.showSettings);
  }
  function restoreDefaultSettings() {
    if (!confirm("Are you sure you want to restore all settings to default?"))
      return;
    restoreOptions();
    restorePerformerLinks();
    restoreResize();
    restoreRelated();
    clearCache();
  }
  const SYNC_TRIGGER_KEY = "sync-trigger";
  function syncSettings() {
    localStorage.setItem(SYNC_TRIGGER_KEY, Date.now().toString());
  }
  function onstorage(event2) {
    if (event2.key !== SYNC_TRIGGER_KEY) return;
    const optionsValue = localStorage.getItem(OPTIONS_KEY);
    if (optionsValue) {
      const saved = JSON.parse(optionsValue);
      Object.values(store.options).flat().forEach((setting) => {
        if (setting.key in saved) {
          setting.value = saved[setting.key];
        }
      });
      saveOptions();
    }
    const resizeValue = localStorage.getItem(RESIZE_KEY);
    if (resizeValue) store.resizeWidth = parseInt(resizeValue);
    const linksValue = localStorage.getItem(LINKS_KEY);
    if (linksValue) {
      store.performerLinks.length = 0;
      store.performerLinks.push(...loadPerformerLinks());
    }
    store.showSettings = false;
  }
  function exportSettings() {
    const performerLinks = store.performerLinks.map(stripId);
    const options = Object.values(store.options).flat();
    const optionsJson = Object.fromEntries(
      options.map((opt) => [opt.key, opt.value])
    );
    const fileContent = `// Paste this into browser console

localStorage.setItem("${OPTIONS_KEY}", JSON.stringify(${JSON.stringify(
    optionsJson,
    null,
    2
  )}));

localStorage.setItem("${LINKS_KEY}", JSON.stringify(${JSON.stringify(
    performerLinks,
    null,
    2
  )}));

localStorage.setItem("${RESIZE_KEY}", "${store.resizeWidth || "100"}");

location.reload();
`;
    const blob = new Blob([fileContent], { type: "text/plain" });
    const url = URL.createObjectURL(blob);
    const a = Object.assign(document.createElement("a"), {
      href: url,
      download: `data-${( new Date()).toISOString().split("T")[0]}.txt`
    });
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
    URL.revokeObjectURL(url);
  }
  const KEY = "userscript-disabled";
  function userscriptDisabled() {
    const stored = sessionStorage.getItem(KEY);
    return stored === null ? false : stored === "true";
  }
  function setUserscript(value) {
    sessionStorage.setItem(KEY, JSON.stringify(value));
    location.reload();
  }
  function appendUserscriptEnableButton() {
    console.warn("userscript disabled");
    const button = document.createElement("button");
    Object.assign(button, {
      textContent: "Enable Pornolab Ultra",
      onclick: () => setUserscript(false)
    });
    Object.assign(button.style, {
      position: "fixed",
      top: "0.75rem",
      right: "0.75rem",
      zIndex: "9999"
    });
    const element = document.querySelector("#pl-speedbar-a");
    element?.parentElement?.appendChild(button);
  }
  function prependContentSecurityPolicy() {
    const meta = document.createElement("meta");
    meta.httpEquiv = "Content-Security-Policy";
    meta.content = `
    default-src 'self';
    img-src 'self' http: https: data: blob:;
    style-src 'unsafe-inline';
    font-src 'self'
      https://static.pornolab.net/templates/default/webfonts/fa-solid-900.woff2;
    script-src 'unsafe-inline'
      https://static.pornolab.net/js/main.js
      https://static.pornolab.net/js/jquery.pack.js;
  `;
    document.head.prepend(meta);
    return document.head.contains(meta);
  }
  function forumDisabled(app) {
    const p = document.querySelector("body > div > p");
    const disabledText = "Форум временно отключен";
    if (!p?.textContent?.includes(disabledText)) return false;
    const translations = {
      [disabledText]: "Forum is temporarily disabled",
      "Последние новости вы можете узнать в": "You can find out the latest news on",
      твиттере: "Twitter"
    };
    app.remove();
    let html2 = p.innerHTML;
    for (const [russian, english] of Object.entries(translations)) {
      html2 = html2.replace(russian, english);
    }
    p.innerHTML = html2;
    return true;
  }
  enable_legacy_mode_flag();
  function state(state2) {
    store.downloadState = state2;
  }
  async function handleDownload(event2) {
    event2.preventDefault();
    if (store.downloadState === "downloading") {
      return;
    }
    if (!data.torrent?.link) {
      return state("error");
    }
    try {
      store.downloadState = "downloading";
      if (!getSettings("sendToTransmitter")) {
        window.location.assign(data.torrent.link);
        return state("success");
      }
      const url = "http://transmitter.web-extension/" + encodeURIComponent(data.torrent.link);
      const bgColor = getComputedStyle(document.documentElement).getPropertyValue(
        "--main-bg"
      );
      const page = `
      <!DOCTYPE html>
      <html>
        <head>
          <style>
            body { background-color: ${bgColor}; }
            img { display: none; }
          </style>
        </head>
        <body>
          <img src="${url}" onload="window.close()" onerror="window.close()">
        </body>
      </html>
    `;
      window.open(
        URL.createObjectURL(new Blob([page], { type: "text/html" })),
        "_blank",
        "noopener"
      );
      state("success");
    } catch (err) {
      console.error("Error downloading torrent:", err);
      state("error");
    }
  }
  var $$_import_store = reactive_import(() => store);
  function Events($$anchor, $$props) {
    push($$props, false);
    function handleReadyStateChange() {
      if (document.readyState === "complete") {
        $$_import_store($$_import_store().readyStateComplete = true);
      }
    }
    onMount(() => {
      handleReadyStateChange();
      if ($$_import_store().readyStateComplete) return;
      return on(document, "readystatechange", handleReadyStateChange);
    });
    function onkeydown(event2) {
      const target = event2.target;
      const input = target.isContentEditable || target instanceof HTMLInputElement && target.type === "text";
      if (input || event2.ctrlKey || event2.metaKey || event2.altKey) return;
      switch (event2.code) {
        case "Space":
          handleSpace(event2);
          break;
        case "KeyS":
          handleKeyS(event2);
          break;
        case "KeyD":
          handleKeyD(event2);
          break;
        case "Escape":
          handleEscape();
          break;
        case "Digit1":
        case "Digit2":
        case "Digit3":
        case "Digit4":
          if (!getSettings("numKeys")) return;
          event2.preventDefault();
          digitHandlers[event2.code]();
          break;
        default:
          return;
      }
    }
    const digitHandlers = {
      Digit1: handleDigit1,
      Digit2: handleDigit2,
      Digit3: handleDigit3,
      Digit4: handleDigit4
    };
    function handleSpace(event2) {
      if (!getSettings("spaceImageAnchor") || !$$_import_store().imgRefs.length || !$$_import_store().ultraImages) return;
      const scrollY = window.scrollY;
      const containerTop = $$_import_store().ultraImages.offsetTop;
      const containerBottom = containerTop + $$_import_store().ultraImages.offsetHeight;
      if (containerTop >= scrollY + window.innerHeight || containerBottom <= scrollY) return;
      let imgRefs = [...$$_import_store().imgRefs];
      if (getSettings("lastImageFirst") && imgRefs.length > 1) {
        const lastImg = imgRefs.pop();
        if (lastImg) imgRefs.unshift(lastImg);
      }
      let filteredImgRefs = imgRefs.filter((el) => el.dataset["broken"] !== "true");
      if (filteredImgRefs.length === 0) return;
      if (scrollY < containerTop) {
        if (!event2.shiftKey) {
          event2.preventDefault();
          filteredImgRefs[0]?.scrollIntoView({ block: "start" });
        }
        return;
      }
      const backward = event2.shiftKey;
      const threshold = scrollY + (backward ? -10 : 10);
      if (backward) {
        for (const img of filteredImgRefs.slice().reverse()) {
          const imgTop = scrollY + img.getBoundingClientRect().top;
          if (imgTop < threshold) {
            event2.preventDefault();
            img.scrollIntoView({ block: "start" });
            return;
          }
        }
      } else {
        for (const img of filteredImgRefs) {
          const imgTop = scrollY + img.getBoundingClientRect().top;
          if (imgTop > threshold) {
            event2.preventDefault();
            img.scrollIntoView({ block: "start" });
            return;
          }
        }
      }
    }
    function handleKeyD(event2) {
      if (!getSettings("dKeyToDownload")) return;
      event2.preventDefault();
      handleDownload(event2);
    }
    function handleEscape() {
      if ($$_import_store().dropdown !== null) {
        $$_import_store().closeDropdown();
      } else if ($$_import_store().showSettings) {
        $$_import_store($$_import_store().showSettings = false);
        saveShowSettings($$_import_store().showSettings);
      }
    }
    function handleKeyS(event2) {
      if (!getSettings("sKeySettings")) return;
      if (!$$_import_store().showSettings) window.scrollTo({ top: 0 });
      toggleShowSettings(event2);
    }
    function handleDigit1() {
      window.scrollTo({ top: 0 });
    }
    function handleDigit2() {
      $$_import_store().ultraImages?.scrollIntoView({ block: "start" });
    }
    function handleDigit3() {
      $$_import_store().ultraPost?.scrollIntoView({ block: "start" });
    }
    function handleDigit4() {
      window.scrollTo({ top: document.body.scrollHeight });
    }
    function onvisibilitychange() {
      $$_import_store($$_import_store().documentHidden = document.hidden);
    }
    init();
    event("keydown", $window, onkeydown);
    event("storage", $window, function(...$$args) {
      onstorage?.apply(this, $$args);
    });
    event("visibilitychange", $document, onvisibilitychange);
    pop();
  }
  const Item$2 = ($$anchor, title = noop, content = noop) => {
    var div = root_1$d();
    var node = child(div);
    snippet(node, content);
    template_effect(() => set_attribute(div, "title", title()));
    append($$anchor, div);
  };
  const Messages = ($$anchor) => {
    const href = user_derived(() => "/forum/privmsg.php?folder=inbox");
    var a_2 = root_7$3();
    set_attribute(a_2, "href", get(href));
    var i = child(a_2);
    template_effect(() => set_class(i, 1, clsx(["fas", "fa-envelope", data.messages && "unread"]), "svelte-14s75i7"));
    append($$anchor, a_2);
  };
  const Settings$1 = ($$anchor) => {
    var fragment_3 = root_11$2();
    var a_4 = first_child(fragment_3);
    a_4.__click = function(...$$args) {
      toggleShowSettings?.apply(this, $$args);
    };
    var a_5 = sibling(a_4, 2);
    a_5.__click = function(...$$args) {
      toggleShowSettings?.apply(this, $$args);
    };
    append($$anchor, fragment_3);
  };
  function disableUserscript(event2) {
    event2.preventDefault();
    setUserscript(true);
  }
  var root_1$d = from_html(`<div class="item svelte-14s75i7"><!></div>`);
  var root_5$5 = from_html(`<a>Profile</a>`);
  var root_6$5 = from_html(`<a href="/">Login</a>`);
  var root_7$3 = from_html(`<a aria-label="inbox"><i></i></a>`);
  var root_9$2 = from_html(`<span class="themeIcon svelte-14s75i7"></span>`);
  var root_10 = from_html(`<a href="/" aria-label="placeholder"><i></i></a>`);
  var root_11$2 = from_html(`<a href="#settings"><img src="https://github.com/clangmoyai/plab-ultra/raw/main/src/assets/logo64.png" class="ultra-logo svelte-14s75i7" alt="logo"/></a> <a href="#settings">Settings</a>`, 1);
  var root_12$1 = from_html(`<a href="#disable">Disable</a>`);
  var root$5 = from_html(`<div id="x-header"><div class="logo svelte-14s75i7"><a href="/forum/index.php"><img alt=""/></a></div> <div class="align-right svelte-14s75i7"><div class="container svelte-14s75i7"><div class="links svelte-14s75i7"><!> <!> <!> <!> <!> <!></div> <div class="search svelte-14s75i7"><input type="text" name="search" placeholder="Search…" class="svelte-14s75i7"/> <button class="svelte-14s75i7">»</button></div></div></div></div>`);
  function Header($$anchor, $$props) {
    push($$props, true);
    const Profile = ($$anchor2) => {
      var fragment = comment();
      var node_1 = first_child(fragment);
      {
        var consequent = ($$anchor3) => {
          var text$1 = text("Profile");
          append($$anchor3, text$1);
        };
        var alternate_1 = ($$anchor3) => {
          var fragment_1 = comment();
          var node_2 = first_child(fragment_1);
          {
            var consequent_1 = ($$anchor4) => {
              var a = root_5$5();
              template_effect(() => {
                set_attribute(a, "href", data.user.link);
                set_attribute(a, "title", data.user?.name);
              });
              append($$anchor4, a);
            };
            var alternate = ($$anchor4) => {
              var a_1 = root_6$5();
              append($$anchor4, a_1);
            };
            if_block(
              node_2,
              ($$render) => {
                if (data.user?.link) $$render(consequent_1);
                else $$render(alternate, false);
              },
              true
            );
          }
          append($$anchor3, fragment_1);
        };
        if_block(node_1, ($$render) => {
          if (get(incognito)) $$render(consequent);
          else $$render(alternate_1, false);
        });
      }
      append($$anchor2, fragment);
    };
    const Theme = ($$anchor2) => {
      var fragment_2 = comment();
      var node_3 = first_child(fragment_2);
      {
        var consequent_2 = ($$anchor3) => {
          var span = root_9$2();
          attach(span, () => appendThemeButton(data.theme.element));
          append($$anchor3, span);
        };
        var alternate_2 = ($$anchor3) => {
          const darkMode = user_derived(() => data.theme?.darkmode);
          var a_3 = root_10();
          var i_1 = child(a_3);
          template_effect(() => set_class(i_1, 1, clsx([
            "fas",
            get(darkMode) && "fa-sun",
            !get(darkMode) && "fa-moon"
          ])));
          append($$anchor3, a_3);
        };
        if_block(node_3, ($$render) => {
          if (data.theme?.element) $$render(consequent_2);
          else $$render(alternate_2, false);
        });
      }
      append($$anchor2, fragment_2);
    };
    const Disable = ($$anchor2) => {
      var a_6 = root_12$1();
      a_6.__click = [disableUserscript];
      append($$anchor2, a_6);
    };
    let incognito = user_derived(() => getSettings("incognito"));
    let floatingDownload = user_derived(() => getSettings("floatingDownload"));
    let messagesTitle = user_derived(() => data.messages ? "Unread" : "Messages");
    let searchQuery = state$1("");
    function handleSearch2() {
      const url = "/forum/tracker.php?search_id=&nm=";
      window.location.href = `${url}${encodeURIComponent(get(searchQuery))}`;
    }
    function appendThemeButton(themeElement) {
      return (element) => {
        if (!(themeElement instanceof HTMLAnchorElement)) return;
        element.appendChild(themeElement);
        return () => {
          themeElement.remove();
        };
      };
    }
    var div_1 = root$5();
    let classes;
    var div_2 = child(div_1);
    var a_8 = child(div_2);
    var img = child(a_8);
    let classes_1;
    var div_3 = sibling(div_2, 2);
    var div_4 = child(div_3);
    var div_5 = child(div_4);
    var node_4 = child(div_5);
    Item$2(node_4, () => "Profile", () => Profile);
    var node_5 = sibling(node_4, 2);
    Item$2(node_5, () => get(messagesTitle), () => Messages);
    var node_6 = sibling(node_5, 2);
    Item$2(node_6, () => "Theme", () => Theme);
    var node_7 = sibling(node_6, 2);
    Item$2(node_7, () => "Settings", () => Settings$1);
    var node_8 = sibling(node_7, 2);
    {
      if_block(node_8, ($$render) => {
      });
    }
    var node_9 = sibling(node_8, 2);
    Item$2(node_9, () => "Disable", () => Disable);
    var div_6 = sibling(div_5, 2);
    var input = child(div_6);
    var button = sibling(input, 2);
    button.__click = handleSearch2;
    template_effect(
      ($0, $1) => {
        classes = set_class(div_1, 1, "svelte-14s75i7", null, classes, $0);
        set_attribute(img, "src", data.logo);
        classes_1 = set_class(img, 1, "svelte-14s75i7", null, classes_1, $1);
      },
      [
        () => ({ floatingDownload: get(floatingDownload) }),
        () => ({ incognito: get(incognito) })
      ]
    );
    event("keypress", input, (event2) => {
      if (event2.key === "Enter") handleSearch2();
    });
    bind_value(input, () => get(searchQuery), ($$value) => set(searchQuery, $$value));
    append($$anchor, div_1);
    pop();
  }
  delegate(["click"]);
  function onchange(event2) {
    const checkbox = event2.target;
    if (!checkbox) return;
    const handleToggleFileList = checkbox.id === "expandFiles" && store.showFileList !== checkbox.checked;
    if (handleToggleFileList) store.toggleFileList();
    const handleClearCache = checkbox.id === "cacheImages" && !checkbox.checked;
    if (handleClearCache) clearCache();
    saveOptions();
  }
  var on_click$4 = (event2) => {
    event2.currentTarget?.blur();
  };
  var root_3$6 = from_html(`<span class="description svelte-5e73jo"> </span>`);
  var root_2$5 = from_html(`<label><input type="checkbox" class="svelte-5e73jo"/> <span class="svelte-5e73jo"><!> <!></span></label>`);
  var root_1$c = from_html(`<div class="column svelte-5e73jo"><h2 class="svelte-5e73jo"> </h2> <!></div>`);
  var root$4 = from_html(`<div class="container svelte-5e73jo"></div>`);
  function Options($$anchor, $$props) {
    push($$props, true);
    let parseTitle = user_derived(() => getSettings("parseTitle"));
    var div = root$4();
    each(
      div,
      21,
      () => Object.entries(store.options),
      ([title, items]) => title,
      ($$anchor2, $$item) => {
        var $$array = user_derived(() => to_array(get($$item), 2));
        let title = () => get($$array)[0];
        let items = () => get($$array)[1];
        var div_1 = root_1$c();
        var h2 = child(div_1);
        var text2 = child(h2);
        var node = sibling(h2, 2);
        each(node, 17, items, (item) => item.key, ($$anchor3, item, $$index) => {
          const disabled = user_derived(() => !get(parseTitle) && (get(item).key === "performerLinks" || get(item).key === "showTags"));
          var label = root_2$5();
          let classes;
          var input = child(label);
          input.__change = [onchange];
          input.__click = [on_click$4];
          var span = sibling(input, 2);
          var node_1 = child(span);
          html(node_1, () => get(item).label);
          var node_2 = sibling(node_1, 2);
          {
            var consequent = ($$anchor4) => {
              var span_1 = root_3$6();
              var text_1 = child(span_1);
              template_effect(() => set_text(text_1, get(item).description));
              append($$anchor4, span_1);
            };
            if_block(node_2, ($$render) => {
              if (get(item).description) $$render(consequent);
            });
          }
          template_effect(
            ($0) => {
              classes = set_class(label, 1, "svelte-5e73jo", null, classes, $0);
              set_attribute(input, "id", get(item).key);
              input.disabled = get(disabled);
            },
            [() => ({ disabled: get(disabled) })]
          );
          bind_checked(input, () => get(item).value, ($$value) => get(item).value = $$value);
          append($$anchor3, label);
        });
        template_effect(() => set_text(text2, title()));
        append($$anchor2, div_1);
      }
    );
    append($$anchor, div);
    pop();
  }
  delegate(["change", "click"]);
  const linear = (x) => x;
  function cubic_out(t) {
    const f = t - 1;
    return f * f * f + 1;
  }
  function fade(node, { delay = 0, duration = 400, easing = linear } = {}) {
    const o = +getComputedStyle(node).opacity;
    return {
      delay,
      duration,
      easing,
      css: (t) => `opacity: ${t * o}`
    };
  }
  function slide(node, { delay = 0, duration = 400, easing = cubic_out, axis = "y" } = {}) {
    const style = getComputedStyle(node);
    const opacity = +style.opacity;
    const primary_property = axis === "y" ? "height" : "width";
    const primary_property_value = parseFloat(style[primary_property]);
    const secondary_properties = axis === "y" ? ["top", "bottom"] : ["left", "right"];
    const capitalized_secondary_properties = secondary_properties.map(
      (e) => (
`${e[0].toUpperCase()}${e.slice(1)}`
      )
    );
    const padding_start_value = parseFloat(style[`padding${capitalized_secondary_properties[0]}`]);
    const padding_end_value = parseFloat(style[`padding${capitalized_secondary_properties[1]}`]);
    const margin_start_value = parseFloat(style[`margin${capitalized_secondary_properties[0]}`]);
    const margin_end_value = parseFloat(style[`margin${capitalized_secondary_properties[1]}`]);
    const border_width_start_value = parseFloat(
      style[`border${capitalized_secondary_properties[0]}Width`]
    );
    const border_width_end_value = parseFloat(
      style[`border${capitalized_secondary_properties[1]}Width`]
    );
    return {
      delay,
      duration,
      easing,
      css: (t) => `overflow: hidden;opacity: ${Math.min(t * 20, 1) * opacity};${primary_property}: ${t * primary_property_value}px;padding-${secondary_properties[0]}: ${t * padding_start_value}px;padding-${secondary_properties[1]}: ${t * padding_end_value}px;margin-${secondary_properties[0]}: ${t * margin_start_value}px;margin-${secondary_properties[1]}: ${t * margin_end_value}px;border-${secondary_properties[0]}-width: ${t * border_width_start_value}px;border-${secondary_properties[1]}-width: ${t * border_width_end_value}px;min-${primary_property}: 0`
    };
  }
  function scale(node, { delay = 0, duration = 400, easing = cubic_out, start = 0, opacity = 0 } = {}) {
    const style = getComputedStyle(node);
    const target_opacity = +style.opacity;
    const transform = style.transform === "none" ? "" : style.transform;
    const sd = 1 - start;
    const od = target_opacity * (1 - opacity);
    return {
      delay,
      duration,
      easing,
      css: (_t, u) => `
			transform: ${transform} scale(${1 - sd * u});
			opacity: ${target_opacity - od * u}
		`
    };
  }
  function onclick(_, $$props, handleTransition) {
    $$props.onclick?.();
    handleTransition();
  }
  var root_1$b = from_html(`<span><!></span>`);
  var root_2$4 = from_svg(`<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="svelte-ig1se8"><path d="M9.86 18a1 1 0 0 1-.73-.32l-4.86-5.17a1 1 0 1 1 1.46-1.37l4.12 4.39l8.41-9.2a1 1 0 1 1 1.48 1.34l-9.14 10a1 1 0 0 1-.73.33Z" class="svelte-ig1se8"></path></svg>`);
  var root$3 = from_html(`<button class="svelte-ig1se8"><!></button>`);
  function Checkmark($$anchor, $$props) {
    push($$props, true);
    const DURATION = 1e3;
    let clicked = state$1(false);
    let timeout;
    let clientWidth = state$1(0);
    let clientHeight = state$1(0);
    let opts = user_derived(() => ({ ...store.transition, start: 0.6 }));
    function handleTransition() {
      set(clicked, true);
      if (timeout) clearTimeout(timeout);
      timeout = setTimeout(
        () => {
          set(clicked, false);
          timeout = null;
        },
        DURATION
      );
    }
    onDestroy(() => {
      if (timeout) clearTimeout(timeout);
    });
    var button = root$3();
    button.__click = [onclick, $$props, handleTransition];
    let styles;
    var node = child(button);
    {
      var consequent = ($$anchor2) => {
        var span = root_1$b();
        var node_1 = child(span);
        snippet(node_1, () => $$props.children);
        transition(3, span, () => scale, () => get(opts));
        bind_element_size(span, "clientWidth", ($$value) => set(clientWidth, $$value));
        bind_element_size(span, "clientHeight", ($$value) => set(clientHeight, $$value));
        append($$anchor2, span);
      };
      var alternate = ($$anchor2) => {
        var svg = root_2$4();
        var path = child(svg);
        transition(3, path, () => scale, () => get(opts));
        append($$anchor2, svg);
      };
      if_block(node, ($$render) => {
        if (!get(clicked)) $$render(consequent);
        else $$render(alternate, false);
      });
    }
    template_effect(
      ($0) => {
        set_attribute(button, "title", $$props.title);
        button.disabled = $$props.disabled;
        styles = set_style(button, "", styles, $0);
      },
      [
        () => ({
          width: `${get(clientWidth) ?? ""}px`,
          height: `${get(clientHeight) ?? ""}px`
        })
      ]
    );
    append($$anchor, button);
    pop();
  }
  delegate(["click"]);
  var root$2 = from_html(`<div class="container svelte-d5217q"><!> <div class="align-right svelte-d5217q"><!> <!> <!></div></div>`);
  function Actions($$anchor, $$props) {
    push($$props, true);
    let parseTitle = user_derived(() => getSettings("parseTitle"));
    let performerLinks = user_derived(() => getSettings("performerLinks"));
    var div = root$2();
    var node = child(div);
    {
      let $0 = user_derived(() => !get(parseTitle) || !get(performerLinks));
      Checkmark(node, {
        get onclick() {
          return addPerformerLink;
        },
        title: "Add performer link",
        get disabled() {
          return get($0);
        },
        children: ($$anchor2, $$slotProps) => {
          var text$1 = text("Add link");
          append($$anchor2, text$1);
        },
        $$slots: { default: true }
      });
    }
    var div_1 = sibling(node, 2);
    var node_1 = child(div_1);
    Checkmark(node_1, {
      get onclick() {
        return syncSettings;
      },
      title: "Sync settings to other tabs",
      children: ($$anchor2, $$slotProps) => {
        var text_1 = text("Sync");
        append($$anchor2, text_1);
      },
      $$slots: { default: true }
    });
    var node_2 = sibling(node_1, 2);
    Checkmark(node_2, {
      get onclick() {
        return restoreDefaultSettings;
      },
      title: "Restore all settings to default",
      children: ($$anchor2, $$slotProps) => {
        var text_2 = text("Restore");
        append($$anchor2, text_2);
      },
      $$slots: { default: true }
    });
    var node_3 = sibling(node_2, 2);
    Checkmark(node_3, {
      get onclick() {
        return exportSettings;
      },
      title: "Export settings as text file",
      children: ($$anchor2, $$slotProps) => {
        var text_3 = text("Export");
        append($$anchor2, text_3);
      },
      $$slots: { default: true }
    });
    append($$anchor, div);
    pop();
  }
  function slideFade(node, { delay = 0, duration = 400, easing = cubicOut, axis = "y" } = {}) {
    const style = getComputedStyle(node);
    const opacity = +style.opacity;
    const primary_property = axis === "y" ? "height" : "width";
    const primary_property_value = parseFloat(style[primary_property]);
    const secondary_properties = axis === "y" ? ["top", "bottom"] : ["left", "right"];
    const capitalized_secondary_properties = secondary_properties.map(
(e) => `${e[0].toUpperCase()}${e.slice(1)}`
    );
    const padding_start_value = parseFloat(
style[`padding${capitalized_secondary_properties[0]}`]
    );
    const padding_end_value = parseFloat(
style[`padding${capitalized_secondary_properties[1]}`]
    );
    const margin_start_value = parseFloat(
style[`margin${capitalized_secondary_properties[0]}`]
    );
    const margin_end_value = parseFloat(
style[`margin${capitalized_secondary_properties[1]}`]
    );
    const border_width_start_value = parseFloat(
style[`border${capitalized_secondary_properties[0]}Width`]
    );
    const border_width_end_value = parseFloat(
style[`border${capitalized_secondary_properties[1]}Width`]
    );
    return {
      delay,
      duration,
      easing,
      css: (t) => `overflow: hidden;opacity: ${t * opacity};${primary_property}: ${t * primary_property_value}px;padding-${secondary_properties[0]}: ${t * padding_start_value}px;padding-${secondary_properties[1]}: ${t * padding_end_value}px;margin-${secondary_properties[0]}: ${t * margin_start_value}px;margin-${secondary_properties[1]}: ${t * margin_end_value}px;border-${secondary_properties[0]}-width: ${t * border_width_start_value}px;border-${secondary_properties[1]}-width: ${t * border_width_end_value}px;min-${primary_property}: 0`
    };
  }
  const Favicon = ($$anchor, link2 = noop) => {
    const src = user_derived(() => getFaviconUrl(link2().url));
    var fragment = comment();
    var node = first_child(fragment);
    {
      var consequent = ($$anchor2) => {
        var img = root_2$3();
        template_effect(() => {
          set_attribute(img, "src", get(src));
          set_attribute(img, "alt", link2().label);
        });
        append($$anchor2, img);
      };
      if_block(node, ($$render) => {
        if (get(src)) $$render(consequent);
      });
    }
    append($$anchor, fragment);
  };
  const Remove = ($$anchor, index2 = noop) => {
    var button = root_4$3();
    button.__click = [on_click$3, index2];
    append($$anchor, button);
  };
  var root_2$3 = from_html(`<img class="svelte-6don7f"/>`);
  var on_input = (_, index2, key, link2) => updatePerformerLink(index2(), { [key()]: link2()[key()] });
  var root_3$5 = from_html(`<input type="text" class="svelte-6don7f"/>`);
  var on_click$3 = (__1, index2) => removePerformerLink(index2());
  var root_4$3 = from_html(`<button title="Remove link" class="svelte-6don7f">×</button>`);
  var root_6$4 = from_html(`<div class="item svelte-6don7f"><!> <!> <!> <!></div>`);
  var root_5$4 = from_html(`<div class="container svelte-6don7f"></div>`);
  function Links($$anchor, $$props) {
    push($$props, true);
    const Input = ($$anchor2, key = noop, link2 = noop, index2 = noop) => {
      var input = root_3$5();
      input.__input = [on_input, index2, key, link2];
      template_effect(() => {
        set_attribute(input, "name", placeholders[key()]);
        set_attribute(input, "placeholder", placeholders[key()]);
      });
      bind_value(input, () => link2()[key()], ($$value) => link2()[key()] = $$value);
      append($$anchor2, input);
    };
    const placeholders = { id: "ID", label: "Label", url: "URL" };
    let parseTitle = user_derived(() => getSettings("parseTitle"));
    let performerLinks = user_derived(() => getSettings("performerLinks"));
    var fragment_1 = comment();
    var node_1 = first_child(fragment_1);
    {
      var consequent_1 = ($$anchor2) => {
        var div = root_5$4();
        each(div, 23, () => store.performerLinks, (link2) => link2.id, ($$anchor3, link2, index2) => {
          var div_1 = root_6$4();
          var node_2 = child(div_1);
          Favicon(node_2, () => get(link2));
          var node_3 = sibling(node_2, 2);
          Input(node_3, () => "label", () => get(link2), () => get(index2));
          var node_4 = sibling(node_3, 2);
          Input(node_4, () => "url", () => get(link2), () => get(index2));
          var node_5 = sibling(node_4, 2);
          Remove(node_5, () => get(index2));
          transition(3, div_1, () => slideFade, () => store.transition);
          append($$anchor3, div_1);
        });
        transition(3, div, () => slideFade, () => store.transition);
        append($$anchor2, div);
      };
      if_block(node_1, ($$render) => {
        if (get(parseTitle) && get(performerLinks) && store.performerLinks?.length) $$render(consequent_1);
      });
    }
    append($$anchor, fragment_1);
    pop();
  }
  delegate(["input", "click"]);
  var root_1$a = from_html(`<div class="svelte-rmjlst"><button class="svelte-rmjlst">×</button> <!> <!> <!></div>`);
  function Settings($$anchor, $$props) {
    push($$props, false);
    init();
    var fragment = comment();
    var node = first_child(fragment);
    {
      var consequent = ($$anchor2) => {
        var div = root_1$a();
        var button = child(div);
        button.__click = function(...$$args) {
          toggleShowSettings?.apply(this, $$args);
        };
        var node_1 = sibling(button, 2);
        Options(node_1, {});
        var node_2 = sibling(node_1, 2);
        Links(node_2, {});
        var node_3 = sibling(node_2, 2);
        Actions(node_3, {});
        transition(3, div, () => slideFade, () => store.transition);
        append($$anchor2, div);
      };
      if_block(node, ($$render) => {
        if (store.showSettings) $$render(consequent);
      });
    }
    append($$anchor, fragment);
    pop();
  }
  delegate(["click"]);
  var root_1$9 = from_html(`<div class="svelte-hyxnps"><button class="ic--sharp-download svelte-hyxnps" title="Download" aria-label="Download"></button></div>`);
  function Float($$anchor, $$props) {
    push($$props, true);
    let floatingDownload = user_derived(() => getSettings("floatingDownload"));
    var fragment = comment();
    var node = first_child(fragment);
    {
      var consequent = ($$anchor2) => {
        var div = root_1$9();
        var button = child(div);
        button.__click = function(...$$args) {
          handleDownload?.apply(this, $$args);
        };
        transition(1, div, () => fade, () => store.transition);
        append($$anchor2, div);
      };
      if_block(node, ($$render) => {
        if (get(floatingDownload)) $$render(consequent);
      });
    }
    append($$anchor, fragment);
    pop();
  }
  delegate(["click"]);
  var root_3$4 = from_html(`<link rel="prefetch" as="image"/>`);
  var root_6$3 = from_html(`<a class="svelte-m808n"><img class="svelte-m808n"/> </a>`);
  var root_4$2 = from_html(`<div class="container svelte-m808n"><div class="indicator svelte-m808n"></div> <div class="items svelte-m808n"></div></div>`);
  function Dropdown$1($$anchor, $$props) {
    push($$props, true);
    let top = state$1(0);
    let left = state$1(0);
    let container = state$1(null);
    let currentTarget = user_derived(() => store.dropdown?.currentTarget);
    user_effect(
() => {
        if (!store.dropdown?.clientX || !store.dropdown?.clientY || !get(currentTarget)) return;
        const rect = getClickedRect(store.dropdown.clientX, store.dropdown.clientY);
        if (!rect) return;
        set(top, rect.bottom + window.scrollY);
        set(left, store.dropdown.clientX + window.scrollX);
        if (store.dropdown?.classList) get(currentTarget).classList.add(...store.dropdown.classList);
        return on(get(currentTarget), "pointerleave", onpointerleave);
      }
    );
    function getClickedRect(clientX, clientY) {
      const rects = get(currentTarget).getClientRects();
      if (!rects.length) return null;
      let clickedRect = null;
      for (let i = 0; i < rects.length; i++) {
        const rect = rects[i];
        if (rect && clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom) {
          clickedRect = rect;
          break;
        }
      }
      return clickedRect;
    }
    function onpointerleave(event2) {
      const related = event2.relatedTarget;
      if (get(currentTarget)?.contains(related) || get(container)?.contains(related)) return;
      store.closeDropdown();
    }
    function onclickcapture() {
      store.closeDropdown();
    }
    var fragment_2 = comment();
    head(($$anchor2) => {
      var fragment = comment();
      var node = first_child(fragment);
      each(node, 17, () => store.performerLinks, (link2) => link2.id, ($$anchor3, link2) => {
        var fragment_1 = comment();
        var node_1 = first_child(fragment_1);
        {
          var consequent = ($$anchor4) => {
            var link_1 = root_3$4();
            template_effect(() => set_attribute(link_1, "href", store.favIcons[get(link2).url]));
            append($$anchor4, link_1);
          };
          if_block(node_1, ($$render) => {
            if (get(link2).url && store.favIcons[get(link2).url]) $$render(consequent);
          });
        }
        append($$anchor3, fragment_1);
      });
      append($$anchor2, fragment);
    });
    var node_2 = first_child(fragment_2);
    {
      var consequent_2 = ($$anchor2) => {
        var div = root_4$2();
        let styles;
        var div_1 = sibling(child(div), 2);
        each(div_1, 21, () => store.performerLinks, (link2) => link2.id, ($$anchor3, link2) => {
          var fragment_3 = comment();
          var node_3 = first_child(fragment_3);
          {
            var consequent_1 = ($$anchor4) => {
              var a = root_6$3();
              var img = child(a);
              var text2 = sibling(img);
              template_effect(
                ($0) => {
                  set_attribute(a, "href", $0);
                  set_attribute(img, "src", store.favIcons[get(link2).url]);
                  set_attribute(img, "alt", get(link2).label);
                  set_text(text2, ` ${get(link2).label ?? ""}`);
                },
                [() => getLinkUrl(get(link2), store.dropdown.item)]
              );
              event("click", a, onclickcapture, true);
              append($$anchor4, a);
            };
            if_block(node_3, ($$render) => {
              if (get(link2).label && get(link2).url && store.favIcons[get(link2).url] && store.dropdown?.item) $$render(consequent_1);
            });
          }
          append($$anchor3, fragment_3);
        });
        bind_this(div, ($$value) => set(container, $$value), () => get(container));
        template_effect(($0) => styles = set_style(div, "", styles, $0), [
          () => ({ top: `${get(top) ?? ""}px`, left: `${get(left) ?? ""}px` })
        ]);
        event("pointerleave", div, onpointerleave);
        transition(2, div, () => fade, () => store.transition);
        append($$anchor2, div);
      };
      if_block(node_2, ($$render) => {
        if (store.dropdown) $$render(consequent_2);
      });
    }
    append($$anchor, fragment_2);
    pop();
  }
  const Dropdown = ($$anchor, item = noop) => {
    var span = root_3$3();
    span.__click = [on_click$2, item];
    var text2 = child(span);
    template_effect(() => set_text(text2, item()));
    append($$anchor, span);
  };
  const Placholder = ($$anchor) => {
    const items = user_derived(() => ["Performer", "Title"]);
    var fragment_1 = comment();
    var node_1 = first_child(fragment_1);
    each(node_1, 17, () => get(items), index, ($$anchor2, item, i) => {
      var fragment_2 = root_5$3();
      var text_1 = first_child(fragment_2);
      text_1.nodeValue = `${i > 0 ? " - " : ""} `;
      var node_2 = sibling(text_1);
      Dropdown(node_2, () => get(item));
      append($$anchor2, fragment_2);
    });
    append($$anchor, fragment_1);
  };
  var on_click$2 = (event2, item) => store.openDropdown(event2, item(), ["title-item--hover"]);
  var root_3$3 = from_html(`<span class="title-item svelte-12bxepp"> </span>`);
  var root_5$3 = from_html(` <!>`, 1);
  var root_9$1 = from_html(`<a class="title-item svelte-12bxepp"> </a>`);
  var root_11$1 = from_html(`<a class="title-item svelte-12bxepp"> </a>`);
  var root_15$1 = from_html(`<h1 id="x-title" class="svelte-12bxepp"><!></h1>`);
  var root_17 = from_html(`<h1 id="x-title" class="svelte-12bxepp"> </h1>`);
  var root_19$1 = from_html(`<h1 id="x-title" class="svelte-12bxepp"><!></h1>`);
  var root_21 = from_html(`<h1 id="x-title" class="svelte-12bxepp"><a class="original-title svelte-12bxepp"> </a></h1>`);
  function Title($$anchor, $$props) {
    push($$props, true);
    const ParsedTitle = ($$anchor2, searchTerms2 = noop) => {
      const validLinks = user_derived(() => store.performerLinks.filter((link2) => link2.url && link2.label));
      var fragment_3 = comment();
      var node_3 = first_child(fragment_3);
      each(node_3, 17, () => get(items), index, ($$anchor3, item) => {
        var fragment_4 = comment();
        var node_4 = first_child(fragment_4);
        {
          var consequent_4 = ($$anchor4) => {
            var fragment_5 = comment();
            var node_5 = first_child(fragment_5);
            {
              var consequent_1 = ($$anchor5) => {
                var a_1 = root_9$1();
                var text_2 = child(a_1);
                template_effect(
                  ($0) => {
                    set_attribute(a_1, "href", `/forum/tracker.php?nm=${$0 ?? ""}`);
                    set_text(text_2, get(item));
                  },
                  [() => encodeURIComponent(get(item))]
                );
                append($$anchor5, a_1);
              };
              var alternate_1 = ($$anchor5) => {
                var fragment_6 = comment();
                var node_6 = first_child(fragment_6);
                {
                  var consequent_2 = ($$anchor6) => {
                    var a_2 = root_11$1();
                    var text_3 = child(a_2);
                    template_effect(
                      ($0) => {
                        set_attribute(a_2, "href", $0);
                        set_text(text_3, get(item));
                      },
                      [() => getLinkUrl(store.performerLinks[0], get(item))]
                    );
                    append($$anchor6, a_2);
                  };
                  var alternate = ($$anchor6) => {
                    var fragment_7 = comment();
                    var node_7 = first_child(fragment_7);
                    {
                      var consequent_3 = ($$anchor7) => {
                        Dropdown($$anchor7, () => get(item));
                      };
                      if_block(
                        node_7,
                        ($$render) => {
                          if (get(validLinks).length > 1) $$render(consequent_3);
                        },
                        true
                      );
                    }
                    append($$anchor6, fragment_7);
                  };
                  if_block(
                    node_6,
                    ($$render) => {
                      if (get(validLinks).length === 1 && store.performerLinks[0]) $$render(consequent_2);
                      else $$render(alternate, false);
                    },
                    true
                  );
                }
                append($$anchor5, fragment_6);
              };
              if_block(node_5, ($$render) => {
                if (get(validLinks).length === 0 || !get(performerLinks)) $$render(consequent_1);
                else $$render(alternate_1, false);
              });
            }
            append($$anchor4, fragment_5);
          };
          var alternate_2 = ($$anchor4) => {
            var text_4 = text();
            template_effect(() => set_text(text_4, get(item)));
            append($$anchor4, text_4);
          };
          if_block(node_4, ($$render) => {
            if (get(item) && searchTerms2().includes(get(item))) $$render(consequent_4);
            else $$render(alternate_2, false);
          });
        }
        append($$anchor3, fragment_4);
      });
      append($$anchor2, fragment_3);
    };
    let incognito = user_derived(() => getSettings("incognito"));
    let parseTitle = user_derived(() => getSettings("parseTitle"));
    let performerLinks = user_derived(() => getSettings("performerLinks"));
    let title = user_derived(() => data.title?.parsed);
    let searchTerms = user_derived(() => data.title?.searchTerms);
    let original = user_derived(() => data.title?.original);
    let firstTag = user_derived(() => {
      const tag = data.title?.tags?.[0];
      if (get(searchTerms)?.length === 0 && tag) return tag;
      return;
    });
    let items = user_derived(
() => {
        if (!get(title) || !get(searchTerms)?.length) return [get(title)];
        const sortedTerms = [...get(searchTerms)].sort((a, b) => b.length - a.length);
        const parts = [];
        let remaining = get(title);
        while (remaining) {
          let foundMatch = null;
          let foundIndex = remaining.length;
          for (const term of sortedTerms) {
            const index2 = remaining.indexOf(term);
            if (index2 !== -1 && index2 < foundIndex) {
              foundMatch = term;
              foundIndex = index2;
            }
          }
          if (foundMatch) {
            if (foundIndex > 0) parts.push(remaining.slice(0, foundIndex));
            parts.push(foundMatch);
            remaining = remaining.slice(foundIndex + foundMatch.length);
          } else {
            parts.push(remaining);
            break;
          }
        }
        return parts.filter((part) => part !== "");
      }
    );
    let documentTitle = user_derived(
() => {
        if (get(parseTitle)) {
          if (get(firstTag)) {
            return get(firstTag);
          } else if (get(title)) {
            return get(title);
          }
        }
        return document.title;
      }
    );
    var fragment_10 = comment();
    head(($$anchor2) => {
      var fragment = comment();
      var node = first_child(fragment);
      {
        var consequent = ($$anchor3) => {
          template_effect(() => $document.title = get(documentTitle));
        };
        if_block(node, ($$render) => {
          if (get(documentTitle)) $$render(consequent);
        });
      }
      append($$anchor2, fragment);
    });
    var node_8 = first_child(fragment_10);
    {
      var consequent_5 = ($$anchor2) => {
        var h1 = root_15$1();
        var node_9 = child(h1);
        Placholder(node_9);
        append($$anchor2, h1);
      };
      var alternate_5 = ($$anchor2) => {
        var fragment_11 = comment();
        var node_10 = first_child(fragment_11);
        {
          var consequent_6 = ($$anchor3) => {
            var h1_1 = root_17();
            var text_5 = child(h1_1);
            template_effect(() => set_text(text_5, get(firstTag)));
            append($$anchor3, h1_1);
          };
          var alternate_4 = ($$anchor3) => {
            var fragment_12 = comment();
            var node_11 = first_child(fragment_12);
            {
              var consequent_7 = ($$anchor4) => {
                var h1_2 = root_19$1();
                var node_12 = child(h1_2);
                ParsedTitle(node_12, () => get(searchTerms));
                append($$anchor4, h1_2);
              };
              var alternate_3 = ($$anchor4) => {
                var fragment_13 = comment();
                var node_13 = first_child(fragment_13);
                {
                  var consequent_8 = ($$anchor5) => {
                    var h1_3 = root_21();
                    var a_3 = child(h1_3);
                    var text_6 = child(a_3);
                    template_effect(
                      ($0) => {
                        set_attribute(a_3, "href", `/forum/tracker.php?nm=${$0 ?? ""}`);
                        set_text(text_6, get(original));
                      },
                      [() => encodeURIComponent(get(original))]
                    );
                    append($$anchor5, h1_3);
                  };
                  if_block(
                    node_13,
                    ($$render) => {
                      if (get(original)) $$render(consequent_8);
                    },
                    true
                  );
                }
                append($$anchor4, fragment_13);
              };
              if_block(
                node_11,
                ($$render) => {
                  if (get(parseTitle) && get(title) && get(searchTerms)) $$render(consequent_7);
                  else $$render(alternate_3, false);
                },
                true
              );
            }
            append($$anchor3, fragment_12);
          };
          if_block(
            node_10,
            ($$render) => {
              if (get(firstTag)) $$render(consequent_6);
              else $$render(alternate_4, false);
            },
            true
          );
        }
        append($$anchor2, fragment_11);
      };
      if_block(node_8, ($$render) => {
        if (get(incognito)) $$render(consequent_5);
        else $$render(alternate_5, false);
      });
    }
    append($$anchor, fragment_10);
    pop();
  }
  delegate(["click"]);
  var root_1$8 = from_html(`<button class="item svelte-1ilvoyd" aria-label="thank"></button>`);
  function Thank($$anchor, $$props) {
    push($$props, true);
    let observer2;
    let clicked = state$1(false);
    let success = state$1(false);
    let disabled = user_derived(
() => {
        if (get(success)) return true;
        if (!data.thank?.list) return false;
        const userLink = data.user?.link;
        if (!userLink) return false;
        const userId = new URL(userLink, location.href).searchParams.get("u");
        if (!userId) return false;
        return data.thank?.list.has(userId);
      }
    );
    let title = user_derived(
() => {
        if (get(disabled)) return "Already thanked";
        return;
      }
    );
    function handleValue(value) {
      if (data.thank?.element && data.thank?.element instanceof HTMLInputElement) data.thank.element.value = "Thanks: " + value;
    }
    function handleElement(thank) {
      return (element) => {
        if (thank) for (const attr of ["title", "style", "class"]) thank.removeAttribute(attr);
        if (get(disabled)) {
          handleValue("Given");
        } else if (get(clicked) && !get(disabled)) {
          handleValue("Loading...");
        } else {
          handleValue("Give");
        }
        element.appendChild(thank);
        return () => thank.remove();
      };
    }
    function onclick2(event2) {
      if (get(disabled) || get(clicked)) return;
      set(clicked, true);
      observer2?.disconnect();
      const currentTarget = event2.currentTarget;
      const callback = (mutationList, observer3) => {
        for (const mutation of mutationList) {
          if (mutation.type !== "childList") continue;
          mutation.addedNodes.forEach((node) => {
            if (node instanceof HTMLHeadingElement) {
              node.remove();
              set(success, true);
              observer3.disconnect();
            }
          });
        }
      };
      observer2 = new MutationObserver(callback);
      observer2.observe(currentTarget, { childList: true });
    }
    onDestroy(() => observer2?.disconnect());
    var fragment = comment();
    var node_1 = first_child(fragment);
    {
      var consequent = ($$anchor2) => {
        var button = root_1$8();
        button.__click = onclick2;
        attach(button, () => handleElement(data.thank.element));
        template_effect(() => {
          set_attribute(button, "title", get(title));
          button.disabled = get(disabled);
        });
        append($$anchor2, button);
      };
      if_block(node_1, ($$render) => {
        if (data.thank?.element) $$render(consequent);
      });
    }
    append($$anchor, fragment);
    pop();
  }
  delegate(["click"]);
  const Item$1 = ($$anchor, title = noop, data2 = noop) => {
    var fragment = comment();
    var node = first_child(fragment);
    {
      var consequent = ($$anchor2) => {
        var div = root_2$2();
        var span = child(div);
        var text2 = child(span);
        var span_1 = sibling(span, 2);
        var text_1 = child(span_1);
        template_effect(
          ($0) => {
            set_text(text2, `${title() ?? ""}:`);
            set_class(span_1, 1, $0, "svelte-7pdkl5");
            set_text(text_1, data2());
          },
          [() => clsx(title().toLowerCase())]
        );
        append($$anchor2, div);
      };
      var alternate = ($$anchor2) => {
        Error$1($$anchor2, title);
      };
      if_block(node, ($$render) => {
        if (data2()) $$render(consequent);
        else $$render(alternate, false);
      });
    }
    append($$anchor, fragment);
  };
  const Error$1 = ($$anchor, title = noop) => {
    var div_1 = root_4$1();
    var span_2 = child(div_1);
    var text_2 = child(span_2);
    template_effect(() => set_text(text_2, `${title() ?? ""}:`));
    append($$anchor, div_1);
  };
  function handleDateClick(_, showFullDate) {
    set(showFullDate, !get(showFullDate));
  }
  function handleFileListClick(__1, fileListState) {
    if (store.showFileList) {
      set(fileListState, "idle");
    } else {
      set(fileListState, "loading");
    }
    store.toggleFileList();
  }
  var root_2$2 = from_html(`<div class="item svelte-7pdkl5"><span class="title"> </span> <span> </span></div>`);
  var root_4$1 = from_html(`<div class="item svelte-7pdkl5"><span class="title"> </span> <span class="error svelte-7pdkl5">N/A</span></div>`);
  var root_6$2 = from_html(`<button class="item svelte-7pdkl5"><span class="title">Date:</span> <!></button>`);
  var root_14 = from_html(`<span class="item svelte-7pdkl5"><!></span>`);
  var root_22 = from_html(`<a>.torrent</a>`);
  var root_18 = from_html(`<button class="item svelte-7pdkl5"><span class="title">Download:</span> <!></button>`);
  var root_27 = from_html(`<span><a> </a> </span>`);
  var root_26 = from_html(`<div class="item svelte-7pdkl5"><span class="title">Related:</span> <!></div>`);
  var root_5$2 = from_html(`<div id="x-stats" class="svelte-7pdkl5"><!> <!> <!> <!> <button class="item svelte-7pdkl5"><span class="title">Files:</span> <!></button> <!> <!> <!> <!></div>`);
  function Stats($$anchor, $$props) {
    push($$props, true);
    let showFullDate = state$1(false);
    let expandFiles = user_derived(() => getSettings("expandFiles"));
    let fileListState = state$1("idle");
    let downloadState = "idle";
    onMount(
() => {
        if (get(expandFiles)) {
          store.toggleFileList();
        }
      }
    );
    user_effect(
() => {
        if (!store.showFileList) {
          set(fileListState, "idle");
        }
        if (store.fileListData && get(fileListState) === "loading") {
          set(fileListState, "loaded");
        }
      }
    );
    var fragment_2 = comment();
    var node_1 = first_child(fragment_2);
    {
      var consequent_12 = ($$anchor2) => {
        var div_2 = root_5$2();
        var node_2 = child(div_2);
        Item$1(node_2, () => "Seeders", () => data.torrent?.seeders || "0");
        var node_3 = sibling(node_2, 2);
        Item$1(node_3, () => "Leechers", () => data.torrent?.leechers || "0");
        var node_4 = sibling(node_3, 2);
        Item$1(node_4, () => "Size", () => data.torrent?.size);
        var node_5 = sibling(node_4, 2);
        {
          var consequent_2 = ($$anchor3) => {
            var button = root_6$2();
            button.__click = [handleDateClick, showFullDate];
            var node_6 = sibling(child(button), 2);
            {
              var consequent_1 = ($$anchor4) => {
                var text_3 = text();
                template_effect(($0) => set_text(text_3, $0), [() => handleRelativeDate(data.torrent.date)]);
                append($$anchor4, text_3);
              };
              var alternate_1 = ($$anchor4) => {
                var text_4 = text();
                template_effect(($0) => set_text(text_4, $0), [() => data.torrent.date?.toLocaleString()]);
                append($$anchor4, text_4);
              };
              if_block(node_6, ($$render) => {
                if (!get(showFullDate)) $$render(consequent_1);
                else $$render(alternate_1, false);
              });
            }
            append($$anchor3, button);
          };
          var alternate_2 = ($$anchor3) => {
            Error$1($$anchor3, () => "Date");
          };
          if_block(node_5, ($$render) => {
            if (data.torrent?.date) $$render(consequent_2);
            else $$render(alternate_2, false);
          });
        }
        var button_1 = sibling(node_5, 2);
        button_1.__click = [handleFileListClick, fileListState];
        var node_7 = sibling(child(button_1), 2);
        {
          var consequent_3 = ($$anchor3) => {
            var text_5 = text("Loading...");
            append($$anchor3, text_5);
          };
          var alternate_4 = ($$anchor3) => {
            var fragment_6 = comment();
            var node_8 = first_child(fragment_6);
            {
              var consequent_4 = ($$anchor4) => {
                var text_6 = text("Hide");
                append($$anchor4, text_6);
              };
              var alternate_3 = ($$anchor4) => {
                var text_7 = text("Show");
                append($$anchor4, text_7);
              };
              if_block(
                node_8,
                ($$render) => {
                  if (store.showFileList) $$render(consequent_4);
                  else $$render(alternate_3, false);
                },
                true
              );
            }
            append($$anchor3, fragment_6);
          };
          if_block(node_7, ($$render) => {
            if (get(fileListState) === "loading") $$render(consequent_3);
            else $$render(alternate_4, false);
          });
        }
        var node_9 = sibling(button_1, 2);
        {
          var consequent_5 = ($$anchor3) => {
            var span_3 = root_14();
            var node_10 = child(span_3);
            Thank(node_10, {});
            append($$anchor3, span_3);
          };
          var alternate_5 = ($$anchor3) => {
            Error$1($$anchor3, () => "Thanks");
          };
          if_block(node_9, ($$render) => {
            if (data.thank?.element && data.thank?.list) $$render(consequent_5);
            else $$render(alternate_5, false);
          });
        }
        var node_11 = sibling(node_9, 2);
        {
          var consequent_6 = ($$anchor3) => {
            const format = user_derived(() => new Intl.NumberFormat("en-US").format(data.torrent.times));
            Item$1($$anchor3, () => "Downloads", () => get(format));
          };
          var alternate_6 = ($$anchor3) => {
            Error$1($$anchor3, () => "Downloads");
          };
          if_block(node_11, ($$render) => {
            if (data.torrent?.times != null) $$render(consequent_6);
            else $$render(alternate_6, false);
          });
        }
        var node_12 = sibling(node_11, 2);
        {
          var consequent_9 = ($$anchor3) => {
            var button_2 = root_18();
            button_2.__click = function(...$$args) {
              handleDownload?.apply(this, $$args);
            };
            button_2.disabled = downloadState === "downloading";
            var node_13 = sibling(child(button_2), 2);
            {
              var alternate_8 = ($$anchor4) => {
                var fragment_10 = comment();
                var node_14 = first_child(fragment_10);
                {
                  var alternate_7 = ($$anchor5) => {
                    var a = root_22();
                    template_effect(() => set_attribute(a, "href", data.torrent?.link));
                    append($$anchor5, a);
                  };
                  if_block(
                    node_14,
                    ($$render) => {
                      $$render(alternate_7, false);
                    },
                    true
                  );
                }
                append($$anchor4, fragment_10);
              };
              if_block(node_13, ($$render) => {
                $$render(alternate_8, false);
              });
            }
            append($$anchor3, button_2);
          };
          var alternate_9 = ($$anchor3) => {
            Error$1($$anchor3, () => "Download");
          };
          if_block(node_12, ($$render) => {
            if (data.torrent) $$render(consequent_9);
            else $$render(alternate_9, false);
          });
        }
        var node_15 = sibling(node_12, 2);
        {
          var consequent_11 = ($$anchor3) => {
            const max = user_derived(() => 5);
            var fragment_12 = comment();
            var node_16 = first_child(fragment_12);
            await_block(node_16, () => getRelated(data.title.original), null, ($$anchor4, related) => {
              const results = user_derived(() => get(related).filter((result) => result.textContent !== data.title?.original));
              var fragment_13 = comment();
              var node_17 = first_child(fragment_13);
              {
                var consequent_10 = ($$anchor5) => {
                  var div_3 = root_26();
                  var node_18 = sibling(child(div_3), 2);
                  each(node_18, 17, () => get(results), index, ($$anchor6, result, i) => {
                    var span_4 = root_27();
                    var a_1 = child(span_4);
                    var text_10 = child(a_1);
                    var text_11 = sibling(a_1);
                    template_effect(() => {
                      set_attribute(a_1, "href", get(result).href);
                      set_text(text_10, get(result).resolution);
                      set_text(text_11, ` ${i < get(results).length - 1 ? ", " : ""}`);
                    });
                    append($$anchor6, span_4);
                  });
                  append($$anchor5, div_3);
                };
                if_block(node_17, ($$render) => {
                  if (get(results).length > 0 && get(results).length < get(max)) $$render(consequent_10);
                });
              }
              append($$anchor4, fragment_13);
            });
            append($$anchor3, fragment_12);
          };
          if_block(node_15, ($$render) => {
            if (data.title?.original) $$render(consequent_11);
          });
        }
        template_effect(() => button_1.disabled = get(fileListState) === "loading");
        append($$anchor2, div_2);
      };
      if_block(node_1, ($$render) => {
        if (data.user && !data.forumline) $$render(consequent_12);
      });
    }
    append($$anchor, fragment_2);
    pop();
  }
  delegate(["click"]);
  var root_3$2 = from_html(`<a> </a>`);
  var root_6$1 = from_html(`<a> </a>`);
  var on_click$1 = (event2, item) => store.openDropdown(event2, get(item), ["tag-item--hover"]);
  var root_7$2 = from_html(`<span> </span>`);
  var root_1$7 = from_html(`<div id="x-tags" class="svelte-hxarl5"></div>`);
  function Tags($$anchor, $$props) {
    push($$props, true);
    let parseTitle = user_derived(() => getSettings("parseTitle"));
    let showTags = user_derived(() => getSettings("showTags"));
    let performerLinks = user_derived(() => getSettings("performerLinks"));
    let derivedTags = user_derived(
() => {
        if (getSettings("incognito")) return ["tag1", "tag2", "tag3", "tag4", "tag5"];
        const tags = data?.title?.tags || [];
        return [...new Set(tags)];
      }
    );
    function resTag(tag) {
      return /\b(?:\d{3,}p|\d+k)\b/i.test(tag);
    }
    var fragment = comment();
    var node = first_child(fragment);
    {
      var consequent_3 = ($$anchor2) => {
        var div = root_1$7();
        each(div, 21, () => get(derivedTags), index, ($$anchor3, item) => {
          const classList = user_derived(() => ["tag-item", resTag(get(item)) && "tag-res"]);
          var fragment_1 = comment();
          var node_1 = first_child(fragment_1);
          {
            var consequent = ($$anchor4) => {
              var a = root_3$2();
              var text2 = child(a);
              template_effect(
                ($0) => {
                  set_class(a, 1, clsx(get(classList)), "svelte-hxarl5");
                  set_attribute(a, "href", `/forum/tracker.php?nm=${$0 ?? ""}`);
                  set_text(text2, get(item));
                },
                [() => encodeURIComponent(get(item))]
              );
              append($$anchor4, a);
            };
            var alternate_1 = ($$anchor4) => {
              var fragment_2 = comment();
              var node_2 = first_child(fragment_2);
              {
                var consequent_2 = ($$anchor5) => {
                  const link2 = user_derived(() => store.performerLinks[0]);
                  var fragment_3 = comment();
                  var node_3 = first_child(fragment_3);
                  {
                    var consequent_1 = ($$anchor6) => {
                      var a_1 = root_6$1();
                      var text_1 = child(a_1);
                      template_effect(
                        ($0) => {
                          set_class(a_1, 1, clsx(get(classList)), "svelte-hxarl5");
                          set_attribute(a_1, "href", $0);
                          set_text(text_1, get(item));
                        },
                        [() => getLinkUrl(get(link2), get(item))]
                      );
                      append($$anchor6, a_1);
                    };
                    if_block(node_3, ($$render) => {
                      if (get(link2)) $$render(consequent_1);
                    });
                  }
                  append($$anchor5, fragment_3);
                };
                var alternate = ($$anchor5) => {
                  var span = root_7$2();
                  span.__click = [on_click$1, item];
                  var text_2 = child(span);
                  template_effect(() => {
                    set_class(span, 1, clsx(get(classList)), "svelte-hxarl5");
                    set_text(text_2, get(item));
                  });
                  append($$anchor5, span);
                };
                if_block(
                  node_2,
                  ($$render) => {
                    if (store.performerLinks.length === 1) $$render(consequent_2);
                    else $$render(alternate, false);
                  },
                  true
                );
              }
              append($$anchor4, fragment_2);
            };
            if_block(node_1, ($$render) => {
              if (!get(performerLinks)) $$render(consequent);
              else $$render(alternate_1, false);
            });
          }
          append($$anchor3, fragment_1);
        });
        transition(3, div, () => slideFade, () => store.transition);
        append($$anchor2, div);
      };
      if_block(node, ($$render) => {
        if (get(parseTitle) && get(showTags) && get(derivedTags)?.length) $$render(consequent_3);
      });
    }
    append($$anchor, fragment);
    pop();
  }
  delegate(["click"]);
  var root_1$6 = from_html(`<div class="filelist svelte-eqeghx"><!></div>`);
  function FileList($$anchor, $$props) {
    push($$props, true);
    function humanSize(bytes) {
      if (bytes <= 0) return "0 B";
      const units = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
      const rounders = [1, 1, 1, 100, 1e3, 1e3, 1e3, 1e3, 1e3];
      const idx = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), units.length - 1);
      let value = bytes / Math.pow(1024, idx);
      const factor = rounders[idx];
      if (!factor) return null;
      value = Math.round((value + Number.EPSILON) * factor) / factor;
      return `${value} ${units[idx]}`;
    }
    async function getFileList() {
      const t = new URL(location.href).searchParams.get("t");
      if (!t) {
        console.error('Missing "t" parameter');
        return;
      }
      try {
        const res = await fetch("viewtorrent.php", {
          method: "POST",
          headers: { "Content-Type": "application/x-www-form-urlencoded" },
          body: new URLSearchParams({ t }).toString()
        });
        if (!res.ok) {
          console.error(`Server error: ${res.status}`);
          return;
        }
        const raw = await res.text();
        const doc = new DOMParser().parseFromString(raw, "text/html");
        doc.querySelectorAll("li.collapsable").forEach((li) => {
          let dirSize = 0;
          li.querySelectorAll("i").forEach((i) => {
            dirSize += parseInt(i.textContent?.trim() || "0", 10);
          });
          const spanB = li.querySelector("span.b");
          if (spanB) {
            const s = doc.createElement("s");
            s.textContent = humanSize(dirSize);
            spanB.append(" · ", s);
          }
        });
        doc.querySelectorAll("i").forEach((i) => {
          const bytes = parseInt(i.textContent?.trim() || "0", 10);
          i.textContent = humanSize(bytes);
        });
        store.fileListData = doc.body.innerHTML;
      } catch (err) {
        console.error("Failed to fetch/transform torrent filelist:", err);
      }
    }
    user_effect(
() => {
        if (!store.fileListData && store.showFileList) {
          getFileList();
        }
      }
    );
    var fragment = comment();
    var node = first_child(fragment);
    {
      var consequent = ($$anchor2) => {
        var div = root_1$6();
        var node_1 = child(div);
        html(node_1, () => store.fileListData);
        transition(3, div, () => slideFade, () => store.transition);
        append($$anchor2, div);
      };
      if_block(node, ($$render) => {
        if (store.fileListData && store.showFileList) $$render(consequent);
      });
    }
    append($$anchor, fragment);
    pop();
  }
  const parser$2 = new DOMParser();
  async function generic(href, selector, headers) {
    const { response, responseText, finalUrl } = await GM_fetch(
      "GET",
      href,
      "blob",
      headers
    );
    if (response.type.startsWith("image/")) {
      return finalUrl;
    }
    const doc = parser$2.parseFromString(responseText, "text/html");
    const img = doc.querySelector(selector);
    const src = img?.getAttribute("src");
    if (!src) {
      throw new Error(`image not found: ${href}`);
    }
    return new URL(src, href).href;
  }
  async function imagebam(href, selector) {
    const headers = { Cookie: "nsfw_inter=1" };
    return generic(href, selector, headers);
  }
  async function imagenimage(href, src) {
    const match = src?.match(
      /(https:\/\/img\d+\.imagenimage\.com\/)th\/(.+)\.jpg/
    );
    if (!src || !match) {
      const selector = "#left > a > img";
      return generic(href, selector);
    }
    const domain = match[1];
    const path = match[2];
    const linkMatch = href.match(/https:\/\/imagenimage\.com\/(.+)/);
    if (!linkMatch) {
      throw new Error(`Invalid URL: ${href}`);
    }
    const filename = linkMatch[1];
    const imgSrc = `${domain}i/${path}.jpg/${filename}`;
    return imgSrc;
  }
  async function imagetwist(href, src) {
    let imgSrc;
    if (src && src.includes("/th/")) {
      const extRegex = /\.([\w]{2,4})(\?|$)/;
      const hrefExt = href.match(extRegex)?.[1];
      imgSrc = src.replace("/th/", "/i/");
      if (hrefExt) {
        imgSrc = imgSrc.replace(extRegex, `.${hrefExt}$2`);
      }
      const response = await GM_fetch("HEAD", imgSrc, "text");
      const imgError = /content-length:\s*8183/i.test(response.responseHeaders);
      if (!imgError) {
        return await getBlob(imgSrc);
      }
    }
    imgSrc = await generic(href, "img.pic");
    if (!imgSrc) {
      throw new Error(`image not found: ${href}`);
    }
    return await getBlob(imgSrc);
  }
  async function imgbase(href, src) {
    if (!src) return href;
    return src.replace("-thumb.", ".");
  }
  async function imgbox(href) {
    if (href.includes("thumbs"))
      return href.replace("thumbs", "images").replace("_t.", "_o.");
    const selector = "#img";
    return generic(href, selector);
  }
  const parser$1 = new DOMParser();
  async function imgbum(href) {
    const { responseText } = await GM_fetch("GET", href, "text");
    const doc = parser$1.parseFromString(responseText, "text/html");
    const selector = "table > tbody > tr > td > img";
    const img = doc.querySelector(selector);
    const onclick2 = img?.getAttribute("onclick");
    const match = onclick2?.match(/\/\*mshow\('([^']+)'\);\*\//);
    const imgSrc = match?.[1];
    if (!imgSrc) {
      throw new Error(`image not found: ${href}`);
    }
    return new URL(imgSrc, href).href;
  }
  async function imgdrive(href, src) {
    if (!src) return href;
    const imgSrc = src.replace("/small/", "/big/");
    if (src.includes("imgwallet.com")) return imgSrc;
    return await getBlob(imgSrc);
  }
  async function imgfrost(href, src) {
    if (!src) return Promise.resolve(href);
    const parsed = new URL(src);
    parsed.hostname = "prcf.imglomalr.site";
    parsed.pathname = parsed.pathname.replace("/small/small_", "/big/");
    const headers = { Referer: "https://imgair.net" };
    const { response, finalUrl } = await GM_fetch(
      "GET",
      parsed.href,
      "blob",
      headers
    );
    if (!response.type.startsWith("image/")) {
      throw new Error(`Expected image but got ${response.type} from ${finalUrl}`);
    }
    return finalUrl;
  }
  async function piccash(href, src) {
    let imgSrc;
    if (src && src.includes("img_thumb")) {
      imgSrc = src;
    } else {
      imgSrc = href;
    }
    return imgSrc.replace("http://", "https://").replace("/img_thumb/", "/img_full/").replace("-thumb.", ".");
  }
  const parser = new DOMParser();
  async function picforall(href) {
    const { responseText } = await GM_fetch("GET", href, "text");
    const selector = "#pay_thumb_img img";
    const doc = parser.parseFromString(responseText, "text/html");
    const img = doc.querySelector(selector);
    const onclick2 = img?.getAttribute("onclick");
    const match = onclick2?.match(/mshow\('([^']+)'\)/);
    const imgSrc = match?.[1];
    if (!imgSrc) {
      throw new Error(`image not found: ${href}`);
    }
    return imgSrc;
  }
  async function picshick(href, src) {
    if (!src || !src.includes("/th/") || !href.includes("/")) {
      const selector = "img.pic";
      const imgSrc = await generic(href, selector);
      return await getBlob(imgSrc);
    }
    const fileName = href.substring(href.lastIndexOf("/") + 1);
    const extension = fileName.substring(fileName.lastIndexOf(".") + 1);
    const parts = src.split("/");
    const albumId = parts[parts.length - 2];
    const thumbFile = parts[parts.length - 1];
    if (!thumbFile) {
      throw Error(`parsing image: ${href}`);
    }
    const imageId = thumbFile.substring(0, thumbFile.lastIndexOf("."));
    const host = src.substring(0, src.indexOf("/th/"));
    const fullSizePath = `/i/${albumId}/${imageId}.${extension}/${fileName}`;
    const finalUrl = `${host}${fullSizePath}`;
    return await getBlob(finalUrl);
  }
  async function turboimagehost(href) {
    const { response, responseText, finalUrl } = await GM_fetch(
      "GET",
      href,
      "blob"
    );
    if (response.type.startsWith("image/")) {
      return finalUrl;
    }
    const match = responseText.match(/"og:image" content="([^"]+)"/);
    if (match[1]) {
      return new URL(match[1], href).href;
    }
    const selector = "#imageid";
    return generic(href, selector);
  }
  const HANDLERS = {
    "fastpic.": (href) => generic(href, "#imglink > img.image.img-fluid"),
    "imgsto.com": (href) => generic(href, ".main-content-image > img"),
    "imagebam.com": (href) => imagebam(href, "img.main-image"),
    "imageban.ru": (href) => generic(href, "#img_main"),
    "imagenimage.com": (href, src) => imagenimage(href, src),
    "imagetwist.com": (href, src) => imagetwist(href, src),
    "picturelol.com": (href, src) => imagetwist(href, src),
    "vipr.im": (href, src) => imagetwist(href, src),
    "imagevenue.com": (href) => generic(href, "#main-image"),
    "imgbase.ru": (href, src) => imgbase(href, src),
    "picclick.ru": (href, src) => imgbase(href, src),
    "adult-images.ru": (href, src) => imgbase(href, src),
    "payforpic.ru": (href, src) => imgbase(href, src),
    "imgbox.com": (href) => imgbox(href),
    "imgbum.ru": (href) => imgbum(href),
    "imgdrive.net": (href, src) => imgdrive(href, src),
    "imgadult.com": (href, src) => imgdrive(href, src),
    "imgwallet.com": (href, src) => imgdrive(href, src),
    "imgfrost.net": (href, src) => imgfrost(href, src),
    "imgblaze.net": (href, src) => imgfrost(href, src),
    "piccash.net": (href, src) => piccash(href, src),
    "picforall.ru": (href) => picforall(href),
    "imgclick.ru": (href) => picforall(href),
    "freescreens.ru": (href) => picforall(href),
    "picshick.com": (href, src) => picshick(href, src),
    "turboimagehost.com": (href) => turboimagehost(href)
  };
  function updateStatus(imageId, data2) {
    store.upgradeImgData[imageId] = {
      ...store.upgradeImgData[imageId],
      ...data2
    };
  }
  async function upgradeImg(img) {
    if (!img) return;
    if (!img.id) return console.error("Image is missing id");
    const anchor = img.closest("a");
    if (!anchor || !anchor.getAttribute("href")) {
      return updateStatus(img.id, {
        status: "error",
        error: `Image anchor with id ${img.id} is missing href`
      });
    }
    updateStatus(img.id, { status: "loading" });
    if (getSettings("cacheImages")) {
      const cached = getCache$1(anchor.href);
      if (cached) {
        if (img.complete && img.naturalHeight !== 0) {
          updateStatus(img.id, { status: "cached", resolved: cached });
        } else {
          on(
            img,
            "load",
            () => {
              updateStatus(img.id, { status: "cached", resolved: cached });
            },
            { once: true }
          );
          on(
            img,
            "error",
            () => {
              updateStatus(img.id, {
                status: "error",
                error: `Failed to load cached image: ${cached}`
              });
            },
            { once: true }
          );
        }
        img.src = cached;
        return;
      }
    }
    const entry = Object.entries(HANDLERS).find(
      ([domain]) => anchor.href.includes(domain)
    );
    if (!entry)
      return updateStatus(img.id, {
        status: "error",
        error: `No handler for ${new URL(anchor.href).hostname}`
      });
    const [, handler] = entry;
    try {
      const src = await handler(anchor.href, img.src);
      if (src.startsWith("blob:")) {
        on(
          img,
          "load",
          () => {
            URL.revokeObjectURL(src);
            updateStatus(img.id, { status: "resolved", resolved: src });
          },
          { once: true }
        );
        on(
          img,
          "error",
          () => {
            URL.revokeObjectURL(src);
            updateStatus(img.id, {
              status: "error",
              error: `Failed to load blob`
            });
          },
          { once: true }
        );
      } else {
        on(
          img,
          "load",
          () => {
            setCache$1(anchor.href, src);
            updateStatus(img.id, { status: "resolved", resolved: src });
          },
          { once: true }
        );
        on(
          img,
          "error",
          () => {
            updateStatus(img.id, {
              status: "error",
              error: `Failed to load image from: ${src}`
            });
          },
          { once: true }
        );
      }
      updateStatus(img.id, {
        resolved: src
      });
      img.src = src;
    } catch (error) {
      return updateStatus(img.id, {
        error: String(error),
        status: "error"
      });
    }
  }
  function onIntersect(entries, observer2) {
    entries.forEach((entry) => {
      if (entry.isIntersecting) {
        observer2.unobserve(entry.target);
        upgradeImg(entry.target);
      }
    });
  }
  const observed = new WeakSet();
  const observer = new IntersectionObserver(onIntersect, {
rootMargin: `${getSettings("limitConcurrent") ? "200%" : "1000%"} 0%`
  });
  async function observeImg(imgRefs) {
    const unobserved = imgRefs.filter((img) => {
      return !observed.has(img) && img instanceof HTMLImageElement;
    });
    if (!unobserved.length) return;
    unobserved.forEach((img) => {
      observed.add(img);
    });
    if (unobserved[0]) await upgradeImg(unobserved[0]);
    unobserved.slice(1).forEach((img) => {
      observer.observe(img);
    });
  }
  var root$1 = from_html(`<div><!></div>`);
  function Resize($$anchor, $$props) {
    push($$props, true);
    let clicked = prop($$props, "clicked", 15), resized = prop($$props, "resized", 15);
    let dragResize = user_derived(() => getSettings("dragResize"));
    let clientX = state$1(0);
    let prevResizeWidth = state$1(0);
    let draggedEl = state$1(null);
    let draggedElCenter = state$1(0);
    function getElementCenter(element) {
      const rect = element.getBoundingClientRect();
      return rect.top + rect.height / 2;
    }
    function clamp(value, min = 20, max = 100) {
      return Math.min(max, Math.max(min, value));
    }
    function onpointerdown(event2) {
      if (!get(dragResize) || !(event2.target instanceof HTMLImageElement)) return;
      if (event2.button !== 0) return;
      event2.preventDefault();
      set(draggedEl, event2.target, true);
      set(draggedElCenter, getElementCenter(get(draggedEl)), true);
      clicked(true);
      set(clientX, event2.clientX, true);
      set(prevResizeWidth, store.resizeWidth, true);
    }
    async function onpointermove(event2) {
      if (!get(dragResize) || !clicked()) return;
      if (!resized()) {
        resized(event2.clientX - get(clientX) !== 0);
      } else if (resized() && $$props.containerWidth) {
        const deltaPercent = (event2.clientX - get(clientX)) / $$props.containerWidth * 100;
        let newWidth = get(prevResizeWidth) + deltaPercent;
        let clampedWidth = clamp(newWidth);
        if (clampedWidth !== newWidth) {
          set(prevResizeWidth, clampedWidth, true);
          set(clientX, event2.clientX, true);
        }
        store.resizeWidth = Math.round(clampedWidth * 10) / 10;
        requestAnimationFrame(() => {
          if (!get(draggedEl)) return;
          const currentCenter = getElementCenter(get(draggedEl));
          const deltaY = currentCenter - get(draggedElCenter);
          window.scrollTo(0, window.scrollY + deltaY);
        });
      }
    }
    function onpointerup() {
      if (clicked() && resized()) {
        saveResize(store.resizeWidth);
      }
      clicked(false);
      resized(false);
      set(clientX, 0);
      set(prevResizeWidth, 0);
    }
    var div = root$1();
    event("pointermove", $document, onpointermove);
    event("pointerup", $document, onpointerup);
    div.__pointerdown = onpointerdown;
    let classes;
    let styles;
    var node = child(div);
    snippet(node, () => $$props.children);
    template_effect(
      ($0, $1) => {
        classes = set_class(div, 1, "svelte-1rhiyed", null, classes, $0);
        styles = set_style(div, "", styles, $1);
      },
      [
        () => ({ dragging: clicked() && resized() }),
        () => ({
          width: `${(get(dragResize) ? store.resizeWidth : 100) ?? ""}%`
        })
      ]
    );
    append($$anchor, div);
    pop();
  }
  delegate(["pointerdown"]);
  var root_1$5 = from_html(`<div class="loader svelte-10rouec"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" class="svelte-10rouec"><path d="M12 2A10 10 0 1 0 22 12A10 10 0 0 0 12 2Zm0 18a8 8 0 1 1 8-8A8 8 0 0 1 12 20Z" opacity="0.5" class="svelte-10rouec"></path><path class="animate svelte-10rouec" d="M20 12h2A10 10 0 0 0 12 2V4A8 8 0 0 1 20 12Z"></path></svg></div>`);
  function Loader($$anchor, $$props) {
    push($$props, true);
    var fragment = comment();
    var node = first_child(fragment);
    {
      var consequent = ($$anchor2) => {
        var div = root_1$5();
        transition(3, div, () => fade, () => store.transition);
        append($$anchor2, div);
      };
      if_block(node, ($$render) => {
        if ($$props.loading) $$render(consequent);
      });
    }
    append($$anchor, fragment);
    pop();
  }
  const Item = ($$anchor, key = noop, value = noop, error = noop) => {
    var p = root_1$4();
    var strong = child(p);
    var text2 = child(strong);
    var node = sibling(strong, 2);
    {
      var consequent = ($$anchor2) => {
        var a = root_2$1();
        var text_1 = child(a);
        template_effect(() => {
          set_attribute(a, "href", value());
          set_text(text_1, value());
        });
        append($$anchor2, a);
      };
      var alternate_1 = ($$anchor2) => {
        var fragment = comment();
        var node_1 = first_child(fragment);
        {
          var consequent_1 = ($$anchor3) => {
            var span = root_4();
            append($$anchor3, span);
          };
          var alternate = ($$anchor3) => {
            var fragment_1 = root_5$1();
            var text_2 = first_child(fragment_1);
            var node_2 = sibling(text_2);
            {
              var consequent_2 = ($$anchor4) => {
                var span_1 = root_6();
                var text_3 = child(span_1);
                template_effect(() => set_text(text_3, error()));
                append($$anchor4, span_1);
              };
              if_block(node_2, ($$render) => {
                if (value() === "error" && error()) $$render(consequent_2);
              });
            }
            template_effect(() => set_text(text_2, `${value() ?? ""} `));
            append($$anchor3, fragment_1);
          };
          if_block(
            node_1,
            ($$render) => {
              if (value() === void 0) $$render(consequent_1);
              else $$render(alternate, false);
            },
            true
          );
        }
        append($$anchor2, fragment);
      };
      if_block(node, ($$render) => {
        if (value() && value().startsWith("http")) $$render(consequent);
        else $$render(alternate_1, false);
      });
    }
    template_effect(() => {
      set_attribute(p, "data-key", key());
      set_text(text2, key());
    });
    append($$anchor, p);
  };
  var root_2$1 = from_html(`<a class="svelte-zizdl6"> </a>`);
  var root_4 = from_html(`<span class="error svelte-zizdl6">null</span>`);
  var root_6 = from_html(`<span class="error svelte-zizdl6"> </span>`);
  var root_5$1 = from_html(` <!>`, 1);
  var root_1$4 = from_html(`<p><strong> </strong>: <!></p>`);
  var root_7$1 = from_svg(`<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="svelte-zizdl6"><path d="M17 9H7V7h10m0 6H7v-2h10m-3 6H7v-2h7M12 3a1 1 0 0 1 1 1a1 1 0 0 1-1 1a1 1 0 0 1-1-1a1 1 0 0 1 1-1m7 0h-4.18C14.4 1.84 13.3 1 12 1s-2.4.84-2.82 2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2" class="svelte-zizdl6"></path></svg>`);
  var root = from_html(`<div class="debug svelte-zizdl6"><!> <!> <!> <!> <div class="copy svelte-zizdl6"><!></div></div>`);
  function Debug($$anchor, $$props) {
    push($$props, true);
    let data2 = user_derived(() => store.upgradeImgData?.[$$props.img.id] || {});
    async function copyToClipboard(data3) {
      try {
        const dataWithoutId = Object.fromEntries(Object.entries(data3).filter(([key]) => key !== "id"));
        await navigator.clipboard.writeText(JSON.stringify(dataWithoutId, null, 2));
      } catch (err) {
        console.error("Failed to copy debug:", err);
      }
    }
    var div = root();
    var node_3 = child(div);
    Item(node_3, () => "status", () => get(data2).status, () => get(data2).error);
    var node_4 = sibling(node_3, 2);
    Item(node_4, () => "href", () => $$props.img.href);
    var node_5 = sibling(node_4, 2);
    Item(node_5, () => "src", () => $$props.img.src);
    var node_6 = sibling(node_5, 2);
    Item(node_6, () => "resolved", () => get(data2).resolved);
    var div_1 = sibling(node_6, 2);
    var node_7 = child(div_1);
    Checkmark(node_7, {
      onclick: () => copyToClipboard({
        id: $$props.img.id,
        href: $$props.img.href,
        src: $$props.img.src,
        status: get(data2).status,
        resolved: get(data2).resolved,
        error: get(data2).error
      }),
      title: "Copy to clipboard",
      children: ($$anchor2, $$slotProps) => {
        var svg = root_7$1();
        append($$anchor2, svg);
      },
      $$slots: { default: true }
    });
    transition(3, div, () => slide, () => store.transition);
    append($$anchor, div);
    pop();
  }
  var root_3$1 = from_html(`<div class="container svelte-ojhdzd"><!> <a target="_blank"><img/> <!></a></div>`);
  var root_1$3 = from_html(`<div id="x-images"><!></div>`);
  function Images($$anchor, $$props) {
    push($$props, true);
    let clicked = state$1(false);
    let resized = state$1(false);
    let containerWidth = state$1(0);
    let upgradeImages = user_derived(() => getSettings("upgradeImages"));
    let incognito = user_derived(() => getSettings("incognito"));
    let lastImageFirst = user_derived(() => getSettings("lastImageFirst"));
    let debugImgs = user_derived(() => getSettings("debugImgs"));
    function onerror(event2) {
      const img = event2.currentTarget;
      img.dataset["broken"] = "true";
    }
    function handleOrder(index2) {
      if (data.images && get(lastImageFirst)) {
        if (index2 === data.images.length - 1) return -1;
      }
      return;
    }
    user_effect(
() => {
        if (get(upgradeImages) && store.imgRefs.length) {
          observeImg(store.imgRefs);
        }
        return () => observer.disconnect();
      }
    );
    var fragment = comment();
    var node = first_child(fragment);
    {
      var consequent_2 = ($$anchor2) => {
        var div = root_1$3();
        let classes;
        var node_1 = child(div);
        Resize(node_1, {
          get containerWidth() {
            return get(containerWidth);
          },
          get clicked() {
            return get(clicked);
          },
          set clicked($$value) {
            set(clicked, $$value, true);
          },
          get resized() {
            return get(resized);
          },
          set resized($$value) {
            set(resized, $$value, true);
          },
          children: ($$anchor3, $$slotProps) => {
            var fragment_1 = comment();
            var node_2 = first_child(fragment_1);
            each(node_2, 19, () => data.images, (img) => img.id, ($$anchor4, img, i) => {
              const gif = user_derived(() => get(img)?.src?.toLowerCase()?.includes(".gif"));
              const loading = user_derived(() => get(img)?.href ? "eager" : "lazy");
              var div_1 = root_3$1();
              let styles;
              var node_3 = child(div_1);
              {
                var consequent = ($$anchor5) => {
                  Debug($$anchor5, {
                    get img() {
                      return get(img);
                    }
                  });
                };
                if_block(node_3, ($$render) => {
                  if (get(debugImgs)) $$render(consequent);
                });
              }
              var a = sibling(node_3, 2);
              let classes_1;
              var img_1 = child(a);
              let classes_2;
              bind_this(img_1, ($$value, i2) => store.imgRefs[i2] = $$value, (i2) => store?.imgRefs?.[i2], () => [get(i)]);
              var node_4 = sibling(img_1, 2);
              {
                var consequent_1 = ($$anchor5) => {
                  {
                    let $0 = user_derived(() => get(upgradeImages) && store.upgradeImgData?.[get(img).id]?.status === "loading");
                    Loader($$anchor5, {
                      get loading() {
                        return get($0);
                      }
                    });
                  }
                };
                if_block(node_4, ($$render) => {
                  if (!get(gif)) $$render(consequent_1);
                });
              }
              template_effect(
                ($0, $1, $2) => {
                  set_attribute(div_1, "data-id", get(img).id);
                  styles = set_style(div_1, "", styles, $0);
                  set_attribute(a, "href", get(img)?.href);
                  classes_1 = set_class(a, 1, "svelte-ojhdzd", null, classes_1, $1);
                  set_attribute(img_1, "loading", get(loading));
                  set_attribute(img_1, "id", get(img).id);
                  set_attribute(img_1, "src", get(img)?.src);
                  set_attribute(img_1, "alt", get(img)?.src);
                  classes_2 = set_class(img_1, 1, "svelte-ojhdzd", null, classes_2, $2);
                },
                [
                  () => ({ order: handleOrder(get(i)) }),
                  () => ({ gif: get(gif) }),
                  () => ({ incognito: get(incognito), gif: get(gif) })
                ]
              );
              event("error", img_1, onerror);
              append($$anchor4, div_1);
            });
            append($$anchor3, fragment_1);
          },
          $$slots: { default: true }
        });
        bind_this(div, ($$value) => store.ultraImages = $$value, () => store?.ultraImages);
        template_effect(($0) => classes = set_class(div, 1, "section svelte-ojhdzd", null, classes, $0), [() => ({ dragging: get(clicked) && get(resized) })]);
        bind_element_size(div, "offsetWidth", ($$value) => set(containerWidth, $$value));
        append($$anchor2, div);
      };
      if_block(node, ($$render) => {
        if (data.images && data.images.length) $$render(consequent_2);
      });
    }
    append($$anchor, fragment);
    pop();
  }
  const Incognito = ($$anchor) => {
    var div = root_1$2();
    var a = sibling(child(div));
    a.__click = [on_click];
    set_style(a, "", {}, { cursor: "pointer" });
    append($$anchor, div);
  };
  const Forumline = ($$anchor, forumline = noop) => {
    const infoHeader = user_derived(() => forumline()?.querySelector("th")?.textContent);
    const infoBody = user_derived(() => forumline()?.querySelector("td")?.innerHTML);
    const errorMessages = user_derived(() => ({
      "Тема находится в мусорке": "The topic is in the trash",
      "Тема не найдена": "Topic not found",
      "Раздача ожидает проверки": "Distribution is awaiting moderator approval<br /><br />Viewing is currently unavailable"
    }));
    const currentError = user_derived(() => Object.keys(get(errorMessages)).find((key) => forumline()?.textContent?.includes(key)));
    var div_1 = root_2();
    var node = child(div_1);
    {
      var consequent = ($$anchor2) => {
        var fragment = root_3();
        var p = sibling(first_child(fragment), 4);
        set_style(p, "", {}, { "text-align": "center" });
        var node_1 = child(p);
        html(node_1, () => get(errorMessages)[get(currentError)]);
        append($$anchor2, fragment);
      };
      var alternate_1 = ($$anchor2) => {
        var fragment_1 = comment();
        var node_2 = first_child(fragment_1);
        {
          var consequent_1 = ($$anchor3) => {
            var fragment_2 = root_5();
            var h3 = first_child(fragment_2);
            var text2 = child(h3);
            var node_3 = sibling(h3, 2);
            html(node_3, () => get(infoBody));
            template_effect(() => set_text(text2, get(infoHeader)));
            append($$anchor3, fragment_2);
          };
          var alternate = ($$anchor3) => {
            var fragment_3 = comment();
            var node_4 = first_child(fragment_3);
            html(node_4, () => forumline()?.innerHTML);
            append($$anchor3, fragment_3);
          };
          if_block(
            node_2,
            ($$render) => {
              if (get(infoHeader) && get(infoBody)) $$render(consequent_1);
              else $$render(alternate, false);
            },
            true
          );
        }
        append($$anchor2, fragment_1);
      };
      if_block(node, ($$render) => {
        if (get(currentError)) $$render(consequent);
        else $$render(alternate_1, false);
      });
    }
    append($$anchor, div_1);
  };
  const Avatar = ($$anchor, avatar = noop, nick = noop, link2 = noop) => {
    var a_1 = root_7();
    var node_5 = child(a_1);
    {
      var consequent_2 = ($$anchor2) => {
        var img = root_8();
        template_effect(() => {
          set_attribute(img, "src", avatar());
          set_attribute(img, "alt", nick());
        });
        append($$anchor2, img);
      };
      var alternate_2 = ($$anchor2) => {
        var svg = root_9();
        append($$anchor2, svg);
      };
      if_block(node_5, ($$render) => {
        if (avatar()) $$render(consequent_2);
        else $$render(alternate_2, false);
      });
    }
    template_effect(() => set_attribute(a_1, "href", link2()));
    append($$anchor, a_1);
  };
  const Nick = ($$anchor, nick = noop, link2 = noop) => {
    var fragment_4 = comment();
    var node_6 = first_child(fragment_4);
    {
      var consequent_4 = ($$anchor2) => {
        const content = user_derived(() => nick() === "Гость" ? "Guest" : nick());
        var span = root_11();
        var node_7 = child(span);
        {
          var consequent_3 = ($$anchor3) => {
            var a_2 = root_12();
            var text_1 = child(a_2);
            template_effect(() => {
              set_attribute(a_2, "href", link2());
              set_text(text_1, get(content));
            });
            append($$anchor3, a_2);
          };
          var alternate_3 = ($$anchor3) => {
            var text_2 = text();
            template_effect(() => set_text(text_2, get(content)));
            append($$anchor3, text_2);
          };
          if_block(node_7, ($$render) => {
            if (link2()) $$render(consequent_3);
            else $$render(alternate_3, false);
          });
        }
        append($$anchor2, span);
      };
      if_block(node_6, ($$render) => {
        if (nick()) $$render(consequent_4);
      });
    }
    append($$anchor, fragment_4);
  };
  var on_click = (event2) => {
    event2.preventDefault();
    updateOption("incognito", false);
  };
  var root_1$2 = from_html(`<div>Post not rendered... <a href="#incognito" class="svelte-14j3c1y">turn off incognito</a></div>`);
  var root_3 = from_html(`<h3>Information</h3> <br/> <p><!></p> <br/> <a href="/forum/index.php" class="svelte-14j3c1y">Return to home page</a>`, 1);
  var root_5 = from_html(`<h3> </h3> <!>`, 1);
  var root_2 = from_html(`<div class="forumline svelte-14j3c1y"><!></div>`);
  var root_8 = from_html(`<img class="svelte-14j3c1y"/>`);
  var root_9 = from_svg(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="svelte-14j3c1y"><path fill="currentcolor" fill-rule="evenodd" d="M8 7a4 4 0 1 1 8 0a4 4 0 0 1-8 0m0 6a5 5 0 0 0-5 5a3 3 0 0 0 3 3h12a3 3 0 0 0 3-3a5 5 0 0 0-5-5z" clip-rule="evenodd"></path></svg>`);
  var root_7 = from_html(`<a class="no-avatar svelte-14j3c1y"><!></a>`);
  var root_12 = from_html(`<a class="svelte-14j3c1y"> </a>`);
  var root_11 = from_html(`<span class="nick svelte-14j3c1y"><!></span>`);
  var on_click_1 = (_, toggleFullDate, i) => toggleFullDate(i());
  var root_15 = from_html(`<button class="date svelte-14j3c1y"><!></button>`);
  var root_23 = from_html(`<div class="post svelte-14j3c1y"><div class="avatar svelte-14j3c1y"><!></div> <div class="content svelte-14j3c1y"><div class="header svelte-14j3c1y"><!> <!></div> <div class="message svelte-14j3c1y"></div></div></div>`);
  var root_19 = from_html(`<div id="x-post"><!></div>`);
  function Post($$anchor, $$props) {
    push($$props, true);
    const Date2 = ($$anchor2, date = noop, i = noop) => {
      var fragment_6 = comment();
      var node_8 = first_child(fragment_6);
      {
        var consequent_6 = ($$anchor3) => {
          const paredDate = user_derived(() => handleDate(date()));
          var button = root_15();
          button.__click = [on_click_1, toggleFullDate, i];
          var node_9 = child(button);
          {
            var consequent_5 = ($$anchor4) => {
              var text_3 = text();
              template_effect(($0) => set_text(text_3, $0), [() => get(paredDate)?.toLocaleString()]);
              append($$anchor4, text_3);
            };
            var alternate_4 = ($$anchor4) => {
              var text_4 = text();
              template_effect(($0) => set_text(text_4, $0), [() => handleRelativeDate(get(paredDate))]);
              append($$anchor4, text_4);
            };
            if_block(node_9, ($$render) => {
              if (showFullDate[i()]) $$render(consequent_5);
              else $$render(alternate_4, false);
            });
          }
          append($$anchor3, button);
        };
        if_block(node_8, ($$render) => {
          if (date()) $$render(consequent_6);
        });
      }
      append($$anchor2, fragment_6);
    };
    let incognito = user_derived(() => getSettings("incognito"));
    let showFullDate = proxy({});
    function toggleFullDate(index2) {
      showFullDate[index2] = !showFullDate[index2];
    }
    function insertPost(message) {
      return (element) => {
        element.appendChild(message);
        return () => message.remove();
      };
    }
    var fragment_9 = comment();
    var node_10 = first_child(fragment_9);
    {
      var consequent_7 = ($$anchor2) => {
        Incognito($$anchor2);
      };
      var alternate_6 = ($$anchor2) => {
        var div_2 = root_19();
        let classes;
        var node_11 = child(div_2);
        {
          var consequent_8 = ($$anchor3) => {
            Forumline($$anchor3, () => data.forumline);
          };
          var alternate_5 = ($$anchor3) => {
            var fragment_12 = comment();
            var node_12 = first_child(fragment_12);
            {
              var consequent_9 = ($$anchor4) => {
                var fragment_13 = comment();
                var node_13 = first_child(fragment_13);
                each(node_13, 17, () => data.posts, index, ($$anchor5, $$item, i) => {
                  let nick = () => get($$item).nick;
                  let link2 = () => get($$item).link;
                  let avatar = () => get($$item).avatar;
                  let date = () => get($$item).date;
                  let message = () => get($$item).message;
                  var div_3 = root_23();
                  var div_4 = child(div_3);
                  var node_14 = child(div_4);
                  Avatar(node_14, avatar, nick, link2);
                  var div_5 = sibling(div_4, 2);
                  var div_6 = child(div_5);
                  var node_15 = child(div_6);
                  Nick(node_15, nick, link2);
                  var node_16 = sibling(node_15, 2);
                  Date2(node_16, date, () => i);
                  var div_7 = sibling(div_6, 2);
                  attach(div_7, () => insertPost(message()));
                  append($$anchor5, div_3);
                });
                append($$anchor4, fragment_13);
              };
              if_block(
                node_12,
                ($$render) => {
                  if (data.posts && data.posts?.length) $$render(consequent_9);
                },
                true
              );
            }
            append($$anchor3, fragment_12);
          };
          if_block(node_11, ($$render) => {
            if (data.forumline) $$render(consequent_8);
            else $$render(alternate_5, false);
          });
        }
        bind_this(div_2, ($$value) => store.ultraPost = $$value, () => store?.ultraPost);
        template_effect(($0) => classes = set_class(div_2, 1, "svelte-14j3c1y", null, classes, $0), [() => ({ section: data.forumline || data.posts?.length })]);
        append($$anchor2, div_2);
      };
      if_block(node_10, ($$render) => {
        if (get(incognito)) $$render(consequent_7);
        else $$render(alternate_6, false);
      });
    }
    append($$anchor, fragment_9);
    pop();
  }
  delegate(["click"]);
  var root_1$1 = from_html(`<div id="ultra-pagination" class="svelte-13k3ejc"><!></div>`);
  function Pagination($$anchor, $$props) {
    push($$props, true);
    const parser2 = new DOMParser();
    const translations = {
      Страница: "Page",
      Страницы: "Pages",
      из: "of",
      "Пред.": "Prev",
      "След.": "Next"
    };
    const regex2 = /Страница|Страницы|из|Пред\.|След\./g;
    let content = user_derived(() => {
      if (!data.pagination?.innerHTML) return "";
      const doc = parser2.parseFromString(data.pagination.innerHTML, "text/html");
      const pageSelect = doc.querySelector("a.menu-root");
      if (pageSelect) {
        pageSelect.replaceWith(doc.createTextNode("Pages"));
      }
      return doc.body.innerHTML.replace(regex2, (match) => translations[match] ?? match).replace(/Pages\s+:/, "Pages:");
    });
    var fragment = comment();
    var node = first_child(fragment);
    {
      var consequent_1 = ($$anchor2) => {
        var div = root_1$1();
        var node_1 = child(div);
        {
          var consequent = ($$anchor3) => {
            var fragment_1 = comment();
            var node_2 = first_child(fragment_1);
            html(node_2, () => get(content));
            append($$anchor3, fragment_1);
          };
          if_block(node_1, ($$render) => {
            if (data.pagination) $$render(consequent);
          });
        }
        append($$anchor2, div);
      };
      if_block(node, ($$render) => {
        if (data?.pagination) $$render(consequent_1);
      });
    }
    append($$anchor, fragment);
    pop();
  }
  var root_1 = from_html(`<!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!>`, 1);
  function App($$anchor, $$props) {
    push($$props, true);
    let app = prop($$props, "app", 7);
    let firstPage = state$1(true);
    if (document.readyState === "loading") {
      on(document, "DOMContentLoaded", parseDOM, { once: true });
    } else {
      parseDOM();
    }
    function parseDOM() {
      if (forumDisabled(app())) return;
      if (Object.keys(data).length === 0) {
        Object.assign(data, handleData());
        store.showSettings = loadShowSettings();
        store.options = loadOptions();
        store.performerLinks = loadPerformerLinks();
        store.resizeWidth = loadResize();
        const startParam = new URLSearchParams(location.search).get("start");
        set(firstPage, startParam === null || Number(startParam) === 0, true);
        setTimeout(
          () => {
            const selector = "#topic_main div.post-user-message";
            const posts = document.querySelectorAll(selector);
            data.posts = handlePosts(posts);
            Array.from(document.body.children).forEach((child2) => {
              if (child2 !== app()) child2.remove();
            });
            app().style.height = "auto";
          },
          0
        );
      }
    }
    user_effect(
() => {
        const darkMode = Boolean(data.theme?.darkmode);
        document.documentElement.dataset["theme"] = darkMode ? "dark" : "light";
        sessionStorage.setItem("dark-mode", darkMode.toString());
      }
    );
    var fragment = comment();
    var node = first_child(fragment);
    {
      var consequent_1 = ($$anchor2) => {
        var fragment_1 = root_1();
        var node_1 = first_child(fragment_1);
        Events(node_1, {});
        var node_2 = sibling(node_1, 2);
        Header(node_2, {});
        var node_3 = sibling(node_2, 2);
        Settings(node_3, {});
        var node_4 = sibling(node_3, 2);
        Float(node_4, {});
        var node_5 = sibling(node_4, 2);
        Dropdown$1(node_5, {});
        var node_6 = sibling(node_5, 2);
        Title(node_6, {});
        var node_7 = sibling(node_6, 2);
        {
          var consequent = ($$anchor3) => {
            Stats($$anchor3, {});
          };
          var alternate = ($$anchor3) => {
            Pagination($$anchor3, {});
          };
          if_block(node_7, ($$render) => {
            if (get(firstPage)) $$render(consequent);
            else $$render(alternate, false);
          });
        }
        var node_8 = sibling(node_7, 2);
        Tags(node_8, {});
        var node_9 = sibling(node_8, 2);
        FileList(node_9, {});
        var node_10 = sibling(node_9, 2);
        Images(node_10, {});
        var node_11 = sibling(node_10, 2);
        Post(node_11, {});
        var node_12 = sibling(node_11, 2);
        Pagination(node_12, {});
        append($$anchor2, fragment_1);
      };
      if_block(node, ($$render) => {
        if (Object.keys(data).length !== 0) $$render(consequent_1);
      });
    }
    append($$anchor, fragment);
    pop();
  }
  const appCss = "html{--border-radius-large: 8px;--border-radius-small: 4px;--tag-color: rgb(255, 255, 255);--content-margin: 1rem;--highlighted: rgb(180 99 0)}html[data-theme=dark]{--main-bg: rgb(18, 18, 18);--post-bg: rgb(40, 40, 40);--post-date-color: rgb(135, 179, 223);--post-border-color: rgb(85, 85, 85);--post-odd-bg: rgb(55, 55, 55);--link-color: rgb(156, 206, 255);--tag-bg: rgb(50 50 50);--search-color: rgb(255, 255, 255);--overlay-bg: rgb(32, 32, 32, .75);--input-bg: rgb(28, 27, 27);--incognito-filter: brightness(0);--button-color: rgb(40, 74, 134);--seed-color: rgb(51, 185, 51);--leech-color: rgb(255, 84, 84)}html[data-theme=light]{--main-bg: rgb(255, 255, 255);--post-bg: rgb(239, 239, 239);--post-date-color: rgb(52, 93, 164);--post-border-color: rgb(202, 202, 202);--post-odd-bg: rgb(227, 227, 227);--link-color: rgb(52, 93, 164);--tag-bg: var(--link-color);--search-color: rgb(0, 0, 0);--overlay-bg: rgba(255, 255, 255, .75);--input-bg: rgb(250, 250, 250);--incognito-filter: brightness(0) invert(1);--button-color: rgb(70, 119, 204);--seed-color: rgb(0, 102, 0);--leech-color: rgb(153, 0, 0)}#ultra{display:flex;flex-direction:column;padding:1.5rem 2.5rem;font-family:system-ui;background-color:var(--main-bg)}#ultra .section{background-color:var(--post-bg);border-radius:var(--border-radius-large);overflow:hidden;border:1px solid var(--post-border-color)}#ultra img{filter:unset}body{min-width:unset!important}";
  importCSS(appCss);
  if (userscriptDisabled()) {
    if (document.readyState === "loading") {
      on(document, "DOMContentLoaded", appendUserscriptEnableButton, {
        once: true
      });
    } else {
      appendUserscriptEnableButton();
    }
  } else {
    let mountApp = function() {
      const app = document.createElement("div");
      app.id = "ultra";
      app.style.height = "100vh";
      document.body.prepend(app);
      mount(App, {
        target: app,
        props: { app }
      });
    };
    const cachedTheme = sessionStorage.getItem("dark-mode");
    if (cachedTheme !== null)
      document.documentElement.dataset["theme"] = cachedTheme === "true" ? "dark" : "light";
    let CSP = false;
    if (document.head) {
      CSP = prependContentSecurityPolicy();
    }
    if (document.body) {
      mountApp();
      const body_container = document.getElementById("body_container");
      if (body_container) body_container.style.display = "none";
    } else {
      const targetNode = document.documentElement;
      const config = { childList: true, subtree: true };
      const callback = (mutationList, observer22) => {
        for (const mutation of mutationList) {
          if (mutation.type === "childList") {
            for (const node of mutation.addedNodes) {
              if (node.nodeName === "HEAD" && !CSP)
                CSP = prependContentSecurityPolicy();
              if (node.nodeName === "BODY") mountApp();
              if (node instanceof HTMLElement && node.id === "body_container") {
                node.style.display = "none";
                observer22.disconnect();
              }
            }
          }
        }
      };
      const observer2 = new MutationObserver(callback);
      observer2.observe(targetNode, config);
    }
  }

})();