https://cubari.moe/read/imgchest/o24av9o3e4l/1/1/

제출된 URL:
https://t.co/0wxMpjrDXq
보고서 완료:

링크 · 0개 결과

JavaScript 변수 · 131개 결과

이름유형
onbeforetoggleobject
documentPictureInPictureobject
onscrollendobject
RemoteStoragefunction
Widgetfunction
gtagfunction
dataLayerobject
sciencefunction
Pickrfunction
JSZipfunction

콘솔 로그 메시지 · 1개 결과

유형카테고리로그
warningother
URL
https://cubari.moe/static/js/init.js?v=29a9e3e
텍스트
Settings were found to be corrupted and so were reset.

HTML

<!DOCTYPE html><html style="--readerBg: #000000; --sidebarCol: #28292B; --accentCol: #B73636; --textCol: #EEEEEE; --icoCol: #EEEEEE; --sidebarColDark: #191a1c; --sidebarColDarkA: #191a1c00; --prevCol: #212224; --accentSelected: #ffffff; --accentSelectedInvert: #444444; --borderColor: rgba(0,0,0,0.7); --blackLight: rgba(0,0,0,0.2); --sidebarColFocus: #0d0e10; --rescueShade: unset; --rdrBorderL: 1px; --rdr-wb: 2px; --blackFlag: rgba(0,0,0,0.7); --rdrAncBottomWhite: rgba(255,255,255,0.35); overflow: auto;"><head>
  <meta charset="UTF-8">
  <meta name="theme-color" content="#2b2f33">
  <title>xx30 | Chapter 1 | Cubari</title>
  <meta name="twitter:title" content="xx30 | Chapter 1 | Cubari">
  <meta property="og:title" content="xx30 | Chapter 1 | Cubari">
  <meta name="description" content="Read chapter 1 of xx30 | Cubari">
  <meta name="twitter:card" content="summary">
  
  <meta property="og:description" content="Read the xx30 manga series.">
  <meta name="twitter:description" content="Read the xx30 manga series.">
  <meta property="og:image" content="https://cdn.imgchest.com/files/l7lxcmlmb67.png">
  <meta name="twitter:image" content="https://cdn.imgchest.com/files/l7lxcmlmb67.png">
  
  <meta property="og:url" content="https://cubari.moe/read/imgchest/o24av9o3e4l/1/1/">
  <meta name="viewport" content="width=device-width">
  <link rel="stylesheet" href="/static/css/pickr.css?v=29a9e3e
">
  <link rel="canonical" href="https://cubari.moe/read/imgchest/o24av9o3e4l/1/1/">
  <link rel="stylesheet" type="text/css" href="/static/css/reader.css?v=29a9e3e
">
  
<link rel="manifest" href="/static/manifest.json?v=29a9e3e
">
<link rel="shortcut icon" sizes="128x128" type="image/png" href="/static/favicon.png?v=29a9e3e
" defer="">
<link rel="icon" sizes="128x128" type="image/png" href="/static/favicon.png?v=29a9e3e
">
<link rel="icon" sizes="512x512" type="image/png" href="/static/favicon.png?v=29a9e3e
">
<link rel="apple-touch-icon" sizes="128x128" href="/static/favicon.png?v=29a9e3e
">
<link rel="apple-touch-icon" sizes="256x256" href="/static/favicon.png?v=29a9e3e
">
<link rel="apple-touch-icon" sizes="512x512" href="/static/favicon.png?v=29a9e3e
">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="theme-color" content="#2b2f33">
<meta name="format-detection" content="telephone=no">
  
<meta name="referrer" content="same-origin">
<script src="/static/js/remotestorage.min.js"></script>
<script src="/static/js/widget.min.js"></script>

<script id="history_coverUrl" type="application/json">"https://cdn.imgchest.com/files/l7lxcmlmb67.png"</script>



<script id="history_source" type="application/json">"read/imgchest"</script>



<script id="history_slug" type="application/json">"o24av9o3e4l"</script>



<script id="history_url" type="application/json">"read/imgchest/o24av9o3e4l"</script>



<script id="history_title" type="application/json">"xx30"</script>

