[
  {
    "articleStyle": 0,
    "contentBlacklist": "",
    "contentWhitelist": "",
    "customOrder": -10103523,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n\"User-Agent\": \"Mozilla/5.0 (Linux; U; Android 8.1.0; zh-CN; MI 8 Lite Build/OPM1.171019.019) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 UCBrowser/13.2.0.1100 Mobile Safari/537.36\"\n}",
    "injectJs": "",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.module-item",
    "ruleContent": "<div class=\"play_video\">\n{{@@title@text}}{{@@class.player-wrapper@all}}",
    "ruleImage": "img@data-cover",
    "ruleLink": "a.0@href",
    "ruleNextPage": "page",
    "rulePubDate": "class.module-item-caption@text",
    "ruleTitle": "img@alt",
    "singleUrl": false,
    "sortUrl": "最新::https://cn1.91short.com/\n推荐::/short/recommend_home_list/\n美女正妹::/short/label_related_list/Ug_pu_kskqY%3D\n91大神::/short/label_related_list/otDa4t6lDDQ%3D\n门事件::/short/label_related_list/3QW8lOdBcls%3D\n大神::/search?wd=大神\n变量搜索::/search?wd={{java.encodeURI(source.getVariable())}}\n学生::/search?wd=学生\n91::/search?wd=91\n偷情::/search?wd=偷情\n推特::/search?wd=推特\n少女::/search?wd=少女\n贫乳::/search?wd=贫乳\n口交::/search?wd=口交\n妹妹::/search?wd=妹妹\n美女::/search?wd=美女\n\n美臀巨臀::/short/label_related_list/azG9-jZfzG0%3D?title=%E7%BE%8E%E8%87%80%E5%B7%A8%E8%87%80\n后入::/search?wd=后入\n国产高清::/short/home_category_list/hd\n排行::/short/ranking_list\n国产AV::/short/label_related_list/1Bd0Zzp8D_E%3D\n大象传媒::/short/label_related_list/F16wCJ3LmWY%3D\n情趣综艺::/short/label_related_list/-0S1LwkskU4%3D\n推荐2::/film/home_recommend_list\n专题::/film/home_subject_list\n女优::/film/home_actor_list\n无码::/film/home_category_list/coded\n中字::/film/home_category_list/chinese_subtitle\n动漫::/film/home_list/jOSxa-4E27U%3D\n经典三级::/film/home_list/uZg0vDL8P8A%3D\n欧美性爱::/film/home_list/LblejiEnM6s%3D\nAV解说::/film/home_list/vJq_GzRiesQ%3D",
    "sourceComment": "翻页和封面不会\n\n永久域名 https://cn1.91short.com",
    "sourceGroup": "版本",
    "sourceIcon": "https://cn1.91short.com/public/statics/logo.png",
    "sourceName": "1.0",
    "sourceUrl": "https://cn1.91short.com/",
    "style": "iframe{\n\theight:auto\n}\ntitle{\n\tdisplay:block\n}"
  },
  {
    "articleStyle": 1,
    "customOrder": -10102258,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "ul@li",
    "ruleContent": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"UTF-8\">\n<title>内容提取</title>\n<!-- v2025.05.10 -->\n\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<script src=\"https://code.jquery.com/jquery-3.6.0.min.js\"></script>\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.css\" />\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.js\"></script>\n<style>\n    body { font-family: Arial, sans-serif; font-size: 16px; }\n    #title, #page, #loading-status { margin: 0 auto; font-size: 20px; text-align: center; }\n    #description, #urls, #video-url, #video-sources, #messages { width: 100%; max-width: 800px; margin: 1.5px auto; font-size: 14px; text-align: left; word-wrap: break-word; white-space: pre-wrap; }\n    #text, #text :not(img), #text img + * { text-indent: 2em; width: 100%; font-size: 16px; line-height: 1.5em; margin-top: 0; margin-bottom: 0; word-wrap: break-word; white-space: pre-wrap; }\n    img, #text img { width: 100%; height: auto; display: block; margin-bottom: 1.5px; }\n    .flex-container { display: flex; justify-content: center; align-items: center; gap: 10px; margin: 1.5px 0; font-size: 14px; }\n    button, select { flex: 1 1 31%; padding: 3px; border: 1px solid #ccc; border-radius: 5px; box-sizing: border-box; cursor: pointer; background-color: #f9f9f9; transition: background-color 0.3s ease; margin: 1.5px; min-width: 0; font-size: 14px; }\n    #url-select, #video-source-select { flex: 1 1 100%; margin-left: 0; margin-right: 0; text-align: center; }\n    #video-element { width: 100%; height: auto; }\n    textarea { width: 100%; height: auto; min-height: 100px; box-sizing: border-box; resize: vertical; }\n    .error, .warn { color: red; }\n</style>\n</head>\n<body>\n    <h3 id=\"title\">{{@@title@text||h1.0@text||h2.0@text||.title.0@text}}</h3>\n    <p id=\"description\">{{@@.info.0@html||.jianjie@html}}</p>\n    <p id=\"page\" style=\"display:none;\">共<span id=\"total-pages\">1</span>页</p>\n    <p id=\"loading-status\" style=\"display:none;\"></p>\n\n    <div class=\"flex-container\" id=\"loading-buttons\" style=\"display:none;\">\n        <button id=\"prev-page-btn\">上一页</button>\n        <button id=\"next-page-btn\">下一页</button>\n        <button id=\"auto-load-btn\">自&nbsp;&nbsp;动</button>\n    </div>\n    \n    <div class=\"flex-container\">\n        <select id=\"url-select\" style=\"display:none;\"></select>\n    </div>\n    \n    <div class=\"flex-container\">\n        <button id=\"toggle-urls-btn\">显/隐网址</button>\n        <button id=\"toggle-messages-btn\">显/隐信息</button>\n        <button id=\"toggle-debug-btn\">显/隐调试</button>\n    </div>\n    <div id=\"urls\"></div>\n    <div id=\"messages\"></div>\n    <div id=\"debug-info\"></div>\n    <div id=\"video-url\"></div>\n    <div id=\"video-container\" style=\"display: none;\">\n        <video id=\"video-element\" controls preload=\"auto\" width=\"640\" height=\"264\">\n            <source id=\"video-source\" src=\"\" type=\"\">您的浏览器不支持 video 标签。\n        </video>\n    </div>\n    <div class=\"flex-container\" id=\"video-source-container\" style=\"display: none;\">\n        <select id=\"video-source-select\" onchange=\"updateVideoSource()\"></select>\n    </div>\n    <div id=\"images\"></div>\n    <div id=\"text\"></div>\n\n    <script>\n        // 配置对象，包含各种选择器、延迟时间等配置项\n        const config = {    \n            videoSelector: 'body', // 视频选择器\n            imgSelector: '.gridlane-box-inside img,.photos figure img,.content p img', // 图片选择器\n            textSelector: '#content', // 文本选择器\n            debugSelector: '#content, .page, .pager, .content, script', // 调试信息选择器\n            swapImageAttributes: false, // 是否交换图片属性\n            delayTime: 1500, // 延迟提取时间\n            retryDelayTime: 1500, // 重试加载延迟时间\n            maxLoadAttempts: 3, // 最大加载次数\n            autoLoading: false, // true自动模式，false单页模式\n            debugOnce: 0, // 只在特定索引输出一次调试信息\n            totalPagesText: '{{@@.page.0@a.-2@textNodes}}', // 总页码\n            urlSuffixToRemove: /\\.html$/, // 移除url后缀\n            pageUrlText: '{urlPrefix}_{i}.html', // 拼接URL模板        \n            ListMode: true, // true网址列表模式，false网址拼接模式    \n            initialUrls: `{{@@#sort-item-5.0@a@href}}`, // 网址\n            initialUrlsName: `{{@@#sort-item-5.0@a@span@text}}`, // 网址名称\n            sourceurl: '', // 来源URL前缀\n        };\n\n        let videoSources = []; // 存储视频源数组\n        let loadAttempts = {}; // 记录每个URL的加载尝试次数\n        let urls = []; // 存储所有页面的URL\n        let imageBox;\n        let textBox;\n        let currentPageIndex = 0; // 当前页面索引\n        let canLoadNextPage = true; // 控制是否可以加载下一页\n        let autoLoadInProgress = false; // 自动加载状态\n\n        // 构建URL列表\n        function buildUrls(totalPages, baseUrl) {\n            let initialUrlsArray = config.initialUrls.trim().split('\\n').filter(url => url.trim() !== '');\n            let initialUrlsNameArray = config.initialUrlsName.trim().split('\\n').filter(name => name.trim() !== '');\n\n            if (config.ListMode && initialUrlsArray.length > 0) {\n                if (initialUrlsArray.length !== initialUrlsNameArray.length) {\n                    $('#messages').append(`<span class=\"warn\">警告：initialUrls 和 initialUrlsName 的长度不匹配。</span><br>`);\n                }\n\n                urls = initialUrlsArray.map(url => {\n                    if (config.sourceurl && url.startsWith('/') && !/^https?:\\/\\//i.test(url)) {\n                        return config.sourceurl.replace(/\\/$/, '') + url;\n                    } else {\n                        return url;\n                    }\n                });\n\n                urls.forEach((url, index) => {\n                    const name = initialUrlsNameArray[index] || `第 ${index + 1} 页`;\n                    $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n                    $('#urls').append(`<div>${name}: ${url}</div>`);\n                });\n            } else {\n                if (totalPages === 1) {\n                    urls.push(baseUrl);\n                } else {\n                    urls.push(baseUrl);\n                    for (let i = 2; i <= totalPages; i++) {\n                        urls.push(config.pageUrlText.replace('{urlPrefix}', baseUrl.replace(config.urlSuffixToRemove, '').replace(/\\/$/, '')).replace('{i}', i));\n                    }\n                }\n\n                urls.forEach((url, index) => {\n                    const name = `第 ${index + 1} 页`;\n                    $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n                    $('#urls').append(`<div>${name}: ${url}</div>`);\n                });\n            }\n\n            $('#total-pages').text(urls.length);\n            toggleNavigationButtons();\n            toggleTotalPagesDisplay();\n        }\n\n        // 规范化URL\n        function normalizeUrl(url) {\n            if (typeof url !== 'string' || !url.trim()) {\n                return '';\n            }\n            const match = url.match(/['\"](.*?)['\"]/);\n            if (match && match[1]) {\n                url = match[1];\n            }\n\n            function processUrl(str) {\n                str = str.trim();\n                str = str.replace(/\\\\u[\\dA-F]{4}/gi, match => String.fromCharCode(parseInt(match.replace(/\\\\u/g, ''), 16)));\n                str = decodeURIComponent(str);\n                str = str.replace(/^http:\\/([^/])/, 'http://$1');\n                str = str.replace(/^https:\\/([^/])/, 'https://$1');\n                return str;\n            }\n            return processUrl(url);\n        }\n\n        // 清空容器内容\n        function clearContainers() {\n            $('#messages').empty();\n            $('#images').empty();\n            $('#text').empty();\n        }\n\n        // 更新图像源\n        function updateImageSrc(elements, shouldSwap) {\n            elements.each(function () {\n                const $this = $(this);\n                const attrsToUpdate = {};\n                if (shouldSwap) {\n                    ['data-original', 'data-src', 'data-url'].forEach(attr => {\n                        if ($this.attr(attr)) {\n                            attrsToUpdate['src'] = $this.attr(attr);\n                        }\n                    });\n                }\n                $this.attr(attrsToUpdate);\n            });\n            return elements;\n        }\n\n        // 切换导航按钮显示状态\n        function toggleNavigationButtons() {\n            if ($('#url-select option').length > 1 && !config.autoLoading) {\n                $('#loading-buttons').show();\n                $('#url-select').show();\n            } else {\n                $('#loading-buttons').hide();\n                $('#url-select').hide();\n            }\n        }\n\n        // 显示加载状态\n        function showLoadingStatus(pageNumber) {\n            const selectedOption = $('#url-select option:selected').text();\n            $('#loading-status').text(`正在加载：${selectedOption}`).show();\n        }\n\n        // 隐藏加载状态\n        function hideLoadingStatus() {\n            $('#loading-status').hide();\n        }\n\n        // 加载指定索引的内容\n        function loadContent(index) {\n            if (index < 0 || index >= urls.length || !canLoadNextPage) return;\n            canLoadNextPage = false;\n            currentPageIndex = index;\n            $('#url-select').val(index);\n            $('#messages').append(`<div>当前地址: <span class=\"warn\">${urls[index]}</span></div>`);\n            if (autoLoadInProgress) {\n                showLoadingStatus(index + 1);\n            }\n            $.ajax({\n                url: urls[index],\n                type: 'GET',\n                success: function (data) {\n                    try {\n                    const $data = $(data);\n                    let updatedHtmlContent = data.replace(/(['\"])(\\/\\/)(?!\\/)/g, '$1https://')\n                        .replace(/src=\"upload/gi, 'src=\"/upload')\n                        .replace(/style=[\"'][^'\"]+[\"']/gi, '')\n                        .replace(/\\\\\\//g, '/');\n                    const parser = new DOMParser();\n                    const doc = parser.parseFromString(updatedHtmlContent, \"text/html\");\n\n                    if (config.debugOnce === index) {\n                        const debugElements = $(doc).find(config.debugSelector);\n                        if (debugElements.length > 0) {\n                            const debugContents = $('<pre>').html(debugElements.clone().wrapAll('<div/>').parent().html()).html();\n                            $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">${debugContents}</textarea></span>`);\n                        } else {\n                            $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">调试信息未提取到内容，请检查选择器！</textarea></span>`);\n                        }\n                    }\n                    // 方法1：提取视频\n                    const videoSources1 = [];\n                    const videoContents = $(doc).find(config.videoSelector);\n                    const videoTags = $(videoContents).find('video, source');\n                    videoTags.each(function() {\n                        const videosrc = $(this).attr('src') || \n                                     $(this).attr('data-src') || \n                                     $(this).attr('data-original') || '';\n                        \n                        if (videosrc) {\n                            videoSources1.push(videosrc);\n                        }\n                    });\n                    //反馈\n                    if (videoSources1.length > 0) {\n                        $('#messages').append(`<span>方法1，找到 ${videoSources1.length} 个视频。</span><br>`);\n                    }\n\n                    // 方法2：正则提取视频\n                    const regex = /['\"]https?[^'<>\"]+(m3u8|mp4|webm|ogg|flv|mp3|m4a|wav|ape|flac)([^'<>\"]+)?['\"]/gi;\n                    const matches = data.match(regex);\n                    const videoSources2 = [];\n\n                    if (matches) {\n                        const uniqueMatches = [...new Set(matches)];\n                    \n                        uniqueMatches.forEach(match => {\n                            const normalizedSrc = normalizeUrl(match.replace(/['\"]/g, ''));\n                            videoSources2.push(normalizedSrc);\n                        });\n                    }\n                    //反馈\n                    if (videoSources2.length > 0) {\n                        $('#messages').append(`<span>方法2，找到 ${videoSources2.length} 个视频。</span><br>`);\n                    }\n\n                    // 合并两种方法的结果\n                    videoSources = [...videoSources1, ...videoSources2];\n\n                    // 去重并标准化 URL\n                    const imageExtensions = /\\.(jpg|jpeg|png|gif|bmp|svg)$/i;\n\n                    videoSources = videoSources\n                                  .map(src => normalizeUrl(src.replace(/\\\\+/g, '')))\n                                  .filter(src => src) // 过滤空值\n                                  .filter(src => !imageExtensions.test(src)); // 移除图片地址\n                        \n                    videoSources = [...new Set(videoSources)];// 去重\n\n                    // 显示最终结果\n                    $('#messages').append(`<span>总共找到 ${videoSources.length} 个视频。</span><br>`);\n\n                    if (videoSources.length > 0) {\n                        $('#messages').append(`<span>成功提取到视频，找到 ${videoSources.length} 个视频。</span><br>`);\n                        videoSources.forEach((src, idx) => {\n                            $('#messages').append(`<div>视频地址:<span class=\"warn\"> ${src}</span><br></div>`);\n                            $('#video-source-select').append(`<option value=\"${idx}\">视频源 ${idx + 1}</option>`);\n                        });\n                    \n                        if (videoSources.length == 1) {\n                            $('#video-container').show();\n                            $('#video-url').show();\n                            $('#video-source-container').hide();\n                            updateVideoSource();\n                        } else if (videoSources.length > 1) {\n                            $('#video-container').show();\n                            $('#video-url').show();\n                            $('#video-source-container').show();\n                            updateVideoSource();\n                        } else {\n                            $('#video-container').hide();\n                            $('#video-url').hide();\n                            $('#video-source-container').hide();\n                        }\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未找到视频源。</span><br>`);\n                        $('#video-container').hide();\n                        $('#video-url').hide();\n                        $('#video-source-container').hide();\n                    }\n\n                    //提取图片\n                    const $imgContents = $(doc).find(config.imgSelector);\n                    const shouldSwap = config.swapImageAttributes;\n                    const newContents = updateImageSrc($imgContents.clone(), shouldSwap);\n                    $('#images').append(newContents).show();\n                    if (newContents.length > 0) {\n                        $('#messages').append(`<span>成功提取图片，共 ${newContents.length} 张。</span><br>`);\n                        newContents.each(function () {\n                            const imgSrc = $(this).attr('src') || $(this).attr('data-original') || $(this).attr('data-src') || $(this).attr('data-url');\n                            $('#messages').append(`<div>地址:<span class=\"warn\"> ${imgSrc}</span><br></div>`);\n                        });\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未提取到图片。</span><br>`);\n                    }\n\n                    //提取图片和文本\n                    const textContents = $(doc).find(config.textSelector).map(function () {\n                        const $currentContents = $(this);\n                        $currentContents.find('img + br, script, video, source, iframe').remove();\n                        $currentContents.html($currentContents.html().replace(/>\\s+/gi, '>').replace(/<\\/?br\\s*([^>]*)\\s*\\/?>/gi, '\\n').replace(/\\n+/g, '\\n'));\n                        return $currentContents.html();\n                    }).get().join('');\n                    if (textContents.trim()) {\n                        $('#text').append(`<span>${textContents}</span><br>`).show();\n                        $('#messages').append(`<span>成功提取图文。</span><br>`);\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未提取到图文。</span><br>`);\n                    }\n\n                    if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                        setTimeout(() => { \n                            canLoadNextPage = true;\n                            loadContent(currentPageIndex + 1); \n                        }, config.delayTime);\n                    } else {\n                        canLoadNextPage = true;\n                        if (autoLoadInProgress) {\n                            hideLoadingStatus();\n                        }\n                    }\n                } catch (parseError) {\n                    $('#messages').append(`<span class=\"error\">解析页面内容时发生错误: ${parseError.message}</span><br>`);\n                    handleLoadFailure(urls, index);\n                } finally {\n                    if (imageBox) imageBox.viewer.update();\n                    if (textBox) textBox.viewer.update();\n                }\n            },\n            error: function (jqXHR, textStatus, errorThrown) {\n                let errorMessage = `内容加载失败: ${urls[index]}`;\n                switch (textStatus) {\n                    case 'timeout':\n                        errorMessage += ', 请求超时';\n                        break;\n                    case 'abort':\n                        errorMessage += ', 请求被取消';\n                        break;\n                    case 'parsererror':\n                        errorMessage += ', 解析响应出错';\n                        break;\n                    default:\n                        errorMessage += `, 状态码: ${jqXHR.status}, 错误信息: ${errorThrown}`;\n                        break;\n                }\n                $('#messages').append(`<span class=\"error\">${errorMessage}</span><br>`);\n                handleLoadFailure(urls, index);\n                }\n            });\n        }\n\n        // 处理加载失败的情况\n        function handleLoadFailure(urls, index) {\n            if (!loadAttempts[urls[index]]) {\n                loadAttempts[urls[index]] = 1;\n            } else {\n                loadAttempts[urls[index]]++;\n            }\n            if (loadAttempts[urls[index]] <= config.maxLoadAttempts) {\n                const retryMessage = `第${index + 1}页加载失败，正在进行第${loadAttempts[urls[index]]}次加载！`;\n                $('#messages').append(`<span class=\"error\">${retryMessage}</span><br>`);\n                setTimeout(() => { \n                    canLoadNextPage = true;\n                    loadContent(index); \n                }, config.retryDelayTime);\n            } else {\n                const finalErrorMessage = `第${index + 1}页加载失败，已达到最大尝试次数(${config.maxLoadAttempts})！`;\n                $('#messages').append(`<span class=\"error\">${finalErrorMessage}</span><br>`);\n                if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                    setTimeout(() => { \n                        canLoadNextPage = true;\n                        loadContent(currentPageIndex + 1); \n                    }, config.delayTime);\n                } else {\n                    canLoadNextPage = true;\n                    if (autoLoadInProgress) {\n                        hideLoadingStatus();\n                    }\n                }\n            }\n        }\n\n        // 更新视频源\n        function updateVideoSource() {\n            const selectedIndex = parseInt(document.getElementById('video-source-select').value);\n            if (isNaN(selectedIndex) || !videoSources[selectedIndex]) {\n                $('#messages').append(`<span class=\"warn\">未找到有效的视频源。</span><br>`);\n                console.warn(\"Invalid or undefined video source:\", selectedIndex, videoSources);\n                return;\n            }\n\n            const selectedSource = videoSources[selectedIndex];\n            document.getElementById('video-url').textContent = `视频地址:\\n ${selectedSource}`;\n\n            const videoSourceElement = document.getElementById('video-source');\n            videoSourceElement.src = selectedSource;\n\n            const videoElement = document.getElementById('video-element');\n            videoElement.load();\n\n            $('#messages').append(`<span>更新视频源为: ${selectedSource}</span><br>`);\n            console.log(\"Updated video source to:\", selectedSource);\n        }\n\n        // 切换总页数显示状态\n        function toggleTotalPagesDisplay() {\n            if (urls.length > 1) {\n                $('#page').show();\n            } else {\n                $('#page').hide();\n            }\n        }\n\n        // 页面加载完成后执行的主要逻辑\n        $(document).ready(function () {\n            imageBox = document.getElementById('images');\n            textBox = document.getElementById('text');\n            if (imageBox && textBox) {\n                new Viewer(imageBox, { title: true, interval: 2000 });\n                new Viewer(textBox, { title: true, interval: 2000 });\n            }\n\n            const totalPagesText = config.totalPagesText;\n            const totalPages = parseInt(totalPagesText, 10) || 1;\n            const baseUrl = '{{baseUrl}}';\n\n            clearContainers();\n            $('#urls, #debug-info textarea, #video-url, #video-source-select').empty();\n            $('#urls, #messages, #debug-info, #video-url, #video-container, #video-source-container, #images, #text').hide();\n\n            buildUrls(totalPages, baseUrl);\n\n            const urlSelect = document.getElementById('url-select');\n            if (urlSelect.options.length > 0) {\n                urlSelect.value = '0'; \n\n                if (config.autoLoading) {\n                    autoLoadInProgress = true;\n                    for (let i = 0; i < urls.length; i++) {\n                        loadContent(i);\n                    }\n                } else {\n                    loadContent(0);\n                }\n            } else {\n                loadContent(0);\n            }\n\n            $('#url-select').change(function () {\n                clearContainers();\n                const selectedIndex = parseInt($(this).val());\n                loadContent(selectedIndex);\n            });\n            $('#prev-page-btn').click(function () {\n                clearContainers();\n                if (currentPageIndex > 0) {\n                    loadContent(currentPageIndex - 1);\n                }\n            });\n            $('#next-page-btn').click(function () {\n                clearContainers();\n                if (currentPageIndex < urls.length - 1) {\n                    loadContent(currentPageIndex + 1);\n                }\n            });\n            $('#auto-load-btn').click(function () {\n                autoLoadInProgress = true;\n                showLoadingStatus(1); \n                for (let i = currentPageIndex + 1; i < urls.length; i++) {\n                    loadContent(i);\n                }\n            });\n            $('#toggle-messages-btn').click(function () { $('#messages').toggle(); });\n            $('#toggle-urls-btn').click(function () { $('#urls').toggle(); });\n            $('#toggle-debug-btn').click(function () { $('#debug-info').toggle(); });\n        });\n    </script>\n</body>\n</html>",
    "ruleImage": "a@data-original",
    "ruleLink": "a.0@href",
    "ruleNextPage": "page||text.下一页@href",
    "rulePubDate": "[class=\"pic-text text-right\"]@text",
    "ruleTitle": "h4@text",
    "singleUrl": false,
    "sortUrl": "搜索🔍::/jiejie/index.php/vod/search.html?wd={{source.getVariable()}}\n黄瓜资源::/jiejie/index.php/vod/type/id/87.html\n155资源::/jiejie/index.php/vod/type/id/248.html\n森林资源::/jiejie/index.php/vod/type/id/117.html\n奥斯卡资源::/jiejie/index.php/vod/type/id/86.html\n百万资源::/jiejie/index.php/vod/type/id/237.html\n制服诱惑::/jiejie/index.php/vod/show/id/251.html\n中文字幕::/jiejie/index.php/vod/show/id/254.html\n美乳巨乳::/jiejie/index.php/vod/show/id/262.html\n熟女人妻::/jiejie/index.php/vod/show/id/259.html\n萝莉少女::/jiejie/index.php/vod/show/id/260.html\n强奸乱伦::/jiejie/index.php/vod/show/id/263.html\n无码专区::/jiejie/index.php/vod/show/id/249.html",
    "sourceComment": "jiejiesp.xyz",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "1.1",
    "sourceUrl": "https://wap.jiejiesp27.xyz/"
  },
  {
    "articleStyle": 1,
    "customOrder": 0,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "header": "{\n \"User-Agent\":\"Mozilla/5.0 (Linux; Android 12; HarmonyOS; OCE-AN50; HMSCore 6.15.0.302) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.196 HuaweiBrowser/16.0.3.302 Mobile Safari/537.36\",\n \"Cookie\":\"accessAgeDisclaimerPH=1; x-index-auth=authed\",\n \"Accept-Encoding\":\"\"\n}",
    "lastUpdateTime": 1778198793380,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.thumbnail group",
    "ruleContent": "<js>\nfunction $(rule) {\n    return java.getElements(rule);\n}\n\n// 1. 匹配 eval 加密段\nvar pageSource = String(result);\nvar evalMatch = pageSource.match(/eval\\(function\\(p,a,c,k,e,d\\).*\\)\\)/);\nif (!evalMatch) {\n    result = \"<p>错误：未找到完整的视频源加密段</p>\";\n} else {\n    eval(evalMatch[0]);\n\n    // ========== 代理替换 ==========\n    source = source.replace(/https:\\/\\/(([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,})\\//, 'https://www.thisav.sbs/jmpres/$1/');\n    if (typeof source842 !== 'undefined') {\n        source842 = source842.replace(/https:\\/\\/(([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,})\\//, 'https://www.thisav.sbs/jmpres/$1/');\n    }\n    if (typeof source1280 !== 'undefined') {\n        source1280 = source1280.replace(/https:\\/\\/(([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,})\\//, 'https://www.thisav.sbs/jmpres/$1/');\n    }\n\n    if (typeof source !== 'undefined') {\n        var qualityMap = {};\n\n        // 2. 主 m3u8 子画质\n        try {\n            var v_res = java.ajax(source);\n            var data = String(v_res).match(/.*video\\.m3u8/g);\n            if (data != null && data.length > 0) {\n                for (var i = 0; i < data.length; i++) {\n                    var link = source.replace('playlist.m3u8', data[i]);\n                    var name = \"\";\n                    if (String(data[i]).match(/x/)) {\n                        name = String(data[i]).match(/(\\d+)\\//)[1] + \"p\";\n                    } else {\n                        name = String(data[i]).match(/(.*)\\//)[1];\n                    }\n                    if (!qualityMap[name]) qualityMap[name] = link;\n                }\n            }\n        } catch(e) {}\n\n        // 3. 备用源 720p/1080p\n        if (typeof source842 !== 'undefined' && source842) {\n            if (!qualityMap['720p']) qualityMap['720p'] = source842;\n        }\n        if (typeof source1280 !== 'undefined' && source1280) {\n            if (!qualityMap['1080p']) qualityMap['1080p'] = source1280;\n        }\n\n        // 4. 自动源\n        qualityMap['自动'] = source;\n\n        // 5. 生成画质列表（自动放最后）\n        var url_list = '';\n        for (var k in qualityMap) {\n            if (k === '自动') continue;\n            url_list += '<li><a link=\"' + qualityMap[k] + '\">' + k + '</a></li>\\n';\n        }\n        url_list += '<li><a link=\"' + qualityMap['自动'] + '\">自动</a></li>\\n';\n        var v_list = '<ul class=\"play_list\">' + url_list + '</ul>';\n\n        // 6. 简介\n        var desc = $('.space-y-2 .text-secondary.1').text();\n        desc = String(desc).replace(/番号:|番號:|發行日期:|发行日期:/, '');\n        var sort = '&nbsp;';\n        var intro = '中文:' + java.get('title') + '<br>';\n        var infoEls = $('.space-y-2 .text-secondary');\n        for (var j = 1; j < infoEls.length - 1; j++) {\n            intro += infoEls[j].text() + '<br>';\n        }\n        intro = java.t2s(intro);\n\n        // 7. 构建 HTML（保留原界面样式）\n        var title = java.get('title');\n        var pic = java.get('pic');\n        var tab_name = '<li>画质</li>\\n';\n\n        result = '<!DOCTYPE html>\\n<html>\\n<head>\\n';\n        result += '<meta charset=\"utf-8\">\\n';\n        result += '<meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no\">\\n';\n        result += '<title>' + title + '</title>\\n';\n        result += '<style>\\n';\n        result += 'body{margin:0;background:#000;color:#fff;font-family:sans-serif;}\\n';\n        result += '.MacPlayer{position:relative;width:100%;background:#000;}\\n';\n        result += '.MacPlayer video{width:100%;display:block;}\\n';\n        result += '.card{margin:8px;background:#1a1a1a;border-radius:8px;padding:12px;}\\n';\n        result += '.v_title{font-size:16px;margin:0 0 8px 0;}\\n';\n        result += '.v_desc{font-size:13px;color:#aaa;}\\n';\n        result += '.open_content{color:#fe628e;cursor:pointer;}\\n';\n        result += '.v_content{margin-top:8px;}\\n';\n        result += '.cover img{width:100%;border-radius:4px;}\\n';\n        result += '.intro{font-size:13px;color:#ddd;}\\n';\n        result += '.tab_control{list-style:none;padding:0;display:flex;gap:8px;}\\n';\n        result += '.tab_control li{padding:4px 12px;background:#333;border-radius:4px;cursor:pointer;}\\n';\n        result += '.tab_control li.current{background:#fe628e;}\\n';\n        result += '.play_list{list-style:none;padding:0;display:flex;flex-wrap:wrap;gap:8px;}\\n';\n        result += '.play_list li{padding:6px 12px;background:#333;border-radius:4px;cursor:pointer;}\\n';\n        result += '.play_list li.current{background:#fe628e;}\\n';\n        result += '.play_list_sort{cursor:pointer;color:#fe628e;margin-bottom:8px;}\\n';\n        result += '</style>\\n';\n        result += '<script src=\"https://code.jquery.com/jquery-3.0.0.min.js\"><\\/script>\\n';\n        result += '<script src=\"https://cdnjs.thisav.sbs/ajax/libs/hls.js/1.4.3/hls.min.js\"><\\/script>\\n';\n        result += '</head>\\n<body>\\n';\n\n        // 播放器区域\n        result += '<div class=\"MacPlayer\" id=\"MacPlayer\">\\n';\n        result += '  <video id=\"videoPlayer\" controls playsinline></video>\\n';\n        result += '</div>\\n';\n\n        // 简介卡片\n        result += '<div class=\"card v_info\">\\n';\n        result += '  <h2 class=\"v_title\">' + title + '</h2>\\n';\n        result += '  <p class=\"v_desc\">\\n';\n        result += '    <span class=\"desc\">' + desc + '</span>\\n';\n        result += '    <span>' + sort + '</span>\\n';\n        result += '    <span class=\"open_content\" id=\"open_content\">简介</span>\\n';\n        result += '  </p>\\n';\n        result += '  <div class=\"v_content\" id=\"v_content\" style=\"display:none;\">\\n';\n        result += '    <div class=\"cover\"><img src=\"' + pic + '\"></div>\\n';\n        result += '    <div class=\"content\" id=\"intro_content\">\\n';\n        result += '      <div id=\"intro\"><p>' + intro + '</p>\\n';\n        result += '        <div class=\"show_more\" id=\"show_more\" style=\"display:block;\"></div>\\n';\n        result += '      </div>\\n';\n        result += '    </div>\\n';\n        result += '  </div>\\n';\n        result += '</div>\\n';\n\n        // 画质切换卡片\n        result += '<div class=\"card v_list\">\\n';\n        result += '  <ul class=\"tab_control play_from\">' + tab_name + '</ul>\\n';\n        result += '  <div style=\"height:34px;\"></div>\\n';\n        result += '  <div class=\"tab_content\" id=\"play_list\">\\n';\n        result += '    <div class=\"play_list_sort\" id=\"play_list_sort\">⇅ 正序/倒序</div>\\n';\n        result += '    ' + v_list + '\\n';\n        result += '  </div>\\n';\n        result += '</div>\\n';\n\n        // 核心播放控制器 JS\n        result += '<script>\\n';\n        result += 'var video = document.getElementById(\"videoPlayer\");\\n';\n        result += 'var hls = null;\\n';\n        result += 'function loadSource(url) {\\n';\n        result += '  if(hls){ hls.stopLoad(); hls.detachMedia(); hls.destroy(); }\\n';\n        result += '  if(Hls.isSupported()) {\\n';\n        result += '    hls = new Hls({ autoStartLoad: true });\\n';\n        result += '    hls.loadSource(url);\\n';\n        result += '    hls.attachMedia(video);\\n';\n        result += '    hls.on(Hls.Events.MANIFEST_PARSED, function() { video.play(); });\\n';\n        result += '  } else if (video.canPlayType(\"application/vnd.apple.mpegurl\")) {\\n';\n        result += '    video.src = url;\\n';\n        result += '    video.addEventListener(\"loadedmetadata\", function() { video.play(); });\\n';\n        result += '  }\\n';\n        result += '}\\n';\n\n        // 初始化：加载自动源\n        result += 'loadSource(\"' + qualityMap['自动'] + '\");\\n';\n\n        // 画质点击事件\n        result += '$(\".play_list li\").click(function(){\\n';\n        result += '  var $this = $(this);\\n';\n        result += '  $(\".play_list li\").removeClass(\"current\");\\n';\n        result += '  $this.addClass(\"current\");\\n';\n        result += '  var url = $this.children(\"a\").attr(\"link\");\\n';\n        result += '  if(url) loadSource(url);\\n';\n        result += '});\\n';\n\n        // 正序/倒序排序\n        result += 'var sortAsc = true;\\n';\n        result += '$(\"#play_list_sort\").click(function(){\\n';\n        result += '  var ul = $(\".play_list\");\\n';\n        result += '  var lis = ul.children(\"li\").get();\\n';\n        result += '  sortAsc = !sortAsc;\\n';\n        result += '  if(sortAsc){ lis.sort(function(a,b){ return 0; }); }\\n';\n        result += '  else{ lis.reverse(); }\\n';\n        result += '  ul.empty().append(lis);\\n';\n        result += '});\\n';\n\n        // 简介展开/收起\n        result += '$(\"#open_content\").click(function(){\\n';\n        result += '  $(\"#v_content\").toggle();\\n';\n        result += '});\\n';\n        result += 'if($(\"#intro\").height() > 101) $(\"#show_more\").show();\\n';\n        result += '$(\"#intro_content\").click(function(){\\n';\n        result += '  $(this).toggleClass(\"auto\");\\n';\n        result += '  $(\"#show_more\").toggle();\\n';\n        result += '  $(\".cover\").toggle();\\n';\n        result += '});\\n';\n\n        // 默认选中第一个画质\n        result += '$(\".play_list li\").first().addClass(\"current\");\\n';\n        result += '<\\/script>\\n';\n        result += '</body>\\n</html>';\n\n    } else {\n        result = \"<p>错误：source 变量未定义</p>\";\n    }\n}\n</js>",
    "ruleImage": "img@data-src\n<js>\njava.put('pic',result)\n</js>",
    "ruleLink": "a[x-text=\"item.full_title\"]@href||a.0@href",
    "ruleNextPage": "page||text.下一页@href",
    "rulePubDate": "<js>\nsort=\"\";\nresult=java.getElements('.text-xs');\nlen=result.length-1\nfor(i=len;i>=0;i--){\n\tt=result[i].text();\n\ti==len?sort+='🕒'+t:sort+='  '+t;\n}\nsort\n</js>",
    "ruleTitle": ".text-secondary@text\n<js>\njava.put('title',result)\n</js>",
    "singleUrl": false,
    "sortUrl": "<js>\neval(String(source.sourceComment))\nresult=`\n搜索::${host}/search/{{source.getVariable()}}\n中文字幕::${host}/chinese-subtitle\n中文字幕::${host}/chinese-subtitle?sort=views\n无码流出::${host}/uncensored-leak\n最近更新::${host}/new\n新作上市::${host}/release\n今日热门::${host}/today-hot\n本周热门::${host}/weekly-hot\n本月热门::${host}/monthly-hot\n素人SIRO::${host}/siro\n素人LUXU::${host}/luxu\n素人GANA::${host}/gana\n素人PRESTIGE PREMIUM::${host}/maan\n无码FC2::${host}/fc2\n无码HEYZO::${host}/heyzo\n无码FC2::${host}/fc2\n无码一本道::${host}/1pondo\n无码Caribbeancom::${host}/caribbeancom\n无码Caribbeancompr::${host}/caribbeancompr\n无码10musume::${host}/10musume\n无码pacopacomama::${host}/pacopacomama\n`\n</js>",
    "sourceComment": " host=\"https://www.missav1.icu/dm194/cn\"\n/*\n\thttps://www.missav1.icu/dm194/cn\n*/",
    "sourceGroup": "版本",
    "sourceIcon": "https://img1.baidu.com/it/u=3056428239,816616493&fm=253&fmt=auto&app=138&f=PNG?w=237&h=237",
    "sourceName": "1.2",
    "sourceUrl": "MissAV",
    "style": "body {\n    margin: 0;\n    background: #000;\n    color: #fff;\n    font-family: sans-serif;\n}\n\n.MacPlayer {\n    position: relative;\n    width: 100%;\n    background: #000;\n}\n\n.MacPlayer video {\n    width: 100%;\n    display: block;\n}\n\n.card {\n    margin: 8px;\n    background: #1a1a1a;\n    border-radius: 8px;\n    padding: 12px;\n}\n\n.v_title {\n    font-size: 16px;\n    margin: 0 0 8px 0;\n}\n\n.v_desc {\n    font-size: 13px;\n    color: #aaa;\n}\n\n.open_content {\n    color: #fe628e;\n    cursor: pointer;\n}\n\n.v_content {\n    margin-top: 8px;\n}\n\n.cover img {\n    width: 100%;\n    border-radius: 4px;\n}\n\n.intro {\n    font-size: 13px;\n    color: #ddd;\n}\n\n.tab_control {\n    list-style: none;\n    padding: 0;\n    display: flex;\n    gap: 8px;\n}\n\n.tab_control li {\n    padding: 4px 12px;\n    background: #333;\n    border-radius: 4px;\n    cursor: pointer;\n}\n\n.tab_control li.current {\n    background: #fe628e;\n}\n\n.play_list {\n    list-style: none;\n    padding: 0;\n    display: flex;\n    flex-wrap: wrap;\n    gap: 8px;\n}\n\n.play_list li {\n    padding: 6px 12px;\n    background: #333;\n    border-radius: 4px;\n    cursor: pointer;\n}\n\n.play_list li.current {\n    background: #fe628e;\n}\n\n.play_list_sort {\n    cursor: pointer;\n    color: #fe628e;\n    margin-bottom: 8px;\n}"
  },
  {
    "articleStyle": 0,
    "customOrder": 5,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "1.3",
    "sourceUrl": "https://www.33ccpp.com/"
  },
  {
    "articleStyle": 0,
    "customOrder": 7,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n    'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Pixel 3 XL Build/RQ3A.211001.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/102.0.4988.0 Mobile Safari/537.36 SearchCraft/3.9.2 (Baidu; P1 11) '\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "https://legado.cn/template/comiis_app/pic/icon114.png",
    "sourceName": "1.4需要vip",
    "sourceUrl": "https://90hd.top?from=VIP"
  },
  {
    "articleStyle": 1,
    "customOrder": 58,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\"User-Agent\": \"Mozilla/5.0 (Linux; Android 10;Xiaomi 10pro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.104 Mobile Safari/537.36\"}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "$..data[*]",
    "ruleContent": "$..videopath##.*\\$\n\n@js:\nurl=result;\n\nloadding=java.get(\"pic\")\n\nhtml=\n`<link rel=\"stylesheet\" type=\"text/css\" href=\"https://muiplayer.js.org/css/mui-player.min.css\" />\n\n<script type=\"text/javascript\" src=\"https://cdn.jsdelivr.net/gh/ljun223/reader3@main/js/mui-player.min.js\"></script>\n\n<script type=\"text/javascript\" src=\"https://cdn.jsdelivr.net/gh/ljun223/reader3@main/js/mui-player-mobile-plugin.min.js\"></script>\n\n<div class=\"dz\">`+url+`</div>\n\n<div id=\"mui-player\" style=\"width:100%;height:300px\"></div>\n\n<script>\n   var mp = new MuiPlayer(\t{\n \t\t  \"container\": \"#mui-player\",\n \t\t  \"src\": \"`+url+`\",\n \t\t  \"poster\":\"`+loadding+`\",\n \t\t  \"autoFit\":false,\n \t\t  \"lang\": \"zh-cn\",\n \t  \t\"height\":\"300px\",\n \t\t  plugins: [\n \t\t    new MuiPlayerMobilePlugin({\n \t\t\t    \"key\":\n \t\t\t \"01I01I01H01J01L01K01J01I01K01J01H01D01J01G01E\",\n \t\t    \t\"showMenuButton\": true,\n \t\t\t    \"pageGesture\":true,\n \t\t\t   })\n    ]\n   }); \n </script>`",
    "ruleImage": "coverpath@put:{\"pic\":\"$.coverpath\"}",
    "ruleLink": "https://77gmk8o.com/api/videoplay/{{$.id}}?uuid=1",
    "ruleNextPage": "page",
    "rulePubDate": "authername",
    "ruleTitle": "title",
    "singleUrl": false,
    "sortUrl": "@js:\n\ndata=java.ajax(\"https://77gmk8o.com/api/videosort\");\n\njson=JSON.parse(data);\n\nvar list=[];\nvar num=json.rescont.length;\nfor(var i=1;i<num;i++){\nlist+=json.rescont[i].name+\"::\"+\"https://77gmk8o.com/api/videosort/\"+json.rescont[i].id+\"?orderby=&page={{page}}\"+\"\\n\"\n\t};\n\"搜索用::https://77gmk8o.com/api/videosort/0?page={{page}}&serach={{source.getVariable()}}\"+\"\\n\"+list",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "1.5",
    "sourceUrl": "https://77gmk8o.com"
  },
  {
    "articleStyle": 0,
    "contentBlacklist": "",
    "contentWhitelist": "",
    "customOrder": 60,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n\"User-Agent\": \"Mozilla/5.0 (Linux; U; Android 8.1.0; zh-CN; MI 8 Lite Build/OPM1.171019.019) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 UCBrowser/13.2.0.1100 Mobile Safari/537.36\"\n}",
    "injectJs": "",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.module-item",
    "ruleContent": "<div class=\"play_video\">\n{{@@title@text}}{{@@class.player-wrapper@all}}",
    "ruleImage": "img@data-cover",
    "ruleLink": "a.0@href",
    "ruleNextPage": "page",
    "rulePubDate": "class.module-item-caption@text",
    "ruleTitle": "img@alt",
    "singleUrl": false,
    "sortUrl": "最新::https://cn1.91short.com/\n推荐::/short/recommend_home_list/\n美女正妹::/short/label_related_list/Ug_pu_kskqY%3D\n91大神::/short/label_related_list/otDa4t6lDDQ%3D\n门事件::/short/label_related_list/3QW8lOdBcls%3D\n大神::/search?wd=大神\n变量搜索::/search?wd={{java.encodeURI(source.getVariable())}}\n学生::/search?wd=学生\n91::/search?wd=91\n偷情::/search?wd=偷情\n推特::/search?wd=推特\n少女::/search?wd=少女\n贫乳::/search?wd=贫乳\n口交::/search?wd=口交\n妹妹::/search?wd=妹妹\n美女::/search?wd=美女\n\n美臀巨臀::/short/label_related_list/azG9-jZfzG0%3D?title=%E7%BE%8E%E8%87%80%E5%B7%A8%E8%87%80\n后入::/search?wd=后入\n国产高清::/short/home_category_list/hd\n排行::/short/ranking_list\n国产AV::/short/label_related_list/1Bd0Zzp8D_E%3D\n大象传媒::/short/label_related_list/F16wCJ3LmWY%3D\n情趣综艺::/short/label_related_list/-0S1LwkskU4%3D\n推荐2::/film/home_recommend_list\n专题::/film/home_subject_list\n女优::/film/home_actor_list\n无码::/film/home_category_list/coded\n中字::/film/home_category_list/chinese_subtitle\n动漫::/film/home_list/jOSxa-4E27U%3D\n经典三级::/film/home_list/uZg0vDL8P8A%3D\n欧美性爱::/film/home_list/LblejiEnM6s%3D\nAV解说::/film/home_list/vJq_GzRiesQ%3D",
    "sourceComment": "翻页和封面不会\n\n永久域名 https://cn1.91short.com",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "1.6",
    "sourceUrl": "https://cn1.91short.com",
    "style": "iframe{\n\theight:auto\n}\ntitle{\n\tdisplay:block\n}"
  },
  {
    "articleStyle": 0,
    "customOrder": 66,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "",
    "ruleContent": "",
    "ruleImage": "",
    "ruleLink": "",
    "ruleNextPage": "",
    "ruleTitle": "",
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "1.7",
    "sourceUrl": "https://zh.virtualtaboo.live/",
    "style": "video{\nwidth:100%;\nheight:auto;}"
  },
  {
    "articleStyle": 0,
    "concurrentRate": "",
    "contentBlacklist": "https://lupic.cdn.bcebos.com/.*,\nhttps://cpro.baidu.com/.*,\nhttps://eclick.baidu.com/.*,\nhttps://sofire.baidu.com/.*,\nhttps://analytics.woozooo.com/.*,\nhttps://statics.woozooo.com/.*,\n\nhttps://po18,\nhttps://mimg.0c1q0l.cn,\nhttps://www.googletagmanager.com,\nhttps://www.google-analytics.com,\nhttps://mc.usihnbcq.cn,\nhttps://mg.g1mm3d.cn,\nhttps://mscs.svaeuzh.cn,\nhttps://cnzz.hhttm.top,\nhttps://tp.vinuxhome.com,\nhttps://cnzz.mmstat.com,\nhttps://www.baihuillq.com,\nhttps://s23.cnzz.com,\nhttps://z3.cnzz.com,\nhttps://c.cnzz.com,\nhttps://stj.v1vo.top,\nhttps://z12.cnzz.com,\nhttps://img.mosflower.cn,\nhttps://tips.gamevvip.com,\nhttps://ehwe.yhdtns.com,\nhttps://xdn.cqqc3.com,\nhttps://www.jixunkyy.cn,\nhttps://sp.chemacid.cn,\nhttps://hm.baidu.com,\nhttps://s9.cnzz.com,\nhttps://z6.cnzz.com,\nhttps://um.cavuc.com,\nhttps://mav.mavuz.com,\nhttps://wofwk.aoidf3.com,\nhttps://z5.cnzz.com,\nhttps://xc.hubeijieshikj.cn,\nhttps://tj.tianwenhu.com,\nhttps://xg.gars57.cn,\nhttps://k.jinxiuzhilv.com,\nhttps://cdn.bootcss.com,\nhttps://ppl.xunzhuo123.com,\nhttps://xomk.jiangjunmh.top,\nhttps://img.xunzhuo123.com,\nhttps://z1.cnzz.com,\nhttps://s13.cnzz.com,\nhttps://xg.huataisangao.cn,\nhttps://z7.cnzz.com,\nhttps://xg.huataisangao.cn,\nhttps://z2.cnzz.com,\nhttps://s96.cnzz.com,\nhttps://q11.cnzz.com,\nhttps://thy.dacedsfa.cn,\nhttps://xg.whsbpw.cn,\nhttps://s19.cnzz.com,\nhttps://z8.cnzz.com,\nhttps://s4.cnzz.com,\nhttps://f5w.as12df.top,\nhttps://ae01.alicdn.com,\nhttps://www.92424.cn,\nhttps://k.wudejia.com,\nhttps://vivovip.mmszxc.top,\nhttps://qiu.xixiqiu.com,\nhttps://cdnjs.hnfenxun.com,\nhttps://cms.qdwght.com",
    "customOrder": 69,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n    'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Pixel 3 XL Build/RQ3A.211001.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/102.0.4988.0 Mobile Safari/537.36 SearchCraft/3.9.2 (Baidu; P1 11) '\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "<js>\njson=[];\nif(baseUrl.match(/ /)){\nlist=baseUrl.replace(/http.*?wd=\\s*/,'').split(' ');\nfor(i in list){\nhref=list[i].match(/【(.*?)】/)[1];\ntext=list[i].match(/《(.*?)》/)[1];\nintro=list[i].match(/◎(.*?)◎/)[1];\nindex=list[i].match(/^(\\d+、\\d+、)/)?list[i].match(/^(\\d+、\\d+、)/)[1]:list[i].match(/^(.*?)【/)[1]\njson.push({text:text,src:href,intro:intro,index:index})\n}\n}\nJSON.stringify(json)</js>\n$.[*]",
    "ruleContent": "",
    "ruleImage": "$.src",
    "ruleLink": "$.index\n@js:\nif(!result.match(/^http/) && !result.match(/\\d+、\\d+、/)){\nresult=\"https://www.coolapk.com/link?url=\"+encodeURIComponent(result)\n}else{result=result}",
    "ruleNextPage": "",
    "rulePubDate": "$.intro",
    "ruleTitle": "$.text",
    "singleUrl": false,
    "sortUrl": "💠 导航::https://fulihttp.com/【https://fulihttp.com/static/images/logo.svg】《第一福利导航》◎第一学术网😏◎ https://knowsex.net/【https://knowsex.net/main/contraception/img/contraceptive.jpg】《知性两性健康》◎两性健康-开放式性教育网站◎ https://aiboy.cc/【https://aiboy.cc/uploadfile/2021/0612/20210612014920789.jpg】《爱男孩帅哥网》◎同志、图片、小说、电影、资讯◎ https://抖淫.com/【https://d.0tcsi.bar/favicon.ico】《抖淫》◎抖淫短视频◎ https://www.zztt35.com/【https://static.zztt87.com/usr/uploads/2022/05/1824266711.png】《黑料不打烊》◎网红黑料、吃瓜🍉｜https://xxxmmm.email/◎ https://141jj.com/【https://files.catbox.moe/v2m4l7.png】《141JJ》◎🚀VPN｜很全的成人網站列表◎ https://theporndude.com/zh【https://media.porndudecdn.com/includes/images/mobile-logo-r.svg】《PornDude》◎🚀VPN｜色情视频网站列表◎ https://mygaysites.com/【https://mygaysites.com/includes/images/mobilegaylogo.svg】《MyGaySites》◎🚀VPN｜同志色情网站聚合◎\n\n\n🌐 聚合::https://www.fuqpremium.com/zh/【https://www.fuqpremium.com/templates/fuqpremium/images/icon.png】《FreePornTubes》◎🚀VPN｜优质色情视频导航◎ https://www.fuq.com/zh/【https://www.fuq.com/templates/fuq/images/logo.svg】《Fuq》◎🚀VPN｜色情电影导航◎ https://www.tgtube.com/zh/【https://www.tgtube.com/templates/tgtube/images/logo.svg】《TGTube》◎🚀VPN｜人妖色情油管视频导航◎ https://www.forhertube.com/zh/【https://www.forhertube.com/templates/forhertube/images/logo.svg】《ForHerTube》◎🚀VPN｜适合女性的色情视频导航◎ https://www.ixxx.com/zh/【https://www.ixxx.com/templates/ixxx/images/logo.svg】《iXXX》◎🚀VPN｜色情电影导航◎ https://www.tubegalore.com/zh/【https://www.tubegalore.com/templates/tubegalore/images/logo.svg】《TubeGalore》◎🚀VPN｜色情电视导航◎ https://www.maturetube.com/zh/【https://www.maturetube.com/templates/maturetube/images/logo.svg】《MatureTube》◎🚀VPN｜辣妈、MILF、奶奶色情导航◎ https://www.gaymaletube.com/zh/【https://www.gaymaletube.com/templates/gaymaletube/images/logo.svg】《GayMaleTube》◎🚀VPN｜同性恋色情视频导航◎ https://www.porzo.com/zh/【https://www.porzo.com/templates/porzo/images/logo.svg】《PORZO》◎🚀VPN｜色情视频导航◎ https://www.dinotube.com/zh/【https://www.dinotube.com/templates/dinotube/images/logo.svg】《DinoTube》◎🚀VPN｜色情视频导航◎ https://www.tiava.com/zh/【】《Tiava》◎🚀VPN｜色情电影导航◎ https://www.lobstertube.com/zh/【https://www.lobstertube.com/templates/lobstertube/images/icon.png】《LobsterTube》◎🚀VPN｜性爱、电影、电视导航◎\n\n\n🎬 传媒::https://playav.tv/【】《PlayAV》◎亚洲高清影片◎ https://thtv168.com/【】《桃红色界》◎教室诱惑、浴室激情◎ https://www.tkbcs8.life/【】《脱裤吧》◎https://tuoku9.com/◎ https://byym26.com/【https://s1.ax1x.com/2023/01/26/pSNmjD1.png】《水果派》◎成人影片解说节目◎ https://baozouj8.com/【https://baozouj8.com/images/headimg_dl.jpg】《暴走J8》◎一夜夫妻◎ https://www.aiwuav.xyz/index.php/label/new.html【https://www.aiwuav.xyz/template/aiw/favicon.ico】《爱污传媒》◎传媒视频聚合｜https://www.aiwu.info/◎ https://kvotr.cc/【https://kvotr.cc/template/mdapp.icu2/images/favicon.ico】《麻豆视频》◎海量高清视频◎ https://avhd1.com/【https://avhd1.com/img/logo_icon_avhd1.png】《HD高清AV》◎日本AV视频◎ https://yelai.cf/【https://b2less.dongshouji.com/file/pic001/images/icons/jiuyaop/icon-512x512.png】《91自拍》◎日本AV视频◎ http://hhdyw.buzz/【http://hhdyw.buzz/template/c25//images/play-logo.png】《八点影院》◎日本AV视频◎ http://smyis.xyz/【】《稻妻影视》◎日本AV视频◎ https://mizhan.tv/【】《咪站HD》◎日本AV视频◎ https://85videos.com/【】《85Videos》◎日本AV视频◎\n\n\n🚫 成导::https://集芳阁.com/【https://集芳阁.com/static/logo.svg】《集芳阁》◎集芳阁云搜◎ https://porn研究所.com/【https://porn研究所.com/img/logo.svg】《Porn研究所》◎福利视频◎ https://laowangyy.cc/【https://qq.com.xva06.xyz/static/images/logo.svg】《SEAV在线》◎成人视频◎ https://91av.pages.dev/【】《91AV聚合》◎视频导航◎ http://91dh.cf/【】《91AV导航》◎宅男导航◎ http://www.wangzhi.mom/【】《影库资源》◎视频导航◎\n\n\n🔞 成人::https://www.a567ap.com/【https://www.a234kb.com/skin/play.png】《四虎影院》◎福利视频｜http://www.4hu.tv/◎ https://sisav.cf/【https://sisav.cf/favicon.png】《色中色AV》◎福利视频◎ https://7m01.tk/【https://7m01.tk/template/688_m/images/play.png】《萝莉姬》◎福利视频◎ https://97d77.xyz/【https://6dbh1.xyz/favicon.ico】《蔡萝莉》◎成人影院◎ https://8xx.live/【https://8xamn.top/p/favicon-32x32.png】《拔插拔插》◎成人视频◎ https://www.niuzi1.com/【https://www.niuzi1.com/template/fytt/statics/img/favicon.ico】《风月同天》◎成人视频｜http://www.fyttdz.com/◎ https://www.avbus1.com/channels-index/new/【https://www.avbus1.com/favicon-32x32.png】《AV巴士》◎成人视频◎ https://bjinshen.xyz/【https://bjinshen.xyz/favicon.ico】《B影院》◎成人视频｜https://github.com/Bcinema/Btv◎ http://zhiyin202207.xyz/【https://static.yximgs.com/bs2/adcarsku/sku4acf4856-62b0-4734-8525-92bde28e9ad4.jpeg】《知阴》◎成人视频｜http://HuiJiaDiZhi.com/◎ https://5gamq.top/【https://plgku.86398ti.buzz:8443/favicon-32x32.png】《5G影院》◎成人视频◎ https://nbpp.buzz/【https://nbpp.bar/MDassets/images/placeholder-lg.jpg】《奶爸视频》◎成人视频◎ http://www.aqdlt.com/【https://img13.360buyimg.com/ddimg/jfs/t1/180015/34/30499/3188/635abb87E47815c6a/bdb7d18fcb5281a0.png】《爱情岛论坛》◎自拍视频◎ http://san72.com/【https://js.weilekangnet.com:59988/img/favicon_all.ico】《YouPorn》◎成人视频◎ https://www.xiaobi105.com/【】《蝌蚪窝》◎成人电影｜https://www.dizhi.fun/◎ https://2.258porn.cf/【】《258Porn》◎成人AV◎\n\n\n🚀 翻墙::https://po18.fans:1234/【https://po18.love:2345/template/conch/asset/img/load.gif】《Po18hub》◎激情视频导航｜https://po18av.vip/◎ https://cn.pornhub.com/【https://static.yximgs.com/bs2/adcarsku/sku6b1a883c-115f-413f-9e95-7ce7cfba66b1.png】《PornHub》◎🚀VPN｜色情视频及性爱影片◎ https://zh.xhamster.com/【https://static-lvlt.xhcdn.com/xh-desktop/images/logo/logo.svg】《xHamster》◎🚀VPN｜成人视频◎ https://netflav.com/【https://netflav.com/static/assets/logo.svg】《Netflav》◎🚀VPN｜日本成人电影◎ https://jable.tv/【】《Jable》◎🚀VPN｜日本高清AV｜https://alldayj.com/◎ https://bi81.top/【】《Bi8.TV》◎🚀VPN｜福利视频◎\n\n\n🈲 伦理::https://www.72dy.com/【https://static.tvcache.com//icon/72dy/favicon.png】《72电影》◎高清伦理◎ https://www.2345ti.com/【】《235影视》◎经典理伦片◎ https://vip.eeussjt.com/【】《EEUSS影院》◎快播电影、伦理◎ https://伦理小站.com/【https://伦理小站.com/statics/img/logo.svg】《韩三伦理小站》◎伦理影片◎ https://www.kxdyy.com/【】《开心电影院》◎高清电影、伦理◎\n\n\n🔥 耽影::https://www.fuju1.tv/【https://www.fuju1.tv/template/mytheme/statics/img/load.png】《腐剧TV》◎腐剧、BL动漫、同性电影、百合◎ https://www.bl210.top/【】《曙光影视》◎腐剧、耽美、泰剧暖光影视官网◎ https://www.tj8.top/【】《泰剧网》◎腐剧、耽美、泰剧暖光影视官网◎ https://www.bttwoo.com/【】《两个BT》◎同性｜https://www.bttwo.vip/◎ https://g.manmankan.com/【】《漫漫看》◎男同影视大全◎\n\n\n🎨 漫画::https://漫香阁.com/【https://漫香阁.com/favicon.ico】《漫香阁》◎成人H漫画◎ 【】《》◎韩国、日本漫画◎",
    "sourceComment": "",
    "sourceGroup": "版本",
    "sourceIcon": "http://pic.y8l.com/up/2022-6/202262415595588.png",
    "sourceName": "1.8",
    "sourceUrl": "其他影视92"
  },
  {
    "articleStyle": 0,
    "concurrentRate": "",
    "customOrder": 70,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "<js>\njson=[];\nif(baseUrl.match(/ /)){\nlist=baseUrl.replace(/http.*?wd=\\s*/,'').split(' ');\nfor(i in list){\nhref=list[i].match(/【(.*?)】/)[1];\ntext=list[i].match(/《(.*?)》/)[1];\nintro=list[i].match(/◎(.*?)◎/)[1];\nindex=list[i].match(/^(\\d+、\\d+、)/)?list[i].match(/^(\\d+、\\d+、)/)[1]:list[i].match(/^(.*?)【/)[1]\njson.push({text:text,src:href,intro:intro,index:index})\n}\n}\nJSON.stringify(json)</js>\n$.[*]",
    "ruleContent": "",
    "ruleDescription": "",
    "ruleImage": "@js:\"https://inisqw.gitee.io/rss/66.jpg\"",
    "ruleLink": "$.index\n@js:\nif(!result.match(/^http/) && !result.match(/\\d+、\\d+、/)){\nresult=\"https://www.coolapk.com/link?url=\"+encodeURIComponent(result)\n}else{result=result}",
    "ruleNextPage": "",
    "rulePubDate": "$.intro",
    "ruleTitle": "$.text",
    "singleUrl": false,
    "sortUrl": "万源::http://22.cn/?url=【】《》◎◎ https://inisqw.gitee.io/rss【】《关注微信公众号👉阅读加油👈》◎更多你懂滴订阅源抱回家◎ https://own.lanzouy.com/iAbFu0c92imj【】《amartshift书源/漫画源》◎11831◎ https://kaveys.lanzout.com/iusFA09k9u5e【】《免费观看vip影视的软件，已破解vip》◎密码:37z2◎ https://xn---fuliseecom-gt1t08px00hf5nbl2b.xn--fulisee-3v1q.com/?vinwd【】《第一福利导航》◎看了身体会变得奇怪◎ https://flowus.cn/cjk-sy/share/d62e3975-c3fb-4bfe-8631-553455e037c5【】《书源君书源订阅源更新啦》◎看了身体会变得亢奋◎",
    "sourceComment": "",
    "sourceGroup": "版本",
    "sourceIcon": "https://inisqw.gitee.io/rss/66.jpg",
    "sourceName": "1.9",
    "sourceUrl": "wy",
    "style": ""
  },
  {
    "articleStyle": 0,
    "customOrder": 71,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "2.0",
    "sourceUrl": "https://www.njttvylz.cc"
  },
  {
    "articleStyle": 1,
    "customOrder": 497,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "header": "{\"User-Agent\":\"Mozilla/5.0 (Linux; Android 11; PCAM10 Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4103.106 Mobile Safari/537.36\"} ",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "loginUrl": "https://czy.yzfnb6.help/cn/home/web/index.php/vod/play/id/1177871/sid/1/nid/1.html",
    "ruleArticles": "[class=\"H5__content\"]@[class=\"video__wrap\"]@a",
    "ruleContent": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"UTF-8\">\n<title>内容提取-双模版</title>\n\n<script src=\"https://code.jquery.com/jquery-3.6.0.min.js\"></script>\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.css\" />\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.js\"></script>\n<style>\n    body {font-family: Arial, sans-serif;font-size: 16px;}\n    #title, #page, #loading-status {margin: 0 auto;font-size: 20px;text-align: center;}\n    #description, #urls, #video-url, #video-sources, #messages {width: 100%;max-width: 800px;margin: 1.5px auto;font-size: 14px;text-align: left;word-wrap: break-word;white-space: pre-wrap;}\n    #text, #text :not(img), #text img + * {text-indent: 2em;width: 100%;font-size: 16px;line-height: 1.5em;margin-top: 0;margin-bottom: 0;word-wrap: break-word;white-space: pre-wrap;}\n    img, #text img {width: 100%;height: auto;display: block;margin-bottom: 1.5px;}\n    .flex-container {display: flex;justify-content: center;align-items: center;gap: 10px;margin: 1.5px 0;font-size: 14px;}\n    button, select {flex: 1 1 31%; padding: 3px;border: 1px solid #ccc;border-radius: 5px;box-sizing: border-box;cursor: pointer;background-color: #f9f9f9;transition: background-color 0.3s ease;margin: 1.5px;min-width: 0;font-size: 14px;}\n    #url-select, #video-source-select {flex: 1 1 100%; margin-left: 0;margin-right: 0;text-align: center;}\n    #video-element {width: 100%;height: auto;}\n    textarea {width: 100%;height: auto;min-height: 100px;box-sizing: border-box;resize: vertical;}\n    .error, .warn {color: red;}\n    #urls,#messages,#debug-info,#video-url,#video-container,#video-source-select,#images,#text {display:none;}\n</style>\n</head>\n<body>\n    <h3 id=\"title\">{{@@title@text||h1.0@text||h2.0@text||.title.0@text##高清在线观看|-国产剧| - 专享影视| - 热门高清|影视大全|海外华人|高清1080p|无广告影院|\\|}}</h3>\n    <p id=\"description\">{{@@.info.0@html||.jianjie@html}}</p>\n    <p id=\"page\">共<span id=\"total-pages\">1</span>页</p>\n    <p id=\"loading-status\" style=\"display:none;\"></p>\n    <div class=\"flex-container\" id=\"loading-buttons\" style=\"display:none;\">\n        <button id=\"prev-page-btn\">上一页</button>\n        <button id=\"next-page-btn\">下一页</button>\n        <button id=\"auto-load-btn\">自&nbsp;&nbsp;动</button>\n    </div>\n    <div class=\"flex-container\">\n        <select id=\"url-select\" style=\"display:none;\"></select>\n    </div>\n    <div class=\"flex-container\">\n        <button id=\"toggle-urls-btn\">显/隐网址</button>\n        <button id=\"toggle-messages-btn\">显/隐信息</button>\n        <button id=\"toggle-debug-btn\">显/隐调试</button>\n    </div>\n    <div id=\"urls\"></div>\n    <div id=\"messages\"></div>\n    <div id=\"debug-info\"></div>\n    <div id=\"video-url\"></div>\n    <div id=\"video-container\">\n        <video id=\"video-element\" controls preload=\"auto\" width=\"640\" height=\"264\">\n            <source id=\"video-source\" src=\"\" type=\"\">\n            您的浏览器不支持 video 标签。\n        </video>\n    </div>\n    <div class=\"flex-container\">\n        <select id=\"video-source-select\" onchange=\"updateVideoSource()\"></select>\n    </div>\n    <div id=\"images\"></div>\n    <div id=\"text\"></div>\n    <script>\nconst config = {    \n    videoSelector: 'body', // 视频选择器\n    imgSelector: '.gridlane-box-inside img', // 图片选择器\n    textSelector: '#content', // 文本选择器\n    debugSelector: '.player-wrapper', // 调试信息选择器\n    swapImageAttributes: false, // 是否交换图片属性\n    delayTime: 1500, // 延迟提取时间\n    retryDelayTime: 1500, // 重试加载延迟时间\n    maxLoadAttempts: 3, // 最大加载次数\n    autoLoading: false, // true自动模式，false单页模式\n    debugOnce: 0, // 只在特定索引输出一次调试信息\n         /* -网页拼接-*/    \n    totalPagesText: '{{@@.pager@li.-3@a@textNodes}}', // 总页码\n    urlSuffixToRemove: /\\.aspx$/, // 移除url后缀\n    pageUrlText: '{urlPrefix}p{i}.aspx', // 拼接URL模板        \n        /* -以上拼接模式（网址需要拼接）-*/\n        /* -上下分割线-*/\n        /* -以下列表模式（地址与目录对应，比如视频、漫画）-*/   \n    ListMode: true, // true网址列表模式，false网址拼接模式    \n    initialUrls: `{{@@#sort-item-5.0@a@href}}`, // 网址\n    initialUrlsName: `{{@@#sort-item-5.0@a@span@text}}`, // 网址名称\n    sourceurl: '', // 来源URL前缀\n};\n\nlet videoSources = [];\nlet loadAttempts = {};\nlet urls = [];\nlet imageBox;\nlet textBox;\nlet currentPageIndex = 0;\nlet canLoadNextPage = true;\nlet autoLoadInProgress = false;\n\n// 构建URL列表\nfunction buildUrls(totalPages, baseUrl) {\n    let initialUrlsArray = config.initialUrls.trim().split('\\n').filter(url => url.trim() !== '');\n    let initialUrlsNameArray = config.initialUrlsName.trim().split('\\n').filter(name => name.trim() !== '');\n\n    if (config.ListMode && initialUrlsArray.length > 0) {\n        if (initialUrlsArray.length !== initialUrlsNameArray.length) {\n            $('#messages').append(`<span class=\"warn\">警告：initialUrls 和 initialUrlsName 的长度不匹配。</span><br>`);\n        }\n\n        urls = initialUrlsArray.map(url => {\n            if (config.sourceurl && url.startsWith('/') && !/^https?:\\/\\//i.test(url)) {\n                return config.sourceurl.replace(/\\/$/, '') + url;\n            } else {\n                return url;\n            }\n        });\n\n        urls.forEach((url, index) => {\n            const name = initialUrlsNameArray[index] || `第 ${index + 1} 页`;\n            $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n            $('#urls').append(`<div>${name}: ${url}</div>`);\n        });\n    } else {\n        if (totalPages === 1) {\n            urls.push(baseUrl);\n        } else {\n            urls.push(baseUrl);\n            for (let i = 2; i <= totalPages; i++) {\n                urls.push(config.pageUrlText.replace('{urlPrefix}', baseUrl.replace(config.urlSuffixToRemove, '').replace(/\\/$/, '')).replace('{i}', i));\n            }\n        }\n\n        urls.forEach((url, index) => {\n            const name = `第 ${index + 1} 页`;\n            $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n            $('#urls').append(`<div>${name}: ${url}</div>`);\n        });\n    }\n\n    $('#total-pages').text(urls.length);\n    toggleNavigationButtons();\n}\n\nfunction normalizeUrl(url) {\n    if (typeof url!== 'string' ||!url.trim()) return '';\n    url = url.replace(/\\\\u[\\dA-F]{4}/gi, (match) => String.fromCharCode(parseInt(match.replace(/\\\\u/g, ''), 16)));\n    url = decodeURIComponent(url);\n    url = url.replace(/^http:\\/([^/])/, 'http://$1'); // 修正 http:/ 协议部分\n    url = url.replace(/^https:\\/([^/])/, 'https://$1'); // 修正 https:/ 协议部分\n    return url;\n}\n\n// 清空容器\nfunction clearContainers() {\n    $('#messages').empty();\n    $('#images').empty();\n    $('#text').empty();\n}\n\n// 更新图片的src属性\nfunction updateImageSrc(elements, shouldSwap) {\n    elements.each(function () {\n        const $this = $(this);\n        const attrsToUpdate = {};\n        if (shouldSwap) {\n            ['data-original', 'data-src', 'data-url'].forEach(attr => {\n                if ($this.attr(attr)) {\n                    attrsToUpdate['src'] = $this.attr(attr);\n                }\n            });\n        }\n        $this.attr(attrsToUpdate);\n    });\n    return elements;\n}\n\n// 切换导航按钮和选择框的显示\nfunction toggleNavigationButtons() {\n    if ($('#url-select option').length > 1  && !config.autoLoading) {\n        $('#loading-buttons').show();\n        $('#url-select').show();\n    } else {\n        $('#loading-buttons').hide();\n        $('#url-select').hide();\n    }\n}\n\n// 显示加载状态\nfunction showLoadingStatus(pageNumber) {\n    const selectedOption = $('#url-select option:selected').text();\n    $('#loading-status').text(`正在加载：${selectedOption}`).show();\n}\n\n// 隐藏加载状态\nfunction hideLoadingStatus() {\n    $('#loading-status').hide();\n}\n\n// 内容提取函数内容\nfunction loadContent(index) {\n    if (index < 0 || index >= urls.length || !canLoadNextPage) return;\n    canLoadNextPage = false;\n    currentPageIndex = index;\n    $('#url-select').val(index);\n    $('#messages').append(`<div>当前地址: <span class=\"warn\">${urls[index]}</span> </div>`);\n    if (autoLoadInProgress) {\n        showLoadingStatus(index + 1);\n    }\n    $.ajax({\n        url: urls[index],\n        type: 'GET',\n        success: function (data) {\n            try {\n                const $data = $(data);\n                let updatedHtmlContent = data.replace(/(['\"])(\\/\\/)(?!\\/)/g, '$1https://')\n                    .replace(/src=\"upload/gi, 'src=\"/upload')\n                    .replace(/style=[\"'][^'\"]+[\"']/gi, '')\n                    .replace(/\\\\\\//g, '/');\n                const parser = new DOMParser();\n                const doc = parser.parseFromString(updatedHtmlContent, \"text/html\");\n\n                  // 添加调试标签输出信息\n                if (config.debugOnce === index) {\n                    const debugElements = $(doc).find(config.debugSelector);\n                    if (debugElements.length > 0) {\n                        const debugContents = $('<pre>').html(debugElements.clone().wrapAll('<div/>').parent().html()).html();\n                        $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">${debugContents}</textarea></span>`);\n                    } else {\n                        $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">调试信息未提取到内容，请检查选择器！</textarea></span>`);\n                    }\n                }\n\n                // 方法1：video标签获取视频地址\n                const videoContents = $(doc).find(config.videoSelector);\n                const videoTags = $(videoContents).find('video');\n                videoTags.each(function () {\n                    const videosrc = $(this).attr('src') || $(this).attr('data-src') || $(this).attr('data-original') || '';\n                    if (videosrc) {\n                        videoSources.push(videosrc);\n                    }\n                });\n                \n                // 方法2：source标签获取视频地址\n                const sources = $(videoContents).find('source');\n                sources.each(function () {\n                    const sourceSrc = $(this).attr('src') || $(this).attr('data-src') || $(this).attr('data-original') || '';\n                    if (sourceSrc) {\n                        videoSources.push(sourceSrc);\n                    }\n                });\n                \n                // 方法3：正则表达式获取视频地址\n                const regex = /['\"]https?[^'<>\"]+\\.(m3u8|mp4|webm|ogg|flv|mp3|m4a|wav|ape|flac)['\"]/ig;\n                const matches = data.match(regex);\n                if (matches) {\n                    const uniqueMatches = matches.filter((value, idx, self) => self.indexOf(value) === idx);\n    videoSources = videoSources.concat(uniqueMatches.map((match) => {\n        // 使用replace删除引号\n                const urlWithoutQuotes = match.replace(/['\"]/g, '');\n                return normalizeUrl(urlWithoutQuotes);\n                          }));\n                }\n\n                videoSources = videoSources.map(src => normalizeUrl(src.replace(/\\\\+/g, '')));\n                videoSources = [...new Set(videoSources)];\n\n                if (videoSources.length > 0) {\n                    $('#messages').append(`<span>成功提取到视频，找到 ${videoSources.length} 个视频。</span><br>`);\n                    videoSources.forEach((src, idx) => {\n                        $('#messages').append(`<div>视频地址:<span class=\"warn\"> ${src}</span><br></div>`);\n                        $('#video-source-select').append(`<option value=\"${idx}\">视频源 ${idx + 1}</option>`);\n                    });\n                    \n                    if (videoSources.length == 1) {\n                        $('#video-container').show();\n                        $('#video-url').show();\n                        $('#video-source-select').hide();\n                        updateVideoSource(); // 自动更新视频源\n                    } else if (videoSources.length > 1) {\n                        $('#video-container').show();\n                        $('#video-url').show();\n                        $('#video-source-select').show();\n                        updateVideoSource(); // 默认选择第一个视频源\n                    } else {\n                        $('#video-container').hide();\n                        $('#video-url').hide();\n                        $('#video-source-select').hide();\n                    }\n                } else {\n                    $('#messages').append(`<span class=\"warn\">未找到视频源。</span><br>`);\n                    $('#video-container').hide();\n                    $('#video-url').hide();\n                    $('#video-source-select').hide();\n                }\n\n                // 标签获图片\n                const $imgContents = $(doc).find(config.imgSelector);\n                const shouldSwap = config.swapImageAttributes;\n                const newContents = updateImageSrc($imgContents.clone(), shouldSwap);\n                $('#images').append(newContents).show();\n                if (newContents.length > 0) {\n                    $('#messages').append(`<span>成功提取图片，共 ${newContents.length} 张。</span><br>`);\n                    newContents.each(function () {\n                        const imgSrc =$(this).attr('src') || $(this).attr('data-original') || $(this).attr('data-src') || $(this).attr('data-url');\n                        $('#messages').append(`<div>地址:<span class=\"warn\"> ${imgSrc}</span><br></div>`);\n                    });\n                } else {\n                    $('#messages').append(`<span class=\"warn\">未提取到图片。</span><br>`);\n                }\n\n                // 标签获图文\n                const textContents = $(doc).find(config.textSelector).map(function () {\n                    const $currentContents = $(this);\n                    $currentContents.find('img + br, script, video, source').remove();\n                    $currentContents.html($currentContents.html().replace(/>\\s+/gi, '>').replace(/<\\/?br\\s*([^>]*)\\s*\\/?>/gi, '\\n').replace(/\\n+/g, '\\n'));\n                    return $currentContents.html();\n                }).get().join('');\n                if (textContents.trim()) {\n                    $('#text').append(`<span>${textContents}</span><br>`).show();\n                    $('#messages').append(`<span>成功提取图文。</span><br>`);\n                } else {\n                    $('#messages').append(`<span class=\"warn\">未提取到图文。</span><br>`);\n                }\n                \n                \n                if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                    setTimeout(() => { \n                        canLoadNextPage = true;\n                        loadContent(currentPageIndex + 1); \n                    }, config.delayTime);\n                } else {\n                    canLoadNextPage = true;\n                    if (autoLoadInProgress) {\n                        hideLoadingStatus();\n                    }\n                }\n            } catch (parseError) {\n                $('#messages').append(`<span class=\"error\">解析页面内容时发生错误: ${parseError.message}</span><br>`);\n                handleLoadFailure(urls, index);\n            } finally {\n                if (imageBox) imageBox.viewer.update();\n                if (textBox) textBox.viewer.update();\n            }\n        },\n        error: function (jqXHR, textStatus, errorThrown) {\n            let errorMessage = `内容加载失败: ${urls[index]}`;\n            switch (textStatus) {\n                case 'timeout':\n                    errorMessage += ', 请求超时';\n                    break;\n                case 'abort':\n                    errorMessage += ', 请求被取消';\n                    break;\n                case 'parsererror':\n                    errorMessage += ', 解析响应出错';\n                    break;\n                default:\n                    errorMessage += `, 状态码: ${jqXHR.status}, 错误信息: ${errorThrown}`;\n                    break;\n            }\n            $('#messages').append(`<span class=\"error\">${errorMessage}</span><br>`);\n            handleLoadFailure(urls, index);\n        }\n    });\n}\n\n// 处理加载失败的情况\nfunction handleLoadFailure(urls, index) {\n    if (!loadAttempts[urls[index]]) {\n        loadAttempts[urls[index]] = 1;\n    } else {\n        loadAttempts[urls[index]]++;\n    }\n    if (loadAttempts[urls[index]] <= config.maxLoadAttempts) {\n        const retryMessage = `第${index + 1}页加载失败，正在进行第${loadAttempts[urls[index]]}次加载！`;\n        $('#messages').append(`<span class=\"error\">${retryMessage}</span><br>`);\n        setTimeout(() => { \n            canLoadNextPage = true;\n            loadContent(index); \n        }, config.retryDelayTime);\n    } else {\n        const finalErrorMessage = `第${index + 1}页加载失败，已达到最大尝试次数(${config.maxLoadAttempts})！`;\n        $('#messages').append(`<span class=\"error\">${finalErrorMessage}</span><br>`);\n        if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n            setTimeout(() => { \n                canLoadNextPage = true;\n                loadContent(currentPageIndex + 1); \n            }, config.delayTime);\n        } else {\n            canLoadNextPage = true;\n            if (autoLoadInProgress) {\n                hideLoadingStatus();\n            }\n        }\n    }\n}\n\n// 更新视频源\nfunction updateVideoSource() {\n    const selectedIndex = parseInt(document.getElementById('video-source-select').value);\n    const selectedSource = videoSources[selectedIndex];\n    document.getElementById('video-url').textContent = `视频地址:\\n ${selectedSource}`;\n\n    // 设置 video-source 的 src 属性\n    const videoSourceElement = document.getElementById('video-source');\n    videoSourceElement.src = selectedSource;\n\n    // 更新 video 元素的 src 属性\n    const videoElement = document.getElementById('video-element');\n    videoElement.load();\n\n    // 添加调试信息\n    $('#messages').append(`<span>更新视频源为: ${selectedSource}</span><br>`);\n}\n\n// 函数执行主体\n$(document).ready(function () {\n    imageBox = document.getElementById('images');\n    textBox = document.getElementById('text');\n    if (imageBox && textBox) {\n        new Viewer(imageBox, { title: true, interval: 2000 });\n        new Viewer(textBox, { title: true, interval: 2000 });\n    }\n\n    const totalPagesText = config.totalPagesText;\n    const totalPages = parseInt(totalPagesText, 10) || 1;\n    const baseUrl = '{{baseUrl}}';\n    \n    clearContainers();\n    $('#urls').empty();\n    $('#debug-info textarea').empty();   \n    $('#video-url').empty().hide();\n    $('#video-container').hide();\n    $('#video-source-select').empty().hide();\n    \n    buildUrls(totalPages, baseUrl);\n\n    const urlSelect = document.getElementById('url-select');\n    if (urlSelect.options.length > 0) {\n        urlSelect.value = '0'; \n        \n        if (config.autoLoading) {\n            autoLoadInProgress = true;\n            for (let i = 0; i < urls.length; i++) {\n                loadContent(i);\n            }\n        } else {\n            loadContent(0);\n        }\n    } else {\n        loadContent(0);\n    }\n\n    $('#url-select').change(function () {\n        clearContainers();\n        const selectedIndex = parseInt($(this).val());\n        loadContent(selectedIndex);\n    });\n    $('#prev-page-btn').click(function () {\n        clearContainers();\n        if (currentPageIndex > 0) {\n            loadContent(currentPageIndex - 1);\n        }\n    });\n    $('#next-page-btn').click(function () {\n        clearContainers();\n        if (currentPageIndex < urls.length - 1) {\n            loadContent(currentPageIndex + 1);\n        }\n    });\n    $('#auto-load-btn').click(function () {\n        autoLoadInProgress = true;\n        showLoadingStatus(1); \n        for (let i = currentPageIndex + 1; i < urls.length; i++) {\n            loadContent(i);\n        }\n    });\n    $('#toggle-messages-btn').click(function () { $('#messages').toggle(); });\n    $('#toggle-urls-btn').click(function () { $('#urls').toggle(); });\n    $('#toggle-debug-btn').click(function () { $('#debug-info').toggle(); });\n});\n    </script>\n</body>\n</html>",
    "ruleImage": "img@src",
    "ruleLink": "a@href",
    "ruleNextPage": "page||text.下一页@href",
    "rulePubDate": "p.-1@text\n",
    "ruleTitle": "h3.-1@text",
    "singleUrl": false,
    "sortUrl": "搜索::https://czy.yzfnb6.help/cn/home/web/index.php/vod/search.html?wd={{source.getVariable()}}\n最新上传::/cn/home/web/index.php/label/new/page/{{page}}.html\n月排行::/cn/home/web/index.php/label/hot_month/page/{{page}}.html\n日排行::/cn/home/web/index.php/label/hot_day/page/{{page}}.html\n周排行::/cn/home/web/index.php/label/hot_week/page/{{page}}.html\n熟母少妇::/cn/home/web/index.php/vod/type/id/20/page/{{page}}.html\n网红直播::/cn/home/web/index.php/vod/type/id/21/page/{{page}}.html\n自拍偷拍::/cn/home/web/index.php/vod/type/id/22/page/{{page}}.html\n强奸乱伦::/cn/home/web/index.php/vod/type/id/23/page/{{page}}.html\n高清国产::/cn/home/web/index.php/vod/type/id/24/page/{{page}}.html\n韩国专区::/cn/home/web/index.php/vod/type/id/25/page/{{page}}.html\n日本有码::/cn/home/web/index.php/vod/type/id/26/page/{{page}}.html\n日本无码::/cn/home/web/index.php/vod/type/id/27/page/{{page}}.html\n欧美情色::/cn/home/web/index.php/vod/type/id/28/page/{{page}}.html\n动漫卡通::/cn/home/web/index.php/vod/type/id/29/page/{{page}}.html\n三级伦理::/cn/home/web/index.php/vod/type/id/30/page/{{page}}.html",
    "sourceComment": "By小新\n永久地址：https://bqm.avds8.com/g/\nhttps://rlblsm.yzfnb4.lat/cn/home/web/\nhttps://qrb.yzfnb3.ink/cn/home/web/\nhttps://qrb.yzfnb3.ink/cn/home/web/",
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "2.1得调试",
    "sourceUrl": "https://qrb.yzfnb3.ink"
  },
  {
    "articleStyle": 0,
    "coverDecodeJs": "java.createSymmetricCrypto(\"AES/CBC/NoPadding\",\"f5d965df75336270\",\"97b60394abc2fbe1\").decrypt(result)",
    "customOrder": 499,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\"User-Agent\":\"Mozilla/5.0 (Linux; U; Android 13; zh-Hans-CN; PFJM10 Build/TP1A.220905.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/135.0.4896.58 Quark/6.13.6.581 Mobile Safari/537.36\",\n\"Accept-Language\":\"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7\"}",
    "lastUpdateTime": 1775586154133,
    "loadWithBaseUrl": true,
    "ruleArticles": "#body>.container>.row>div[role=\"main\"]>article:not(:has(meta[content=\"广告\"]))>a",
    "ruleContent": "<js>\nvar step1 = java.base64Decode('QGpzOg0KbGV0IHVybHMgPSBbXTsNCmxldCByZXN1bHRTdHIgPSBTdHJpbmcocmVzdWx0KTsNCg0KLy8g566A5YyW5o+Q5Y+WbTN1OA0KbGV0IGdldE0zdTggPSBmdW5jdGlvbigpIHsNCiAgICBsZXQgdXJsU2V0ID0gW107DQogICAgDQogICAgLy8gMS4g5LuOdmlkZW/moIfnrb7mj5Dlj5YNCiAgICBsZXQgdmlkZW9zID0gamF2YS5nZXRFbGVtZW50cygndmlkZW8nKTsNCiAgICBpZiAodmlkZW9zICYmIHZpZGVvcy5sZW5ndGggPiAwKSB7DQogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmlkZW9zLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICBsZXQgdiA9IHZpZGVvc1tpXTsNCiAgICAgICAgICAgIGxldCBzcmMgPSBTdHJpbmcodi5hdHRyKCdzcmMnKSk7DQogICAgICAgICAgICBpZiAoc3JjLmluZGV4T2YoJy5tM3U4JykgPiAtMSkgew0KICAgICAgICAgICAgICAgIGlmICh1cmxTZXQuaW5kZXhPZihzcmMpID09PSAtMSkgew0KICAgICAgICAgICAgICAgICAgICB1cmxTZXQucHVzaChzcmMpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAvLyAyLiDku45IVE1M5rqQ56CB5o+Q5Y+WDQogICAgbGV0IHJlZ2V4ID0gLyhodHRwcz86W14nIlxzXSo/XC5tM3U4W14nIlxzXSopL2c7DQogICAgbGV0IG1hdGNoOw0KICAgIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKHJlc3VsdFN0cikpICE9PSBudWxsKSB7DQogICAgICAgIGxldCB1cmwgPSBtYXRjaFsxXS5yZXBsYWNlKC9cXC9nLCAiIik7DQogICAgICAgIGlmICh1cmxTZXQuaW5kZXhPZih1cmwpID09PSAtMSkgew0KICAgICAgICAgICAgdXJsU2V0LnB1c2godXJsKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICByZXR1cm4gdXJsU2V0Ow0KfTsNCg0KLy8g5aSE55CG5YiG6ZuGDQppZiAoL+eCueaIkS8udGVzdChyZXN1bHQpICYmIC/mn6XnnIvor6bmg4UvLnRlc3QocmVzdWx0KSkgew0KICAgIGxldCBsaW5rcyA9IGphdmEuZ2V0RWxlbWVudHMoJ0BAI3Bvc3Q+YXJ0aWNsZT4ucG9zdC1jb250ZW50PnA+YScpOw0KICAgIGxldCB0ZW1wVXJscyA9IFtdOw0KICAgIA0KICAgIGlmIChsaW5rcyAmJiBsaW5rcy5sZW5ndGggPiAwKSB7DQogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoIC0gMTsgaSsrKSB7DQogICAgICAgICAgICBsZXQgaHJlZiA9IFN0cmluZyhsaW5rc1tpXS5hdHRyKCdocmVmJykpOw0KICAgICAgICAgICAgbGV0IGRvYyA9IFN0cmluZyhqYXZhLmFqYXgoc291cmNlLmtleSArIGhyZWYpKTsNCiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gZG9jLm1hdGNoKC8oaHR0cHM/OlteJyJcc10qP1wubTN1OFteJyJcc10qKS9nKTsNCiAgICAgICAgICAgIGlmIChtYXRjaGVzKSB7DQogICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRjaGVzLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBtYXRjaGVzW2pdLnJlcGxhY2UoL1xcL2csICIiKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBVcmxzLmluZGV4T2YodXJsKSA9PT0gLTEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBVcmxzLnB1c2godXJsKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICB1cmxzID0gdGVtcFVybHM7DQp9IGVsc2Ugew0KICAgIHVybHMgPSBnZXRNM3U4KCk7DQp9DQoNCi8vIOWOu+mHje+8iOWGjeasoeehruS/ne+8iQ0KbGV0IGZpbmFsVXJscyA9IFtdOw0KZm9yIChsZXQgaSA9IDA7IGkgPCB1cmxzLmxlbmd0aDsgaSsrKSB7DQogICAgbGV0IHVybCA9IHVybHNbaV07DQogICAgaWYgKHVybCAmJiB1cmwuaW5kZXhPZignLm0zdTgnKSA+IC0xICYmIGZpbmFsVXJscy5pbmRleE9mKHVybCkgPT09IC0xKSB7DQogICAgICAgIGZpbmFsVXJscy5wdXNoKHVybCk7DQogICAgfQ0KfQ0KdXJscyA9IGZpbmFsVXJsczsNCg0KLy8g566A5YyW5pKt5pS+5ZmoDQp2YXIgaHRtbCA9ICc8IURPQ1RZUEUgaHRtbD4nICsNCic8aHRtbD4nICsNCic8aGVhZD4nICsNCiAgICAnPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCI+JyArDQogICAgJzxzdHlsZT4nICsNCiAgICAgICAgJyogeyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9JyArDQogICAgICAgICdib2R5IHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAyMHB4OyBiYWNrZ3JvdW5kOiAjZjBmMGYwOyBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7IH0nICsNCiAgICAgICAgJy5jb250YWluZXIgeyBtYXgtd2lkdGg6IDEwMDBweDsgbWFyZ2luOiAwIGF1dG87IGJhY2tncm91bmQ6IHdoaXRlOyBib3JkZXItcmFkaXVzOiAxMHB4OyBvdmVyZmxvdzogaGlkZGVuOyBib3gtc2hhZG93OiAwIDJweCAxMHB4IHJnYmEoMCwwLDAsMC4xKTsgfScgKw0KICAgICAgICAnLmhlYWRlciB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICM2NjdlZWEgMCUsICM3NjRiYTIgMTAwJSk7IGNvbG9yOiB3aGl0ZTsgcGFkZGluZzogMTVweDsgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6IDE2cHg7IGZvbnQtd2VpZ2h0OiBib2xkOyB9JyArDQogICAgICAgICcudmlkZW8td3JhcHBlciB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDEwMCU7IHBhZGRpbmctdG9wOiA1Ni4yNSU7IC8qIDE2Ojkg5a696auY5q+UICovIGJhY2tncm91bmQ6ICMwMDA7IH0nICsNCiAgICAgICAgJyN2aWRlbyB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBvYmplY3QtZml0OiBjb250YWluOyB9JyArDQogICAgICAgICcuY29udHJvbHMgeyBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IHBhZGRpbmc6IDE1cHggMjBweDsgYmFja2dyb3VuZDogI2Y4ZjlmYTsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlZWU7IH0nICsNCiAgICAgICAgJy5uYXYtZ3JvdXAgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDEwcHg7IH0nICsNCiAgICAgICAgJ2J1dHRvbiB7IHBhZGRpbmc6IDEwcHggMjBweDsgYmFja2dyb3VuZDogIzAwN2JmZjsgY29sb3I6IHdoaXRlOyBib3JkZXI6IG5vbmU7IGJvcmRlci1yYWRpdXM6IDVweDsgY3Vyc29yOiBwb2ludGVyOyBmb250LXNpemU6IDE0cHg7IHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4zczsgfScgKw0KICAgICAgICAnYnV0dG9uOmhvdmVyIHsgYmFja2dyb3VuZDogIzAwNTZiMzsgfScgKw0KICAgICAgICAnYnV0dG9uOmRpc2FibGVkIHsgYmFja2dyb3VuZDogIzZjNzU3ZDsgY3Vyc29yOiBub3QtYWxsb3dlZDsgfScgKw0KICAgICAgICAnc2VsZWN0IHsgcGFkZGluZzogMTBweCAxNXB4OyBib3JkZXI6IDFweCBzb2xpZCAjZGRkOyBib3JkZXItcmFkaXVzOiA1cHg7IGZvbnQtc2l6ZTogMTRweDsgYmFja2dyb3VuZDogd2hpdGU7IG1pbi13aWR0aDogMTIwcHg7IH0nICsNCiAgICAgICAgJy5pbmZvIHsgdGV4dC1hbGlnbjogY2VudGVyOyBwYWRkaW5nOiAxMHB4OyBiYWNrZ3JvdW5kOiAjZjVmNWY1OyBjb2xvcjogIzY2NjsgZm9udC1zaXplOiAxNHB4OyB9JyArDQogICAgICAgICcuZnVsbHNjcmVlbi1idG4geyBwYWRkaW5nOiAxMHB4OyBiYWNrZ3JvdW5kOiAjMjhhNzQ1OyB9JyArDQogICAgICAgICcuZnVsbHNjcmVlbi1idG46aG92ZXIgeyBiYWNrZ3JvdW5kOiAjMjE4ODM4OyB9JyArDQogICAgICAgICdAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsnICsNCiAgICAgICAgICAgICdib2R5IHsgcGFkZGluZzogMTBweDsgfScgKw0KICAgICAgICAgICAgJy5jb250YWluZXIgeyBib3JkZXItcmFkaXVzOiA1cHg7IH0nICsNCiAgICAgICAgICAgICcuY29udHJvbHMgeyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDEwcHg7IH0nICsNCiAgICAgICAgICAgICcubmF2LWdyb3VwIHsgd2lkdGg6IDEwMCU7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgfScgKw0KICAgICAgICAgICAgJ2J1dHRvbiwgc2VsZWN0IHsgd2lkdGg6IDEwMCU7IH0nICsNCiAgICAgICAgJ30nICsNCiAgICAnPC9zdHlsZT4nICsNCic8L2hlYWQ+JyArDQonPGJvZHk+JyArDQogICAgJzxkaXYgY2xhc3M9ImNvbnRhaW5lciI+JyArDQogICAgICAgICc8ZGl2IGNsYXNzPSJoZWFkZXIiPicgKw0KICAgICAgICAgICAgJzxzcGFuIGlkPSJjdXJyZW50Ij4xPC9zcGFuPiAvIDxzcGFuIGlkPSJ0b3RhbCI+JyArIHVybHMubGVuZ3RoICsgJzwvc3Bhbj4g6ZuGJyArDQogICAgICAgICc8L2Rpdj4nICsNCiAgICAgICAgJzxkaXYgY2xhc3M9InZpZGVvLXdyYXBwZXIiPicgKw0KICAgICAgICAgICAgJzx2aWRlbyBjb250cm9scyBhdXRvcGxheSBwbGF5c2lubGluZSBpZD0idmlkZW8iPicgKw0KICAgICAgICAgICAgICAgICc8c291cmNlIHNyYz0iJyArICh1cmxzWzBdIHx8ICcnKSArICciIHR5cGU9ImFwcGxpY2F0aW9uL3gtbXBlZ1VSTCI+JyArDQogICAgICAgICAgICAgICAgJ+aCqOeahOa1j+iniOWZqOS4jeaUr+aMgeinhumikeaSreaUvicgKw0KICAgICAgICAgICAgJzwvdmlkZW8+JyArDQogICAgICAgICc8L2Rpdj4nICsNCiAgICAgICAgJzxkaXYgY2xhc3M9ImNvbnRyb2xzIj4nICsNCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJuYXYtZ3JvdXAiPicgKw0KICAgICAgICAgICAgICAgICc8YnV0dG9uIG9uY2xpY2s9ImNoYW5nZVZpZGVvKC0xKSIgaWQ9InByZXZCdG4iPuS4iuS4gOmbhjwvYnV0dG9uPicgKw0KICAgICAgICAgICAgICAgICc8c2VsZWN0IG9uY2hhbmdlPSJqdW1wVG9WaWRlbyh0aGlzLnZhbHVlKSIgaWQ9InZpZGVvU2VsZWN0Ij4nOw0KDQovLyDnlJ/miJDpgInpobkNCmZvciAobGV0IGkgPSAwOyBpIDwgdXJscy5sZW5ndGg7IGkrKykgew0KICAgIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9IicgKyBpICsgJyI+56ysICcgKyAoaSArIDEpICsgJyDpm4Y8L29wdGlvbj4nOw0KfQ0KDQpodG1sICs9ICc8L3NlbGVjdD4nICsNCiAgICAgICAgICAgICAgICAnPGJ1dHRvbiBvbmNsaWNrPSJjaGFuZ2VWaWRlbygxKSIgaWQ9Im5leHRCdG4iPuS4i+S4gOmbhjwvYnV0dG9uPicgKw0KICAgICAgICAgICAgJzwvZGl2PicgKw0KICAgICAgICAgICAgJzxidXR0b24gb25jbGljaz0idG9nZ2xlRnVsbHNjcmVlbigpIiBjbGFzcz0iZnVsbHNjcmVlbi1idG4iPuWFqOWxjzwvYnV0dG9uPicgKw0KICAgICAgICAnPC9kaXY+JyArDQogICAgICAgICc8ZGl2IGNsYXNzPSJpbmZvIj7mib7liLAgJyArIHVybHMubGVuZ3RoICsgJyDkuKrop4bpopHmupA8L2Rpdj4nICsNCiAgICAnPC9kaXY+JyArDQoNCiAgICAnPHNjcmlwdD4nICsNCiAgICAgICAgJ3ZhciB2aWRlb1VybHMgPSAnICsgSlNPTi5zdHJpbmdpZnkodXJscykgKyAnOycgKw0KICAgICAgICAndmFyIGN1cnJlbnRJbmRleCA9IDA7JyArDQogICAgICAgICd2YXIgdmlkZW8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidmlkZW8iKTsnICsNCiAgICAgICAgJ3ZhciB2aWRlb1NlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ2aWRlb1NlbGVjdCIpOycgKw0KICAgICAgICAndmFyIGN1cnJlbnRTcGFuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImN1cnJlbnQiKTsnICsNCiAgICAgICAgJ3ZhciB0b3RhbFNwYW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidG90YWwiKTsnICsNCiAgICAgICAgJ3ZhciBwcmV2QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByZXZCdG4iKTsnICsNCiAgICAgICAgJ3ZhciBuZXh0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5leHRCdG4iKTsnICsNCiAgICAgICAgJycgKw0KICAgICAgICAnZnVuY3Rpb24gdXBkYXRlVUkoKSB7JyArDQogICAgICAgICAgICAnY3VycmVudFNwYW4udGV4dENvbnRlbnQgPSBjdXJyZW50SW5kZXggKyAxOycgKw0KICAgICAgICAgICAgJ3RvdGFsU3Bhbi50ZXh0Q29udGVudCA9IHZpZGVvVXJscy5sZW5ndGg7JyArDQogICAgICAgICAgICAndmlkZW9TZWxlY3QudmFsdWUgPSBjdXJyZW50SW5kZXg7JyArDQogICAgICAgICAgICAncHJldkJ0bi5kaXNhYmxlZCA9IGN1cnJlbnRJbmRleCA9PT0gMDsnICsNCiAgICAgICAgICAgICduZXh0QnRuLmRpc2FibGVkID0gY3VycmVudEluZGV4ID09PSB2aWRlb1VybHMubGVuZ3RoIC0gMTsnICsNCiAgICAgICAgICAgICd2aWRlby5zcmMgPSB2aWRlb1VybHNbY3VycmVudEluZGV4XTsnICsNCiAgICAgICAgICAgICd2aWRlby5sb2FkKCk7JyArDQogICAgICAgICd9JyArDQogICAgICAgICcnICsNCiAgICAgICAgJ2Z1bmN0aW9uIGNoYW5nZVZpZGVvKGRpcmVjdGlvbikgeycgKw0KICAgICAgICAgICAgJ3ZhciBuZXdJbmRleCA9IGN1cnJlbnRJbmRleCArIGRpcmVjdGlvbjsnICsNCiAgICAgICAgICAgICdpZiAobmV3SW5kZXggPj0gMCAmJiBuZXdJbmRleCA8IHZpZGVvVXJscy5sZW5ndGgpIHsnICsNCiAgICAgICAgICAgICAgICAnY3VycmVudEluZGV4ID0gbmV3SW5kZXg7JyArDQogICAgICAgICAgICAgICAgJ3VwZGF0ZVVJKCk7JyArDQogICAgICAgICAgICAnfScgKw0KICAgICAgICAnfScgKw0KICAgICAgICAnJyArDQogICAgICAgICdmdW5jdGlvbiBqdW1wVG9WaWRlbyhpbmRleCkgeycgKw0KICAgICAgICAgICAgJ2N1cnJlbnRJbmRleCA9IHBhcnNlSW50KGluZGV4KTsnICsNCiAgICAgICAgICAgICd1cGRhdGVVSSgpOycgKw0KICAgICAgICAnfScgKw0KICAgICAgICAnJyArDQogICAgICAgICdmdW5jdGlvbiB0b2dnbGVGdWxsc2NyZWVuKCkgeycgKw0KICAgICAgICAgICAgJ2lmICghZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQpIHsnICsNCiAgICAgICAgICAgICAgICAnaWYgKHZpZGVvLnJlcXVlc3RGdWxsc2NyZWVuKSB7JyArDQogICAgICAgICAgICAgICAgICAgICd2aWRlby5yZXF1ZXN0RnVsbHNjcmVlbigpOycgKw0KICAgICAgICAgICAgICAgICd9IGVsc2UgaWYgKHZpZGVvLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKSB7JyArDQogICAgICAgICAgICAgICAgICAgICd2aWRlby53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigpOycgKw0KICAgICAgICAgICAgICAgICd9IGVsc2UgaWYgKHZpZGVvLm1velJlcXVlc3RGdWxsU2NyZWVuKSB7JyArDQogICAgICAgICAgICAgICAgICAgICd2aWRlby5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpOycgKw0KICAgICAgICAgICAgICAgICd9JyArDQogICAgICAgICAgICAnfSBlbHNlIHsnICsNCiAgICAgICAgICAgICAgICAnaWYgKGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKSB7JyArDQogICAgICAgICAgICAgICAgICAgICdkb2N1bWVudC5leGl0RnVsbHNjcmVlbigpOycgKw0KICAgICAgICAgICAgICAgICd9IGVsc2UgaWYgKGRvY3VtZW50LndlYmtpdEV4aXRGdWxsc2NyZWVuKSB7JyArDQogICAgICAgICAgICAgICAgICAgICdkb2N1bWVudC53ZWJraXRFeGl0RnVsbHNjcmVlbigpOycgKw0KICAgICAgICAgICAgICAgICd9IGVsc2UgaWYgKGRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4pIHsnICsNCiAgICAgICAgICAgICAgICAgICAgJ2RvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4oKTsnICsNCiAgICAgICAgICAgICAgICAnfScgKw0KICAgICAgICAgICAgJ30nICsNCiAgICAgICAgJ30nICsNCiAgICAgICAgJycgKw0KICAgICAgICAnLy8g5Yid5aeL5YyWJyArDQogICAgICAgICd1cGRhdGVVSSgpOycgKw0KICAgICAgICAnJyArDQogICAgICAgICcvLyDplK7nm5jlv6vmjbfplK4nICsNCiAgICAgICAgJ2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBmdW5jdGlvbihlKSB7JyArDQogICAgICAgICAgICAnaWYgKGUua2V5ID09PSAiQXJyb3dMZWZ0IikgY2hhbmdlVmlkZW8oLTEpOycgKw0KICAgICAgICAgICAgJ2Vsc2UgaWYgKGUua2V5ID09PSAiQXJyb3dSaWdodCIpIGNoYW5nZVZpZGVvKDEpOycgKw0KICAgICAgICAgICAgJ2Vsc2UgaWYgKGUua2V5ID09PSAiZiIgfHwgZS5rZXkgPT09ICJGIikgdG9nZ2xlRnVsbHNjcmVlbigpOycgKw0KICAgICAgICAnfSk7JyArDQogICAgICAgICcnICsNCiAgICAgICAgJy8vIOinhumikemUmeivr+WkhOeQhicgKw0KICAgICAgICAndmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCBmdW5jdGlvbigpIHsnICsNCiAgICAgICAgICAgICdjb25zb2xlLmxvZygi6KeG6aKR5Yqg6L296ZSZ6K+v77yM5bCd6K+V5YiH5o2i5Yiw5LiL5LiA5LiqIik7JyArDQogICAgICAgICAgICAnaWYgKGN1cnJlbnRJbmRleCA8IHZpZGVvVXJscy5sZW5ndGggLSAxKSB7JyArDQogICAgICAgICAgICAgICAgJ2N1cnJlbnRJbmRleCsrOycgKw0KICAgICAgICAgICAgICAgICd1cGRhdGVVSSgpOycgKw0KICAgICAgICAgICAgJ30nICsNCiAgICAgICAgJ30pOycgKw0KICAgICc8L3NjcmlwdD4nICsNCic8L2JvZHk+JyArDQonPC9odG1sPic7DQoNCmh0bWw7');\nvar step2 = java.getString(step1);\nresult = step2\n</js>",
    "ruleImage": "@js:\nvar text = java.getString('script@html');\nvar match = text.match(/loadBannerDirect\\('([^']+)'/);\nvar img = match ? match[1] : '';\nimg;",
    "ruleLink": "href",
    "ruleNextPage": "page",
    "rulePubDate": "{{@@.wraps@text}}{{@@.post-card-info span@text##\\n}}",
    "ruleTitle": "h2@text",
    "singleUrl": false,
    "sortUrl": "搜索::/search/{{source.getVariable()}}/{{page}}/\n首页::/page/{{page}}/\n今日看料::/category/24hcg/{{page}}/\n热门吃瓜::/category/rgtj/{{page}}/\n每日热瓜::/category/mrrg/{{page}}/\n反差女神::/category/fcns/{{page}}/\n学院热瓜::/category/xyrg/{{page}}/\n网红吃瓜::/category/whhl/{{page}}/\n每日大赛::/category/mrds/{{page}}/\n海角乱伦::/category/llsq/{{page}}/\n黑料大事::/category/hlda/{{page}}/\n撸友看片::/category/lydt/{{page}}/\n黑料杂谈::/category/hlzt/{{page}}/\nav解说::/category/avjs/{{page}}/\n禁播动漫::/category/mrst/{{page}}/\n性爱技巧::/category/wyxs/{{page}}/\n爽文短剧::/category/swdj/{{page}}/\n明星吃瓜::/category/mxbg/{{page}}/\n官场秘闻::/category/gcmw/{{page}}/\n学生::/search/学生/{{page}}/\n全部①::/<,page/{{page}}/>\n全部②::/page/3/\n全部③::/page/5/\n偷情::/search/偷情/{{page}}/\n白虎::/search/白虎/{{page}}/\n反差::/search/反差/{{page}}/\n极品::/search/极品/{{page}}/\n萝莉::/search/萝莉/{{page}}/\n00后::/search/00后/{{page}}/\n女同::/search/女同/{{page}}/\n双马尾::/search/双马尾/{{page}}/\n学院::/search/学院/{{page}}/\n高三::/search/高三/{{page}}/\n高中::/search/高中/{{page}}/\n少女::/search/少女/{{page}}/\n情趣::/search/情趣/{{page}}/\n自拍::/search/自拍/{{page}}/\n大学::/search/大学/{{page}}/\n大一::/search/大一/{{page}}/\n学妹::/search/学妹/{{page}}/\n校花::/search/校花/{{page}}/\n调教::/search/调教/{{page}}/\n女神::/search/女神/{{page}}/\n少妇::/search/少妇/{{page}}/\n巨乳::/search/巨乳/{{page}}/\n孕妇::/search/孕妇/{{page}}/\n口::/search/口交/{{page}}/\n精::/search/精/{{page}}/",
    "sourceGroup": "版本",
    "sourceIcon": "https://i1.wp.com/i.postimg.cc/wjL5myHr/kpptube-cc-3e997cb42a6b0f37af6c6a40866ba202.gif",
    "sourceName": "2.2",
    "sourceUrl": "https://wiki.cvgdpnvq.xyz/",
    "style": "iframe{\n\theight:600px\n}\ntitle{\n\tdisplay:block\n}"
  },
  {
    "articleStyle": 1,
    "concurrentRate": "",
    "customOrder": 500,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n    'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Pixel 3 XL Build/RQ3A.211001.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/102.0.4988.0 Mobile Safari/537.36 SearchCraft/3.9.2 (Baidu; P1 11) '\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "<js>\njson=[];\nif(baseUrl.match(/ /)){\nlist=baseUrl.replace(/http.*?wd=\\s*/,'').split(' ');\nfor(i in list){\nhref=list[i].match(/【(.*?)】/)[1];\ntext=list[i].match(/《(.*?)》/)[1];\nintro=list[i].match(/◎(.*?)◎/)[1];\nindex=list[i].match(/^(\\d+、\\d+、)/)?list[i].match(/^(\\d+、\\d+、)/)[1]:list[i].match(/^(.*?)【/)[1]\njson.push({text:text,src:href,intro:intro,index:index})\n}\n}\nJSON.stringify(json)</js>\n$.[*]",
    "ruleContent": "",
    "ruleImage": "$.src",
    "ruleLink": "$.index\n@js:\nif(!result.match(/^http/) && !result.match(/\\d+、\\d+、/)){\nresult=\"https://www.coolapk.com/link?url=\"+encodeURIComponent(result)\n}else{result=result}",
    "ruleNextPage": "",
    "rulePubDate": "$.intro",
    "ruleTitle": "$.text",
    "singleUrl": false,
    "sortUrl": "💠 导航::https://knowsex.net/【https://knowsex.net/sub/img/contraceptive.jpg】《知性两性健康》◎两性健康-开放式性教育网站◎ https://aiboy.cc/【https://aiboy.cc/uploadfile/2021/0612/20210612014920789.jpg】《爱男孩帅哥网》◎同志、图片、小说、电影、资讯◎ https://fulihttp.com/【https://xn---fuliaboutcom-h27w88qmr0i7zpx96b.fulistart.com/static/images/logo.svg】《第一福利导航》◎第一学术网😏◎ https://抖淫.com/【https://d.0tcsi.bar/favicon.ico】《抖淫》◎抖淫短视频◎ https://www.zztt35.com/【https://static.zztt87.com/usr/uploads/2022/05/1824266711.png】《黑料不打烊》◎网红黑料、吃瓜🍉｜https://xxxmmm.email/◎ https://141jj.com/【https://files.catbox.moe/v2m4l7.png】《141JJ》◎🚀VPN｜很全的成人網站列表◎ https://theporndude.com/zh【https://media.porndudecdn.com/includes/images/mobile-logo-r.svg】《PornDude》◎🚀VPN｜色情视频网站列表◎ https://mygaysites.com/【https://mygaysites.com/includes/images/mobilegaylogo.svg】《MyGaySites》◎🚀VPN｜同志色情网站聚合◎\n\n\n🌐 聚合::https://www.fuqpremium.com/zh/【https://www.fuqpremium.com/templates/fuqpremium/images/icon.png】《FreePornTubes》◎🚀VPN｜优质色情视频导航◎ https://www.fuq.com/zh/【https://www.fuq.com/templates/fuq/images/logo.svg】《Fuq》◎🚀VPN｜色情电影导航◎ https://www.tgtube.com/zh/【https://www.tgtube.com/templates/tgtube/images/logo.svg】《TGTube》◎🚀VPN｜人妖色情油管视频导航◎ https://www.forhertube.com/zh/【https://www.forhertube.com/templates/forhertube/images/logo.svg】《ForHerTube》◎🚀VPN｜适合女性的色情视频导航◎ https://www.ixxx.com/zh/【https://www.ixxx.com/templates/ixxx/images/logo.svg】《iXXX》◎🚀VPN｜色情电影导航◎ https://www.tubegalore.com/zh/【https://www.tubegalore.com/templates/tubegalore/images/logo.svg】《TubeGalore》◎🚀VPN｜色情电视导航◎ https://www.maturetube.com/zh/【https://www.maturetube.com/templates/maturetube/images/logo.svg】《MatureTube》◎🚀VPN｜辣妈、MILF、奶奶色情导航◎ https://www.gaymaletube.com/zh/【https://www.gaymaletube.com/templates/gaymaletube/images/logo.svg】《GayMaleTube》◎🚀VPN｜同性恋色情视频导航◎ https://www.porzo.com/zh/【https://www.porzo.com/templates/porzo/images/logo.svg】《PORZO》◎🚀VPN｜色情视频导航◎ https://www.dinotube.com/zh/【https://www.dinotube.com/templates/dinotube/images/logo.svg】《DinoTube》◎🚀VPN｜色情视频导航◎ https://www.lobstertube.com/zh/【https://www.lobstertube.com/templates/lobstertube/images/icon.png】《LobsterTube》◎🚀VPN｜性爱、电影、电视导航◎ https://www.tiava.com/zh/【】《Tiava》◎🚀VPN｜色情电影导航◎\n\n\n🎬 传媒::https://byym26.com/【https://s1.ax1x.com/2023/01/26/pSNmjD1.png】《水果派》◎成人影片解说节目◎ http://smyis.xyz/【http://smyis.xyz/Template/xms02b/img/logo.svg】《稻妻影视》◎日本AV视频◎ https://playav.tv/【】《PlayAV》◎亚洲高清影片◎ http://hhdyw.buzz/【http://hhdyw.buzz/template/c25//images/play-logo.png】《八点影院》◎食色大陆◎ https://www.aiwuav.xyz/index.php/label/new.html【https://www.aiwuav.xyz/template/aiw/favicon.ico】《爱污传媒》◎传媒视频聚合｜https://www.aiwu.info/◎ https://kvotr.cc/【https://kvotr.cc/template/mdapp.icu2/images/favicon.ico】《麻豆视频》◎海量高清VIP视频◎ https://www.saosss.com/latest-updates/【http://img1.baidu.com/it/u=3358000656,1590169644&fm=253&fmt=auto&app=138&f=JPEG】《886视频》◎传媒聚合◎ https://yelai.cf/【https://b2less.dongshouji.com/file/pic001/images/icons/jiuyaop/icon-512x512.png】《91自拍》◎高清AV资源◎ https://avhd1.com/【https://avhd1.com/img/logo_icon_avhd1.png】《HD高清AV》◎高清AV◎ https://mizhan.tv/【https://mizhan.tv/upload/site/20221018-1/a872dcc406ff00e088eccfcd60f72c85.png】《咪站HD》◎情色A片◎ https://zishijiaoxue3.xyz/【https://zishijiaoxue3.xyz/templates/theme2/images/loading.gif】《姿势教学》◎一夜夫妻◎ https://taoh2555.com/【】《桃红色界》◎教室诱惑、浴室激情◎ https://85videos.com/【https://85videos.com/template/85videos/images/pixel.png】《85Videos》◎日本AV◎\n\n\n🔞 成人①::https://集芳阁.com/【https://集芳阁.com/static/logo.svg】《集芳阁》◎集芳阁云搜◎ https://porn研究所.com/【https://porn研究所.com/img/logo.svg】《Porn研究所》◎福利视频◎ https://laowangyy.cc/【https://qq.com.xva06.xyz/static/images/logo.svg】《SEAV在线》◎成人视频◎ https://91av.pages.dev/【】《91AV聚合》◎视频导航◎ http://www.wangzhi.mom/【】《影库资源》◎视频导航◎ https://www.tkbcs8.life/【】《脱裤吧》◎https://tuoku9.com/◎\n\n\n🔞 成人②::https://www.shn789.com/【】《四虎影院》◎福利视频◎ https://qswyt.pw/【】《情色五月天》◎福利视频◎ https://7m01.tk/【】《萝莉姬》◎福利视频◎ https://97d77.xyz/【】《蔡萝莉》◎成人影院◎ https://8xx.live/【https://80dv.buzz/p/favicon-32x32.png】《拔插拔插》◎成人视频◎ https://zuixin.fy311.com/【】《风月同天》◎成人视频｜https://www.fyttdz.com/◎ https://www.avbus1.com/【】《AV巴士》◎成人视频◎ https://bkeib.xyz/【】《B影院》◎成人视频｜https://github.com/Bcinema/Btv◎ http://zhiyin202207.xyz/【】《知阴》◎成人视频｜http://HuiJiaDiZhi.com/◎ https://50dh.buzz/【】《5G影院》◎成人视频◎ https://www.69crtt.gq/【】《69成人天堂》◎亚洲成人视频◎ https://nbpp.buzz/【】《奶爸视频》◎成人视频◎ https://www.gcjxdz.xyz/【】《国产精选》◎成人视频◎ https://bi81.top/【】《Bi8.TV》◎福利视频◎ https://2.258porn.cf/【】《258Porn》◎成人AV◎ http://32den.com/【】《YouPorn》◎成人视频◎ https://www.xiaobi096.com/【】《蝌蚪窝》◎成人电影◎ http://www.aqdlt.com/【】《爱情岛论坛》◎亚洲品质自拍视频◎\n\n\n🚀 翻墙::https://po18.fans:1234/【https://po18.love:2345/template/conch/asset/img/load.gif】《Po18hub》◎激情视频导航｜https://po18av.vip/◎ https://www.xnxx.com/【】《XNXX》◎🚀VPN｜成人视频◎ https://zh.xhamster.com/【https://static-lvlt.xhcdn.com/xh-desktop/images/logo/logo.svg】《xHamster》◎🚀VPN｜成人视频◎ https://www.xvideos.com/【https://static-ss.xvideos-cdn.com/v3/img/skins/default/xvideos.com.svg】《XVIDEOS》◎🚀VPN｜成人视频◎ https://cn.pornhub.com/【https://ei.phncdn.com/www-static/images/pornhub_logo_straight.svg】《PornHub》◎🚀VPN｜色情视频及性爱影片◎ https://jable.tv/【】《Jable》◎🚀VPN｜日本高清AV｜https://alldayj.com/◎ https://netflav.com/【https://netflav.com/static/assets/logo.svg】《Netflav》◎🚀VPN｜日本成人电影◎\n\n\n🈲 伦理::https://www.72dy.com/【https://static.tvcache.com//icon/72dy/favicon.png】《72电影》◎高清伦理◎ https://www.2345ti.com/【】《235影视》◎经典理伦片◎ https://vip.eeussjt.com/【】《EEUSS影院》◎快播电影、伦理◎ https://伦理小站.com/【https://伦理小站.com/statics/img/logo.svg】《韩三伦理小站》◎伦理影片◎\n\n\n🔥 耽影::https://www.fu210.top/【】《爱妖灵》◎腐剧、耽美、泰剧暖光影视官网◎ https://www.bl210.top/【】《曙光影视》◎腐剧、耽美、泰剧暖光影视官网◎ https://www.tj8.top/【】《泰剧网》◎腐剧、耽美、泰剧暖光影视官网◎ https://www.bttwoo.com/【】《两个BT》◎同性｜https://www.bttwo.vip/◎ https://g.manmankan.com/【】《漫漫看》◎男同影视大全◎\n\n\n🎨 漫画::https://漫香阁.com/【https://漫香阁.com/favicon.ico】《漫香阁》◎成人H漫画◎ 【】《》◎韩国、日本漫画◎",
    "sourceComment": "",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "2.3",
    "sourceUrl": "其他影视"
  },
  {
    "articleStyle": 0,
    "customOrder": 501,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "html",
    "ruleContent": "class.waterfall@html",
    "ruleLink": "html",
    "ruleTitle": "text",
    "singleUrl": false,
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "2.4",
    "sourceUrl": "https://xn---50ppiccom-xr7r588tmbm.www-50ppic.com/?fuli.one"
  },
  {
    "articleStyle": 2,
    "customOrder": 502,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "ul@li",
    "ruleContent": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0\">\r\n    <link rel=\"stylesheet\" href=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.1/viewer.min.css\">\r\n    <script src=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.1/viewer.min.js\"></script>\r\n    <script src=\"http://libs.baidu.com/jquery/2.0.0/jquery.min.js\"></script>\n    {{@@tag.title@html}}\r\n</head>\r\n\r\n<body>\r\n    <h3>{{@@.h@tag.h1@text}}</h3>\r\n    <div id=\"box\">{{@@id.picg@tag.img@html}}</div>\r\n    <div id=\"loads\">加载中 </div>\r\n    <script>\r\n        var loads;\r\n        $(document).ready(function () {\r\n            var box = document.getElementById(\"box\");\r\n            loads = document.getElementById(\"loads\");\r\n            new Viewer(box, { title: false, interval: 3000 })\r\n            var i = 2;\r\n            var page = {{@@class.pagelist.0@tag.a.-2@textNodes##\\n}};\r\n            var url = \"{{baseUrl.replace('.html','_')}}\";\r\n            new IntersectionObserver(entries => {\r\n                if (entries[0].intersectionRatio) {\r\n                    if (entries[0].intersectionRatio <= 0) return;\r\n                    for (var j = 0; j < 1; j++) {\r\n                        fetchHtml(i, page, url);\r\n                        i += 1;\r\n                    }\r\n                }\r\n            }).observe(loads)\r\n        });\r\n\r\n\r\n        function fetchHtml(i, page, url) {\n        \t\r\n            if (i <= page) {\r\n                nurl = url + i + '.html';\r\n                $.ajax({\r\n                    url: nurl,\r\n                    dataType: 'html',\r\n                    success: function (html) {\r\n                        $('#box').append('<h5>' + (i) + '->' + (page) + '</h5>');\r\n                        $('#box').append($(html).find('p a img'));\r\n                        box.viewer.update();\r\n                    },\r\n                    error: function (xhr) { }\r\n                });\r\n            } else {\r\n                $('#loads').html(\"\");\r\n            }\r\n        }\r\n    </script>\r\n</body>\r\n\r\n</html>",
    "ruleImage": "img@src",
    "ruleLink": "a@href",
    "ruleNextPage": "page",
    "ruleTitle": "class.title@text",
    "singleUrl": true,
    "sortUrl": "套图::http://www.sytuk.com/shey/yingtiiurm/1_{{page}}.html\n\n日韩::http://www.sytuk.com/shey/yingtiiurm/2_{{page}}.html\n\n内衣::http://www.sytuk.com/shey/yingtiiurm/9_{{page}}.html\n\n萌妹::http://www.sytuk.com/shey/yingtiiurm/11_{{page}}.html\n\n精品::http://www.sytuk.com/shey/yingtiiurm/18_{{page}}.html\n\n高清::http://www.sytuk.com/shey/yingtiiurm/24_{{page}}.html\n\n无圣光::http://www.sytuk.com/shey/yingtiiurm/25_{{page}}.html",
    "sourceComment": "斧头帮全体同仁恭迎火云邪神，来根华子波",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "2.5",
    "sourceUrl": "http://www.sytuk.com/",
    "style": "/*标题相关*/\r\nh3{text-align:center}\r\nh6{margin-bottom:0}\r\nimg{width:100%}\nh5{margin-bottom:0;padding-left:5;}"
  },
  {
    "articleStyle": 0,
    "customOrder": 505,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "header": "<js>\nheaders={\n    \"User-Agent\": \"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Mobile Safari/537.36 EdgA/127.0.0.0\",\n\"Cache-Control\": \"no-cache\",\n    \"Referer\": String(source.getKey()).replace(/(.*\\/\\/[a-z0-9.-]+).*/, '$1')\n}\nJSON.stringify(headers);\n</js>",
    "injectJs": "function setupCustomPlayer(video) {\n  // 手势滑动快进\n  let isDragging = false;\n  let startX = 0;\n  let startTime = 0;\n  \n  // 长按加速相关变量\n  let longPressTimer = null;\n  const LONG_PRESS_DELAY = 300;\n  const NORMAL_SPEED = 1.25;\n  const FAST_SPEED = 3;\n  let wasPaused = false;\n\n  // 触摸事件处理\n  function handleTouchStart(e) {\n    startX = e.touches[0].clientX;\n    startTime = video.currentTime;\n    wasPaused = video.paused;\n    \n    longPressTimer = setTimeout(() => {\n      video.playbackRate = FAST_SPEED;\n      if (wasPaused) video.play();\n    }, LONG_PRESS_DELAY);\n  }\n\n  function handleTouchMove(e) {\n    if (longPressTimer) {\n      clearTimeout(longPressTimer);\n      longPressTimer = null;\n    }\n    \n    const dx = e.touches[0].clientX - startX;\n    if (Math.abs(dx) > 10) {\n      if (!isDragging) {\n        video.pause();\n        isDragging = true;\n      }\n      const change = (dx / video.clientWidth) * video.duration;\n      video.currentTime = Math.max(0, Math.min(startTime + change, video.duration));\n    }\n  }\n\n  function handleTouchEnd() {\n    if (longPressTimer) {\n      clearTimeout(longPressTimer);\n      longPressTimer = null;\n    }\n    \n    if (isDragging) {\n      video.playbackRate = NORMAL_SPEED;\n      video.play();\n      isDragging = false;\n    } else if (video.playbackRate === FAST_SPEED) {\n      video.playbackRate = NORMAL_SPEED;\n      if (wasPaused) video.pause();\n    }\n  }\n\n  // 添加触摸事件监听\n  video.addEventListener('touchstart', handleTouchStart);\n  video.addEventListener('touchmove', handleTouchMove);\n  video.addEventListener('touchend', handleTouchEnd);\n  \n  // 初始播放速度\n  video.playbackRate = NORMAL_SPEED;\n\n  // 创建按钮的通用函数\n  function createButton(text, onClick, position, width = '20px', top = '50%', fontSize = '16px') {\n    const button = document.createElement('button');\n    button.textContent = text;\n    button.style.position = 'absolute';\n    button.style[position.horizontal] = '0';\n    button.style.top = top;\n    button.style.transform = top === '50%' ? 'translateY(-50%)' : 'none';\n    button.style.zIndex = '999';\n    button.style.padding = '1px';\n    button.style.background = 'rgba(51, 51, 51, 0)';\n    button.style.color = '#fff';\n    button.style.border = 'none';\n    button.style.cursor = 'pointer';\n    button.style.width = width;\n    button.style.height = '30px';\n    button.style.fontSize = fontSize; // 添加字体大小设置\n    button.addEventListener('click', onClick);\n    video.parentNode.appendChild(button);\n    return button;\n  }\n\n  // 旋转按钮（右侧上方） \n  createButton('⟳', () => {\n    const currentRotation = parseInt(video.getAttribute('data-rotation') || '0');\n    const newRotation = (currentRotation + 90) % 360;\n    video.setAttribute('data-rotation', newRotation);\n    \n    // 保留当前的缩放比例和反转状态\n    const currentTransform = video.style.transform || '';\n    let currentScale = 1;\n    const scaleMatch = currentTransform.match(/scale\\(([^)]+)\\)/);\n    if (scaleMatch) currentScale = parseFloat(scaleMatch[1]);\n    \n    // 获取当前反转状态\n    const isFlipped = video.getAttribute('data-flipped') === 'true';\n    const flipValue = isFlipped ? -1 : 1;\n    \n    video.style.transform = `rotate(${newRotation}deg) scale(${currentScale}) scaleX(${flipValue})`;\n  }, { horizontal: 'right' }, '20px', 'calc(50% - 20px)');\n\n  // 播放/暂停按钮（右侧下方）\n  let isPlaying = !video.paused;\n  const playPauseBtn = createButton(\n    isPlaying ? '❚❚' : '▶',\n    () => {\n      if (video.paused) {\n        video.play();\n        playPauseBtn.textContent = '❚❚';\n      } else {\n        video.pause();\n        playPauseBtn.textContent = '▶';\n      }\n    },\n    { horizontal: 'right' },\n    '22px',\n    'calc(50% + 20px)',\n    '10px' // 单独设置字体大小\n  );\n\n  // 监听视频的播放状态变化\n  video.addEventListener('play', () => {\n    playPauseBtn.textContent = '❚❚';\n    isPlaying = true;\n  });\n\n  video.addEventListener('pause', () => {\n    playPauseBtn.textContent = '▶';\n    isPlaying = false;\n  });\n\n  // 缩放按钮（左侧上方）\n  let zoomCount = 0;\n  createButton('+', () => {\n    const currentRotation = parseInt(video.getAttribute('data-rotation') || '0');\n    \n    // 获取当前缩放比例和反转状态\n    const currentTransform = video.style.transform || '';\n    let currentScale = 1;\n    const scaleMatch = currentTransform.match(/scale\\(([^)]+)\\)/);\n    if (scaleMatch) currentScale = parseFloat(scaleMatch[1]);\n    \n    // 获取当前反转状态\n    const isFlipped = video.getAttribute('data-flipped') === 'true';\n    const flipValue = isFlipped ? -1 : 1;\n    \n    if (zoomCount < 4) {\n      const newScale = currentScale * 1.25;\n      video.style.transform = `rotate(${currentRotation}deg) scale(${newScale}) scaleX(${flipValue})`;\n      zoomCount++;\n    } else {\n      video.style.transform = `rotate(${currentRotation}deg) scale(1) scaleX(${flipValue})`;\n      zoomCount = 0;\n    }\n  }, { horizontal: 'left' }, '20px', 'calc(50% - 20px)');\n\n  // 反转按钮（左侧下方）\n  const flipBtn = createButton('⇄', () => {\n    const isFlipped = video.getAttribute('data-flipped') === 'true';\n    const newFlipState = !isFlipped;\n    video.setAttribute('data-flipped', newFlipState);\n    \n    // 保留当前的旋转和缩放比例\n    const currentRotation = parseInt(video.getAttribute('data-rotation') || '0');\n    const currentTransform = video.style.transform || '';\n    let currentScale = 1;\n    const scaleMatch = currentTransform.match(/scale\\(([^)]+)\\)/);\n    if (scaleMatch) currentScale = parseFloat(scaleMatch[1]);\n    \n    const flipValue = newFlipState ? -1 : 1;\n    video.style.transform = `rotate(${currentRotation}deg) scale(${currentScale}) scaleX(${flipValue})`;\n  }, { horizontal: 'left' }, '20px', 'calc(50% + 20px)', '10px'); // 单独设置字体大小\n\n  // 快速跳转按钮（底部中央）\n  const buttonContainer = document.createElement('div');\n  buttonContainer.style.position = 'absolute';\n  buttonContainer.style.bottom = '0';\n  buttonContainer.style.left = '50%';\n  buttonContainer.style.transform = 'translateX(-50%)';\n  buttonContainer.style.display = 'flex';\n  buttonContainer.style.gap = '10px';\n  buttonContainer.style.zIndex = '999';\n  \n  // 按钮配置\n  const seekButtons = [\n    { text: '-5分', time: -300 },\n    { text: '-1分', time: -60 },\n    { text: '+1分', time: 60 },\n    { text: '+5分', time: 300 }\n  ];\n\n  seekButtons.forEach(({ text, time }) => {\n    const button = document.createElement('button');\n    button.textContent = text;\n    button.style.padding = '1px';\n    button.style.background = 'rgba(51, 51, 51, 0)';\n    button.style.color = '#fff';\n    button.style.border = 'none';\n    button.style.cursor = 'pointer';\n    button.style.width = '60px';\n    button.style.height = '30px';\n    // 快速跳转按钮使用默认字体大小\n    button.addEventListener('click', () => {\n      video.currentTime = Math.max(0, Math.min(video.currentTime + time, video.duration));\n    });\n    buttonContainer.appendChild(button);\n  });\n video.parentNode.appendChild(buttonContainer);\n\n// 跳过片头功能\n  video.addEventListener('timeupdate', () => {\n    if (video.currentTime < 10) {\n      video.currentTime = 10;\n    }\n  });\n}\n\n// 修改初始化逻辑，增加重试机制\nfunction initPlayerWithRetry() {\n  const maxRetries = 10;\n  const retryInterval = 500;\n  let retries = 0;\n  const tryInit = () => {\n    const video = document.getElementById('video');\n    if (video) {\n      setupCustomPlayer(video);\n    } else if (retries < maxRetries) {\n      retries++;\n      setTimeout(tryInit, retryInterval);\n    }\n  };\n  tryInit();\n}\n// 使用重试机制初始化播放器\ninitPlayerWithRetry();",
    "lastUpdateTime": 1770070818566,
    "loadWithBaseUrl": true,
    "ruleArticles": "$.data.list",
    "ruleContent": "{{$.data.movie_m3u8_url..url}}\n@js:\nresult=decodeURIComponent(result);\nresult=result.replace(/\\\\/g,'');\nresult=`\n<html>  \n<head>  \n<meta charset=\"utf-8\">  \n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\">\n<meta name=\"referrer\" content=\"never\"/>\n<style>html,body{text-align:center;margin:0;padding:0;width:100%;overflow: hidden;}</style>\n</head>  \n<body>  \n<div class=\"container\"><div  class=\"title\">{{$.data.movie_name}}</div>\n<video id=\"video\" width=\"100%\" height=\"91%\" poster=\"{{$.data.movie_cover}}\"  controls autoplay muted loop>  \n    <source src=\"${result}\" type=\"application/x-mpegURL\">    \n</video></div>\n</body>  \n</html>\n`;",
    "ruleImage": "$.movie_cover",
    "ruleLink": "/api/Webapi_v1/Resource/movieInfo?movie_id={{$.movie_id}}",
    "ruleNextPage": "page",
    "rulePubDate": "{{$.movie_cover##/(20.*)/.*/##$1##}} ⏱️{{$.movie_long}}",
    "ruleTitle": "@js:\nif (\"{{$.need_vip}}\"==\"0\"){result=\"{{$.movie_name##.*屎.*|.*Ts.*|.*TS.*|.*ts.*|.*伪娘.*|.*无法抑制的热情.*}}\"}else{result=\"\"}",
    "singleUrl": false,
    "sortUrl": "\n主播随机::/api/Webapi_v1/Resource/movieList?page={{ Math.ceil(Math.random()*380) }}&num=20&sort=1&label_ids[0]=5\n\n最新::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1\n\n🔎搜索::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&search={{v=source.getVariable();if(/^\\s*$/.test(v)||v==null)source.setVariable('奸');source.getVariable()}}\n\n自拍::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&label_ids[0]=2\n主播::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&label_ids[0]=5\n中字::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&label_ids[0]=20\nAV::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&label_ids[0]=25\n国产::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&label_ids[0]=26\n网红::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&label_ids[0]=21\n麻豆::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&label_ids[0]=22\n偷拍::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&label_ids[0]=23\n探花::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&label_ids[0]=24\n欧美::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&label_ids[0]=6\n动漫:/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&label_ids[0]=9\n",
    "sourceComment": "http://www.wus82.com/\n备用地址 \nhttps://www.x3o5z.com/\nhttps://www.e2d0m.com/\nhttps://www.m4e0p.com/\nhttps://www.b1b4j.com/\nhttps://www.s1b9k.com/\nhttps://www.w4x5j.com/\nhttps://www.8u0lz.com/\n",
    "sourceGroup": "版本",
    "sourceIcon": "https://ali-ec.static.yximgs.com/bs2/upload-kwaishop-themis-bucket/cfd1eec1-f882-458c-a66e-89585596d6f0_1a379e34b53e7834b9853e6c4d9918c1.jpg",
    "sourceName": "2.6",
    "sourceUrl": "https://www.l1m9r.top/",
    "style": ".container {\n    position: relative; \n    height: 100%; \n    overflow: hidden; \n}\n.title {\n    position: absolute; \n    top: 0; \n    width: 100%;\n    overflow: hidden; \n    text-overflow: ellipsis;\n    display: -webkit-box;\n    -webkit-box-orient: vertical; \n    -webkit-line-clamp: 2;\n    z-index: 1; \n    background: #000; \n    padding: 0 0 3px 0;\n}\nvideo {\n    position: absolute; \n    top: -120px; /* 视频上移 */\n    left: 0; \n    width: 100%; \n    height: calc(96% + 120px);  /* 调整高度以适应内容 */\n    object-fit: contain; \n    z-index: 0; \n    controls=\"controls\" autoplay muted; \n} \nvideo::-webkit-media-controls-overlay-play-button {\n    display: none !important;\n}\n"
  },
  {
    "articleStyle": 2,
    "customOrder": 506,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "ul@li",
    "ruleContent": "   <h3>{{@@.h@tag.h1@text}}</h3>\r\n    <div id=\"box\">{{@@id.picg@tag.img@html}}</div>\r\n",
    "ruleImage": "img@src",
    "ruleLink": "a@href",
    "ruleNextPage": "page",
    "ruleTitle": "class.title@text",
    "singleUrl": false,
    "sortUrl": "摄影图库::http://www.sytuk.com/shey/yingtiiurm/11_1.html\n经典套图::http://www.jdtaotu.com/s.asp?keyword=%CD%F8%C2%B7\n女神美图::http://www.nsmeitu.com/s.asp?keyword=%CD%F8%C2%B7\n极品美女图::http://www.jpmnt.com/s.asp?keyword=%CD%F8%C2%B7\n高清网红图::http://www.gqwht.com/s.asp?keyword=%CD%F8%C2%B7\n漂亮网红图::http://www.plwht.com/s.asp?keyword=%CD%F8%C2%B7\n模特摄影图::http://www.mtsyt.com/s.asp?keyword=%CD%F8%C2%B7\n漂亮美图::http://www.plmeitu.com/s.asp?keyword=%CD%F8%C2%B7\n私房写真图::http://www.sfxzt.com/s.asp?keyword=%CD%F8%C2%B7\n极品女神图::http://www.jpnst.com/s.asp?keyword=%CD%F8%C2%B7\n国产写真图::http://www.gcxzt.com/s.asp?keyword=%CD%F8%C2%B7\n少女套图::http://www.sntaotu.com/s.asp?keyword=%CD%F8%C2%B7\n模特写真图::http://www.mtxzt.com/chis/wangluo/1.html",
    "sourceComment": "分类无法显示下一页",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "2.7",
    "sourceUrl": "http://www.mtxzt.com",
    "style": "/*标题相关*/\r\nh3{text-align:center}\r\nh6{margin-bottom:0}\r\nimg{width:100%}\nh5{margin-bottom:0;padding-left:5;}"
  },
  {
    "articleStyle": 0,
    "customOrder": 507,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": " {\n\"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\"Cookie\":\"__cfduid=d150f32feeec7048d35993a8a642d2c0e1600348724; AVS=k29ctap8qhbuncoijpdkckr5v7\"\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.left@class.row@class.game-item&&class.left@class.row@class.video-item",
    "ruleContent": "@js:\nheader={\"Referer\":baseUrl};\nheaders={\"headers\":JSON.stringify(header)}\nif(baseUrl.match(/gif/)){\nvar doc = org.jsoup.Jsoup.parse(result);\nvar gif = String(doc).match(/gif.{5,10}.webm/);\nvar preview = 'https://www.hentaicloud.com/media/'+gif;\n\nif(String(doc).match(/From Video/)){\nvar url = doc.select(\"div.fromvideo\").select(\"a\").attr(\"href\");\nvar allUrl = 'https://www.hentaicloud.com'+url;\nvar doc = org.jsoup.Jsoup.connect(allUrl).get();\nvar spt = doc.select(\"source\").toString();\nvar src = spt.match(/https.{36}hd.{5,10}mp4/);\nresult = '<body><div><video controls=\"true\" width=\"100%\" autoplay=\"true\" src ='+preview+'></div><div><a href='+src+' >点击看全片</a></div></body>'\n}else{  \nresult = '<body><div><video controls=\"true\" width=\"100%\" autoplay=\"true\" src ='+preview+'></div><div><a>此片暂无出处</a></div></body>'\n}\n\n}else{\nvar doc = org.jsoup.Jsoup.parse(result);\nvar spt = doc.select(\"source\").toString();\nvar src = spt.match(/https.{36}hd.{5,10}mp4/);\nvar video='<iframe src='+src+' width=\"100%\" height=\"560\" frameborder=\"no\" allowfullscreen=\"true\">'  \nresult = video}",
    "ruleImage": "tag.img@src",
    "ruleLink": "tag.a@href",
    "ruleNextPage": "page",
    "rulePubDate": "@js:\nvar doc = org.jsoup.Jsoup.parse(result)\nvar text = doc.select(\"div.info\").select(\"span\").textNodes();\nif(text.size()==3){\nvar view = text.get(2).toString();\nif(view==\" \"){view =\"无\";}\nvar episode =text.get(0).toString();\nif(episode ==\" \"|| episode ==\"-\"){episode =\"无\";}\nresult = episode+\"   观看:\"+view}else if(text.size()==4){\nvar view = text.get(3).toString();\nif(view==\" \"){view =\"无\";}\nvar episode =text.get(0).toString();\nif(episode ==\" \"|| episode ==\"-\"){episode =\"无\";}\nresult = episode+\"   观看:\"+view\n}else{result = \"可通过动图预览查找动画\"}\n",
    "ruleTitle": "tag.div@id&&class.name@text",
    "singleUrl": false,
    "sortUrl": "搜索::https://www.hentaicloud.com/search?search_type=videos&search_query=&search_type=videos&page={{page}}\n\n\n动图::https://www.hentaicloud.com/gifs?page={{page}}\n3D::https://www.hentaicloud.com/videos/3d-hentai?page={{page}}\n口交::https://www.hentaicloud.com/tags/Blowjob?page={{page}}\n无码::https://www.hentaicloud.com/tags/Uncensored?page={{page}}\n触手::https://www.hentaicloud.com/tags/Tentacle?page={{page}}\n扶她::https://www.hentaicloud.com/videos/futanari?page={{page}}\n恶魔::https://www.hentaicloud.com/tags/Demon?page={{page}}\n自慰::https://www.hentaicloud.com/tags/Masturbation?page={{page}}\n后宫::https://www.hentaicloud.com/tags/Harem?page={{page}}",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "2.8",
    "sourceUrl": "https://www.hentaicloud.com",
    "style": ""
  },
  {
    "articleStyle": 0,
    "contentBlacklist": "https://lupic.cdn.bcebos.com/,\nhttps://cpro.baidu.com/,\nhttps://eclick.baidu.com/,\nhttps://sofire.baidu.com/,\nhttps://analytics.woozooo.com/,\nhttps://statics.woozooo.com/",
    "customOrder": 508,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n    'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Pixel 3 XL Build/RQ3A.211001.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/102.0.4988.0 Mobile Safari/537.36 SearchCraft/3.9.2 (Baidu; P1 11) '\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "<js>\njson=[];\nif(baseUrl.match(/★/)){\nlist=baseUrl.replace(/http.*?wd=\\s*/,'').split('★');\nfor(i in list){\nhref=list[i].match(/【(.*?)】/)[1];\ntext=list[i].match(/《(.*?)》/)[1];\nintro=list[i].match(/◎(.*?)◎/)[1];\nindex=list[i].match(/^(\\d+、\\d+、)/)?list[i].match(/^(\\d+、\\d+、)/)[1]:list[i].match(/^(.*?)【/)[1]\njson.push({text:text,src:href,intro:intro,index:index})\n}\n}\nJSON.stringify(json)</js>\n$.[*]",
    "ruleContent": "",
    "ruleImage": "$.src",
    "ruleLink": "$.index",
    "ruleNextPage": "",
    "rulePubDate": "$.intro",
    "ruleTitle": "$.text",
    "singleUrl": false,
    "sortUrl": "📲 导航::https://www.smdhb.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/smdy.png?ref=master】《神马电影导航吧》◎收集高清在线资源网站◎★https://anee.cc/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/ayys.png?ref=master】《安逸影视导航》◎一家集合全网影视专业导航网站◎★https://www.baicp.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/dydhw.png?ref=master】《电影导航网》◎电影网站大全◎★http://www.2cydh.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/ecydh.png?ref=master】《二次元导航》◎动漫、漫画网站大全◎★https://acgjj.cc/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/acgjj.png?ref=master】《ACG聚集》◎二次元宝藏资源聚合https://acgjj.org/◎★https://www.acgbox.link/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/acghz.png?ref=master】《ACG盒子》◎🚀VPN｜专注ACG的导航盒子◎★https://www.shangwaiwang.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/sww.png?ref=master】《上外网》◎🚀VPN｜外网网址导航◎\n\n\n📺 影视::https://www.btnull.net/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/wmxz.png?ref=master】《无名小站》◎fun,in,nu,org,to,si,com,net◎★https://www.66s6.net/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/xb6vdy.png?ref=master】《新版6V电影》◎6V电影网◎★https://www.appmovie.cc/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/appyy.png?ref=master】《APP影院》◎全网最全视频库◎★https://www.555dyy5.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/555dy.png?ref=master】《555电影》◎发布页地址：https://www.gtbyw.com/◎★https://cupfox.app/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/cbh.png?ref=master】《茶杯狐》◎中国最大的影视资源聚合搜索引擎◎★https://www.bdys10.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/bdys.png?ref=master】《哔嘀影视》◎发布页地址：https://www.bdys.me/◎★https://www.ikanbot.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/akjqr.png?ref=master】《爱看机器人》◎影视资源◎★https://www.nen9.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/qnys.png?ref=master】《青柠影视》◎最新电影在线观看◎★https://www.400blzx.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/dzm.png?ref=master】《谍战迷》◎抗日电视剧大全◎★https://ddys.pro/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/ddys.png?ref=master】《低端影视》◎超清在线视频｜https://ddys.info/◎★http://vi5kwix.gaku56.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/jjyy.png?ref=master】《竞技影院》◎免费高清电影院◎★https://www.libvio.fun/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/libvio.png?ref=master】《LIBVIO》◎海内外优质影视｜https://libvio.app/◎★https://www.wandou.la/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/wdpro.png?ref=master】《豌豆PRO》◎专业的电影搜索引擎◎★https://www.bttwo.net/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/lgbt.png?ref=master】《两个BT》◎发布地址：https://www.bttwo.vip/◎★https://www.fuju1.tv/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/fjtv.png?ref=master】《腐剧TV》◎腐剧、BL动漫、同性电影、百合◎★https://www.bl210.top/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/sgys.png?ref=master】《曙光影视》◎腐剧、耽美、泰剧暖光影视官网◎★https://www.tj8.top/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/ftjw.png?ref=master】《泰剧网》◎腐剧、耽美、泰剧暖光影视官网◎\n\n\n🎬 外影::https://wap.meijutt.tv/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/mjtt.png?ref=master】《美剧天堂》◎美剧天堂◎★https://www.mjutv.cn/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/mjw.png?ref=master】《美剧网》◎美剧网◎★http://www.tjtt.cc/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/tjtt.png?ref=master】《泰剧天堂》◎泰剧天堂◎★https://www.chaospace.xyz/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/chaospace.png?ref=master】《CHAOSPACE》◎外国影视资源站◎★https://www.hjutv.cn/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/hjw.png?ref=master】《韩剧网》◎韩剧网站◎★https://www.han-ju.cc/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/xhjw.png?ref=master】《新韩剧网》◎97韩剧网◎\n\n\n🐻‍ 动漫::http://m.yinghuavideo.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/yhdm.png?ref=master】《樱花动漫》◎专注动漫的门户网站◎★http://www.mxdm9.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/mxdm.png?ref=master】《MX动漫》◎专注在线动漫的樱花动漫备用网站◎★https://dm530.org/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/fcdm.png?ref=master】《风车动漫》◎拥有上万集高清晰画质的在线动漫◎★http://www.nicotv.club/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/nkdm.png?ref=master】《妮可动漫》◎追番补番的集中营，宅男腐女的秘密基地◎\n\n\n✔️ 解析::https://www.strerr.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/spfmxz.png?ref=master】《视频封面下载》◎油管、B站、N站、西瓜封面下载◎★https://www.m4411.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/syjx.png?ref=master】《鲨鱼解析》◎发布地址：https://www.ikan.club/◎★https://vip.yeyulingfeng.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/yylf.png?ref=master】《夜雨聆风》◎视频解析◎★https://superparse.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/superparse.png?ref=master】《超级解析》◎国内外知名视频网站解析◎",
    "sourceComment": "",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "2.9",
    "sourceUrl": "影视合集"
  },
  {
    "articleStyle": 0,
    "customOrder": 509,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "@js:\njson=[];\nif(baseUrl.match(/•/)){\nlist=baseUrl.replace(/http.*?wd=\\s*/,'').split('•');\nfor(i in list){\nhref=list[i].match(/【(.*?)】/)[1];\ntext=list[i].match(/《(.*?)》/)[1];\njson.push({text:text,href:href})\n}\n}else{\nlist=baseUrl.replace(/http.*?wd=/,'');\nhref=list.match(/【(.*?)】/)[1];\ntext=list.match(/《(.*?)》/)[1];\njson.push({text:text,href:href})\n}\njson",
    "ruleLink": "href",
    "rulePubDate": "href",
    "ruleTitle": "text",
    "singleUrl": false,
    "sortUrl": "说明:\n\n⓪ 不要相信网站广告!!!\n错信广告照成的金钱损失本人概不负责。\n\n\n① [Pro]的诞生\n全靠@关耳大佬的模板，感谢大佬\n\n② 网站来源:\n大部分来自 源仓库分享\n小部分来自 酷安评论区\n\n③ 关于启用和未启用:\n[保证能打开，不保证能看]\n启用 发布时会确认能打开网站\n未启用 没检查网站可能不能用\n\n④ 如何增加网站?:[网站格式]\n[7.0前]\n你喜欢的名字   两个\":\"   http://+网站  保存后就可以找到添加的网站了-大部分网站都适用\n\n[7.0(Pro)后]\n分类名称 两个\":\" http://www.baidu.com?wd=【网址1】《网站名称1》•【网址2】《网站名称2》\n新分类格式如上\n\n⑤ 关于导航:[互相套娃]\n顺着一个导航网站你能找到十个导航网站\n12个导航能让你找到100⁺的网站(迷路警告)\n\n\n──────已──启──用──────\n\n\n🔎 常用[10]::http://www.baidu.com?wd=【https://m.baidu.com】《🔎 | 百度一下》•【http://www.huapuzi.com】《💰 | 花铺子》•【https://huaban.com/favorite/beauty】《📸 | 花瓣网》•【https://a7a7.net/meitu】《📸 | 阿七美图》•【http://pic.sogou.com/pic/searchList.jsp?uID=&v=5&statref=index_form_1&spver=0&rcer=&keyword=%E7%BE%8E%E5%A5%B3】《📸 | 搜狗》•【https://vt.sm.cn/api/commonPage/index?type=pic&source=sc&scname=life_show_general_image&uc_param_str=dnntnwvepffrgibijbprsvdsdicheiniut#/%E7%BE%8E%E5%A5%B3//latest:1】《📸 | 夸克》•【https://m.baidu.com/sf/vsearch?pd=image_content&atn=page&fr=alawise&tn=vsearch&sa=tb&oq=%E5%85%85%E6%B0%94%E5%A8%83%E5%A8%83&word=%E7%BE%8E%E5%A5%B3&vs_req_t=1612074463274】《📸 | 百度》•【https://cn.bing.com/images/search?q=%E7%BE%8E%E5%A5%B3&form=QBIR】《📸 | 必应》•【https://www.feixuew.com】《🔞🗂️📥》•【http://m.u9h.com/top.html】《🔞🎮📥》\n\n\n📸 美图[12]::http://www.baidu.com?wd=【http://bzgif.com】《动图 | 暴走动图》•【http://www.qmsgif.com】《动图 | 秋名动图》•【https://www.ikmjx.com】《📸 | 买家秀》•【https://mmz.moe】《📸 | 萌妹子》•【https://m.appjpg.com】《📸 | 美女写真》•【https://www.f4mm.com】《📸 | F4mm》•【https://openys.cn/category/znns】《📸 | 宅男女神》•【https://www.1bie.com】《📸 | 娇妻美图》•【http://www.630h.com】《📸 | 630美图》•【https://www.ameitu.com】《📸 | 爱美图库》•【https://m.24tupian.org】《📸 | 爱死美图》•【http://www.skinnyeroticteens.com】《欧美 | 少女美图》\n\n\n🎨 漫画[12]::http://www.baidu.com?wd=【http://mm.vvvv.网址】《爱你 | 网站合集》•【https://www.mh-mh.com】《A | 看漫画》•【https://manhua.zsh8.com】《A | 芝士豪八》•【https://18comic.bet】《A⁻ | 禁漫天堂》•【https://www.ikanwzd.top】《A⁻ | 久久漫画》•【http://wzdhm.cc】《A⁻ | 韩国漫画》•【https://m.svipmh.com】《B⁺ | svip漫画》•【http://m.kmh8.net】《B | 看漫画吧》•【http://m.zwenquan.com】《B | 邪恶集》•【http://m.bancangyang.com】《B | 邪恶道》•【http://m.lifanbzk.org】《B | 里番本子库》•【http://m.che43.com】《B | 邪琉璃神社》\n\n\n📺 视频[21]::http://www.baidu.com?wd=【http://sp.vvvv.网址】《爱你 | 网站合集》•【http://h.zy40.cn/gjdq/dh/inde.html】《智云 | 网站合集》•【http://h.zy40.cn/z/sejso.php】《智云 | 智云视频》•【https://pwa.litchihouse.cn】《📺 | 鲁兔》•【https://lutu.club】《📺 | 鲁兔②》•【http://sese7218.com】《📺 | 色色碰》•【http://sese7888.com】《📺 | 色色碰②》•【https://5gtsc5.xyz】《📺 | 5G影院》•【https://www.770dy.com】《📺 | 七七影院》•【http://www.shejj.ga】《📺 | 射姐姐》•【https://www.66se14.com】《📺 | 66色》•【https://8x5098x.com/html/category/video】《📺 | 八X》•【https://yuanqi06.com/category/lunli】《📺 | 艾尔》•【https://www.myq6m1yx64y5uq88bph.xyz:59980】《📺 | 密芽》•【http://niugua04.com】《📺 | 牛瓜》•【https://qq.com.tieniu06.xyz】《📺 | 铁牛》•【https://www.kdtjq.com】《📺 | 宅男俱乐部》•【https://nckk58.com】《难加载 | 📺 | 嫩草》•【https://ny012.xyz】《难加载 | 📺 | 嫩芽》•【https://www.62362734c46affbd.com/index/home.html】《难加载 | 屏蔽移动 | 四色》•【https://www.e0fe9e2b1da0.com/index/home.html】《难加载 | 屏蔽移动 | 猫咪》\n\n\n🔞 小说[14]::http://www.baidu.com?wd=【http://www.5je.net】《发布 | 版主》•【http://www.jiuai1.top】《发布 | 久爱》•【https://xvlog.xyz】《A | 闲暇》•【https://bk301.xyz】《A | 锁狼》•【https://xrw6.xyz】《A⁻ | 夏日》•【https://crazyfiction.xyz】《A⁻ | 瘋情》•【http://www.krxs.xyz】《A⁻ | 狂人》•【http://www.xiusexx.xyz】《B⁺ | 羞涩》•【http://www.pqz999.top】《B⁺ | 茄子》•【http://www.xqxs.xyz】《B⁺ | 胸器》•【http://www.692653.com】《B⁺ | 渣男》•【http://www.zwxs.buzz】《B⁺ | 宅污》•【http://www.833179.com】《B | 色虎》•【http://www.hxsxs1.xyz】《B | H小说吧》\n\n\n🌐 导航[23]::http://www.baidu.com?wd=【https://www.moefuns.vip】《导航 | 萌翻》•【http://app.sgj168.com】《导航 | 哇我家》•【http://zjh.wtf】《导航 | 宅聚合》•【https://zhaijuhe.com/?tj】《导航 | 宅聚合②》》•【https://www.hxsb.org】《导航 | 小说吧》•【http://buliang7.com】《导航 | 不良研究所》•【https://mimi-70.com】《导航 | 秘密入口》•【http://mmtd.fun】《导航 | 秘密通道》》•【http://yy-b.ppyaya.com:8880】《导航 | YY》•【https://i7dios.cn】《导航 | 蜜桃》•【http://lemon1.info/】《导航 | 柠檬》•【http://www.du373.top】《导航 | 多多》•【http://jimeng.org】《导航 | 激萌》•【http://qrpnvcjndkfjha--012517.cdnmd0113.mdoudh.com:8880】《导航 |麻豆》•【https://uvbobo.xyz】《导航 | 波波》•【http://lwdh.in】《导航 |老王》•【https://xinbiao.info】《导航 | 信标》•【https://www.xingdh.com】《导航 | 杏导航》•【http://lang81.com】《导航 | 狼导航》•【https://www.xlldh.space】《导航 | 小萝莉》•【http://yuenuge.cc】《导航 | 阅女阁》•【http://laosj666.xyz】《导航 |老司机》•【https://www.tommaodh.me】《导航 | Tom猫》\n\n\n📱 发布页[8]::http://www.baidu.com?wd=【https://mmrk.neocities.org】《导航 | 秘密入口》•【https://buliang.neocities.org】《导航 | 不良研究所》•【http://403mh.com】《🎨 | 可乐漫画》•【https://www.404hm.com】《🎨 | SVIP漫画》•【https://github.com/8x8xkpian/8x8x-love/wiki】《📺 | 八x》•【https://lutu.fun】《📺 | 鲁兔》•【https://lutu.me】《📺 | 鲁兔②》•【https://www.ebay.com/usr/seseporn】《📺 | 色色碰》",
    "sourceGroup": "版本",
    "sourceIcon": "http://47.105.79.245/anitama.jpg",
    "sourceName": "3.0",
    "sourceUrl": "特殊整合Pro[8.0 | 100/100]"
  },
  {
    "articleStyle": 0,
    "concurrentRate": "",
    "customOrder": 510,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n    'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Pixel 3 XL Build/RQ3A.211001.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/102.0.4988.0 Mobile Safari/537.36 SearchCraft/3.9.2 (Baidu; P1 11) '\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "<js>\njson=[];\nif(baseUrl.match(/ /)){\nlist=baseUrl.replace(/http.*?wd=\\s*/,'').split(' ');\nfor(i in list){\nhref=list[i].match(/【(.*?)】/)[1];\ntext=list[i].match(/《(.*?)》/)[1];\nintro=list[i].match(/◎(.*?)◎/)[1];\nindex=list[i].match(/^(\\d+、\\d+、)/)?list[i].match(/^(\\d+、\\d+、)/)[1]:list[i].match(/^(.*?)【/)[1]\njson.push({text:text,src:href,intro:intro,index:index})\n}\n}\nJSON.stringify(json)</js>\n$.[*]",
    "ruleContent": "",
    "ruleDescription": "",
    "ruleImage": "$.src",
    "ruleLink": "$.index",
    "ruleNextPage": "",
    "rulePubDate": "$.intro",
    "ruleTitle": "$.text",
    "singleUrl": false,
    "sortUrl": "🎥-影视▪️影院::https://www.o8tv.com/【https://i.postimg.cc/Gt9kN6VT/de6a398e2e6f25cd8fea8814651e2403.png】《555影院®》◎在线影院◎ https://app.movie/【https://i.postimg.cc/nzjWQ5SG/1657028424447.png】《App影院®》◎在线影院◎ https://fullxcinema-com.translate.goog/category/celebrity-porn-videos/?_x_tr_sl=auto&_x_tr_tl=zh-CN&_x_tr_hl=zh-CN【https://i.postimg.cc/P5L9Z6Hw/141e2972743b1e14db0c2fe409fd3fda.png】《全电影网》◎电影网站◎ https://www.novipnoad.com/【https://i.postimg.cc/Y2y7w6rm/1657177866100.png】《Novipnoad®》◎在线影院◎ https://www.ikanbot.com/【https://i.postimg.cc/L5FKJwJY/1657464485475.png】《爱机器人®》◎影视直播◎ http://m.360live.cc/【https://i.postimg.cc/6q7P40T7/1657171372253.png】《爱看卫视》◎卫视在线直播◎ http://www.aiqingtv.com:8/【https://i.postimg.cc/Gh5M40BM/1660216319238.png】《爱情.TV》◎在线影院◎ https://xiaoyakankan.com/cat/15.html【https://i.postimg.cc/Mp52b9rZ/1658047723416.png】《小鸭看看®》◎在线影院◎ https://www.pkmp4.com/【https://i.postimg.cc/W4T8QvbP/1657585183153.png】《片库影院®》◎在线影院◎ https://ddrk.me/【https://i.postimg.cc/Zq0kncDk/1658839233937.png】《低端影院®》◎在线影院◎ http://www.renren.pro/【https://i.postimg.cc/wMytDpgh/1657021317616.png】《人人影视®》◎电影网站◎ https://www.pbpb.tv/【https://i.postimg.cc/8kxfghJX/1657179241087.png】《片吧影院®》◎在线影院◎ http://hense66.sexurl.xyz/【https://i.postimg.cc/8CbGXPcg/1678704603667.png】《很涩视频》◎在线视频◎ https://www.libvio.me/【https://i.postimg.cc/2jZWSPmM/5b55c5e231aca321b58fe16d59c3ee75.png】《Libvio.me》◎在线影院◎ https://www.66.ca/forum.php?fid=56&mod=forumdisplay【https://i.postimg.cc/90YS3Vq5/1657217561547.png】《华人社区》◎社区阅读网站◎\n☸-文娱▪️阅读::https://mp3-banana.pro/【https://i.postimg.cc/d3HR8qqW/1636542691088.png】《俄语音乐》◎俄站步非烟◎ https://siyufm.net/lists/?page=2&author=12【https://i.postimg.cc/zXHKN1nK/1637811407315.png】《私语电台》◎私密电台◎ https://asmrs.live/category/%E6%AD%A5%E9%9D%9E%E7%83%9F%E7%AC%AC%E4%B8%80%E5%AD%A3【https://i.postimg.cc/15yTD2t8/1643175843924.png】《Asmrs~🎧》◎在线音频◎ https://es.iporntv.net/search/%E4%B8%AD+%E6%96%87+%E9%9F%B3%E5%A3%B0+asmr【https://i.postimg.cc/kGSc5QGT/1657418160867.png】《中文音声》◎资源网站◎ https://m.xingdiantai.com/freeradio/【https://i.postimg.cc/tJWDWsS9/1636543129910.png】《杏吧电台》◎免费电台网站◎ http://hja27.com/【https://i.postimg.cc/KjNH5kQJ/8e5e7fc946028dcf4f32a2173ae4c319.png】《海角社区》◎登录在线社区◎ https://heiliao6.pro/【https://i.postimg.cc/MGJHYjQK/df8abf301d246c79be2416cb2d382e3c.png】《黑料链接®》◎链接网站◎ https://www.g718.sx/【https://i.postimg.cc/nhRTwV51/60caf55a7c86f32a0ffd3252d718353e.png】《718车友会®》◎在线论坛◎ https://www.51cg1.com/【https://i.postimg.cc/63K4SCLn/1657033842033.png】《51吃瓜网》◎在线论坛◎ https://jav.gallery/【https://i.postimg.cc/fL1fHJWz/1655687656501.png】《動宝在线》◎在线视频网站◎ https://qq.com.tiege03.xyz/?uid=128879【https://i.postimg.cc/CLH3C2fH/1639307031234.png】《铁哥TV》◎在线网站◎ https://www.pornfind.org/【https://i.postimg.cc/1RL5Vrbx/1643170566233.png】《搜索引擎》◎导航网站◎ https://qq.com.lsck01.xyz/【https://i.postimg.cc/15pk15cJ/22f1c92cf8ecb6af575fb4e502a91ebd.png】《绿色仓库》◎视频导航网站◎ https://qq.com.tieniux15.top/【https://i.postimg.cc/m2TDkYx5/1655817959914.png】《铁牛资源》◎导航链接◎ https://qq.com.beiwotv.xyz/【https://i.postimg.cc/G2dbSRjm/1655822701904.png】《被窝TV》◎导航网站◎\n🔲-图片▪️套图::https://heaven.porn/【https://i.postimg.cc/gj5D3V3t/1637729257404.png】《Heaven》◎全球套图精选◎ https://www.pornpics.com/【https://i.postimg.cc/V6HtGBmL/ac28d790f21bb18524b5bab2496e361f.png】《Pornpics》◎中外图库[高清大图]◎ https://www.nudexxx.pics/categories/babe/【https://i.postimg.cc/131j1j0v/1638332202023.png】《Nudexxx》◎在线图片◎ https://www.xxxftvgirls.com/【https://i.postimg.cc/QM3pzCY7/1655781876454.png】《Xxxftvgirls》◎全球套图精选◎ https://www.gravurehunter.com/【https://i.postimg.cc/mgBQv38B/c144ea102b481a06e2cfbff4eecbb1b9.png】《Gravure》◎在线图片◎ https://sexynude.pics/【https://i.postimg.cc/dV7qX4Pg/1655823076713.png】《Sexynude》◎在线图片◎ https://nakedwomen.pics/【https://i.postimg.cc/28FX9mTf/1657271779518.png】《Nakedwomen》◎在线图片◎ https://thotsbay.tv/?fulione【https://i.postimg.cc/CLnhg9hR/1678630353262.png】《Thotsbay》◎在线图片◎ https://latestones.com/models【https://i.postimg.cc/rFFTYphv/10c7bcd9cd616a05b07a8e5155ff568e.png】《Latestones》◎高清写真◎ https://www.eroticbeauties.net/【https://i.postimg.cc/15qw8YBz/e70b08733fceb554437154b2ea2b5a53.png】《eroticbeauties》◎在线图片◎ https://www.metarthunter.com/most-viewed/【https://i.postimg.cc/Gp4T8xSs/cae05c94e7c8ffae80289e7bc24b3f34.png】《Metarthunter》◎花花公子图片站◎ https://www.hqseek.com/【https://i.postimg.cc/1Xd6bLng/1636528074158.png】《Hqseek》◎在线图片◎ https://www.freexcafe.com/?ref=porndude【https://i.postimg.cc/kX35Jpx4/1655983982372.png】《Freexcafe.com》◎在线图片◎ https://www.freebigtitpornpics.com/【https://i.postimg.cc/7PTBbdtR/1656073522948.png】《Bigtitpornpics》◎国际图片◎ https://www.jpbeauties.com/【https://i.postimg.cc/BZDtwf7C/1637918486763.png】《JPbeauties》◎日本图片◎ https://www.eastbabes.com/【https://i.postimg.cc/bvJLc0qZ/1656221729360.png】《Eastbabes》◎在线图片◎ https://www.erosberry.com/?ref=porndude【https://i.postimg.cc/4NXqnm2v/b36328b476f62c28399930a8a7b98030.png】《Erosberry.com》◎在线图片◎\n🔳-传媒▪️日系::https://www.helloavgirls.com/?qingse.one【https://i.postimg.cc/nhRvftvn/1637637245085.png】《Hello~avgirls》◎日系av视频网站◎ https://www.tw0913.com/index/index_1.html【https://i.postimg.cc/jdhFZbMb/1655657370807.png】《AV中文》◎短视频网站◎ https://netflav.com/?qingse.one【https://i.postimg.cc/B68nz9r5/9b463e356784d62007bbfa9ab669d88e.png】《Netflav》◎日系资源~浏览器打开◎ https://www.fuq.com/zh/【https://i.postimg.cc/pL082scx/1656697944724.png】《Fuq.com》◎在线视频◎ https://www.tubev.sex/【https://i.postimg.cc/3Jc0Mxv8/1655872958452.png】《Tubev.sex》◎日系视频◎ https://pigav.com/【https://i.postimg.cc/5ytmqkJ5/1636714890664.png】《Pigav.com》◎视频网站◎ https://www.atube.xxx/?hl=zh【https://i.postimg.cc/YCGJ5q3P/1636849542518.png】《Dtube.xxx》◎在线视频◎ https://www.pfree.one/【https://i.postimg.cc/1tcn0fX7/a139d7adf597e53efc35411870cb9e62.png】《Pfree.one》◎在线视频◎ https://foxlibrary.xyz/【https://i.postimg.cc/qqJqngpX/a1c375a47f312841f8fa6eec14ed61cc.png】《FoxLibrary》◎在线视频◎ https://www.rtmm6.com/video/1/【https://i.postimg.cc/rw4G8443/1657012825802.png】《人体美媚》◎综合网站◎ https://hhhjav.com/【https://i.postimg.cc/Qtf8mGyQ/1656046620044.png】《三H视频》◎综合视频◎ https://fyptt.to/【https://i.postimg.cc/8c9D4yHY/1657563183687.png】《海外抖音》◎海外抖音网站◎ https://eden01.com/【https://i.postimg.cc/bJty35ns/1656074689383.png】《伊甸园网》◎综合视频◎ https://www.fengyuetongtian.com/【https://i.postimg.cc/7ZnG4jsL/1655829430458.png】《风月同天》◎国产视频◎ https://www.bus13.com/【https://i.postimg.cc/bwWMLL57/1655688619355.png】《艾薇巴士》◎视频影院◎ https://avhd1.com/index.html【https://i.postimg.cc/R04Ps1FK/1655817933907.png】《AV视频》◎在线视频◎\n🈂-动漫▪️漫画::https://www-hentaicloud-com.translate.goog/videos?o=mr&_x_tr_sl=auto&_x_tr_tl=zh-CN&_x_tr_hl=zh-CN【https://i.postimg.cc/cLxmt8qt/1657264255748.png】《Hentaicloud》◎在线漫画◎ https://hentaidude.com/【https://i.postimg.cc/VLRc1YRt/1657024067326.png】《hentaidude》◎在线动漫◎ https://www.animehentaivideos.xxx/【https://i.postimg.cc/hj2wwX1T/1657216924243.png】《Hentai~VI》◎日系动漫◎ https://animeidhentai.com/【https://i.postimg.cc/G2Sfn4Ww/1656838030280.png】《Animeid》◎日系动漫◎ https://porcore.com/【https://i.postimg.cc/1zBgGkj0/1657010517944.png】《Porcore》◎在线漫画◎ http://www.177picyy.com/html/category/cg/cg-cn/【https://i.postimg.cc/qgfhYGQt/1656838187853.png】《177漫画》◎在线漫画◎ https://porn3dx.com/【https://i.postimg.cc/sfYtC7st/1657263526600.png】《Porn3dx》◎在线漫画◎ https://www.ho5ho.com/?ref=porndude【https://i.postimg.cc/Kzcw2rKV/1658321960709.png】《全彩H漫》◎在线漫画◎ https://www-hentairules-net.translate.goog/category/incest/?_x_tr_sl=auto&_x_tr_tl=zh-CN&_x_tr_hl=zh-CN【https://i.postimg.cc/PJ34ypKS/1656921716625.png】《hentairules》◎在线漫画◎ https://doujins.com/【https://i.postimg.cc/QdxnMzSN/a6222dd9366f54f87b8f7870bfe43089.png】《Doujins》◎在线动漫◎ https://asmhentai.com/【https://i.postimg.cc/QMGcdFZv/1656904673161.png】《Asmhentai》◎在线漫画◎ https://comics.8muses.com/comics【https://i.postimg.cc/cHCkjmMF/1656747410145.png】《8muses.com》◎在线动漫◎ https://www.cartoonpornvideos.com/【https://i.postimg.cc/PxBHqhpx/1656917164314.png】《Cartoon~P》◎在线动漫◎ https://h-ciyuan.com/【https://i.postimg.cc/R0djvfpk/1657800089071.png】《H~ciyuan》◎在线动漫◎ https://hanime1.me/【https://i.postimg.cc/zvTCGjfx/3761b8bde0f4a3f5d6fc633fd54f0fc6.png】《hanime1.me》◎漫画网站◎\n🎥-VR▪️博客::https://sharesome.com/news/【https://i.postimg.cc/gj4HKk9B/1636708458829.png】《Sharesone™》◎时尚博客直播◎ https://nudebabes.tube/【https://i.postimg.cc/FRZThKzw/1637547515349.png】《Nudebabes》◎在线影院◎ https://m.livejasmin.com/en/list/girl/www.cavhot.com【https://i.postimg.cc/3RDq1WJm/1638681569437.png】《Livejasmin》◎欧美在线直播◎ https://m-chaturbate-com.translate.goog/?_x_tr_sl=auto&_x_tr_tl=zh-CN&_x_tr_hl=zh-CN【https://i.postimg.cc/Mp58kP1S/1656736242263.png】《Chaturbate》◎欧美直播網站◎ https://xn--zp3-xxxsspcom-yp8ve33bkpevz1kpxq.xn--yetv14dbin23n.com/?fulione【https://i.postimg.cc/mrzDLSN0/1657067668701.png】《xxxsspcom™》◎中文抖淫◎ https://viralporn.com/【https://i.postimg.cc/zfGYVCJx/1657014358637.png】《Viralporn》◎欧美直播網站◎ https://51papaya.com/【https://i.postimg.cc/sDLntHFK/1678275099518.png】《51papaya》◎在线短视频◎ https://vrporn.com/?a=634574【https://i.postimg.cc/JzKcYQdk/1655469952522.png】《Vrporn.com[VR]》◎VR视频站◎ https://virtualrealporn.com/?nats=OTk5MTAwMDMuNS44LjEwLjAuMC4wLjAuMA【https://i.postimg.cc/FFJ2fFfW/1655542912385.png】《virualrealporn[VR]》◎VR视频站◎ https://m.instantfap.com/?ref=porndude【https://i.postimg.cc/NM7v3FWG/1636714420842.png】《Instantfap》◎欧美在线视频直播站[优质画面]◎ https://www.sex.com/【https://i.postimg.cc/N0zRGwXh/1655566034717.png】《Sex.com》◎欧美在线视频直播站[优质画面]◎ https://www.xfree.com/?popularFeed=150672【https://i.postimg.cc/Kj0rSZ00/1b675b5fcb22bb8c84bf3682ebad5759.png】《Xfree.com》◎博客直播[优质画面]◎ https://fikfap.com/?ref=porndude【https://i.postimg.cc/DyVy8K9r/1655654233967.png】《Fikfap.com》◎博客直播[优质画面]◎ https://xxxtik.com/?ref=porndude【https://i.postimg.cc/mkxbZNW4/a2b0d5776f5161f168d8394f3bd37074.png】《Xxxtik.com》◎博客直播[优质画面]◎ https://tik.porn/video/216500【https://i.postimg.cc/9XBRnLsy/1655648357308.png】《Tik.porn》◎博客直播[优质画面]◎\n🔞-在线【宽屏】::https://cn.pornhub.com/view_video.php?viewkey=ph5f5367cd02a9a【https://i.postimg.cc/PfZcf8W1/1637937252627.png】《Pornhub》◎🇨🇦在线视频◎ https://www.xvideos.com/【https://i.postimg.cc/L6yQskbQ/1637936393141.png】《Xvideos》◎🇨🇿在线视频◎ https://www.bookofp.com/zh/celebrities/【https://i.postimg.cc/xd72QNs4/1659110706030.png】《Bookofp》◎🇱🇷在线视频◎ https://beeg.com/?ref=porndude【https://i.postimg.cc/T17T3Lm8/1637937050924.png】《Beeg.com》◎🇬🇳在线视频◎ https://m.shameless.com/【https://i.postimg.cc/8CWvGJ1v/1655955946009.png】《shameless》◎🇮🇸在线视频◎ https://txxx.com/【https://i.postimg.cc/CKS3NdBC/1656841152906.png】《Txxx.com》◎🇨🇿在线视频◎ https://m.tnaflix.com/【https://i.postimg.cc/Jzw65BYB/1657106388720.png】《Tnaflix.com》◎🇭🇺在线视频◎ https://fuqer.mobi/【https://i.postimg.cc/FzRB7zqf/2096f0a90436c081102ce000cb1b82b9.png】《Fuqer.mobi》◎🇩🇪在线视频◎ https://teenxmovies.net/【https://i.postimg.cc/MGfGBqPJ/1655986800440.png】《Teenxmovies》◎🇩🇪在线视频◎ https://www.xnxx.com/【https://i.postimg.cc/3NT7QXZF/1638079383739.png】《Xnxx.com》◎🇺🇸在线视频◎ https://www.joysporn.com/?ref=porndude【https://i.postimg.cc/ydy26fDV/1656468812234.png】《Joysporn》◎🇭🇺在线视频◎ https://www.youporn.com/【https://i.postimg.cc/g21CS5TH/1658916855443.png】《Youporn》◎🇨🇴在线视频◎ https://www.gotporn.com/【https://i.postimg.cc/N0hGHFZf/1658840245284.png】《Gotporn.com》◎🇭🇺在线视频◎ https://4kporn.xxx/【https://i.postimg.cc/ht2r3jht/1638700576004.png】《4Kporn.xxx》◎🇳🇴在线视频◎ https://porndoe.com/?utm_campaign=theporndude&utm_medium=trafficbuy&utm_source=theporndude【https://i.postimg.cc/hG3NT5Vz/1637931210565.png】《Porndoe》◎🇫🇷在线视频◎\n🔞-在线【欧美】::http://www.incestflix.com/?ref=porndude【https://i.postimg.cc/G36dHWwM/1638705175642.png】《Incestflix》◎🇮🇩在线视频◎ https://crazyshit.com/category/random-nudity/【https://i.postimg.cc/dtjdr2pM/357020e158482026a20a7e713f6b6279.png】《Crayshit.com》◎🇦🇽在线视频◎ https://motherless.com【https://i.postimg.cc/LXZynXtV/1656205674304.png】《Motherless》◎🇻🇪在线视频◎ https://zh.xhamster.com/【https://i.postimg.cc/VLd9cpxN/1638625257182.png】《Xhameter》◎🇹🇳在线视频◎ https://www.ixxx.com【https://i.postimg.cc/7PjrhdTS/1656846388876.png】《Ixxx.com》◎🇹🇳在线视频◎ https://fuqqt.com/videos/babe【https://i.postimg.cc/TwQzJhLv/1656205530357.png】《Fuqqt.com》◎🇭🇺在线视频◎ https://shooshtime.com/【https://i.postimg.cc/DZzSwpJk/1656294092715.png】《Shooshtime》◎🇫🇮在线视频◎ https://fapster.xxx/categories/【https://i.postimg.cc/zf5fxnkx/1656330613273.png】《Fapster.xxx》◎🇮🇩在线视频◎ https://pornone.com/【https://i.postimg.cc/RZj3rKJD/1656981369071.png】《Pornone.com》◎🇮🇩在线视频◎ https://www.porntube.com/?cid=2930【https://i.postimg.cc/442qfqDm/1638143733789.png】《Porntube》◎🇲🇸在线视频◎ https://www.eporner.com/【https://i.postimg.cc/FscqrGTv/1656079279240.png】《Epornet》◎🇰🇿在线视频◎ https://www.redtube.com/【https://i.postimg.cc/Wp8NN7yM/1656336459126.png】《Redtube》◎🇬🇦在线视频◎ https://www.pornhd.com/【https://i.postimg.cc/HLWTf1T9/47dd395f818d744f5f6b897508d3309f.png】《Pornhd》◎🇮🇩在线视频◎ https://www.18porn.sex/【https://i.postimg.cc/v83FXZLS/1656123183464.png】《18porn.sex》◎🇾🇪在线视频◎ https://pornkai.com/【https://i.postimg.cc/C5gR1VJC/1656347595775.png】《Pornkai》◎🇨🇦在线视频◎\n🔞-在线【备选】::https://pornontube.com/zh-cn/【https://i.postimg.cc/SRZHh6nJ/1657441598978.png】《Pornontube》◎在线电影◎ https://www.fellatiojapan.com/en/?ref=1860c830【https://i.postimg.cc/0Nvm3sM8/1657504985437.png】《Fellatiojapan》◎在线视频网站◎ https://pmatehunter.com/【https://i.postimg.cc/251kXxS9/1657442432339.png】《Pmate~H》◎国际图片◎ https://www.tubegalore.com/zh/【https://i.postimg.cc/8cyY5pTK/1665305809050.png】《Tubegalore》◎在线视频◎ https://m.porn555.com/【https://i.postimg.cc/mrHj6MxN/1657449171627.png】《Porn555.com》◎视频网站◎ https://www.qpornosite.com/【https://i.postimg.cc/zXXc4mKS/647a65f79ad84414ec8ef7037833ee62.png】《qpornosite》◎视频网站◎ https://www.fuqpremium.com/zh/【https://i.postimg.cc/3RYktqSK/c424aec60f743d6db1474dade05b3173.png】《fuqpremium》◎在线视频◎ https://www.lobstertube.com/zh/【https://i.postimg.cc/CMcXFYLT/0b02fc4ba24b38f90f62c54142be537c.png】《LobsterTube》◎数百万激情色情电影◎ https://familyporn.tv/【https://i.postimg.cc/hjjpKYNg/1657448947985.png】《家庭porn》◎在线视频网站◎ https://www.tube8.com/【https://i.postimg.cc/28C8L5vd/c1c46f7c390245ed8325cf5cbcdfa54d.png】《Tybe.8.com》◎在线直播网站◎ https://www.handjobjapan.com/en/?ref=a2f6354a【https://i.postimg.cc/9XBBBLTK/1657198533076.png】《Handjobjaan》◎日系手活◎ https://jav.javfinder.tk/【https://i.postimg.cc/tJ4x5bFj/1665130749332.png】《Javfinder.tk》◎在线视频◎ https://www.porzo.com/zh/【https://i.postimg.cc/htbRGgLV/1657444600756.png】《Porzo.com》◎在线视频◎ https://aboutporno.net/【https://i.postimg.cc/sx2PrBwC/1657560491814.png】《aboutporno.net》◎视频网站◎ https://adultdeepfakes.com/【https://i.postimg.cc/rmsLp1bX/1657442859439.png】《Adultdeepfakes》◎影院在线◎\n📖-书单▪️榜单®::https://vt.sm.cn/api/novelStarReco/index【https://i.postimg.cc/3Ng0mjYb/1642215764921.png】《星云推书》◎书荒搜书神器◎ https://m.qidian.com/rank/【https://i.postimg.cc/Bb6H9P0h/1643185593580.png】《起点榜单》◎起点中文网榜单◎ https://quark.sm.cn/api/rest?method=Novelnew.home&format=html&schema=v2&gender=male&cate=%E5%85%A8%E9%83%A8&rank=rank_hot&pv=2420440【https://i.postimg.cc/XqXmn23H/1656398173543.png】《夸克榜单》◎夸克浏览器小说榜单◎ https://m.baidu.com/sf?openapi=1&dspName=iphone&dsp=iphone&from_sf=1&pd=bookstore&resource_id=5077&type=2&card_id=5143&word=%E5%85%A8%E9%83%A8%E5%88%86%E7%B1%BB&title=%E6%9B%B4%E5%A4%9A%E6%8E%A8%E8%8D%90&tag1=%E5%85%A8%E9%83%A8%E5%88%86%E7%B1%BB&lid=11549307334103749569&referlid=11549307334103749569&ms=1&frsrcid=5143&frorder=4【https://i.postimg.cc/YS5CqKk1/1643192297572.png】《百度榜单》◎百度浏览器小说榜单◎ https://www.yousuu.com【https://i.postimg.cc/ZqV9LKk4/d6460ce69df5934d47ec2e184264d447.png】《优书榜单》◎优书网书单◎ https://data.newrank.cn/m/s.html?s=Py8yOTE5KDE4【https://i.postimg.cc/nLWpBQzP/1656640745508.png】《小说拾遗》◎小说拾遗公众号-号内搜索◎ https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&album_id=1319671603470581762&__biz=MzI2MDg2NjAwMg==#wechat_redirect【https://i.postimg.cc/Wp7cCtpP/9afbe88df402cbaacd6a1f34bb95451a.png】《精选书单》◎主推优质完结和连载100万字以上小说◎ https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&album_id=1319666229510193155&__biz=MzI2MDg2NjAwMg==#wechat_redirect【https://i.postimg.cc/dtW1vnvq/1656158438840.png】《潜力新书》◎主推大神新书和20～100万字的优质新书◎ http://mp.weixin.qq.com/mp/homepage?__biz=MzI2MDg2NjAwMg==&hid=11&sn=c55d27329c109430838bc5b5f5b615b7&scene=18#wechat_redirect【https://i.postimg.cc/Nf2g2B79/d7844cc4a188295fb56ff7ee13e7c518.png】《高分必看》◎高分完本合集◎ https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&album_id=1319668267623170050&__biz=MzI2MDg2NjAwMg==#wechat_redirect【https://i.postimg.cc/YCYjTCQ1/1643194013372.png】《近期完结》◎主推近一段时间内优质的完结小说◎ https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&album_id=1319675692849872897&__biz=MzI2MDg2NjAwMg==#wechat_redirect【https://i.postimg.cc/MHJwdrSX/f3406e1fcc20a92dcaf944c71b0d67ab.png】《后宫精选》◎后宫精选合集◎ https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzI5NTA4NjgwNw==&action=getalbum&album_id=1319454340050157569&scene=126&devicetype=android-28&version=28000f3d&lang=zh_CN&nettype=WIFI&ascene=3&pass_ticket=B8GunWN7RjA2Q%2FaVYxT%2BSITrnCodRKKdEfgFLaYKNzv56Vgj9IUBy%2B6yzAlQVE4M&wx_header=1【https://i.postimg.cc/tTF4MXws/1643177963800.png】《网文书单》◎每期三本-新书速递、养肥佳作、完本好书◎ https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzI5NTA4NjgwNw==&action=getalbum&album_id=1319471313224040448&scene=126&devicetype=android-28&version=28000f3d&lang=zh_CN&nettype=WIFI&ascene=3&pass_ticket=B8GunWN7RjA2Q%2FaVYxT%2BSITrnCodRKKdEfgFLaYKNzv56Vgj9IUBy%2B6yzAlQVE4M&wx_header=1【https://i.postimg.cc/htNQd8pH/1656748079978.png】《澎湃精选》◎超过50万字，连载或完本的优秀作品◎ https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzI5NTA4NjgwNw==&action=getalbum&album_id=1526356920989712387&scene=126&devicetype=android-28&version=28000f3d&lang=zh_CN&nettype=WIFI&ascene=3&pass_ticket=B8GunWN7RjA2Q%2FaVYxT%2BSITrnCodRKKdEfgFLaYKNzv56Vgj9IUBy%2B6yzAlQVE4M&wx_header=1【https://i.postimg.cc/FRH068g6/1656311375852.png】《年度盘点》◎年度盘点各分类中诞生的新书、完本书◎ https://mp.weixin.qq.com/mp/homepage?__biz=MzI5NTA4NjgwNw==&hid=1&sn=0fcecdc85b8c23e596880f8c895b901d&scene=18&devicetype=android-28&version=28000f3d&lang=zh_CN&nettype=WIFI&ascene=59&session_us=gh_2aa0f3c6dd8f&pass_ticket=B8GunWN7RjA2Q%2FaVYxT%2BSITrnCodRKKdEfgFLaYKNzv56Vgj9IUBy%2B6yzAlQVE4M&wx_header=1【https://i.postimg.cc/TP7Md7D4/1657562436540.png】《赤戟资源》◎最新热门分类◎",
    "sourceComment": "",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "3.1",
    "sourceUrl": "Online <2.32>"
  },
  {
    "articleStyle": 1,
    "customOrder": 512,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "header": "{\"User-Agent\": \"Mozilla/5.0 (Linux; Android 12; 22041211AC Build/SP1A.210812.016) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.104 Mobile Safari/537.36\"}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".list@li",
    "ruleContent": "<js>\nvar v = result.match(/source\\s*=\\s*[\"']([^\"']*?\\.(m3u8|mp4)\\b[^\"']*)[\"']/i);\nvar p = v ? v[1].replace(/\\\\/g,'') : '';\nvar t = '@get:{t}';\nvar d = java.getString('[property=\"video:tag\"]@content');\nvar sign1 = java.base64Decode('44CQ5aSc5piO56m644CR55qE5pKt5pS+5Zmo');\nvar sign2 = java.base64Decode('5LuF5L6b5Liq5Lq65a2m5Lmg5L2/55So77yM5Lil56aB5YiG5Lqr44CB5YCS5Y2W5Y+K5Lu75L2V6L+d5rOV6KGM5Li677yB');\nvar sign3 = java.base64Decode('5L2/55So6ICF6Ieq6KGM5om/5ouF6aOO6Zmp5LiO6LSj5Lu7');\n`<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>${t}</title>\n<style>\n*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:-apple-system,sans-serif;background:#f0f9ff;padding:10px}\n.v-box{max-width:800px;margin:0 auto;background:white;border-radius:12px;box-shadow:0 5px 15px rgba(0,0,0,0.1);overflow:hidden}\n.header{padding:12px;border-bottom:1px solid #eee;display:flex;flex-wrap:wrap;justify-content:space-between}\n.sign{background:#e9f7ff;padding:6px;border-radius:6px;margin-bottom:8px;font-size:14px;color:#1a73e8;width:100%}\n.title{font-size:18px;font-weight:600;margin-bottom:8px;width:100%}\n.tags{color:#5f6368;font-size:14px;flex:1;min-width:60%;word-break:break-all}\n.time{color:#5f6368;font-size:14px;text-align:right;flex-basis:35%}\n.v-wrap{position:relative;padding-top:56.25%;background:#000}\n.video{position:absolute;top:0;left:0;width:100%;height:100%}\n.footer{padding:8px;text-align:center;color:#5f6368;font-size:13px}\n.info-box{padding:15px;font-size:14px;line-height:1.6}\n.info-box p{margin:8px 0}\n.hint{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:rgba(0,0,0,0.7);color:#fff;padding:12px 20px;border-radius:20px;font-size:1.1rem;z-index:10;display:none}\n.controls{position:absolute;top:0;left:0;width:100%;height:4px;background:rgba(255,255,255,0.3);z-index:5;transition:opacity 0.3s}\n.progress{height:100%;background:#4a9eff;width:0}\n</style>\n</head>\n<body>\n<div class=\"v-box\">\n<div class=\"header\">\n<div class=\"sign\" style=\"text-align:center;padding:5px 0\">\n<div>${sign1}</div>\n<div style=\"text-align:left; padding-top:4px\">\n${sign2}<br>${sign3}</div>\n</div>\n<div class=\"title\">${t}</div>\n<div class=\"tags\">${d}</div>\n<div class=\"time\" id=\"timeDisplay\">00:00/00:00</div></div>\n<div class=\"v-wrap\">\n<div class=\"controls\"><div class=\"progress\" id=\"progressBar\"></div></div>\n<div class=\"hint\" id=\"hint\">快进中 &gt;&gt;</div>\n<video class=\"video\" id=\"v\" controls playsinline>\n<source src=\"${p}\" type=\"video/mp4\">您的浏览器不支持HTML5视频\n</video>\n</div>\n<div class=\"footer\">滑动调整进度 | 长按2倍速</div>\n</div>\n<script>\nvar v = document.getElementById('v');\nvar tDisplay = document.getElementById('timeDisplay');\nvar pBar = document.getElementById('progressBar');\nvar hint = document.getElementById('hint');\nvar startX = 0, startTime = 0;\nvar longPressTimer;\nvar sensitivity = 0.1;\nvar longPressTime = 500;\nvar hintDuration = 2000;\nfunction updateTime() {\nif (!v.duration) return;\nvar m1 = Math.floor(v.currentTime / 60);\nvar s1 = Math.floor(v.currentTime % 60);\nvar m2 = Math.floor(v.duration / 60);\nvar s2 = Math.floor(v.duration % 60);\ntDisplay.textContent = m1 + ':' + (s1 < 10 ? '0' : '') + s1 + '/' + m2 + ':' + (s2 < 10 ? '0' : '') + s2;\npBar.style.width = (v.currentTime / v.duration) * 100 + '%';}\nv.addEventListener('timeupdate', updateTime);\nv.addEventListener('loadedmetadata', updateTime);\nv.addEventListener('touchstart', function(e) {\nstartX = e.touches[0].clientX;\nstartTime = Date.now();\nif (longPressTimer) clearTimeout(longPressTimer);\nhint.style.display = 'none';\nlongPressTimer = setTimeout(function() {\nv.playbackRate = 2.0;\nhint.style.display = 'block';\nsetTimeout(function() { hint.style.display = 'none'; }, hintDuration);}, longPressTime);});\nv.addEventListener('touchmove', function(e) {\ne.preventDefault();\nclearTimeout(longPressTimer);\nvar diffX = e.touches[0].clientX - startX;\nvar change = diffX * sensitivity * v.duration / 100;\nv.currentTime = Math.max(0, Math.min(v.currentTime + change, v.duration));\nstartX = e.touches[0].clientX;updateTime();});\nv.addEventListener('touchend', function() {\nv.playbackRate = 1.0;\nclearTimeout(longPressTimer);});\n</script>\n</body>\n</html>`\n</js>",
    "ruleImage": "img@data-original",
    "ruleLink": "a.0@href",
    "ruleNextPage": "page",
    "rulePubDate": "{{@@.vodlist_img@html##(\\d+)-(\\d+)-(\\d+)##$0###}} | {{@@.vodlist_img@span.0@text}}",
    "ruleTitle": ".title@text@put:{\"t\":\"@@.title@text\"}",
    "singleUrl": false,
    "sortUrl": "搜索 🔍::/s/page/{{page}}/wd/{{source.getVariable()}}/\n最新::/label/hot/by/time/page/{{page}}/\n日榜::/label/hot/by/hits_day/page/{{page}}/\n周榜::/label/hot/by/hits_week/page/{{page}}/\n月榜::/label/hot/by/hits_month/page/{{page}}/\n国产 🎞::/t/1-{{page}}/\n自拍::/t/5-{{page}}/\n主播大秀::/t/6-{{page}}/\n主播诱惑::/t/36-{{page}}/\n探花::/t/7-{{page}}/\n偷拍::/t/8-{{page}}/\n乱伦::/t/8-{{page}}/\n吃瓜::/t/10-{{page}}/\n抖阴::/t/11-{{page}}/\nAV::/t/12-{{page}}/\n福利姬::/t/20-{{page}}/\n侵犯::/t/37-{{page}}/\n日韩 🎞::/t/2-{{page}}/\n日韩自拍::/t/13-{{page}}/\n日本无码::/t/14-{{page}}/\n字幕::/t/15-{{page}}/\n解说::/t/17-{{page}}/\n换脸::/t/18-{{page}}/\n欧美 🎞::/t/3-{{page}}/\n自拍::/t/21-{{page}}/\n字幕::/t/22-{{page}}/\n伦理 🎞::/t/4-{{page}}/\n三级::/t/29-{{page}}/\n日韩::/t/30-{{page}}/\n动漫 🎞::/t/16-{{page}}/\n剧集::/t/26-{{page}}/\n3D::/t/27-{{page}}/\n次元::/t/28-{{page}}/\n另类 🎞::/t/39-{{page}}/\n同性恋::/t/38-{{page}}/\n变性::/t/40-{{page}}/\n重口味::/t/23-{{page}}/",
    "sourceComment": "<声明>\n//2025.8.10 作者：夜明空\n//源社区：https://taoba.cf\n//仅供个人学习使用，严禁分享、倒卖及任何违法行为！使用者自行承担风险与责任\n</声明>\n\n//网址更新频繁，有需要请到发布页自行更新\n//发布页：\nhttps://18j.18hu.link/mdce\n18j.vip\n18zy.vip\n51zy.vip",
    "sourceGroup": "版本",
    "sourceIcon": "https://18oc.life/18link/18j/images/favicon.ico",
    "sourceName": "3.2",
    "sourceUrl": "https://18oj.life/label/"
  },
  {
    "articleStyle": 0,
    "customOrder": 514,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "3.3",
    "sourceUrl": "http://www.sytuk.com/shey/yingtiiurm/1_{{page}}.html"
  },
  {
    "articleStyle": 0,
    "customOrder": 515,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "3.4",
    "sourceUrl": "https://www.bec9693b2cfd.com/shipin/list-%E4%BA%9A%E6%B4%B2%E6%97%A0%E7%A0%81-1.html"
  },
  {
    "articleStyle": 1,
    "customOrder": 517,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\"User-Agent\": \"Mozilla/5.0 (Linux; Android 13; 2211133C Build/TKQ1.220905.001) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Mobile Safari/537.36\"}",
    "lastUpdateTime": 1775586071363,
    "loadWithBaseUrl": true,
    "ruleArticles": ".grid_post-box",
    "ruleContent": "@js:\nlet images = [];\nlet regex = /<a\\s[^>]*?href\\s*=\\s*['\"]([^'\"]+\\.(?:jpe?g|png|gif|webp|bmp))['\"][^>]*>\\s*<img[^>]*>/gi;\nlet match;\nwhile ((match = regex.exec(result)) !== null) {\n    let realUrl = match[1];\n    images.push(`<img src=\"${realUrl}\" style=\"max-width:100%;display:block;margin:0px auto;\">`);\n}\nlet imageContent = images.join('');\nlet p = `\n<title>🏄Mengteen</title>\n<style>\n  * {margin: 0; padding: 0}\n  img {width: 100%;height: auto}\n  /* Mengteen阅图基础UI */\n  /* 返回按钮基础 */\n  #backToTopBtn {\n    display: none;\n    position: fixed;\n    bottom: 36px;\n    right: 18px;\n    z-index: 999;\n    border: none;\n    outline: none;\n    background: linear-gradient(135deg, #ADD8E6, #FFF8DC);\n    color: white;\n    cursor: pointer;\n    padding: 2px;\n    border-radius: 10%;\n    font-size: 18px;\n    box-shadow: 0 8px 32px rgba(70, 130, 180, 0.3);\n    transition: all 0.3s ease;\n    backdrop-filter: blur(4px);\n    border: 1px solid rgba(255, 255, 255, 0.3);\n  }\n  \n  #backToTopBtn:hover {\n    background: linear-gradient(135deg, #ADD8E6, #FFF8DC);\n    transform: scale(1.08);\n    box-shadow: 0 8px 25px rgba(70, 130, 180, 0.4);\n  }\n  \n  #backToTopBtn:active {\n    transform: scale(0.95);\n  }\n  \n  /* 图片加载完成提示基础 */\n  #image-loaded-toast {\n    position: fixed;\n    bottom: 33px;\n    left: 50%;\n    transform: translateX(-50%);\n    background: rgba(0, 0, 0, 0.7);\n    color: white;\n    padding: 10px 20px;\n    border-radius: 20px;\n    font-size: 14px;\n    z-index: 998;\n    backdrop-filter: blur(4px);\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n    opacity: 0;\n    transition: opacity 0.3s;\n    pointer-events: none;\n  }\n  \n  /* 标题卡片基础 */\n  #image-loaded-toast.show {\n    opacity: 1;\n  }\n</style>\n<div style=\"\n  text-align:center;\n  padding:50px 20px 20px;\n  margin:0 0 0px;\n  position:relative;\n  background:linear-gradient(135deg, #f0f7ff, #e6f0ff);\n\">\n  <!-- 标题卡片 -->\n  <div style=\"\n    position:relative;\n    z-index:10;\n    display:inline-block;\n    transform:translateY(-20px);\n    filter: drop-shadow(0 15px 25px rgba(70,130,180,0.25));\n  \">\n    <div style=\"\n      background:rgba(255,255,255,0.75);\n      backdrop-filter:blur(12px);\n      padding:16px 48px;\n      border-radius:18px;\n      border:1px solid rgba(255,255,255,0.5);\n      box-shadow:0 8px 32px rgba(70,130,180,0.2), inset 0 0 12px rgba(255,255,255,0.6);\n      position:relative;\n      overflow:hidden;\n    \">\n      <!-- 顶部高光 -->\n      <div style=\"\n        position:absolute;\n        top:0; left:0; right:0;\n        height:40%;\n        background:linear-gradient(to bottom, rgba(255,255,255,0.4), transparent);\n        pointer-events:none;\n      \"></div>\n      \n      <h3 style=\"\n        background:linear-gradient(135deg, #4a7bd0, #00a2b8);\n        -webkit-background-clip:text;\n        background-clip:text;\n        color:transparent;\n        font-size:1.3rem;\n        font-weight:700;\n        margin:0;\n        letter-spacing:-0.5px;\n        position:relative;\n        z-index:2;\n      \">{{@@h1@text}}</h3>\n      \n      <!-- 左下装饰点 -->\n      <div style=\"\n        position:absolute;\n        bottom:12px;\n        left:20px;\n        width:6px;\n        height:6px;\n        background:#00a2b8;\n        border-radius:50%;\n        opacity:0.7;\n      \"></div>\n      \n      <!-- 右下装饰点 -->\n      <div style=\"\n        position:absolute;\n        bottom:12px;\n        right:20px;\n        width:6px;\n        height:6px;\n        background:#4a7bd0;\n        border-radius:50%;\n        opacity:0.7;\n      \"></div>\n    </div>\n  </div>\n  \n  <!-- 时间信息 -->\n  <div style=\"\n    margin-top:0px;\n    padding:0px 20px;\n  \">\n    <h5 style=\"\n      color:#6c757d;\n      font-weight:400;\n      font-size:1rem;\n      margin:0;\n      line-height:1.6;\n      letter-spacing:0.3px;\n      position:relative;\n      display:inline-block;\n      max-width:700px;\n    \">\n      {{@@.post-meta-bottom@time.0@text}}\n      <!-- 下划线装饰 -->\n      <div style=\"\n        position:absolute;\n        bottom:-5px;\n        left:0;\n        width:100%;\n        height:1px;\n        background:linear-gradient(90deg, transparent, rgba(70,130,180,0.3), transparent);\n      \"></div>\n    </h5>\n  </div>\n  \n  <!-- 左上装饰圆 -->\n  <div style=\"\n    position:absolute;\n    top:10%;\n    left:15%;\n    width:40px;\n    height:40px;\n    border-radius:50%;\n    background:linear-gradient(135deg, rgba(74,123,208,0.1), transparent);\n    filter:blur(2px);\n  \"></div>\n  \n  <!-- 右下装饰圆 -->\n  <div style=\"\n    position:absolute;\n    bottom:15%;\n    right:10%;\n    width:60px;\n    height:60px;\n    border-radius:50%;\n    background:linear-gradient(135deg, rgba(0,162,184,0.1), transparent);\n    filter:blur(4px);\n    transform:rotate(30deg);\n  \"></div>\n</div>\n${imageContent}  <!-- 这里是图片内容 -->\n<div id=\"image-loaded-toast\">✅ 全部图片已完成加载</div>\n<button id=\"backToTopBtn\" title=\"回到顶部\">🔝</button>\n<script>\n(function() {\n  const backToTopBtn = document.getElementById(\"backToTopBtn\");\n  const toast = document.getElementById(\"image-loaded-toast\");\n  \n  // 图片加载完成检测\n  const images = document.querySelectorAll(\"img\");\n  let loadedCount = 0;\n  const totalImages = images.length;\n  \n  // 如果页面没有图片，直接隐藏提示\n  if(totalImages === 0) {\n    toast.style.display = \"none\";\n  }\n  \n  // 检测图片加载完成\n  images.forEach(img => {\n    if(img.complete) {\n      checkAllLoaded();\n    } else {\n      img.addEventListener(\"load\", checkAllLoaded);\n      img.addEventListener(\"error\", checkAllLoaded);\n    }\n  });\n  \n  function checkAllLoaded() {\n    loadedCount++;\n    if(loadedCount >= totalImages) {\n      showToast();\n    }\n  }\n  \n  function showToast() {\n    toast.classList.add(\"show\");\n    setTimeout(() => {\n      toast.classList.remove(\"show\");\n    }, 2000);\n  }\n  \n  // 监听页面滚动事件\n  window.addEventListener(\"scroll\", () => {\n    const scrollPosition = window.scrollY || document.documentElement.scrollTop;\n    \n    if (scrollPosition > 288) {\n      backToTopBtn.style.display = \"block\";\n      backToTopBtn.style.opacity = \"1\";\n    } else {\n      backToTopBtn.style.display = \"none\";\n    }\n  });\n  \n  // 点击事件监听器\n  backToTopBtn.addEventListener(\"click\", () => {\n    window.scrollTo({\n      top: 0,\n      behavior: \"smooth\"\n    });\n  });\n})();\n</script>\n`;\np;",
    "ruleImage": "img@data-src",
    "ruleLink": ".clearfix@data-href",
    "ruleNextPage": "page",
    "rulePubDate": "🏄Mengteen｜🔖{{@@.post-cat@text}}",
    "ruleTitle": "img@alt",
    "singleUrl": false,
    "sortUrl": "首页::/page/{{page}}/\n搜索::/page/{{page}}/?s={{(source.getVariable()==''||source.getVariable()==null)?source.setVariable('美女'):source.getVariable()}}\n女優画像::/category/avjoyuu/page/{{page}}/\n女高画像::/category/josikousei/page/{{page}}/\nおっぱい画像[美乳]::/category/oppai/page/{{page}}/\n太もも画像[美腿]::/category/hutomomo/page/{{page}}/\nオナニー画像[自慰]::/category/onani/page/{{page}}/\n野外セックス[野外啪啪]::/category/yagaisekkusu/page/{{page}}/\n乱交画像[群P]::/category/rankougazou/page/{{page}}/\nフェラ画像[口交]::/category/fera/page/{{page}}/\nクンニ画像[口交]::/category/kunnni/page/{{page}}/\nパイズリ画像[乳交]::/category/paizurigazou/page/{{page}}/\nレズ[女同]::/category/rezugazou/page/{{page}}/\nキス画像[接吻]::/category/kisugazou/page/{{page}}/\nSM::/category/smgazou/page/{{page}}/\n露出::/category/rosyutsugazou/page/{{page}}/\n偷拍::/category/tousatsugazou/page/{{page}}/\n素人::/category/sirouto/page/{{page}}/\n欧美::/category/gaizinerogazou/page/{{page}}/\n制服::/category/olgazou/page/{{page}}/\n泳衣::/category/mizugi/page/{{page}}/\n网袜::/category/amitaitsu/page/{{page}}/\n黑丝::/category/pannsuto/page/{{page}}/\n吊带::/category/ga-ta-beruto/page/{{page}}/\n浴衣::/category/yukatakimono/page/{{page}}/\n女仆::/category/meido/page/{{page}}/\n眼镜娘::/category/megane/page/{{page}}/",
    "sourceComment": "源社区：@Mengteen  2025.7.16\n二传二创或者是其它问题请联系我。\n我邮箱:[xxxmgqxxx@vip.qq.com]\n我QQ:99737563(备注来意)\n1.不需要挂🪜子,个别地方网络加载可能有点慢或者是需要挂🪜子才能访问，别急！\n2.使用了我自己的看图UI,卡片式标题,自适应全屏,一键返回顶上按钮,图片加载完成提示等。\n3.搜索和分类是按我自己个人喜欢的,你也可以放一些你自己喜欢的。",
    "sourceGroup": "版本",
    "sourceIcon": "https://pashalism.com/wp-content/uploads/2022/03/2341-33.jpg",
    "sourceName": "3.5",
    "sourceUrl": "https://pashalism.com/##@Mengteen",
    "variableComment": "🏄Mengteen提示：在此输入关键词搜索！"
  },
  {
    "articleStyle": 0,
    "customOrder": 518,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "3.6",
    "sourceUrl": "http://www.mxshm.top"
  },
  {
    "articleStyle": 0,
    "contentBlacklist": "https://pc.stgowan.com/,\nhttps://dmku.mhtjx.top/,\nhttps://dmku.m3u8.pw/,\nhttps://dm.bbj.icu/,\nhttps://www.superplayer.top/index.php/index/dm",
    "coverDecodeJs": "function toByteArray(input) {\n  var out = new Packages.java.io.ByteArrayOutputStream();\n  var buffer = java.strToBytes('\\0'.repeat(4096));\n  var bytesRead;\n  while ((bytesRead = input.read(buffer)) != -1) {\n    out.write(buffer, 0, bytesRead);\n  }\n  return out.toByteArray();\n}\n\n(function() {\n  // 1. 读取原始字节内容\n  var textBytes = toByteArray(result);\n  // 2. 如果是GIF文件，直接返回原始字节\n  if (src.endsWith('.gif')) {\n    return textBytes;\n  }\n  try {\n    // 3. 将字节转换为字符串（用于解析数据URI）\n    var dataUri = java.bytesToStr(textBytes, \"UTF-8\");\n    // 4. 判断是完整的数据URI还是纯Base64数据\n    var base64Prefix = \"base64,\";\n    var base64Index = dataUri.indexOf(base64Prefix);\n    if (base64Index === -1) {\n      // 如果没有找到base64前缀，检查是否需要截取第一个/及之后的内容\n      var firstSlashIndex = dataUri.indexOf('/');\n      if (firstSlashIndex !== -1) {\n        // 如果找到第一个/，截取/及之后的内容\n        dataUri = dataUri.substring(firstSlashIndex);\n      }\n      // 对整个内容进行Base64解码\n      return java.base64DecodeToByteArray(dataUri);\n    } else {\n      // 如果是标准data URI，提取base64编码部分解码\n      var base64Data = dataUri.substring(base64Index + base64Prefix.length);\n      return java.base64DecodeToByteArray(base64Data);\n    }\n  } catch (e) {\n    // 解码失败时返回原始字节\n    return textBytes;\n  }\n})();",
    "customOrder": 519,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n\t\"User-Agent\":\"Mozilla/5.0 (Linux; U; Android 10; zh-cn; MI CC 11)  AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.127 Mobile Safari/537.36 XiaoMi/MiuiBrowser/18.1.8 swan-mibrowser\",\n\t\"referer\": \"{{baseUrl}}\"\n}",
    "injectJs": "function setupCustomPlayer(video) {\n  // 手势滑动快进\n  let isDragging = false;\n  let startX = 0;\n  let startTime = 0;\n  \n  // 长按加速相关变量\n  let longPressTimer = null;\n  const LONG_PRESS_DELAY = 300;\n  const NORMAL_SPEED = 1.25;\n  const FAST_SPEED = 3;\n  let wasPaused = false;\n\n  // 触摸事件处理\n  function handleTouchStart(e) {\n    startX = e.touches[0].clientX;\n    startTime = video.currentTime;\n    wasPaused = video.paused;\n    \n    longPressTimer = setTimeout(() => {\n      video.playbackRate = FAST_SPEED;\n      if (wasPaused) video.play();\n    }, LONG_PRESS_DELAY);\n  }\n\n  function handleTouchMove(e) {\n    if (longPressTimer) {\n      clearTimeout(longPressTimer);\n      longPressTimer = null;\n    }\n    \n    const dx = e.touches[0].clientX - startX;\n    if (Math.abs(dx) > 10) {\n      if (!isDragging) {\n        video.pause();\n        isDragging = true;\n      }\n      const change = (dx / video.clientWidth) * video.duration;\n      video.currentTime = Math.max(0, Math.min(startTime + change, video.duration));\n    }\n  }\n\n  function handleTouchEnd() {\n    if (longPressTimer) {\n      clearTimeout(longPressTimer);\n      longPressTimer = null;\n    }\n    \n    if (isDragging) {\n      video.playbackRate = NORMAL_SPEED;\n      video.play();\n      isDragging = false;\n    } else if (video.playbackRate === FAST_SPEED) {\n      video.playbackRate = NORMAL_SPEED;\n      if (wasPaused) video.pause();\n    }\n  }\n\n  // 添加触摸事件监听\n  video.addEventListener('touchstart', handleTouchStart);\n  video.addEventListener('touchmove', handleTouchMove);\n  video.addEventListener('touchend', handleTouchEnd);\n  \n  // 初始播放速度\n  video.playbackRate = NORMAL_SPEED;\n\n  // 创建按钮的通用函数\n  function createButton(text, onClick, position, width = '20px') {\n    const button = document.createElement('button');\n    button.textContent = text;\n    button.style.position = 'absolute';\n    button.style[position.horizontal] = '0';\n    button.style.top = '50%';\n    button.style.transform = 'translateY(-50%)';\n    button.style.zIndex = '999';\n    button.style.padding = '1px';\n    button.style.background = 'rgba(51, 51, 51, 0)';\n    button.style.color = '#fff';\n    button.style.border = 'none';\n    button.style.cursor = 'pointer';\n    button.style.width = width;\n    button.style.height = '30px';\n    button.addEventListener('click', onClick);\n    video.parentNode.appendChild(button);\n    return button;\n  }\n\n  // 旋转按钮（右侧）\n  createButton('⟳', () => {\n    const currentRotation = parseInt(video.getAttribute('data-rotation') || '0');\n    const newRotation = (currentRotation + 90) % 360;\n    video.setAttribute('data-rotation', newRotation);\n    \n    // 保留当前的缩放比例\n    const currentTransform = video.style.transform || '';\n    let currentScale = 1;\n    const scaleMatch = currentTransform.match(/scale\\(([^)]+)\\)/);\n    if (scaleMatch) currentScale = parseFloat(scaleMatch[1]);\n    \n    video.style.transform = `rotate(${newRotation}deg) scale(${currentScale})`;\n  }, { horizontal: 'right' });\n\n  // 缩放按钮（左侧）\n  let zoomCount = 0;\n  createButton('+', () => {\n    const currentRotation = parseInt(video.getAttribute('data-rotation') || '0');\n    \n    // 获取当前缩放比例\n    const currentTransform = video.style.transform || '';\n    let currentScale = 1;\n    const scaleMatch = currentTransform.match(/scale\\(([^)]+)\\)/);\n    if (scaleMatch) currentScale = parseFloat(scaleMatch[1]);\n    \n    if (zoomCount < 4) {\n      const newScale = currentScale * 1.25;\n      video.style.transform = `rotate(${currentRotation}deg) scale(${newScale})`;\n      zoomCount++;\n    } else {\n      video.style.transform = `rotate(${currentRotation}deg) scale(1)`;\n      zoomCount = 0;\n    }\n  }, { horizontal: 'left' });\n\n  // 快速跳转按钮（底部中央）\n  const buttonContainer = document.createElement('div');\n  buttonContainer.style.position = 'absolute';\n  buttonContainer.style.bottom = '0';\n  buttonContainer.style.left = '50%';\n  buttonContainer.style.transform = 'translateX(-50%)';\n  buttonContainer.style.display = 'flex';\n  buttonContainer.style.gap = '10px';\n  buttonContainer.style.zIndex = '999';\n  \n  // 按钮配置\n  const seekButtons = [\n    { text: '-5分', time: -300 },\n    { text: '-1分', time: -60 },\n    { text: '+1分', time: 60 },\n    { text: '+5分', time: 300 }\n  ];\n\n  seekButtons.forEach(({ text, time }) => {\n    const button = document.createElement('button');\n    button.textContent = text;\n    button.style.padding = '1px';\n    button.style.background = 'rgba(51, 51, 51, 0)';\n    button.style.color = '#fff';\n    button.style.border = 'none';\n    button.style.cursor = 'pointer';\n    button.style.width = '60px';\n    button.style.height = '30px';\n    button.addEventListener('click', () => {\n      video.currentTime = Math.max(0, Math.min(video.currentTime + time, video.duration));\n    });\n    buttonContainer.appendChild(button);\n  });\n\n  video.parentNode.appendChild(buttonContainer);\n}\n\n// 修改初始化逻辑，增加重试机制\nfunction initPlayerWithRetry() {\n  const maxRetries = 10;\n  const retryInterval = 500;\n  let retries = 0;\n  const tryInit = () => {\n    const video = document.getElementById('video');\n    if (video) {\n      setupCustomPlayer(video);\n    } else if (retries < maxRetries) {\n      retries++;\n      setTimeout(tryInit, retryInterval);\n    }\n  };\n  tryInit();\n}\n// 使用重试机制初始化播放器\ninitPlayerWithRetry();",
    "lastUpdateTime": 1775584959581,
    "loadWithBaseUrl": true,
    "ruleArticles": "$.rescont.data",
    "ruleContent": "<html><head><meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\n<meta name=\"referrer\" content=\"never\"/>\n  <style>html, body {text-align: center;margin: 0; padding: 0;width: 100%;overflow: hidden;} </style>\n  <script src=\"https://unpkg.com/hls.js@1.4.3/dist/hls.min.js\"></script>\n</head><body>\n  <div class=\"container\">\n    <div class=\"title\">{{$.rescont.title}}</div>\n    <video id=\"video\" width=\"100%\" height=\"91%\" poster=\"\" controls autoplay muted loop></video>\n  </div>\n<script>\nconst v=document.getElementById('video'),s=[\n  \"{{$.rescont.videopath}}\",\n  \"\"];\nlet c=0;\nfunction setupCustomControls(e){/* 自定义功能实现 */}\nfunction playNext(){\n  c>=s.length&&(c=0); // 循环重置计数器\n  const u=s[c++];\n  // 检测Hls对象是否存在\n  if (typeof Hls !== 'undefined' && Hls.isSupported()) {\n    const h = new Hls({\n      enableSoftwareAES: true,          // 强制软件解密\n      forceKeyFrameOnDiscontinuity: true // 关键帧恢复\n    });\n    h.loadSource(u);\n    h.attachMedia(v);\n    h.on(Hls.Events.MANIFEST_PARSED,()=>v.play().then(()=>setupCustomControls(v)).catch(console.log));\n    h.on(Hls.Events.ERROR,(_,d)=>d.fatal&&playNext())\n  } else { // Hls加载失败或浏览器原生支持HLS\n    if (v.canPlayType('application/vnd.apple.mpegurl')) {\n      v.src = u;\n      v.onloadedmetadata = () => v.play().then(() => setupCustomControls(v));\n      v.onerror = playNext;\n    } else {\n      // 如果都不支持，尝试直接播放（可能支持MP4等格式）\n      v.src = u;\n      v.onerror = playNext;\n      v.play().then(() => setupCustomControls(v)).catch(playNext);\n    }\n  }\n}playNext();\n</script>\n</body></html>",
    "ruleImage": "{{$.coverbase64.url}}",
    "ruleLink": "/api/videoplay/{{$.id}}?uuid=1",
    "ruleNextPage": "$.rescont.next_page_url",
    "rulePubDate": "📆{{$.updated_at## .*}}  ⏱️{{$.playtimes}}",
    "ruleTitle": "$.title##.*屎.*|.*Ts.*|.*TS.*|.*ts.*|.*伪娘.*|.*人妖.*|.*男同.*|.*mbrba.*|.*水果派.*|.*解说.*|.*mmraa.*|.*ss-.*|.*fway.*|.*rebd.*|.*mbdd.*|.*双性.*|.*妈妈.*|.*儿子.*|.*爸爸.*|.*女儿.*|.*母子.*|.*父女.*|.*熟女.*|.*眼射.*|.*直男.*|.*CD.*|.*肥女.*|.*黄金.*|.*骚0.*|.*gv.*|.*父子.*|.*飞机.*|.*撸.*|.*厕.*|.*老阿姨.*|.*乱伦.*|.*[电影].*",
    "singleUrl": false,
    "sortUrl": "\n随机::/api/videosort/0?page={{ Math.ceil(Math.random()*1600) }}\n最新::/api/videosort/0?page={{page}}\n🔎搜索::/api/videosort/0?serach={{v=source.getVariable();if(/^\\s*$/.test(v)||v==null)source.setVariable('强奸');source.getVariable()}}&page={{page}}\n国产自拍::/api/videosort/28?page={{page}}\nH动漫::/api/videosort/32?page={{page}}\n3D动画::/api/videosort/65?page={{page}}\n国产AV::/api/videosort/68?page={{page}}\n高清无码::/api/videosort/30?page={{page}}\n凌辱侵犯::/api/videosort/60?page={{page}}\n性虐调教::/api/videosort/64?page={{page}}\n长腿丝袜::/api/videosort/43?page={{page}}\n制服诱惑::/api/videosort/33?page={{page}}\nAV素人::/api/videosort/39?page={{page}}\nAV剧情::/api/videosort/49?page={{page}}\n绿帽人妻::/api/videosort/58?page={{page}}\n痴女淫娃::/api/videosort/61?page={{page}}\n美乳巨乳::/api/videosort/38?page={{page}}\n草莓推荐::/api/videosort/52?page={{page}}\ntaipei1001::/api/videosort/69?page={{page}}\n259LUXU::/api/videosort/50?page={{page}}\n明星淫梦::/api/videosort/56?page={{page}}\n电车痴汉::/api/videosort/59?page={{page}}\n絕色佳人::/api/videosort/44?page={{page}}\n网红嫩模::/api/videosort/37?page={{page}}\n口交自慰::/api/videosort/63?page={{page}}\n精油汗汁::/api/videosort/62?page={{page}}\n角色扮演::/api/videosort/27?page={{page}}\n魔镜系列::/api/videosort/54?page={{page}}\n重咸口味::/api/videosort/48?page={{page}}\n三级电影:/api/videosort/46?page={{page}}\n家庭乱伦::/api/videosort/57?page={{page}}\nAV欧美::/api/videosort/36?page={{page}}\n恐怖情色::/api/videosort/51?page={{page}}\n酒店偷拍::/api/videosort/67?page={{page}}",
    "sourceGroup": "版本",
    "sourceIcon": "https://i1.wp.com/i.postimg.cc/wjL5myHr/kpptube-cc-3e997cb42a6b0f37af6c6a40866ba202.gif",
    "sourceName": "3.7",
    "sourceUrl": "https://api.cmapiaba.xyz/",
    "style": ".container {\n    position: relative; /* 相对定位，用于包含视频 */\n    height: 100%; /* 容器高度与视频原始高度相同 */\n    overflow: hidden; /* 隐藏超出容器的部分 */\n}\n.title {\n    position: absolute; /* 绝对定位，相对于容器 */\n    top: 0; \n    width: 100%;\n    overflow: hidden; \n    text-overflow: ellipsis;\n    display: -webkit-box;\n    -webkit-box-orient: vertical; \n    -webkit-line-clamp: 2;\n    z-index: 1; /* 确保标题在视频之上 */\n    background: #000; /* 纯黑色背景 */ \n    padding: 0 0 3px 0;\n}\nvideo {\n    position: absolute; /* 绝对定位，相对于容器 */ \n    top: -65px; /* 上移80px */\n    left: 0; \n    width: 100%; \n    height: calc(96% + 65px);  /* 调整高度以适应内容 */\n    object-fit: contain; /* 确保视频内容不被裁剪 */\n    z-index: 0; /* 确保视频在标题之下 */\n    controls=\"controls\" autoplay muted; \n} \n"
  },
  {
    "articleStyle": 0,
    "customOrder": 520,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "3.8",
    "sourceUrl": "http://www.hjtaotu.com/chis/gufeng/1.html"
  },
  {
    "articleStyle": 2,
    "customOrder": 521,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "//div.list-com/a",
    "ruleContent": "//ul/li",
    "ruleImage": "//img@src##.*?<img src=\"(.*?)\".*?##$1###@js:header={\"Referer\":baseUrl}\nheaders={\"headers\":JSON.stringify(header)}\nresult=result+','+JSON.stringify(headers)",
    "ruleLink": "href",
    "ruleNextPage": "page",
    "rulePubDate": "//img@src##.*?<img src=\"https://imgfzone.tooopen.com/(.*?)/.*?.jpg\".*?##$1###",
    "ruleTitle": "//text()",
    "singleUrl": false,
    "sortUrl": "",
    "sourceComment": "",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "3.9",
    "sourceUrl": "https://desk.tooopen.com/beauty_3<,_{{page}}>.html"
  },
  {
    "articleStyle": 2,
    "customOrder": 522,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "//div.list-com/a",
    "ruleContent": "//ul/li",
    "ruleImage": "//img@src##.*?<img src=\"(.*?)\".*?##$1###@js:header={\"Referer\":baseUrl}\nheaders={\"headers\":JSON.stringify(header)}\nresult=result+','+JSON.stringify(headers)",
    "ruleLink": "href",
    "ruleNextPage": "page",
    "rulePubDate": "//img@src##.*?<img src=\"https://imgfzone.tooopen.com/(.*?)/.*?.jpg\".*?##$1###",
    "ruleTitle": "//text()",
    "singleUrl": false,
    "sortUrl": "",
    "sourceComment": "",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "4.0",
    "sourceUrl": "https://desk.tooopen.com/artphoto_3<,_{{page}}>.html"
  },
  {
    "articleStyle": 0,
    "customOrder": 524,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n\t\"User-Agent\": \"Mozilla/5.0 (Linux; Android 9) Mobile Safari/537.36\",\"referer\": \"{{baseUrl}}\"\n\t}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".picstyle ul li||.threadlist ul li",
    "ruleContent": ".bz_message_table@all&&link@all&&script@all",
    "ruleImage": "img@src",
    "ruleLink": "a@href",
    "ruleNextPage": "text.下一页@href",
    "rulePubDate": "span!0@text##\\s##😁",
    "ruleTitle": "span.0@text",
    "singleUrl": false,
    "sortUrl": "网友自拍::https://qp.tangse95.one/forum.php?mod=forumdisplay&fid=6&mobile=2\n有声小说::https://qp.tangse95.one/forum.php?mod=forumdisplay&fid=45&mobile=2\n国产自拍::https://qp.tangse95.one/forum.php?mod=forumdisplay&fid=18&mobile=2\n校园春色::https://qp.tangse95.one/forum.php?mod=forumdisplay&fid=14&mobile=2\n搜索::https://qp.tangse95.one/search.php?mod=forum&searchid=243&orderby=lastpost&ascdesc=desc&searchsubmit=yes&kw={{(source.getVariable()==''||source.getVariable()==null)?source.setVariable('妹妹'):\"\"}}{{source.getVariable()}}&mobile=2",
    "sourceComment": "https://96tang.club",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "4.1",
    "sourceUrl": "https://qp.tangse95.one"
  },
  {
    "articleStyle": 0,
    "customOrder": 525,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceComment": "",
    "sourceGroup": "版本",
    "sourceIcon": "https://m.acgnfl.com/24/07/content_33/525867/087.webp",
    "sourceName": "4.2推荐",
    "sourceUrl": "https://w7r.xohjrmr.cc/?ua=quark"
  },
  {
    "articleStyle": 0,
    "customOrder": 526,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 1773937472845,
    "loadWithBaseUrl": true,
    "ruleArticles": ".mb15 a[32:]",
    "ruleContent": "<js>\n// 提取m3u8链接\nvar m3u8Match = result.match(/\"([^\"]*?index\\.m3u8[^\"]*)\"/i) \n             || result.match(/'([^']*?index\\.m3u8[^']*)'/i);\n\nvar p = '';\nif (m3u8Match) {\n    var u = m3u8Match[1]\n        .replace(/\\\\\\//g, '/')      // \\/ → /\n        .replace(/\\\\\\\\/g, '\\\\')      // \\\\ → \\\n        .trim();\n    \n    // 补全协议\n    if (u.startsWith('//')) {\n        u = 'https:' + u;\n    } else if (!u.startsWith('http')) {\n        // 需要基础URL，这里假设当前页面URL在result中或需要传入\n        u = 'https://' + u;  // 简化处理，或根据实际需求调整\n    }\n    p = u;\n}\n\n// 标题：从 span.tx-flex-sh > a 的 title 属性获取\nvar t = java.getString('.f-bold @text') || '未知标题';\n\n// 标签：从 meta[name=\"description\"] 的 content 获取  \nvar b = java.getString('meta[name=\"description\"]@content') || '';\nvar updateIndex = b.indexOf('更新时间');\nif (updateIndex !== -1) {\nvar d = b.substring(updateIndex);  // 保留\"更新时间\"及之后的内容\n}\n\n`<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>${t}</title>\n<style>\n*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:-apple-system,sans-serif;background:#f0f9ff;padding:10px}\n.v-box{max-width:800px;margin:0 auto;background:white;border-radius:12px;box-shadow:0 5px 15px rgba(0,0,0,0.1);overflow:hidden}\n.header{padding:12px;border-bottom:1px solid #eee;display:flex;flex-wrap:wrap;justify-content:space-between}\n.title{font-size:18px;font-weight:600;margin-bottom:8px;width:100%}\n.tags{color:#5f6368;font-size:14px;flex:1;min-width:60%;word-break:break-all}\n.time{color:#5f6368;font-size:14px;text-align:right;flex-basis:35%}\n.v-wrap{position:relative;padding-top:56.25%;background:#000}\n.video{position:absolute;top:0;left:0;width:100%;height:100%}\n.footer{padding:8px;text-align:center;color:#5f6368;font-size:13px}\n.info-box{padding:15px;font-size:14px;line-height:1.6}\n.info-box p{margin:8px 0}\n.hint{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:rgba(0,0,0,0.7);color:#fff;padding:12px 20px;border-radius:20px;font-size:1.1rem;z-index:10;display:none}\n.controls{position:absolute;top:0;left:0;width:100%;height:4px;background:rgba(255,255,255,0.3);z-index:5;transition:opacity 0.3s}\n.progress{height:100%;background:#4a9eff;width:0}\n</style>\n</head>\n<body>\n<div class=\"v-box\">\n<div class=\"header\">\n<div class=\"title\">${t}</div>\n<div class=\"tags\">${d}</div>\n<div class=\"time\" id=\"timeDisplay\">00:00/00:00</div></div>\n<div class=\"v-wrap\">\n<div class=\"controls\"><div class=\"progress\" id=\"progressBar\"></div></div>\n<div class=\"hint\" id=\"hint\">快进中 &gt;&gt;</div>\n<video class=\"video\" id=\"v\" controls playsinline>\n<source src=\"${p}\" type=\"application/x-mpegURL\">您的浏览器不支持HTML5视频\n</video>\n</div>\n<div class=\"footer\">滑动调整进度 | 长按2倍速</div>\n</div>\n<script>\nvar v = document.getElementById('v');\nvar tDisplay = document.getElementById('timeDisplay');\nvar pBar = document.getElementById('progressBar');\nvar hint = document.getElementById('hint');\nvar startX = 0, startTime = 0;\nvar longPressTimer;\nvar sensitivity = 0.1;\nvar longPressTime = 500;\nvar hintDuration = 2000;\nfunction updateTime() {\nif (!v.duration) return;\nvar m1 = Math.floor(v.currentTime / 60);\nvar s1 = Math.floor(v.currentTime % 60);\nvar m2 = Math.floor(v.duration / 60);\nvar s2 = Math.floor(v.duration % 60);\ntDisplay.textContent = m1 + ':' + (s1 < 10 ? '0' : '') + s1 + '/' + m2 + ':' + (s2 < 10 ? '0' : '') + s2;\npBar.style.width = (v.currentTime / v.duration) * 100 + '%';}\nv.addEventListener('timeupdate', updateTime);\nv.addEventListener('loadedmetadata', updateTime);\nv.addEventListener('touchstart', function(e) {\nstartX = e.touches[0].clientX;\nstartTime = Date.now();\nif (longPressTimer) clearTimeout(longPressTimer);\nhint.style.display = 'none';\nlongPressTimer = setTimeout(function() {\nv.playbackRate = 2.0;\nhint.style.display = 'block';\nsetTimeout(function() { hint.style.display = 'none'; }, hintDuration);}, longPressTime);});\nv.addEventListener('touchmove', function(e) {\ne.preventDefault();\nclearTimeout(longPressTimer);\nvar diffX = e.touches[0].clientX - startX;\nvar change = diffX * sensitivity * v.duration / 100;\nv.currentTime = Math.max(0, Math.min(v.currentTime + change, v.duration));\nstartX = e.touches[0].clientX;updateTime();});\nv.addEventListener('touchend', function() {\nv.playbackRate = 1.0;\nclearTimeout(longPressTimer);});\n</script>\n</body>\n</html>`\n</js>\n",
    "ruleImage": "img@src",
    "ruleLink": "a.0@href<js> resutl='https://rensgyn1.lol'+result</js><js>\nresult=result.replace('dis', '');\n</js>\n",
    "ruleNextPage": ".pageitem.-1@href",
    "rulePubDate": "time@text",
    "ruleTitle": "a@title",
    "shouldOverrideUrlLoading": "true",
    "singleUrl": false,
    "sortUrl": "国产视频::https://rensgyn1.lol/sort/223.html\n精品推荐::https://rensgyn1.lol/sort/224.html\n国产色情::https://rensgyn1.lol/sort/225.html\n中文字幕::https://rensgyn1.lol/sort/226.html\n主播直播::https://rensgyn1.lol/sort/227.html\n国产传媒::https://rensgyn1.lol/sort/228.html\n亚洲无码::https://rensgyn1.lol/sort/229.html\n日本有码::https://rensgyn1.lol/sort/230.html\n亚洲有码::https://rensgyn1.lol/sort/231.html\n日本无码::https://rensgyn1.lol/sort/232.html\n中文有码::https://rensgyn1.lol/sort/233.html\n欧美无码::https://rensgyn1.lol/sort/234.html\n巨乳美乳::https://rensgyn1.lol/sort/235.html\n强奸乱伦::https://rensgyn1.lol/sort/236.html\n人妻系列::https://rensgyn1.lol/sort/237.html\n制服诱惑::https://rensgyn1.lol/sort/238.html\n强奸精品::https://rensgyn1.lol/sort/239.html\n直播主播::https://rensgyn1.lol/sort/240.html\n欧美精品::https://rensgyn1.lol/sort/241.html\n激情动漫::https://rensgyn1.lol/sort/242.html\n萝莉少女::https://rensgyn1.lol/sort/243.html\n明星换脸::https://rensgyn1.lol/sort/244.html\n伦理三级::https://rensgyn1.lol/sort/245.html\n抖阴视频::https://rensgyn1.lol/sort/246.html\n女优明星::https://rensgyn1.lol/sort/248.html\n自拍偷拍::https://rensgyn1.lol/sort/249.html\n视频一区::https://rensgyn1.lol/sort/250.html\n制服丝袜::https://rensgyn1.lol/sort/251.html\n视频二区::https://rensgyn1.lol/sort/252.html\n口交颜射::https://rensgyn1.lol/sort/253.html\n网-曝-门::https://rensgyn1.lol/sort/254.html\n日本精品::https://rensgyn1.lol/sort/255.html\n视频三区::https://rensgyn1.lol/sort/256.html\nCosplay::https://rensgyn1.lol/sort/257.html\n伦理三级::https://rensgyn1.lol/sort/258.html\n素人自拍::https://rensgyn1.lol/sort/259.html\nAV解说::https://rensgyn1.lol/sort/260.html\n台湾辣妹::https://rensgyn1.lol/sort/261.html\nSM调教::https://rensgyn1.lol/sort/262.html\n韩国御姐::https://rensgyn1.lol/sort/263.html\n萝莉少女::https://rensgyn1.lol/sort/264.html\n唯美港姐::https://rensgyn1.lol/sort/265.html\n东南亚AV::https://rensgyn1.lol/sort/267.html\n女同性恋::https://rensgyn1.lol/sort/268.html\n欺辱凌辱::https://rensgyn1.lol/sort/269.html\n玩偶姐姐::https://rensgyn1.lol/sort/270.html\n剧情介绍::https://rensgyn1.lol/sort/271.html\n视频四区::https://rensgyn1.lol/sort/272.html\n多人多P::https://rensgyn1.lol/sort/273.html\n人妖系列::https://rensgyn1.lol/sort/274.html\n91探花::https://rensgyn1.lol/sort/275.html\n网红流出::https://rensgyn1.lol/sort/276.html\n野外露出::https://rensgyn1.lol/sort/277.html\n古装扮演::https://rensgyn1.lol/sort/278.html\n女优系列::https://rensgyn1.lol/sort/279.html\n可爱学生::https://rensgyn1.lol/sort/280.html\n风情旗袍::https://rensgyn1.lol/sort/281.html\n兽耳系列::https://rensgyn1.lol/sort/282.html\n瑜伽裤::https://rensgyn1.lol/sort/283.html\n闷骚护士::https://rensgyn1.lol/sort/284.html\n过膝袜::https://rensgyn1.lol/sort/285.html\n网曝门::https://rensgyn1.lol/sort/286.html\n传媒出品::https://rensgyn1.lol/sort/287.html\n女同性恋::https://rensgyn1.lol/sort/288.html\n男同性恋::https://rensgyn1.lol/sort/289.html\n恋腿狂魔::https://rensgyn1.lol/sort/290.html\n韩国主播::https://rensgyn1.lol/sort/293.html\nVR视角::https://rensgyn1.lol/sort/294.html\n无码专区::https://rensgyn1.lol/sort/295.html\n制服师生::https://rensgyn1.lol/sort/297.html\n伦理系列::https://rensgyn1.lol/sort/298.html\n换脸AI::https://rensgyn1.lol/sort/299.html\n中文伦理::https://rensgyn1.lol/sort/300.html\n卡通动漫::https://rensgyn1.lol/sort/301.html\n欧美系列::https://rensgyn1.lol/sort/302.html\n美女主播::https://rensgyn1.lol/sort/303.html\n国产自拍::https://rensgyn1.lol/sort/304.html\n人妻热门::https://rensgyn1.lol/sort/305.html\n萝莉系列::https://rensgyn1.lol/sort/306.html\n女同性爱::https://rensgyn1.lol/sort/307.html\n多人群交::https://rensgyn1.lol/sort/308.html\n美乳巨乳::https://rensgyn1.lol/sort/309.html\n强奸热门::https://rensgyn1.lol/sort/310.html\n抖阴视频::https://rensgyn1.lol/sort/311.html\n韩国主播::https://rensgyn1.lol/sort/312.html\n网红头条::https://rensgyn1.lol/sort/313.html\n网爆黑料::https://rensgyn1.lol/sort/314.html\n欧美无码::https://rensgyn1.lol/sort/315.html\n女优明星::https://rensgyn1.lol/sort/316.html\nSM调教::https://rensgyn1.lol/sort/317.html\n精品解说::https://rensgyn1.lol/sort/326.html\n亚洲情色::https://rensgyn1.lol/sort/374.html\n主播自拍::https://rensgyn1.lol/sort/375.html\n国产偷拍::https://rensgyn1.lol/sort/376.html\n无码系列::https://rensgyn1.lol/sort/377.html\n欧美性爱::https://rensgyn1.lol/sort/378.html\n熟女专区::https://rensgyn1.lol/sort/379.html\n强奸系列::https://rensgyn1.lol/sort/380.html\n巨乳系列::https://rensgyn1.lol/sort/381.html\n中文大全::https://rensgyn1.lol/sort/382.html\n制服学生::https://rensgyn1.lol/sort/383.html\n女同蕾丝::https://rensgyn1.lol/sort/384.html\n卡通动画::https://rensgyn1.lol/sort/385.html\n视频伦理::https://rensgyn1.lol/sort/386.html\n少女裸体::https://rensgyn1.lol/sort/387.html\n重口色情::https://rensgyn1.lol/sort/388.html\n人兽性交::https://rensgyn1.lol/sort/389.html\n福利姬::https://rensgyn1.lol/sort/473.html\n生活都市::https://rensgyn1.lol/sort/474.html\n不偷恋情::https://rensgyn1.lol/sort/475.html\n学生校园::https://rensgyn1.lol/sort/476.html\n人妻熟女::https://rensgyn1.lol/sort/477.html\n暴力虐待::https://rensgyn1.lol/sort/478.html\n明星偶像::https://rensgyn1.lol/sort/479.html\n玄幻仙侠::https://rensgyn1.lol/sort/480.html\n科学幻想::https://rensgyn1.lol/sort/481.html\n街拍偷拍::https://rensgyn1.lol/sort/482.html\n丝袜美腿::https://rensgyn1.lol/sort/483.html\n欧美风情::https://rensgyn1.lol/sort/484.html\n网友自拍::https://rensgyn1.lol/sort/485.html\n卡通漫画::https://rensgyn1.lol/sort/486.html\n露出激情::https://rensgyn1.lol/sort/487.html\n唯美写真::https://rensgyn1.lol/sort/488.html\n女优情报::https://rensgyn1.lol/sort/489.html\n私房俱乐部::https://rensgyn1.lol/sort/490.html\n学生少女::https://rensgyn1.lol/sort/492.html\n技师风采::https://rensgyn1.lol/sort/493.html\n熟女少妇::https://rensgyn1.lol/sort/494.html\n国产热播::https://rensgyn1.lol/sort/495.html\n反差母狗::https://rensgyn1.lol/sort/496.html\n美脚丝足::https://rensgyn1.lol/sort/497.html\n情侣自拍::https://rensgyn1.lol/sort/498.html\n偷情约炮::https://rensgyn1.lol/sort/499.html\n真实偷拍::https://rensgyn1.lol/sort/500.html\n高潮喷水::https://rensgyn1.lol/sort/501.html\n强奸迷奸::https://rensgyn1.lol/sort/503.html\n户外露出::https://rensgyn1.lol/sort/504.html\nSM调教::https://rensgyn1.lol/sort/505.html\n情趣内衣::https://rensgyn1.lol/sort/506.html\n精选探花::https://rensgyn1.lol/sort/507.html\n网曝门事件::https://rensgyn1.lol/sort/509.html\n校园猛料::https://rensgyn1.lol/sort/510.html\n网红流出::https://rensgyn1.lol/sort/511.html\n明星黑料::https://rensgyn1.lol/sort/512.html\n裸贷肉偿::https://rensgyn1.lol/sort/513.html\n婚闹恶俗::https://rensgyn1.lol/sort/514.html\n抓奸名场面::https://rensgyn1.lol/sort/515.html\n男同女同::https://rensgyn1.lol/sort/516.html\nJK少女::https://rensgyn1.lol/sort/518.html\n黑丝白丝::https://rensgyn1.lol/sort/519.html\n女仆::https://rensgyn1.lol/sort/520.html\ncosplay::https://rensgyn1.lol/sort/521.html\nOL制服::https://rensgyn1.lol/sort/522.html\n旗袍::https://rensgyn1.lol/sort/523.html\n空姐制服::https://rensgyn1.lol/sort/524.html\n护士医生::https://rensgyn1.lol/sort/525.html\n禁忌母子::https://rensgyn1.lol/sort/527.html\n兄弟姐妹::https://rensgyn1.lol/sort/528.html\n爱上嫂子::https://rensgyn1.lol/sort/529.html\n狂操小姨::https://rensgyn1.lol/sort/530.html\n换夫换妻::https://rensgyn1.lol/sort/531.html\n淫荡儿媳::https://rensgyn1.lol/sort/532.html\n爷爷奶奶::https://rensgyn1.lol/sort/533.html\n啪啪直播::https://rensgyn1.lol/sort/535.html\n学生直播::https://rensgyn1.lol/sort/536.html\n自慰诱惑::https://rensgyn1.lol/sort/537.html\n乱伦直播::https://rensgyn1.lol/sort/538.html\n户外勾搭::https://rensgyn1.lol/sort/539.html\n车震直播::https://rensgyn1.lol/sort/540.html\n国产AV::https://rensgyn1.lol/sort/541.html\n欧美精选::https://rensgyn1.lol/sort/543.html\n户外搭讪::https://rensgyn1.lol/sort/544.html\n美女自慰::https://rensgyn1.lol/sort/545.html\n成人剧情::https://rensgyn1.lol/sort/546.html\n黑人大屌::https://rensgyn1.lol/sort/547.html\n群P大作战::https://rensgyn1.lol/sort/548.html\n欧美重口::https://rensgyn1.lol/sort/549.html\n人兽性交::https://rensgyn1.lol/sort/551.html\nSM性虐::https://rensgyn1.lol/sort/552.html\n人妖伪娘::https://rensgyn1.lol/sort/553.html\n孕妇内射::https://rensgyn1.lol/sort/554.html\n吃屎喝尿::https://rensgyn1.lol/sort/555.html\n扩阴拳交::https://rensgyn1.lol/sort/556.html\n阳具巨物::https://rensgyn1.lol/sort/557.html\n3D动漫::https://rensgyn1.lol/sort/559.html\n同人动漫::https://rensgyn1.lol/sort/560.html\n日本中文::https://rensgyn1.lol/sort/562.html\n无码流出::https://rensgyn1.lol/sort/563.html\nFC2::https://rensgyn1.lol/sort/564.html\nHEYZO::https://rensgyn1.lol/sort/565.html\n东京热::https://rensgyn1.lol/sort/566.html\n一本道::https://rensgyn1.lol/sort/567.html\n网红主播::https://rensgyn1.lol/sort/569.html\n伦理精选::https://rensgyn1.lol/sort/570.html\n剧情故事::https://rensgyn1.lol/sort/571.html",
    "sourceGroup": "版本",
    "sourceIcon": "https://gips0.baidu.com/it/u=1646076759,2240023288&fm=3086&app=3086&f=JPEG&wm=1,baiduai3,0,0,13,9&wmo=5,5&w=1024&h=1024",
    "sourceName": "4.3",
    "sourceUrl": "https://rensgyn1.lol/sort/536.html"
  },
  {
    "articleStyle": 0,
    "customOrder": 528,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.pb@tag.div",
    "ruleDescription": "",
    "ruleImage": "class.focus@tag.span@tag.img@src",
    "ruleNextPage": "class.pagination pagination-multi@class.next-page@tag.a@href",
    "rulePubDate": "class.text-muted time.0@text##发布于:",
    "ruleTitle": "class.excerpt excerpt-one.0@tag.header@tag.a@text",
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "https://www.xx3004.vip/wp-content/themes/xiu/images/wap-logo.png",
    "sourceName": "4.4",
    "sourceUrl": "https://www.san421.com/meinv"
  },
  {
    "articleStyle": 2,
    "concurrentRate": "",
    "customOrder": 529,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "loginUrl": "",
    "ruleArticles": "id.main@tag.li||$",
    "ruleContent": "id.allbtn@text##展开全图\\(1/|\\)\n<js>\nn=Number(result)+1\nu='{{@@id.nowimg@src##1\\.jpg$}}'\n\nlist='\\n'\nfor(i=1;i<n;i++){\n\t\tlist += '<li><img src=\"https://www.tuiimg.com/images/logo.png\" data-src=\"'+u+i+'.jpg\"></li>\\n'\n\t}\nlist\n</js>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0\">\n\n\n<ul id=\"box\">\n{{result}}\n</ul>\n\n\n<link rel=\"stylesheet\" href=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.1/viewer.min.css\">\r\n<script src=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.1/viewer.min.js\"></script>\n<script>\n\troot = document.getElementById('box')\n\tlazy = new IntersectionObserver(entires => {\n\t\tentires.forEach(item => {\n\t\t\tif(item.isIntersecting){\n\t\t\t\titem=item.target\n\t\t\t\titem.src=item.getAttribute('data-src')\n\t\t\t\tlazy.unobserve(item)\n\t\t\t}\n\t\t})\n\t}, {\n\t\troot: root,\n\t\tthreshold: [0],\n\t\trootMargin:\"0px\"\n\t})\n\nimgs = document.getElementsByTagName('img')\nArray.from(imgs).forEach(item => {\n\t\tlazy.observe(item)\n\t})\n\n//查看大图插件\nnew Viewer(root,{title:false,interval:3000})\n</script>",
    "ruleImage": "tag.img@realsrc\n@js:\nresult?result:'https://i.tuiimg.net/{{$.catalog}}/{{$.id}}/mc.jpg'",
    "ruleLink": "tag.a@href\n@js:\nresult?result:'https://m.tuiimg.com/meinv/{{$.id}}/'",
    "ruleNextPage": "page",
    "rulePubDate": "{{$.time}}{{@@tag.span.0@text## 发布}} 发布　　喜欢({{$.love}}{{@@tag.span.1@text##(\\d+)##$1###}})",
    "ruleTitle": "tag.h2@text||$.title",
    "singleUrl": false,
    "sortUrl": "首页最新::https://m.tuiimg.com/data.php?page={{page}}\n性感美女::https://m.tuiimg.com/xingganmeinv/list_{{page}}.html\n清纯美女::https://m.tuiimg.com/qingchunmeinv/list_{{page}}.html\n妹子图集::https://m.tuiimg.com/meizitu/list_{{page}}.html\n美女写真::https://m.tuiimg.com/meinvxiezhen/list_{{page}}.html\n\n\n//标签\n美胸::https://m.tuiimg.com/tag/meixiong/list_{{page}}.html\n美臀::https://m.tuiimg.com/tag/meitun/list_{{page}}.html\n美腿::https://m.tuiimg.com/tag/meitui/list_{{page}}.html\n妩媚::https://m.tuiimg.com/tag/wumei/list_{{page}}.html\n爆乳::https://m.tuiimg.com/tag/baoru/list_{{page}}.html\n诱惑::https://m.tuiimg.com/tag/youhuo/list_{{page}}.html\n丰满::https://m.tuiimg.com/tag/fengman/list_{{page}}.html\n可爱::https://m.tuiimg.com/tag/keai/list_{{page}}.html\n嫩模::https://m.tuiimg.com/tag/nenmo/list_{{page}}.html\n甜美::https://m.tuiimg.com/tag/tianmei/list_{{page}}.html\n萌妹::https://m.tuiimg.com/tag/mengmei/list_{{page}}.html\n\n\n//平台\nROSI::https://m.tuiimg.com/rosi/list_{{page}}.html\n秀人网::https://m.tuiimg.com/xiuren/list_{{page}}.html\n尤蜜荟::https://m.tuiimg.com/tag/youmihui/list_{{page}}.html\n尤果网::https://m.tuiimg.com/tag/ugirls/list_{{page}}.html\n美媛馆::https://m.tuiimg.com/tag/myg/list_{{page}}.html\n魅妍社::https://m.tuiimg.com/tag/mistar/list_{{page}}.html\n爱蜜社::https://m.tuiimg.com/tag/imiss/list_{{page}}.html\n蜜桃社::https://m.tuiimg.com/tag/miitao/list_{{page}}.html\n模范学院::https://m.tuiimg.com/tag/mfstar/list_{{page}}.html\n尤物馆::https://m.tuiimg.com/tag/youwu/list_{{page}}.html\n星颜社::https://m.tuiimg.com/tag/xingyan/list_{{page}}.html\n嗲囡囡::https://m.tuiimg.com/tag/feilin/list_{{page}}.html\n花の颜::https://m.tuiimg.com/tag/huayan/list_{{page}}.html\n御女郎::https://m.tuiimg.com/tag/dkgirl/list_{{page}}.html\n花漾::https://m.tuiimg.com/tag/huayang/list_{{page}}.html\n网红馆::https://m.tuiimg.com/tag/candy/list_{{page}}.html\n第四印象::https://m.tuiimg.com/tag/disi/list_{{page}}.html\n头条女神::https://m.tuiimg.com/tag/toutiaogirls/list_{{page}}.html\n\n\n//更多分类请自己添加\n//https://m.tuiimg.com/tag/",
    "sourceComment": "v0.2\n更改正文模板\n优化key的获取\n\n\n原图标\nhttps://m.tuiimg.com/favicon.ico\n\n\n分类URL\n综合全部::https://m.tuiimg.com/meinv/list_{{page}}.html\n变量搜索::https://m.tuiimg.com/search/list_{{page}}.html,{'method':'POST','body': 'skey={{v=source.getVariable();(v!='',v!=null)?v:(source.setVariable('三度'),source.getVariable())}}'}",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "4.5",
    "sourceUrl": "@js:\npage=org.jsoup.Jsoup.parse(\n\tjava.ajax('https://m.tuiimg.com/meinv')\n).select('.end').attr('href').match(/\\d+/)[0]\n'https://m.tuiimg.com/meinv/list_' + Math.ceil(Math.random()*page) + '.html'",
    "style": "* {\n\tmargin: 0;\n\tpadding: 0\n}\nul {\n\tfont-size: 0;\n\theight: 100%;\n\toverflow-y: scroll\n}\nli {\n\tlist-style: none;\n\ttext-align: center\n}\nimg {\n\twidth: 100%;\n\theight: auto\n}"
  },
  {
    "articleStyle": 3,
    "customOrder": 530,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 1774110092242,
    "loadWithBaseUrl": true,
    "ruleArticles": ".item-box",
    "ruleContent": "<js>\n// 提取m3u8链接\nvar m3u8Match = result.match(/\"([^\"]*?index\\.m3u8[^\"]*)\"/i) \n             || result.match(/'([^']*?index\\.m3u8[^']*)'/i);\n\nvar p = '';\nif (m3u8Match) {\n    var u = m3u8Match[1]\n        .replace(/\\\\\\//g, '/')      // \\/ → /\n        .replace(/\\\\\\\\/g, '\\\\')      // \\\\ → \\\n        .trim();\n    \n    // 补全协议\n    if (u.startsWith('//')) {\n        u = 'https:' + u;\n    } else if (!u.startsWith('http')) {\n        // 需要基础URL，这里假设当前页面URL在result中或需要传入\n        u = 'https://' + u;  // 简化处理，或根据实际需求调整\n    }\n    p = u;\n}\n\n// 标题：从 span.tx-flex-sh > a 的 title 属性获取\nvar t = java.getString('.tags-box.0@a.0 @text') || '未知标题';\n\n// 标签：从 meta[name=\"description\"] 的 content 获取  \nvar b = java.getString('.mb5.1 @text') || '';\nvar updateIndex = b.indexOf('更新时间');\nif (updateIndex !== -1) {\nvar d = b.substring(updateIndex);  // 保留\"更新时间\"及之后的内容\n}\n\n`<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>${t}</title>\n<style>\n*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:-apple-system,sans-serif;background:#f0f9ff;padding:10px}\n.v-box{max-width:800px;margin:0 auto;background:white;border-radius:12px;box-shadow:0 5px 15px rgba(0,0,0,0.1);overflow:hidden}\n.header{padding:12px;border-bottom:1px solid #eee;display:flex;flex-wrap:wrap;justify-content:space-between}\n.title{font-size:18px;font-weight:600;margin-bottom:8px;width:100%}\n.tags{color:#5f6368;font-size:14px;flex:1;min-width:60%;word-break:break-all}\n.time{color:#5f6368;font-size:14px;text-align:right;flex-basis:35%}\n.v-wrap{position:relative;padding-top:56.25%;background:#000}\n.video{position:absolute;top:0;left:0;width:100%;height:100%}\n.footer{padding:8px;text-align:center;color:#5f6368;font-size:13px}\n.info-box{padding:15px;font-size:14px;line-height:1.6}\n.info-box p{margin:8px 0}\n.hint{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:rgba(0,0,0,0.7);color:#fff;padding:12px 20px;border-radius:20px;font-size:1.1rem;z-index:10;display:none}\n.controls{position:absolute;top:0;left:0;width:100%;height:4px;background:rgba(255,255,255,0.3);z-index:5;transition:opacity 0.3s}\n.progress{height:100%;background:#4a9eff;width:0}\n</style>\n</head>\n<body>\n<div class=\"v-box\">\n<div class=\"header\">\n<div class=\"title\">${t}</div>\n<div class=\"tags\">${d}</div>\n<div class=\"time\" id=\"timeDisplay\">00:00/00:00</div></div>\n<div class=\"v-wrap\">\n<div class=\"controls\"><div class=\"progress\" id=\"progressBar\"></div></div>\n<div class=\"hint\" id=\"hint\">快进中 &gt;&gt;</div>\n<video class=\"video\" id=\"v\" controls playsinline>\n<source src=\"${p}\" type=\"application/x-mpegURL\">您的浏览器不支持HTML5视频\n</video>\n</div>\n<div class=\"footer\">滑动调整进度 | 长按2倍速</div>\n</div>\n<script>\nvar v = document.getElementById('v');\nvar tDisplay = document.getElementById('timeDisplay');\nvar pBar = document.getElementById('progressBar');\nvar hint = document.getElementById('hint');\nvar startX = 0, startTime = 0;\nvar longPressTimer;\nvar sensitivity = 0.1;\nvar longPressTime = 500;\nvar hintDuration = 2000;\nfunction updateTime() {\nif (!v.duration) return;\nvar m1 = Math.floor(v.currentTime / 60);\nvar s1 = Math.floor(v.currentTime % 60);\nvar m2 = Math.floor(v.duration / 60);\nvar s2 = Math.floor(v.duration % 60);\ntDisplay.textContent = m1 + ':' + (s1 < 10 ? '0' : '') + s1 + '/' + m2 + ':' + (s2 < 10 ? '0' : '') + s2;\npBar.style.width = (v.currentTime / v.duration) * 100 + '%';}\nv.addEventListener('timeupdate', updateTime);\nv.addEventListener('loadedmetadata', updateTime);\nv.addEventListener('touchstart', function(e) {\nstartX = e.touches[0].clientX;\nstartTime = Date.now();\nif (longPressTimer) clearTimeout(longPressTimer);\nhint.style.display = 'none';\nlongPressTimer = setTimeout(function() {\nv.playbackRate = 2.0;\nhint.style.display = 'block';\nsetTimeout(function() { hint.style.display = 'none'; }, hintDuration);}, longPressTime);});\nv.addEventListener('touchmove', function(e) {\ne.preventDefault();\nclearTimeout(longPressTimer);\nvar diffX = e.touches[0].clientX - startX;\nvar change = diffX * sensitivity * v.duration / 100;\nv.currentTime = Math.max(0, Math.min(v.currentTime + change, v.duration));\nstartX = e.touches[0].clientX;updateTime();});\nv.addEventListener('touchend', function() {\nv.playbackRate = 1.0;\nclearTimeout(longPressTimer);});\n</script>\n</body>\n</html>`\n</js>\n",
    "ruleImage": "img@src",
    "ruleLink": "a@href<js> resutl='https://l5--25w3xh.wumatantoupai1.com'+result</js><js>\nresult=result.replace('oddetail', '');\n</js>\n",
    "ruleNextPage": ".laypage_next@href",
    "ruleTitle": "a@title",
    "shouldOverrideUrlLoading": "ture",
    "singleUrl": false,
    "sortUrl": "搜索::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key={{source.getVariable()}}\n国产传媒::https://l5--25w3xh.wumatantoupai1.com/t/2/\n网红头条::https://l5--25w3xh.wumatantoupai1.com/t/241/\n国产视频::https://l5--25w3xh.wumatantoupai1.com/t/163/\n探花系列::https://l5--25w3xh.wumatantoupai1.com/t/239/\n网暴黑料::https://l5--25w3xh.wumatantoupai1.com/t/232/\n自拍::https://l5--25w3xh.wumatantoupai1.com/s/wd/%E5%9B%BD%E4%BA%A7%E8%87%AA%E6%8B%8D\nIPX::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=IPX\nJUL::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=JUL\nABW::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=ABW\nJUQ::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=JUQ\nSONE::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=SONE\nMIRD::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=MIRD\nIPZZ::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=IPZZ\nOFJE::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=OFJE\nMIDV::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=MIDV\nCAWD::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=CAWD\nSONE::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=SONE\nMIAB::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=MIAB\nMIMK::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=MIMK\nSSIS::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=SSIS\nPRED::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=PRED\nDASS::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=DASS\nSTARS::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=STARS\nFSDSS::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=FSDSS\nSTART::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=START\nmiru::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=miru\n爆菊::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=爆菊\n求饶::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=求饶\n短裙::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=短裙\n浴场::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=浴场\n迷晕::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=迷晕\n嫖妓::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=嫖妓\n正妹::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=正妹\n紧身::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=紧身\n老婆::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=老婆\n中出::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=中出\n女模::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=女模\n按摩::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=按摩\n阴道::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=阴道\n开档::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=开档\n拍摄::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=拍摄\n海滩::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=海滩\n奴隶::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=奴隶\n惩罚::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=惩罚\n精液::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=精液\n嫂子::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=嫂子\n上位::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=上位\n秘书::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=秘书\n上班::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=上班\n强迫::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=强迫\n甜蜜::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=甜蜜\n温柔::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=温柔\n暴力::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=暴力\n撕烂::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=撕烂\n女星::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=女星\n卖淫::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=卖淫\n夜班::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=夜班\n尾随::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=尾随\n色狼::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=色狼\n痴汉::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=痴汉\n偶遇::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=偶遇\n巨乳::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=巨乳\n调教::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=调教\n萝莉::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=萝莉\n自慰::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=自慰\n妈妈::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=妈妈\n母子::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=母子\n石川澪::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=石川澪\n皆月光::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=皆月光\n大槻響::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=大槻響\n櫻空桃::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=櫻空桃\n波多野結衣::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=波多野結衣\n桃乃木香奈::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=桃乃木香奈\n七瀨愛麗絲::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=七瀨愛麗絲\n吉根柚莉愛::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=吉根柚莉愛\n柏木こなつ::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=柏木こなつ\n天馬ゆい::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=天馬ゆい\n夢乃あいか::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=夢乃あいか\n未步なな::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=未步なな\n倉本すみれ::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=倉本すみれ\n望月つぼみ::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=望月つぼみ\n新井リマ::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=新井リマ\n浅野こころ::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=浅野こころ\n東雲みれい::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=東雲みれい\n松本一香::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=松本一香\n木下日葵::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=木下日葵\n瀬户环奈::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=瀬户环奈\n河北彩花::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=河北彩花\n沙月惠奈::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=沙月惠奈\n美園和花::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=美園和花\n沙月芽衣::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=沙月芽衣\n藤森里穗::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=藤森里穗\n石原希望::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=石原希望\n月乃露娜::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=月乃露娜\n小宵虎南::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=小宵虎南\n七澤米亞::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=七澤米亞\n小野六花::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=小野六花\n彌生美月::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=彌生美月\n山岸逢花::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=山岸逢花\n三上悠亞::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=三上悠亞",
    "sourceComment": "┍   　  　书源作者：闻君三月　　  　┒\n├───┬────────────┤\n│！免责│本书源只提供代码进行技术│\n│！声明│交流，请于２４小时后删除│\n└────────────────┘",
    "sourceGroup": "版本",
    "sourceIcon": "https://bike-egg-cup.img12345.com/ico/heiseicon.png",
    "sourceName": "4.6",
    "sourceUrl": "https://l5--25w3xh.wumatantoupai1.com/show/2/ "
  },
  {
    "articleStyle": 1,
    "customOrder": 531,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "$.list",
    "ruleDescription": "<br><h3>{{$.vod_name}}</h3>\n<h6>[{{$.vod_score}}分] [{{$.vod_class ##\\,##] [}}]<b>发布于 {{$.vod_time}}</b></h6>\n\n<video src=\"{{$.vod_play_url ##^.*?\\$}}\" poster=\"{{$.vod_pic}}\" controls></video>",
    "ruleImage": "$.vod_pic",
    "ruleLink": "/api.php/provide/vod/?ac=detail&ids={{$.vod_id}}",
    "ruleNextPage": "page",
    "rulePubDate": "⏱️ {{$.vod_duration}}　{{$.vod_score}}分　{{$.vod_time}}",
    "ruleTitle": "$.vod_name",
    "singleUrl": false,
    "sortUrl": "精品推荐::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=20\n🔎 视频搜索::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&wd={{source.getVariable()}}\n国产视频::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=22\n主播直播::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=23\n日本无码::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=24\n日本有码::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=25\n中文字幕::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=26\n巨乳美乳::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=27\n制服丝袜::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=34\n角色扮演::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=35\n熟女人妻::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=28\n强奸乱伦::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=29\n欧美精品::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=30\n少女萝莉::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=31\n三级伦理::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=32\n成人动漫::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=33\n自拍偷拍::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=34\n制服丝袜::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=35\n口交颜射::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=36\n日本精品::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=37\nCosplay::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=38\n素人自拍::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=39\n台湾辣妹::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=40\n韩国御姐::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=41\n唯美港姐::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=42\n东南亚AV::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=43\n欺辱凌辱::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=44\n剧情介绍::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=45\n多人多P::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=46\n91探花::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=47\n网红流出::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=48\n野外露出::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=49\n古装扮演::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=50\n女优系列::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=51\n可爱学生::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=52\n风情旗袍::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=53\n兽耳系列::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=54\n瑜伽裤::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=55\n闷骚护士::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=56\n过膝袜::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=57\n网爆门::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=58\n传媒出品::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=59\n女同性恋::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=60\n男同性恋::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=61\n练腿狂魔::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=63",
    "sourceComment": "★源URL的填写链接为【list】格式\n\t网站网址\n\t网站网址/api.php/provide/vod/?ac=【list】\n\n例：\nhttps://apittzy.com\nhttps://apittzy.com/api.php/provide/vod/?ac=list\n\nps：\n\t使用【list】格式查看分类和分类id以组成分类URL\n\n\n\n★分类URL的填写链接为【detail】格式\n\t视频搜索::网站网址/api.php/provide/vod/?ac=【detail】&pg={{page}}&wd=关键词\n\t分类名称::网站网址/api.php/provide/vod/?ac=【detail】&pg={{page}}&t=分类id\n\n例：\n\t视频搜索::https://apittzy.com/api.php/provide/vod/?ac=detail&pg={{page}}&wd=按摩\n\t精品推荐::https://apittzy.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=1\n\nps：\n\t分类URL写成【list】格式也行，但是没有详细信息。需要通过正文链接跳转正文页再填写正文规则。而且没有封面！\n\n\n\n★正文规则\n\t因为分类URL使用了【detail】格式，需要的信息都显示了。(视频链接)\n\t所以我们在描述规则填写正文规则就行了，这样子就省的再跳转一次正文链接了。\n\t但是链接规则还是要写的，不然不会加载列表。\n\n\n\n☆【vod】和【art】\n视频分类链接为【vod】格式\n\t网站网址/api.php/provide/vod/?ac=list\n图文分类链接为【art】格式\n\t网站网址/api.php/provide/art/?ac=list\n通过【list】格式查看分类和分类id以组成分类URL\n\nps：\n\t图片和小说链接都是【art】格式，这样子不好分割，建议把小说分类相关链接移除\n\t因为【art】格式的【detail】链接并不会显示全部套图，所以需要填写正确的链接规则跳转正文页再填写正文规则而不是直接在描述规则处填写规则\n\n\n\n☆详情页链接规则\n\t详情页链接仅支持【detail】格式\n网站网址/api.php/provide/(vod/art)/?ac=detail&ids=(视频id/图文id)\n\n\t如果分类URL只填写了网址，那么链接规则补充剩下的链接就行了\n例：\n\t/api.php/provide/vod/?ac=detail&ids=视频id\n❗仅限【vod】/【art】单格式使用\n\n\t如果订阅同时写了【vod】和【art】两种格式，链接就需要使用js判定\n@js:\nif(baseUrl.match(/art/)){\n\t网站网址/api.php/provide/art/?ac=detail&ids={{$.art_id}}\n}else{\n\t网站网址/api.php/provide/vod/?ac=detail&ids={{$.vod_id}}\n}\nps：\n\t使用两种格式时，此js在正文规则也会需要用到。\n\n\n\n\n\n‼️以下网址加上【list】链接可更改为json格式，查看分类及分类id\n\n\t因为json链接格式固定？\n\t所以修改一下网站之间的分类URL差别即可使用此订阅格式套用，，，大概\n\nps：\n\t注意【list】和【detail】格式以及【vod】和【art】链接的差别\n\n\n共30个网址：\n\n\t★鲨鱼::https://shayuapi.com\n\t\tps：老朋友了\n\n\n\t老鸭资源失效::http://laoyazy50.cc\n\t\tps：网站有时效性？\n\n\n\t老鸭资源2失效::https://api.apilyzy.com\n\n\n\n\t水蜜桃失效::http://51smt4.xyz\n\n\n\t99资源失效::http://99zy.pw\n\n\n\t99资源吧失效::http://99zyba.com\n\n\n\t丝袜资源失效::http://siwazyw.net\n\n\n\t浪潮资源失效::http://langchaozy6.com\n\n\n\tCK资源失效::http://www.feifei67.com\n\n\n\t大雕资源失效::http://www.dd-01.com\n\n\n\t银龙资源失效::https://yinlong.tv\n\n\n\t苍天资源失效::http://cj.cangtiancj.com\n\n\n\t骚色资源失效::http://api.saosezy.icu\n\n\n\t芒果资源失效::https://mgzyz1.com\n\n\n\t酷豆资源失效::https://kudouzy.com\n\n\n\t酷伦理资源失效::https://api.kudian70.com\n\n\n\t速播资源失效::https://api.suboapi.com\n\n\n\t国产精品::https://zy.difi.life\n\n\n\t痴汉队长失效::https://javcaptain.com\n\n\n\t秀色资源失效::https://api.xiuseapi.com\n\n\n\t苹果资源失效::https://www.pg111222.com\n\n\n\t茄子资源失效::http://www.qiezizy8.com\n\n\n\t辣椒资源失效::https://www.lajiaozy18.com\n\n\n\t花椒资源失效::https://apihjzy.com/api.php/provide/vod/?ac=list\n\t\tps：网站无法打开，json链接可以\n\n\n\t桃色资源失效::https://api.taoseapi.com/api.php/provide/vod/?ac=list\n\t\tps：网站无法打开，json链接可以\n\n\n\t乐播资源::https://lbapi9.com/api.php/provide/vod/?ac=list\n\t\tps：网站无法打开，json链接可以\n\n\n\t佳丽资源失效::https://jializyzapi.com/api.php/provide/vod/?ac=list\n\t\tps：网站无法打开，json链接可以\n\n\n\t番号资源::http://fhapi9.com/api.php/provide/vod/?ac=list\n\t\tps：网站无法打开，json链接可以\n\n\n\tx8优酷失效::https://gov.gooder.bar\n\t\tps：没有vod格式？\n\n\n\t土狗采集失效::http://vip-04.tgzy.cc\n\t\tpa：vod格式好像是音乐？\n\n\n\n☆使用【vod】和【art】两种链接的正文规则参考\n<br><h3>{{$.list..vod_name||$.list..art_name}}</h3>\n<h6>[{{$.list..type_name}}]<b>发布于 {{$.list..vod_time||$.list..art_time}}</b></h6>\n\n<video src=\"{{$.list..vod_play_url ##^.*?\\$}}\" poster=\"{{$.list..vod_pic}}\" controls>视频加载失败</video>\n\n<div id=\"TúPiàn\">\n{{$.list..art_content ##</?(br|p)>}}\n</div>\n<link rel=\"stylesheet\" href=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.2/viewer.min.css\">\n<script src=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.2/viewer.min.js\"></script>\n<script>\n  new Viewer(\n    document.getElementById(\"TúPiàn\")    ,{\n//设置图片地址来源\n    url: 'src',\n//是否显示图片标题(true/false)\n    title: false,\n//设置播放间隔(单位毫秒，1秒=1000毫秒)\n    interval: 3000\n    }\n  );\n</script>\n\n@js:\nif(baseUrl.match(/art/)){\n\tresult.replace(/<vid[\\s\\S]+deo>/,'')\n}else{\n\tresult.replace(/<div[\\s\\S]+ipt>/,'')\n}",
    "sourceGroup": "版本",
    "sourceIcon": "https://i.postimg.cc/sXtXHZDM/IMG_20220716_190738.png",
    "sourceName": "4.7报废",
    "sourceUrl": "https://slapibf.com/api.php/provide/vod/?ac=list",
    "style": "h3{text-align:center}\nh6{margin-bottom:0}\nb{float:right}\n\nvideo{width:100%;max-height:285px;border-radius:5px}"
  },
  {
    "articleStyle": 0,
    "customOrder": 534,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "4.8",
    "sourceUrl": "https://www.xn--vctr31ecwaz4k.com/"
  },
  {
    "articleStyle": 1,
    "customOrder": 535,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "@js:\nJSON.stringify({\n  'User-Agent': \"Mozilla/5.0 (Linux; Android 15; V2304A Build/AP3A.240905.015.A2; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/132.0.6834.163 Mobile Safari/537.36\",\n  'sec-ch-ua-platform': \"\\\"Android\\\"\",\n  'X-Requested-With': \"XMLHttpRequest\",\n  'Referer': \"https://cn.royalcams.com/female/tags/recordable\",\n  'Connection':\"keep-alive\",\n  'Accept-language': \"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7\"\n})",
    "lastUpdateTime": 1771719337202,
    "loadWithBaseUrl": true,
    "ruleArticles": "models[*]",
    "ruleImage": "{$.thumb_image}@js:result.replace(/{ext}/g, 'jpg')",
    "ruleLink": "https://{$.esid}.bcvcdn.com/hls/stream_{$.username}/playlist.m3u8",
    "ruleNextPage": "page",
    "rulePubDate": "👥 观众: {$.viewers}⭐ 粉丝: {$.f}",
    "ruleTitle": "$.display_name",
    "singleUrl": false,
    "sortUrl": "所有::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36\n青少年18::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=teens-18\n中等乳房::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=medium-tits\n波霸::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=big-tits\n超级波霸::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=huge-tits\n主妇::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=housewives\n亚洲::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=asian\n无毛::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=shaved-pussy\n大学生::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=college-girls\n大屁股::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=big-ass\n白人女孩::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=white-girls\n娇小体型::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=petite\n平胸::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=72&category=small-tits\n拉丁裔::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=latina\n捆绑::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=bondage\n曲线美::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=curvy\n潮喷::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=squirt\n熟女::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=mature\n物神::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=fetish\n玩具::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=toys\n红发::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=redhead\n肛交::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=anal\n褐色女郎::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=brunette\n辣妹::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=babes\nBBW::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=bbw\n多人::https://cn.royalcams.com/tools/listing_v3.php?livetab=couples&is_mobile=true&offset={{(page-1)*36}}&limit=36",
    "sourceGroup": "版本",
    "sourceIcon": "https://i.wlicdn.com/wl/000/000/193/c0c5540e263feee85fbb8da2b1a888ca.png",
    "sourceName": "4.9",
    "sourceUrl": "https://cn.royalcams.com"
  },
  {
    "articleStyle": 0,
    "customOrder": 539,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceComment": "使用需搭配加速器 不要相信里面的任何广告\n点击弹窗下方红色按钮即可跳过广告\n欢迎各位大佬对本源进行二创\n书源交流群：374309405（加群可获取福利）",
    "sourceGroup": "版本",
    "sourceIcon": "https://ogfap.com/logo.png",
    "sourceName": "5.0需要梯子",
    "sourceUrl": "https://xxxtik.com/"
  },
  {
    "articleStyle": 2,
    "customOrder": 540,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".main@li",
    "ruleContent": "all##ul##details",
    "ruleImage": "img@realsrc",
    "ruleLink": "a@href",
    "ruleNextPage": "page",
    "rulePubDate": "{{@@.love@text}} {{@@span@text}}",
    "ruleTitle": "a@text",
    "singleUrl": false,
    "sortUrl": "性感美女::https://m.tuiimg.com/xingganmeinv/list_{{page}}.html\n清纯美女::https://m.tuiimg.com/qingchunmeinv/list_{{page}}.html\n妹子图::https://m.tuiimg.com/meizitu/list_{{page}}.html\n美女写真::https://m.tuiimg.com/meinvxiezhen/list_{{page}}.html",
    "sourceComment": "",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "5.1",
    "sourceUrl": "https://m.tuiimg.com"
  },
  {
    "articleStyle": 0,
    "customOrder": 544,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "header": "{\n\"User-Agent\": \"Mozilla/5.0 (Linux; U; Android 8.1.0; zh-CN; MI 8 Lite Build/OPM1.171019.019) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 UCBrowser/13.2.0.1100 Mobile Safari/537.36\"\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "li",
    "ruleDescription": "",
    "ruleLink": "text.一键导入@onclick",
    "ruleNextPage": "",
    "rulePubDate": "span@text",
    "ruleTitle": "a@text",
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "https://m.acgnfl.com/24/07/content_33/525867/007.webp",
    "sourceName": "5.2",
    "sourceUrl": "https://www.kxmanhua1.com/manga/library"
  },
  {
    "articleStyle": 2,
    "customOrder": 545,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.item",
    "ruleContent": "<js>\n\nfunction getNext(){\n\n//下一页url，链接不全请补全\nnextUrl = java.getString('class.next@href')\n\n\n\n\t\tif(nextUrl!=\"\"){\n\t\t\t\tp++\n\t\tjava.toast('p'+p+'加载中...')\n\t\t\t\treturn getHtml()\n\t\t\t}\n\njava.toast('加载完成')\n\t\treturn result\n\t}\n\n\n\n\n\nfunction getHtml(){\ntry{\n\t\tajax = java.ajax(nextUrl)\n\t\tjava.setContent(ajax)\n\t\tresult += ajax\n\t\treturn getNext()\n\t}\n\n//ajax下一页报错时，会重新尝试两次。\n//超过三次失败就不再加载。\ncatch (err){\n\t\tif(e<4){\n\t\t\t\te++\n\t\t\tjava.toast('p'+p+'加载中...')\n\t\t\t\treturn getHtml()\n\t\t\t}\n\t\treturn result\n\t}\n}\n\np = e = 1\ngetNext()\n</js>\n\n\ntag.noscript@tag.img@src\n<js>\nli='\\n'\nlist=result.split('\\n')\nfor(i in list){\n\t\tli += '<li><img src=\"https://www.q10drfc.com/wp-content/themes/justnews/images/logo.png\" data-src=\"'+list[i]+'\"></li>\\n'\n\t}\nli\n</js>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0\">\n\n\n<ul id=\"box\">\n{{result}}\n</ul>\n\n\n<link rel=\"stylesheet\" href=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.1/viewer.min.css\">\r\n<script src=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.1/viewer.min.js\"></script>\n<script>\n\troot = document.getElementById('box')\n\tlazy = new IntersectionObserver(entires => {\n\t\tentires.forEach(item => {\n\t\t\tif(item.isIntersecting){\n\t\t\t\titem=item.target\n\t\t\t\titem.src=item.getAttribute('data-src')\n\t\t\t\tlazy.unobserve(item)\n\t\t\t}\n\t\t})\n\t}, {\n\t\troot: root,\n\t\tthreshold: [0],\n\t\trootMargin:\"0px\"\n\t})\n\nimgs = document.getElementsByTagName('img')\nArray.from(imgs).forEach(item => {\n\t\tlazy.observe(item)\n\t})\n\n//查看大图插件\nnew Viewer(root,{title:false,interval:3000})\n</script>",
    "ruleDescription": "",
    "ruleImage": "tag.img@src##.*src=|&.*",
    "ruleLink": "tag.a.0@href",
    "ruleNextPage": "class.next@href",
    "rulePubDate": "{{@@class.item-category@text}} &nbsp; {{@@class.item-meta-left@text}}",
    "ruleTitle": "class.item-title@text",
    "singleUrl": false,
    "sortUrl": "美女图片::https://www.q10drfc.com/category/mntp\n三度_69::https://www.q10drfc.com/tag/%e4%b8%89%e5%ba%a6_69\n\n变量搜索::https://www.q10drfc.com/?s={{v=source.getVariable();(v!='',v!=null)?v:(source.setVariable('青春'),source.getVariable())}}\n\n秀人网::https://www.q10drfc.com/category/mntp/%e7%a7%80%e4%ba%ba%e7%bd%91\n爱尤物::https://www.q10drfc.com/category/mntp/%e7%88%b1%e5%b0%a4%e7%89%a9\n语画界::https://www.q10drfc.com/category/mntp/%e8%af%ad%e7%94%bb%e7%95%8c\n花漾show::https://www.q10drfc.com/category/mntp/%e8%8a%b1%e6%bc%beshow\n模范学院::https://www.q10drfc.com/category/mntp/%e6%a8%a1%e8%8c%83%e5%ad%a6%e9%99%a2\n美媛馆::https://www.q10drfc.com/category/mntp/%e7%be%8e%e5%aa%9b%e9%a6%86\n喵糖映画::https://www.q10drfc.com/category/mntp/%e5%96%b5%e7%b3%96%e6%98%a0%e7%94%bb\n雅拉伊::https://www.q10drfc.com/category/mntp/%e9%9b%85%e6%8b%89%e4%bc%8a\n爱蜜社::https://www.q10drfc.com/category/mntp/%e7%88%b1%e8%9c%9c%e7%a4%be\n嗲囡囡::https://www.q10drfc.com/category/mntp/%e5%97%b2%e5%9b%a1%e5%9b%a1\n星颜社::https://www.q10drfc.com/category/mntp/%e6%98%9f%e9%a2%9c%e7%a4%be\n尤美::https://www.q10drfc.com/category/mntp/%e5%b0%a4%e7%be%8e\n尤蜜荟::https://www.q10drfc.com/category/mntp/%e5%b0%a4%e8%9c%9c%e8%8d%9f\n头条女神::https://www.q10drfc.com/category/mntp/%e5%a4%b4%e6%9d%a1%e5%a5%b3%e7%a5%9e\n糖果画报::https://www.q10drfc.com/category/mntp/%e7%b3%96%e6%9e%9c%e7%94%bb%e6%8a%a5\n魅妍社::https://www.q10drfc.com/category/mntp/%e9%ad%85%e5%a6%8d%e7%a4%be\n尤物馆::https://www.q10drfc.com/category/mntp/%e5%b0%a4%e7%89%a9%e9%a6%86\n蜜桃社::https://www.q10drfc.com/category/mntp/%e8%9c%9c%e6%a1%83%e7%a4%be\n花の颜::https://www.q10drfc.com/category/mntp/%e8%8a%b1%e3%81%ae%e9%a2%9c\nDK御女郎::https://www.q10drfc.com/category/mntp/dk%e5%be%a1%e5%a5%b3%e9%83%8e\n猫萌榜::https://www.q10drfc.com/category/mntp/%e7%8c%ab%e8%90%8c%e6%a6%9c\n尤果网::https://www.q10drfc.com/category/mntp/%e5%b0%a4%e6%9e%9c%e7%bd%91\n星乐园::https://www.q10drfc.com/category/mntp/%e6%98%9f%e4%b9%90%e5%9b%ad\n猎女神::https://www.q10drfc.com/category/mntp/%e7%8c%8e%e5%a5%b3%e7%a5%9e\n克拉女神::https://www.q10drfc.com/category/mntp/%e5%85%8b%e6%8b%89%e5%a5%b3%e7%a5%9e\n熊川纪信::https://www.q10drfc.com/category/mntp/%e7%86%8a%e5%b7%9d%e7%ba%aa%e4%bf%a1\n果团网::https://www.q10drfc.com/category/mntp/%e6%9e%9c%e5%9b%a2%e7%bd%91\n轰趴猫::https://www.q10drfc.com/category/mntp/%e8%bd%b0%e8%b6%b4%e7%8c%ab\n兔几盟::https://www.q10drfc.com/category/mntp/%e5%85%94%e5%87%a0%e7%9b%9f\n波萝社::https://www.q10drfc.com/category/mntp/%e6%b3%a2%e8%90%9d%e7%a4%be\n美腿宝贝::https://www.q10drfc.com/category/mntp/%e7%be%8e%e8%85%bf%e5%ae%9d%e8%b4%9d\n推女神::https://www.q10drfc.com/category/mntp/%e6%8e%a8%e5%a5%b3%e7%a5%9e\n模特联盟::https://www.q10drfc.com/category/mntp/%e6%a8%a1%e7%89%b9%e8%81%94%e7%9b%9f\n激萌文化::https://www.q10drfc.com/category/mntp/%e6%bf%80%e8%90%8c%e6%96%87%e5%8c%96\n优星馆::https://www.q10drfc.com/category/mntp/%e4%bc%98%e6%98%9f%e9%a6%86\n薄荷叶::https://www.q10drfc.com/category/mntp/%e8%96%84%e8%8d%b7%e5%8f%b6\n萌缚::https://www.q10drfc.com/category/mntp/%e8%90%8c%e7%bc%9a\n推女郎::https://www.q10drfc.com/category/mntp/%e6%8e%a8%e5%a5%b3%e9%83%8e\n爱丝::https://www.q10drfc.com/category/mntp/%e7%88%b1%e4%b8%9d\n影私荟::https://www.q10drfc.com/category/mntp/%e5%bd%b1%e7%a7%81%e8%8d%9f\n村长的宝物::https://www.q10drfc.com/category/mntp/%e6%9d%91%e9%95%bf%e7%9a%84%e5%ae%9d%e7%89%a9\nDDY::https://www.q10drfc.com/category/mntp/ddy\n顽味生活::https://www.q10drfc.com/category/mntp/%e9%a1%bd%e5%91%b3%e7%94%9f%e6%b4%bb\n51Modo::https://www.q10drfc.com/category/mntp/51modo\nRosi::https://www.q10drfc.com/category/mntp/rosi\nDisi::https://www.q10drfc.com/category/mntp/disi\nIShow::https://www.q10drfc.com/category/mntp/ishow\nPans::https://www.q10drfc.com/category/mntp/pans\n中国腿模::https://www.q10drfc.com/category/mntp/%e4%b8%ad%e5%9b%bd%e8%85%bf%e6%a8%a1\nVGirl::https://www.q10drfc.com/category/mntp/vgirl\nRu1mm::https://www.q10drfc.com/category/mntp/ru1mm\nSityle::https://www.q10drfc.com/category/mntp/sityle\n美女写真杂烩::https://www.q10drfc.com/category/mntp/%e7%be%8e%e5%a5%b3%e5%86%99%e7%9c%9f%e6%9d%82%e7%83%a9\n中国美女写真::https://www.q10drfc.com/category/mntp/%e4%b8%ad%e5%9b%bd%e7%be%8e%e5%a5%b3%e5%86%99%e7%9c%9f\n台湾美女写真::https://www.q10drfc.com/category/mntp/%e5%8f%b0%e6%b9%be%e7%be%8e%e5%a5%b3%e5%86%99%e7%9c%9f\n韩国美女写真::https://www.q10drfc.com/category/mntp/%e9%9f%a9%e5%9b%bd%e7%be%8e%e5%a5%b3%e5%86%99%e7%9c%9f\n日本美女写真::https://www.q10drfc.com/category/mntp/%e6%97%a5%e6%9c%ac%e7%be%8e%e5%a5%b3%e5%86%99%e7%9c%9f",
    "sourceComment": "原图标\nhttps://www.q10drfc.com/wp-includes/images/w-logo-blue-white-bg.png",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "5.3网页还能用",
    "sourceUrl": "https://www.q10drfc.com/category/mntp",
    "style": "*{\n\tmargin: 0;\n\tpadding: 0\n}\nul{\n\tfont-size: 0;\n\theight: 100%;\n\toverflow-y: scroll\n}\nli{\n\tlist-style: none;\n\ttext-align: center\n}\nimg{\n\twidth:100%;\n\theight:auto\n}",
    "variableComment": ""
  },
  {
    "articleStyle": 0,
    "customOrder": 547,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.archive-list@class.col-12@class.waterfall-item",
    "ruleContent": "<html>\n    <head>\n        <meta charset=\"UTF-8\"></meta>\n        <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge, chrome=1\"></meta>\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no\"></meta>\n        <meta name=\"robots\" content=\"max-image-preview:large\"></meta>\n        <link rel=\"alternate\" type=\"application/rss+xml\" title=\"日式JK » Feed\" href=\"https://www.jk.rs/feed\"></link>\n        <link rel=\"alternate\" type=\"application/rss+xml\" title=\"日式JK » 评论 Feed\" href=\"https://www.jk.rs/comments/feed\"></link>\n        <link rel=\"alternate\" type=\"application/rss+xml\" title=\"日式JK » 夏的JK 评论 Feed\" href=\"https://www.jk.rs/2024/09/06/910.html/feed\"></link>\n        <style id=\"classic-theme-styles-inline-css\" type=\"text/css\">\n            \n/*! This file is auto-generated */\n.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}\n\n        </style>\n\n        <link rel=\"stylesheet\" id=\"jimu-lightgallery-css\" href=\"https://www.jk.rs/wp-content/plugins/nicetheme-jimu/modules/base/assets/lightGallery/css/lightgallery.min.css\" type=\"text/css\" media=\"all\"></link>\n        <link rel=\"stylesheet\" id=\"jimu-css\" href=\"https://www.jk.rs/wp-content/plugins/nicetheme-jimu/modules/jimu.css\" type=\"text/css\" media=\"all\"></link>\n        <link rel=\"stylesheet\" id=\"jimu-blocks-css\" href=\"https://www.jk.rs/wp-content/plugins/nicetheme-jimu/modules/blocks.css\" type=\"text/css\" media=\"all\"></link>\n        <link rel=\"stylesheet\" id=\"glightbox-css\" href=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/plugins/glightbox/glightbox.min.css\" type=\"text/css\" media=\"all\"></link>\n        <link rel=\"stylesheet\" id=\"bootstrap-css\" href=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/plugins/bootstrap/bootstrap.min.css\" type=\"text/css\" media=\"all\"></link>\n        <link rel=\"stylesheet\" id=\"iconfont-css\" href=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/plugins/iconfont/iconfont.css\" type=\"text/css\" media=\"all\"></link>\n        <link rel=\"stylesheet\" id=\"animate-css\" href=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/css/animate.min.css\" type=\"text/css\" media=\"all\"></link>\n        <link rel=\"stylesheet\" id=\"reset-css\" href=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/css/reset.css\" type=\"text/css\" media=\"all\"></link>\n        <link rel=\"stylesheet\" id=\"style-css\" href=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/style.css\" type=\"text/css\" media=\"all\"></link>\n\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-includes/js/jquery/jquery.min.js\" id=\"jquery-core-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-includes/js/jquery/jquery-migrate.min.js\" id=\"jquery-migrate-js\"></script>\n        <script defer=\"\" type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/plugins/nicetheme-jimu/library/static/alpine.min.js\" id=\"alpine-defer-js\"></script>\n        <link rel=\"canonical\" href=\"https://www.jk.rs/2024/09/06/910.html\"></link>\n        <link rel=\"alternate\" type=\"application/json+oembed\" href=\"https://www.jk.rs/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.jk.rs%2F2024%2F09%2F06%2F910.html\"></link>\n        <link rel=\"alternate\" type=\"text/xml+oembed\" href=\"https://www.jk.rs/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.jk.rs%2F2024%2F09%2F06%2F910.html&format=xml\"></link>\n        <link rel=\"pingback\" href=\"https://www.jk.rs/xmlrpc.php\"></link>\n        <link rel=\"icon\" href=\"https://www.jk.rs/wp-content/uploads/2024/05/cropped-ICO2-32x32.png\" sizes=\"32x32\"></link>\n        <link rel=\"icon\" href=\"https://www.jk.rs/wp-content/uploads/2024/05/cropped-ICO2-192x192.png\" sizes=\"192x192\"></link>\n        <link rel=\"apple-touch-icon\" href=\"https://www.jk.rs/wp-content/uploads/2024/05/cropped-ICO2-180x180.png\"></link>\n        <meta name=\"msapplication-TileImage\" content=\"https://www.jk.rs/wp-content/uploads/2024/05/cropped-ICO2-270x270.png\"></meta>\n        <style>\n            \n            @font-face {\n                font-family: 'DINAlternate-Bold';\n                src: url(https://www.jk.rs/wp-content/themes/Mango-1.1.1/fonts/DINAlternate-Bold.ttf) format(\"truetype\");\n                font-style: normal;\n            }\n\n            .font-price {\n                font-family: 'DINAlternate-Bold', arial, sans-serif\n            }\n\n            .font-number {\n                font-family: 'DINAlternate-Bold', arial, sans-serif\n            }\n        \n        </style>\n        <script>\n            \n    window.GeetestCaptcha = {\n        runCaptcha: () => true\n    }\n\n        </script>\n        <style id=\"theia-sticky-sidebar-stylesheet-TSS\">\n            .theiaStickySidebar:after {content: \"\"; display: table; clear: both;}\n        </style>\n    </head>\n    <body class=\"post-template-default single single-post postid-910 single-format-image\" style=\"transform: none;\">\n{{@class.masonry-list@html}}\n\n                <a href=\"javascript:\" class=\"login-close btn btn-light btn-icon btn-rounded btn-sm \">\n                    <span>\n                        <i class=\"iconfont icon-guanbi_close1\"></i>\n                    </span>\n                </a>\n            </div>\n        </div>\n        <div class=\"mobile-overflow\"></div>\n        <script>\n        </script>\n        <script defer=\"\" src=\"https://tj.u2.cm/random-string.js\" data-website-id=\"5d82d153-8c11-4c5c-b2bf-36be4f5fe845\"></script>\n        <script type=\"text/javascript\" id=\"wpopt_front-js-extra\">\n            \n/* <![CDATA[ */\nvar wpopt = {\"ajax_url\":\"https:\\/\\/www.jk.rs\\/wp-admin\\/admin-ajax.php\",\"ajax_name\":\"wp_opt\",\"is_post\":\"1\",\"post_id\":\"910\",\"module_post_views_open\":\"1\"};\n/* ]]> */\n\n        </script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/plugins/wp-opt/static/js/front.min.js\" id=\"wpopt_front-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/plugins/nicetheme-jimu/modules/base/assets/lightGallery/js/lightgallery-all.min.js\" id=\"jimu-lightgallery-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/plugins/nicetheme-jimu/modules/base/assets/lightGallery/js/lightgallery-load.min.js\" id=\"jimu-lightgallery-load-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/plugins/nicetheme-jimu/modules/jimu.js\" id=\"jimu-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/plugins/nicetheme-module-bigger-share-module/static/nice-poster.js\" id=\"nice-poster-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/plugins/nicetheme-module-nice-blocks/assets/blocks.js\" id=\"nc-blocks-js-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/plugins/vanilla-lazyload/lazyload.min.js\" id=\"lazyload-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/plugins/shuffle/shuffle.min.js\" id=\"shuffle-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/js/ajax-comment.js\" id=\"ajax-comments-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-includes/js/clipboard.min.js\" id=\"clipboard-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/plugins/glightbox/glightbox.min.js\" id=\"glightbox-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/js/image-post.js\" id=\"imagepost-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/plugins/theia-sticky-sidebar/ResizeSensor.min.js\" id=\"ResizeSensor-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/plugins/theia-sticky-sidebar/theia-sticky-sidebar.min.js\" id=\"stickySidebar-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/js/nicetheme.js\" id=\"nicetheme-js\"></script>\n        <div class=\"nice-popup\" :class=\"{ 'nice-popup-open': itemToBeRemoved.length > 0 }\" x-data=\"imageDeletePopupData\">\n            <div class=\"nice-popup-overlay\" @click=\"itemToBeRemoved = ''\"></div>\n            <div class=\"nice-popup-body\">\n                <div class=\"nice-popup-close\" @click=\"itemToBeRemoved = ''\">\n                    <span class=\"svg-white\"></span>\n                    <span class=\"svg-dark\"></span>\n                </div>\n                <div class=\"nice-popup-content\">\n                    <div class=\"popup-body\">\n                        <div class=\"text-center\">\n                            <i class=\"text-64 text-danger iconfont icon-guansuo_lock-one my-3\"></i>\n                            <h2 class=\"text-lg mb-4\"> 您确定要删除此图像吗？ </h2>\n                        </div>\n                    </div>\n                    <div class=\"popup-footer\">\n                        <div class=\"row g-2 g-md-3\">\n                            <div class=\"col\">\n                                <button @click=\"itemToBeRemoved = ''\" class=\"btn btn-light btn-block\"> 取消 </button>\n                            </div>\n                            <div class=\"col\">\n                                <button @click=\"remove\" class=\"btn btn-primary btn-block\"> 移除 </button>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </body>\n</html>",
    "ruleImage": "",
    "ruleLink": "@class.item-content@class.item-title@a@href",
    "ruleNextPage": "page",
    "ruleTitle": "@class.item-content@text",
    "singleUrl": false,
    "sortUrl": "jk::jk/page/{{page}}",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "5.4报废",
    "sourceUrl": "https://www.jk.rs/",
    "style": ""
  },
  {
    "articleStyle": 0,
    "customOrder": 548,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceComment": "视频",
    "sourceGroup": "版本",
    "sourceIcon": "https://img.fy6b.com/2024/06/13/7ca5da52f9cc0.jpg",
    "sourceName": "5.5",
    "sourceUrl": "https://www.htng415.vip:9527/"
  },
  {
    "articleStyle": 0,
    "customOrder": 553,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 1775590497300,
    "loadWithBaseUrl": true,
    "ruleArticles": "article",
    "ruleContent": "class.dplayer@all<js>\nresult=result.match(/http.*m3u8/)[0]##\\</js>{{@@title@text##正在播放:|永久.*}}\n<video src=\"{{result}}\" width=\"100%\" height=\"auto\" controls></video>",
    "ruleImage": "@js:\"https://mgtv-bbqn.oss-cn-beijing.aliyuncs.com/1/2310310103284A29582395A850D3A0F5C26862354MzFE/SrRlbr0.gif\"",
    "ruleLink": "a.0@href",
    "ruleNextPage": "page",
    "rulePubDate": "class.post-card-info@text",
    "ruleTitle": "h2@text##热榜.*",
    "singleUrl": false,
    "sortUrl": "学生::/search/学生/{{page}}/\n全部①::/<,page/{{page}}/>\n全部②::/page/3/\n全部③::/page/5/\n搜索::/search/{{source.getVariable()}}/{{page}}/\n偷情::/search/偷情/{{page}}/\n白虎::/search/白虎/{{page}}/\n反差::/search/反差/{{page}}/\n极品::/search/极品/{{page}}/\n萝莉::/search/萝莉/{{page}}/\n00后::/search/00后/{{page}}/\n女同::/search/女同/{{page}}/\n双马尾::/search/双马尾/{{page}}/\n学院::/search/学院/{{page}}/\n高三::/search/高三/{{page}}/\n高中::/search/高中/{{page}}/\n少女::/search/少女/{{page}}/\n情趣::/search/情趣/{{page}}/\n自拍::/search/自拍/{{page}}/\n大学::/search/大学/{{page}}/\n大一::/search/大一/{{page}}/\n学妹::/search/学妹/{{page}}/\n校花::/search/校花/{{page}}/\n调教::/search/调教/{{page}}/\n女神::/search/女神/{{page}}/\n少妇::/search/少妇/{{page}}/\n巨乳::/search/巨乳/{{page}}/\n孕妇::/search/孕妇/{{page}}/\n口::/search/口交/{{page}}/\n精::/search/精/{{page}}/",
    "sourceComment": "//多个视频不会写\n发:https://heiliao.su",
    "sourceGroup": "版本",
    "sourceIcon": "http://p6.itc.cn/images01/20201202/8d012ed623d647a78635557e7d235ab6.jpeg",
    "sourceName": "5.6",
    "sourceUrl": "https://heiliao1076.pro/"
  },
  {
    "articleStyle": 3,
    "customOrder": 554,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 1774018195635,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.ucontent@li",
    "ruleContent": "<js>\n// 提取m3u8链接\nvar m3u8Match = result.match(/\"([^\"]*?index\\.m3u8[^\"]*)\"/i) \n             || result.match(/'([^']*?index\\.m3u8[^']*)'/i);\n\nvar p = '';\nif (m3u8Match) {\n    var u = m3u8Match[1]\n        .replace(/\\\\\\//g, '/')      // \\/ → /\n        .replace(/\\\\\\\\/g, '\\\\')      // \\\\ → \\\n        .trim();\n    \n    // 补全协议\n    if (u.startsWith('//')) {\n        u = 'https:' + u;\n    } else if (!u.startsWith('http')) {\n        // 需要基础URL，这里假设当前页面URL在result中或需要传入\n        u = 'https://' + u;  // 简化处理，或根据实际需求调整\n    }\n    p = u;\n}\n\n// 标题：从 span.tx-flex-sh > a 的 title 属性获取\nvar t = java.getString('.single-strong @text') || '未知标题';\n\n// 标签：从 meta[name=\"description\"] 的 content 获取  \nvar b = java.getString('meta[name=\"description\"]@content') || '';\nvar updateIndex = b.indexOf('更新时间');\nif (updateIndex !== -1) {\nvar d = b.substring(updateIndex);  // 保留\"更新时间\"及之后的内容\n}\n\n`<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>${t}</title>\n<style>\n*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:-apple-system,sans-serif;background:#f0f9ff;padding:10px}\n.v-box{max-width:800px;margin:0 auto;background:white;border-radius:12px;box-shadow:0 5px 15px rgba(0,0,0,0.1);overflow:hidden}\n.header{padding:12px;border-bottom:1px solid #eee;display:flex;flex-wrap:wrap;justify-content:space-between}\n.title{font-size:18px;font-weight:600;margin-bottom:8px;width:100%}\n.tags{color:#5f6368;font-size:14px;flex:1;min-width:60%;word-break:break-all}\n.time{color:#5f6368;font-size:14px;text-align:right;flex-basis:35%}\n.v-wrap{position:relative;padding-top:56.25%;background:#000}\n.video{position:absolute;top:0;left:0;width:100%;height:100%}\n.footer{padding:8px;text-align:center;color:#5f6368;font-size:13px}\n.info-box{padding:15px;font-size:14px;line-height:1.6}\n.info-box p{margin:8px 0}\n.hint{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:rgba(0,0,0,0.7);color:#fff;padding:12px 20px;border-radius:20px;font-size:1.1rem;z-index:10;display:none}\n.controls{position:absolute;top:0;left:0;width:100%;height:4px;background:rgba(255,255,255,0.3);z-index:5;transition:opacity 0.3s}\n.progress{height:100%;background:#4a9eff;width:0}\n</style>\n</head>\n<body>\n<div class=\"v-box\">\n<div class=\"header\">\n<div class=\"title\">${t}</div>\n<div class=\"tags\">${d}</div>\n<div class=\"time\" id=\"timeDisplay\">00:00/00:00</div></div>\n<div class=\"v-wrap\">\n<div class=\"controls\"><div class=\"progress\" id=\"progressBar\"></div></div>\n<div class=\"hint\" id=\"hint\">快进中 &gt;&gt;</div>\n<video class=\"video\" id=\"v\" controls playsinline>\n<source src=\"${p}\" type=\"application/x-mpegURL\">您的浏览器不支持HTML5视频\n</video>\n</div>\n<div class=\"footer\">滑动调整进度 | 长按2倍速</div>\n</div>\n<script>\nvar v = document.getElementById('v');\nvar tDisplay = document.getElementById('timeDisplay');\nvar pBar = document.getElementById('progressBar');\nvar hint = document.getElementById('hint');\nvar startX = 0, startTime = 0;\nvar longPressTimer;\nvar sensitivity = 0.1;\nvar longPressTime = 500;\nvar hintDuration = 2000;\nfunction updateTime() {\nif (!v.duration) return;\nvar m1 = Math.floor(v.currentTime / 60);\nvar s1 = Math.floor(v.currentTime % 60);\nvar m2 = Math.floor(v.duration / 60);\nvar s2 = Math.floor(v.duration % 60);\ntDisplay.textContent = m1 + ':' + (s1 < 10 ? '0' : '') + s1 + '/' + m2 + ':' + (s2 < 10 ? '0' : '') + s2;\npBar.style.width = (v.currentTime / v.duration) * 100 + '%';}\nv.addEventListener('timeupdate', updateTime);\nv.addEventListener('loadedmetadata', updateTime);\nv.addEventListener('touchstart', function(e) {\nstartX = e.touches[0].clientX;\nstartTime = Date.now();\nif (longPressTimer) clearTimeout(longPressTimer);\nhint.style.display = 'none';\nlongPressTimer = setTimeout(function() {\nv.playbackRate = 2.0;\nhint.style.display = 'block';\nsetTimeout(function() { hint.style.display = 'none'; }, hintDuration);}, longPressTime);});\nv.addEventListener('touchmove', function(e) {\ne.preventDefault();\nclearTimeout(longPressTimer);\nvar diffX = e.touches[0].clientX - startX;\nvar change = diffX * sensitivity * v.duration / 100;\nv.currentTime = Math.max(0, Math.min(v.currentTime + change, v.duration));\nstartX = e.touches[0].clientX;updateTime();});\nv.addEventListener('touchend', function() {\nv.playbackRate = 1.0;\nclearTimeout(longPressTimer);});\n</script>\n</body>\n</html>`\n</js>\n",
    "ruleImage": "class.cover@style\n<js>\nvar img=\"\";\nvar pics = result.split(\"background-image:url('\")[1];\nvar picc = pics.split(\"')\")[0];\n\nimg= picc;\n</js>",
    "ruleLink": "a@href",
    "ruleNextPage": ".text-center@a.-2 @href",
    "rulePubDate": "class.time@text",
    "ruleTitle": "class.ctitle@text",
    "singleUrl": false,
    "sortUrl": "情侣::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-SwmVnh7DhV5fti8rANEOnA%3D%3D.html\n真实自拍::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-sxFQ8fIfXNi%2F7h%2FTa%2BVqaQ%3D%3D-2.html?k=%E7%9C%9F%E5%AE%9E%E8%87%AA%E6%8B%8D{{page}}\n艳照门::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-sWJNZL81qog%2FV0kqE7K4xg%3D%3D.html\n韩国::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-qYmLQw%2Bg9uPbbhsqBrcq2Q%3D%3D.html\n水滴::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-WuIS%2BITZ25HLRd6XZW%2FOxA%3D%3D.html\r\n91大神::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-QOe0y05XimbXo8PhBayueA%3D%3D.html\r\n重口::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-DEbPb09hbgP9k6scQg63sw%3D%3D.html\r\n国产3P::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-GWLkyuIEPQDeXCqVFoTAyA%3D%3D.html\r\n寻花::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-rKKopyjdoS20rSOUxh3zJQ%3D%3D.html\r\n探花::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-hgzJx3zpIIxdOEMcWHz2Tg%3D%3D.html\r\n百度云泄密::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-2lC5aEeJd1u2dqQ%2FmdRIVQ%3D%3D.html\r\n叫爸爸::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-y8uZo8HwYsn8SvxL1UCb0g%3D%3D.html\r\n人妖::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-%2BbRZ5xmyn24x0B7zvVH51A%3D%3D.html\r\n双飞::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-5thccQpFuzxfZnnatss5wQ%3D%3D.html\r\n援交::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-eYLQqyMZKX0naw7R9aFiUQ%3D%3D.html\n高潮::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-vxgb5Mhrcm45%2BvJ3jR%2FK5w%3D%3D.html\n云盘泄密::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-Uk8R2RDqogK686unextaRA%3D%3D.html\n百度云::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-5ZDf525skrVIknBGx5lmFQ%3D%3D.html\n母狗::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-6%2BdjspHsB86vEMDYR8vX0g%3D%3D.html\nSWAG::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-dth6EA%2B8L38m3Nca%2FQFL2Q%3D%3D.html\n灌醉::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-CgBbOg15Du4JraAsWNBNjQ%3D%3D.html\n乱伦::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-62iSChVBLwn9fxJe4R2eFw%3D%3D.html\n台湾::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-SxxaH9csNSivTS3P7gZoFg%3D%3D.html\n双洞::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-PsCugwsYtwmQ4ClpO%2FoDjg%3D%3D.html\n黑人::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-Jo0QDMWSz9h5NGQAE9Q6VQ%3D%3D.html\n模特::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-rkt3PZIjjsRwGyupHFDGaA%3D%3D.html\n明星::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-QYz3d2N9zvH04hLT6JKzUQ%3D%3D.html\n外围::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-IMWBtdaYv%2Fjxugi4%2BHhZ4A%3D%3D.html\n平胸::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-6KvMA5igEDec1T31X3GJzw%3D%3D.html\n萝莉::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-z90Pw6%2BPlSZL6DsNDa3HDw%3D%3D.html\n偷拍::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-kA%2FTlS7qmOLRGkgF%2Fn0INQ%3D%3D.html\n强奸::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-rkfTz9iRzCZ2YZ9BgpLQPQ%3D%3D.html\n孕妇::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-T5nxv4JMS0RuKayEmUskBg%3D%3D.html\n露出::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-cWH28OVOk5XusdgQlQ42DA%3D%3D.html\n学生::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-S4a6Y3Jh0ahrOuC%2BnPWraw%3D%3D.html\n厕所::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-OBoF9jSv3ssvCWLzi0ZUow%3D%3D.html\n丝袜::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-HZAcWdDll929vjXxi%2Fis9Q%3D%3D.html\n麻豆::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-AAzZLiir3JVotigCPt5yyw%3D%3D.html\n剧情::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-vX2kdY6Bji%2BZDgJC3Uom8Q%3D%3D.html\n少妇::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-WvRQ3zJ6x0Iddtyv%2F3kQ7Q%3D%3D.html\n初中::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-7zlfwQmL2OCGlwAMuO9PkQ%3D%3D.html\n户外::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-P5xjiQfnsJ62f4Hz3RGbVg%3D%3D.html\n巨乳::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-B5Vt3CkBgs3beFwmKholzg%3D%3D.html\n按摩师::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-JM5fp9rXtfWRGHxSh8zS5w%3D%3D.html\n抖音::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-zFa%2FHlIv9P7FSIj1wrTPLw%3D%3D.html\n极品::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-IuN82Iai2xUOVHMMANfnOA%3D%3D.html\n勾引::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-vh64QmiM3Mo2OcKdxDQdsQ%3D%3D.html\n调教::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-%2BQeUgBv85wKceg%2FDI5Ak0w%3D%3D.html\n对白::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-%2B9ccuxdMZa3%2FJ8LzxMB6qg%3D%3D.html\n喷水::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-1oRbUL2Xn9xhEmXGx6GsQA%3D%3D.html\n白虎::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-UKNntcz6aNUmZxjkxJCFPQ%3D%3D.html\n肛交::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-nWw6UIl046QAjrvoKFS2Rw%3D%3D.html\n双洞::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-PsCugwsYtwmQ4ClpO%2FoDjg%3D%3D.html\n宿舍::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-12%2BMLChLTiqIX3cSShXxtg%3D%3D.html",
    "sourceComment": "搜索被加密了，不加搜索\n永久地址：https://jfgso.xyz\n\n260320修复",
    "sourceGroup": "版本",
    "sourceIcon": "http://img5.adesk.com/68d0f78fab9725cae3c22331?imageMogr2/thumbnail/!1080x1920r/gravity/Center/crop/1080x1920&sign=ec76e92a65142f3c04f056faeaa9c918&t=69bd67e1",
    "sourceName": "5.7",
    "sourceUrl": "https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com",
    "style": ".dz {\nwidth:100%; \npadding:5px 0;\nborder:solid; \nborder-radius:5px;\noverflow:scroll;\nbackground-color:#dddddd\n}"
  },
  {
    "articleStyle": 0,
    "customOrder": 555,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "header": "{\"User-Agent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1\"}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "article.masonry-post",
    "ruleContent": "@js:\nvar img_list=\"\";\ndata=java.getElements('.dynamic-entry-content@img')\nfor(i in data){\n\turl=data[i].attr('src')\n\timg_list+=`<img src=\"${url}\"/>\\n`\n}\nresult=`<html>\n<head>\n <title>${java.get('title')}</title>\n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no\">\n</head>\n<body>\n <div class=\"img_container\">\n   ${img_list}\n </div>\n</body>\n</html>`",
    "ruleImage": ".gb-block-image img@src",
    "ruleLink": "a@href##$##,{\"webView\":true}",
    "ruleNextPage": "a.next@href",
    "rulePubDate": "",
    "ruleTitle": ".gb-headline a@text\n<js>\njava.put('title',result)\n</js>",
    "singleUrl": false,
    "sortUrl": "最新::https://danryoku.com/\nNSFW::https://danryoku.com/category/nsfw/\nCOSPLAY::https://danryoku.com/category/cosplay/\n日本::https://danryoku.com/category/country/japan/\n中国::https://danryoku.com/category/country/china/{{page}}/\n韩国::https://danryoku.com/category/country/korea/\n台湾::https://danryoku.com/category/country/taiwan/\n西方::https://danryoku.com/category/country/western/\n搜索::https://danryoku.com/?s={{source.getVariable()}}/",
    "sourceComment": "DANRYOKU - Idol & Cosplay Photobook gallery\n网站：https://danryoku.com",
    "sourceGroup": "版本",
    "sourceIcon": "https://danryoku.com/favicon.ico",
    "sourceName": "5.8",
    "sourceUrl": "https://danryoku.com",
    "style": "*{margin:0;padding:0;}\nhtml,body{width:100%;height:100%;}\nh2{text-align:center;}\nimg{width:100%;height:auto;}"
  },
  {
    "articleStyle": 0,
    "customOrder": 557,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "5.9",
    "sourceUrl": "https://www.htmtshht753.vip:9527/detail/585321"
  },
  {
    "articleStyle": 0,
    "customOrder": 559,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "loginUi": "",
    "ruleArticles": ".vod[2:23]",
    "ruleContent": "",
    "ruleImage": "img@data-original",
    "ruleLink": "a@href<js>var url='https://eeoopinkyy.cc'+result;var html=String(java.ajax(url));var idx=html.indexOf('index.m3u8');var start=html.lastIndexOf('\\\"',idx);var end=html.indexOf('\\\"',idx);var u=html.substring(start+1,end);u.split('\\\\/').join('/')</js>\n",
    "ruleNextPage": ".pageitem.-1@href",
    "ruleTitle": "a@text",
    "shouldOverrideUrlLoading": "",
    "singleUrl": false,
    "sortUrl": "自拍::https://eeoopinkyy.cc/pink/index.php/vod/type/id/198/page/{{page}}.html\n国产::https://eeoopinkyy.cc/pink/index.php/vod/type/id/197/page/{{page}}.html\n国产视频::https://eeoopinkyy.cc/pink/index.php/vod/type/id/199.html\n国产传媒::https://eeoopinkyy.cc/pink/index.php/vod/type/id/200.html\n国产裸聊::https://eeoopinkyy.cc/pink/index.php/vod/type/id/201.html\n国产直播::https://eeoopinkyy.cc/pink/index.php/vod/type/id/202.html\n国产偷拍::https://eeoopinkyy.cc/pink/index.php/vod/type/id/203.html\n国产大制作::https://eeoopinkyy.cc/pink/index.php/vod/type/id/204.html\n国产主播::https://eeoopinkyy.cc/pink/index.php/vod/type/id/205.html\n蜜桃传媒::https://eeoopinkyy.cc/pink/index.php/vod/type/id/217.html\n天美传媒::https://eeoopinkyy.cc/pink/index.php/vod/type/id/218.html\n乌鸦传媒::https://eeoopinkyy.cc/pink/index.php/vod/type/id/219.html\n星空传媒::https://eeoopinkyy.cc/pink/index.php/vod/type/id/220.html\n乐播传媒::https://eeoopinkyy.cc/pink/index.php/vod/type/id/221.html\n大象传媒::https://eeoopinkyy.cc/pink/index.php/vod/type/id/222.html\n映画传媒::https://eeoopinkyy.cc/pink/index.php/vod/type/id/223.html\n皇家华人::https://eeoopinkyy.cc/pink/index.php/vod/type/id/208.html\n精东影业::https://eeoopinkyy.cc/pink/index.php/vod/type/id/209.html\n成人头条::https://eeoopinkyy.cc/pink/index.php/vod/type/id/210.html\n免子先生::https://eeoopinkyy.cc/pink/index.php/vod/type/id/211.html\n杏吧原创::https://eeoopinkyy.cc/pink/index.php/vod/type/id/212.html\n91制片厂::https://eeoopinkyy.cc/pink/index.php/vod/type/id/213.html\n开心鬼传媒::https://eeoopinkyy.cc/pink/index.php/vod/type/id/214.html\n黑料网曝::https://eeoopinkyy.cc/pink/index.php/vod/type/id/181.html\n会所技师::https://eeoopinkyy.cc/pink/index.php/vod/type/id/182.html\n探花约炮::https://eeoopinkyy.cc/pink/index.php/vod/type/id/183.html\n淫妻绿帽::https://eeoopinkyy.cc/pink/index.php/vod/type/id/184.html\n制服诱惑::https://eeoopinkyy.cc/pink/index.php/vod/type/id/185.html\n重口猎奇::https://eeoopinkyy.cc/pink/index.php/vod/type/id/186.html\n强奸乱伦::https://eeoopinkyy.cc/pink/index.php/vod/type/id/187.html\n精品甄之::https://eeoopinkyy.cc/pink/index.php/vod/type/id/190.html\n网曝黑料::https://eeoopinkyy.cc/pink/index.php/vod/type/id/191.html\n明星换脸::https://eeoopinkyy.cc/pink/index.php/vod/type/id/192.html\n女优明星::https://eeoopinkyy.cc/pink/index.php/vod/type/id/193.html\n韩国主播::https://eeoopinkyy.cc/pink/index.php/vod/type/id/194.html\n网红主播::https://eeoopinkyy.cc/pink/index.php/vod/type/id/195.html\n群交淫乱::https://eeoopinkyy.cc/pink/index.php/vod/type/id/196.html\n巨乳美乳::https://eeoopinkyy.cc/pink/index.php/vod/type/id/244.html\n高清名优::https://eeoopinkyy.cc/pink/index.php/vod/type/id/245.html\n人妻熟女::https://eeoopinkyy.cc/pink/index.php/vod/type/id/246.html\n中文字幕::https://eeoopinkyy.cc/pink/index.php/vod/type/id/247.html\nSM调教::https://eeoopinkyy.cc/pink/index.php/vod/type/id/248.html\nVR视角::https://eeoopinkyy.cc/pink/index.php/vod/type/id/249.html\nAV解说::https://eeoopinkyy.cc/pink/index.php/vod/type/id/250.html\n日本无码::https://eeoopinkyy.cc/pink/index.php/vod/type/id/235.html\n欧美性爱::https://eeoopinkyy.cc/pink/index.php/vod/type/id/236.html\n欧美无码::https://eeoopinkyy.cc/pink/index.php/vod/type/id/237.html\n高清有码::https://eeoopinkyy.cc/pink/index.php/vod/type/id/238.html\n日本素人::https://eeoopinkyy.cc/pink/index.php/vod/type/id/239.html\n伦理三级::https://eeoopinkyy.cc/pink/index.php/vod/type/id/240.html\n动漫精选::https://eeoopinkyy.cc/pink/index.php/vod/type/id/241.html\n乱伦毁三观::https://eeoopinkyy.cc/pink/index.php/vod/type/id/226.html\n淫乱学生妹::https://eeoopinkyy.cc/pink/index.php/vod/type/id/227.html\n玩偶姐姐::https://eeoopinkyy.cc/pink/index.php/vod/type/id/228.html\n糖心Vlog::https://eeoopinkyy.cc/pink/index.php/vod/type/id/229.html\n萝莉社::https://eeoopinkyy.cc/pink/index.php/vod/type/id/230.html\n性视界::https://eeoopinkyy.cc/pink/index.php/vod/type/id/231.html\nPsychoPorn::https://eeoopinkyy.cc/pink/index.php/vod/type/id/232.html",
    "sourceComment": "├───┬────────────┤\n│！免责│本书源只提供代码进行技术│\n│！声明│交流，请于２４小时后删除│\n└────────────────┘",
    "sourceGroup": "版本",
    "sourceIcon": "https://ico.img12345.com/jt/favicon.png",
    "sourceName": "6.0",
    "sourceUrl": "https://eeoopinkyy.cc/pink/index.php/vod/type/id/197.html"
  },
  {
    "articleStyle": 0,
    "customOrder": 560,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceComment": "视频",
    "sourceGroup": "版本",
    "sourceIcon": "https://img.fy6b.com/2024/06/13/7ca5da52f9cc0.jpg",
    "sourceName": "6.1",
    "sourceUrl": "https://www.xhsiy38.cc:2024/"
  },
  {
    "articleStyle": 1,
    "coverDecodeJs": "/\\/(new|xiao|upload)\\//.test(src)?java.createSymmetricCrypto(\"AES/CBC/Pkcs7Padding\", \"f5d965df75336270\",\"97b60394abc2fbe1\").decrypt(result):result",
    "customOrder": 561,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n\t\"User-Agent\": \"Mozilla/5.0 (Linux; Android 9) Mobile Safari/537.36\",\"referer\": \"{{baseUrl}}\"\n\t}",
    "lastUpdateTime": 1775591767759,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.video-item",
    "ruleContent": "class.dplayer@all<js>\nresult=result.match(/http.*0/)[0]##\\</js>{{@@title@text}}\n<video src=\"{{result}}\" width=\"100%\" height=\"auto\" controls></video>",
    "ruleImage": "@js:\nurl=String(result).match(/.*loadImg\\(this,'(.*)'.*/)[1];\nresult=url",
    "ruleLink": "a@href",
    "ruleNextPage": "page",
    "rulePubDate": "class.date-xxx@text",
    "ruleTitle": "class.title@text",
    "singleUrl": false,
    "sortUrl": "首页::/page/{{page}}/\n最新黑料::/hlcg/page/{{page}}/\n今日热瓜::/jrrs/page/{{page}}/\n热门黑料::/jqrm/page/{{page}}/\n经典黑料::/lsdg/page/{{page}}/\n日榜黑料::/mrrb/page/{{page}}/\n周榜黑料::/zbjx/page/{{page}}/\n月榜黑料::/ybrg/page/{{page}}/\n原创社区::/ycsq/page/{{page}}/\n反差专区::/fczq/page/{{page}}/\n校园黑料::/xycg/page/{{page}}/\n网红黑料::/whhl/page/{{page}}/\n影视短剧::/ysdj/page/{{page}}/\n每日大赛::/mrds/page/{{page}}/\n明星丑闻::/mxcw/page/{{page}}/\n深夜综艺::/syzy/page/{{page}}/\n推特社区::/ttsq/page/{{page}}/\n独家曝料::/djbl/page/{{page}}/\n桃图杂志::/ttzz/page/{{page}}/\n黑料课堂::/hlkt/page/{{page}}/\n有求必应::/yqby/page/{{page}}/\n黑料爆改::/hlbg/page/{{page}}/\n官场曝料::/gchl/page/{{page}}/\n全球奇闻::/qqqw/page/{{page}}/\n抖音::/tag/2/{{page}}.html\n快手::/tag/3/{{page}}.html\n推特::/tag/7/{{page}}.html\n模特::/tag/36/{{page}}.html\n学生::/tag/10/{{page}}.html\n御姐::/tag/40/{{page}}.html\n少妇::/tag/405/{{page}}.html\n人妻::/tag/22/{{page}}.html\n自拍::/tag/332/{{page}}.html\n偷拍::/tag/27/{{page}}.html\n自慰::/tag/313/{{page}}.html\n后入::/tag/922/{{page}}.html\n母狗::/tag/140/{{page}}.html\n露脸::/tag/781/{{page}}.html\n露出::/tag/17/{{page}}.html\n直播::/tag/28/{{page}}.html\n约炮::/tag/163/{{page}}.html\n出轨::/tag/505/{{page}}.html\n偷情::/tag/18/{{page}}.html\n制服::/tag/50/{{page}}.html\n肥臀::/tag/35/{{page}}.html\n巨乳::/tag/34/{{page}}.html\n高颜值::/tag/275/{{page}}.html",
    "sourceComment": "感谢社区大佬的解密\n源社区：@Mengteen \n二传二创或者是其它问题请联系我。\n我邮箱:[xxxmgqxxx@vip.qq.com]\n我QQ:99737563(备注来意)\n2025.7.6 修复分类以及更新\n地址发布页：https://hlbg3.com/\n黑料最新入口\nhttps://hlbg8.com\n牢记永久域名\nhttps://www.heiliao88.com/\nhttps://155.fun或https://18hlw.com",
    "sourceGroup": "版本",
    "sourceIcon": "https://img4.tuwandata.com/v2/thumb/jpg/NWFkMywxMTI1LDAsOSwzLDEsLTEsTk9ORSwsLDkw/u/res.tuwan.com/zipgoods/20190508/3b6408c569f8eb687a8dd6eb3578bdb9.jpg",
    "sourceName": "6.2",
    "sourceUrl": "https://qbfeh.rcrfesyj.cc/"
  },
  {
    "articleStyle": 0,
    "customOrder": 562,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceComment": "视频",
    "sourceGroup": "版本",
    "sourceIcon": "https://img.fy6b.com/2024/06/13/7ca5da52f9cc0.jpg",
    "sourceName": "6.3",
    "sourceUrl": "https://2.hlg6440d.cc/"
  },
  {
    "articleStyle": 3,
    "customOrder": 563,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 1775588705888,
    "loadWithBaseUrl": true,
    "ruleArticles": ".item",
    "ruleContent": "id.kt_player@all&&script@all",
    "ruleImage": "img@data-original",
    "ruleLink": "a@href",
    "ruleNextPage": "page",
    "rulePubDate": ".time@span",
    "ruleTitle": "img@alt",
    "singleUrl": false,
    "sortUrl": "搜索::https://www.85xo.com/search/{{v=source.getVariable()}}/\n亚洲人::/tags/ya-zhou-ren/\n马来::/tags/ma-lai/\n日本::/tags/ri-ben/\n后入::/tags/hou-ru/\n大奶::/tags/da-nai/\n高潮::/tags/gao-chao/\n做爱::/tags/zuo-ai/\n马来西亚::/tags/ma-lai-zi-ya/\n妹妹::/tags/mei-mei/\n兔牙::/tags/tu-ya/\n妹::/tags/mei/\n巨乳::/tags/ju-ru/\n自慰::/tags/zi-wei/\n情侣::/tags/qing-lv/\n骚::/tags/sao/\n男友::/tags/nan-you/\n淫叫::/tags/yin-jiao/\n抓奶::/tags/zhua-nai/\n新加坡::/tags/xin-jia-po/\n内衣::/tags/nei-yi/\n肉棒::/tags/rou-bang/\n床上::/tags/chuang-shang/\n嫩逼::/tags/nei-bi/\n日本人::/tags/ri-ben-ren/\n鲍鱼::/tags/bao-yu/\n口::/tags/kou/\n少女::/tags/shao-nv/\n美女::/tags/mei-nv/\n台灣::/tags/tai-wan/\n可爱::/tags/ke-ai/\n偷拍::/tags/tou-pai/\n掰逼::/tags/bai-bi/\n喷水::/tags/pen-shui/\n脱衣::/tags/tuo-yi/\n屁眼::/tags/pi-yan/\n口交::/tags/kou-jiao/\n高中::/tags/gao-zhong/\n妹子::/tags/mei-zi/\n中國::/tags/zhong-guo/\n母狗::/tags/mu-gao/\n全裸::/tags/quan-luo/\n美臀::/tags/mei-tun/\n贫乳::/tags/pin-ru/\n逼::/tags/bi/\n内裤::/tags/nei-ku/\n爱::/tags/ai/\n自拍::/tags/zi-pai/\n学生::/tags/xue-sheng/\n呻吟::/tags/shen-yin/\n韓國::/tags/han-guo/\n泰國::/tags/tai-guo/\n越南::/tags/yue-nan/\n近拍::/tags/jin-pai/\n香港::/tags/xiang-gang/\n新馬::/tags/xin-ma/\n街拍::/tags/jie-pai/",
    "sourceComment": "https://www.85po.com",
    "sourceGroup": "版本",
    "sourceIcon": "https://85tube.com/favicon.ico",
    "sourceName": "6.4",
    "sourceUrl": "https://www.85xo.com/",
    "style": "{background-color:black;margin:0;padding:0;width:100%;}"
  },
  {
    "articleStyle": 1,
    "customOrder": 565,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\"User-Agent\": \"Mozilla/5.0 (Linux; U; Android 14; zh-cn; M2102K1AC Build/UKQ1.231207.002) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/109.0.5414.118 Mobile Safari/537.36 MQQBrowser/10.1.0\"}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".thumbnail-group@li",
    "ruleContent": "<js>\np=result.match(/vod\\_data.*url\\\"\\:\\\"(.*?)\\\"\\,\\\"url/);\np=(p?p[1]:1).replace(/\\\\/g,'')||1; pi=java.getString('.breadcrumbs@span@text')||1;\n`<html>\n    <head>\n        <meta name=\"viewport\" content=\"width=device-width\">\n        <style>\n            body {\n                margin: 0;\n                font-family: Arial, sans-serif;\n                background: linear-gradient(135deg, #ece9e6, #ffffff);\n                display: flex;\n                flex-direction: column;\n                align-items: center;\n                justify-content: flex-start;\n                padding: 20px;\n            }\n            .container {\n                width: 100%;\n                max-width: 800px;\n                background: #fff;\n                border-radius: 10px;\n                box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n                overflow: hidden;\n                margin-bottom: 20px;\n            }\n            h3 {\n                margin: 0;\n                padding: 10px 20px;\n                font-size: 0.9em;\n                background: #333;\n                color: #fff;\n                border-radius: 10px 10px 0 0;\n            }\n            .video-container {\n                width: 100%;\n                background: #000;\n                position: relative;\n            }\n            video {\n                width: 100%;\n                height: auto;\n                display: block;\n            }\n            .info-container {\n                padding: 20px;\n            }\n            .info-container p {\n                margin: 10px 0;\n                color: #555;\n            }\n            .info-container p span {\n                font-weight: bold;\n                color: #000;\n            }\n        </style>\n    </head>\n    <body>\n        <div class=\"container\">\n        <h3>${pi}</h3>\n            <div class=\"video-container\">\n                <video controls autoplay name=\"media\" id=\"videoPlayer\">\n                    <source src=\"${p}\" type=\"video/mp4\">\n                </video>\n            </div>\n            <div class=\"info-container\">\n                \n            </div>\n        </div>\n\n        <script>\n            // 获取视频元素\n            const video = document.getElementById('videoPlayer');\n            let touchStartX = 0;\n            let touchStartY = 0;\n            let touchStartTime = 0;\n            let isLongPress = false;\n\n            // 滑动快进\n            video.addEventListener('touchstart', (e) => {\n                touchStartX = e.touches[0].clientX;\n                touchStartY = e.touches[0].clientY;\n                touchStartTime = Date.now();\n                isLongPress = false;\n            });\n\n            video.addEventListener('touchmove', (e) => {\n                const deltaX = e.touches[0].clientX - touchStartX;\n                const deltaY = e.touches[0].clientY - touchStartY;\n\n                // 如果是水平滑动，且未进入长按状态\n                if (Math.abs(deltaX) > Math.abs(deltaY) && !isLongPress) {\n                    const duration = video.duration;\n                    const seekTime = video.currentTime + (deltaX / 100); // 每滑动100px快进1秒\n                    video.currentTime = Math.min(Math.max(seekTime, 0), duration);\n                }\n            });\n\n            // 长按快进\n            video.addEventListener('touchend', (e) => {\n                const touchEndTime = Date.now();\n                const touchDuration = touchEndTime - touchStartTime;\n\n                // 如果长按时间超过500ms，进入长按快进状态\n                if (touchDuration > 500) {\n                    isLongPress = true;\n\n                    // 在长按状态下，根据滑动距离快进\n                    const deltaX = e.changedTouches[0].clientX - touchStartX;\n                    const duration = video.duration;\n                    const seekTime = video.currentTime + (deltaX / 100); // 每滑动100px快进1秒\n                    video.currentTime = Math.min(Math.max(seekTime, 0), duration);\n                } else {\n                    isLongPress = false;\n                }\n            });\n\n            // 防止默认行为（如页面滚动）\n            video.addEventListener('touchmove', (e) => {\n                e.preventDefault();\n            });\n        </script>\n    </body>\n</html>`;\n\n</js>",
    "ruleImage": "img@src",
    "ruleLink": "a@href",
    "ruleNextPage": "text.下一页@href",
    "rulePubDate": "p@text",
    "ruleTitle": "h5@text||img@alt",
    "singleUrl": false,
    "sortUrl": "搜索🔍::/index.php/vod/search/page/{{page}}/wd/{{source.getVariable()}}.html\n伦理三级::/index.php/vod/type/id/6/page/{{page}}.html\n国产精品::/index.php/vod/type/id/7/page/{{page}}.html\n偷拍自拍::/index.php/vod/type/id/8/page/{{page}}.html\n主播大秀::/index.php/vod/type/id/9/page/{{page}}.html\n卡通动漫::/index.php/vod/type/id/10/page/{{page}}.html\n制服丝袜::/index.php/vod/type/id/11/page/{{page}}.html\n少女萝莉::/index.php/vod/type/id/12/page/{{page}}.html\n巨乳美乳::/index.php/vod/type/id/20/page/{{page}}.html\n熟女人妻::/index.php/vod/type/id/21/page/{{page}}.html\n亚洲有码::/index.php/vod/type/id/22/page/{{page}}.html\n强奸乱伦::/index.php/vod/type/id/23/page/{{page}}.html\n亚洲无码::/index.php/vod/type/id/25/page/{{page}}.html\n中文字幕::/index.php/vod/type/id/26/page/{{page}}.html\n同性专区::/index.php/vod/type/id/27/page/{{page}}.html\nAl换脸::/index.php/vod/type/id/28/page/{{page}}.html\n欧美精品::/index.php/vod/type/id/32/page/{{page}}.html\n国产传媒::/index.php/vod/type/id/33/page/{{page}}.html\n口交颜射::/index.php/vod/type/id/34/page/{{page}}.html\n女优明星::/index.php/vod/type/id/35/page/{{page}}.html\n素人自拍::/index.php/vod/type/id/36/page/{{page}}.html\n多人群交::/index.php/vod/type/id/37/page/{{page}}.html\n网曝门::/index.php/vod/type/id/39/page/{{page}}.html\n探花系列::/index.php/vod/type/id/41/page/{{page}}.html\n麻豆传媒::/index.php/vod/type/id/43/page/{{page}}.html\n天美传媒::/index.php/vod/type/id/46/page/{{page}}.html\nSA国际传媒::/index.php/vod/type/id/47/page/{{page}}.html\n果冻传媒::/index.php/vod/type/id/50/page/{{page}}.html\n星空无限::/index.php/vod/type/id/51/page/{{page}}.html\n精东影业::/index.php/vod/type/id/52/page/{{page}}.html\n蜜桃传媒::/index.php/vod/type/id/54/page/{{page}}.html\nAV解说::/index.php/vod/type/id/56/page/{{page}}.html\nVR视角::/index.php/vod/type/id/57/page/{{page}}.html\nJVID::/index.php/vod/type/id/59/page/{{page}}.html\nSWAG::/index.php/vod/type/id/60/page/{{page}}.html \ncosplay::/index.php/vod/type/id/61/page/{{page}}.html\n抖音视频::/index.php/vod/type/id/62/page/{{page}}.html\n热门头条::/index.php/vod/type/id/63/page/{{page}}.html\n素人搭讪::/index.php/vod/type/id/80/page/{{page}}.html\n欺辱凌辱::/index.php/vod/type/id/81/page/{{page}}.html\n野外激情::/index.php/vod/type/id/82/page/{{page}}.html\n学生诱惑::/index.php/vod/type/id/83/page/{{page}}.html\nSM调教::/index.php/vod/type/id/84/page/{{page}}.html\n水果派::/index.php/vod/type/id/86/page/{{page}}.html\n91传媒::/index.php/vod/type/id/88/page/{{page}}.html\n糖心传媒::/index.php/vod/type/id/90/page/{{page}}.html\n一本道::/index.php/vod/type/id/93/page/{{page}}.html\n",
    "sourceComment": "发布页：https://wuxiants.github.io/",
    "sourceGroup": "版本",
    "sourceIcon": "https://images.icon-icons.com/1147/PNG/512/1486486316-arrow-film-movie-play-player-start-video_81236.png",
    "sourceName": "6.5",
    "sourceUrl": "https://wxts.wuxiants564.com/"
  },
  {
    "articleStyle": 0,
    "customOrder": 566,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "6.6",
    "sourceUrl": "https://6661.vaf3.com/web/index.html?jkzz=1"
  },
  {
    "articleStyle": 3,
    "customOrder": 568,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 1775591744706,
    "loadWithBaseUrl": true,
    "ruleArticles": "ul@li",
    "ruleContent": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"UTF-8\">\n<title>内容提取</title>\n<!-- v2025.05.10 -->\n\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<script src=\"https://code.jquery.com/jquery-3.6.0.min.js\"></script>\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.css\" />\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.js\"></script>\n<style>\n    body { font-family: Arial, sans-serif; font-size: 16px; }\n    #title, #page, #loading-status { margin: 0 auto; font-size: 20px; text-align: center; }\n    #description, #urls, #video-url, #video-sources, #messages { width: 100%; max-width: 800px; margin: 1.5px auto; font-size: 14px; text-align: left; word-wrap: break-word; white-space: pre-wrap; }\n    #text, #text :not(img), #text img + * { text-indent: 2em; width: 100%; font-size: 16px; line-height: 1.5em; margin-top: 0; margin-bottom: 0; word-wrap: break-word; white-space: pre-wrap; }\n    img, #text img { width: 100%; height: auto; display: block; margin-bottom: 1.5px; }\n    .flex-container { display: flex; justify-content: center; align-items: center; gap: 10px; margin: 1.5px 0; font-size: 14px; }\n    button, select { flex: 1 1 31%; padding: 3px; border: 1px solid #ccc; border-radius: 5px; box-sizing: border-box; cursor: pointer; background-color: #f9f9f9; transition: background-color 0.3s ease; margin: 1.5px; min-width: 0; font-size: 14px; }\n    #url-select, #video-source-select { flex: 1 1 100%; margin-left: 0; margin-right: 0; text-align: center; }\n    #video-element { width: 100%; height: auto; }\n    textarea { width: 100%; height: auto; min-height: 100px; box-sizing: border-box; resize: vertical; }\n    .error, .warn { color: red; }\n</style>\n</head>\n<body>\n    <h3 id=\"title\">{{@@title@text||h1.0@text||h2.0@text||.title.0@text}}</h3>\n    <p id=\"description\">{{@@.info.0@html||.jianjie@html}}</p>\n    <p id=\"page\" style=\"display:none;\">共<span id=\"total-pages\">1</span>页</p>\n    <p id=\"loading-status\" style=\"display:none;\"></p>\n\n    <div class=\"flex-container\" id=\"loading-buttons\" style=\"display:none;\">\n        <button id=\"prev-page-btn\">上一页</button>\n        <button id=\"next-page-btn\">下一页</button>\n        <button id=\"auto-load-btn\">自&nbsp;&nbsp;动</button>\n    </div>\n    \n    <div class=\"flex-container\">\n        <select id=\"url-select\" style=\"display:none;\"></select>\n    </div>\n    \n    <div class=\"flex-container\">\n        <button id=\"toggle-urls-btn\">显/隐网址</button>\n        <button id=\"toggle-messages-btn\">显/隐信息</button>\n        <button id=\"toggle-debug-btn\">显/隐调试</button>\n    </div>\n    <div id=\"urls\"></div>\n    <div id=\"messages\"></div>\n    <div id=\"debug-info\"></div>\n    <div id=\"video-url\"></div>\n    <div id=\"video-container\" style=\"display: none;\">\n        <video id=\"video-element\" controls preload=\"auto\" width=\"640\" height=\"264\">\n            <source id=\"video-source\" src=\"\" type=\"\">您的浏览器不支持 video 标签。\n        </video>\n    </div>\n    <div class=\"flex-container\" id=\"video-source-container\" style=\"display: none;\">\n        <select id=\"video-source-select\" onchange=\"updateVideoSource()\"></select>\n    </div>\n    <div id=\"images\"></div>\n    <div id=\"text\"></div>\n\n    <script>\n        // 配置对象，包含各种选择器、延迟时间等配置项\n        const config = {    \n            videoSelector: 'body', // 视频选择器\n            imgSelector: '.gridlane-box-inside img,.photos figure img,.content p img', // 图片选择器\n            textSelector: '#content', // 文本选择器\n            debugSelector: '#content, .page, .pager, .content, script', // 调试信息选择器\n            swapImageAttributes: false, // 是否交换图片属性\n            delayTime: 1500, // 延迟提取时间\n            retryDelayTime: 1500, // 重试加载延迟时间\n            maxLoadAttempts: 3, // 最大加载次数\n            autoLoading: false, // true自动模式，false单页模式\n            debugOnce: 0, // 只在特定索引输出一次调试信息\n            totalPagesText: '{{@@.page.0@a.-2@textNodes}}', // 总页码\n            urlSuffixToRemove: /\\.html$/, // 移除url后缀\n            pageUrlText: '{urlPrefix}_{i}.html', // 拼接URL模板        \n            ListMode: true, // true网址列表模式，false网址拼接模式    \n            initialUrls: `{{@@#sort-item-5.0@a@href}}`, // 网址\n            initialUrlsName: `{{@@#sort-item-5.0@a@span@text}}`, // 网址名称\n            sourceurl: '', // 来源URL前缀\n        };\n\n        let videoSources = []; // 存储视频源数组\n        let loadAttempts = {}; // 记录每个URL的加载尝试次数\n        let urls = []; // 存储所有页面的URL\n        let imageBox;\n        let textBox;\n        let currentPageIndex = 0; // 当前页面索引\n        let canLoadNextPage = true; // 控制是否可以加载下一页\n        let autoLoadInProgress = false; // 自动加载状态\n\n        // 构建URL列表\n        function buildUrls(totalPages, baseUrl) {\n            let initialUrlsArray = config.initialUrls.trim().split('\\n').filter(url => url.trim() !== '');\n            let initialUrlsNameArray = config.initialUrlsName.trim().split('\\n').filter(name => name.trim() !== '');\n\n            if (config.ListMode && initialUrlsArray.length > 0) {\n                if (initialUrlsArray.length !== initialUrlsNameArray.length) {\n                    $('#messages').append(`<span class=\"warn\">警告：initialUrls 和 initialUrlsName 的长度不匹配。</span><br>`);\n                }\n\n                urls = initialUrlsArray.map(url => {\n                    if (config.sourceurl && url.startsWith('/') && !/^https?:\\/\\//i.test(url)) {\n                        return config.sourceurl.replace(/\\/$/, '') + url;\n                    } else {\n                        return url;\n                    }\n                });\n\n                urls.forEach((url, index) => {\n                    const name = initialUrlsNameArray[index] || `第 ${index + 1} 页`;\n                    $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n                    $('#urls').append(`<div>${name}: ${url}</div>`);\n                });\n            } else {\n                if (totalPages === 1) {\n                    urls.push(baseUrl);\n                } else {\n                    urls.push(baseUrl);\n                    for (let i = 2; i <= totalPages; i++) {\n                        urls.push(config.pageUrlText.replace('{urlPrefix}', baseUrl.replace(config.urlSuffixToRemove, '').replace(/\\/$/, '')).replace('{i}', i));\n                    }\n                }\n\n                urls.forEach((url, index) => {\n                    const name = `第 ${index + 1} 页`;\n                    $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n                    $('#urls').append(`<div>${name}: ${url}</div>`);\n                });\n            }\n\n            $('#total-pages').text(urls.length);\n            toggleNavigationButtons();\n            toggleTotalPagesDisplay();\n        }\n\n        // 规范化URL\n        function normalizeUrl(url) {\n            if (typeof url !== 'string' || !url.trim()) {\n                return '';\n            }\n            const match = url.match(/['\"](.*?)['\"]/);\n            if (match && match[1]) {\n                url = match[1];\n            }\n\n            function processUrl(str) {\n                str = str.trim();\n                str = str.replace(/\\\\u[\\dA-F]{4}/gi, match => String.fromCharCode(parseInt(match.replace(/\\\\u/g, ''), 16)));\n                str = decodeURIComponent(str);\n                str = str.replace(/^http:\\/([^/])/, 'http://$1');\n                str = str.replace(/^https:\\/([^/])/, 'https://$1');\n                return str;\n            }\n            return processUrl(url);\n        }\n\n        // 清空容器内容\n        function clearContainers() {\n            $('#messages').empty();\n            $('#images').empty();\n            $('#text').empty();\n        }\n\n        // 更新图像源\n        function updateImageSrc(elements, shouldSwap) {\n            elements.each(function () {\n                const $this = $(this);\n                const attrsToUpdate = {};\n                if (shouldSwap) {\n                    ['data-original', 'data-src', 'data-url'].forEach(attr => {\n                        if ($this.attr(attr)) {\n                            attrsToUpdate['src'] = $this.attr(attr);\n                        }\n                    });\n                }\n                $this.attr(attrsToUpdate);\n            });\n            return elements;\n        }\n\n        // 切换导航按钮显示状态\n        function toggleNavigationButtons() {\n            if ($('#url-select option').length > 1 && !config.autoLoading) {\n                $('#loading-buttons').show();\n                $('#url-select').show();\n            } else {\n                $('#loading-buttons').hide();\n                $('#url-select').hide();\n            }\n        }\n\n        // 显示加载状态\n        function showLoadingStatus(pageNumber) {\n            const selectedOption = $('#url-select option:selected').text();\n            $('#loading-status').text(`正在加载：${selectedOption}`).show();\n        }\n\n        // 隐藏加载状态\n        function hideLoadingStatus() {\n            $('#loading-status').hide();\n        }\n\n        // 加载指定索引的内容\n        function loadContent(index) {\n            if (index < 0 || index >= urls.length || !canLoadNextPage) return;\n            canLoadNextPage = false;\n            currentPageIndex = index;\n            $('#url-select').val(index);\n            $('#messages').append(`<div>当前地址: <span class=\"warn\">${urls[index]}</span></div>`);\n            if (autoLoadInProgress) {\n                showLoadingStatus(index + 1);\n            }\n            $.ajax({\n                url: urls[index],\n                type: 'GET',\n                success: function (data) {\n                    try {\n                    const $data = $(data);\n                    let updatedHtmlContent = data.replace(/(['\"])(\\/\\/)(?!\\/)/g, '$1https://')\n                        .replace(/src=\"upload/gi, 'src=\"/upload')\n                        .replace(/style=[\"'][^'\"]+[\"']/gi, '')\n                        .replace(/\\\\\\//g, '/');\n                    const parser = new DOMParser();\n                    const doc = parser.parseFromString(updatedHtmlContent, \"text/html\");\n\n                    if (config.debugOnce === index) {\n                        const debugElements = $(doc).find(config.debugSelector);\n                        if (debugElements.length > 0) {\n                            const debugContents = $('<pre>').html(debugElements.clone().wrapAll('<div/>').parent().html()).html();\n                            $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">${debugContents}</textarea></span>`);\n                        } else {\n                            $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">调试信息未提取到内容，请检查选择器！</textarea></span>`);\n                        }\n                    }\n                    // 方法1：提取视频\n                    const videoSources1 = [];\n                    const videoContents = $(doc).find(config.videoSelector);\n                    const videoTags = $(videoContents).find('video, source');\n                    videoTags.each(function() {\n                        const videosrc = $(this).attr('src') || \n                                     $(this).attr('data-src') || \n                                     $(this).attr('data-original') || '';\n                        \n                        if (videosrc) {\n                            videoSources1.push(videosrc);\n                        }\n                    });\n                    //反馈\n                    if (videoSources1.length > 0) {\n                        $('#messages').append(`<span>方法1，找到 ${videoSources1.length} 个视频。</span><br>`);\n                    }\n\n                    // 方法2：正则提取视频\n                    const regex = /['\"]https?[^'<>\"]+(m3u8|mp4|webm|ogg|flv|mp3|m4a|wav|ape|flac)([^'<>\"]+)?['\"]/gi;\n                    const matches = data.match(regex);\n                    const videoSources2 = [];\n\n                    if (matches) {\n                        const uniqueMatches = [...new Set(matches)];\n                    \n                        uniqueMatches.forEach(match => {\n                            const normalizedSrc = normalizeUrl(match.replace(/['\"]/g, ''));\n                            videoSources2.push(normalizedSrc);\n                        });\n                    }\n                    //反馈\n                    if (videoSources2.length > 0) {\n                        $('#messages').append(`<span>方法2，找到 ${videoSources2.length} 个视频。</span><br>`);\n                    }\n\n                    // 合并两种方法的结果\n                    videoSources = [...videoSources1, ...videoSources2];\n\n                    // 去重并标准化 URL\n                    const imageExtensions = /\\.(jpg|jpeg|png|gif|bmp|svg)$/i;\n\n                    videoSources = videoSources\n                                  .map(src => normalizeUrl(src.replace(/\\\\+/g, '')))\n                                  .filter(src => src) // 过滤空值\n                                  .filter(src => !imageExtensions.test(src)); // 移除图片地址\n                        \n                    videoSources = [...new Set(videoSources)];// 去重\n\n                    // 显示最终结果\n                    $('#messages').append(`<span>总共找到 ${videoSources.length} 个视频。</span><br>`);\n\n                    if (videoSources.length > 0) {\n                        $('#messages').append(`<span>成功提取到视频，找到 ${videoSources.length} 个视频。</span><br>`);\n                        videoSources.forEach((src, idx) => {\n                            $('#messages').append(`<div>视频地址:<span class=\"warn\"> ${src}</span><br></div>`);\n                            $('#video-source-select').append(`<option value=\"${idx}\">视频源 ${idx + 1}</option>`);\n                        });\n                    \n                        if (videoSources.length == 1) {\n                            $('#video-container').show();\n                            $('#video-url').show();\n                            $('#video-source-container').hide();\n                            updateVideoSource();\n                        } else if (videoSources.length > 1) {\n                            $('#video-container').show();\n                            $('#video-url').show();\n                            $('#video-source-container').show();\n                            updateVideoSource();\n                        } else {\n                            $('#video-container').hide();\n                            $('#video-url').hide();\n                            $('#video-source-container').hide();\n                        }\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未找到视频源。</span><br>`);\n                        $('#video-container').hide();\n                        $('#video-url').hide();\n                        $('#video-source-container').hide();\n                    }\n\n                    //提取图片\n                    const $imgContents = $(doc).find(config.imgSelector);\n                    const shouldSwap = config.swapImageAttributes;\n                    const newContents = updateImageSrc($imgContents.clone(), shouldSwap);\n                    $('#images').append(newContents).show();\n                    if (newContents.length > 0) {\n                        $('#messages').append(`<span>成功提取图片，共 ${newContents.length} 张。</span><br>`);\n                        newContents.each(function () {\n                            const imgSrc = $(this).attr('src') || $(this).attr('data-original') || $(this).attr('data-src') || $(this).attr('data-url');\n                            $('#messages').append(`<div>地址:<span class=\"warn\"> ${imgSrc}</span><br></div>`);\n                        });\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未提取到图片。</span><br>`);\n                    }\n\n                    //提取图片和文本\n                    const textContents = $(doc).find(config.textSelector).map(function () {\n                        const $currentContents = $(this);\n                        $currentContents.find('img + br, script, video, source, iframe').remove();\n                        $currentContents.html($currentContents.html().replace(/>\\s+/gi, '>').replace(/<\\/?br\\s*([^>]*)\\s*\\/?>/gi, '\\n').replace(/\\n+/g, '\\n'));\n                        return $currentContents.html();\n                    }).get().join('');\n                    if (textContents.trim()) {\n                        $('#text').append(`<span>${textContents}</span><br>`).show();\n                        $('#messages').append(`<span>成功提取图文。</span><br>`);\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未提取到图文。</span><br>`);\n                    }\n\n                    if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                        setTimeout(() => { \n                            canLoadNextPage = true;\n                            loadContent(currentPageIndex + 1); \n                        }, config.delayTime);\n                    } else {\n                        canLoadNextPage = true;\n                        if (autoLoadInProgress) {\n                            hideLoadingStatus();\n                        }\n                    }\n                } catch (parseError) {\n                    $('#messages').append(`<span class=\"error\">解析页面内容时发生错误: ${parseError.message}</span><br>`);\n                    handleLoadFailure(urls, index);\n                } finally {\n                    if (imageBox) imageBox.viewer.update();\n                    if (textBox) textBox.viewer.update();\n                }\n            },\n            error: function (jqXHR, textStatus, errorThrown) {\n                let errorMessage = `内容加载失败: ${urls[index]}`;\n                switch (textStatus) {\n                    case 'timeout':\n                        errorMessage += ', 请求超时';\n                        break;\n                    case 'abort':\n                        errorMessage += ', 请求被取消';\n                        break;\n                    case 'parsererror':\n                        errorMessage += ', 解析响应出错';\n                        break;\n                    default:\n                        errorMessage += `, 状态码: ${jqXHR.status}, 错误信息: ${errorThrown}`;\n                        break;\n                }\n                $('#messages').append(`<span class=\"error\">${errorMessage}</span><br>`);\n                handleLoadFailure(urls, index);\n                }\n            });\n        }\n\n        // 处理加载失败的情况\n        function handleLoadFailure(urls, index) {\n            if (!loadAttempts[urls[index]]) {\n                loadAttempts[urls[index]] = 1;\n            } else {\n                loadAttempts[urls[index]]++;\n            }\n            if (loadAttempts[urls[index]] <= config.maxLoadAttempts) {\n                const retryMessage = `第${index + 1}页加载失败，正在进行第${loadAttempts[urls[index]]}次加载！`;\n                $('#messages').append(`<span class=\"error\">${retryMessage}</span><br>`);\n                setTimeout(() => { \n                    canLoadNextPage = true;\n                    loadContent(index); \n                }, config.retryDelayTime);\n            } else {\n                const finalErrorMessage = `第${index + 1}页加载失败，已达到最大尝试次数(${config.maxLoadAttempts})！`;\n                $('#messages').append(`<span class=\"error\">${finalErrorMessage}</span><br>`);\n                if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                    setTimeout(() => { \n                        canLoadNextPage = true;\n                        loadContent(currentPageIndex + 1); \n                    }, config.delayTime);\n                } else {\n                    canLoadNextPage = true;\n                    if (autoLoadInProgress) {\n                        hideLoadingStatus();\n                    }\n                }\n            }\n        }\n\n        // 更新视频源\n        function updateVideoSource() {\n            const selectedIndex = parseInt(document.getElementById('video-source-select').value);\n            if (isNaN(selectedIndex) || !videoSources[selectedIndex]) {\n                $('#messages').append(`<span class=\"warn\">未找到有效的视频源。</span><br>`);\n                console.warn(\"Invalid or undefined video source:\", selectedIndex, videoSources);\n                return;\n            }\n\n            const selectedSource = videoSources[selectedIndex];\n            document.getElementById('video-url').textContent = `视频地址:\\n ${selectedSource}`;\n\n            const videoSourceElement = document.getElementById('video-source');\n            videoSourceElement.src = selectedSource;\n\n            const videoElement = document.getElementById('video-element');\n            videoElement.load();\n\n            $('#messages').append(`<span>更新视频源为: ${selectedSource}</span><br>`);\n            console.log(\"Updated video source to:\", selectedSource);\n        }\n\n        // 切换总页数显示状态\n        function toggleTotalPagesDisplay() {\n            if (urls.length > 1) {\n                $('#page').show();\n            } else {\n                $('#page').hide();\n            }\n        }\n\n        // 页面加载完成后执行的主要逻辑\n        $(document).ready(function () {\n            imageBox = document.getElementById('images');\n            textBox = document.getElementById('text');\n            if (imageBox && textBox) {\n                new Viewer(imageBox, { title: true, interval: 2000 });\n                new Viewer(textBox, { title: true, interval: 2000 });\n            }\n\n            const totalPagesText = config.totalPagesText;\n            const totalPages = parseInt(totalPagesText, 10) || 1;\n            const baseUrl = '{{baseUrl}}';\n\n            clearContainers();\n            $('#urls, #debug-info textarea, #video-url, #video-source-select').empty();\n            $('#urls, #messages, #debug-info, #video-url, #video-container, #video-source-container, #images, #text').hide();\n\n            buildUrls(totalPages, baseUrl);\n\n            const urlSelect = document.getElementById('url-select');\n            if (urlSelect.options.length > 0) {\n                urlSelect.value = '0'; \n\n                if (config.autoLoading) {\n                    autoLoadInProgress = true;\n                    for (let i = 0; i < urls.length; i++) {\n                        loadContent(i);\n                    }\n                } else {\n                    loadContent(0);\n                }\n            } else {\n                loadContent(0);\n            }\n\n            $('#url-select').change(function () {\n                clearContainers();\n                const selectedIndex = parseInt($(this).val());\n                loadContent(selectedIndex);\n            });\n            $('#prev-page-btn').click(function () {\n                clearContainers();\n                if (currentPageIndex > 0) {\n                    loadContent(currentPageIndex - 1);\n                }\n            });\n            $('#next-page-btn').click(function () {\n                clearContainers();\n                if (currentPageIndex < urls.length - 1) {\n                    loadContent(currentPageIndex + 1);\n                }\n            });\n            $('#auto-load-btn').click(function () {\n                autoLoadInProgress = true;\n                showLoadingStatus(1); \n                for (let i = currentPageIndex + 1; i < urls.length; i++) {\n                    loadContent(i);\n                }\n            });\n            $('#toggle-messages-btn').click(function () { $('#messages').toggle(); });\n            $('#toggle-urls-btn').click(function () { $('#urls').toggle(); });\n            $('#toggle-debug-btn').click(function () { $('#debug-info').toggle(); });\n        });\n    </script>\n</body>\n</html>",
    "ruleImage": "a@data-original",
    "ruleLink": "a.0@href",
    "ruleNextPage": "page||text.下一页@href",
    "rulePubDate": "[class=\"pic-text text-right\"]@text",
    "ruleTitle": "h4@text",
    "singleUrl": false,
    "sortUrl": "搜索🔍::/jiejie/index.php/vod/search.html?wd={{source.getVariable()}}\n黄瓜资源::/jiejie/index.php/vod/type/id/87.html\n155资源::/jiejie/index.php/vod/type/id/248.html\n森林资源::/jiejie/index.php/vod/type/id/117.html\n奥斯卡资源::/jiejie/index.php/vod/type/id/86.html\n百万资源::/jiejie/index.php/vod/type/id/237.html\n制服诱惑::/jiejie/index.php/vod/show/id/251.html\n中文字幕::/jiejie/index.php/vod/show/id/254.html\n美乳巨乳::/jiejie/index.php/vod/show/id/262.html\n熟女人妻::/jiejie/index.php/vod/show/id/259.html\n萝莉少女::/jiejie/index.php/vod/show/id/260.html\n强奸乱伦::/jiejie/index.php/vod/show/id/263.html\n无码专区::/jiejie/index.php/vod/show/id/249.html",
    "sourceComment": "jiejiesp.xyz",
    "sourceGroup": "版本",
    "sourceIcon": "https://img4.tuwandata.com/v2/thumb/jpg/NWFkMywxMTI1LDAsOSwzLDEsLTEsTk9ORSwsLDkw/u/res.tuwan.com/zipgoods/20190508/3b6408c569f8eb687a8dd6eb3578bdb9.jpg",
    "sourceName": "6.7",
    "sourceUrl": "https://wap.jiejiesp19.xyz"
  },
  {
    "articleStyle": 3,
    "customOrder": 569,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 1773222833605,
    "loadWithBaseUrl": true,
    "ruleArticles": "[class=\"box\"]@a",
    "ruleContent": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"UTF-8\">\n<title>内容提取</title>\n<!-- v2025.05.10 -->\n\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<script src=\"https://code.jquery.com/jquery-3.6.0.min.js\"></script>\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.css\" />\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.js\"></script>\n<style>\n    body { font-family: Arial, sans-serif; font-size: 16px; }\n    #title, #page, #loading-status { margin: 0 auto; font-size: 20px; text-align: center; }\n    #description, #urls, #video-url, #video-sources, #messages { width: 100%; max-width: 800px; margin: 1.5px auto; font-size: 14px; text-align: left; word-wrap: break-word; white-space: pre-wrap; }\n    #text, #text :not(img), #text img + * { text-indent: 2em; width: 100%; font-size: 16px; line-height: 1.5em; margin-top: 0; margin-bottom: 0; word-wrap: break-word; white-space: pre-wrap; }\n    img, #text img { width: 100%; height: auto; display: block; margin-bottom: 1.5px; }\n    .flex-container { display: flex; justify-content: center; align-items: center; gap: 10px; margin: 1.5px 0; font-size: 14px; }\n    button, select { flex: 1 1 31%; padding: 3px; border: 1px solid #ccc; border-radius: 5px; box-sizing: border-box; cursor: pointer; background-color: #f9f9f9; transition: background-color 0.3s ease; margin: 1.5px; min-width: 0; font-size: 14px; }\n    #url-select, #video-source-select { flex: 1 1 100%; margin-left: 0; margin-right: 0; text-align: center; }\n    #video-element { width: 100%; height: auto; }\n    textarea { width: 100%; height: auto; min-height: 100px; box-sizing: border-box; resize: vertical; }\n    .error, .warn { color: red; }\n</style>\n</head>\n<body>\n    <h3 id=\"title\">{{@@title@text||h1.0@text||h2.0@text||.title.0@text}}</h3>\n    <p id=\"description\">{{@@.info.0@html||.jianjie@html}}</p>\n    <p id=\"page\" style=\"display:none;\">共<span id=\"total-pages\">1</span>页</p>\n    <p id=\"loading-status\" style=\"display:none;\"></p>\n\n    <div class=\"flex-container\" id=\"loading-buttons\" style=\"display:none;\">\n        <button id=\"prev-page-btn\">上一页</button>\n        <button id=\"next-page-btn\">下一页</button>\n        <button id=\"auto-load-btn\">自&nbsp;&nbsp;动</button>\n    </div>\n    \n    <div class=\"flex-container\">\n        <select id=\"url-select\" style=\"display:none;\"></select>\n    </div>\n    \n    <div class=\"flex-container\">\n        <button id=\"toggle-urls-btn\">显/隐网址</button>\n        <button id=\"toggle-messages-btn\">显/隐信息</button>\n        <button id=\"toggle-debug-btn\">显/隐调试</button>\n    </div>\n    <div id=\"urls\"></div>\n    <div id=\"messages\"></div>\n    <div id=\"debug-info\"></div>\n    <div id=\"video-url\"></div>\n    <div id=\"video-container\" style=\"display: none;\">\n        <video id=\"video-element\" controls preload=\"auto\" width=\"640\" height=\"264\">\n            <source id=\"video-source\" src=\"\" type=\"\">您的浏览器不支持 video 标签。\n        </video>\n    </div>\n    <div class=\"flex-container\" id=\"video-source-container\" style=\"display: none;\">\n        <select id=\"video-source-select\" onchange=\"updateVideoSource()\"></select>\n    </div>\n    <div id=\"images\"></div>\n    <div id=\"text\"></div>\n\n    <script>\n        // 配置对象，包含各种选择器、延迟时间等配置项\n        const config = {    \n            videoSelector: 'body', // 视频选择器\n            imgSelector: '.gridlane-box-inside img,.photos figure img,.content p img', // 图片选择器\n            textSelector: '#content', // 文本选择器\n            debugSelector: '#content, .page, .pager, .content, script', // 调试信息选择器\n            swapImageAttributes: false, // 是否交换图片属性\n            delayTime: 1500, // 延迟提取时间\n            retryDelayTime: 1500, // 重试加载延迟时间\n            maxLoadAttempts: 3, // 最大加载次数\n            autoLoading: false, // true自动模式，false单页模式\n            debugOnce: 0, // 只在特定索引输出一次调试信息\n            totalPagesText: '{{@@.page.0@a.-2@textNodes}}', // 总页码\n            urlSuffixToRemove: /\\.html$/, // 移除url后缀\n            pageUrlText: '{urlPrefix}_{i}.html', // 拼接URL模板        \n            ListMode: true, // true网址列表模式，false网址拼接模式    \n            initialUrls: `{{@@#sort-item-5.0@a@href}}`, // 网址\n            initialUrlsName: `{{@@#sort-item-5.0@a@span@text}}`, // 网址名称\n            sourceurl: '', // 来源URL前缀\n        };\n\n        let videoSources = []; // 存储视频源数组\n        let loadAttempts = {}; // 记录每个URL的加载尝试次数\n        let urls = []; // 存储所有页面的URL\n        let imageBox;\n        let textBox;\n        let currentPageIndex = 0; // 当前页面索引\n        let canLoadNextPage = true; // 控制是否可以加载下一页\n        let autoLoadInProgress = false; // 自动加载状态\n\n        // 构建URL列表\n        function buildUrls(totalPages, baseUrl) {\n            let initialUrlsArray = config.initialUrls.trim().split('\\n').filter(url => url.trim() !== '');\n            let initialUrlsNameArray = config.initialUrlsName.trim().split('\\n').filter(name => name.trim() !== '');\n\n            if (config.ListMode && initialUrlsArray.length > 0) {\n                if (initialUrlsArray.length !== initialUrlsNameArray.length) {\n                    $('#messages').append(`<span class=\"warn\">警告：initialUrls 和 initialUrlsName 的长度不匹配。</span><br>`);\n                }\n\n                urls = initialUrlsArray.map(url => {\n                    if (config.sourceurl && url.startsWith('/') && !/^https?:\\/\\//i.test(url)) {\n                        return config.sourceurl.replace(/\\/$/, '') + url;\n                    } else {\n                        return url;\n                    }\n                });\n\n                urls.forEach((url, index) => {\n                    const name = initialUrlsNameArray[index] || `第 ${index + 1} 页`;\n                    $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n                    $('#urls').append(`<div>${name}: ${url}</div>`);\n                });\n            } else {\n                if (totalPages === 1) {\n                    urls.push(baseUrl);\n                } else {\n                    urls.push(baseUrl);\n                    for (let i = 2; i <= totalPages; i++) {\n                        urls.push(config.pageUrlText.replace('{urlPrefix}', baseUrl.replace(config.urlSuffixToRemove, '').replace(/\\/$/, '')).replace('{i}', i));\n                    }\n                }\n\n                urls.forEach((url, index) => {\n                    const name = `第 ${index + 1} 页`;\n                    $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n                    $('#urls').append(`<div>${name}: ${url}</div>`);\n                });\n            }\n\n            $('#total-pages').text(urls.length);\n            toggleNavigationButtons();\n            toggleTotalPagesDisplay();\n        }\n\n        // 规范化URL\n        function normalizeUrl(url) {\n            if (typeof url !== 'string' || !url.trim()) {\n                return '';\n            }\n            const match = url.match(/['\"](.*?)['\"]/);\n            if (match && match[1]) {\n                url = match[1];\n            }\n\n            function processUrl(str) {\n                str = str.trim();\n                str = str.replace(/\\\\u[\\dA-F]{4}/gi, match => String.fromCharCode(parseInt(match.replace(/\\\\u/g, ''), 16)));\n                str = decodeURIComponent(str);\n                str = str.replace(/^http:\\/([^/])/, 'http://$1');\n                str = str.replace(/^https:\\/([^/])/, 'https://$1');\n                return str;\n            }\n            return processUrl(url);\n        }\n\n        // 清空容器内容\n        function clearContainers() {\n            $('#messages').empty();\n            $('#images').empty();\n            $('#text').empty();\n        }\n\n        // 更新图像源\n        function updateImageSrc(elements, shouldSwap) {\n            elements.each(function () {\n                const $this = $(this);\n                const attrsToUpdate = {};\n                if (shouldSwap) {\n                    ['data-original', 'data-src', 'data-url'].forEach(attr => {\n                        if ($this.attr(attr)) {\n                            attrsToUpdate['src'] = $this.attr(attr);\n                        }\n                    });\n                }\n                $this.attr(attrsToUpdate);\n            });\n            return elements;\n        }\n\n        // 切换导航按钮显示状态\n        function toggleNavigationButtons() {\n            if ($('#url-select option').length > 1 && !config.autoLoading) {\n                $('#loading-buttons').show();\n                $('#url-select').show();\n            } else {\n                $('#loading-buttons').hide();\n                $('#url-select').hide();\n            }\n        }\n\n        // 显示加载状态\n        function showLoadingStatus(pageNumber) {\n            const selectedOption = $('#url-select option:selected').text();\n            $('#loading-status').text(`正在加载：${selectedOption}`).show();\n        }\n\n        // 隐藏加载状态\n        function hideLoadingStatus() {\n            $('#loading-status').hide();\n        }\n\n        // 加载指定索引的内容\n        function loadContent(index) {\n            if (index < 0 || index >= urls.length || !canLoadNextPage) return;\n            canLoadNextPage = false;\n            currentPageIndex = index;\n            $('#url-select').val(index);\n            $('#messages').append(`<div>当前地址: <span class=\"warn\">${urls[index]}</span></div>`);\n            if (autoLoadInProgress) {\n                showLoadingStatus(index + 1);\n            }\n            $.ajax({\n                url: urls[index],\n                type: 'GET',\n                success: function (data) {\n                    try {\n                    const $data = $(data);\n                    let updatedHtmlContent = data.replace(/(['\"])(\\/\\/)(?!\\/)/g, '$1https://')\n                        .replace(/src=\"upload/gi, 'src=\"/upload')\n                        .replace(/style=[\"'][^'\"]+[\"']/gi, '')\n                        .replace(/\\\\\\//g, '/');\n                    const parser = new DOMParser();\n                    const doc = parser.parseFromString(updatedHtmlContent, \"text/html\");\n\n                    if (config.debugOnce === index) {\n                        const debugElements = $(doc).find(config.debugSelector);\n                        if (debugElements.length > 0) {\n                            const debugContents = $('<pre>').html(debugElements.clone().wrapAll('<div/>').parent().html()).html();\n                            $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">${debugContents}</textarea></span>`);\n                        } else {\n                            $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">调试信息未提取到内容，请检查选择器！</textarea></span>`);\n                        }\n                    }\n                    // 方法1：提取视频\n                    const videoSources1 = [];\n                    const videoContents = $(doc).find(config.videoSelector);\n                    const videoTags = $(videoContents).find('video, source');\n                    videoTags.each(function() {\n                        const videosrc = $(this).attr('src') || \n                                     $(this).attr('data-src') || \n                                     $(this).attr('data-original') || '';\n                        \n                        if (videosrc) {\n                            videoSources1.push(videosrc);\n                        }\n                    });\n                    //反馈\n                    if (videoSources1.length > 0) {\n                        $('#messages').append(`<span>方法1，找到 ${videoSources1.length} 个视频。</span><br>`);\n                    }\n\n                    // 方法2：正则提取视频\n                    const regex = /['\"]https?[^'<>\"]+(m3u8|mp4|webm|ogg|flv|mp3|m4a|wav|ape|flac)([^'<>\"]+)?['\"]/gi;\n                    const matches = data.match(regex);\n                    const videoSources2 = [];\n\n                    if (matches) {\n                        const uniqueMatches = [...new Set(matches)];\n                    \n                        uniqueMatches.forEach(match => {\n                            const normalizedSrc = normalizeUrl(match.replace(/['\"]/g, ''));\n                            videoSources2.push(normalizedSrc);\n                        });\n                    }\n                    //反馈\n                    if (videoSources2.length > 0) {\n                        $('#messages').append(`<span>方法2，找到 ${videoSources2.length} 个视频。</span><br>`);\n                    }\n\n                    // 合并两种方法的结果\n                    videoSources = [...videoSources1, ...videoSources2];\n\n                    // 去重并标准化 URL\n                    const imageExtensions = /\\.(jpg|jpeg|png|gif|bmp|svg)$/i;\n\n                    videoSources = videoSources\n                                  .map(src => normalizeUrl(src.replace(/\\\\+/g, '')))\n                                  .filter(src => src) // 过滤空值\n                                  .filter(src => !imageExtensions.test(src)); // 移除图片地址\n                        \n                    videoSources = [...new Set(videoSources)];// 去重\n\n                    // 显示最终结果\n                    $('#messages').append(`<span>总共找到 ${videoSources.length} 个视频。</span><br>`);\n\n                    if (videoSources.length > 0) {\n                        $('#messages').append(`<span>成功提取到视频，找到 ${videoSources.length} 个视频。</span><br>`);\n                        videoSources.forEach((src, idx) => {\n                            $('#messages').append(`<div>视频地址:<span class=\"warn\"> ${src}</span><br></div>`);\n                            $('#video-source-select').append(`<option value=\"${idx}\">视频源 ${idx + 1}</option>`);\n                        });\n                    \n                        if (videoSources.length == 1) {\n                            $('#video-container').show();\n                            $('#video-url').show();\n                            $('#video-source-container').hide();\n                            updateVideoSource();\n                        } else if (videoSources.length > 1) {\n                            $('#video-container').show();\n                            $('#video-url').show();\n                            $('#video-source-container').show();\n                            updateVideoSource();\n                        } else {\n                            $('#video-container').hide();\n                            $('#video-url').hide();\n                            $('#video-source-container').hide();\n                        }\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未找到视频源。</span><br>`);\n                        $('#video-container').hide();\n                        $('#video-url').hide();\n                        $('#video-source-container').hide();\n                    }\n\n                    //提取图片\n                    const $imgContents = $(doc).find(config.imgSelector);\n                    const shouldSwap = config.swapImageAttributes;\n                    const newContents = updateImageSrc($imgContents.clone(), shouldSwap);\n                    $('#images').append(newContents).show();\n                    if (newContents.length > 0) {\n                        $('#messages').append(`<span>成功提取图片，共 ${newContents.length} 张。</span><br>`);\n                        newContents.each(function () {\n                            const imgSrc = $(this).attr('src') || $(this).attr('data-original') || $(this).attr('data-src') || $(this).attr('data-url');\n                            $('#messages').append(`<div>地址:<span class=\"warn\"> ${imgSrc}</span><br></div>`);\n                        });\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未提取到图片。</span><br>`);\n                    }\n\n                    //提取图片和文本\n                    const textContents = $(doc).find(config.textSelector).map(function () {\n                        const $currentContents = $(this);\n                        $currentContents.find('img + br, script, video, source, iframe').remove();\n                        $currentContents.html($currentContents.html().replace(/>\\s+/gi, '>').replace(/<\\/?br\\s*([^>]*)\\s*\\/?>/gi, '\\n').replace(/\\n+/g, '\\n'));\n                        return $currentContents.html();\n                    }).get().join('');\n                    if (textContents.trim()) {\n                        $('#text').append(`<span>${textContents}</span><br>`).show();\n                        $('#messages').append(`<span>成功提取图文。</span><br>`);\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未提取到图文。</span><br>`);\n                    }\n\n                    if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                        setTimeout(() => { \n                            canLoadNextPage = true;\n                            loadContent(currentPageIndex + 1); \n                        }, config.delayTime);\n                    } else {\n                        canLoadNextPage = true;\n                        if (autoLoadInProgress) {\n                            hideLoadingStatus();\n                        }\n                    }\n                } catch (parseError) {\n                    $('#messages').append(`<span class=\"error\">解析页面内容时发生错误: ${parseError.message}</span><br>`);\n                    handleLoadFailure(urls, index);\n                } finally {\n                    if (imageBox) imageBox.viewer.update();\n                    if (textBox) textBox.viewer.update();\n                }\n            },\n            error: function (jqXHR, textStatus, errorThrown) {\n                let errorMessage = `内容加载失败: ${urls[index]}`;\n                switch (textStatus) {\n                    case 'timeout':\n                        errorMessage += ', 请求超时';\n                        break;\n                    case 'abort':\n                        errorMessage += ', 请求被取消';\n                        break;\n                    case 'parsererror':\n                        errorMessage += ', 解析响应出错';\n                        break;\n                    default:\n                        errorMessage += `, 状态码: ${jqXHR.status}, 错误信息: ${errorThrown}`;\n                        break;\n                }\n                $('#messages').append(`<span class=\"error\">${errorMessage}</span><br>`);\n                handleLoadFailure(urls, index);\n                }\n            });\n        }\n\n        // 处理加载失败的情况\n        function handleLoadFailure(urls, index) {\n            if (!loadAttempts[urls[index]]) {\n                loadAttempts[urls[index]] = 1;\n            } else {\n                loadAttempts[urls[index]]++;\n            }\n            if (loadAttempts[urls[index]] <= config.maxLoadAttempts) {\n                const retryMessage = `第${index + 1}页加载失败，正在进行第${loadAttempts[urls[index]]}次加载！`;\n                $('#messages').append(`<span class=\"error\">${retryMessage}</span><br>`);\n                setTimeout(() => { \n                    canLoadNextPage = true;\n                    loadContent(index); \n                }, config.retryDelayTime);\n            } else {\n                const finalErrorMessage = `第${index + 1}页加载失败，已达到最大尝试次数(${config.maxLoadAttempts})！`;\n                $('#messages').append(`<span class=\"error\">${finalErrorMessage}</span><br>`);\n                if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                    setTimeout(() => { \n                        canLoadNextPage = true;\n                        loadContent(currentPageIndex + 1); \n                    }, config.delayTime);\n                } else {\n                    canLoadNextPage = true;\n                    if (autoLoadInProgress) {\n                        hideLoadingStatus();\n                    }\n                }\n            }\n        }\n\n        // 更新视频源\n        function updateVideoSource() {\n            const selectedIndex = parseInt(document.getElementById('video-source-select').value);\n            if (isNaN(selectedIndex) || !videoSources[selectedIndex]) {\n                $('#messages').append(`<span class=\"warn\">未找到有效的视频源。</span><br>`);\n                console.warn(\"Invalid or undefined video source:\", selectedIndex, videoSources);\n                return;\n            }\n\n            const selectedSource = videoSources[selectedIndex];\n            document.getElementById('video-url').textContent = `视频地址:\\n ${selectedSource}`;\n\n            const videoSourceElement = document.getElementById('video-source');\n            videoSourceElement.src = selectedSource;\n\n            const videoElement = document.getElementById('video-element');\n            videoElement.load();\n\n            $('#messages').append(`<span>更新视频源为: ${selectedSource}</span><br>`);\n            console.log(\"Updated video source to:\", selectedSource);\n        }\n\n        // 切换总页数显示状态\n        function toggleTotalPagesDisplay() {\n            if (urls.length > 1) {\n                $('#page').show();\n            } else {\n                $('#page').hide();\n            }\n        }\n\n        // 页面加载完成后执行的主要逻辑\n        $(document).ready(function () {\n            imageBox = document.getElementById('images');\n            textBox = document.getElementById('text');\n            if (imageBox && textBox) {\n                new Viewer(imageBox, { title: true, interval: 2000 });\n                new Viewer(textBox, { title: true, interval: 2000 });\n            }\n\n            const totalPagesText = config.totalPagesText;\n            const totalPages = parseInt(totalPagesText, 10) || 1;\n            const baseUrl = '{{baseUrl}}';\n\n            clearContainers();\n            $('#urls, #debug-info textarea, #video-url, #video-source-select').empty();\n            $('#urls, #messages, #debug-info, #video-url, #video-container, #video-source-container, #images, #text').hide();\n\n            buildUrls(totalPages, baseUrl);\n\n            const urlSelect = document.getElementById('url-select');\n            if (urlSelect.options.length > 0) {\n                urlSelect.value = '0'; \n\n                if (config.autoLoading) {\n                    autoLoadInProgress = true;\n                    for (let i = 0; i < urls.length; i++) {\n                        loadContent(i);\n                    }\n                } else {\n                    loadContent(0);\n                }\n            } else {\n                loadContent(0);\n            }\n\n            $('#url-select').change(function () {\n                clearContainers();\n                const selectedIndex = parseInt($(this).val());\n                loadContent(selectedIndex);\n            });\n            $('#prev-page-btn').click(function () {\n                clearContainers();\n                if (currentPageIndex > 0) {\n                    loadContent(currentPageIndex - 1);\n                }\n            });\n            $('#next-page-btn').click(function () {\n                clearContainers();\n                if (currentPageIndex < urls.length - 1) {\n                    loadContent(currentPageIndex + 1);\n                }\n            });\n            $('#auto-load-btn').click(function () {\n                autoLoadInProgress = true;\n                showLoadingStatus(1); \n                for (let i = currentPageIndex + 1; i < urls.length; i++) {\n                    loadContent(i);\n                }\n            });\n            $('#toggle-messages-btn').click(function () { $('#messages').toggle(); });\n            $('#toggle-urls-btn').click(function () { $('#urls').toggle(); });\n            $('#toggle-debug-btn').click(function () { $('#debug-info').toggle(); });\n        });\n    </script>\n</body>\n</html>",
    "ruleImage": "img@data-src",
    "ruleLink": "a.0@href",
    "ruleNextPage": "page",
    "rulePubDate": "em@text",
    "ruleTitle": "strong@text",
    "singleUrl": false,
    "sortUrl": "搜索🔍::/new/index.php?mod=search&kw={{source.getVariable()}}&page={{page}}\n最新::/new/index.php?page={{page}}\n国产自拍::/new/index.php?mod=forumdisplay&fid=10065&page={{page}}\n欧美极品::/new/index.php?mod=forumdisplay&fid=10066&page={{page}}\n日韩无码::/new/index.php?mod=forumdisplay&fid=10067&page={{page}}\n日韩有码::/new/index.php?mod=forumdisplay&fid=10068&page={{page}}\n中文字幕::/new/index.php?mod=forumdisplay&fid=10069&page={{page}}\n动漫精品::/new/index.php?mod=forumdisplay&fid=10070&page={{page}}\n极品萝莉::/new/index.php?mod=forumdisplay&fid=10071&page={{page}}\n强奸乱伦::/new/index.php?mod=forumdisplay&fid=10072&page={{page}}\n童颜巨乳::/new/index.php?mod=forumdisplay&fid=10073&page={{page}}\n三级自慰::/new/index.php?mod=forumdisplay&fid=10075&page={{page}}",
    "sourceComment": "xxrbs.com",
    "sourceGroup": "版本",
    "sourceIcon": "https://xn--bwy.taojing62.buzz/upload/155042831.jpg",
    "sourceName": "6.8",
    "sourceUrl": "https://879.xxrbs.biz/"
  },
  {
    "articleStyle": 1,
    "customOrder": 570,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "$.rescont.data",
    "ruleContent": "<video src=\"{{$.rescont.videopath}}\" controls width=\"auto\" height=\"auto\"></video>",
    "ruleImage": "$.coverpath",
    "ruleLink": "http://lu3fcm.aksdsrle.com/api/videoplay/{{$.id}}?&uuid=1",
    "ruleNextPage": "page",
    "rulePubDate": "{{$.authername}}",
    "ruleTitle": "$.title",
    "singleUrl": false,
    "sortUrl": "性感佳人::http://lu3fcm.aksdsrle.com/api/videosort/9?orderby=&page={{page}}&uuid=1&device=0\n国产精品::http://lu3fcm.aksdsrle.com/api/videosort/10?orderby=&page={{page}}&uuid=1&device=0\nH动漫::http://lu3fcm.aksdsrle.com/api/videosort/14?orderby=&page={{page}}&uuid=1&device=0\n欧美激情::http://lu3fcm.aksdsrle.com/api/videosort/16?orderby=&page={{page}}&uuid=1&device=0\n三级电影::http://lu3fcm.aksdsrle.com/api/videosort/25?orderby=&page={{page}}&uuid=1&device=0\n高清无码::http://lu3fcm.aksdsrle.com/api/videosort/26?orderby=&page={{page}}&uuid=1&device=0\n美乳巨乳::http://lu3fcm.aksdsrle.com/api/videosort/27?orderby=&page={{page}}&uuid=1&device=0\n少女萝莉::http://lu3fcm.aksdsrle.com/api/videosort/28?orderby=&page={{page}}&uuid=1&device=0\n家庭乱伦::http://lu3fcm.aksdsrle.com/api/videosort/29?orderby=&page={{page}}&uuid=1&device=0\n绝顶潮吹::http://lu3fcm.aksdsrle.com/api/videosort/30?orderby=&page={{page}}&uuid=1&device=0\n痴女淫乱::http://lu3fcm.aksdsrle.com/api/videosort/31?orderby=&page={{page}}&uuid=1&device=0\n强奸凌辱::http://lu3fcm.aksdsrle.com/api/videosort/34?orderby=&page={{page}}&uuid=1&device=0\n制服丝袜::http://lu3fcm.aksdsrle.com/api/videosort/35?orderby=&page={{page}}&uuid=1&device=0\nAV剧情::http://lu3fcm.aksdsrle.com/api/videosort/36?orderby=&page={{page}}&uuid=1&device=0\n人妻熟女::http://lu3fcm.aksdsrle.com/api/videosort/37?orderby=&page={{page}}&uuid=1&device=0\n偷拍盗摄::http://lu3fcm.aksdsrle.com/api/videosort/38?orderby=&page={{page}}&uuid=1&device=0\n风俗沙龙::http://lu3fcm.aksdsrle.com/api/videosort/39?orderby=&page={{page}}&uuid=1&device=0\n国产传媒::http://lu3fcm.aksdsrle.com/api/videosort/40?orderby=&page={{page}}&uuid=1&device=0\n女同性恋::http://lu3fcm.aksdsrle.com/api/videosort/41?orderby=&page={{page}}&uuid=1&device=0\n直播网红::http://lu3fcm.aksdsrle.com/api/videosort/42?orderby=&page={{page}}&uuid=1&device=0\n国产AV::http://lu3fcm.aksdsrle.com/api/videosort/44?orderby=&page={{page}}&uuid=1&device=0\nSM调教::http://lu3fcm.aksdsrle.com/api/videosort/45?orderby=&page={{page}}&uuid=1&device=0\nAV解说::http://lu3fcm.aksdsrle.com/api/videosort/49?orderby=&page={{page}}&uuid=1&device=0\n热门爆料::http://lu3fcm.aksdsrle.com/api/videosort/50?orderby=&page={{page}}&uuid=1&device=0",
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "6.9",
    "sourceUrl": "http://lu3fcm.aksdsrle.com/api/videosort/9?orderby=&page=1&uuid=1&device=0"
  },
  {
    "articleStyle": 2,
    "customOrder": 571,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n  \"User-Agent\": \"Mozilla/5.0 (Linux; Android 13; SM-S918B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36\",\n  \"Referer\": \"https://hksexdoll.com/\"\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "@js:\n// 1. 列表规则分流\nif (baseUrl.includes(\"hksexdoll.com\")) {\n    // 娃娃：原版规则不动\n    result = org.jsoup.Jsoup.parse(result).select(\".brxe-ivopbr\");\n} else {\n    // 【关键修改】影视：只抓取 class=\"my-movie-grid\" 下面的 li\n    // 这样可以避开 WordPress 顶部的菜单栏干扰\n    result = org.jsoup.Jsoup.parse(result).select(\".my-movie-grid li\");\n}\nresult;",
    "ruleContent": "@js:\n// 5. 详情页跳转逻辑（原版逻辑保持不变）\nif (!baseUrl.includes(\"hksexdoll.com\")) {\n    // 只要不是娃娃官网，直接跳浏览器\n    java.startBrowser(baseUrl, \"正在前往...\");\n    result = \"正在跳转到外部浏览器播放...<br>\" + baseUrl;\n} else {\n    // 娃娃详情页解析（原版代码不动）\n    var doc = org.jsoup.Jsoup.parse(result);\n    var myImgs = [];\n    var rawList = doc.select(\".brxe-image-gallery img, .bricks-image-gallery img, noscript img, .entry-content img\");\n    for (var i = 0; i < rawList.size(); i++) {\n        var s = rawList.get(i).attr(\"data-src\") || rawList.get(i).attr(\"src\");\n        if (s && s.startsWith(\"http\") && !s.toLowerCase().includes(\".svg\") && !s.includes(\"100x100\") && !myImgs.includes(s)) {\n            myImgs.push(s);\n        }\n    }\n    var displayTitle = (typeof title !== 'undefined' && title && title !== \"null\") ? title : (doc.select(\"h1\").text() || \"1:1 Show\");\n    var h = \"<!DOCTYPE html><html><head><style>body{margin:0;background:#000;color:#eee;font-family:sans-serif;padding-bottom:50px} .top{background:#1a1a1a;color:#888;text-align:center;padding:12px;font-size:11px;position:sticky;top:0;z-index:99;letter-spacing:2px;border-bottom:1px solid #222} .header{padding:35px 20px 20px;background:#000;text-align:center} .img-wrap{padding:0 8px} .img-item{position:relative;margin-bottom:10px;border-radius:2px;overflow:hidden} .img-item img{width:100%;display:block;background:#111} .img-count{position:absolute;bottom:8px;right:10px;background:rgba(0,0,0,0.4);color:#999;padding:2px 6px;border-radius:2px;font-size:10px;font-family:monospace}</style></head><body>\";\n    h += \"<div class='top'>HD VISUAL SHOWCASE</div>\";\n    h += \"<div class='header'><h1 style='font-size:19px;margin:0;font-weight:400;color:#fff;letter-spacing:0.5px'>\" + displayTitle + \"</h1></div>\";\n    h += \"<div class='img-wrap'>\";\n    for(var k=0; k<myImgs.length; k++){\n        h += \"<div class='img-item'><img src='\" + myImgs[k] + \"'><span class='img-count'>\" + (k+1) + \" / \" + myImgs.length + \"</span></div>\";\n    }\n    h += \"</div><p style='text-align:center;color:#222;font-size:9px;margin-top:30px;letter-spacing:1px'>EXHIBITION ONLY</p></body></html>\";\n    result = h;\n}\nresult;",
    "ruleImage": "@js:\n// 4. 图片分流\nif (baseUrl.includes(\"hksexdoll.com\")) {\n    // 娃娃：原版规则不动\n    var img = result.select(\"img\").first();\n    result = img ? (img.attr(\"data-src\") || img.attr(\"src\")) : \"\";\n} else {\n    // 【关键修改】影视：抓取你代码里的 Google API 图标\n    var img = result.select(\"img\").first();\n    // 如果抓到了图就用图，抓不到就用默认图标兜底\n    result = img ? img.attr(\"src\") : \"https://goradioai.com/favicon.ico\";\n}\nresult;",
    "ruleLink": "@js:\n// 3. 链接分流\nif (baseUrl.includes(\"hksexdoll.com\")) {\n    var el = result.select(\"a.brxe-sfypzq\").first();\n    result = el ? el.attr(\"href\") : \"\";\n} else {\n    var el = result.select(\"a\").first();\n    result = el ? el.attr(\"href\") : \"\";\n}\nresult;",
    "ruleNextPage": "text.Next@href || .next.page-numbers@href",
    "ruleTitle": "@js:\n// 2. 标题分流\nif (baseUrl.includes(\"hksexdoll.com\")) {\n    result = result.select(\".product-title a\").text();\n} else {\n    // 影视：直接获取文本（会自动忽略掉 img 标签，只留文字）\n    result = result.text();\n}\nresult;",
    "singleUrl": false,
    "sortUrl": "全部展示::/shop/\n🎬 影视大全::https://goradioai.com/share/",
    "sourceGroup": "版本",
    "sourceIcon": "https://hksexdoll.com/favicon.ico",
    "sourceName": "7.0",
    "sourceUrl": "https://hksexdoll.com"
  },
  {
    "articleStyle": 1,
    "customOrder": 572,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "header": "{\"User-Agent\":\"Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Mobile Safari/537.36 Edg/91.0.864.67\"\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "li",
    "ruleContent": "class.bz_message_table&&class.message@all##file##src",
    "ruleImage": "img@src",
    "ruleLink": "a@href",
    "ruleNextPage": "page",
    "rulePubDate": "tag.a@tag.span.3@text",
    "ruleTitle": "a@tag.span.0@text",
    "singleUrl": false,
    "sortUrl": "国产自拍::https://galaxy.st1003.top/forum.php?mod=forumdisplay&fid=18&page={{page}}&mobile=2\n亚洲无码::https://galaxy.st1003.top/forum.php?mod=forumdisplay&fid=19&page={{page}}&mobile=2\n中文字幕::https://galaxy.st1003.top/forum.php?mod=forumdisplay&fid=21&page={{page}}&mobile=2\n欧美专区::https://galaxy.st1003.top/forum.php?mod=forumdisplay&fid=25&page={{page}}&mobile=2",
    "sourceComment": "发布页\n6996dizhi.com\n<js>github@ifwlzs</js>",
    "sourceGroup": "版本",
    "sourceIcon": "https://galaxy.st1003.top/favicon.ico",
    "sourceName": "7.1网页还能用",
    "sourceUrl": "https://galaxy.st1003.top/",
    "style": "img{\n\twidth:100%;\n\theight:auto;\n\t}##github@ifwlzs"
  },
  {
    "articleStyle": 1,
    "customOrder": 577,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.inner_layer@ul@li@a",
    "ruleContent": "text.普通下载@href\n<js>\nresult+=\".m3u8\";\r\nresult = \"<video src=\\\"\" + result + \"\\\" width=\\\"100%\\\" height=\\\"240px\\\" controls=\\\"controls\\\" ></video>\";\r\nresult = \"<html><head><meta charset=\\\"utf-8\\\"><meta name=\\\"viewport\\\" content=\\\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\\\" /><style>html,body{margin:0;padding:0;width:100%;}</style></head><body>\" + result + \"</body></html>\"\n</js>",
    "ruleImage": "img@data-original||img@src",
    "ruleLink": "href##$##,\\{\\\"webView\\\": true\\}",
    "ruleNextPage": "page",
    "rulePubDate": "class.timeobxobx@text",
    "ruleTitle": "p.-1@text",
    "singleUrl": false,
    "sortUrl": "亚洲精品::/Html/110/{{page - 1 == 0 ? \"\":\"index-\"+page+\".html\"}},{\"webView\": true}\nS级女优::/Html/100/{{page - 1 == 0 ? \"\":\"index-\"+page+\".html\"}},{\"webView\": true}\n成人动漫::/Html/101/{{page - 1 == 0 ? \"\":\"index-\"+page+\".html\"}},{\"webView\": true}\n欧美巨龙::/Html/62/{{page - 1 == 0 ? \"\": \"index-\"+page+\".html\"}},{\"webView\": true}\n熟女人妻::/Html/111/{{page - 1 == 0 ? \"\": \"index-\"+page+\".html\"}},{\"webView\": true}\n美颜巨乳::/Html/112/{{page - 1 == 0 ? \"\": \"index-\"+page+\".html\"}},{\"webView\": true}\n颜射吃精::/Html/113/{{page - 1 == 0 ? \"\": \"index-\"+page+\".html\"}},{\"webView\": true}\n丝袜制服::/Html/114/{{page - 1 == 0 ? \"\": \"index-\"+page+\".html\"}},{\"webView\": true}\n自拍隐摄::/Html/89/{{page - 1 == 0 ? \"\": \"index-\"+page+\".html\"}},{\"webView\": true}\n换妻游戏::/Html/90/{{page - 1 == 0 ? \"\": \"index-\"+page+\".html\"}},{\"webView\": true}\n网红主播::/Html/91/{{page - 1 == 0 ? \"\": \"index-\"+page+\".html\"}},{\"webView\": true}\n经典三级::/Html/109/{{page - 1 == 0 ? \"\": \"index-\"+page+\".html\"}},{\"webView\": true}",
    "sourceComment": "发布页https://guochandizhi6.com/\n永久地址https://992kp.com/",
    "sourceGroup": "版本",
    "sourceIcon": "https://i.postimg.cc/j5ZxW6v7/1657950527553.png",
    "sourceName": "7.2",
    "sourceUrl": "https://992.992kp340.work:8443/index.html"
  },
  {
    "articleStyle": 1,
    "customOrder": 578,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\"User-Agent\":\"Mozilla/5.0 (Linux; Android 11; PCAM10 Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4103.106 Mobile Safari/537.36\"} ",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "[class=\"H5__content\"]@[class=\"video__wrap\"]@a",
    "ruleContent": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"UTF-8\">\n<title>内容提取-双模版</title>\n\n<script src=\"https://code.jquery.com/jquery-3.6.0.min.js\"></script>\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.css\" />\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.js\"></script>\n<style>\n    body {font-family: Arial, sans-serif;font-size: 16px;}\n    #title, #page, #loading-status {margin: 0 auto;font-size: 20px;text-align: center;}\n    #description, #urls, #video-url, #video-sources, #messages {width: 100%;max-width: 800px;margin: 1.5px auto;font-size: 14px;text-align: left;word-wrap: break-word;white-space: pre-wrap;}\n    #text, #text :not(img), #text img + * {text-indent: 2em;width: 100%;font-size: 16px;line-height: 1.5em;margin-top: 0;margin-bottom: 0;word-wrap: break-word;white-space: pre-wrap;}\n    img, #text img {width: 100%;height: auto;display: block;margin-bottom: 1.5px;}\n    .flex-container {display: flex;justify-content: center;align-items: center;gap: 10px;margin: 1.5px 0;font-size: 14px;}\n    button, select {flex: 1 1 31%; padding: 3px;border: 1px solid #ccc;border-radius: 5px;box-sizing: border-box;cursor: pointer;background-color: #f9f9f9;transition: background-color 0.3s ease;margin: 1.5px;min-width: 0;font-size: 14px;}\n    #url-select, #video-source-select {flex: 1 1 100%; margin-left: 0;margin-right: 0;text-align: center;}\n    #video-element {width: 100%;height: auto;}\n    textarea {width: 100%;height: auto;min-height: 100px;box-sizing: border-box;resize: vertical;}\n    .error, .warn {color: red;}\n    #urls,#messages,#debug-info,#video-url,#video-container,#video-source-select,#images,#text {display:none;}\n</style>\n</head>\n<body>\n    <h3 id=\"title\">{{@@title@text||h1.0@text||h2.0@text||.title.0@text##高清在线观看|-国产剧| - 专享影视| - 热门高清|影视大全|海外华人|高清1080p|无广告影院|\\|}}</h3>\n    <p id=\"description\">{{@@.info.0@html||.jianjie@html}}</p>\n    <p id=\"page\">共<span id=\"total-pages\">1</span>页</p>\n    <p id=\"loading-status\" style=\"display:none;\"></p>\n    <div class=\"flex-container\" id=\"loading-buttons\" style=\"display:none;\">\n        <button id=\"prev-page-btn\">上一页</button>\n        <button id=\"next-page-btn\">下一页</button>\n        <button id=\"auto-load-btn\">自&nbsp;&nbsp;动</button>\n    </div>\n    <div class=\"flex-container\">\n        <select id=\"url-select\" style=\"display:none;\"></select>\n    </div>\n    <div class=\"flex-container\">\n        <button id=\"toggle-urls-btn\">显/隐网址</button>\n        <button id=\"toggle-messages-btn\">显/隐信息</button>\n        <button id=\"toggle-debug-btn\">显/隐调试</button>\n    </div>\n    <div id=\"urls\"></div>\n    <div id=\"messages\"></div>\n    <div id=\"debug-info\"></div>\n    <div id=\"video-url\"></div>\n    <div id=\"video-container\">\n        <video id=\"video-element\" controls preload=\"auto\" width=\"640\" height=\"264\">\n            <source id=\"video-source\" src=\"\" type=\"\">\n            您的浏览器不支持 video 标签。\n        </video>\n    </div>\n    <div class=\"flex-container\">\n        <select id=\"video-source-select\" onchange=\"updateVideoSource()\"></select>\n    </div>\n    <div id=\"images\"></div>\n    <div id=\"text\"></div>\n    <script>\nconst config = {    \n    videoSelector: 'body', // 视频选择器\n    imgSelector: '.gridlane-box-inside img', // 图片选择器\n    textSelector: '#content', // 文本选择器\n    debugSelector: '.player-wrapper', // 调试信息选择器\n    swapImageAttributes: false, // 是否交换图片属性\n    delayTime: 1500, // 延迟提取时间\n    retryDelayTime: 1500, // 重试加载延迟时间\n    maxLoadAttempts: 3, // 最大加载次数\n    autoLoading: false, // true自动模式，false单页模式\n    debugOnce: 0, // 只在特定索引输出一次调试信息\n         /* -网页拼接-*/    \n    totalPagesText: '{{@@.pager@li.-3@a@textNodes}}', // 总页码\n    urlSuffixToRemove: /\\.aspx$/, // 移除url后缀\n    pageUrlText: '{urlPrefix}p{i}.aspx', // 拼接URL模板        \n        /* -以上拼接模式（网址需要拼接）-*/\n        /* -上下分割线-*/\n        /* -以下列表模式（地址与目录对应，比如视频、漫画）-*/   \n    ListMode: true, // true网址列表模式，false网址拼接模式    \n    initialUrls: `{{@@#sort-item-5.0@a@href}}`, // 网址\n    initialUrlsName: `{{@@#sort-item-5.0@a@span@text}}`, // 网址名称\n    sourceurl: '', // 来源URL前缀\n};\n\nlet videoSources = [];\nlet loadAttempts = {};\nlet urls = [];\nlet imageBox;\nlet textBox;\nlet currentPageIndex = 0;\nlet canLoadNextPage = true;\nlet autoLoadInProgress = false;\n\n// 构建URL列表\nfunction buildUrls(totalPages, baseUrl) {\n    let initialUrlsArray = config.initialUrls.trim().split('\\n').filter(url => url.trim() !== '');\n    let initialUrlsNameArray = config.initialUrlsName.trim().split('\\n').filter(name => name.trim() !== '');\n\n    if (config.ListMode && initialUrlsArray.length > 0) {\n        if (initialUrlsArray.length !== initialUrlsNameArray.length) {\n            $('#messages').append(`<span class=\"warn\">警告：initialUrls 和 initialUrlsName 的长度不匹配。</span><br>`);\n        }\n\n        urls = initialUrlsArray.map(url => {\n            if (config.sourceurl && url.startsWith('/') && !/^https?:\\/\\//i.test(url)) {\n                return config.sourceurl.replace(/\\/$/, '') + url;\n            } else {\n                return url;\n            }\n        });\n\n        urls.forEach((url, index) => {\n            const name = initialUrlsNameArray[index] || `第 ${index + 1} 页`;\n            $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n            $('#urls').append(`<div>${name}: ${url}</div>`);\n        });\n    } else {\n        if (totalPages === 1) {\n            urls.push(baseUrl);\n        } else {\n            urls.push(baseUrl);\n            for (let i = 2; i <= totalPages; i++) {\n                urls.push(config.pageUrlText.replace('{urlPrefix}', baseUrl.replace(config.urlSuffixToRemove, '').replace(/\\/$/, '')).replace('{i}', i));\n            }\n        }\n\n        urls.forEach((url, index) => {\n            const name = `第 ${index + 1} 页`;\n            $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n            $('#urls').append(`<div>${name}: ${url}</div>`);\n        });\n    }\n\n    $('#total-pages').text(urls.length);\n    toggleNavigationButtons();\n}\n\nfunction normalizeUrl(url) {\n    if (typeof url!== 'string' ||!url.trim()) return '';\n    url = url.replace(/\\\\u[\\dA-F]{4}/gi, (match) => String.fromCharCode(parseInt(match.replace(/\\\\u/g, ''), 16)));\n    url = decodeURIComponent(url);\n    url = url.replace(/^http:\\/([^/])/, 'http://$1'); // 修正 http:/ 协议部分\n    url = url.replace(/^https:\\/([^/])/, 'https://$1'); // 修正 https:/ 协议部分\n    return url;\n}\n\n// 清空容器\nfunction clearContainers() {\n    $('#messages').empty();\n    $('#images').empty();\n    $('#text').empty();\n}\n\n// 更新图片的src属性\nfunction updateImageSrc(elements, shouldSwap) {\n    elements.each(function () {\n        const $this = $(this);\n        const attrsToUpdate = {};\n        if (shouldSwap) {\n            ['data-original', 'data-src', 'data-url'].forEach(attr => {\n                if ($this.attr(attr)) {\n                    attrsToUpdate['src'] = $this.attr(attr);\n                }\n            });\n        }\n        $this.attr(attrsToUpdate);\n    });\n    return elements;\n}\n\n// 切换导航按钮和选择框的显示\nfunction toggleNavigationButtons() {\n    if ($('#url-select option').length > 1  && !config.autoLoading) {\n        $('#loading-buttons').show();\n        $('#url-select').show();\n    } else {\n        $('#loading-buttons').hide();\n        $('#url-select').hide();\n    }\n}\n\n// 显示加载状态\nfunction showLoadingStatus(pageNumber) {\n    const selectedOption = $('#url-select option:selected').text();\n    $('#loading-status').text(`正在加载：${selectedOption}`).show();\n}\n\n// 隐藏加载状态\nfunction hideLoadingStatus() {\n    $('#loading-status').hide();\n}\n\n// 内容提取函数内容\nfunction loadContent(index) {\n    if (index < 0 || index >= urls.length || !canLoadNextPage) return;\n    canLoadNextPage = false;\n    currentPageIndex = index;\n    $('#url-select').val(index);\n    $('#messages').append(`<div>当前地址: <span class=\"warn\">${urls[index]}</span> </div>`);\n    if (autoLoadInProgress) {\n        showLoadingStatus(index + 1);\n    }\n    $.ajax({\n        url: urls[index],\n        type: 'GET',\n        success: function (data) {\n            try {\n                const $data = $(data);\n                let updatedHtmlContent = data.replace(/(['\"])(\\/\\/)(?!\\/)/g, '$1https://')\n                    .replace(/src=\"upload/gi, 'src=\"/upload')\n                    .replace(/style=[\"'][^'\"]+[\"']/gi, '')\n                    .replace(/\\\\\\//g, '/');\n                const parser = new DOMParser();\n                const doc = parser.parseFromString(updatedHtmlContent, \"text/html\");\n\n                  // 添加调试标签输出信息\n                if (config.debugOnce === index) {\n                    const debugElements = $(doc).find(config.debugSelector);\n                    if (debugElements.length > 0) {\n                        const debugContents = $('<pre>').html(debugElements.clone().wrapAll('<div/>').parent().html()).html();\n                        $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">${debugContents}</textarea></span>`);\n                    } else {\n                        $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">调试信息未提取到内容，请检查选择器！</textarea></span>`);\n                    }\n                }\n\n                // 方法1：video标签获取视频地址\n                const videoContents = $(doc).find(config.videoSelector);\n                const videoTags = $(videoContents).find('video');\n                videoTags.each(function () {\n                    const videosrc = $(this).attr('src') || $(this).attr('data-src') || $(this).attr('data-original') || '';\n                    if (videosrc) {\n                        videoSources.push(videosrc);\n                    }\n                });\n                \n                // 方法2：source标签获取视频地址\n                const sources = $(videoContents).find('source');\n                sources.each(function () {\n                    const sourceSrc = $(this).attr('src') || $(this).attr('data-src') || $(this).attr('data-original') || '';\n                    if (sourceSrc) {\n                        videoSources.push(sourceSrc);\n                    }\n                });\n                \n                // 方法3：正则表达式获取视频地址\n                const regex = /['\"]https?[^'<>\"]+\\.(m3u8|mp4|webm|ogg|flv|mp3|m4a|wav|ape|flac)['\"]/ig;\n                const matches = data.match(regex);\n                if (matches) {\n                    const uniqueMatches = matches.filter((value, idx, self) => self.indexOf(value) === idx);\n    videoSources = videoSources.concat(uniqueMatches.map((match) => {\n        // 使用replace删除引号\n                const urlWithoutQuotes = match.replace(/['\"]/g, '');\n                return normalizeUrl(urlWithoutQuotes);\n                          }));\n                }\n\n                videoSources = videoSources.map(src => normalizeUrl(src.replace(/\\\\+/g, '')));\n                videoSources = [...new Set(videoSources)];\n\n                if (videoSources.length > 0) {\n                    $('#messages').append(`<span>成功提取到视频，找到 ${videoSources.length} 个视频。</span><br>`);\n                    videoSources.forEach((src, idx) => {\n                        $('#messages').append(`<div>视频地址:<span class=\"warn\"> ${src}</span><br></div>`);\n                        $('#video-source-select').append(`<option value=\"${idx}\">视频源 ${idx + 1}</option>`);\n                    });\n                    \n                    if (videoSources.length == 1) {\n                        $('#video-container').show();\n                        $('#video-url').show();\n                        $('#video-source-select').hide();\n                        updateVideoSource(); // 自动更新视频源\n                    } else if (videoSources.length > 1) {\n                        $('#video-container').show();\n                        $('#video-url').show();\n                        $('#video-source-select').show();\n                        updateVideoSource(); // 默认选择第一个视频源\n                    } else {\n                        $('#video-container').hide();\n                        $('#video-url').hide();\n                        $('#video-source-select').hide();\n                    }\n                } else {\n                    $('#messages').append(`<span class=\"warn\">未找到视频源。</span><br>`);\n                    $('#video-container').hide();\n                    $('#video-url').hide();\n                    $('#video-source-select').hide();\n                }\n\n                // 标签获图片\n                const $imgContents = $(doc).find(config.imgSelector);\n                const shouldSwap = config.swapImageAttributes;\n                const newContents = updateImageSrc($imgContents.clone(), shouldSwap);\n                $('#images').append(newContents).show();\n                if (newContents.length > 0) {\n                    $('#messages').append(`<span>成功提取图片，共 ${newContents.length} 张。</span><br>`);\n                    newContents.each(function () {\n                        const imgSrc =$(this).attr('src') || $(this).attr('data-original') || $(this).attr('data-src') || $(this).attr('data-url');\n                        $('#messages').append(`<div>地址:<span class=\"warn\"> ${imgSrc}</span><br></div>`);\n                    });\n                } else {\n                    $('#messages').append(`<span class=\"warn\">未提取到图片。</span><br>`);\n                }\n\n                // 标签获图文\n                const textContents = $(doc).find(config.textSelector).map(function () {\n                    const $currentContents = $(this);\n                    $currentContents.find('img + br, script, video, source').remove();\n                    $currentContents.html($currentContents.html().replace(/>\\s+/gi, '>').replace(/<\\/?br\\s*([^>]*)\\s*\\/?>/gi, '\\n').replace(/\\n+/g, '\\n'));\n                    return $currentContents.html();\n                }).get().join('');\n                if (textContents.trim()) {\n                    $('#text').append(`<span>${textContents}</span><br>`).show();\n                    $('#messages').append(`<span>成功提取图文。</span><br>`);\n                } else {\n                    $('#messages').append(`<span class=\"warn\">未提取到图文。</span><br>`);\n                }\n                \n                \n                if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                    setTimeout(() => { \n                        canLoadNextPage = true;\n                        loadContent(currentPageIndex + 1); \n                    }, config.delayTime);\n                } else {\n                    canLoadNextPage = true;\n                    if (autoLoadInProgress) {\n                        hideLoadingStatus();\n                    }\n                }\n            } catch (parseError) {\n                $('#messages').append(`<span class=\"error\">解析页面内容时发生错误: ${parseError.message}</span><br>`);\n                handleLoadFailure(urls, index);\n            } finally {\n                if (imageBox) imageBox.viewer.update();\n                if (textBox) textBox.viewer.update();\n            }\n        },\n        error: function (jqXHR, textStatus, errorThrown) {\n            let errorMessage = `内容加载失败: ${urls[index]}`;\n            switch (textStatus) {\n                case 'timeout':\n                    errorMessage += ', 请求超时';\n                    break;\n                case 'abort':\n                    errorMessage += ', 请求被取消';\n                    break;\n                case 'parsererror':\n                    errorMessage += ', 解析响应出错';\n                    break;\n                default:\n                    errorMessage += `, 状态码: ${jqXHR.status}, 错误信息: ${errorThrown}`;\n                    break;\n            }\n            $('#messages').append(`<span class=\"error\">${errorMessage}</span><br>`);\n            handleLoadFailure(urls, index);\n        }\n    });\n}\n\n// 处理加载失败的情况\nfunction handleLoadFailure(urls, index) {\n    if (!loadAttempts[urls[index]]) {\n        loadAttempts[urls[index]] = 1;\n    } else {\n        loadAttempts[urls[index]]++;\n    }\n    if (loadAttempts[urls[index]] <= config.maxLoadAttempts) {\n        const retryMessage = `第${index + 1}页加载失败，正在进行第${loadAttempts[urls[index]]}次加载！`;\n        $('#messages').append(`<span class=\"error\">${retryMessage}</span><br>`);\n        setTimeout(() => { \n            canLoadNextPage = true;\n            loadContent(index); \n        }, config.retryDelayTime);\n    } else {\n        const finalErrorMessage = `第${index + 1}页加载失败，已达到最大尝试次数(${config.maxLoadAttempts})！`;\n        $('#messages').append(`<span class=\"error\">${finalErrorMessage}</span><br>`);\n        if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n            setTimeout(() => { \n                canLoadNextPage = true;\n                loadContent(currentPageIndex + 1); \n            }, config.delayTime);\n        } else {\n            canLoadNextPage = true;\n            if (autoLoadInProgress) {\n                hideLoadingStatus();\n            }\n        }\n    }\n}\n\n// 更新视频源\nfunction updateVideoSource() {\n    const selectedIndex = parseInt(document.getElementById('video-source-select').value);\n    const selectedSource = videoSources[selectedIndex];\n    document.getElementById('video-url').textContent = `视频地址:\\n ${selectedSource}`;\n\n    // 设置 video-source 的 src 属性\n    const videoSourceElement = document.getElementById('video-source');\n    videoSourceElement.src = selectedSource;\n\n    // 更新 video 元素的 src 属性\n    const videoElement = document.getElementById('video-element');\n    videoElement.load();\n\n    // 添加调试信息\n    $('#messages').append(`<span>更新视频源为: ${selectedSource}</span><br>`);\n}\n\n// 函数执行主体\n$(document).ready(function () {\n    imageBox = document.getElementById('images');\n    textBox = document.getElementById('text');\n    if (imageBox && textBox) {\n        new Viewer(imageBox, { title: true, interval: 2000 });\n        new Viewer(textBox, { title: true, interval: 2000 });\n    }\n\n    const totalPagesText = config.totalPagesText;\n    const totalPages = parseInt(totalPagesText, 10) || 1;\n    const baseUrl = '{{baseUrl}}';\n    \n    clearContainers();\n    $('#urls').empty();\n    $('#debug-info textarea').empty();   \n    $('#video-url').empty().hide();\n    $('#video-container').hide();\n    $('#video-source-select').empty().hide();\n    \n    buildUrls(totalPages, baseUrl);\n\n    const urlSelect = document.getElementById('url-select');\n    if (urlSelect.options.length > 0) {\n        urlSelect.value = '0'; \n        \n        if (config.autoLoading) {\n            autoLoadInProgress = true;\n            for (let i = 0; i < urls.length; i++) {\n                loadContent(i);\n            }\n        } else {\n            loadContent(0);\n        }\n    } else {\n        loadContent(0);\n    }\n\n    $('#url-select').change(function () {\n        clearContainers();\n        const selectedIndex = parseInt($(this).val());\n        loadContent(selectedIndex);\n    });\n    $('#prev-page-btn').click(function () {\n        clearContainers();\n        if (currentPageIndex > 0) {\n            loadContent(currentPageIndex - 1);\n        }\n    });\n    $('#next-page-btn').click(function () {\n        clearContainers();\n        if (currentPageIndex < urls.length - 1) {\n            loadContent(currentPageIndex + 1);\n        }\n    });\n    $('#auto-load-btn').click(function () {\n        autoLoadInProgress = true;\n        showLoadingStatus(1); \n        for (let i = currentPageIndex + 1; i < urls.length; i++) {\n            loadContent(i);\n        }\n    });\n    $('#toggle-messages-btn').click(function () { $('#messages').toggle(); });\n    $('#toggle-urls-btn').click(function () { $('#urls').toggle(); });\n    $('#toggle-debug-btn').click(function () { $('#debug-info').toggle(); });\n});\n    </script>\n</body>\n</html>",
    "ruleImage": "img@src",
    "ruleLink": "a@href",
    "ruleNextPage": "page||text.下一页@href",
    "rulePubDate": "p.-1@text\n",
    "ruleTitle": "h3.-1@text",
    "singleUrl": false,
    "sortUrl": "搜索::https://czy.yzfnb6.help/cn/home/web/index.php/vod/search.html?wd={{source.getVariable()}}\n最新上传::/cn/home/web/index.php/label/new/page/{{page}}.html\n熟母少妇::/cn/home/web/index.php/vod/type/id/20/page/{{page}}.html\n网红直播::/cn/home/web/index.php/vod/type/id/21/page/{{page}}.html\n自拍偷拍::/cn/home/web/index.php/vod/type/id/22/page/{{page}}.html\n强奸乱伦::/cn/home/web/index.php/vod/type/id/23/page/{{page}}.html\n高清国产::/cn/home/web/index.php/vod/type/id/24/page/{{page}}.html\n韩国专区::/cn/home/web/index.php/vod/type/id/25/page/{{page}}.html\n日本有码::/cn/home/web/index.php/vod/type/id/26/page/{{page}}.html\n日本无码::/cn/home/web/index.php/vod/type/id/27/page/{{page}}.html\n欧美情色::/cn/home/web/index.php/vod/type/id/28/page/{{page}}.html\n动漫卡通::/cn/home/web/index.php/vod/type/id/29/page/{{page}}.html\n三级伦理::/cn/home/web/index.php/vod/type/id/30/page/{{page}}.html",
    "sourceComment": "By小新\n永久地址：https://bqm.avds8.com/g/",
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "7.3需要网页",
    "sourceUrl": "https://rlblsm.yzfnb4.lat/cn/home/web/"
  },
  {
    "articleStyle": 0,
    "customOrder": 579,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.line_bottom@tr",
    "ruleContent": "class.entry@html",
    "ruleLink": "tag.a.0@href",
    "ruleNextPage": "page",
    "rulePubDate": "text",
    "ruleTitle": "a@title",
    "singleUrl": false,
    "sortUrl": "最新::https://enpeta.com/e/action/ListInfo/index.php?page={{page}}&classid=1",
    "sourceGroup": "版本",
    "sourceIcon": "https://avatars.githubusercontent.com/u/49548316",
    "sourceName": "7.4",
    "sourceUrl": "https://enpeta.com"
  },
  {
    "articleStyle": 1,
    "customOrder": 581,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "ul",
    "ruleContent": "title@text&&id.video@all",
    "ruleImage": ".lazy@img",
    "ruleLink": "a@href",
    "ruleNextPage": "text.Next@href",
    "rulePubDate": "日期: {{@@.view@span@text}}      时长:{{@@class.image@text}}",
    "ruleTitle": "class.title@text",
    "singleUrl": false,
    "sortUrl": "最新视频::https://www.tasexy.com/new.html\n偷拍自拍::https://www.tasexy.com/list/129.html\n国产情侣::https://www.tasexy.com/list/180.html\n国产偷拍::https://www.tasexy.com/list/353.html\n自拍偷拍::https://www.tasexy.com/list/456.html\n国产色情::https://www.tasexy.com/list/455.html\n素人自拍::https://www.tasexy.com/list/454.html\n国产色情::https://www.tasexy.com/list/210.html\n国产色情:https://www.tasexy.com/list/222.html\n\n国产精品::https://www.tasexy.com/list/187.html\n国产自拍::https://www.tasexy.com/list/234.html\n国产自拍::https://www.tasexy.com/list/198.html\n短视频::https://www.tasexy.com/list/319.html\n女神学生::https://www.tasexy.com/list/243.html\n自慰群交::https://www.tasexy.com/list/248.html\n抖阴视频::https://www.tasexy.com/list/254.html\n小鸟酱::https://www.tasexy.com/list/260.html\n网曝门::https://www.tasexy.com/list/261.html\n水果派::https://www.tasexy.com/list/322.html\n颜射::https://www.tasexy.com/list/324.html\n韩国明星::https://www.tasexy.com/list/173.html\n国产女奴::https://www.tasexy.com/list/177.html\n网曝门::https://www.tasexy.com/list/466.html\n网红流出::https://www.tasexy.com/list/465.html\nCosplay::https://www.tasexy.com/list/463.html\n过膝袜::https://www.tasexy.com/list/462.html\n瑜伽裤::https://www.tasexy.com/list/461.html\n兽耳系列::https://www.tasexy.com/list/460.html\n91探花::https://www.tasexy.com/list/425.html\n",
    "sourceComment": "✪一夜爆裤制作✪\n✪名称后带\"@/封面VPN\"要翻墙✪\n✪更多分类自行添加✪\n 发布地址→https://www.662222.one/",
    "sourceGroup": "版本",
    "sourceIcon": "https://img2.baidu.com/it/u=1877943053,1292683255&fm=253&fmt=auto&app=138&f=PNG?w=319&h=296",
    "sourceName": "7.5报废或者翻墙",
    "sourceUrl": "https://www.tasexy.com/#dialog",
    "style": "iframe{\n\theight:420px\n}\ntitle{\n\tdisplay:block\n}"
  },
  {
    "articleStyle": 0,
    "contentBlacklist": "https://pc.stgowan.com/,\nhttps://dmku.mhtjx.top/,\nhttps://dmku.m3u8.pw/,\nhttps://dm.bbj.icu/,\nhttps://www.superplayer.top/index.php/index/dm",
    "coverDecodeJs": "function toByteArray(input) {\n  var out = new Packages.java.io.ByteArrayOutputStream();\n  var buffer = java.strToBytes('\\0'.repeat(4096));\n  var bytesRead;\n  while ((bytesRead = input.read(buffer)) != -1) {\n    out.write(buffer, 0, bytesRead);\n  }\n  return out.toByteArray();\n}\n\n(function() {\n  // 1. 读取原始字节内容\n  var textBytes = toByteArray(result);\n  // 2. 如果是GIF文件，直接返回原始字节\n  if (src.endsWith('.gif')) {\n    return textBytes;\n  }\n  try {\n    // 3. 将字节转换为字符串（用于解析数据URI）\n    var dataUri = java.bytesToStr(textBytes, \"UTF-8\");\n    // 4. 判断是完整的数据URI还是纯Base64数据\n    var base64Prefix = \"base64,\";\n    var base64Index = dataUri.indexOf(base64Prefix);\n    if (base64Index === -1) {\n      // 如果没有找到base64前缀，检查是否需要截取第一个/及之后的内容\n      var firstSlashIndex = dataUri.indexOf('/');\n      if (firstSlashIndex !== -1) {\n        // 如果找到第一个/，截取/及之后的内容\n        dataUri = dataUri.substring(firstSlashIndex);\n      }\n      // 对整个内容进行Base64解码\n      return java.base64DecodeToByteArray(dataUri);\n    } else {\n      // 如果是标准data URI，提取base64编码部分解码\n      var base64Data = dataUri.substring(base64Index + base64Prefix.length);\n      return java.base64DecodeToByteArray(base64Data);\n    }\n  } catch (e) {\n    // 解码失败时返回原始字节\n    return textBytes;\n  }\n})();",
    "customOrder": 583,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n\t\"User-Agent\":\"Mozilla/5.0 (Linux; U; Android 10; zh-cn; MI CC 11)  AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.127 Mobile Safari/537.36 XiaoMi/MiuiBrowser/18.1.8 swan-mibrowser\",\n\t\"referer\": \"{{baseUrl}}\"\n}",
    "injectJs": "function setupCustomPlayer(video) {\n  // 手势滑动快进\n  let isDragging = false;\n  let startX = 0;\n  let startTime = 0;\n  \n  // 长按加速相关变量\n  let longPressTimer = null;\n  const LONG_PRESS_DELAY = 300;\n  const NORMAL_SPEED = 1.25;\n  const FAST_SPEED = 3;\n  let wasPaused = false;\n\n  // 触摸事件处理\n  function handleTouchStart(e) {\n    startX = e.touches[0].clientX;\n    startTime = video.currentTime;\n    wasPaused = video.paused;\n    \n    longPressTimer = setTimeout(() => {\n      video.playbackRate = FAST_SPEED;\n      if (wasPaused) video.play();\n    }, LONG_PRESS_DELAY);\n  }\n\n  function handleTouchMove(e) {\n    if (longPressTimer) {\n      clearTimeout(longPressTimer);\n      longPressTimer = null;\n    }\n    \n    const dx = e.touches[0].clientX - startX;\n    if (Math.abs(dx) > 10) {\n      if (!isDragging) {\n        video.pause();\n        isDragging = true;\n      }\n      const change = (dx / video.clientWidth) * video.duration;\n      video.currentTime = Math.max(0, Math.min(startTime + change, video.duration));\n    }\n  }\n\n  function handleTouchEnd() {\n    if (longPressTimer) {\n      clearTimeout(longPressTimer);\n      longPressTimer = null;\n    }\n    \n    if (isDragging) {\n      video.playbackRate = NORMAL_SPEED;\n      video.play();\n      isDragging = false;\n    } else if (video.playbackRate === FAST_SPEED) {\n      video.playbackRate = NORMAL_SPEED;\n      if (wasPaused) video.pause();\n    }\n  }\n\n  // 添加触摸事件监听\n  video.addEventListener('touchstart', handleTouchStart);\n  video.addEventListener('touchmove', handleTouchMove);\n  video.addEventListener('touchend', handleTouchEnd);\n  \n  // 初始播放速度\n  video.playbackRate = NORMAL_SPEED;\n\n  // 创建按钮的通用函数\n  function createButton(text, onClick, position, width = '20px') {\n    const button = document.createElement('button');\n    button.textContent = text;\n    button.style.position = 'absolute';\n    button.style[position.horizontal] = '0';\n    button.style.top = '50%';\n    button.style.transform = 'translateY(-50%)';\n    button.style.zIndex = '999';\n    button.style.padding = '1px';\n    button.style.background = 'rgba(51, 51, 51, 0)';\n    button.style.color = '#fff';\n    button.style.border = 'none';\n    button.style.cursor = 'pointer';\n    button.style.width = width;\n    button.style.height = '30px';\n    button.addEventListener('click', onClick);\n    video.parentNode.appendChild(button);\n    return button;\n  }\n\n  // 旋转按钮（右侧）\n  createButton('⟳', () => {\n    const currentRotation = parseInt(video.getAttribute('data-rotation') || '0');\n    const newRotation = (currentRotation + 90) % 360;\n    video.setAttribute('data-rotation', newRotation);\n    \n    // 保留当前的缩放比例\n    const currentTransform = video.style.transform || '';\n    let currentScale = 1;\n    const scaleMatch = currentTransform.match(/scale\\(([^)]+)\\)/);\n    if (scaleMatch) currentScale = parseFloat(scaleMatch[1]);\n    \n    video.style.transform = `rotate(${newRotation}deg) scale(${currentScale})`;\n  }, { horizontal: 'right' });\n\n  // 缩放按钮（左侧）\n  let zoomCount = 0;\n  createButton('+', () => {\n    const currentRotation = parseInt(video.getAttribute('data-rotation') || '0');\n    \n    // 获取当前缩放比例\n    const currentTransform = video.style.transform || '';\n    let currentScale = 1;\n    const scaleMatch = currentTransform.match(/scale\\(([^)]+)\\)/);\n    if (scaleMatch) currentScale = parseFloat(scaleMatch[1]);\n    \n    if (zoomCount < 4) {\n      const newScale = currentScale * 1.25;\n      video.style.transform = `rotate(${currentRotation}deg) scale(${newScale})`;\n      zoomCount++;\n    } else {\n      video.style.transform = `rotate(${currentRotation}deg) scale(1)`;\n      zoomCount = 0;\n    }\n  }, { horizontal: 'left' });\n\n  // 快速跳转按钮（底部中央）\n  const buttonContainer = document.createElement('div');\n  buttonContainer.style.position = 'absolute';\n  buttonContainer.style.bottom = '0';\n  buttonContainer.style.left = '50%';\n  buttonContainer.style.transform = 'translateX(-50%)';\n  buttonContainer.style.display = 'flex';\n  buttonContainer.style.gap = '10px';\n  buttonContainer.style.zIndex = '999';\n  \n  // 按钮配置\n  const seekButtons = [\n    { text: '-5分', time: -300 },\n    { text: '-1分', time: -60 },\n    { text: '+1分', time: 60 },\n    { text: '+5分', time: 300 }\n  ];\n\n  seekButtons.forEach(({ text, time }) => {\n    const button = document.createElement('button');\n    button.textContent = text;\n    button.style.padding = '1px';\n    button.style.background = 'rgba(51, 51, 51, 0)';\n    button.style.color = '#fff';\n    button.style.border = 'none';\n    button.style.cursor = 'pointer';\n    button.style.width = '60px';\n    button.style.height = '30px';\n    button.addEventListener('click', () => {\n      video.currentTime = Math.max(0, Math.min(video.currentTime + time, video.duration));\n    });\n    buttonContainer.appendChild(button);\n  });\n\n  video.parentNode.appendChild(buttonContainer);\n}\n\n// 修改初始化逻辑，增加重试机制\nfunction initPlayerWithRetry() {\n  const maxRetries = 10;\n  const retryInterval = 500;\n  let retries = 0;\n  const tryInit = () => {\n    const video = document.getElementById('video');\n    if (video) {\n      setupCustomPlayer(video);\n    } else if (retries < maxRetries) {\n      retries++;\n      setTimeout(tryInit, retryInterval);\n    }\n  };\n  tryInit();\n}\n// 使用重试机制初始化播放器\ninitPlayerWithRetry();",
    "lastUpdateTime": 1775588357478,
    "loadWithBaseUrl": true,
    "ruleArticles": "$.rescont.data[*]",
    "ruleContent": "<html><head><meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\n<meta name=\"referrer\" content=\"never\"/>\n  <style>html, body {text-align: center;margin: 0; padding: 0;width: 100%;overflow: hidden;} </style>\n  <script src=\"https://unpkg.com/hls.js@1.4.3/dist/hls.min.js\"></script>\n</head><body>\n  <div class=\"container\">\n    <div class=\"title\">{{$.rescont.title}}</div>\n    <video id=\"video\" width=\"100%\" height=\"91%\" poster=\"\" controls autoplay muted loop></video>\n  </div>\n<script>\nconst v=document.getElementById('video'),s=[\n  \"{{$.rescont.videopath}}\",\n  \"\"];\nlet c=0;\nfunction setupCustomControls(e){/* 自定义功能实现 */}\nfunction playNext(){\n  c>=s.length&&(c=0); // 循环重置计数器\n  const u=s[c++];\n  // 检测Hls对象是否存在\n  if (typeof Hls !== 'undefined' && Hls.isSupported()) {\n    const h = new Hls({\n      enableSoftwareAES: true,          // 强制软件解密\n      forceKeyFrameOnDiscontinuity: true // 关键帧恢复\n    });\n    h.loadSource(u);\n    h.attachMedia(v);\n    h.on(Hls.Events.MANIFEST_PARSED,()=>v.play().then(()=>setupCustomControls(v)).catch(console.log));\n    h.on(Hls.Events.ERROR,(_,d)=>d.fatal&&playNext())\n  } else { // Hls加载失败或浏览器原生支持HLS\n    if (v.canPlayType('application/vnd.apple.mpegurl')) {\n      v.src = u;\n      v.onloadedmetadata = () => v.play().then(() => setupCustomControls(v));\n      v.onerror = playNext;\n    } else {\n      // 如果都不支持，尝试直接播放（可能支持MP4等格式）\n      v.src = u;\n      v.onerror = playNext;\n      v.play().then(() => setupCustomControls(v)).catch(playNext);\n    }\n  }\n}playNext();\n</script>\n</body></html>",
    "ruleImage": "{{$.coverbase64.url}}",
    "ruleLink": "/api/videoplay/{{$.id}}?uuid=1",
    "ruleNextPage": "$.rescont.next_page_url",
    "rulePubDate": "📆{{$.updated_at## .*}}  ⏱️{{$.playtimes}}",
    "ruleTitle": "$.title##.*屎.*|.*Ts.*|.*TS.*|.*ts.*|.*伪娘.*|.*人妖.*|.*男同.*|.*mbrba.*|.*水果派.*|.*解说.*|.*mmraa.*|.*ss-.*|.*fway.*|.*rebd.*|.*mbdd.*|.*双性.*|.*妈妈.*|.*儿子.*|.*爸爸.*|.*女儿.*|.*母子.*|.*父女.*|.*熟女.*|.*眼射.*|.*直男.*|.*CD.*|.*肥女.*|.*黄金.*|.*骚0.*|.*gv.*|.*父子.*|.*飞机.*|.*撸.*|.*厕.*|.*老阿姨.*|.*乱伦.*",
    "singleUrl": false,
    "sortUrl": "\n随机::/api/videosort/0?page={{ Math.ceil(Math.random()*1500) }}\n最新::/api/videosort/0?page={{page}}\n🔎搜索::/api/videosort/0?serach={{v=source.getVariable();if(/^\\s*$/.test(v)||v==null)source.setVariable('强奸');source.getVariable()}}&page={{page}}\n国产自拍::/api/videosort/10?page={{page}}\nH动漫::/api/videosort/14?page={{page}}\n扶她姐妹::/api/videosort/58?page={{page}}\n国产AV::/api/videosort/60?page={{page}}\n网红主播::/api/videosort/17?page={{page}}\n嫩模专区::/api/videosort/37?page={{page}}\n偷拍盗摄::/api/videosort/53?page={{page}}\n萌妹酱篇::/api/videosort/54?page={{page}}\n精彩短片::/api/videosort/55?page={{page}}\n外流视频::/api/videosort/32?page={{page}}\n明星淫梦::/api/videosort/40?page={{page}}\n鹿少女集::/api/videosort/56?page={{page}}\n高清无码::/api/videosort/1?page={{page}}\n制服诱惑::/api/videosort/5?page={{page}}\n长腿丝袜::/api/videosort/11?page={{page}}\nAV剧情::/api/videosort/29?page={{page}}\nAV素人::/api/videosort/24?page={{page}}\n淫荡痴女::/api/videosort/51?page={{page}}\n巨乳咪咪::/api/videosort/20?page={{page}}\n人妻熟女::/api/videosort/6?page={{page}}\n近亲乱伦::/api/videosort/49?page={{page}}\n淫乱师生::/api/videosort/46?page={{page}}\n角色扮演::/api/videosort/4?page={{page}}\n青春萝莉::/api/videosort/22?page={{page}}\n魔镜系列::/api/videosort/39?page={{page}}\n中文无码::/api/videosort/57?page={{page}}\n当红女优::/api/videosort/9?page={{page}}\n中文字幕::/api/videosort/19?page={{page}}\n259LUXU::/api/videosort/36?page={{page}}\n重咸口味::/api/videosort/23?page={{page}}\n丝瓜推荐::/api/videosort/30?page={{page}}\n三级电影::/api/videosort/25?page={{page}}\n电车之狼::/api/videosort/52?page={{page}}\n中外合拍::/api/videosort/59?page={{page}}\n苍老师::/api/videosort/44?page={{page}}\n女同性爱::/api/videosort/38?page={{page}}\n欧美AV::/api/videosort/16?page={{page}}\n恐怖情色::/api/videosort/35?page={{page}}",
    "sourceGroup": "版本",
    "sourceIcon": "https://kp-i25985.com/Uploads/vod/2023-06-21/1141.mp4.gif",
    "sourceName": "7.6",
    "sourceUrl": "https://api.sgapiaba.xyz",
    "style": ".container {\n    position: relative; /* 相对定位，用于包含视频 */\n    height: 100%; /* 容器高度与视频原始高度相同 */\n    overflow: hidden; /* 隐藏超出容器的部分 */\n}\n.title {\n    position: absolute; /* 绝对定位，相对于容器 */\n    top: 0; \n    width: 100%;\n    overflow: hidden; \n    text-overflow: ellipsis;\n    display: -webkit-box;\n    -webkit-box-orient: vertical; \n    -webkit-line-clamp: 2;\n    z-index: 1; /* 确保标题在视频之上 */\n    background: #000; /* 纯黑色背景 */ \n    padding: 0 0 3px 0;\n}\nvideo {\n    position: absolute; /* 绝对定位，相对于容器 */ \n    top: -65px; /* 上移80px */\n    left: 0; \n    width: 100%; \n    height: calc(96% + 65px);  /* 调整高度以适应内容 */\n    object-fit: contain; /* 确保视频内容不被裁剪 */\n    z-index: 0; /* 确保视频在标题之下 */\n    controls=\"controls\" autoplay muted; \n} \n"
  },
  {
    "articleStyle": 1,
    "customOrder": 584,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".appel-max@ul@li!0:1:2:3:4:5",
    "ruleContent": "<js>\np=result.match(/url\\\"\\:\\\"(.*?)\\\"\\,\\\"url/)[1].replace(/\\\\/g,'')\nvar p\n`<html>\n    <head>\n        <meta name=\"viewport\" content=\"width=device-width\">\n        <style>\n            body {\n                margin: 0;\n                font-family: Arial, sans-serif;\n                background: linear-gradient(135deg, #ece9e6, #ffffff);\n                display: flex;\n                flex-direction: column;\n                align-items: center;\n                justify-content: flex-start;\n                padding: 20px;\n            }\n           .container {\n                width: 100%;\n                max-width: 800px;\n                background: #fff;\n                border-radius: 10px;\n                box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n                overflow: hidden;\n                margin-bottom: 20px;\n            }\n            h3 {\n                margin: 0;\n                padding: 10px 20px;\n                font-size: 0.9em;\n                background: #333;\n                color: #fff;\n                border-radius: 10px 10px 0 0;\n            }\n           .video-container {\n                width: 100%;\n                background: #000;\n                position: relative;\n            }\n            video {\n                width: 100%;\n                height: auto;\n                display: block;\n            }\n           .info-container {\n                padding: 20px;\n            }\n           .info-container p {\n                margin: 10px 0;\n                color: #555;\n            }\n           .info-container p span {\n                font-weight: bold;\n                color: #000;\n            }\n        </style>\n    </head>\n    <body>\n        <div class=\"container\">\n            <div class=\"video-container\">\n                <video controls autoplay name=\"media\">\n                    <source src=\"${p}\" type=\"video/mp4\">\n                </video>\n            </div>\n            <div class=\"info-container\">\n                \n            </div>\n        </div>\n    </body>\n</html>`;\n\n</js>",
    "ruleImage": "img@data-original##.*gif",
    "ruleLink": "a.-1@href##/voddetail/(\\d+).html##https://cdnaaapi.yiniuyingshi6.com:2053/vodplay/$1-1-1.html",
    "ruleNextPage": "text.下一页@href",
    "rulePubDate": "{{@span.video-grade@text}}  {{@p@text}}",
    "ruleTitle": "h5@a@text",
    "singleUrl": true,
    "sortUrl": "制服丝袜::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/20.html\n群交淫乱::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/21.html\n无码专区::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/22.html\n偷拍自拍::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/23.html\n卡通动画::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/24.html\n中文字幕:https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/25.html\n欧美性爱::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/26.html\n巨乳美乳::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/27.html\n国产裸聊::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/28.html\n国产自拍::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/29.html\n国产盗摄::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/30.html\n伦理三级::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/31.html\n女同性恋::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/32.html\n少女萝莉::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/33.html",
    "sourceComment": "需要频道换源\n地址发布页\nhttp://www.henniu69.xyz/",
    "sourceGroup": "版本",
    "sourceIcon": "https://i.postimg.cc/xTLWq1dp/IMG-20220930-223954.jpg",
    "sourceName": "7.7",
    "sourceUrl": "https://cdnaaapi.yiniuyingshi6.com:2053"
  },
  {
    "articleStyle": 2,
    "customOrder": 585,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
    "injectJs": "(function() {\n    console.log('验证码脚本启动');\n    \n    // 延迟执行，确保页面加载完成\n    setTimeout(function() {\n        // 查找所有文本节点，寻找数学问题\n        const walker = document.createTreeWalker(\n            document.body,\n            NodeFilter.SHOW_TEXT,\n            null,\n            false\n        );\n        \n        let node;\n        while (node = walker.nextNode()) {\n            const text = node.textContent.trim();\n            // 简单的数字运算匹配\n            if (text.match(/\\d+\\s*[\\+\\-\\*/]\\s*\\d+/)) {\n                console.log('发现数学问题:', text);\n                \n                // 尝试填写\n                const inputs = document.getElementsByTagName('input');\n                for (let input of inputs) {\n                    if (input.type === 'text') {\n                        // 简单计算 1+1 作为测试\n                        input.value = '2';\n                        input.dispatchEvent(new Event('input'));\n                        console.log('已尝试填写验证码');\n                        break;\n                    }\n                }\n            }\n        }\n    }, 2000);\n})();",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "li:has(img)||ul@li||div@li",
    "ruleContent": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0\">\r\n    <link rel=\"stylesheet\" href=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.1/viewer.min.css\">\r\n    <script src=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.1/viewer.min.js\"></script>\r\n    <script src=\"http://libs.baidu.com/jquery/2.0.0/jquery.min.js\"></script>\n    {{@@tag.title@html}}\r\n</head>\r\n\r\n<body>\r\n    <h3>{{@@.h@tag.h1@text}}</h3>\r\n    <div id=\"box\">{{@@id.picg@tag.img@html}}</div>\r\n    <div id=\"loads\">加载中...</div>\r\n    <script>\r\n        var loads;\r\n        $(document).ready(function () {\r\n            var box = document.getElementById(\"box\");\r\n            loads = document.getElementById(\"loads\");\r\n            new Viewer(box, { title: false, interval: 3000 })\r\n            var i = 2;\r\n            // 尝试获取总页数，如果获取失败默认给个大一点的数字或者1\r\n            var pageStr = \"{{@@class.pagelist.0@tag.a.-2@textNodes##\\\\n}}\";\r\n            var page = parseInt(pageStr);\r\n            if(isNaN(page)) page = 100; // 容错处理\r\n            \r\n            var url = \"{{baseUrl.replace('.html','_')}}\";\r\n            \r\n            new IntersectionObserver(entries => {\r\n                if (entries[0].intersectionRatio) {\r\n                    if (entries[0].intersectionRatio <= 0) return;\r\n                    if (i <= page) {\r\n                        fetchHtml(i, page, url);\r\n                        i += 1;\r\n                    } else {\r\n                        $('#loads').html(\"已显示全部\");\r\n                    }\r\n                }\r\n            }).observe(loads)\r\n        });\r\n\r\n\r\n        function fetchHtml(i, page, url) {\n            nurl = url + i + '.html';\r\n            $.ajax({\r\n                url: nurl,\r\n                dataType: 'html',\r\n                success: function (html) {\r\n                    $('#box').append('<h5>' + (i) + '/' + (page) + '</h5>');\r\n                    // 修正：使用 #picg img 选择器，与主规则一致\r\n                    var newImg = $(html).find('#picg img');\r\n                    if(newImg.length === 0) {\r\n                        // 备用选择器，防止ID变化\r\n                        newImg = $(html).find('.content img, img');\r\n                    }\r\n                    $('#box').append(newImg);\r\n                    box.viewer.update();\r\n                },\r\n                error: function (xhr) { \r\n                    $('#loads').html(\"加载失败\");\r\n                }\r\n            });\r\n        }\r\n    </script>\r\n</body>\r\n\r\n</html>",
    "ruleImage": "img@lazy-src",
    "ruleLink": "a@href",
    "ruleNextPage": "page",
    "ruleTitle": "class.title@text",
    "singleUrl": false,
    "sortUrl": "\n搜索::/s.asp?keyword={{source.getVariable()}}&page={{page}}\n\n今日更新::/\n\n套图::/shey/yingtiiurm/1_{{page}}.html\n\n日韩::/shey/yingtiiurm/2_{{page}}.html\n\n内衣::/shey/yingtiiurm/9_{{page}}.html\n\n萌妹::/shey/yingtiiurm/11_{{page}}.html\n\n精品::/shey/yingtiiurm/18_{{page}}.html\n\n高清::/shey/yingtiiurm/24_{{page}}.html\n\n无圣光::/shey/yingtiiurm/25_{{page}}.html",
    "sourceComment": "可以换着看，大部分不一样\n摄影图库：http://www.sytuk.com\n精品美女图:http://www.akywt.com\n私房妹子图:http://www.gqsft.com\n高清尤物图:http://www.flsft.com\n私拍尤物图:http://www.mtgqt.com\n性感尤物图:http://www.akxzt.com\n私拍美女图:http://www.sfsnt.com\n极品尤物图:http://www.mtsyt.com\n高清私房图:http://www.jpnst.com\n漂亮网红图:http://www.sfwht.com\n尤物嫩模图:http://www.ywnmt.com\n经典网红图:http://www.jcmeinv.com\n模特网红图:http://www.mtmnw.com\n特色写真图:http://www.jpsft.com.com\n高清网红图:http://www.jpmnt.com\n福利网红图:http://www.sfmtw.com\n高清妹子图:http://www.gqtuku.com\n少女私房图:http://www.sntaotu.com\n极品美女图:http://www.xzmeinv.com\n免费私房图:http://www.mtflt.com\n私房网红图:http://www.gqsft.com",
    "sourceGroup": "版本",
    "sourceIcon": "http://www.sytuk.com/favicon.ico",
    "sourceName": "7.8报废",
    "sourceUrl": "http://www.sytuk.com",
    "style": "/*标题相关*/\r\nh3{text-align:center}\r\nh6{margin-bottom:0}\r\nimg{width:100%}\nh5{margin-bottom:0;padding-left:5;text-align:center;color:#666;font-size:12px;}"
  },
  {
    "articleStyle": 2,
    "customOrder": 586,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n\t \"User-Agent\": \"Mozilla/5.0 (Linux; U; Android 9; zh-cn; MIX 2S Build/PKQ1.180729.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.127 Mobile Safari/537.36 XiaoMi/MiuiBrowser/16.7.35 swan-mibrowser\",\n\t \"Referer\": \"{{baseUrl}}\"\n}",
    "lastUpdateTime": 1769050738257,
    "loadWithBaseUrl": true,
    "ruleArticles": "li.i_list.list_n2",
    "ruleContent": "<!doctype html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"UTF-8\">\n<title>{{@@title@text}}</title>\n<style>\nbody {\n    margin: 0;\n    font: 14px/1.4 sans-serif;\n    background: #111;\n    color: #eee;\n}\n\n#msg {\n    position: sticky;\n    top: 0;\n    z-index: 9;\n    background: #222;\n    padding: 8px 12px;\n    text-align: center;\n    font-size: 13px;\n}\n\n#imgList {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: center;\n    padding: 8px;  /* 容器左右边距 */\n    box-sizing: border-box;\n}\n\n#imgList img {\n    display: block;\n    width: 100%;              /* 占满宽度 */\n    max-width: 100%;          /* 防止溢出 */\n    height: auto;\n    min-height: 220px;\n    margin: 6px 0;            /* 只保留上下间距 */\n    border-radius: 4px;\n    background: #222;\n    box-sizing: border-box;\n}\n</style>\n</head>\n<body>\n\n<!-- 实时提示 -->\n<div id=\"msg\">瀑布流初始化完成，向下滚动加载更多~</div>\n\n<!-- 图片容器 -->\n<div id=\"imgList\">\n{{@@class.content_left@img@all}}\n</div>\n\n<script>\n/*** 配置区 ***/\nconst pageUrls = `{{@@class.page@a:not(.current)@href}}`\n  .split('\\n')\n  .map(s => s.trim())\n  .filter(Boolean)\n // .slice(0,2) //选取前三页，测试用\nlet nextIndex = 0;\n\n/*** 页面元素 ***/\nconst imgList = document.getElementById('imgList');\nconst msgBox = document.getElementById('msg');\n\n/*** 工具函数 ***/\nfunction showMsg(text) {\n  if (msgBox) msgBox.textContent = text;\n}\n\n// 使用 iframe 加载\nfunction loadPageInIframe(url) {\n  return new Promise((resolve, reject) => {\n    const iframe = document.createElement('iframe');\n    iframe.style.display = 'none';\n    \n    // 超时处理\n    const timeout = setTimeout(() => {\n      document.body.removeChild(iframe);\n      reject(new Error('请求超时'));\n    }, 10000);\n    \n    iframe.onload = () => {\n      try {\n        clearTimeout(timeout);\n        const doc = iframe.contentDocument;\n        \n        // 查找图片（多重选择器兼容）\n        let imgs = doc.querySelectorAll('.content_left img');\n        if (imgs.length === 0) imgs = doc.querySelectorAll('.content img');\n        if (imgs.length === 0) imgs = doc.querySelectorAll('article img');\n        \n        const urls = Array.from(imgs, img => img.src);\n        \n        document.body.removeChild(iframe);\n        resolve(urls);\n      } catch (e) {\n        document.body.removeChild(iframe);\n        reject(e);\n      }\n    };\n    \n    iframe.onerror = (e) => {\n      clearTimeout(timeout);\n      document.body.removeChild(iframe);\n      reject(new Error('网络错误'));\n    };\n    \n    iframe.src = url;\n    document.body.appendChild(iframe);\n  });\n}\n\n// 使用正则表达式提取（备选方案）\nfunction extractImagesByRegex(html) {\n  const urls = [];\n  // 提取 content_left 区域\n  const areaMatch = html.match(/class=\"content_left\"[\\s\\S]*?<\\/div>/i);\n  const searchHtml = areaMatch ? areaMatch[0] : html;\n  \n  // 提取所有 img src\n  const regex = /<img[^>]+src=[\"']?([^\"'\\s>]+)[\"']?[^>]*>/gi;\n  let match;\n  \n  while ((match = regex.exec(searchHtml)) !== null) {\n    let src = match[1];\n    if (src.startsWith('/')) src = 'https://meirentu.club' + src;\n    if (src.startsWith('http')) urls.push(src);\n  }\n  \n  return urls;\n}\n\n// 获取图片列表（主逻辑）\nasync function getImages(url) {\n  showMsg(`加载中: ${url}`);\n  \n  try {\n    // 方案1：优先使用 iframe（最兼容）\n    return await loadPageInIframe(url);\n  } catch (e1) {\n    showMsg(`iframe失败，尝试正则解析...`);\n    try {\n      // 方案2：降级为 fetch + 正则\n      const resp = await fetch(url);\n      if (!resp.ok) throw new Error(`HTTP ${resp.status}`);\n      const html = await resp.text();\n      return extractImagesByRegex(html);\n    } catch (e2) {\n      throw new Error(`双重失败: ${e2.message}`);\n    }\n  }\n}\n\n// 追加图片\nfunction appendImages(urls) {\n  if (!urls || !urls.length) return;\n  \n  urls.forEach(src => {\n    const img = document.createElement('img');\n    img.src = src;\n    img.style.cssText = 'display:block;width:300px;height:auto;min-height:220px;margin:6px;border-radius:4px;background:#222;';\n    imgList.appendChild(img);\n  });\n}\n\n// 滚动加载\nlet isLoading = false;\nlet retryCount = 0;\nconst maxRetry = 3;\n\nasync function loadMore() {\n  if (isLoading || nextIndex >= pageUrls.length) {\n    if (nextIndex >= pageUrls.length) showMsg('已加载全部');\n    return;\n  }\n  \n  isLoading = true;\n  const url = pageUrls[nextIndex];\n  \n  try {\n    const urls = await getImages(url);\n    \n    if (!urls.length) throw new Error('未找到图片');\n    \n    appendImages(urls);\n    nextIndex++;\n    retryCount = 0; // 重置重试计数\n    \n    showMsg(`已加载 ${nextIndex}/${pageUrls.length} 页`);\n    \n    // 重新监听\n    setTimeout(() => {\n      isLoading = false;\n      observeLast();\n    }, 500);\n    \n  } catch (error) {\n    retryCount++;\n    showMsg(`第${nextIndex + 1}页失败(${retryCount}/${maxRetry}): ${error.message}`);\n    \n    if (retryCount >= maxRetry) {\n      showMsg(`跳过第${nextIndex + 1}页`);\n      nextIndex++;\n      retryCount = 0;\n      // 继续下一页\n      setTimeout(loadMore, 1000);\n    } else {\n      // 重试当前页\n      setTimeout(() => {\n        isLoading = false;\n        loadMore();\n      }, 2000);\n    }\n  }\n}\n\n// IntersectionObserver 监听最后一张图\nlet observer = null;\nfunction observeLast() {\n  if (observer) observer.disconnect();\n  \n  const imgs = imgList.querySelectorAll('img');\n  if (!imgs.length) return;\n  \n  const lastImg = imgs[imgs.length - 1];\n  \n  observer = new IntersectionObserver((entries) => {\n    if (entries[0].isIntersecting && !isLoading) {\n      observer.disconnect();\n      loadMore();\n    }\n  }, {\n    rootMargin: '800px',\n    threshold: 0.01\n  });\n  \n  observer.observe(lastImg);\n}\n\n// 初始化\nshowMsg(`初始化完成，共${pageUrls.length}页待加载`);\nsetTimeout(observeLast, 1000); // 延迟确保图片渲染完成\n\n</script>\n</body>\n</html>",
    "ruleImage": "img@data-src##$##,{\"headers\":{\n\t \"User-Agent\": \"Mozilla/5.0 (Linux; U; Android 9; zh-cn; MIX 2S Build/PKQ1.180729.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.127 Mobile Safari/537.36 XiaoMi/MiuiBrowser/16.7.35 swan-mibrowser\",\n\t \"Referer\": \"{{baseUrl}}\"\n}}",
    "ruleLink": "a.0@href",
    "ruleNextPage": "text.下页@href",
    "rulePubDate": "##(\\d{4}-\\d{2}-\\d{2})##$1###",
    "ruleTitle": ".meta-title@text",
    "singleUrl": false,
    "sortUrl": "XiuRen秀人网::/group/XiuRen-1.html\nMFStar模范学院::/group/MFStar-1.html\nMiStar魅妍社::/group/MiStar-1.html\nMyGirl美媛馆::/group/MyGirl-1.html\nImiss爱蜜社::/group/Imiss-1.html\nBoLoli兔几盟::/group/BoLoli-1.html\nYouWu尤物馆::/group/YouWu-1.html\nUxing优星馆::/group/Uxing-1.html\nMiiTao蜜桃社::/group/MiiTao-1.html\nFeiLin嗲囡囡::/group/FeiLin-1.html\nWingS影私荟::/group/WingS-1.html\nTaste顽味生活::/group/Taste-1.html\nLeYuan星乐园::/group/LeYuan-1.html\nHuaYan花の颜::/group/HuaYan-1.html\nDKGirl御女郎::/group/DKGirl-1.html\nMintYe薄荷叶::/group/MintYe-1.html\nYouMi尤蜜荟::/group/YouMi-1.html\nCandy糖果画报::/group/Candy-1.html\nMTMeng模特联盟::/group/MTMeng-1.html\nMicat猫萌榜::/group/Micat-1.html\nHuaYang花漾::/group/HuaYang-1.html\nXingYan星颜社::/group/XingYan-1.html\nXiaoYu画语界::/group/XiaoYu-1.html",
    "sourceGroup": "版本",
    "sourceIcon": "https://meirentu.club/static/img/logo.png",
    "sourceName": "7.9",
    "sourceUrl": "https://meirentu.club",
    "style": "#imgList img {\n    width: 100% !important;\n    max-width: 100% !important;\n    height: auto !important;\n}"
  },
  {
    "articleStyle": 0,
    "customOrder": 587,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "糖心",
    "sourceName": "8.0",
    "sourceUrl": "https://www.q6md.com/"
  },
  {
    "articleStyle": 0,
    "customOrder": 588,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "8.1报废",
    "sourceUrl": "https://a.huadudm.com/index.php"
  },
  {
    "articleStyle": 0,
    "customOrder": 589,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "8.2报废",
    "sourceUrl": "https://zshunvhxx.buzz/"
  },
  {
    "articleStyle": 0,
    "customOrder": 590,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "8.3",
    "sourceUrl": "https://mhds7.com/"
  },
  {
    "articleStyle": 0,
    "customOrder": 591,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceComment": "https://wanwuu.pages.dev/\nhttps://wanwuu.com/",
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "8.4",
    "sourceUrl": "https://wanwuu.pages.dev/"
  },
  {
    "articleStyle": 0,
    "customOrder": 592,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "8.5",
    "sourceUrl": "https://wiki.wmvjojuy.cc/"
  },
  {
    "articleStyle": 0,
    "customOrder": 593,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceComment": "",
    "sourceGroup": "版本",
    "sourceIcon": "https://m.acgnfl.com/24/07/content_33/525867/073.webp",
    "sourceName": "8.6",
    "sourceUrl": "https://www.mt314iu.vip:9527/"
  },
  {
    "articleStyle": 0,
    "customOrder": 594,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "8.7",
    "sourceUrl": "https://campus.hrdsmyw.com/"
  },
  {
    "articleStyle": 0,
    "customOrder": 595,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "8.8",
    "sourceUrl": "https://2.miqmrtxcv.cc/category/mrds/"
  },
  {
    "articleStyle": 2,
    "customOrder": 596,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "@js:\n(()=>{\nlet headerss={};\nheaderss['User-Agent']=java.getWebViewUA();\n return JSON.stringify(headerss);\n})();",
    "lastUpdateTime": 1773945742824,
    "loadWithBaseUrl": true,
    "ruleArticles": "div.home-rows-videos-wrapper@a:not([target])||div.horizontal-row>div.video-item-container",
    "ruleContent": "<js>\nlet title = java.getString('#shareBtn-title@text')\nlet page_arr = java.getStringList('#playlist-scroll@a.overlay[-1:0]@href');\nlet video_arr = [];\nfor (let a = 0 ; a < page_arr.length ; a++){\nif (baseUrl == page_arr[a]) {\nvideo_arr.push(java.getString('video#player@source.0@src'));\n} else {\nlet content = java.get(page_arr[a], {}).body();\nvideo_arr.push(java.getString('video#player@source.0@src', content));\n}\n}\nresult = {};\nresult.title = title;\nresult.url = video_arr;\nresult.page = page_arr;\nresult;\n</js>\n<!DOCTYPE html>\n<html lang=\"zh-Hans\">\n<head>\n<title>{{result.title}}</title>\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no\">\n<meta name=\"referrer\" content=\"no-referrer\">\n<link href=\"https://cdn.bootcdn.net/ajax/libs/plyr/3.7.8/plyr.css\" rel=\"stylesheet\">\n</head>\n<body>\n<p></p>\n<div class=\"video-container\">\n  <video id=\"player\" playsinline controls preload=\"auto\" >\n  </video>\n</div>\n<details>\n  <summary>\n    <h3></h3>\n  </summary>\n  <img>\n</details>\n<div class=\"all-info\">\n<div>\n    <p>🕵 片名：{{result.title}}</p>\n</div>\n<div class=\"jiekou\" style=\"\">\n<p>🎬 集数： </p>\n<div id=\"selected-jiekou\" onclick=\"jiekouList()\"><button data-id=\"0\"><b>无尽视频<sup>1</sup></b></button></div><div id=\"jiekou-list\" style=\"display: none;\"></div></div>\n\n{{\n\nlet dom = `<div class=\"jishu\" style=\"display:block;\"><p>`;\nfor (let b = 0 ; b < result.url.length ; b++){\ndom += `<button onclick=\"jishu(this)\" data-src=\"${result.url[b]}\"><b>${b + 1}</b></button>`\n}\ndom  +=`</p></div>`;\ndom;\n}}\n\n\n</div>\n\n<script src=\"https://cdn.bootcdn.net/ajax/libs/hls.js/1.6.12/hls.min.js\"></script>\n<script src=\"https://cdn.bootcdn.net/ajax/libs/plyr/3.7.8/plyr.min.js\"></script>\n\n<script>\n\nconst JKkey = \"{{java.md5Encode16(baseUrl.replace(/.*\\}([^\\}\\`]+)\\`/,'$1'))}}\";\nconst JDkey = \"{{java.md5Encode16(baseUrl.replace(/.*\\}([^\\}\\`]+)\\`/,'$1') + 'time')}}\";\nconst PTtime = {{/^\\d+$/.test('跳过片头：') ?'跳过片头：' : 0}};\nconst PWtime = {{/^\\d+$/.test('跳过片尾：') ? '跳过片尾：' : 0}};\nconst BSspeed = {{/^\\d+$/.test('长按倍速：') ? '长按倍速：' : 2}};\nconst ImageUrl = \"{{/^http/.test('背景图片：') ? '背景图片：' : ''}}\";\nconst Opacity1 = \"{{/0|1|^0\\.\\d+$/.test('图片透明度：') ? '图片透明度：' : ''}}\";\nconst Opacity2 = \"{{/0|1|^0\\.\\d+$/.test('按钮透明度：') ? '按钮透明度：' : ''}}\";\n\n// 获取视频URL并更新视频源\nasync function geturl() {\n    try {\n        let src = String($(\".jishu button.active\")[0].dataset.src);\n\n        // 获取页面信息\n        let fm = \"\";\n\n        // 获取视频源\n        let zyurl = [];\n        if (/mxcontent/.test(src)) {\n            zyurl.push({src:src,size:\"1\"});\n        } else {\n            zyurl.push({src:src,size:\"1\"});\n        }\n\n        // 更新详情封面\n        $(\"img\")[0].src = fm;\n\n        // 更新视频封面\n        $(\".video-container\")[0].style.background = `#000 url('${fm}') no-repeat center center / cover`;\n\n        // 返回视频源\n        let sources = zyurl;\n        return { sources: sources };\n    } catch (error) {\n        weblog(error, '错误:', true);\n        console.error(\"错误:\", error);\n        throw error;\n    }\n}\n\n// 点击集数按钮时调用的函数\nasync function jishu(item) {\n    var video = $('video')[0];\n    var wasPlaying = (video && !video.paused) || localStorage.getItem('fromEnded') === 'true';\n    if (localStorage.getItem('fromEnded') === 'true') {\n        localStorage.removeItem('fromEnded');\n    }\n    omit($('.jishu button.active'));\n    item.className = \"active\";\n    const { sources } = await geturl();\n    setTimeout(updatePadding, 100);\n    var index1 = $('#selected-jiekou button')[0].dataset.id;\n    var index2 = Array.from(item.parentNode.children).indexOf(item);\n    var Progress = {\n        index1: index1,\n        index2: index2\n    };\n    localStorage.setItem(JKkey, JSON.stringify(Progress));\n    localStorage.removeItem(JDkey);\n    initializePlayer(sources, JDkey, PTtime, PWtime, BSspeed, 1);\n    if (wasPlaying && video) {\n        const tryAutoPlay = () => {\n            if (video.readyState >= 3) {\n                video.play().catch(e => {\n                    console.log(\"自动播放被阻止:\", e);\n                    $('.plyr__control--overlaid').show();\n                });\n                video.removeEventListener('canplay', tryAutoPlay);\n            }\n        };\n        if (video.readyState >= 3) {\n            video.play().catch(e => console.log(\"立即播放失败:\", e));\n        } else {\n            video.addEventListener('canplay', tryAutoPlay);\n        }\n    }\n}\n\n// 页面加载时初始化播放器\n(async () => {\n    var m = 0,n = 0;\n    var Progress = localStorage.getItem(JKkey);\n    if (Progress) {\n        var history = JSON.parse(Progress);\n        m = history.index1;\n        n = history.index2;\n    }\n    if (m > 0) {\n        const buttonList = $('#jiekou-list')[0].querySelectorAll('button');\n        const targetButton = Array.from(buttonList).find(btn => btn.getAttribute('data-id') == m);\n        jiekou(targetButton);\n        const allButtons = $('.jishu')[m].querySelectorAll('button');\n        active(allButtons, n);\n    } else {\n        active($('.jishu button'), n);\n    }\n    const { sources } = await geturl();\n    setTimeout(updatePadding, 100);\n    localStorage.setItem('HistoryTAG', 1);\n    initializePlayer(sources, JDkey, PTtime, PWtime, BSspeed, 1);\n})();\n\n/*=================js 库================*/\n// 弹窗提示\nfunction weblog(message, title = '提示：', copy = false) {\n    // 0. 全屏状态处理（仅退出不恢复）\n    if (document.fullscreenElement) {\n        document.exitFullscreen().catch(err => {\n            console.warn('退出全屏失败:', err);\n        });\n        setTimeout(updatePadding, 100);\n    }\n\n    // 1. 保存页面原始状态\n    const previousOverflow = document.body.style.overflow;\n    const previousActiveElement = document.activeElement;\n    document.body.style.overflow = 'hidden';\n\n    // 2. 创建遮罩层\n    const overlay = document.createElement('div');\n    overlay.style.cssText = `\n        position: fixed;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 100%;\n        background-color: rgba(0, 0, 0, 0.7);\n        z-index: 2147483647;\n        backdrop-filter: blur(3px);\n        opacity: 0;\n        transition: opacity 0.3s ease;\n        pointer-events: auto;\n    `;\n\n    // 3. 创建弹窗容器\n    const popup = document.createElement('div');\n    popup.className = 'popup';\n    popup.tabIndex = -1;\n\n    // 4. 创建标题\n    const titleElement = document.createElement('h3');\n    titleElement.textContent = title;\n    titleElement.className = 'titleElement';\n    popup.appendChild(titleElement);\n\n    // 5. 创建内容区域\n    const contentElement = document.createElement('div');\n    contentElement.textContent = message;\n    contentElement.className = 'contentElement';\n    popup.appendChild(contentElement);\n\n    // 6. 创建按钮容器\n    const buttonContainer = document.createElement('div');\n    buttonContainer.style.cssText = `\n        display: flex;\n        justify-content: flex-end;\n        gap: 12px;\n    `;\n\n    // 7. 根据copy参数决定是否显示复制按钮\n    if (copy) {\n        const copyButton = document.createElement('button');\n        copyButton.textContent = '复制文本';\n        copyButton.style.cssText = `\n            padding: 8px 18px;\n            cursor: pointer;\n            background-color: #4CAF50;\n            color: #eee;\n            border: none;\n            border-radius: 6px;\n            font-size: 14px;\n            font-weight: 500;\n            transition: all 0.2s;\n            height: 36px;\n            box-sizing: border-box;\n            line-height: 1;\n            display: inline-flex;\n            align-items: center;\n            justify-content: center;\n        `;\n\n        // 复制功能实现\n        copyButton.onclick = async () => {\n            const originalText = copyButton.textContent;\n\n            copyButton.disabled = true;\n            copyButton.style.opacity = '0.7';\n            copyButton.textContent = '复制中...';\n\n            try {\n                if (navigator.clipboard) {\n                    await navigator.clipboard.writeText(message);\n                } else {\n                    const textarea = document.createElement('textarea');\n                    textarea.value = message;\n                    textarea.style.position = 'fixed';\n                    document.body.appendChild(textarea);\n                    textarea.select();\n                    document.execCommand('copy');\n                    document.body.removeChild(textarea);\n                }\n\n                copyButton.textContent = '✓ 已复制';\n                copyButton.style.backgroundColor = '#2196F3';\n\n                setTimeout(() => {\n                    copyButton.textContent = originalText;\n                    copyButton.style.backgroundColor = '#4CAF50';\n                    copyButton.disabled = false;\n                    copyButton.style.opacity = '1';\n                }, 2000);\n            } catch (err) {\n                console.error('复制失败:', err);\n                copyButton.textContent = '复制失败';\n                setTimeout(() => {\n                    copyButton.textContent = originalText;\n                    copyButton.disabled = false;\n                    copyButton.style.opacity = '1';\n                }, 2000);\n            }\n        };\n\n        buttonContainer.appendChild(copyButton);\n    }\n\n    // 8. 创建关闭按钮\n    const closeButton = document.createElement('button');\n    closeButton.textContent = '关闭';\n    closeButton.style.cssText = `\n        padding: 8px 18px;\n        cursor: pointer;\n        background-color: #3493b6;\n        color: #eee;\n        border: none;\n        border-radius: 6px;\n        font-size: 14px;\n        font-weight: 500;\n        transition: all 0.2s;\n        height: 36px;\n        box-sizing: border-box;\n        line-height: 1;\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n    `;\n    buttonContainer.appendChild(closeButton);\n    popup.appendChild(buttonContainer);\n\n    // 9. 关闭功能\n    const removePopup = () => {\n        popup.style.opacity = '0';\n        popup.style.transform = 'translate(-50%, -50%) scale(0.95)';\n        overlay.style.opacity = '0';\n\n        setTimeout(() => {\n            // 移除元素\n            if (overlay.parentNode) overlay.parentNode.removeChild(overlay);\n            if (popup.parentNode) popup.parentNode.removeChild(popup);\n\n            // 恢复页面状态\n            document.body.style.overflow = previousOverflow;\n            previousActiveElement?.focus();\n            document.removeEventListener('keydown', escHandler);\n        }, 300);\n    };\n\n    closeButton.onclick = removePopup;\n    overlay.onclick = removePopup;\n\n    // 10. 添加到页面\n    document.body.appendChild(overlay);\n    document.body.appendChild(popup);\n\n    // 触发动画\n    setTimeout(() => {\n        overlay.style.opacity = '1';\n        popup.style.opacity = '1';\n        popup.style.transform = 'translate(-50%, -50%) scale(1)';\n    }, 10);\n\n    // 11. ESC键关闭\n    const escHandler = (e) => {\n        if (e.key === 'Escape') {\n            removePopup();\n        }\n    };\n    document.addEventListener('keydown', escHandler);\n}\n\n// 选中标签\nfunction $(rule) {\n    return document.querySelectorAll(rule);\n}\n\n// 删除选中标签的class\nfunction omit(items) {\n    return Array.from(items, (item) => {\n        item.className = \"\";\n    });\n}\n\n// 选中标签的class增加active\nfunction active(items, index) {\n    items[index].className = \"active\";\n}\n\nlet isButtonListVisible = false;\n\n//切换候选列表显示\nfunction jiekouList() {\n    const selectedButton = $('#selected-jiekou > button')[0];\n    const buttonList = $('#jiekou-list')[0];\n    isButtonListVisible = !isButtonListVisible;\n    if (isButtonListVisible) {\n        if (buttonList.querySelectorAll('button').length > 0) {\n            selectedButton.style.borderRadius = '0';\n            buttonList.style.display = 'block';\n        }\n        selectedButton.style.opacity = '1';\n        // 添加全局点击事件监听\n        document.addEventListener('click', function globalClickListener(e) {\n            const clickedInsideButtonList = buttonList.contains(e.target);\n            const clickedSelectedButton = $('#selected-jiekou > button')[0].contains(e.target);\n            if (!clickedInsideButtonList && !clickedSelectedButton) {\n                selectedButton.style.borderRadius = '';\n                selectedButton.style.opacity = '';\n                buttonList.style.display = 'none';\n                isButtonListVisible = false;\n                document.removeEventListener('click', globalClickListener);\n            }\n        });\n    } else {\n        selectedButton.style.borderRadius = '';\n        selectedButton.style.opacity = '';\n        buttonList.style.display = 'none';\n    }\n}\n\n//切换列表接口\nfunction jiekou(clickedButton) {\n    const selectedContainer = $('#selected-jiekou')[0];\n    const selectedButton = selectedContainer.querySelector('button');\n    if (selectedButton) {\n        selectedButton.style.borderRadius = '';\n        selectedButton.style.opacity = '';\n    }\n    const buttonList = $('#jiekou-list')[0];\n    buttonList.appendChild(selectedContainer.querySelector('button'));\n    selectedContainer.appendChild(clickedButton);\n    isButtonListVisible = false;\n    buttonList.style.display = 'none';\n    const allButtons = buttonList.querySelectorAll('button');\n    allButtons.forEach(button => {\n        button.setAttribute('onclick', 'jiekou(this)');\n    });\n    const buttonsArray = Array.from(buttonList.querySelectorAll('button'));\n    buttonsArray.sort((a, b) => {\n        return parseInt(a.getAttribute('data-id')) - parseInt(b.getAttribute('data-id'));\n    });\n    buttonList.innerHTML = '';\n    buttonsArray.forEach(button => {\n        buttonList.appendChild(button);\n    });\n    JishuList(clickedButton);\n}\n\n// 切换集数列表显示\nfunction JishuList(clickedButton) {\n    const dataId = clickedButton.getAttribute('data-id');\n    const allJishuLists = $('.jishu');\n    allJishuLists.forEach(list => {\n        list.style.display = 'none';\n    });\n    allJishuLists[dataId].style.display = 'block';\n}\n\n// 保存原生的 fetch 函数\nconst originalFetch = window.fetch;\n\n// 重新定义全局的 fetch 函数\nwindow.fetch = async function(input, init = {}) {\n    const url = typeof input === 'string' ? input : input.url;\n\n    // 准备请求选项\n    let requestOptions = {\n        method: init.method || 'GET',\n        headers: {\n            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',\n            'Accept-Encoding': 'gzip, deflate, br',\n            'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',\n            ...init.headers\n        },\n        cache: 'no-cache',\n        ...init\n    };\n\n    // 处理请求体\n    if (init.body) {\n        const body = init.body;\n        if (!requestOptions.headers['Content-Type']) {\n            requestOptions.headers['Content-Type'] = typeof body === 'object'\n                ? 'application/json'\n                : 'application/x-www-form-urlencoded';\n        }\n\n        if (typeof body === 'object' && !(body instanceof FormData) && !(body instanceof URLSearchParams)) {\n            requestOptions.body = JSON.stringify(body);\n        } else if (typeof body === 'string') {\n            requestOptions.body = body.replace(/\\+/g, '%2B');\n        } else {\n            requestOptions.body = body;\n        }\n    }\n\n    // 如果没有请求体但存在 Content-Type 头，则删除它\n    if (!init.body && requestOptions.headers['Content-Type']) {\n        delete requestOptions.headers['Content-Type'];\n    }\n\n    // 使用降级策略\n    return await fetchWithFallback(input, init, url, requestOptions);\n};\n\n// 降级策略函数\nasync function fetchWithFallback(input, init, url, requestOptions) {\n    // 确定当前可用的方法级别\n    let methodLevel = 1; // 从最高级别开始尝试\n\n    while (methodLevel <= 2) {\n        try {\n            switch (methodLevel) {\n                case 1: // 第一级：legado\n                    if (typeof window.run === 'function') {\n                        console.log('Using legado (level 1)');\n                        return await useWindowRun(url, requestOptions);\n                    }\n                    break;\n\n                case 2: // 第二级：原生 fetch\n                    console.log('Using fetch (level 2)');\n                    return await originalFetch(input, init);\n            }\n        } catch (error) {\n            console.warn(`Method level ${methodLevel} failed:`, error);\n            // 当前级别失败，尝试下一级别\n        }\n\n        methodLevel++; // 尝试下一级别\n    }\n\n    // 使用原生 fetch 作为最终保底\n    console.error('All method levels failed, using native fetch as final fallback');\n    return await originalFetch(input, init);\n}\n\n// 使用 legado 发送请求\nasync function useWindowRun(url, requestOptions) {\n    const origin = window.location.origin;\n    const rawText = await window.run(`\n        let response = java.connect('${/^http/.test(url) ? url : (origin + url)},${JSON.stringify(requestOptions)}');\n        response.code() + '#|#' + response.body();\n    `);\n    const raw = rawText.split(\"#|#\");\n\n    // 判断状态码\n    let status = parseInt(raw[0]);\n\n    // 状态码对应的文本\n    const statusTexts = {\n        100: 'Continue',\n        101: 'Switching Protocols',\n        102: 'Processing',\n        200: 'OK',\n        201: 'Created',\n        202: 'Accepted',\n        203: 'Non-Authoritative Information',\n        204: 'No Content',\n        205: 'Reset Content',\n        206: 'Partial Content',\n        207: 'Multi-Status',\n        208: 'Already Reported',\n        226: 'IM Used',\n        300: 'Multiple Choices',\n        301: 'Moved Permanently',\n        302: 'Found',\n        303: 'See Other',\n        304: 'Not Modified',\n        305: 'Use Proxy',\n        307: 'Temporary Redirect',\n        308: 'Permanent Redirect',\n        400: 'Bad Request',\n        401: 'Unauthorized',\n        402: 'Payment Required',\n        403: 'Forbidden',\n        404: 'Not Found',\n        405: 'Method Not Allowed',\n        406: 'Not Acceptable',\n        407: 'Proxy Authentication Required',\n        408: 'Request Timeout',\n        409: 'Conflict',\n        410: 'Gone',\n        411: 'Length Required',\n        412: 'Precondition Failed',\n        413: 'Payload Too Large',\n        414: 'URI Too Long',\n        415: 'Unsupported Media Type',\n        416: 'Range Not Satisfiable',\n        417: 'Expectation Failed',\n        418: 'I\\'m a teapot',\n        421: 'Misdirected Request',\n        422: 'Unprocessable Entity',\n        423: 'Locked',\n        424: 'Failed Dependency',\n        425: 'Too Early',\n        426: 'Upgrade Required',\n        428: 'Precondition Required',\n        429: 'Too Many Requests',\n        431: 'Request Header Fields Too Large',\n        451: 'Unavailable For Legal Reasons',\n        500: 'Internal Server Error',\n        501: 'Not Implemented',\n        502: 'Bad Gateway',\n        503: 'Service Unavailable',\n        504: 'Gateway Timeout',\n        505: 'HTTP Version Not Supported',\n        506: 'Variant Also Negotiates',\n        507: 'Insufficient Storage',\n        508: 'Loop Detected',\n        510: 'Not Extended',\n        511: 'Network Authentication Required'\n    };\n\n    // 提取响应体\n    const responseBody = raw.length > 1 ? raw[1] : '';\n\n    // 判断Content-Type\n    let contentType = 'text/plain;charset=utf-8';\n\n    // 先检查URL扩展名\n    const urlLower = url.toLowerCase();\n    if (urlLower.includes('.ts') || urlLower.includes('.m3u8') || urlLower.includes('.mpeg')) {\n        contentType = 'video/mp2t';\n    } else if (urlLower.includes('.mp4') || urlLower.includes('.m4v')) {\n        contentType = 'video/mp4';\n    } else if (urlLower.includes('.webm')) {\n        contentType = 'video/webm';\n    } else if (urlLower.includes('.avi')) {\n        contentType = 'video/x-msvideo';\n    } else if (urlLower.includes('.mov')) {\n        contentType = 'video/quicktime';\n    } else if (urlLower.includes('.flv')) {\n        contentType = 'video/x-flv';\n    } else if (urlLower.includes('.mkv')) {\n        contentType = 'video/x-matroska';\n    } else if (urlLower.includes('.jpg') || urlLower.includes('.jpeg')) {\n        contentType = 'image/jpeg';\n    } else if (urlLower.includes('.png')) {\n        contentType = 'image/png';\n    } else if (urlLower.includes('.gif')) {\n        contentType = 'image/gif';\n    } else if (urlLower.includes('.svg')) {\n        contentType = 'image/svg+xml';\n    } else if (urlLower.includes('.webp')) {\n        contentType = 'image/webp';\n    } else if (urlLower.includes('.json')) {\n        contentType = 'application/json;charset=utf-8';\n    } else if (urlLower.includes('.xml')) {\n        contentType = 'application/xml;charset=utf-8';\n    } else if (urlLower.includes('.html') || urlLower.includes('.htm')) {\n        contentType = 'text/html;charset=utf-8';\n    } else if (urlLower.includes('.css')) {\n        contentType = 'text/css;charset=utf-8';\n    } else if (urlLower.includes('.js')) {\n        contentType = 'application/javascript;charset=utf-8';\n    } else if (urlLower.includes('.pdf')) {\n        contentType = 'application/pdf';\n    } else if (urlLower.includes('.zip')) {\n        contentType = 'application/zip';\n    } else if (urlLower.includes('.rar')) {\n        contentType = 'application/x-rar-compressed';\n    } else if (urlLower.includes('.7z')) {\n        contentType = 'application/x-7z-compressed';\n    } else if (urlLower.includes('.tar')) {\n        contentType = 'application/x-tar';\n    } else if (urlLower.includes('.gz')) {\n        contentType = 'application/gzip';\n    } else {\n        // 如果没有通过URL判断出来，尝试通过内容判断\n        if (responseBody && responseBody.length > 0) {\n            // 尝试判断是否为JSON\n            try {\n                // 检查是否以{或[开头\n                const trimmed = responseBody.trim();\n                if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n                    JSON.parse(responseBody);\n                    contentType = 'application/json;charset=utf-8';\n                }\n            } catch (e) {\n                // 不是JSON，继续检查\n            }\n\n            // 检查是否为HTML\n            if (responseBody.includes('<!DOCTYPE') ||\n                responseBody.includes('<html') ||\n                responseBody.includes('<head>') ||\n                responseBody.includes('<body>')) {\n                contentType = 'text/html;charset=utf-8';\n            }\n\n            // 检查是否为CSS\n            else if (responseBody.includes('{') && responseBody.includes('}') &&\n                    (responseBody.includes('color:') ||\n                     responseBody.includes('font-size:') ||\n                     responseBody.includes('background:'))) {\n                contentType = 'text/css;charset=utf-8';\n            }\n\n            // 检查是否为JavaScript\n            else if (responseBody.includes('function') ||\n                    responseBody.includes('var ') ||\n                    responseBody.includes('const ') ||\n                    responseBody.includes('let ') ||\n                    responseBody.includes('console.log')) {\n                contentType = 'application/javascript;charset=utf-8';\n            }\n\n            // 检查是否包含大量非ASCII字符或控制字符（可能是二进制数据）\n            else if (responseBody.length > 100) {\n                let binaryCount = 0;\n                for (let i = 0; i < Math.min(responseBody.length, 1000); i++) {\n                    const charCode = responseBody.charCodeAt(i);\n                    // 控制字符（除了常见的空白字符）或非ASCII字符\n                    if ((charCode < 32 && charCode !== 9 && charCode !== 10 && charCode !== 13) || charCode > 127) {\n                        binaryCount++;\n                    }\n                }\n\n                // 如果超过5%的字符是二进制特征，认为是二进制数据\n                if (binaryCount > Math.min(responseBody.length, 1000) * 0.05) {\n                    contentType = 'application/octet-stream';\n                }\n            }\n        }\n    }\n\n    // 创建并返回Response对象\n    return new Response(responseBody, {\n        status: status,\n        statusText: statusTexts[status] || 'Unknown Status',\n        headers: new Headers({\n            'Content-Type': contentType\n        })\n    });\n}\n\n// fetchRequest 函数\nasync function fetchRequest(url, headers, body = null) {\n    try {\n        const init = {\n            headers: headers\n        };\n\n        if (body) {\n            init.method = 'POST';\n            init.body = body;\n        }\n\n        const response = await fetch(url, init);\n\n        if (!response.ok) {\n            throw new Error(`HTTP error! Status: ${response.status}`);\n        }\n\n        const rawText = await response.text();\n\n        // 尝试解析 JSON\n        try {\n            const jsonData = JSON.parse(rawText);\n            return jsonData;\n        } catch (e) {\n            // 如果不是 JSON，返回原始文本\n            return rawText;\n        }\n    } catch (error) {\n        weblog(error, '请求失败:', true);\n        return null;\n    }\n}\n\n// 全局时间管理器\nconst TimeManager = {\n    currentVideoUrl: '',\n    headtime: 0,\n    endtime: 0,\n    listeners: [],\n\n    init(videoUrl) {\n        this.currentVideoUrl = videoUrl;\n        this._loadFromStorage();\n        this._setupListeners();\n    },\n\n    _loadFromStorage() {\n        const head = localStorage.getItem('head' + this.currentVideoUrl);\n        const end = localStorage.getItem('end' + this.currentVideoUrl);\n        this.headtime = head ? parseFloat(head) : 0;\n        this.endtime = end ? parseFloat(end) : 0;\n        this._notifyAll();\n    },\n\n    _setupListeners() {\n        window.addEventListener('storage', (e) => {\n            if (e.key === 'head' + this.currentVideoUrl) {\n                this.headtime = e.newValue ? parseFloat(e.newValue) : 0;\n                this._notify('head', this.headtime);\n            }\n            if (e.key === 'end' + this.currentVideoUrl) {\n                this.endtime = e.newValue ? parseFloat(e.newValue) : 0;\n                this._notify('end', this.endtime);\n            }\n        });\n    },\n\n    setHeadTime(time) {\n        this.headtime = time;\n        localStorage.setItem('head' + this.currentVideoUrl, time);\n        this._notify('head', time);\n    },\n\n    setEndTime(time) {\n        this.endtime = time;\n        localStorage.setItem('end' + this.currentVideoUrl, time);\n        this._notify('end', time);\n    },\n\n    clearMarks() {\n        localStorage.removeItem('head' + this.currentVideoUrl);\n        localStorage.removeItem('end' + this.currentVideoUrl);\n        this.headtime = 0;\n        this.endtime = 0;\n        this._notifyAll();\n    },\n\n    addListener(callback) {\n        this.listeners.push(callback);\n    },\n\n    _notify(type, value) {\n        this.listeners.forEach(cb => cb({ type, value }));\n    },\n\n    _notifyAll() {\n        this._notify('head', this.headtime);\n        this._notify('end', this.endtime);\n    }\n};\n\n// 初始设置\nlet player = null;\nlet timeManager = null;\nlet currentHls = null;\nlet isSwitching = false;\n\n// 初始化播放器\nfunction initializePlayer(sources, currentVideoUrl, defaultHeadtime, defaultEndtime, speed, autonext) {\n    const video = $('video')[0];\n    video.style.height = '56.25vw';\n    const qualityOptions = sources.map(source => parseInt(source.size));\n\n    // 修改图片和透明度\n    updateBackground(\n        typeof ImageUrl !== 'undefined' ? ImageUrl : undefined,\n        typeof Opacity1 !== 'undefined' ? Opacity1 : undefined,\n        typeof Opacity2 !== 'undefined' ? Opacity2 : undefined\n    );\n\n    // 初始化时间管理器\n    if (!timeManager || timeManager.currentVideoUrl !== currentVideoUrl) {\n        timeManager = Object.create(TimeManager);\n        timeManager.init(currentVideoUrl);\n\n        // 设置默认值（如果localStorage中没有）\n        if (!localStorage.getItem('head' + currentVideoUrl) && defaultHeadtime) {\n            timeManager.setHeadTime(defaultHeadtime);\n        }\n        if (!localStorage.getItem('end' + currentVideoUrl) && defaultEndtime) {\n            timeManager.setEndTime(defaultEndtime);\n        }\n    }\n\n    // 如果播放器已存在，则只更新视频源\n    if (player) {\n        // 获取当前画质\n        let currentQuality = qualityOptions[0];\n        if (player.storage && player.storage.get) {\n            const savedQuality = player.storage.get('quality');\n            if (savedQuality && qualityOptions.includes(parseInt(savedQuality))) {\n                currentQuality = parseInt(savedQuality);\n            }\n        }\n        if (!currentQuality) {\n            currentQuality = Math.max(...qualityOptions);\n        }\n\n        // 加载当前画质的视频源\n        const selectedSource = sources.find(source => source.size === currentQuality.toString()) || sources[0];\n        const savedProgress = localStorage.getItem(currentVideoUrl);\n        const progress = (savedProgress && savedProgress > timeManager.headtime) ? savedProgress : timeManager.headtime;\n\n        // 更新画质配置\n        player.config.quality.options = qualityOptions;\n        player.config.quality.default = currentQuality;\n        player.config.quality.onChange = (newQuality) => {\n            changeVideoQuality(newQuality, sources);\n        };\n\n        // 更新主菜单的画质显示\n        mainMenuQuality(currentQuality)\n\n        // 更新画质菜单选项\n        updateQualityOptions(qualityOptions, currentQuality, sources);\n\n        // 更新p标签显示当前源\n        $(\"body>p\")[0].innerHTML = `\n          <div style=\"display: flex; align-items: center; justify-content: space-between; width: 100%;\">\n            <a href=\"legadovideo://${encodeURIComponent(selectedSource.src)}\">\n              ${selectedSource.src}\n            </a>\n            <button\n              onclick=\"navigator.clipboard.writeText('${selectedSource.src.replace(/'/g, \"\\\\'\")}')\n                .then(() => weblog('链接已复制到剪贴板'))\n                .catch(() => weblog('复制链接失败'))\"\n            >\n              复制\n            </button>\n          </div>\n        `;\n\n        setTimeout(() => (isSwitching = false), 2000);\n\n        if (Hls.isSupported() && /m3u8|hls/.test(selectedSource.src)) {\n            initializeHlsPlayer(selectedSource.src, selectedSource.headersOrReferer, video, progress);\n        } else {\n            initializeRegularPlayer(selectedSource.src, selectedSource.headersOrReferer, video, progress);\n        }\n\n        return player;\n    }\n\n    // 创建新的播放器实例\n    player = new Plyr(video, {\n        controls: [\n            'play-large',   // 大播放按钮\n            'rewind',       // 倒退\n            'play',         // 播放\n            'fast-forward', // 快进\n            'progress',     // 进度条\n            'current-time', // 当前时间\n            'duration',     // 总时长\n            'mute',         // 静音\n            'volume',       // 音量\n            'captions',     // 字幕\n            'settings',     // 设置\n            'pip',          // 画中画\n            'airplay',      // Airplay\n            'fullscreen'    // 全屏\n        ],\n        settings: ['quality', 'speed'],\n        quality: {\n            default: qualityOptions[0],\n            options: qualityOptions,\n            forced: true,\n            onChange: (newQuality) => {\n                changeVideoQuality(newQuality, sources);\n            }\n        },\n        fullscreen: {\n            enabled: true,\n            fallback: true,\n            iosNative: true,\n            container: null,\n        },\n        speed: {\n            selected: 1, // 设置默认播放倍数\n            options: [8,5,4,3,2.5, 2, 1.5, 1, 0.5, 0.25],\n        },\n        i18n: {\n            restart: '重新开始',\n            rewind: '倒退 {seektime} 秒',\n            play: '播放',\n            pause: '暂停',\n            fastForward: '快进 {seektime} 秒',\n            seek: '进度',\n            seekLabel: '{currentTime} / {duration}',\n            played: '播放',\n            buffered: '缓冲',\n            currentTime: '当前时间',\n            duration: '持续时间',\n            volume: '音量',\n            mute: '静音',\n            unmute: '取消静音',\n            enableCaptions: '启用字幕',\n            disableCaptions: '禁用字幕',\n            enterFullscreen: '进入全屏',\n            exitFullscreen: '退出全屏',\n            frameTitle: '播放器',\n            captions: '字幕',\n            settings: '设置',\n            speed: '速度',\n            normal: '正常',\n            quality: '画质',\n            qualityLabel: {\n                0: '自动',\n            },\n            pip: '画中画',\n            loop: '循环',\n            start: '开始',\n            end: '结束',\n            all: '全部',\n            reset: '重置',\n            disabled: '禁用',\n            advertisement: '广告'\n        },\n        keyboard: {\n            focused: true,\n            global: true,\n        },\n        tooltips: {\n            controls: true,\n            seek: true\n        },\n        captions: {\n            active: true,\n            update: true,\n            language: 'auto',\n        },\n    });\n\n    player.on('ready', () => {\n        video.style.visibility = 'visible';\n\n        // 添加显示集数\n        addEpisodeBarToPlayer();\n\n        // 添加跳过菜单项\n        addSkipMenuItems(currentVideoUrl, timeManager);\n\n        // 初始化播放器方向控制功能\n        initPlayerOrientationControl(player);\n\n        // 设置进度记录\n        progressRecording(currentVideoUrl, video);\n\n        // 设置自动下一集监听\n        autoNextListener(currentVideoUrl, autonext, video);\n\n        // 添加上下集按钮\n        addEpisodeButtons(currentVideoUrl, autonext);\n\n        // 设置手势控制\n        gestureControls(player, video, speed);\n\n        // 设置全屏和按钮显示处理\n        fullscreenControls(autonext, video);\n\n        // 初始化处理全屏状态\n        updateFullscreen(autonext, video);\n\n        // 播放开始自动改为黑色背景\n        player.on('play', () => {\n            $(\".video-container\")[0].style.background = '#000';\n        });\n\n        // 进度大于0时自动改为黑色背景\n        player.on('timeupdate', () => {\n            if (video.currentTime > 0) $(\".video-container\")[0].style.background = '#000';\n        });\n\n        // 获取保存的播放进度\n        const savedProgress = localStorage.getItem(currentVideoUrl);\n        const progress = (savedProgress && savedProgress > timeManager.headtime) ? parseFloat(savedProgress) : timeManager.headtime;\n        if (!isNaN(progress) && progress > 0) {\n            video.currentTime = progress;\n        }\n\n        // 调用切换画质函数加载默认画质\n        changeVideoQuality(qualityOptions[0], sources);\n    });\n\n    return player;\n}\n\n// 修改图片和透明度\nfunction updateBackground(imageUrl, opacity1, opacity2) {\n    if (!imageUrl || imageUrl === '') imageUrl = '';\n    if (!opacity1 || opacity1 === '') opacity1 = 0.2;\n    if (!opacity2 || opacity2 === '') opacity2 = 0.6;\n    document.body.style.setProperty('--bg-image', `url('${imageUrl}')`);\n    document.body.style.setProperty('--bg-opacity1', opacity1);\n    document.body.style.setProperty('--bg-opacity2', opacity2);\n}\n\n// 更新画质菜单选项\nfunction updateQualityOptions(qualityOptions, currentQuality, sources) {\n    if (!player || !player.elements || !player.elements.settings) return;\n\n    try {\n        const settings = player.elements.settings;\n        const qualityPanel = settings.panels.quality;\n        if (!qualityPanel) return;\n        const menuContainer = qualityPanel.querySelector('[role=\"menu\"]');\n        if (!menuContainer) return;\n        menuContainer.innerHTML = '';\n        qualityOptions.forEach(quality => {\n            const isSelected = quality === currentQuality;\n            const button = createQualityButton(quality, isSelected, sources);\n            menuContainer.appendChild(button);\n        });\n    } catch (error) {\n        console.error('更新画质菜单选项失败:', error);\n    }\n}\n\n// 创建画质按钮\nfunction createQualityButton(quality, isSelected, sources) {\n    const button = document.createElement('button');\n    button.type = 'button';\n    button.className = 'plyr__control';\n    button.setAttribute('role', 'menuitemradio');\n    button.setAttribute('aria-checked', isSelected ? 'true' : 'false');\n    button.setAttribute('data-plyr', 'quality');\n    button.value = quality;\n\n    // 根据画质生成对应的按钮\n    const badge = getQualityBadge(quality);\n    button.innerHTML = `\n        <span>${quality}p${badge ? `<span class=\"plyr__menu__value\"><span class=\"plyr__badge\">${badge}</span></span>` : '</span>'}\n    `;\n\n    // 绑定点击事件\n    button.addEventListener('click', function(e) {\n        e.preventDefault();\n        e.stopPropagation();\n\n        const quality = parseInt(this.value);\n\n        // 1. 触发画质变更事件\n        if (player.quality) {\n            player.quality.current = quality;\n            if (player.quality.set) {\n                player.quality.set(quality);\n            }\n            player.emit('qualitychange', quality);\n        }\n\n        // 2. 更新配置\n        player.config.quality.current = quality;\n\n        // 3. 保存到Plyr存储\n        if (player.storage && player.storage.set) {\n            player.storage.set({ quality: quality });\n        }\n\n        // 4. 更新画质菜单选中状态\n        qualitySelection(quality);\n\n        // 5. 更新主菜单的画质显示\n        mainMenuQuality(quality);\n\n        // 6. 调用画质切换函数\n        changeVideoQuality(quality, sources);\n\n        // 7. 返回主菜单\n        backToMainMenu();\n    });\n\n    // 设置初始选中状态\n    if (isSelected) {\n        button.classList.add('plyr__control--selected');\n        const checkSpan = button.querySelector('.plyr__control--checked');\n        if (checkSpan) {\n            checkSpan.style.display = 'block';\n            checkSpan.innerHTML = '✓';\n        }\n    }\n\n    return button;\n}\n\n// 更新画质菜单选中状态\nfunction qualitySelection(selectedQuality) {\n    if (!player || !player.elements.settings) return;\n\n    const settings = player.elements.settings;\n    const qualityPanel = settings.panels.quality;\n    if (!qualityPanel) return;\n\n    const menuContainer = qualityPanel.querySelector('[role=\"menu\"]');\n    if (!menuContainer) return;\n\n    const allButtons = menuContainer.querySelectorAll('[data-plyr=\"quality\"]');\n    allButtons.forEach(btn => {\n        const quality = parseInt(btn.value);\n        const isSelected = quality === selectedQuality;\n\n        btn.setAttribute('aria-checked', isSelected ? 'true' : 'false');\n\n        if (isSelected) {\n            btn.classList.add('plyr__control--selected');\n            const checkSpan = btn.querySelector('.plyr__control--checked');\n            if (checkSpan) {\n                checkSpan.style.display = 'block';\n                checkSpan.innerHTML = '✓';\n                checkSpan.style.color = 'var(--plyr-control-toggle-checked-background, #00b3ff)';\n            }\n        } else {\n            btn.classList.remove('plyr__control--selected');\n            const checkSpan = btn.querySelector('.plyr__control--checked');\n            if (checkSpan) {\n                checkSpan.style.display = 'none';\n            }\n        }\n    });\n}\n\n// 在home菜单中查找画质按钮\nfunction findQualityMenu(homeMenu) {\n    const allButtons = homeMenu.querySelectorAll('[data-plyr=\"settings\"]');\n\n    for (let button of allButtons) {\n        const buttonText = button.textContent || button.innerText;\n\n        if (buttonText.includes('画质')) {\n            return button;\n        }\n    }\n\n    console.log('未找到包含关键词的按钮');\n    return null;\n}\n\n// 更新主菜单的画质显示\nfunction mainMenuQuality(quality) {\n    try {\n        // 查找设置弹出层容器\n        const menuContainer = document.querySelector('.plyr__menu__container');\n        if (!menuContainer) {\n            console.log('未找到菜单容器');\n            return;\n        }\n\n        // 查找主菜单（包含\"-home\"的ID）\n        const homeMenu = menuContainer.querySelector('[id*=\"-home\"]');\n        if (!homeMenu) {\n            console.log('未找到主菜单');\n            return;\n        }\n\n        // 在主菜单中查找画质按钮\n        const qualityButton = findQualityMenu(homeMenu);\n        if (!qualityButton) {\n            console.log('未找到画质按钮');\n            return;\n        }\n\n        // 更新画质显示\n        const valueSpan = qualityButton.querySelector('.plyr__menu__value');\n        if (valueSpan) {\n            valueSpan.innerHTML = `${quality}p`;\n        } else {\n            console.log('未找到valueSpan');\n        }\n\n    } catch (error) {\n        console.error('更新主菜单显示失败:', error);\n    }\n}\n\n// 返回主菜单\nfunction backToMainMenu() {\n    try {\n        // 查找设置弹出层容器\n        const menuContainer = document.querySelector('.plyr__menu__container');\n        if (!menuContainer) {\n            console.log('未找到菜单容器');\n            return;\n        }\n\n        // 更改home菜单和quality菜单显示\n        const homeMenu = menuContainer.querySelector('[id*=\"-home\"]');\n        const qualityMenu = menuContainer.querySelector('[id*=\"-quality\"]');\n\n        if (homeMenu && qualityMenu) {\n            homeMenu.removeAttribute('hidden');\n            qualityMenu.setAttribute('hidden', '');\n\n            return;\n        }\n\n        console.log('未找到需要的菜单');\n\n    } catch (error) {\n        console.error('返回主菜单失败:', error);\n    }\n}\n\n// 根据画质返回对应的徽章文本\nfunction getQualityBadge(quality) {\n    if (quality >= 2160) return '4K';\n    if (quality >= 1440) return '2K';\n    if (quality >= 1080) return 'FHD';\n    if (quality >= 720) return 'HD';\n    if (quality >= 480) return 'SD';\n    if (quality >= 360) return 'LD';\n    if (quality >= 240) return 'ULD';\n    return '';\n}\n\n// 设置进度记录\nfunction progressRecording(currentVideoUrl, video) {\n    const progressInterval = setInterval(() => {\n        const currentTime = video.currentTime;\n        localStorage.setItem(currentVideoUrl, currentTime.toString());\n        localStorage.setItem('HistoryTIME', Date.now());\n    }, 5000);\n}\n\n// 设置自动下一集监听\nfunction autoNextListener(currentVideoUrl, autonext, video) {\n    player.on('timeupdate', () => {\n        if (!autonext || video.paused || timeManager.endtime === 0 || video.duration <= 0) return;\n        if ((video.duration - video.currentTime) < timeManager.endtime) {\n            const randomDelay = Math.floor(Math.random() * 200) + 100;\n            setTimeout(() => {\n                if (isSwitching) return;\n                switchToNextEpisode(currentVideoUrl, autonext);\n            }, randomDelay);\n        }\n    });\n\n    player.on('ended', () => {\n        if (isSwitching || !autonext || video.duration <= 0) return;\n        const randomDelay = Math.floor(Math.random() * 200) + 100;\n        setTimeout(() => {\n            if (isSwitching) return;\n            localStorage.setItem('fromEnded', 'true');\n            switchToNextEpisode(currentVideoUrl, autonext);\n        }, randomDelay);\n    });\n}\n\n// 添加上下集按钮\nfunction addEpisodeButtons(currentVideoUrl, autonext) {\n    if (autonext) {\n        const style = document.createElement('style');\n        style.textContent = `\n            .plyr__control--episode-prev,\n            .plyr__control--episode-next {\n                display: none;\n                margin: 1px;\n            }\n            .plyr__controls [data-plyr=\"rewind\"],\n            .plyr__controls [data-plyr=\"fast-forward\"] {\n                margin: 1px;\n            }\n        `;\n        document.head.appendChild(style);\n\n        const controlsContainer = document.querySelector('.plyr__controls');\n        if (controlsContainer) {\n            // 获取参考按钮\n            const rewindBtn = controlsContainer.querySelector('[data-plyr=\"rewind\"]');\n            const fastForwardBtn = controlsContainer.querySelector('[data-plyr=\"fast-forward\"]');\n\n            // 创建上一集按钮（放在后退前）\n            if (rewindBtn && !document.querySelector('.plyr__control--episode-prev')) {\n                const prevBtn = document.createElement('button');\n                prevBtn.className = 'plyr__control plyr__control--episode-prev';\n                prevBtn.innerHTML = `\n                    <svg aria-hidden=\"true\" focusable=\"false\" width=\"18\" height=\"18\">\n                        <use xlink:href=\"#plyr-prev-episode\"></use>\n                    </svg>\n                    <span class=\"plyr__tooltip\">上一集</span>\n                `;\n                prevBtn.onclick = (e) => {\n                    e.preventDefault();\n                    switchToPrevEpisode(currentVideoUrl, autonext);\n                };\n                rewindBtn.parentNode.insertBefore(prevBtn, rewindBtn);\n            }\n\n            // 创建下一集按钮（放在快进后）\n            if (fastForwardBtn && !document.querySelector('.plyr__control--episode-next')) {\n                const nextBtn = document.createElement('button');\n                nextBtn.className = 'plyr__control plyr__control--episode-next';\n                nextBtn.innerHTML = `\n                    <svg aria-hidden=\"true\" focusable=\"false\" width=\"18\" height=\"18\">\n                        <use xlink:href=\"#plyr-next-episode\"></use>\n                    </svg>\n                    <span class=\"plyr__tooltip\">下一集</span>\n                `;\n                nextBtn.onclick = (e) => {\n                    e.preventDefault();\n                    switchToNextEpisode(currentVideoUrl, autonext);\n                };\n                fastForwardBtn.parentNode.insertBefore(nextBtn, fastForwardBtn.nextSibling);\n            }\n        }\n    }\n}\n\n// 设置手势控制\nfunction gestureControls(player, video, speed) {\n    const gesture = {\n        startX: 0,\n        startY: 0,\n        startTime: 0,\n        isLongPress: false,\n        initialSpeed: 1,\n        isSeeking: false,\n        longPressTimer: null,\n        wasPlaying: false,\n        lastTime: 0,\n        initialBrightness: 1,\n        isBrightnessControl: false,\n        initialVolume: 1,\n        isVolumeControl: false,\n        gestureType: null,\n        threshold: 15\n    };\n\n    // 提示工具\n    const controlTooltip = document.createElement('div');\n    controlTooltip.className = 'plyr__center-tooltip';\n    controlTooltip.innerHTML = `\n        <span class=\"control-icon\" style=\"font-weight:bold\"></span>\n        <span class=\"control-value\"></span>\n    `;\n    document.querySelector('.plyr__video-wrapper').appendChild(controlTooltip);\n\n    // 获取系统亮度（如果支持）\n    const getSystemBrightness = () => {\n        return parseFloat(localStorage.getItem('systemBrightness')) || 1;\n    };\n\n    // 设置系统亮度（模拟实现）\n    const setSystemBrightness = (brightness) => {\n        localStorage.setItem('systemBrightness', brightness.toString());\n\n        if ('screen' in window && 'brightness' in window.screen) {\n            try {\n                window.screen.brightness = brightness;\n            } catch (e) {\n                console.log('Screen Brightness API not supported');\n            }\n        }\n\n        let brightnessOverlay = document.getElementById('brightness-overlay');\n        if (!brightnessOverlay) {\n            brightnessOverlay = document.createElement('div');\n            brightnessOverlay.id = 'brightness-overlay';\n            brightnessOverlay.style.cssText = `\n                position: fixed;\n                top: 0;\n                left: 0;\n                width: 100%;\n                height: 100%;\n                background: black;\n                pointer-events: none;\n                z-index: 2147483647;\n                opacity: 0;\n                transition: opacity 0.2s ease;\n            `;\n            document.body.appendChild(brightnessOverlay);\n\n            document.addEventListener('fullscreenchange', updateBrightnessOverlay);\n            document.addEventListener('webkitfullscreenchange', updateBrightnessOverlay);\n        }\n        brightnessOverlay.style.opacity = (1 - brightness).toString();\n\n        updateBrightnessOverlay();\n    };\n\n    // 更新亮度覆盖层位置\n    const updateBrightnessOverlay = () => {\n        const brightnessOverlay = document.getElementById('brightness-overlay');\n        if (!brightnessOverlay) return;\n\n        const isFullscreen = document.fullscreenElement ||\n                           document.webkitFullscreenElement ||\n                           document.mozFullScreenElement ||\n                           document.msFullscreenElement;\n\n        if (isFullscreen) {\n            const fullscreenElement = document.fullscreenElement ||\n                                    document.webkitFullscreenElement ||\n                                    document.mozFullScreenElement ||\n                                    document.msFullscreenElement;\n\n            if (fullscreenElement) {\n                if (fullscreenElement !== document.body) {\n                    if (!fullscreenElement.contains(brightnessOverlay)) {\n                        fullscreenElement.appendChild(brightnessOverlay);\n                    }\n                    brightnessOverlay.style.position = 'absolute';\n                    brightnessOverlay.style.zIndex = '2147483647';\n                } else {\n                    if (document.body.contains(brightnessOverlay)) {\n                        document.body.appendChild(brightnessOverlay);\n                    }\n                    brightnessOverlay.style.position = 'fixed';\n                    brightnessOverlay.style.zIndex = '2147483647';\n                }\n            }\n        } else {\n            if (!document.body.contains(brightnessOverlay)) {\n                document.body.appendChild(brightnessOverlay);\n            }\n            brightnessOverlay.style.position = 'fixed';\n            brightnessOverlay.style.zIndex = '2147483647';\n        }\n    };\n\n    // 检查是否在全屏模式\n    const isFullscreen = () => {\n        return document.fullscreenElement ||\n               document.webkitFullscreenElement ||\n               document.mozFullScreenElement ||\n               document.msFullscreenElement;\n    };\n\n    // 检查是否在控制区域（全屏时排除顶部10%）\n    const isInControlArea = (startX, startY) => {\n        // 只有在全屏模式下才排除顶部区域\n        if (isFullscreen()) {\n            const screenHeight = window.innerHeight;\n            // 全屏时顶部10%区域用于系统手势（如下拉通知栏）\n            if (startY < screenHeight * 0.1) {\n                return false;\n            }\n        }\n\n        return true;\n    };\n\n    // 确定手势类型\n    const determineGestureType = (diffX, diffY, startX) => {\n        // 如果已经确定了手势类型，就保持原样\n        if (gesture.gestureType) {\n            return gesture.gestureType;\n        }\n\n        const absDiffX = Math.abs(diffX);\n        const absDiffY = Math.abs(diffY);\n\n        // 只有当移动距离超过阈值时才确定手势类型\n        if (absDiffX < gesture.threshold && absDiffY < gesture.threshold) {\n            return null;\n        }\n\n        // 判断主要移动方向\n        if (absDiffX > absDiffY) {\n            // 主要横向移动 - 进度控制\n            return 'seek';\n        } else {\n            // 主要纵向移动 - 根据起始位置判断是亮度还是音量\n            const isLeftSide = startX < window.innerWidth / 2;\n            return isLeftSide ? 'brightness' : 'volume';\n        }\n    };\n\n    // 显示控制提示\n    const showControlTooltip = (icon, value = '') => {\n        controlTooltip.style.opacity = '1';\n        controlTooltip.querySelector('.control-icon').textContent = icon;\n        controlTooltip.querySelector('.control-value').textContent = value;\n    };\n\n    // 隐藏控制提示\n    const hideControlTooltip = () => {\n        controlTooltip.style.opacity = '0';\n    };\n\n    // 长按倍数播放\n    const onTouchStart = (e) => {\n        if (e.touches?.length > 1) return;\n\n        const clientX = e.clientX || e.touches[0].clientX;\n        const clientY = e.clientY || e.touches[0].clientY;\n\n        // 检查是否在控制区域（全屏时排除顶部10%）\n        if (!isInControlArea(clientX, clientY)) return;\n\n        gesture.startX = clientX;\n        gesture.startY = clientY;\n        gesture.startTime = video.currentTime;\n        gesture.initialSpeed = player.speed;\n        gesture.isLongPress = false;\n        gesture.isSeeking = false;\n        gesture.wasPlaying = !video.paused;\n        gesture.lastTime = Date.now();\n        gesture.gestureType = null;\n\n        gesture.initialBrightness = getSystemBrightness();\n        gesture.initialVolume = video.volume;\n        gesture.isBrightnessControl = false;\n        gesture.isVolumeControl = false;\n\n        gesture.longPressTimer = setTimeout(() => {\n            if (!gesture.isSeeking && !gesture.gestureType) {\n                gesture.isLongPress = true;\n                player.speed = speed;\n\n                // 显示长按倍速提示\n                showControlTooltip('倍速', `${speed}×`);\n            }\n        }, 800);\n    };\n\n    // 滑动控制进度、亮度和音量\n    const onTouchMove = (e) => {\n        if (!gesture.startX || gesture.isLongPress) return;\n\n        const currentX = e.clientX || e.touches[0].clientX;\n        const currentY = e.clientY || e.touches[0].clientY;\n        const diffX = currentX - gesture.startX;\n        const diffY = currentY - gesture.startY;\n\n        // 确定手势类型（如果尚未确定）\n        if (!gesture.gestureType) {\n            gesture.gestureType = determineGestureType(diffX, diffY, gesture.startX);\n            if (gesture.gestureType) {\n                clearTimeout(gesture.longPressTimer);\n            }\n        }\n\n        // 根据确定的手势类型执行相应操作\n        switch (gesture.gestureType) {\n            case 'brightness':\n                handleBrightnessControl(diffY);\n                break;\n\n            case 'volume':\n                handleVolumeControl(diffY);\n                break;\n\n            case 'seek':\n                handleSeekControl(diffX);\n                break;\n\n            default:\n                // 手势类型未确定，不执行任何操作\n                return;\n        }\n\n        gesture.lastTime = Date.now();\n    };\n\n    // 处理亮度控制\n    const handleBrightnessControl = (diffY) => {\n        const brightnessChange = -diffY / window.innerHeight;\n        let newBrightness = Math.max(0.1, Math.min(1, gesture.initialBrightness + brightnessChange));\n\n        setSystemBrightness(newBrightness);\n\n        showControlTooltip('亮度', `${Math.round(newBrightness * 100)}%`);\n    };\n\n    // 处理音量控制\n    const handleVolumeControl = (diffY) => {\n        const volumeChange = -diffY / window.innerHeight;\n        let newVolume = Math.max(0, Math.min(1, gesture.initialVolume + volumeChange));\n\n        video.volume = newVolume;\n        player.volume = newVolume;\n\n        const iconText = newVolume === 0 ? '静音' : '音量';\n        showControlTooltip(iconText, `${Math.round(newVolume * 100)}%`);\n    };\n\n    // 处理进度控制\n    const handleSeekControl = (diffX) => {\n        if (!gesture.isSeeking) {\n            gesture.isSeeking = true;\n            gesture.wasPlaying = !video.paused;\n            if (gesture.wasPlaying) {\n                document.querySelector('.plyr__control--overlaid').classList.add('hidden');\n                video.pause();\n            }\n        }\n\n        const seekAmount = Math.round((diffX / window.innerWidth) * 300);\n        const newTime = Math.max(0, Math.min(\n            gesture.startTime + seekAmount,\n            video.duration\n        ));\n\n        if (Math.abs(video.currentTime - newTime) >= 1) {\n            $(\".video-container\")[0].style.background = '#000';\n            video.currentTime = newTime;\n        }\n\n        if (newTime <= 0) {\n            showControlTooltip('已到开头');\n        } else if (newTime >= video.duration) {\n            showControlTooltip('已到结尾');\n        } else {\n            const directionText = seekAmount > 0 ? '前进' : '后退';\n            showControlTooltip(directionText, `${Math.abs(seekAmount)}秒`);\n        }\n    };\n\n    // 触摸结束\n    const onTouchEnd = () => {\n        clearTimeout(gesture.longPressTimer);\n        if (gesture.isLongPress) {\n            player.speed = gesture.initialSpeed;\n            // 立即隐藏提示\n            hideControlTooltip();\n        }\n        else if (gesture.wasPlaying && !gesture.isLongPress && gesture.isSeeking) {\n            video.play().catch(e => console.log(\"播放恢复失败:\", e));\n            setTimeout(() => {\n                document.querySelector('.plyr__control--overlaid').classList.remove('hidden');\n            }, 100);\n            // 延迟隐藏提示\n            setTimeout(hideControlTooltip, 500);\n        } else {\n            // 其他情况延迟隐藏提示\n            setTimeout(hideControlTooltip, 500);\n        }\n\n        // 重置所有状态\n        gesture.startX = 0;\n        gesture.isSeeking = false;\n        gesture.isLongPress = false;\n        gesture.isBrightnessControl = false;\n        gesture.isVolumeControl = false;\n        gesture.gestureType = null;\n    };\n\n    // 事件监听\n    const playerContainer = document.querySelector('.plyr__video-wrapper');\n    playerContainer.addEventListener('touchstart', onTouchStart, { passive: true });\n    playerContainer.addEventListener('mousedown', onTouchStart);\n    playerContainer.addEventListener('touchmove', onTouchMove, { passive: false });\n    playerContainer.addEventListener('mousemove', onTouchMove);\n    playerContainer.addEventListener('touchend', onTouchEnd);\n    playerContainer.addEventListener('mouseup', onTouchEnd);\n    playerContainer.addEventListener('mouseleave', onTouchEnd);\n\n    setSystemBrightness(getSystemBrightness());\n\n    document.addEventListener('fullscreenchange', updateBrightnessOverlay);\n    document.addEventListener('webkitfullscreenchange', updateBrightnessOverlay);\n\n    // 注入CSS样式\n    const style = document.createElement('style');\n    style.textContent = `\n        .plyr__center-tooltip {\n            position: absolute;\n            top: calc(50% - 75px);\n            left: 50%;\n            transform: translate(-50%, -50%);\n            background-color: transparent;\n            color: white;\n            padding: 10px 20px;\n            border-radius: 5px;\n            z-index: 1000;\n            font-size: 18px;\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            pointer-events: none;\n            opacity: 0;\n            transition: opacity 0.3s ease;\n            text-shadow: 0 0 5px rgba(0, 0, 0, 0.6), 0 0 10px rgba(0, 0, 0, 0.3);\n        }\n        .plyr__center-tooltip span {\n            font-weight: bold;\n            text-shadow: inherit;\n        }\n        .plyr__center-tooltip .control-value {\n            font-weight: normal;\n        }\n\n        #brightness-overlay {\n            background: black;\n            pointer-events: none;\n            opacity: 0;\n            transition: opacity 0.2s ease;\n            z-index: 2147483647 !important;\n        }\n    `;\n    document.head.appendChild(style);\n}\n\n// 根据当前方向更新按钮可见状态\nfunction updateButtonVisibility(autonext) {\n    if (!document.fullscreenElement || !autonext) return;\n\n    const isPortrait = window.innerHeight > window.innerWidth;\n    if (isPortrait) {\n        $('[data-plyr=\"rewind\"], [data-plyr=\"fast-forward\"]').forEach(btn => {\n            btn.style.display = 'none';\n        });\n    } else {\n        $('[data-plyr=\"rewind\"], [data-plyr=\"fast-forward\"]').forEach(btn => {\n            btn.style.display = 'flex';\n        });\n    }\n}\n\n// 处理全屏状态\nfunction updateFullscreen(autonext, video) {\n    if (!document.fullscreenElement) {\n        // 退出全屏时的处理\n        video.style.height = '56.25vw';\n        video.style.removeProperty('min-height');\n        $('.plyr__menu__container > div').forEach(menu => {\n            menu.style.maxHeight = '44vw';\n            menu.style.overflowY = 'auto';\n        });\n        if (autonext) {\n            $('.plyr__control--episode-prev, .plyr__control--episode-next').forEach(btn => {\n                btn.style.display = 'none';\n            });\n        }\n        $('[data-plyr=\"rewind\"], [data-plyr=\"fast-forward\"]').forEach(btn => {\n            btn.style.display = 'flex';\n        });\n        setTimeout(updatePadding, 100);\n    } else {\n        // 进入全屏时的处理\n        video.style.minHeight = '100%';\n        video.style.removeProperty('height');\n        $('.plyr__menu__container > div').forEach(menu => {\n            menu.style.maxHeight = '';\n            menu.style.overflowY = '';\n        });\n        if (autonext) {\n            $('.plyr__control--episode-prev, .plyr__control--episode-next').forEach(btn => {\n                btn.style.display = 'flex';\n            });\n            updateButtonVisibility(autonext); // 根据当前方向更新按钮\n        }\n\n        // 强制重绘\n        setTimeout(() => {\n            const videoWrapper = document.querySelector('.plyr__video-wrapper');\n            if (videoWrapper) {\n                videoWrapper.style.display = 'flex';\n                videoWrapper.style.alignItems = 'center';\n                videoWrapper.style.justifyContent = 'center';\n                video.style.maxWidth = '100%';\n                video.style.maxHeight = '100%';\n                video.style.width = 'auto';\n                video.style.height = 'auto';\n            }\n        }, 100);\n        setTimeout(updatePadding, 100);\n    }\n}\n\n// 设置全屏和按钮显示处理\nfunction fullscreenControls(autonext, video) {\n    // 添加事件监听器\n    document.addEventListener('fullscreenchange', () => updateFullscreen(autonext, video));\n    window.addEventListener('resize', () => updateButtonVisibility(autonext));\n    window.addEventListener('orientationchange', () => {\n        setTimeout(() => updateButtonVisibility(autonext), 100);\n    });\n}\n\n// 锁定屏幕方向为横屏（实时跟随设备方向）\nfunction lockLandscapeOrientation() {\n    if (screen.orientation && screen.orientation.lock) {\n        // 移除之前的监听器\n        if (lockLandscapeOrientation.currentListener) {\n            window.removeEventListener('deviceorientation', lockLandscapeOrientation.currentListener);\n        }\n\n        let lastDirection = null;\n        let hasSetInitial = false;\n        const DEAD_ZONE = 20; // 死区范围，避免轻微偏转就切换\n\n        const handleOrientation = (event) => {\n            const gamma = event.gamma;\n            const beta = event.beta; // 前后倾斜角度\n\n            // 在死区内不切换方向\n            if (Math.abs(gamma) < DEAD_ZONE) {\n                return;\n            }\n\n            let newDirection;\n\n            // 根据屏幕朝向调整方向判断\n            if (Math.abs(beta) > 90) {\n                // 屏幕朝下，需要反向判断\n                if (gamma > 0) {\n                    newDirection = 'landscape-primary'; // 屏幕朝下时，向右倾斜用右横屏\n                } else {\n                    newDirection = 'landscape-secondary'; // 屏幕朝下时，向左倾斜用左横屏\n                }\n            } else {\n                // 屏幕朝上，正常判断\n                if (gamma > 0) {\n                    newDirection = 'landscape-secondary'; // 设备向右，左横屏\n                } else {\n                    newDirection = 'landscape-primary'; // 设备向左，右横屏\n                }\n            }\n\n            // 初始设置：立即根据第一个有效的gamma值设置方向\n            if (!hasSetInitial) {\n                hasSetInitial = true;\n                lastDirection = newDirection;\n                console.log('初始设置方向:', newDirection, 'gamma:', gamma, 'beta:', beta, '屏幕朝下:', Math.abs(beta) > 90);\n                screen.orientation.lock(newDirection).catch(error => {\n                    console.warn('初始方向锁定失败:', error);\n                });\n                return;\n            }\n\n            // 后续切换：只有当方向确实改变时才锁定\n            if (newDirection !== lastDirection) {\n                lastDirection = newDirection;\n                console.log('切换横屏方向:', newDirection, 'gamma:', gamma, 'beta:', beta, '屏幕朝下:', Math.abs(beta) > 90);\n                screen.orientation.lock(newDirection).catch(error => {\n                    console.warn('横屏方向切换失败:', error);\n                });\n            }\n        };\n\n        // 开始监听\n        window.addEventListener('deviceorientation', handleOrientation);\n        lockLandscapeOrientation.currentListener = handleOrientation;\n\n        // 不设置默认方向，等待第一个设备方向事件\n        console.log('等待设备方向数据...');\n    }\n}\n\n// 锁定屏幕方向为竖屏\nfunction lockPortraitOrientation() {\n    if (screen.orientation && screen.orientation.lock) {\n        // 移除横屏的监听器（如果有）\n        if (lockLandscapeOrientation.currentListener) {\n            window.removeEventListener('deviceorientation', lockLandscapeOrientation.currentListener);\n            lockLandscapeOrientation.currentListener = null;\n        }\n\n        console.log('锁定竖屏方向');\n        // 强制锁定竖屏，忽略当前设备方向\n        screen.orientation.lock('portrait').catch(error => {\n            console.warn('竖屏锁定失败:', error);\n        });\n    }\n}\n\n// 解锁屏幕方向\nfunction unlockOrientation() {\n    if (screen.orientation && screen.orientation.unlock) {\n        screen.orientation.unlock();\n    }\n\n    // 移除设备方向监听\n    if (lockLandscapeOrientation.currentListener) {\n        window.removeEventListener('deviceorientation', lockLandscapeOrientation.currentListener);\n        lockLandscapeOrientation.currentListener = null;\n    }\n}\n\n// 检测视频方向\nfunction checkVideoOrientation(player) {\n    const video = player.media;\n    if (video.videoWidth && video.videoHeight) {\n        const aspectRatio = video.videoWidth / video.videoHeight;\n        return aspectRatio > 1; // 大于1为横屏，小于1为竖屏\n    }\n    return false;\n}\n\n// 初始化播放器方向控制\nfunction initPlayerOrientationControl(player) {\n    let isLandscapeVideo = false;\n\n    // 视频元数据加载时检测视频方向\n    player.on('loadedmetadata', () => {\n        isLandscapeVideo = checkVideoOrientation(player);\n        console.log('视频方向:', isLandscapeVideo ? '横屏' : '竖屏');\n    });\n\n    // 进入全屏时根据视频方向锁定屏幕\n    player.on('enterfullscreen', () => {\n        isLandscapeVideo = checkVideoOrientation(player);\n        console.log('进入全屏，视频方向:', isLandscapeVideo ? '横屏' : '竖屏');\n\n        // 立即锁定方向，不等待\n        if (isLandscapeVideo) {\n            lockLandscapeOrientation();\n        } else {\n            lockPortraitOrientation();\n        }\n    });\n\n    // 退出全屏时解锁方向\n    player.on('exitfullscreen', () => {\n        console.log('退出全屏，解锁方向');\n        unlockOrientation();\n    });\n}\n\n// 添加顶部集数显示（上移动画版）\nfunction addEpisodeBarToPlayer() {\n    // 添加顶部集数显示条\n    const episodeBar = document.createElement('div');\n    episodeBar.className = 'plyr__episode-bar';\n    episodeBar.style.transform = 'translateY(0)';\n    episodeBar.style.opacity = '1';\n\n    // 创建标题元素\n    const titleElement = document.createElement('div');\n    titleElement.className = 'plyr__episode-title';\n\n    // 初始化集数标题\n    const updateEpisodeTitle = () => {\n        const activeButton = document.querySelector('.jishu button.active');\n        if (activeButton) {\n            titleElement.textContent = activeButton.textContent.trim();\n        }\n    };\n\n    // 初始设置标题\n    updateEpisodeTitle();\n    episodeBar.appendChild(titleElement);\n    document.querySelector('.plyr__video-wrapper').appendChild(episodeBar);\n\n    // 同步播放器控件状态（顶部条上移，底部条下移）\n    const syncWithControls = () => {\n        const controls = player.elements.controls;\n        const controlsStyle = window.getComputedStyle(controls);\n\n        // 根据底部控制栏状态决定顶部条状态\n        if (controlsStyle.transform === 'none' || controlsStyle.opacity === '1') {\n            // 控制栏显示时：顶部条下滑进入\n            episodeBar.style.transform = 'translateY(0)';\n            episodeBar.style.opacity = '1';\n        } else {\n            // 控制栏隐藏时：顶部条上滑隐藏\n            episodeBar.style.transform = 'translateY(-100%)';\n            episodeBar.style.opacity = '0';\n        }\n    };\n\n    // 使用Plyr原生事件同步状态\n    player.on('controlsshown', () => {\n        episodeBar.style.transform = 'translateY(0)';\n        episodeBar.style.opacity = '1';\n    });\n\n    player.on('controlshidden', () => {\n        episodeBar.style.transform = 'translateY(-100%)';\n        episodeBar.style.opacity = '0';\n    });\n\n    // 监听集数切换事件\n    const observeEpisodeChange = () => {\n        const activeButtonObserver = new MutationObserver(() => {\n            updateEpisodeTitle();\n            // 切换集数时短暂显示\n            //episodeBar.style.transform = 'translateY(0)';\n            //episodeBar.style.opacity = '1';\n            //setTimeout(syncWithControls, 500);\n        });\n\n        const buttons = document.querySelectorAll('.jishu button');\n        buttons.forEach(button => {\n            activeButtonObserver.observe(button, { attributes: true });\n        });\n    };\n\n    // 全屏适配\n    player.on('enterfullscreen exitfullscreen', () => {\n        if (player.fullscreen.active) {\n            episodeBar.style.height = '60px';\n            episodeBar.querySelector('.plyr__episode-title').style.fontSize = '18px';\n        } else {\n            episodeBar.style.height = '40px';\n            episodeBar.querySelector('.plyr__episode-title').style.fontSize = '14px';\n        }\n    });\n\n    // 初始同步\n    setTimeout(() => {\n        // 绑定与Plyr相同的鼠标事件\n        const container = player.elements.container;\n\n        container.addEventListener('mousemove', () => {\n            episodeBar.style.transform = 'translateY(0)';\n            episodeBar.style.opacity = '1';\n        });\n\n        container.addEventListener('mouseleave', syncWithControls);\n\n        syncWithControls();\n        observeEpisodeChange();\n    }, 50);\n\n    // 添加样式\n    const style = document.createElement('style');\n    style.textContent = `\n        .plyr__episode-bar {\n            position: absolute;\n            top: 0;\n            left: 0;\n            right: 0;\n            height: 40px;\n            background: linear-gradient(\n              to bottom,\n              rgba(0,0,0,0.8) 0%,\n              rgba(0,0,0,0.5) 30%,\n              rgba(0,0,0,0) 100%\n            );\n            color: white;\n            display: flex;\n            align-items: center;\n            padding-left: 15px;\n            z-index: 3;\n            transform: translateY(-100%);\n            opacity: 0;\n            transition: all 0.4s ease-in-out;\n            pointer-events: none;\n        }\n        .plyr__episode-title {\n            font-size: 14px;\n            text-shadow: 0 0 5px rgba(0,0,0,0.5);\n            white-space: nowrap;\n            overflow: hidden;\n            text-overflow: ellipsis;\n            width: 75%;\n            display: block;\n        }\n        .plyr--fullscreen .plyr__episode-bar {\n            height: 60px;\n            padding-left: 20px;\n        }\n        .plyr--fullscreen .plyr__episode-title {\n            font-size: 18px;\n        }\n    `;\n    document.head.appendChild(style);\n}\n\n// 添加跳过菜单项\nfunction addSkipMenuItems(currentVideoUrl, timeManager) {\n    // 等待设置菜单加载完成\n    setTimeout(() => {\n        const settingsMenu = document.querySelector('.plyr__menu__container');\n        if (!settingsMenu) return;\n\n        // 创建跳过菜单项\n        const skipMenuItem = document.createElement('div');\n        skipMenuItem.className = 'plyr__skip-menu-item';\n        skipMenuItem.style.margin = '0 8px';\n        skipMenuItem.style.boxShadow = `\n            0 -1px 0 #ccc,\n            0 -2px 0 var(--plyr-menu-back-border-shadow-color, #fff)\n        `;\n        skipMenuItem.innerHTML = `\n            <span style=\"display: block; text-align: center; font-size: 15px; margin: 8px;\">标记片头/片尾</span>\n        `;\n        skipMenuItem.setAttribute('role', 'menuitem');\n\n        // 创建子菜单容器\n        const submenuContainer = document.createElement('div');\n        submenuContainer.className = 'plyr__skip-submenu';\n        submenuContainer.setAttribute('hidden', '');\n        submenuContainer.setAttribute('role', 'menu');\n\n        // 创建返回项\n        const backItem = document.createElement('div');\n        backItem.style.margin = '4px 0';\n        backItem.style.boxShadow = `\n            0 1px 0 var(--plyr-menu-back-border-shadow-color, #fff),\n            0 2px 0 #ccc\n        `;\n        backItem.innerHTML = `\n            <span style=\"display: block; text-align: center; height: 32px; font-size: 15px; margin: 4px 10px;\">返回上级菜单</span>\n        `;\n        backItem.setAttribute('role', 'menuitem');\n\n        // 实时获取标记时间\n        const getMarkTimes = () => ({\n            head: localStorage.getItem('head' + currentVideoUrl),\n            end: localStorage.getItem('end' + currentVideoUrl)\n        });\n\n        // 创建子菜单项\n        const submenuItems = `\n            <div style=\"display: flex; align-items: center; justify-content: space-between; padding: 4px 8px; margin: 2px 4px;\">\n                <div style=\"display: flex; align-items: center;\">\n                    <div style=\"font-size: 14px;\" data-action=\"mark-start\" role=\"menuitem\">\n                        ${getMarkTimes().head ? '已设片头' : '标记片头'}\n                    </div>\n                    <div style=\"font-size: 14px; color: #999; margin-left: 10px;\" class=\"head-time-display\">\n                        ${getMarkTimes().head ? formatTime(getMarkTimes().head) : '无'}\n                    </div>\n                </div>\n            </div>\n\n            <div style=\"display: flex; align-items: center; justify-content: space-between; padding: 4px 8px; margin: 2px 4px;\">\n                <div style=\"display: flex; align-items: center;\">\n                    <div style=\"font-size: 14px;\" data-action=\"mark-end\" role=\"menuitem\">\n                        ${getMarkTimes().end ? '已设片尾' : '标记片尾'}\n                    </div>\n                    <div style=\"font-size: 14px; color: #999; margin-left: 10px;\" class=\"end-time-display\">\n                        ${getMarkTimes().end ? formatTime(getMarkTimes().end) : '无'}\n                    </div>\n                </div>\n            </div>\n\n            <div style=\"display: flex; justify-content: center; padding: 4px 8px; margin: 2px 0 0 0;\">\n                <div style=\"font-size: 14px;\" data-action=\"clear-marks\" role=\"menuitem\">\n                    清除全部标记\n                </div>\n            </div>\n        `;\n\n        submenuContainer.appendChild(backItem);\n        submenuContainer.insertAdjacentHTML('beforeend', submenuItems);\n\n        // 添加到DOM - 插入到菜单最后面\n        settingsMenu.appendChild(skipMenuItem);\n        settingsMenu.appendChild(submenuContainer);\n\n        // 存储原始菜单项\n        const originalMenuItems = Array.from(settingsMenu.children).filter(\n            child => !child.classList.contains('plyr__skip-menu-item') &&\n                    !child.classList.contains('plyr__skip-submenu')\n        );\n\n        // 更新时间显示函数\n        function updateTimeDisplay() {\n            const { head, end } = getMarkTimes();\n            const headDisplay = submenuContainer.querySelector('.head-time-display');\n            const endDisplay = submenuContainer.querySelector('.end-time-display');\n            const markStartBtn = submenuContainer.querySelector('[data-action=\"mark-start\"]');\n            const markEndBtn = submenuContainer.querySelector('[data-action=\"mark-end\"]');\n\n            if (headDisplay) {\n                headDisplay.textContent = head ? formatTime(head) : '无';\n                headDisplay.style.color = head ? '#4CAF50' : '#999';\n                markStartBtn.textContent = head ? '已设片头' : '标记片头';\n            }\n\n            if (endDisplay) {\n                endDisplay.textContent = end ? formatTime(end) : '无';\n                endDisplay.style.color = end ? '#FF5722' : '#999';\n                markEndBtn.textContent = end ? '已设片尾' : '标记片尾';\n            }\n        }\n\n        // 添加事件监听\n        skipMenuItem.addEventListener('click', (e) => {\n            e.stopPropagation();\n            updateTimeDisplay();\n            originalMenuItems.forEach(item => item.style.display = 'none');\n            skipMenuItem.style.display = 'none';\n            submenuContainer.removeAttribute('hidden');\n        });\n\n        // 返回按钮点击事件\n        backItem.addEventListener('click', () => {\n            submenuContainer.setAttribute('hidden', '');\n            originalMenuItems.forEach(item => item.style.display = '');\n            skipMenuItem.style.display = '';\n        });\n\n        // 标记片头点击事件\n        submenuContainer.querySelector('[data-action=\"mark-start\"]').addEventListener('click', () => {\n            let headtime = getMarkTimes().head;\n            timeManager.setHeadTime(player.currentTime);\n            showTemporaryMessage(`已${headtime ? '重设' : '标记'}片头: ${formatTime(timeManager.headtime)}`);\n        });\n\n        // 标记片尾点击事件\n        submenuContainer.querySelector('[data-action=\"mark-end\"]').addEventListener('click', () => {\n            let endtime = getMarkTimes().end;\n            timeManager.setEndTime(player.duration - player.currentTime);\n            showTemporaryMessage(`已${endtime ? '重设' : '标记'}片尾: ${formatTime(timeManager.endtime)}`);\n        });\n\n        // 清除标记点击事件\n        submenuContainer.querySelector('[data-action=\"clear-marks\"]').addEventListener('click', () => {\n            timeManager.clearMarks();\n            showTemporaryMessage('已清除全部标记');\n        });\n\n        // 添加时间更新监听\n        timeManager.addListener(({ type }) => {\n            updateTimeDisplay();\n\n            // 如果是清除操作，确保UI同步更新\n            if (type === 'clear') {\n                const markStartBtn = submenuContainer.querySelector('[data-action=\"mark-start\"]');\n                const markEndBtn = submenuContainer.querySelector('[data-action=\"mark-end\"]');\n                if (markStartBtn) markStartBtn.textContent = '标记片头';\n                if (markEndBtn) markEndBtn.textContent = '标记片尾';\n            }\n        });\n\n        // 显示临时消息\n        function showTemporaryMessage(message) {\n            const messageEl = document.createElement('div');\n            messageEl.className = 'plyr__skip-message';\n            messageEl.textContent = message;\n            document.querySelector('.plyr').appendChild(messageEl);\n\n            setTimeout(() => {\n                messageEl.classList.add('fade-out');\n                setTimeout(() => messageEl.remove(), 300);\n            }, 2000);\n        }\n\n        // 添加样式\n        if (!document.querySelector('#plyrSkipMessageStyle')) {\n            const style = document.createElement('style');\n            style.id = 'plyrSkipMessageStyle';\n            style.textContent = `\n                .plyr__skip-message {\n                    position: fixed;\n                    top: 30px;\n                    left: 15px;\n                    transform: none;\n                    background-color: rgba(0, 0, 0, 0.5);\n                    color: white;\n                    padding: 10px 20px;\n                    border-radius: 4px;\n                    z-index: 1000;\n                    text-align: left;\n                    font-size: 14px;\n                    transition: opacity 0.3s ease;\n                }\n                .plyr__skip-message.fade-out {\n                    opacity: 0;\n                }\n                .plyr__skip-menu-item {\n                    cursor: pointer;\n                }\n                .plyr__skip-menu-item:hover {\n                    background-color: rgba(255,255,255,0.1);\n                }\n            `;\n            document.head.appendChild(style);\n        }\n\n        // 初始显示菜单项\n        skipMenuItem.style.display = '';\n\n        // 监听显示菜单项\n        function observeMainMenuState() {\n            const observer = new MutationObserver((mutations) => {\n                mutations.forEach((mutation) => {\n                    const homeMenu = document.querySelector('[id^=\"plyr-settings-\"][id$=\"-home\"]');\n                    const subMenu = document.querySelector('.plyr__skip-submenu');\n                    if (homeMenu && subMenu) {\n                        const homeIsHidden = homeMenu.hasAttribute('hidden');\n                        const subIsHidden = subMenu.hasAttribute('hidden');\n                        skipMenuItem.style.display = homeIsHidden || !subIsHidden ? 'none' : '';\n                    }\n                });\n            });\n\n            // 监听整个 document（因为菜单可能动态加载）\n            observer.observe(document.body, {\n                childList: true,    // 监听子元素增删\n                subtree: true,      // 监听所有后代元素\n                attributes: true,   // 监听属性变化\n                attributeFilter: ['hidden', 'id'] // 只监听 hidden 和 id 变化\n            });\n\n            // 初始检查\n            const initialHomeMenu = document.querySelector('[id^=\"plyr-settings-\"][id$=\"-home\"]');\n            const initialSubMenu = document.querySelector('.plyr__skip-submenu');\n            if (initialHomeMenu && initialSubMenu) {\n                const homeIsHidden = initialHomeMenu.hasAttribute('hidden');\n                const subIsHidden = initialSubMenu.hasAttribute('hidden');\n                skipMenuItem.style.display = homeIsHidden || !subIsHidden ? 'none' : '';\n            }\n        }\n\n        // 启动监听\n        observeMainMenuState();\n    }, 500);\n}\n\n// 格式化时间显示\nfunction formatTime(seconds) {\n    seconds = parseFloat(seconds);\n    const date = new Date(0);\n    date.setSeconds(seconds);\n    const timeString = date.toISOString().substr(11, 8);\n    return timeString.startsWith('00:') ? timeString.substr(3) : timeString;\n}\n\n// HLS播放-检测网络状况并自适应调整\nfunction getOptimalHlsConfig() {\n    const connection = navigator.connection || {};\n    const downlink = connection.downlink || 5;\n\n    if (downlink > 10) {\n        return adaptiveConfigManager.getHighSpeedConfig();\n    } else if (downlink > 5) {\n        return adaptiveConfigManager.getMediumSpeedConfig();\n    } else {\n        return adaptiveConfigManager.getLowSpeedConfig();\n    }\n}\n\n// 自适应配置管理器\nconst adaptiveConfigManager = {\n    performanceMetrics: {\n        loadTimes: [],\n        bufferingEvents: 0,\n        averageLoadTime: 0,\n        lastUpdateTime: 0\n    },\n\n    // 配置模板\n    configTemplates: {\n        highSpeed: {\n            // 缓冲区设置\n            maxBufferSize: 800 * 1024 * 1024,  // 800MB\n            maxBufferLength: 600,              // 10分钟缓冲区\n            maxMaxBufferLength: 1200,          // 20分钟最大缓冲区\n            backBufferLength: 300,             // 5分钟后缓冲区\n\n            // 预加载优化\n            preloadTime: 90,                   // 预加载90秒\n            initialLiveManifestSize: 5,\n\n            // 网络优化\n            maxLoadingDelay: 1,\n            maxSeekHole: 0.5,\n            maxFragLookUpTolerance: 0.05,\n            highBufferWatchdogPeriod: 0.5,\n            nudgeOffset: 0.02,\n            nudgeMaxRetry: 15,\n            maxStarvationDelay: 1\n        },\n        mediumSpeed: {\n            // 缓冲区设置\n            maxBufferSize: 600 * 1024 * 1024,  // 600MB\n            maxBufferLength: 450,              // 7.5分钟缓冲区\n            maxMaxBufferLength: 900,           // 15分钟最大缓冲区\n            backBufferLength: 240,             // 4分钟后缓冲区\n\n            // 预加载优化\n            preloadTime: 75,                   // 预加载75秒\n            initialLiveManifestSize: 4,\n\n            // 网络优化\n            maxLoadingDelay: 1.5,\n            maxSeekHole: 1,\n            maxFragLookUpTolerance: 0.08,\n            highBufferWatchdogPeriod: 1,\n            nudgeOffset: 0.03,\n            nudgeMaxRetry: 12,\n            maxStarvationDelay: 2\n        },\n        lowSpeed: {\n            // 缓冲区设置\n            maxBufferSize: 500 * 1024 * 1024,  // 500MB\n            maxBufferLength: 360,              // 6分钟缓冲区\n            maxMaxBufferLength: 720,           // 12分钟最大缓冲区\n            backBufferLength: 180,             // 3分钟后缓冲区\n\n            // 预加载优化\n            preloadTime: 60,                   // 预加载60秒\n            initialLiveManifestSize: 3,\n\n            // 网络优化\n            maxLoadingDelay: 2,\n            maxSeekHole: 1.5,\n            maxFragLookUpTolerance: 0.1,\n            highBufferWatchdogPeriod: 1.5,\n            nudgeOffset: 0.05,\n            nudgeMaxRetry: 15,\n            maxStarvationDelay: 3\n        }\n    },\n\n    // 根据性能指标调整配置\n    adaptConfigBasedOnPerformance() {\n        const metrics = this.performanceMetrics;\n\n        // 计算平均加载时间\n        if (metrics.loadTimes.length > 0) {\n            metrics.averageLoadTime = metrics.loadTimes.reduce((a, b) => a + b) / metrics.loadTimes.length;\n        }\n\n        // 基于性能指标选择配置\n        if (metrics.averageLoadTime < 2000 && metrics.bufferingEvents < 2) {\n            console.log('加载状况良好，使用高速配置');\n            return this.getHighSpeedConfig();\n        } else if (metrics.averageLoadTime < 5000 && metrics.bufferingEvents < 5) {\n            console.log('加载状况中等，使用平衡配置');\n            return this.getMediumSpeedConfig();\n        } else {\n            console.log('加载状况较差，使用保守配置');\n            return this.getLowSpeedConfig();\n        }\n    },\n\n    getHighSpeedConfig() {\n        return { ...this.configTemplates.highSpeed };\n    },\n\n    getMediumSpeedConfig() {\n        return { ...this.configTemplates.mediumSpeed };\n    },\n\n    getLowSpeedConfig() {\n        return { ...this.configTemplates.lowSpeed };\n    },\n\n    // 应用配置到HLS实例\n    applyConfigToHls(hlsInstance, config) {\n        Object.keys(config).forEach(key => {\n            if (hlsInstance.hasOwnProperty(key)) {\n                hlsInstance[key] = config[key];\n            }\n        });\n    },\n\n    // 动态调整配置\n    adaptHlsConfig(hlsInstance) {\n        if (this.performanceMetrics.loadTimes.length >= 3) {\n            const newConfig = this.adaptConfigBasedOnPerformance();\n            this.applyConfigToHls(hlsInstance, newConfig);\n            console.log('已根据加载性能动态调整HLS配置');\n        }\n    },\n\n    // 记录片段加载时间\n    recordFragmentLoadTime(duration) {\n        this.performanceMetrics.loadTimes.push(duration);\n\n        // 只保留最近10个记录\n        if (this.performanceMetrics.loadTimes.length > 10) {\n            this.performanceMetrics.loadTimes.shift();\n        }\n    },\n\n    // 记录缓冲事件\n    recordBufferingEvent() {\n        this.performanceMetrics.bufferingEvents++;\n    },\n\n    // 重置性能指标\n    resetMetrics() {\n        this.performanceMetrics.loadTimes = [];\n        this.performanceMetrics.bufferingEvents = 0;\n        this.performanceMetrics.averageLoadTime = 0;\n    }\n};\n\n// HLS播放\nfunction initializeHlsPlayer(source, headersOrReferer = null, video, currentTime, callback) {\n    if (currentHls) {\n        currentHls.stopLoad();\n        currentHls.detachMedia();\n        currentHls.destroy();\n    }\n\n    // 处理参数兼容性\n    let headers = null;\n    if (headersOrReferer) {\n        if (typeof headersOrReferer === 'string') {\n            headers = { 'Referer': headersOrReferer };\n        } else {\n            headers = headersOrReferer;\n        }\n    }\n\n    // 广告拦截配置\n    const adBlockConfig = {\n        enabled: true, // 设为false来禁用广告拦截\n        // 广告片段识别关键词\n        adKeywords: ['/ad/', 'ad_', '_ad', 'commercial', 'midroll', 'preroll', 'postroll'],\n        // 处理方式：'skip'=跳过，'empty'=返回空数据\n        strategy: 'skip'\n    };\n\n    // 获取初始配置\n    const initialConfig = getOptimalHlsConfig();\n\n    currentHls = new Hls({\n        ...initialConfig,\n        // 通用优化设置\n        enableWorker: true,\n        enableSoftwareAES: true,\n        stretchShortVideoTrack: true,\n        forceKeyFrameOnDiscontinuity: true,\n        optimizeAudioOnly: false,\n        lowLatencyMode: false,\n\n        // 使用 xhrSetup\n        xhrSetup: function(xhr, url) {\n            const startTime = performance.now();\n            const connection = navigator.connection || {};\n            const downlink = connection.downlink || 5;\n            const timeout = downlink > 10 ? 90000 : downlink > 5 ? 60000 : 30000;\n\n            // 设置超时\n            xhr.timeout = timeout;\n\n            // 设置响应类型\n            xhr.responseType = 'arraybuffer';\n\n            // 检查是否为广告片段\n            if (adBlockConfig.enabled && isAdSegment(url)) {\n                return handleAdRequest(xhr, url);\n            }\n\n            // 添加自定义 headers\n            if (headers) {\n                Object.keys(headers).forEach(key => {\n                    xhr.setRequestHeader(key, headers[key]);\n                });\n            }\n\n            // 监听加载完成事件\n            const originalSend = xhr.send;\n            xhr.send = function(body) {\n                this.addEventListener('loadend', function() {\n                    if (this.status >= 200 && this.status < 300) {\n                        const loadTime = performance.now() - startTime;\n                        adaptiveConfigManager.recordFragmentLoadTime(loadTime);\n\n                        // 如果加载时间过长，动态调整配置\n                        if (loadTime > 5000) {\n                            adaptiveConfigManager.adaptHlsConfig(currentHls);\n                        }\n                    }\n                });\n                originalSend.call(this, body);\n            };\n\n            // 监听超时事件\n            xhr.addEventListener('timeout', function() {\n                console.warn('XHR request timed out after', timeout, 'ms');\n            });\n\n            // 监听错误事件\n            xhr.addEventListener('error', function() {\n                console.error('XHR request failed');\n            });\n        }\n    });\n\n    // 广告检测函数\n    function isAdSegment(url) {\n        if (!adBlockConfig.enabled) return false;\n\n        const lowerUrl = url.toLowerCase();\n\n        // 检查URL是否包含广告关键词\n        for (const keyword of adBlockConfig.adKeywords) {\n            if (lowerUrl.includes(keyword.toLowerCase())) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    // 处理广告请求\n    function handleAdRequest(xhr, url) {\n        console.log('拦截广告片段:', url.substring(0, 100));\n\n        switch (adBlockConfig.strategy) {\n            case 'skip':\n                // 返回空数据，让HLS跳过这个片段\n                return createMockResponse(xhr);\n\n            case 'empty':\n                // 返回一个小型的合法视频片段（避免解码错误）\n                return createEmptySegmentResponse(xhr);\n\n            default:\n                return createMockResponse(xhr);\n        }\n    }\n\n    // 创建模拟响应（跳过广告）\n    function createMockResponse(xhr) {\n        // 设置XHR状态为已完成\n        Object.defineProperties(xhr, {\n            'readyState': { value: 4, writable: false },\n            'status': { value: 200, writable: false },\n            'response': { value: new ArrayBuffer(0), writable: false },\n            'responseText': { value: '', writable: false }\n        });\n\n        // 异步触发事件\n        setTimeout(() => {\n            // 触发readyStateChange\n            if (xhr.onreadystatechange) {\n                xhr.onreadystatechange.call(xhr);\n            }\n\n            // 触发load事件\n            if (xhr.onload) {\n                xhr.onload.call(xhr);\n            }\n\n            // 触发原生事件\n            const events = ['readystatechange', 'load', 'loadend'];\n            events.forEach(eventName => {\n                try {\n                    xhr.dispatchEvent(new Event(eventName));\n                } catch (e) {\n                    // 忽略事件分发错误\n                }\n            });\n        }, 0);\n\n        // 阻止实际网络请求\n        xhr.send = function() {\n            // 什么都不做，已经模拟了响应\n        };\n\n        return true;\n    }\n\n    // 创建空片段响应（更稳定的方案）\n    function createEmptySegmentResponse(xhr) {\n        // 创建一个非常小的视频片段（避免解码器错误）\n        // 这是一个H.264 NAL unit的简单示例（空片段）\n        const emptySegment = new Uint8Array([\n            0x00, 0x00, 0x00, 0x01, // NALU start code\n            0x09, 0xF0,             // NALU type: Access Unit Delimiter\n            0x00, 0x00, 0x00, 0x01, // NALU start code\n            0x06, 0x05              // NALU type: SEI\n        ]);\n\n        Object.defineProperties(xhr, {\n            'readyState': { value: 4, writable: false },\n            'status': { value: 200, writable: false },\n            'response': { value: emptySegment.buffer, writable: false }\n        });\n\n        setTimeout(() => {\n            if (xhr.onload) xhr.onload.call(xhr);\n            try {\n                xhr.dispatchEvent(new Event('load'));\n            } catch (e) {\n                // 忽略错误\n            }\n        }, 10);\n\n        xhr.send = function() {\n            // 阻止实际发送\n        };\n\n        return true;\n    }\n\n    // 监听HLS事件来优化广告检测\n    currentHls.on(Hls.Events.FRAG_LOADING, (event, data) => {\n        const frag = data.frag;\n        // 可以在片段加载时进行额外检测\n        if (frag.duration < 10 && frag.duration > 0) {\n            // 短片段可能是广告，但这里只是记录不处理\n            frag._isPotentialAd = true;\n        }\n    });\n\n    currentHls.loadSource(source);\n    currentHls.attachMedia(video);\n\n    // 监听缓冲事件\n    currentHls.on(Hls.Events.ERROR, (event, data) => {\n        if (data.details === Hls.ErrorDetails.BUFFER_STALLED_ERROR) {\n            adaptiveConfigManager.recordBufferingEvent();\n\n            // 如果有多次缓冲事件，立即调整配置\n            if (adaptiveConfigManager.performanceMetrics.bufferingEvents >= 3) {\n                adaptiveConfigManager.adaptHlsConfig(currentHls);\n            }\n        }\n\n        // 处理广告拦截可能引起的错误\n        if (data.details === Hls.ErrorDetails.FRAG_LOAD_ERROR ||\n            data.details === Hls.ErrorDetails.FRAG_LOAD_TIMEOUT) {\n            if (data.frag && isAdSegment(data.frag.url)) {\n                console.log('广告片段加载错误已忽略');\n                data.recovered = true;\n            }\n        }\n    });\n\n    currentHls.on(Hls.Events.MANIFEST_PARSED, () => {\n        if (currentTime > 0) {\n            video.currentTime = parseFloat(currentTime);\n            $(\".video-container\")[0].style.background = '#000';\n        }\n        if (callback) callback();\n    });\n\n    // 定期检查性能并调整配置（每30秒）\n    const performanceCheckInterval = setInterval(() => {\n        if (adaptiveConfigManager.performanceMetrics.loadTimes.length >= 5) {\n            adaptiveConfigManager.adaptHlsConfig(currentHls);\n        }\n    }, 30000);\n\n    // 清理interval当HLS实例被销毁时\n    currentHls.on(Hls.Events.DESTROYING, () => {\n        clearInterval(performanceCheckInterval);\n    });\n}\n\n// 可选：提供一个函数来启用/禁用广告拦截\nfunction setAdBlockEnabled(enabled) {\n    if (window.initializeHlsPlayer && window.initializeHlsPlayer.adBlockConfig) {\n        window.initializeHlsPlayer.adBlockConfig.enabled = enabled;\n    }\n}\n\n// 可选：添加广告关键词\nfunction addAdKeyword(keyword) {\n    if (window.initializeHlsPlayer && window.initializeHlsPlayer.adBlockConfig) {\n        if (!window.initializeHlsPlayer.adBlockConfig.adKeywords.includes(keyword)) {\n            window.initializeHlsPlayer.adBlockConfig.adKeywords.push(keyword);\n        }\n    }\n}\n\n// 普通播放\nfunction initializeRegularPlayer(source, headersOrReferer = null, video, currentTime, callback) {\n    video.src = '';\n    video.load();\n    video.preload = \"auto\";\n\n    // 处理参数兼容性\n    let headers = null;\n    if (headersOrReferer) {\n        if (typeof headersOrReferer === 'string') {\n            headers = { 'Referer': headersOrReferer };\n        } else {\n            headers = headersOrReferer;\n        }\n    }\n\n    if (headers) {\n        const xhr = new XMLHttpRequest();\n        xhr.open('HEAD', source, true);\n\n        Object.keys(headers).forEach(key => {\n            xhr.setRequestHeader(key, headers[key]);\n        });\n\n        xhr.withCredentials = true;\n        xhr.timeout = 10000;\n\n        xhr.onload = function() {\n            const acceptRanges = xhr.getResponseHeader('Accept-Ranges');\n            const contentLength = xhr.getResponseHeader('Content-Length');\n\n            console.log('服务器响应:', {\n                acceptRanges: acceptRanges,\n                contentLength: contentLength,\n                status: xhr.status\n            });\n\n            if (acceptRanges === 'bytes' && contentLength) {\n                console.log('服务器支持range请求，使用MediaSource播放');\n                setVideoSourceWithHeaders();\n            } else {\n                console.log('服务器不支持range请求，直接加载');\n                directLoadVideo();\n            }\n        };\n\n        xhr.onerror = function() {\n            console.error('HEAD请求失败');\n            directLoadVideo();\n        };\n\n        xhr.ontimeout = function() {\n            console.warn('HEAD请求超时');\n            directLoadVideo();\n        };\n\n        try {\n            xhr.send();\n        } catch (error) {\n            console.error('发送HEAD请求异常:', error);\n            directLoadVideo();\n        }\n    } else {\n        directLoadVideo();\n    }\n\n    function setVideoSourceWithHeaders() {\n        if ('MediaSource' in window && MediaSource.isTypeSupported('video/mp4')) {\n            console.log('使用MediaSource API');\n            const mediaSource = new MediaSource();\n            video.src = URL.createObjectURL(mediaSource);\n\n            mediaSource.addEventListener('sourceopen', function() {\n                const mimeCodec = 'video/mp4; codecs=\"avc1.42E01E,mp4a.40.2\"';\n                const sourceBuffer = mediaSource.addSourceBuffer(mimeCodec);\n\n                const xhr = new XMLHttpRequest();\n                xhr.open('GET', source, true);\n                xhr.responseType = 'arraybuffer';\n\n                Object.keys(headers).forEach(key => {\n                    xhr.setRequestHeader(key, headers[key]);\n                });\n\n                xhr.onload = function() {\n                    if (xhr.status >= 200 && xhr.status < 300) {\n                        console.log('视频数据加载完成，大小:', (xhr.response.byteLength / 1024 / 1024).toFixed(2), 'MB');\n                        sourceBuffer.appendBuffer(xhr.response);\n                        sourceBuffer.addEventListener('updateend', function() {\n                            if (!sourceBuffer.updating) {\n                                mediaSource.endOfStream();\n                                handleVideoReady();\n                            }\n                        });\n                    } else {\n                        console.error('视频数据请求失败，状态码:', xhr.status);\n                        directLoadVideo();\n                    }\n                };\n\n                xhr.onerror = function() {\n                    console.error('视频数据请求网络错误');\n                    directLoadVideo();\n                };\n\n                xhr.send();\n            });\n        } else {\n            console.log('浏览器不支持MediaSource，直接设置src');\n            video.src = source;\n            video.addEventListener('loadedmetadata', function() {\n                handleVideoReady();\n            }, { once: true });\n            video.load();\n        }\n    }\n\n    function directLoadVideo() {\n        video.src = source;\n        video.load();\n        handleVideoReady();\n    }\n\n    function handleVideoReady() {\n        const onLoaded = () => {\n            if (currentTime > 0) {\n                video.currentTime = parseFloat(currentTime);\n                $(\".video-container\")[0].style.background = '#000';\n            }\n            if (callback) callback();\n        };\n\n        if (video.readyState >= 1) {\n            setTimeout(onLoaded, 0);\n        } else {\n            video.addEventListener('loadedmetadata', onLoaded, { once: true });\n        }\n    }\n}\n\n// 上一集函数\nfunction switchToPrevEpisode(currentVideoUrl, autonext) {\n    if (isSwitching || !autonext) return;\n\n    isSwitching = true;\n    localStorage.removeItem(currentVideoUrl);\n    const currentButton = $('.jishu button.active')[0];\n    const prevButton = currentButton?.previousElementSibling;\n\n    if (prevButton && prevButton.innerText !== \"\" && !localStorage.getItem(currentVideoUrl)) {\n        prevButton.click();\n    } else {\n        weblog('已经是第一集了！');\n    }\n}\n\n// 下一集函数\nfunction switchToNextEpisode(currentVideoUrl, autonext) {\n    if (isSwitching || !autonext) return;\n\n    isSwitching = true;\n    localStorage.removeItem(currentVideoUrl);\n    const currentButton = $('.jishu button.active')[0];\n    const nextButton = currentButton?.nextElementSibling;\n\n    if (nextButton && nextButton.innerText !== \"\") {\n        nextButton.click();\n    } else {\n        weblog('没有下一集了！');\n    }\n}\n\n// 切换视频质量的函数\nasync function changeVideoQuality(quality, sources) {\n    const video = $('video')[0];\n    const selectedSource = sources.find(source => source.size === quality.toString());\n    const currentTime = video.currentTime;\n    const wasPlaying = !video.paused;\n\n    if (wasPlaying) {\n        $(\".video-container\")[0].style.background = '#000';\n    }\n    $(\"body>p\")[0].innerHTML = `\n      <div style=\"display: flex; align-items: center; justify-content: space-between; width: 100%;\">\n        <a href=\"legadovideo://${encodeURIComponent(selectedSource.src)}\">\n          ${selectedSource.src}\n        </a>\n        <button\n          onclick=\"navigator.clipboard.writeText('${selectedSource.src.replace(/'/g, \"\\\\'\")}')\n            .then(() => weblog('链接已复制到剪贴板'))\n            .catch(() => weblog('复制链接失败'))\"\n        >\n          复制\n        </button>\n      </div>\n    `;\n\n    if (selectedSource) {\n        if (Hls.isSupported() && /m3u8|hls/.test(selectedSource.src)) {\n            initializeHlsPlayer(selectedSource.src, selectedSource.headersOrReferer, video, currentTime, () => {\n                if (wasPlaying) {\n                    video.play();\n                }\n            });\n        } else {\n            initializeRegularPlayer(selectedSource.src, selectedSource.headersOrReferer, video, currentTime, () => {\n                if (wasPlaying) {\n                    video.play();\n                }\n            });\n        }\n    }\n}\n\n// 页面信息高度调整\nfunction updatePadding() {\n    var videoheight = $(\"video\")[0].offsetHeight;\n    var h3height = $(\"h3\")[0].offsetHeight;\n    var selectedButton = $('#selected-jiekou > button')[0];\n    $(\"img\")[0].style.top = `calc(16px + ${videoheight}px + ${h3height}px)`;\n    $(\".all-info\")[0].style.paddingTop = `calc(20px + ${videoheight}px + ${h3height}px)`;\n    if ($('#selected-jiekou')[0] && $('#jiekou-list')[0]) {\n        $('#selected-jiekou')[0].style.top = `calc(16px + ${videoheight}px + ${h3height}px)`;\n        $('#jiekou-list')[0].style.top = `calc(15.9px + ${videoheight}px + ${h3height}px + ${selectedButton.offsetHeight}px)`;\n        $('#jiekou-list')[0].style.width = `${selectedButton.offsetWidth - 1.9}px`;\n    }\n}\nwindow.addEventListener('resize', updatePadding);\n\n// SVG图标JS动态注入\ndocument.write(`\n<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:none\">\n  <symbol id=\"plyr-next-episode\" viewBox=\"0 0 18 18\">\n    <path d=\"M4 1v16l10-8z\" stroke-width=\"0.5\"/>\n    <rect x=\"14\" y=\"1\" width=\"4\" height=\"16\" rx=\"1\" stroke-width=\"0.5\"/>\n  </symbol>\n  <symbol id=\"plyr-prev-episode\" viewBox=\"0 0 18 18\">\n    <path d=\"M14 1v16L4 9z\" stroke-width=\"0.5\"/>\n    <rect x=\"0\" y=\"1\" width=\"4\" height=\"16\" rx=\"1\" stroke-width=\"0.5\"/>\n  </symbol>\n</svg>\n`);\n\ndocument.write(`\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" style=\"display: none;\">\n  <symbol id=\"plyr-airplay\" viewBox=\"0 0 18 18\">\n    <path d=\"M16 1H2a1 1 0 00-1 1v10a1 1 0 001 1h3v-2H3V3h12v8h-2v2h3a1 1 0 001-1V2a1 1 0 00-1-1z\"/>\n    <path d=\"M4 17h10l-5-6z\"/>\n  </symbol>\n  <symbol id=\"plyr-captions-off\" viewBox=\"0 0 18 18\">\n    <path d=\"M1 1c-.6 0-1 .4-1 1v11c0 .6.4 1 1 1h4.6l2.7 2.7c.2.2.4.3.7.3.3 0 .5-.1.7-.3l2.7-2.7H17c.6 0 1-.4 1-1V2c0-.6-.4-1-1-1H1zm4.52 10.15c1.99 0 3.01-1.32 3.28-2.41l-1.29-.39c-.19.66-.78 1.45-1.99 1.45-1.14 0-2.2-.83-2.2-2.34 0-1.61 1.12-2.37 2.18-2.37 1.23 0 1.78.75 1.95 1.43l1.3-.41C8.47 4.96 7.46 3.76 5.5 3.76c-1.9 0-3.61 1.44-3.61 3.7 0 2.26 1.65 3.69 3.63 3.69zm7.57 0c1.99 0 3.01-1.32 3.28-2.41l-1.29-.39c-.19.66-.78 1.45-1.99 1.45-1.14 0-2.2-.83-2.2-2.34 0-1.61 1.12-2.37 2.18-2.37 1.23 0 1.78.75 1.95 1.43l1.3-.41c-.28-1.15-1.29-2.35-3.25-2.35-1.9 0-3.61 1.44-3.61 3.7 0 2.26 1.65 3.69 3.63 3.69z\" fill-rule=\"evenodd\" fill-opacity=\".5\"/>\n  </symbol>\n  <symbol id=\"plyr-captions-on\" viewBox=\"0 0 18 18\">\n    <path d=\"M1 1c-.6 0-1 .4-1 1v11c0 .6.4 1 1 1h4.6l2.7 2.7c.2.2.4.3.7.3.3 0 .5-.1.7-.3l2.7-2.7H17c.6 0 1-.4 1-1V2c0-.6-.4-1-1-1H1zm4.52 10.15c1.99 0 3.01-1.32 3.28-2.41l-1.29-.39c-.19.66-.78 1.45-1.99 1.45-1.14 0-2.2-.83-2.2-2.34 0-1.61 1.12-2.37 2.18-2.37 1.23 0 1.78.75 1.95 1.43l1.3-.41C8.47 4.96 7.46 3.76 5.5 3.76c-1.9 0-3.61 1.44-3.61 3.7 0 2.26 1.65 3.69 3.63 3.69zm7.57 0c1.99 0 3.01-1.32 3.28-2.41l-1.29-.39c-.19.66-.78 1.45-1.99 1.45-1.14 0-2.2-.83-2.2-2.34 0-1.61 1.12-2.37 2.18-2.37 1.23 0 1.78.75 1.95 1.43l1.3-.41c-.28-1.15-1.29-2.35-3.25-2.35-1.9 0-3.61 1.44-3.61 3.7 0 2.26 1.65 3.69 3.63 3.69z\" fill-rule=\"evenodd\"/>\n  </symbol>\n  <symbol id=\"plyr-download\" viewBox=\"0 0 18 18\">\n    <path d=\"M9 13c.3 0 .5-.1.7-.3L15.4 7 14 5.6l-4 4V1H8v8.6l-4-4L2.6 7l5.7 5.7c.2.2.4.3.7.3zm-7 2h14v2H2z\"/>\n  </symbol>\n  <symbol id=\"plyr-enter-fullscreen\" viewBox=\"0 0 18 18\">\n    <path d=\"M10 3h3.6l-4 4L11 8.4l4-4V8h2V1h-7zM7 9.6l-4 4V10H1v7h7v-2H4.4l4-4z\"/>\n  </symbol>\n  <symbol id=\"plyr-exit-fullscreen\" viewBox=\"0 0 18 18\">\n    <path d=\"M1 12h3.6l-4 4L2 17.4l4-4V17h2v-7H1zM16 .6l-4 4V1h-2v7h7V6h-3.6l4-4z\"/>\n  </symbol>\n  <symbol id=\"plyr-fast-forward\" viewBox=\"0 0 18 18\">\n    <path d=\"M7.875 7.171L0 1v16l7.875-6.171V17L18 9 7.875 1z\"/>\n  </symbol>\n  <symbol id=\"plyr-logo-vimeo\" viewBox=\"0 0 18 18\">\n    <path d=\"M17 5.3c-.1 1.6-1.2 3.7-3.3 6.4-2.2 2.8-4 4.2-5.5 4.2-.9 0-1.7-.9-2.4-2.6C5 10.9 4.4 6 3 6c-.1 0-.5.3-1.2.8l-.8-1c.8-.7 3.5-3.4 4.7-3.5 1.2-.1 2 .7 2.3 2.5.3 2 .8 6.1 1.8 6.1.9 0 2.5-3.4 2.6-4 .1-.9-.3-1.9-2.3-1.1.8-2.6 2.3-3.8 4.5-3.8 1.7.1 2.5 1.2 2.4 3.3z\"/>\n  </symbol>\n  <symbol id=\"plyr-logo-youtube\" viewBox=\"0 0 18 18\">\n    <path d=\"M16.8 5.8c-.2-1.3-.8-2.2-2.2-2.4C12.4 3 9 3 9 3s-3.4 0-5.6.4C2 3.6 1.3 4.5 1.2 5.8 1 7.1 1 9 1 9s0 1.9.2 3.2c.2 1.3.8 2.2 2.2 2.4C5.6 15 9 15 9 15s3.4 0 5.6-.4c1.4-.3 2-1.1 2.2-2.4.2-1.3.2-3.2.2-3.2s0-1.9-.2-3.2zM7 12V6l5 3-5 3z\"/>\n  </symbol>\n  <symbol id=\"plyr-muted\" viewBox=\"0 0 18 18\">\n    <path d=\"M12.4 12.5l2.1-2.1 2.1 2.1 1.4-1.4L15.9 9 18 6.9l-1.4-1.4-2.1 2.1-2.1-2.1L11 6.9 13.1 9 11 11.1zM3.786 6.008H.714C.286 6.008 0 6.31 0 6.76v4.512c0 .452.286.752.714.752h3.072l4.071 3.858c.5.3 1.143 0 1.143-.602V2.752c0-.601-.643-.977-1.143-.601L3.786 6.008z\"/>\n  </symbol>\n  <symbol id=\"plyr-pause\" viewBox=\"0 0 18 18\">\n    <path d=\"M6 1H3c-.6 0-1 .4-1 1v14c0 .6.4 1 1 1h3c.6 0 1-.4 1-1V2c0-.6-.4-1-1-1zm6 0c-.6 0-1 .4-1 1v14c0 .6.4 1 1 1h3c.6 0 1-.4 1-1V2c0-.6-.4-1-1-1h-3z\"/>\n  </symbol>\n  <symbol id=\"plyr-pip\" viewBox=\"0 0 18 18\">\n    <path d=\"M13.293 3.293L7.022 9.564l1.414 1.414 6.271-6.271L17 7V1h-6z\"/>\n    <path d=\"M13 15H3V5h5V3H2a1 1 0 00-1 1v12a1 1 0 001 1h12a1 1 0 001-1v-6h-2v5z\"/>\n  </symbol>\n  <symbol id=\"plyr-play\" viewBox=\"0 0 18 18\">\n    <path d=\"M15.562 8.1L3.87.225c-.818-.562-1.87 0-1.87.9v15.75c0 .9 1.052 1.462 1.87.9L15.563 9.9c.584-.45.584-1.35 0-1.8z\"/>\n  </symbol>\n  <symbol id=\"plyr-restart\" viewBox=\"0 0 18 18\">\n    <path d=\"M9.7 1.2l.7 6.4 2.1-2.1c1.9 1.9 1.9 5.1 0 7-.9 1-2.2 1.5-3.5 1.5-1.3 0-2.6-.5-3.5-1.5-1.9-1.9-1.9-5.1 0-7 .6-.6 1.4-1.1 2.3-1.3l-.6-1.9C6 2.6 4.9 3.2 4 4.1 1.3 6.8 1.3 11.2 4 14c1.3 1.3 3.1 2 4.9 2 1.9 0 3.6-.7 4.9-2 2.7-2.7 2.7-7.1 0-9.9L16 1.9l-6.3-.7z\"/>\n  </symbol>\n  <symbol id=\"plyr-rewind\" viewBox=\"0 0 18 18\">\n    <path d=\"M10.125 1L0 9l10.125 8v-6.171L18 17V1l-7.875 6.171z\"/>\n  </symbol>\n  <symbol id=\"plyr-settings\" viewBox=\"0 0 18 18\">\n    <path d=\"M16.135 7.784a2 2 0 01-1.23-2.969c.322-.536.225-.998-.094-1.316l-.31-.31c-.318-.318-.78-.415-1.316-.094a2 2 0 01-2.969-1.23C10.065 1.258 9.669 1 9.219 1h-.438c-.45 0-.845.258-.997.865a2 2 0 01-2.969 1.23c-.536-.322-.999-.225-1.317.093l-.31.31c-.318.318-.415.781-.093 1.317a2 2 0 01-1.23 2.969C1.26 7.935 1 8.33 1 8.781v.438c0 .45.258.845.865.997a2 2 0 011.23 2.969c-.322.536-.225.998.094 1.316l.31.31c.319.319.782.415 1.316.094a2 2 0 012.969 1.23c.151.607.547.865.997.865h.438c.45 0 .845-.258.997-.865a2 2 0 012.969-1.23c.535.321.997.225 1.316-.094l.31-.31c.318-.318.415-.781.094-1.316a2 2 0 011.23-2.969c.607-.151.865-.547.865-.997v-.438c0-.451-.26-.846-.865-.997zM9 12a3 3 0 110-6 3 3 0 010 6z\"/>\n  </symbol>\n  <symbol id=\"plyr-volume\" viewBox=\"0 0 18 18\">\n    <path d=\"M15.6 3.3c-.4-.4-1-.4-1.4 0-.4.4-.4 1 0 1.4C15.4 5.9 16 7.4 16 9c0 1.6-.6 3.1-1.8 4.3-.4.4-.4 1 0 1.4.2.2.5.3.7.3.3 0 .5-.1.7-.3C17.1 13.2 18 11.2 18 9s-.9-4.2-2.4-5.7z\"/>\n    <path d=\"M11.282 5.282a.909.909 0 000 1.316c.735.735.995 1.458.995 2.402 0 .936-.425 1.917-.995 2.487a.909.909 0 000 1.316c.145.145.636.262 1.018.156a.725.725 0 00.298-.156C13.773 11.733 14.13 10.16 14.13 9c0-.17-.002-.34-.011-.51-.053-.992-.319-2.005-1.522-3.208a.909.909 0 00-1.316 0zm-7.496.726H.714C.286 6.008 0 6.31 0 6.76v4.512c0 .452.286.752.714.752h3.072l4.071 3.858c.5.3 1.143 0 1.143-.602V2.752c0-.601-.643-.977-1.143-.601L3.786 6.008z\"/>\n  </symbol>\n</svg>\n`);\n\n// localStorage数据\nconst allStorage = {};\nfor (let i = 0; i < localStorage.length; i++) {\n    const key = localStorage.key(i);\n    try {\n        allStorage[key] = JSON.parse(localStorage.getItem(key));\n    } catch (e) {\n        allStorage[key] = localStorage.getItem(key);\n    }\n}\n//weblog(JSON.stringify(allStorage), 'localStorage 数据：', true);\n\n/*==================js 库=================*/\n\n\n\n</script>\n</body>\n</html>\n<js>\nresult\n.replace(/：\\s*/g,'：')\n.replace(/\\{\\{.*播放源\\)/g,'')\n.replace(/<p>(?!.*集数)(.*：)<\\/p>/gm, '<p style=\"display:none;\">$1</p>');\n</js>",
    "ruleImage": "img@src",
    "ruleLink": "@href||a.0@href",
    "ruleNextPage": "page",
    "ruleTitle": "div.home-rows-videos-title@text||div.title@text",
    "singleUrl": false,
    "sortUrl": "裏番::/search?genre=裏番&page={{page}}\n搜索::https://hanime1.me/search?query={{(source.getVariable()==''||source.getVariable()==null)?'丝袜':source.getVariable()}}&page={{page}}\n泡麵番::/search?genre=泡麵番&page={{page}}\nMotion Anime::/search?genre=Motion%20Anime&page={{page}}\n3D::/search?genre=3DCG&page={{page}}\n2.5D::/search?genre=2.5D&page={{page}}\n2D::/search?genre=2D動畫&page={{page}}\nAI生成::/search?genre=AI生成&page={{page}}\nMMD::/search?genre=MMD&page={{page}}\nCosplay::/search?genre=Cosplay&page={{page}}",
    "sourceComment": "版本：0.0.1",
    "sourceGroup": "版本",
    "sourceIcon": "https://vdownload.hembed.com/image/icon/tab_logo.png?secure=EJYLwnrDlidVi_wFp3DaGw==,4867726124",
    "sourceName": "8.9（需要梯子）",
    "sourceUrl": "https://hanime1.me/",
    "style": "* {\n    z-index: 0;\n    margin: 0;\n    padding: 0;\n}\n\nbody {\n    margin: auto;\n    background: #bbb;\n    width: 100%;\n}\n\nbody::before {\n    content: '';\n    position: fixed;\n    top: calc(56.25vw + 15px);\n    left: 0;\n    width: 100%;\n    height: calc(100% - (56.25vw + 15px));\n    background-image: var(--bg-image);\n    background-size: cover;\n    background-position: center;\n    opacity: var(--bg-opacity1);\n    z-index: -1;\n    pointer-events: none;\n}\n\nbody>p:first-of-type {\n    width: 100%;\n    position: fixed;\n    top: 0px;\n    text-indent: 0px;\n    height: 16px;\n    font-size: 0.7rem;\n    border-radius: 0px 0px 0px 0px;\n    background: #000;\n    z-index: 200;\n    display: flex;\n    align-items: center;\n}\n\nbody>p:first-of-type a {\n    color: #888;\n    text-decoration: none;\n    white-space: nowrap;\n    overflow-x: auto;\n    overflow-y: hidden;\n    display: block;\n    flex: 1;\n    min-width: 0;\n}\n\nbody>p:first-of-type button {\n    width: 30px;\n    height: 16px;\n    font-size: 0.6rem;\n    white-space: nowrap;\n    background: #333;\n    border: 0;\n    color: #888;\n    cursor: pointer;\n    flex-shrink: 0;\n    position: relative;\n    z-index: 201;\n}\n\nvideo {\n    visibility: hidden;\n}\n\n.video-container {\n    position: fixed;\n    top: 15px;\n    width: 100%;\n    height: 56.25vw;\n    z-index: 200;\n}\n\n#player {\n    position: relative;\n    width: 100%;\n}\n\n:root {\n    color-scheme: only light;\n    --plyr-color-main: #00aaff;/* 播放器主要颜色 */\n    --plyr-control-color: #fff;/* 播放器控件图标颜色 */\n    --plyr-control-background: transparent;/* 播放器控件背景颜色 */\n    --plyr-video-background: transparent;/* 视频背景颜色 */\n    --plyr-range-fill-background: #0099ee;/* 进度条已填充部分的颜色 */\n    --plyr-range-thumb-background: #fff;/* 进度条滑块的颜色 */\n}\n\n.plyr {\n    height: 100% !important;\n    width: 100% !important;\n    object-fit: cover;\n}\n\n.plyr__video-wrapper * {\n    touch-action: none !important;\n}\n\n.plyr__video-wrapper video {\n    touch-action: none !important;\n}\n\n.plyr__controls {\n    touch-action: none !important;\n}\n\n.plyr__control--overlaid {\n    background: transparent;\n    border: 0;\n    border-radius: 100%;\n    color: #fff;\n    left: calc(50% - 25px);\n    top: calc(50% - 45px);\n    transform: none;\n    width: 60px;\n    height: 48px;\n    padding: 0;\n    z-index: 2;\n}\n\n.plyr__control--overlaid svg {\n    width: 50px;\n    height: 50px;\n    left: calc(50% - 25px);\n    top: calc(50% - 10px);\n    transform: none;\n    fill: #fff;/* 大播放器控件图标颜色 */\n    filter: \n        drop-shadow(0 0 20px rgba(0, 0, 0, 0.3))\n        drop-shadow(0 0 30px rgba(0, 0, 0, 0.1));\n}\n\n.plyr__control--overlaid.hidden {\n    display: none !important;\n    opacity: 0 !important;\n    pointer-events: none !important;\n}\n\n.plyr--video .plyr__control.plyr__tab-focus,.plyr--video .plyr__control:hover,.plyr--video .plyr__control[aria-expanded=true] {\n    background: transparent;/* 播放器控件悬停/点击背景颜色 */\n    color: #00aaff;/* 播放器控件悬停/点击图标颜色 */\n}\n\n.plyr__controls .plyr__controls__item {\n    margin-left: auto;\n    margin: calc(var(--plyr-control-spacing,10px)/4);\n}\n\n.plyr__time--duration {\n    display: inline-block !important;\n}\n\n.plyr__time+.plyr__time:before {\n    margin-right: 8px !important;\n}\n\n@media (max-width: 640px) {\n    .plyr__captions {\n        margin-bottom:-8px\n    }\n\n    .plyr__progress__container {\n        margin-right: 5px\n    }\n\n    .plyr__time {\n        position: absolute;\n        bottom: 29px;\n    }\n\n    .plyr__time--current {\n        left: 106px\n    }\n\n    .plyr__time+.plyr__time:before {\n        content: \"\"!important\n    }\n\n    .plyr__time--duration {\n        right: 110px;\n    }\n\n    .plyr__volume {\n        width: auto;\n        max-width: 32px!important;\n        min-width: 32px!important\n    }\n\n    input[id^=plyr-volume-] {\n        display: none!important;\n    }\n\n    .plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--pip-supported [data-plyr=pip] {\n        display: none!important;\n    }\n}\n\ndetails {\n    width: 100%;\n    height: auto;\n    margin: auto;\n}\n\ndetails>img {\n    position: fixed;\n    width: 100%;\n    max-height: 90vw;\n    object-fit: contain;\n    background: #000;\n    border-bottom: 0.5px solid #333;\n    top: calc(56.25vw + 16px + 1.5em);\n    z-index: 50;\n}\n\ndetails[open]>summary {\n    background: #bbb;/* 标题背景颜色 */\n}\n\nsummary {\n    position: fixed;\n    background: rgba(221, 221, 221, var(--bg-opacity2));/* 标题背景颜色和透明度 */\n    backdrop-filter: blur(5px);\n    -webkit-backdrop-filter: blur(5px);\n    color: #111;/* 标题文字颜色 */\n    box-shadow: 0 0.5px 3px #555;/* 标题阴影颜色 */\n    list-style: none;\n    width: 100%;\n    padding-top: calc(56.25vw + 16px);\n    outline: none;\n    line-height: 1.5;\n    text-align: left;\n    word-wrap: break-word;\n    z-index: 100;\n}\n\nsummary>h3 {\n    width: 95%;\n    margin: auto;\n}\n\nsummary::-webkit-details-marker {\n    display: none;\n}\n\n.all-info {\n    position: relative;\n    color: #333;/* 详情信息文字颜色 */\n    margin: auto;\n    width: 100%;\n    height: auto;\n    padding-top: calc(56.25vw + 24px + 1.5em);\n}\n\n.all-info>div {\n    width: 100%;\n    margin: auto;\n}\n\n.all-info>p {\n    text-indent: 0px;\n}\n\n.all-info>div>p {\n    width: 90%;\n    margin: 5px 5%;\n    outline: none;\n    text-align: left;\n    word-wrap: break-word;\n}\n\n.jiekou {\n    display: flex;\n}\n\n#selected-jiekou {\n    display: flex;\n    position: fixed;\n    justify-content: flex-end;\n    top: calc(56.25vw + 19.9px + 1.5em);\n    width: 150px;\n    right: 5px;\n}\n\n#selected-jiekou button {\n    width: 125px;\n    height: 28px;\n    padding: 2px;\n    background: rgba(204, 204, 204, var(--bg-opacity2));/* 已选接口背景颜色 */\n    backdrop-filter: blur(5px);\n    -webkit-backdrop-filter: blur(5px);\n    overscroll-behavior-y: none;\n    -webkit-overflow-scrolling: auto;\n    color: #4a89a9;\n    border: 1px solid #666;\n    border-radius: 0 0 3px 3px;\n    opacity: 0.5;\n}\n\n#jiekou-list {\n    display: none;\n    position: fixed;\n    overflow-y: auto;\n    max-height: 200px;\n    top: 0;\n    right: 5px;\n    background: rgba(204, 204, 204, var(--bg-opacity2));/* 接口列表背景颜色 */\n    backdrop-filter: blur(5px);\n    -webkit-backdrop-filter: blur(5px);\n    border: 1px solid #888;\n    border-top: none;\n    border-radius: 0 0 3px 3px;\n    z-index: 100;\n    margin: auto;\n}\n\n#jiekou-list button {\n    display: block;\n    width: 100%;\n    height: 28px;\n    margin: auto;\n    padding: 2px;\n    background: rgba(187, 187, 187, 0.1);/* 待选接口按钮背景颜色 */\n    color: #333;/* 待选接口按钮文字颜色 */\n    border: 1px solid #888;\n    border-top: none;\n    border-left: none;\n    border-right: none;\n    border-radius: 0px;\n    cursor: pointer;\n}\n\n#jiekou-list button:last-of-type {\n    border-bottom: none;\n    border-radius: 0 0 3px 3px;\n}\n\nsup {\n    font-size: 0.4em;\n    vertical-align: top;\n    position: relative;\n    top: -0.6em;\n}\n\n.jishu button:hover {\n    background: rgba(204, 204, 204, var(--bg-opacity2));/* 按钮悬停背景颜色 */\n    border: 1px solid #4a89a9;/* 按钮悬停边框颜色 */\n}\n\n.jishu button {\n    width: 30%;\n    margin: 1.25%;\n    padding: 5px;\n    outline: none;\n    border-radius: 8px;\n    border: 1px solid #666;\n    background: rgba(204, 204, 204, var(--bg-opacity2));/* 集数按钮背景颜色 */\n    color: #333;/* 集数按钮文字颜色 */\n    font-size: 0.7rem;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.jishu button.active {\n    background: rgba(204, 204, 204, var(--bg-opacity2));/* 已选集数按钮背景颜色 */\n    color: #4a89a9;\n    border: 1px solid #4a89a9;\n    position: sticky;\n    left: 0;\n    right: 0;\n}\n\n.popup {\n    position: fixed;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%) scale(0.95);\n    background-color: #ccc;\n    padding: 20px;\n    border-radius: 8px;\n    box-shadow: 0 4px 24px rgba(0, 0, 0, 0.3);\n    z-index: 2147483647;\n    width: 80%;\n    max-height: 80vh;\n    overflow: auto;\n    font-family: system-ui, -apple-system, sans-serif;\n    opacity: 0;\n    transition: all 0.3s ease;\n    pointer-events: auto;\n}\n\n.titleElement {\n    margin: 0 0 16px 0;\n    color: #333;\n    font-size: 18px;\n    font-weight: 600;\n}\n\n.contentElement {\n    white-space: pre-wrap;\n    word-wrap: break-word;\n    overflow-wrap: break-word;\n    max-height: calc(80vh - 150px);\n    overflow-y: auto;\n    padding: 16px;\n    background-color: #bbb;\n    color: #000;\n    border-radius: 6px;\n    margin-bottom: 20px;\n    font-size: 14px;\n    line-height: 1.6;\n    border: 1px solid #999;\n}"
  },
  {
    "articleStyle": 0,
    "customOrder": 597,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "9.0",
    "sourceUrl": "https://www.hmrpnvx.com/"
  },
  {
    "articleStyle": 0,
    "customOrder": 598,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "https://zidian.yw11.com/rundata/xing2/884c.jpg",
    "sourceName": "9.1",
    "sourceUrl": "https://www.fbd6.com/"
  },
  {
    "articleStyle": 1,
    "customOrder": 599,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.video-block",
    "ruleContent": "class.desc@all##提示:视频上的广告与本站无关,远离赌博！！！",
    "ruleImage": "img@data-src@js:'https:'.concat(result)",
    "ruleLink": "a@href@js:'https://wm.0t04.com'.concat(result)",
    "ruleNextPage": "class.page-link@a@href@js:'https://wm.0t04.com'.concat(result)",
    "ruleTitle": "class.title@text",
    "singleUrl": true,
    "sortUrl": "搜索::https://wm.0t04.com/?s=%E8%97%A4%E6%B5%A6\n中文::https://wm.0t04.com/link/ziz\n无码::https://wm.0t04.com/link/wuma\n有码::https://wm.0t04.com/link/yo\n综合::https://wm.0t04.com/link/zhh\n欧美::https://wm.0t04.com/link/ou\n动漫::https://wm.0t04.com/link/ka\n伦理::https://wm.0t04.com/link/sha\n国产::https://wm.0t04.com/link/zhip",
    "sourceGroup": "版本",
    "sourceIcon": "https://i.postimg.cc/pdVj5xt6/c322a61c1d8b0fbb92008d4f459d0c86.gif",
    "sourceName": "9.2（网页能用）",
    "sourceUrl": "p7av.com",
    "style": "video{\n\twidth:100%;\n}"
  },
  {
    "articleStyle": 0,
    "concurrentRate": "",
    "customOrder": 600,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "$.zhubo",
    "ruleContent": "<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n<script src=\"http://bilibili.github.io/flv.js/dist/flv.js\"></script>\n</head>\n<body>\n\t\t\t<video id=\"player1\"  autoplay=\"autoplay\" preload=\"auto\" muted controls=\"controls\">\n\t\t</video>\n\t\t<p>\n    <button onclick=\"enableMute()\" type=\"button\">关闭声音</button>\n\n    <button onclick=\"disableMute()\" type=\"button\">打开声音</button>\n\n</p> \n<div>\n直播链接:{{baseUrl.replace(/zhibo/,\"flv\").replace(/http:\\/\\/api.hclyz.com:81/,\"不可播放rtmp:/\")}}\n</div>\n</body>\n</html>\n<script>\n    if (flvjs.isSupported()) {\n        var videoElement = document.getElementById('player1');\n\t\tvar flvPlayer = flvjs.createPlayer({\n            type: 'flv', \n            url: '{{baseUrl.replace(/zhibo/,\"flv\").replace(/http:\\/\\/api.hclyz.com:81/,\"rtmp://\")}}',\n     });\n\t\tflvPlayer.attachMediaElement(videoElement);\n\t\tflvPlayer.load();\n\t\t//flvPlayer.play();\n    }\n</script>\n <script>\n\nvar myVid = document.getElementById(\"player1\");\n\nfunction enableMute() { \n\n    myVid.muted = true;\n\n} \n\nfunction disableMute() { \n\n    myVid.muted = false;\n\n} \n</script> ",
    "ruleDescription": "",
    "ruleImage": "$.img",
    "ruleLink": "$.address@js:result\n.replace(/\\.flv/,\".zhibo\")\n.replace(/rtmp:\\//,\"\")",
    "rulePubDate": "",
    "ruleTitle": "$.title",
    "singleUrl": false,
    "sortUrl": "偶遇::http://api.hclyz.com:81/mf/jsonouyu.txt\n依依::http://api.hclyz.com:81/mf/jsonyiyi.txt\n夜色::http://api.hclyz.com:81/mf/jsonyese.txt\n亚米::http://api.hclyz.com:81/mf/jsonyami.txt\n色趣::http://api.hclyz.com:81/mf/jsonsequ.txt\n咪狐::http://api.hclyz.com:81/mf/jsonmihu.txt\n夜律::http://api.hclyz.com:81/mf/jsonyelu.txt\n暗语::http://api.hclyz.com:81/mf/jsonanyu.txt\n咪咪::http://api.hclyz.com:81/mf/jsonmimi.txt\n糯米::http://api.hclyz.com:81/mf/jsonnuomi.txt\n苦瓜::http://api.hclyz.com:81/mf/jsonkugua.txt\n蝴蝶::http://api.hclyz.com:81/mf/jsonhudie.txt\n云鹿::http://api.hclyz.com:81/mf/jsonyunlu.txt\n付宝::http://api.hclyz.com:81/mf/jsonfubao.txt\n菠萝::http://api.hclyz.com:81/mf/jsonboluo.txt\n夜艳::http://api.hclyz.com:81/mf/jsonyeyan.txt\n二嫂::http://api.hclyz.com:81/mf/jsonersao.txt\n土豪::http://api.hclyz.com:81/mf/jsontuhao.txt\n盘他::http://api.hclyz.com:81/mf/jsonpanta.txt\n美夕::http://api.hclyz.com:81/mf/jsonmeixi.txt\n坦克::http://api.hclyz.com:81/mf/jsontanke.txt\n蜜桃::http://api.hclyz.com:81/mf/jsonmitao.txt\n她秀::http://api.hclyz.com:81/mf/jsontaxiu.txt\n金鱼::http://api.hclyz.com:81/mf/jsonjinyu.txt\n浴火::http://api.hclyz.com:81/mf/jsonyuhuo.txt\n套路::http://api.hclyz.com:81/mf/jsontaolu.txt\n日出::http://api.hclyz.com:81/mf/jsonrichu.txt\n桃花::http://api.hclyz.com:81/mf/jsontaohua.txt\nLOVE::http://api.hclyz.com:81/mf/jsonLOVE.txt\n久久::http://api.hclyz.com:81/mf/jsonjiujiu.txt\n杏趣::http://api.hclyz.com:81/mf/jsonxingqu.txt\n媚颜::http://api.hclyz.com:81/mf/jsonmeiyan.txt\n灰灰::http://api.hclyz.com:81/mf/jsonhuihui.txt\n爱零::http://api.hclyz.com:81/mf/jsonailing.txt\n爱恋::http://api.hclyz.com:81/mf/jsonailian.txt\n杏播::http://api.hclyz.com:81/mf/jsonxingbo.txt\n金呗::http://api.hclyz.com:81/mf/jsonjinbei.txt\nmoon::http://api.hclyz.com:81/mf/jsonmoon.txt\n夜纯::http://api.hclyz.com:81/mf/jsonyechun.txt\n彩云::http://api.hclyz.com:81/mf/jsoncaiyun.txt\n妞妞::http://api.hclyz.com:81/mf/jsonniuniu.txt\n艳后::http://api.hclyz.com:81/mf/jsonyanhou.txt\n蓝猫::http://api.hclyz.com:81/mf/jsonlanmao.txt\n情趣::http://api.hclyz.com:81/mf/jsonqingqu.txt\n翠鸟::http://api.hclyz.com:81/mf/jsoncuiniao.txt\n糖果::http://api.hclyz.com:81/mf/jsontangguo.txt\n么么哒::http://api.hclyz.com:81/mf/jsonmemeda.txt\n豹娱l::http://api.hclyz.com:81/mf/jsonbaoyul.txt\n卡哇伊::http://api.hclyz.com:81/mf/jsonkawayi.txt\n小妖::http://api.hclyz.com:81/mf/jsonxiaoyao.txt\n幽梦::http://api.hclyz.com:81/mf/jsonyoumeng.txt\n风流::http://api.hclyz.com:81/mf/jsonfengliu.txt\n樱桃::http://api.hclyz.com:81/mf/jsonyingtao.txt\n享色::http://api.hclyz.com:81/mf/jsonxiangse.txt\n娇媚::http://api.hclyz.com:81/mf/jsonjiaomei.txt\n爱爱你::http://api.hclyz.com:81/mf/jsonaiaini.txt\n花房::http://api.hclyz.com:81/mf/jsonhuafang.txt\n卡路里::http://api.hclyz.com:81/mf/jsonkaluli.txt\n名流::http://api.hclyz.com:81/mf/jsonmingliu.txt\n倾心::http://api.hclyz.com:81/mf/jsonqingxin.txt\n樱花::http://api.hclyz.com:81/mf/jsonyinghua.txt\n飘雪::http://api.hclyz.com:81/mf/jsonpiaoxue.txt\n入巷::http://api.hclyz.com:81/mf/jsonruxiang.txt\n蝶恋::http://api.hclyz.com:81/mf/jsondielian.txt\n彩虹::http://api.hclyz.com:81/mf/jsoncaihong.txt\n奥斯卡::http://api.hclyz.com:81/mf/jsonaosika.txt\n皇后::http://api.hclyz.com:81/mf/jsonhuanghou.txt\n牵手::http://api.hclyz.com:81/mf/jsonqianshou.txt\n台妹l::http://api.hclyz.com:81/mf/jsontaimeil.txt\n夜妖姬::http://api.hclyz.com:81/mf/jsonyeyaoji.txt\n一直播::http://api.hclyz.com:81/mf/jsonyizhibo.txt\n玲珑::http://api.hclyz.com:81/mf/jsonlinglong.txt\n橙秀::http://api.hclyz.com:81/mf/jsonchengxiu.txt\n黄瓜::http://api.hclyz.com:81/mf/jsonhuanggua.txt\n颜如玉::http://api.hclyz.com:81/mf/jsonyanruyu.txt\n蛟龙::http://api.hclyz.com:81/mf/jsonjiaolong.txt\n好基友::http://api.hclyz.com:81/mf/jsonhaojiyou.txt\n夜女郎::http://api.hclyz.com:81/mf/jsonyenulang.txt\n娇喘::http://api.hclyz.com:81/mf/jsonjiaochuan.txt\n小妲己::http://api.hclyz.com:81/mf/jsonxiaodaji.txt\n花蝴蝶::http://api.hclyz.com:81/mf/jsonhuahudie.txt\n尤物岛::http://api.hclyz.com:81/mf/jsonyouwudao.txt\n77直播::http://api.hclyz.com:81/mf/json77zhibo.txt\n十八禁::http://api.hclyz.com:81/mf/jsonshibajin.txt\n蝴蝶飞::http://api.hclyz.com:81/mf/jsonhudiefei.txt\n喜欢你::http://api.hclyz.com:81/mf/jsonxihuanni.txt\n兔女郎::http://api.hclyz.com:81/mf/jsontunulang.txt\n双碟::http://api.hclyz.com:81/mf/jsonshuangdie.txt\n约直播::http://api.hclyz.com:81/mf/jsonyuezhibo.txt\n九尾狐::http://api.hclyz.com:81/mf/jsonjiuweihu.txt\n红妆::http://api.hclyz.com:81/mf/jsonhongzhuang.txt\n花仙子::http://api.hclyz.com:81/mf/jsonhuaxianzi.txt\n持久男::http://api.hclyz.com:81/mf/jsonchijiunan.txt\n丽柜厅::http://api.hclyz.com:81/mf/jsonliguiting.txt\n桃花运::http://api.hclyz.com:81/mf/jsontaohuayun.txt\n903娱乐::http://api.hclyz.com:81/mf/json903yule.txt\n视觉秀::http://api.hclyz.com:81/mf/jsonshijuexiu.txt\n芒果派::http://api.hclyz.com:81/mf/jsonmangguopai.txt\n七仙女s::http://api.hclyz.com:81/mf/jsonqixiannus.txt\n夜来香::http://api.hclyz.com:81/mf/jsonyelaixiang.txt\n星宝贝::http://api.hclyz.com:81/mf/jsonxingbaobei.txt\n小蜜蜂::http://api.hclyz.com:81/mf/jsonxiaomifeng.txt\n小棉袄::http://api.hclyz.com:81/mf/jsonxiaomianao.txt\n小辣椒::http://api.hclyz.com:81/mf/jsonxiaolajiao.txt\n小仙女::http://api.hclyz.com:81/mf/jsonxiaoxiannu.txt\n兰桂坊::http://api.hclyz.com:81/mf/jsonlanguifang.txt\n花果山::http://api.hclyz.com:81/mf/jsonhuaguoshan.txt\n招财猫::http://api.hclyz.com:81/mf/jsonzhaocaimao.txt\n心之恋::http://api.hclyz.com:81/mf/jsonxinzhilian.txt\n睡美人::http://api.hclyz.com:81/mf/jsonshuimeiren.txt\n小花螺::http://api.hclyz.com:81/mf/jsonxiaohualuo.txt\n小天使::http://api.hclyz.com:81/mf/jsonxiaotianshi.txt\n小红帽::http://api.hclyz.com:81/mf/jsonxiaohongmao.txt\n樱花雨i::http://api.hclyz.com:81/mf/jsonyinghuayui.txt\n小萌猪::http://api.hclyz.com:81/mf/jsonxiaomengzhu.txt\n小坏蛋::http://api.hclyz.com:81/mf/jsonxiaohuaidan.txt\n小性感::http://api.hclyz.com:81/mf/jsonxiaoxinggan.txt\n红浪漫::http://api.hclyz.com:81/mf/jsonhonglangman.txt\n蚊香社::http://api.hclyz.com:81/mf/jsonwenxiangshe.txt\n蓝月亮::http://api.hclyz.com:81/mf/jsonlanyueliang.txt\n小精灵::http://api.hclyz.com:81/mf/jsonxiaojingling.txt\n红高粱::http://api.hclyz.com:81/mf/jsonhonggaoliang.txt\n小天仙::http://api.hclyz.com:81/mf/jsonxiaotianxian.txt",
    "sourceComment": "某个软件的聚合直播\nrtmp的手机网页应该是无法播放\nmp4的都是广告没管",
    "sourceGroup": "版本",
    "sourceIcon": "https://img2.baidu.com/it/u=3810767422,2486090729&fm=253&fmt=auto&app=138&f=PNG?w=192&h=192",
    "sourceName": "9.3（直播）",
    "sourceUrl": "http://api.hclyz.com:81",
    "style": "video{\nwidth:100%;\nheight:auto;}"
  },
  {
    "articleStyle": 2,
    "customOrder": 601,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "header": "{\"accept\":\"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\",\n\"user-agent\":\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36\"\n}",
    "jsLib": "getPage = (result) => {\nif (result.match(/<!DOCTYPE html>/)){\nreturn result;\n}\nresult = result.match(/<script>(.*?)<\\/script>.*/)[1];\nresult = result.replace('document.write(', '').replace(')', '');\nresult = 'let doc = ' + result;\neval(result);\nreturn doc;\n}",
    "lastUpdateTime": 1780244446675,
    "loadWithBaseUrl": false,
    "ruleArticles": "<js>\nresult = getPage(result);\n</js>\ndiv.card",
    "ruleContent": "<js>\nresult = getPage(result);\n</js>\n#content@html",
    "ruleImage": "img@src",
    "ruleLink": "a@href",
    "ruleNextPage": "page",
    "ruleTitle": ".card-body@a@text",
    "singleUrl": false,
    "sortUrl": "搜索::/q/{{(source.getVariable()==''||source.getVariable()==null)?'丝袜':source.getVariable()}}?category_id=&page={{page}}\n絲襪美腿::/cat/4?page={{page}}&per-page=100\n極品美女::/cat/11?page={{page}}&per-page=100\n清涼寫真::/cat/3?page={{page}}&per-page=100\n性感激情::/cat/7?page={{page}}&per-page=100\n歐美寫真::/cat/1?page={{page}}&per-page=100\n美女圖::/cat/5?page={{page}}&per-page=100\nCOSPLAY::/cat/8?page={{page}}&per-page=100\n亞洲美女::/cat/9?page={{page}}&per-page=100\n素人正妹::/cat/6?page={{page}}&per-page=100\nChinese::/cat/17?page={{page}}&per-page=100\nAidol::/cat/13?page={{page}}&per-page=100\nGravure::/cat/12?page={{page}}&per-page=100\n歐美美女::/cat/10?page={{page}}&per-page=100\nThailand::/cat/16?page={{page}}&per-page=100\nKorea::/cat/15?page={{page}}&per-page=100\n國產美女::/cat/21?page={{page}}&per-page=100\n港台美女::/cat/20?page={{page}}&per-page=100\nMagazine::/cat/14?page={{page}}&per-page=100\n日韓美女::/cat/19?page={{page}}&per-page=100\n夜店辣妹::/cat/2?page={{page}}&per-page=100",
    "sourceGroup": "版本",
    "sourceIcon": "https://tupian-2025094.xxnet06.com/logo.png",
    "sourceName": "9.4",
    "sourceUrl": "https://tupian-2025094.xxnet06.com/newweb"
  },
  {
    "articleStyle": 2,
    "customOrder": 602,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n     \"Referer\":\"https://xchina.co\",\n     \"User-Agent\":\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0\",\n     \"Origin\":\"https://xchina.co\"\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "loginUrl": "https://xchina.co/login.html",
    "ruleArticles": "div.item.photo",
    "ruleContent": "@js:\nlet imgs = '';\nlet next = baseUrl;\nlet maxPage = java.getString('.pager-num.-1@text');\n\nfor (let a = 1 ; a <= maxPage ; a++) {\n    next = baseUrl.replace('.html', `/${a}.html`);\n    result = java.get(next, {}).body()\njava.setContent(result);\njava.log(baseUrl);\nresult = java.getString('div.item.photo-image@div.img@style');\nimgs += result.split(\"\\n\").map(x=>{\n    x = x.match(/\\('(.*)'\\)/)[1];\n    x = x.slice(0, x.indexOf('_')) + '.jpg';\n    return '<img src=\"'+x+'\">'\n}).join(\"\\n\")\n}\nresult = imgs;\n",
    "ruleImage": "div.img@style##\\('(.*)'\\)##$1###",
    "ruleLink": "a.0@href",
    "ruleNextPage": "page",
    "ruleTitle": "div.title@text",
    "singleUrl": false,
    "sortUrl": "搜索::/photos/keyword-{{(source.getVariable()==''||source.getVariable()==null)?'丝袜':source.getVariable()}}/{{page}}.html\n露底::/photos/tag/pussy-visible/{{page}}\n互动::/photos/tag/interaction/{{page}}\n性爱::/photos/tag/sex/{{page}}\n露出::/photos/tag/exposure/{{page}}\n丝袜::/photos/tag/stockings/{{page}}\n情趣内衣::/photos/tag/lingerie/{{page}}\n道具::/photos/tag/props/{{page}}\n白虎::/photos/tag/shaved/{{page}}\n捆绑::/photos/tag/bondage/{{page}}\n女同::/photos/tag/lesbian/{{page}}\nCosplay::/photos/tag/cosplay/{{page}}\n女仆::/photos/tag/maid/{{page}}\nJK::/photos/tag/jk/{{page}}\nOL::/photos/tag/ol/{{page}}\n古装::/photos/tag/ancient/{{page}}\n护士::/photos/tag/nurse/{{page}}\n警察::/photos/tag/police/{{page}}\n兔女郎::/photos/tag/bunny-girl/{{page}}\n空姐::/photos/tag/air-hostess/{{page}}\n教师::/photos/tag/teacher/{{page}}\n连体泳装::/photos/tag/one-piece-swimsuit/{{page}}\n渔网袜::/photos/tag/fishnet/{{page}}\n吊袜带::/photos/tag/garter/{{page}}\n连裤袜::/photos/tag/pantyhose/{{page}}\n白丝袜::/photos/tag/white-stockings/{{page}}\n黑丝袜::/photos/tag/black-stockings/{{page}}\n彩色丝袜::/photos/tag/color-stockings/{{page}}\n高跟鞋::/photos/tag/high-heels/{{page}}\n户外::/photos/tag/outdoor/{{page}}\n浴室::/photos/tag/bathroom/{{page}}\n车内::/photos/tag/car/{{page}}\n教室::/photos/tag/classroom/{{page}}\n婚纱::/photos/tag/wedding-dress/{{page}}\n比基尼::/photos/tag/bikini/{{page}}\n旗袍::/photos/tag/cheongsam/{{page}}\n掰穴::/photos/tag/spreading/{{page}}\n放尿::/photos/tag/peeing/{{page}}",
    "sourceComment": "挂梯使用，裸连大概率连不上。",
    "sourceGroup": "版本",
    "sourceIcon": "https://p3-search.byteimg.com/obj/labis/0a5502af6b95a6b49d3acd488aae8398",
    "sourceName": "9.5（需要梯子）",
    "sourceUrl": "https://xchina.co"
  }
]