<script>
  // remoteStorage backend that'll be our plugged in module
  // This should be abstracted from what actually handles updates,
  // since this'll give us the ability to pull this out in the future
  const RS_PATH = "cubari";

  const remoteStorage = (() => {
    // Define the schema for our history
    const Model = {name: RS_PATH, builder: (private) => {
      const SERIES_META = "series";
      const REPLACEMENT_STR = "{SOURCE_SLUG_REPLACEMENT}";
      const SERIES_META_PATH_BASE = "series/";
      const SERIES_META_PATH = `${SERIES_META_PATH_BASE}${REPLACEMENT_STR}`;

      private.declareType(SERIES_META, {
        type: "object",
        properties: {
          slug: {
            type: "string"
          },
          coverUrl: {
            type: "string"
          },
          source: {
            type: "string"
          },
          url: {
            type: "string"
          },
          title: {
            type: "string"
          },
          timestamp: {
            type: "number"
          },
          chapters: {
            type: "array",
            default: [] // Note that these aren't validated by our schema handler
          },
          pinned: {
            type: "boolean",
            default: false // Thus it's documenting only; handle it
          }
        },
        required: ["slug", "source", "url", "title", "timestamp", "chapters", "pinned"]
      });

      let firstPartyValidator = (source) => {
        return (source === "manga" || source === "series" || source === "default");
      };

      let pathBuilder = (path, slug, source) => {
        if (!source) source = "default";
        if (firstPartyValidator(source)) source = "default";
        source = source.replace(" ", "_");
        return path.replace(REPLACEMENT_STR, `${source}-${slug}`);
      };

      let seriesBuilder = (slug, coverUrl, source, url, title, pinned, chapters) => {
        source = source.replace(" ", "_");
        if (firstPartyValidator(source)) {
          source = "default";
          pinned = true; // First party chapters always pinned
        }
        return {
          slug: slug,
          coverUrl: coverUrl || "",
          source: source,
          url: url,
          title: title,
          timestamp: Date.now(),
          chapters: chapters || [],
          pinned: (pinned === undefined) ? false : pinned
        };
      };

      return {
        exports: {
          firstPartyHandler: (source) => {
            return firstPartyValidator(source) ? "default" : source;
          },
          slugBuilder: (slug, source) => {
            return `${source}-${slug}`;
          },
          addSeries: (slug, coverUrl, source, url, title, pinned, chapters) => {
            let toStore = seriesBuilder(slug, coverUrl, source, url, title, pinned, chapters);
            return private.storeObject(
              SERIES_META,
              pathBuilder(SERIES_META_PATH, slug, source),
              toStore);
          },
          editSeries: async (slug, coverUrl, source, url, title, pinned, chapters) => {
            let obj = await private.getObject(pathBuilder(SERIES_META_PATH, slug, source));
            if (obj) {
              let toStore = seriesBuilder(
                slug || obj.slug,
                coverUrl || obj.coverUrl,
                source || obj.source,
                url || obj.url,
                title || obj.title,
                (pinned !== undefined) ? pinned : obj.pinned,
                chapters || obj.chapters // Empty array is truthy
              );
              return private.storeObject(
                SERIES_META,
                pathBuilder(SERIES_META_PATH, slug, source),
                toStore
              )
            } else {
              // Fail-fast instead of adding the series
              throw new Error("Cannot edit a non-existent series.");
            }
          },
          getSeries: (slug, source) => {
            return private.getObject(pathBuilder(SERIES_META_PATH, slug, source));
          },
          removeSeries: (slug, source) => {
            return private.remove(pathBuilder(SERIES_META_PATH, slug, source));
          },
          getAllSeries: () => {
            // Note for the future: getAll gives you the objects within, while
            // getListing gives you just a list of files; thus, this gives you the
            // metadata within
            if (private.storage.connected) {
              // maxAge cache in millis
              return private.getAll(SERIES_META_PATH_BASE, 30000);
            } else {
              // Promise resolves immediately if no storage is connected
              // https://remotestoragejs.readthedocs.io/en/v1.2.3/js-api/base-client.html#caching-logic-for-read-operations
              return private.getAll(SERIES_META_PATH_BASE);
            }
          }
        }
      }
    }};

    let remoteStorage = new RemoteStorage({cache: true, modules: [Model]});

    remoteStorage.access.claim(RS_PATH, "rw");
    remoteStorage.caching.enable(`/${RS_PATH}/`);

    return remoteStorage;
  })();

  // This will be the main handler that deals with both
  // chapter and series history. All logic should be here
  // and abstracted from the rest of the code
  const globalHistoryHandler = (() => {
    const STORAGE_KEY = "proxyHistory";
    const SORT_KEY = "timestamp";
    const MAX_VALUES = 20;

    // Helper to return an array of objects from a nested object, sorted by key
    let sortObjectByKey = (obj, key) => {
      let sortable = [];
      for (let k in obj) {
        sortable.push(obj[k]);
      }
      sortable.sort((f, s) => s[key] - f[key]);
      return sortable;
    };

    const sync = async () => {
      // Sync operation ensures the local cache doesn't have any dangling objects.
      // We'll sort for the timestamp key since that's what we use everywhere else
      let allSeries = await remoteStorage[RS_PATH].getAllSeries();
      for (const [key, value] of Object.entries(allSeries)) {
        try {
          if (!value[SORT_KEY]) {
            // We don't use split here since the slug can potentially include "-"
            let separatorIndex = key.indexOf("-");
            let slug = key.slice(separatorIndex + 1);
            let source = key.slice(0, separatorIndex);
            await remoteStorage[RS_PATH].removeSeries(slug, source);
          }
        } catch (e) {
          console.error("[Global History] Sync error, continuing.");
        }
      }
    };

    const enabled = () => {
      return localStorage.getItem(STORAGE_KEY) ? true : false;
    };

    const enable = () => {
      let settings = localStorage.getItem("settings");
      let redirected = localStorage.getItem("redirected");
      let storageOnce = localStorage.getItem("storageOnce");
      localStorage.clear();
      if (settings) localStorage.setItem("settings", settings);
      if (redirected) localStorage.setItem("redirected", redirected);
      if (storageOnce) localStorage.setItem("storageOnce", storageOnce);
      localStorage.setItem(STORAGE_KEY, true);
    };

    const disable = () => {
      let settings = localStorage.getItem("settings");
      let redirected = localStorage.getItem("redirected");
      let storageOnce = localStorage.getItem("storageOnce");
      localStorage.clear();
      if (settings) localStorage.setItem("settings", settings);
      if (redirected) localStorage.setItem("redirected", redirected);
      if (storageOnce) localStorage.setItem("storageOnce", storageOnce);
    };

    const pushSeries = async (slug, coverUrl, source, url, title) => {
      await sync();
      source = remoteStorage[RS_PATH].firstPartyHandler(source);
      let allCurrentSeries = sortObjectByKey(await remoteStorage[RS_PATH].getAllSeries() || {}, SORT_KEY);
      let existingSeries = allCurrentSeries.find((e) => e.slug === slug && e.source === source.replace(" ", "_"));

      allCurrentSeries = allCurrentSeries.filter(e => !e.pinned);

      // Be mindful of the cap regardless of the state of the tree
      while ((allCurrentSeries.length + ((existingSeries) ? 0 : 1)) > MAX_VALUES) {
        let last = allCurrentSeries.pop();
        await remoteStorage[RS_PATH].removeSeries(last.slug, last.source);
      }

      if (existingSeries) {
        // Effectively this updates the timestamp of the series, pushing it to the top
        return remoteStorage[RS_PATH].editSeries(slug, coverUrl, source, url, title, existingSeries.pinned, existingSeries.chapters);
      } else {
        return remoteStorage[RS_PATH].addSeries(slug, coverUrl, source, url, title, undefined, undefined);
      }
    };

    const removeSeries = async (slug, source) => {
      await sync();
      return remoteStorage[RS_PATH].removeSeries(slug, source);
    };

    const removeAllUnpinnedSeries = async () => {
      let series = await globalHistoryHandler.getAllUnpinnedSeries();
      if(series) {
        Array.prototype.forEach.call(series, srs => {
            removeSeries(srs.slug, srs.source)
        })
      }
    };

    const addChapters = async (slug, source, chapters) => {
      let existingSeries = await remoteStorage[RS_PATH].getSeries(slug, source);

      if (existingSeries) {
        chapters = [...new Set([...chapters, ...existingSeries.chapters])];
        return remoteStorage[RS_PATH].editSeries(slug, undefined, source, undefined, undefined, undefined, chapters);
      } else {
        console.error("[Global History] addChapters - Series didn't exist.");
      }
    };

    const addChapter = async (slug, source, chapter) => {
      return addChapters(slug, source, [chapter]);
    };

    const removeChapter = async (slug, source, chapter) => {
      let existingSeries = await remoteStorage[RS_PATH].getSeries(slug, source);

      if (existingSeries) {
        chapters = existingSeries.chapters.filter(e => e !== chapter);
        return remoteStorage[RS_PATH].editSeries(slug, undefined, source, undefined, undefined, undefined, chapters);
      } else {
        console.error("[Global History] removeChapter - Series didn't exist.");
      }
    };

    const removeAllChapters = async (slug, source) => {
      let existingSeries = await remoteStorage[RS_PATH].getSeries(slug, source);

      if (existingSeries) {
        return remoteStorage[RS_PATH].editSeries(slug, undefined, source, undefined, undefined, undefined, []);
      } else {
        console.error("[Global History] removeAllChapters - series didn't exist.");
      }
    };

    const getReadChapters = async (slug, source) => {
      let existingSeries = await remoteStorage[RS_PATH].getSeries(slug, source);

      if (existingSeries) {
        return existingSeries.chapters;
      } else {
        console.error("[Global History] getReadChapters - series didn't exist.");
      }
    };

    const pinSeries = async (slug, source) => {
      let existingSeries = await remoteStorage[RS_PATH].getSeries(slug, source);

      if (existingSeries) {
        return remoteStorage[RS_PATH].editSeries(slug, undefined, source, undefined, undefined, true, undefined);
      } else {
        console.error("[Global History] pinSeries - series didn't exist.");
      }
    };

    const unpinSeries = async (slug, source) => {
      let existingSeries = await remoteStorage[RS_PATH].getSeries(slug, source);

      if (existingSeries) {
        return remoteStorage[RS_PATH].editSeries(slug, undefined, source, undefined, undefined, false, undefined);
      } else {
        console.error("[Global History] unpinSeries - series didn't exist.");
      }
    };

    const getAllPinnedSeries = async () => {
      await sync();
      return sortObjectByKey(await remoteStorage[RS_PATH].getAllSeries() || {}, SORT_KEY).filter(e => e.pinned);
    };

    const getAllUnpinnedSeries = async () => {
      await sync();
      return sortObjectByKey(await remoteStorage[RS_PATH].getAllSeries() || {}, SORT_KEY).filter(e => !e.pinned);
    };

    return {
      max: MAX_VALUES,
      enabled,
      pushSeries,
      removeSeries,
      removeAllUnpinnedSeries,
      addChapters,
      addChapter,
      removeChapter,
      removeAllChapters,
      getReadChapters,
      pinSeries,
      unpinSeries,
      getAllPinnedSeries,
      getAllUnpinnedSeries,
      toggle: {
        enable,
        disable
      }
    };
  })();

  const tag = () => {
    try {
      let coverUrl = JSON.parse(document.getElementById("history_coverUrl").textContent);

      let source = JSON.parse(document.getElementById("history_source").textContent);

      if (!source) {
        source = window.location.pathname
        .split("/")
        .filter(e => e)[1]
        .replace("_", " ");
      } else {
        source = source.split("/")[1];
      }

      let slug = JSON.parse(document.getElementById("history_slug").textContent);

      let url = JSON.parse(document.getElementById("history_url").textContent);

      if (url) {
        url = `/${url}`.split(slug)[0] + slug;
      }

      let title = JSON.parse(document.getElementById("history_title").textContent);

      if (source && slug && url && title) {
        remoteStorage.on("ready", async () => {
          await globalHistoryHandler.pushSeries(slug, coverUrl, source, url, title);
          window.dispatchEvent(new CustomEvent("history-ready"));
        });
      }
    } catch (e) {
      // Do nothing, silently fail.
    }
  };
window.addEventListener("load", async () => {
  if((await localStorage.getItem('storageOnce')) == "1") return;
  if (!globalHistoryHandler.enabled()) {
    globalHistoryHandler.toggle.enable();
    localStorage.setItem('storageOnce', "1")
  }
})
</script>

<script>
  // Seed the values from the template for the reader API calls
  const BASE_API_PATH = "/read/api/imgchest/series/";
  const IS_FIRST_PARTY = false;
  const IS_INDEXED = false;
  const IMAGE_PROXY_URL = "https://services.f-ck.me";
</script></head>


<body class="fit-width_limit direction-ltr gap-false theme-Cubari reset-false spread-1 spreadCount-1 spreadOffset-0 selectorAnchor-left selPinned-false selNum-true hoverinos-true sidebar-true previews-false clickTurnPage-true arrowTurnPage-false swipeGestures-true parallelDownloads-5 zoom-100">
  <!-- Global site tag (gtag.js) - Google Analytics -->
<script async="" src="https://www.googletagmanager.com/gtag/js?id=G-ZX1TZQKKPL"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-ZX1TZQKKPL');
</script>

<script>
  const science = (measurePerformance = false) => {
    const scienceEndpoint = "https://obs.f-ck.me/ingest";
    const proxyBasePath = "read";
    const pathFragments = location.pathname.split("/");
    const proxyMetadata = pathFragments[pathFragments.findIndex(e => e === proxyBasePath) + 1];

    if (!proxyMetadata) {
      return;
    }

    const sciencePayload = {
      "p": "cubari.moe",
      "m": proxyMetadata,
    };

    if (measurePerformance) {
      const navPerf = performance.getEntriesByType("navigation");
      if (navPerf.length === 1) {
        sciencePayload["t"] = navPerf[0].duration;
      }
    }

    fetch(`${scienceEndpoint}`, {
      method: "POST",
      mode: "no-cors",
      headers: {
        "Content-Type": "application/json",
      },
      body: JSON.stringify(sciencePayload),
    });
  };

  window.science = science;

  // Science once when the page is loaded
  window.addEventListener("load", () => {
    // We need to add this to the event loop so that the load
    // event can be properly hydrated in the performance object
    setTimeout(() => {
      science(true);
    }, 0);
  });
</script>

  <main id="rdr-main" class="UI Reader last-chapter" tabindex="-1" data-preload="3">
    <aside class="">
      <div class="hide-side UI Button MultiStateButton" data-bind="sidebar_button" data-tip="Show/hide sidebar [S]" data-tip-align="right" data-apr.sidebar="true">
        <div class="hide-side-actual ico-btn"></div>
      </div>
      <header>
        <a href="/" class="ico-btn guya"></a>
        <h1 data-bind="title"><a href="/read/imgchest/o24av9o3e4l/">xx30</a></h1>
        <button class="ico-btn"></button>
      </header>
      <div class="rdr-aside-buffer" data-bind="rdr_aside_buffer"></div>
      <div class="rdr-aside-content" data-bind="rdr_aside_content">
        <section class="rdr-selector" data-bind="rdr_selector">
          <div class="rdr-selector-top">
            <button data-bind="vol_next" class="rdr-selector-vol ico-btn prev disabled" data-tip="Next volume [.]"></button>
            <div class="flex-spacer UI MessageBox" data-bind="message"></div>
            <button data-bind="download_chapter" class="ico-btn download" data-tip="Download chapter in the background"></button>
            <div class="download-anchor">
              <div class="download-wrapper hidden" data-bind="download_wrapper">
                <button data-bind="downloading_chapter" class="ico-btn downloading" disabled=""></button>
                <button data-bind="download_cancel" class="ico-btn download-cancel"></button>
              </div>
            </div>
            <a data-bind="share_button" data-tip="Copy short link [R]" class="rdr-share ico-btn "></a>
            <!-- <a data-bind='comment_button' data-tip="Comments" class="rdr-comment ico-btn"></a> -->
            <button data-bind="jump" class="ico-btn jump" data-tip="Jump to chapter... [J]"></button>
            <button data-bind="search" class="ico-btn search" data-tip="Search the manga... [Ctrl]+[F]" style="display: none;"></button>
          </div>
          <div class="rdr-selector-mid">
            <button data-bind="chap_prev" class="rdr-selector-chap ico-btn prev disabled" data-tip="Previous chapter [[]"></button>
            <div class="rdr-vol-wrap UI FauxDrop" data-bind="selector_vol">
              <label>1</label>
              <select id="rdr-vol" class="UI List SimpleList"><option class="UI SimpleListItem" value="1">1</option></select>
            </div>
            <div class="rdr-chap-wrap UI FauxDrop" data-bind="selector_chap">
              <label>1 - xx30</label>
              <select id="rdr-chap" class="UI List SimpleList"><option class="UI SimpleListItem" value="1">1 - xx30</option></select>
            </div>
            <button data-bind="chap_next" class="rdr-selector-chap ico-btn next disabled" data-tip="Next chapter []]"></button>
          </div>
          <div class="rdr-selector-bot">
            <button data-bind="vol_prev" class="rdr-selector-vol ico-btn next disabled" data-tip="Previous volume [,]"></button>
            <div class="flex-spacer"></div>
            <button data-bind="preload_button" class="ico-btn hidden UI Button MultiStateButton" data-tip="Change preload [L]" data-bhv.preload="3"></button>
            <button data-bind="fit_button" class="ico-btn UI Button MultiStateButton" data-tip="Change fit mode [F]" data-lyt.fit="width_limit"></button>
            <button data-bind="layout_button" class="ico-btn UI Button MultiStateButton" data-tip="Change layout direction [D]" data-lyt.direction="ltr"></button>
            <button data-bind="spread_button" class="ico-btn UI Button MultiStateButton" data-tip="Change two-page mode [Q]" data-lyt.spread="1"></button>
            <button data-bind="sel_pin_button" class="ico-btn UI Button MultiStateButton" data-tip="Pin page selector [N]" data-apr.selpinned="false"></button>
            <button data-bind="settings_button" class="ico-btn" data-tip="Advanced settings... [O]"></button>
          </div>
        </section>
        <section class="rdr-groups UI List Selector Tabs" data-bind="groups">
        <div class="is-active UI SimpleListItem" data-list-id="1">imgchest</div></section>
        <section class="rdr-previews" style="display: none;">
          <div class="header UI Button MultiStateButton" data-bind="previews_button" data-apr.previews="false">
            <span>Previews</span>
            <div class="ico-btn expander" data-tip="Show previews [P]"></div>
          </div>
          <div data-bind="previews" class="rdr-previews-gallery UI List Selector Tabs">
          </div>
        </section>
        <section class="rdr-description">
          <div data-bind="image_description"></div>
        </section>
      </div>
    </aside>
    <div class="rdr-page-selector UI PageSelector" data-bind="page_selector">
      <div class="rdr-page-selector-counter" data-bind="page_keys_count">1/14</div>
      <div class="rdr-page-selector-keys UI List Selector Tabs" data-bind="page_keys">
      <div class="UI Dummy is-active shown preloaded">1</div><div class="UI Dummy preloaded">2</div><div class="UI Dummy preloaded">3</div><div class="UI Dummy">4</div><div class="UI Dummy">5</div><div class="UI Dummy">6</div><div class="UI Dummy">7</div><div class="UI Dummy">8</div><div class="UI Dummy">9</div><div class="UI Dummy">10</div><div class="UI Dummy">11</div><div class="UI Dummy">12</div><div class="UI Dummy">13</div><div class="UI Dummy">14</div></div>
    </div>
    <content data-bind="image_viewer" class="rdr-area UI ReaderImageView">
      <div class="preload-entity" data-bind="preload_entity">
        <img src="https://cdn.imgchest.com/files/84jdcd8dpj4.png"><img><img><img>
      </div>
      <div class="rdr-image-wrap UI List Selector Tabs" data-bind="image_container" tabindex="-1" style="margin-left: 0%;">
      <div tabindex="-1" class="UI List ReaderImageWrapper"><img src="https://cdn.imgchest.com/files/l7lxcmlmb67.png" class="UI ReaderImage" loading="eager"></div><div tabindex="-1" class="UI List ReaderImageWrapper"><img src="https://cdn.imgchest.com/files/84jdcd8dpj4.png" class="UI ReaderImage" loading="eager"></div><div tabindex="-1" class="UI List ReaderImageWrapper"><img src="https://cdn.imgchest.com/files/pyq9crmrqv4.png" class="UI ReaderImage" loading="eager"></div><div tabindex="-1" class="UI List ReaderImageWrapper"><img src="" class="UI ReaderImage"></div><div tabindex="-1" class="UI List ReaderImageWrapper"><img src="" class="UI ReaderImage"></div><div tabindex="-1" class="UI List ReaderImageWrapper"><img src="" class="UI ReaderImage"></div><div tabindex="-1" class="UI List ReaderImageWrapper"><img src="" class="UI ReaderImage"></div><div tabindex="-1" class="UI List ReaderImageWrapper"><img src="" class="UI ReaderImage"></div><div tabindex="-1" class="UI List ReaderImageWrapper"><img src="" class="UI ReaderImage"></div><div tabindex="-1" class="UI List ReaderImageWrapper"><img src="" class="UI ReaderImage"></div><div tabindex="-1" class="UI List ReaderImageWrapper"><img src="" class="UI ReaderImage"></div><div tabindex="-1" class="UI List ReaderImageWrapper"><img src="" class="UI ReaderImage"></div><div tabindex="-1" class="UI List ReaderImageWrapper"><img src="" class="UI ReaderImage"></div><div tabindex="-1" class="UI List ReaderImageWrapper"><img src="" class="UI ReaderImage"></div></div>
      <div class="zoom-level refresh-chapter is-hidden" data-bind="random_chapter">
        <div class="refresh-chapter-note">This is the Blu-ray extras "random chapter".<br>Click this button to
          reshuffle the chapter.</div>
        <div class="ico-btn" data-bind="random_chapter_button">↻</div>
      </div>
      <div class="hover-prev" data-bind="hover_prev">
        <div class="hover-wrap">
          <div class="hover-arrow"></div>
          <div class="hover-sub"></div>
        </div>
      </div>
      <div class="hover-next" data-bind="hover_next">
        <div class="hover-wrap">
          <div class="hover-arrow"></div>
          <div class="hover-sub"></div>
        </div>
      </div>
    <div dir="ltr" class="resize-sensor" style="pointer-events: none; position: absolute; inset: 0px; overflow: hidden; z-index: -1; visibility: hidden; max-width: 100%;"><div class="resize-sensor-expand" style="pointer-events: none; position: absolute; inset: 0px; overflow: hidden; z-index: -1; visibility: hidden; max-width: 100%;"><div style="position: absolute; left: 0px; top: 0px; transition: all 0s ease 0s; width: 503px; height: 610px;"></div></div><div class="resize-sensor-shrink" style="pointer-events: none; position: absolute; inset: 0px; overflow: hidden; z-index: -1; visibility: hidden; max-width: 100%;"><div style="position: absolute; left: 0px; top: 0px; transition: all 0s ease 0s; width: 200%; height: 200%;"></div></div></div></content>
    <div class="zoom-level" data-bind="zoom_level">
      <div class="ico-btn" data-bind="zoom_level_plus"></div>
      <div class="ico-btn" data-bind="zoom_level_minus"></div>
    </div>
  </main>
  <div class="Tooltippy UI" style="display: none;"></div>
  <div class="Tooltippy Error UI"></div>
  <div class="LodaManager hidden UI" tabindex="-1">

  </div>

<script src="/static/js/pickr.min.js?v=29a9e3e
"></script>
<script src="/static/js/jszip.min.js?v=29a9e3e
"></script>
<script type="text/javascript" src="/static/js/ResizeSensor.js?v=29a9e3e
"></script>
<script type="text/javascript" src="/static/js/alg_lib.js?v=29a9e3e
"></script>
<script type="text/javascript" src="/static/js/UI2.js?v=29a9e3e
"></script>
<script type="text/javascript" src="/static/js/init.js?v=29a9e3e
"></script><div style="display: none;"></div><div class="pcr-app" data-theme="nano" aria-label="color picker dialog" role="window" tabindex="-1" style="left: 0px; top: 8px;">
          <div class="pcr-selection">
            <div class="pcr-color-preview" style="display:none" hidden="">
              <button type="button" class="pcr-last-color" aria-label="use previous color" style="color: rgb(255, 255, 255);"></button>
              <div class="pcr-current-color" style="color: rgb(58, 63, 68);"></div>
            </div>

            <div class="pcr-color-palette">
              <div class="pcr-picker" style="left: calc(14.7059% - 9px); top: calc(73.3333% - 9px); background: rgb(58, 63, 68);"></div>
              <div class="pcr-palette" tabindex="0" aria-label="color selection area" role="listbox" style="background: linear-gradient(to top, rgb(0, 0, 0), transparent), linear-gradient(to left, rgb(0, 128, 255), rgb(255, 255, 255));"></div>
            </div>

            <div class="pcr-color-chooser">
              <div class="pcr-picker" style="left: calc(58.3333% - 9px); background-color: rgb(0, 128, 255);"></div>
              <div class="pcr-hue pcr-slider" tabindex="0" aria-label="hue selection slider" role="slider"></div>
            </div>

            <div class="pcr-color-opacity" style="display:none" hidden="">
              <div class="pcr-picker"></div>
              <div class="pcr-opacity pcr-slider" tabindex="0" aria-label="selection slider" role="slider"></div>
            </div>
          </div>

          <div class="pcr-swatches "></div>

          <div class="pcr-interaction">
            <input class="pcr-result" type="text" spellcheck="false" aria-label="color input field">

            <input class="pcr-type active" data-type="HEXA" value="HEXA" type="button" style="display:none" hidden="">
            <input class="pcr-type" data-type="RGBA" value="RGBA" type="button" style="display:none" hidden="">
            <input class="pcr-type" data-type="HSLA" value="HSLA" type="button" style="display:none" hidden="">
            <input class="pcr-type" data-type="HSVA" value="HSVA" type="button" style="display:none" hidden="">
            <input class="pcr-type" data-type="CMYK" value="CMYK" type="button" style="display:none" hidden="">

            <input class="pcr-save" value="Save" type="button" aria-label="save and close">
            <input class="pcr-cancel" value="Cancel" type="button" style="display:none" hidden="" aria-label="cancel and close">
            <input class="pcr-clear" value="Clear" type="button" style="display:none" hidden="" aria-label="clear and close">
          </div>
        </div><div class="pcr-app" data-theme="nano" aria-label="color picker dialog" role="window" tabindex="-1" style="left: 0px; top: 8px;">
          <div class="pcr-selection">
            <div class="pcr-color-preview" style="display:none" hidden="">
              <button type="button" class="pcr-last-color" aria-label="use previous color" style="color: rgb(255, 255, 255);"></button>
              <div class="pcr-current-color" style="color: rgb(238, 238, 238);"></div>
            </div>

            <div class="pcr-color-palette">
              <div class="pcr-picker" style="left: calc(0% - 9px); top: calc(6.66667% - 9px); background: rgb(238, 238, 238);"></div>
              <div class="pcr-palette" tabindex="0" aria-label="color selection area" role="listbox" style="background: linear-gradient(to top, rgb(0, 0, 0), transparent), linear-gradient(to left, rgb(255, 0, 0), rgb(255, 255, 255));"></div>
            </div>

            <div class="pcr-color-chooser">
              <div class="pcr-picker" style="left: calc(0% - 9px); background-color: rgb(255, 0, 0);"></div>
              <div class="pcr-hue pcr-slider" tabindex="0" aria-label="hue selection slider" role="slider"></div>
            </div>

            <div class="pcr-color-opacity" style="display:none" hidden="">
              <div class="pcr-picker"></div>
              <div class="pcr-opacity pcr-slider" tabindex="0" aria-label="selection slider" role="slider"></div>
            </div>
          </div>

          <div class="pcr-swatches "></div>

          <div class="pcr-interaction">
            <input class="pcr-result" type="text" spellcheck="false" aria-label="color input field">

            <input class="pcr-type active" data-type="HEXA" value="HEXA" type="button" style="display:none" hidden="">
            <input class="pcr-type" data-type="RGBA" value="RGBA" type="button" style="display:none" hidden="">
            <input class="pcr-type" data-type="HSLA" value="HSLA" type="button" style="display:none" hidden="">
            <input class="pcr-type" data-type="HSVA" value="HSVA" type="button" style="display:none" hidden="">
            <input class="pcr-type" data-type="CMYK" value="CMYK" type="button" style="display:none" hidden="">

            <input class="pcr-save" value="Save" type="button" aria-label="save and close">
            <input class="pcr-cancel" value="Cancel" type="button" style="display:none" hidden="" aria-label="cancel and close">
            <input class="pcr-clear" value="Clear" type="button" style="display:none" hidden="" aria-label="clear and close">
          </div>
        </div><div class="pcr-app" data-theme="nano" aria-label="color picker dialog" role="window" tabindex="-1" style="left: 0px; top: 8px;">
          <div class="pcr-selection">
            <div class="pcr-color-preview" style="display:none" hidden="">
              <button type="button" class="pcr-last-color" aria-label="use previous color" style="color: rgb(255, 255, 255);"></button>
              <div class="pcr-current-color" style="color: rgb(178, 223, 251);"></div>
            </div>

            <div class="pcr-color-palette">
              <div class="pcr-picker" style="left: calc(29.0837% - 9px); top: calc(1.56863% - 9px); background: rgb(178, 223, 251);"></div>
              <div class="pcr-palette" tabindex="0" aria-label="color selection area" role="listbox" style="background: linear-gradient(to top, rgb(0, 0, 0), transparent), linear-gradient(to left, rgb(0, 157, 255), rgb(255, 255, 255));"></div>
            </div>

            <div class="pcr-color-chooser">
              <div class="pcr-picker" style="left: calc(56.3927% - 9px); background-color: rgb(0, 157, 255);"></div>
              <div class="pcr-hue pcr-slider" tabindex="0" aria-label="hue selection slider" role="slider"></div>
            </div>

            <div class="pcr-color-opacity" style="display:none" hidden="">
              <div class="pcr-picker"></div>
              <div class="pcr-opacity pcr-slider" tabindex="0" aria-label="selection slider" role="slider"></div>
            </div>
          </div>

          <div class="pcr-swatches "></div>

          <div class="pcr-interaction">
            <input class="pcr-result" type="text" spellcheck="false" aria-label="color input field">

            <input class="pcr-type active" data-type="HEXA" value="HEXA" type="button" style="display:none" hidden="">
            <input class="pcr-type" data-type="RGBA" value="RGBA" type="button" style="display:none" hidden="">
            <input class="pcr-type" data-type="HSLA" value="HSLA" type="button" style="display:none" hidden="">
            <input class="pcr-type" data-type="HSVA" value="HSVA" type="button" style="display:none" hidden="">
            <input class="pcr-type" data-type="CMYK" value="CMYK" type="button" style="display:none" hidden="">

            <input class="pcr-save" value="Save" type="button" aria-label="save and close">
            <input class="pcr-cancel" value="Cancel" type="button" style="display:none" hidden="" aria-label="cancel and close">
            <input class="pcr-clear" value="Clear" type="button" style="display:none" hidden="" aria-label="clear and close">
          </div>
        </div><div class="pcr-app" data-theme="nano" aria-label="color picker dialog" role="window" tabindex="-1" style="left: 0px; top: 8px;">
          <div class="pcr-selection">
            <div class="pcr-color-preview" style="display:none" hidden="">
              <button type="button" class="pcr-last-color" aria-label="use previous color" style="color: rgb(255, 255, 255);"></button>
              <div class="pcr-current-color" style="color: rgb(39, 43, 48);"></div>
            </div>

            <div class="pcr-color-palette">
              <div class="pcr-picker" style="left: calc(18.75% - 9px); top: calc(81.1765% - 9px); background: rgb(39, 43, 48);"></div>
              <div class="pcr-palette" tabindex="0" aria-label="color selection area" role="listbox" style="background: linear-gradient(to top, rgb(0, 0, 0), transparent), linear-gradient(to left, rgb(0, 113, 255), rgb(255, 255, 255));"></div>
            </div>

            <div class="pcr-color-chooser">
              <div class="pcr-picker" style="left: calc(59.2593% - 9px); background-color: rgb(0, 113, 255);"></div>
              <div class="pcr-hue pcr-slider" tabindex="0" aria-label="hue selection slider" role="slider"></div>
            </div>

            <div class="pcr-color-opacity" style="display:none" hidden="">
              <div class="pcr-picker"></div>
              <div class="pcr-opacity pcr-slider" tabindex="0" aria-label="selection slider" role="slider"></div>
            </div>
          </div>

          <div class="pcr-swatches "></div>

          <div class="pcr-interaction">
            <input class="pcr-result" type="text" spellcheck="false" aria-label="color input field">

            <input class="pcr-type active" data-type="HEXA" value="HEXA" type="button" style="display:none" hidden="">
            <input class="pcr-type" data-type="RGBA" value="RGBA" type="button" style="display:none" hidden="">
            <input class="pcr-type" data-type="HSLA" value="HSLA" type="button" style="display:none" hidden="">
            <input class="pcr-type" data-type="HSVA" value="HSVA" type="button" style="display:none" hidden="">
            <input class="pcr-type" data-type="CMYK" value="CMYK" type="button" style="display:none" hidden="">

            <input class="pcr-save" value="Save" type="button" aria-label="save and close">
            <input class="pcr-cancel" value="Cancel" type="button" style="display:none" hidden="" aria-label="cancel and close">
            <input class="pcr-clear" value="Clear" type="button" style="display:none" hidden="" aria-label="clear and close">
          </div>
        </div>
<script type="text/javascript">
  // History tagging
  tag();
</script>

</body></html>