JKForum Helper

JKF JKForum Helper: Auto-sign-in, timed sign-in, auto-thank you, auto-load original image, auto-play image, auto-pay to buy theme post, auto-complete voting task, optimize browsing experience, one-click bulk reply/thank you, one-click package to download post image,Skip mobile verification code when logging in

// ==UserScript==
// @name                JKForum 助手
// @name:en             JKForum Helper
// @name:zh-TW          JKForum 助手
// @name:ja             JKForum 助手
// @name:ko             JKForum 조수
// @namespace           https://github.com/Eished/jkforum_helper
// @version             0.9.2
// @description         JKF 捷克论坛助手:自动签到、定时签到、自动感谢、自动加载原图、自动播放图片、自动支付购买主题贴、自动完成投票任务,优化浏览体验,一键批量回帖/感谢,一键打包下载帖子图片,自动识别验证码,自动现在有空,自动点击置顶广告,登录时跳过绑定手机号验证码,自动发文
// @description:en      JKF JKForum Helper: Auto-sign-in, timed sign-in, auto-thank you, auto-load original image, auto-play image, auto-pay to buy theme post, auto-complete voting task, optimize browsing experience, one-click bulk reply/thank you, one-click package to download post image,Skip mobile verification code when logging in
// @description:zh-TW   JKF 捷克論壇助手:自動簽到、定時簽到、自動感謝、自動加載原圖、自動播放圖片、自動支付購買主題貼、自動完成投票任務,優化瀏覽體驗,一鍵批量回帖/感謝,一鍵打包下載帖子圖片,自動識別驗證碼,自動現在有空,自動點擊置頂廣告,登錄時跳過綁定手機號驗證碼,自動發文
// @description:ja      JKF チェコ語フォーラム助手:自動チェックイン、時限式チェックイン、オートサンキュー、オリジナル画像の自動読み込み、画像の自動再生、トピック投稿の自動支払い、ポールタスクの自動完了、ブラウジングエクスペリエンスの最適化、ワンクリックでの一括返信/サンキュー、ワンクリックでの投稿画像のパッケージダウンロード,ログイン時にモバイル認証コードをスキップ
// @description:ko      JKF 체코 포럼 조수: 자동 로그인, 정기 로그인, 자동 감사, 원본 사진 자동로드, 테마 스티커 구매 자동 결제, 투표 작업 자동 완료, 최적화 된 브라우징 경험, 원 클릭 일괄 회신 / 감사, 원 클릭 포스트 사진의 패키지 다운로드 클릭다운로드하십시오,로그인 시 모바일 인증 코드 건너뛰기
// @author              Eished
// @copyright           Eished
// @license             MIT
// @match               *://*.jkforum.net/*
// @run-at              document-idle
// @supportURL          https://github.com/Eished/jkforum_helper/issues
// @homepage            https://github.com/Eished/jkforum_helper
// @grant               GM_getValue
// @grant               GM_setValue
// @grant               GM_deleteValue
// @grant               GM_info
// @grant               GM_xmlhttpRequest
// @grant               GM_openInTab
// @grant               GM_registerMenuCommand
// @grant               GM_addElement
// @grant               GM_addStyle
// @grant               GM_notification
// @grant               GM_addValueChangeListener
// @connect             mymypic.net
// @connect             jkf.iknow.fun
// @connect             cdn.jsdelivr.net
// @connect             github.com
// @connect             greasyfork.org
// @connect             jkf.hare200.com
// @require             https://cdn.jsdelivr.net/npm/react@18.1.0/umd/react.production.min.js
// @require             https://cdn.jsdelivr.net/npm/react-dom@18.1.0/umd/react-dom.production.min.js
// @require             https://cdn.jsdelivr.net/npm/react-table@7.8.0/dist/react-table.production.min.js
// @require             https://cdn.jsdelivr.net/npm/file-saver@2.0.5/dist/FileSaver.min.js
// @require             https://cdn.jsdelivr.net/npm/jszip@3.9.1/dist/jszip.min.js
// @require             https://cdn.jsdelivr.net/npm/react-copy-to-clipboard@5.1.0/build/react-copy-to-clipboard.min.js
// @icon                data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDExNi4xNjQ2NTUsIDIwMjEvMDEvMjYtMTU6NDE6MjAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6YzYwNmI3NGQtODA4Zi03YjQ3LWI4NGYtYjNlZmJiMTM4NDIwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkM3MzFDMzYyRUE5MzExRUJCOTU4RkY3NUMxOTY5MDdGIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkM3MzFDMzYxRUE5MzExRUJCOTU4RkY3NUMxOTY5MDdGIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyMS4yIChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjA2MWY1NjgyLTk5OTctNDU0OS04NjIzLWZhNzY0MmVjMTM5MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpjNjA2Yjc0ZC04MDhmLTdiNDctYjg0Zi1iM2VmYmIxMzg0MjAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5urL1nAAAJJUlEQVR42uxba2wU1xX+ZnZ2vYvX4BpDCYVA6xgKkR0wlYlJnyK1iiweVlqgGFpKK6qWAuYtQgitoYANGCTqRnJIQbQ/sJoAKsESMkrTitSQpuJhUBwVHCC21QeCgh17vevd6Tkzs+uZfXgftsevHOvT7twd35lz7rnnfufcGUGWZQxnETHMZdgbQLpy5UpfX0MgjCAkExwabBpEDT4NbkIHoZ3QRviUv/Msbff0/o1ZLBbl5npL0gkZhCkavkj4gtaeqhnArilu6aYfr2YEF6GV8EgS8J/ffh9NaSlo8PlQLwr4iNBAaBUT1YCMKtkdPTJAGuF5wrcIeYQvE0b3hQs5k4CmUmAkm9Kj3Dz/NRJuEP5CWrxDfnSVPn2KRnJsBoDNCSneKUPIJywjvEj4vBnzVCClPqXJMZL9olObVgIm0udEUqTAR8p4fbjmlfGmRcApyYI7QjRDyGo3sQZBGgP8hPAB4TyhyCzlu1VAU5CngVXCDLuEPaT4NZcHx9weTAtEoB6uAvMItYTXCc8N2HCuGYNG3+mw4ceiiL9T4PxVp5fijpCYAThYHSZUE2YOmnVN8wwyRLLDildpavyZvGFqJCOI3QS4twnFg3aB1zwiyYrnaVq82+6mQC3EZoCRhD8Rvj0kmI6sxIdxkoi3yRNmBBtBDENaThBeGFJ0TzUCe/UfPZ30KUQ2wFpC4ZDkvGQEmxXPUEwoV/I/IdQAvK7uHurc3ybhh+QFXwvnAVu1+T90hUaelkf+eEX2dTE7aKRmxaBRxBqd4EQUotJWES92+pBlFVDnN8ACwqiouTOZTxC6ruyjzCRSQYUzLb10d264/+HrWK1WtLe3h5xXd5dSRXcC2R+N/nMTlIAokgG+S65Q5//tnI5cRsThw4fl+vr6APLz8yOeW1VVZTh36tSp3fa9evVqw/l37tyRCwsLld9S7JCby8h+vyNUQn52fPR7DQciRmo/b0DuqMAV7xspgqRlcF+JxYKTJ08GKRI4Tk1NjXjulClTDOc6HI6I52ZnZ+PIkSOGc86cOYNz586FH8kE3d8iGr5PpxXhaW7KjjWxcbuNfuf1eiOe29HRETIFwondbseJEycMyt+6dQsrV65EZ2dnxOwwEWmlW5K7Eignfc1mD5jRg5DSY9m/fz9mzuxKNVpbW1FUVIQnT57E3EdBFiGHlIsSF6wUYlJHqLUnQV0VstgA0/pL+fnz52P9+vWGtjVr1uD69etx9fP1TOBnC7QCWjRxacU3dcgzJa10ZbqMHz8elZWVhraKigqcPHky7r5cHq2C2B73v07kGDCuPwzAyo8b13Xp2tpabNq0ydR7oFiSzgb4nNnKb9iwAQUFBYHjBw8eYPny5SGBs88NQMyXDZBsjrXVSTdr1izs27fP8NuqVavQ0NBgvhsKcLAB7GZcy+PxKMzu+PHjSEpKCrTv3r074nrf56mBDLuoywf6VHh527FjB7KysgJtZ8+exa5du/otpSAyZJFgwvZYW1sb5s2bh23bthnajx07ht7YnLVJmh97oydC8BmrP5IZJEiSJOzdu1dhfXopKSlBTU1NCMOMV07WAu9/Av+eQUR5heJuzjNQN+A0C5hiAJvNhrS0tJD2nJwcrF27FocOHepR/x/+S0U0+dELdE1LV21AgMm7w1evXg2ZBjt37sSkSZNMub4YZrdI0pr63AtaWlqUBOfGjRtYuHAh5syZo7SPGjUKpaWlWLp0acJ9pzsJKYi6JzjSrjtHUL9KZo3+unXrFOVZNm/ejEuXLikFFpYlS5Yoy+OFCxcS6vsX36T5/T2NDndb0IG676xvM8bFvhOmuvrvnALrpby8PCRIxuzapAWvZ9EQnEbzAiRGj53GYBZrPSBY9OTHP/cfPnwYOJ4+fTo2btyYKKHpesSiOwRNEZ8PPlG3KESVsWPHGo4fP36csEc0Nzdjz549hrbt27cjIyPDPCZIE0KMPnMQCFZc5vILV2saGxt7dAOc/t68eTNw7HQ6cfDgQTOzQRcbIKbSS2FhIdLT0wPH9+7dU9ATYQLEAVEvixYtUgolJuUCrWyA/3Y3V1nmzp2LsrIyQ9v58+d7zOBYOPKfPn3a0MbEKDnZlCT1IRvA4MdMWfnJsaqqKpw6dQqXL1/GxYsXMWbMmMA5XKs/evRor90FkyPOF/ySmZmJrVu3muEBzWyAfwbT09zcXCxevFhZn2fPnh3yj8XFxbh9+3av3Qj3FUyHt2zZYiir95E0sAHq9MvctGmRa6T379/HihUrQmp54STYhYN3ioLlwIEDhpjCZXLOFm22JPj6gqmo/PdDZoJcguVyooNTU87Z8/LyMGHCBCUeuFwu3L17V2Fu1dXVePToUUz98wjqgyb3EY0qM0XW1wvYaDa6B5+rl0tlgsIBmMTU+VPif0DdIBmQkkIE8aMS4Kl0lbZlvEy++6Dr95e/A/x6OWIri2sGoFX8Y8GW8qykMcF3B7IBgqVkAS1drV3HeV+Kh85pLNaH92wi2v3JEK9D6wa85to2Z9E3ghJ5j4Z4qDPpzLmBv5v3CDcHiwcouzttOnjim/+dXjRJImqgsyNPg3IMB5EVD3iN4msrZKMj/YGLNkNaeRp9jxeNlD5X6OsB+pn083jS48GmPPMJCn4bJAv+F3jOOOi0y7yED1XXd3fiN0lWvKmvC4Qrih4hlA01/V0evGWVUCxEeVI0kJ8QXh0Kbs+D3e7G78ntl1lEYn9ybAZg4YcmXyI0DVblabnroJHfRm7/AzKAO1zVONq+ABOkXEJlnKtt/wY7WXH5Ggp4X3VYUaZUgyOUzGPZGGkm/FQzxHHC44GotEJvucjnwTu01C20WZBPI/9BgEFGkHj2Ba4RVhF+yZUrqA9Vs1FG9JfCrJjyvpAX9aR8NTVXWS14PzDicuxdJSqTob4xxg8f50B9bS69t/V10DA1lwKp6ltjrsAbY8DfCH8lP75Omrjj0oaNY7VDGD26V990486ehvrgFYOfQH9KMwo/iut/edKmeZ+oux2vFmfcGsNvIfDGwb9tEhqX5eITZxI+5ioO6dlEo+zWvzOYyC57ksMJgZ/PMVEsOuX9O9P+LUufxkL9RjCo1OJS3T3W1wJjEZFIgfDZ2+PDXP4vwABKHSZ0zSd04wAAAABJRU5ErkJggg==
// ==/UserScript==
/* eslint-disable */ /* spell-checker: disable */
// @[ You can find all source codes in GitHub repo ]
/******/ (() => { // webpackBootstrap
/******/ 	var __webpack_modules__ = ({

/***/ 529:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

// Imports
var ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ = __webpack_require__(81);
var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(645);
var ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);
// Module
___CSS_LOADER_EXPORT___.push([module.id, "/*\n! tailwindcss v3.0.24 | MIT License | https://tailwindcss.com\n*/\n\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n  box-sizing: border-box;\n  /* 1 */\n  border-width: 0;\n  /* 2 */\n  border-style: solid;\n  /* 2 */\n  border-color: #e5e7eb;\n  /* 2 */\n}\n\n::before,\n::after {\n  --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n*/\n\nhtml {\n  line-height: 1.5;\n  /* 1 */\n  -webkit-text-size-adjust: 100%;\n  /* 2 */\n  -moz-tab-size: 4;\n  /* 3 */\n  -o-tab-size: 4;\n     tab-size: 4;\n  /* 3 */\n  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  /* 4 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n  margin: 0;\n  /* 1 */\n  line-height: inherit;\n  /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n  height: 0;\n  /* 1 */\n  color: inherit;\n  /* 2 */\n  border-top-width: 1px;\n  /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n  -webkit-text-decoration: underline dotted;\n          text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-size: inherit;\n  font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n  color: inherit;\n  text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font family by default.\n2. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  /* 1 */\n  font-size: 1em;\n  /* 2 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n  font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n  text-indent: 0;\n  /* 1 */\n  border-color: inherit;\n  /* 2 */\n  border-collapse: collapse;\n  /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: inherit;\n  /* 1 */\n  font-size: 100%;\n  /* 1 */\n  line-height: inherit;\n  /* 1 */\n  color: inherit;\n  /* 1 */\n  margin: 0;\n  /* 2 */\n  padding: 0;\n  /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n  -webkit-appearance: button;\n  /* 1 */\n  background-color: transparent;\n  /* 2 */\n  background-image: none;\n  /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n  outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n  box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n  vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n  -webkit-appearance: textfield;\n  /* 1 */\n  outline-offset: -2px;\n  /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button;\n  /* 1 */\n  font: inherit;\n  /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n  display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n  margin: 0;\n}\n\nfieldset {\n  margin: 0;\n  padding: 0;\n}\n\nlegend {\n  padding: 0;\n}\n\nol,\nul,\nmenu {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n  resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n  opacity: 1;\n  /* 1 */\n  color: #9ca3af;\n  /* 2 */\n}\n\ninput:-ms-input-placeholder, textarea:-ms-input-placeholder {\n  opacity: 1;\n  /* 1 */\n  color: #9ca3af;\n  /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n  opacity: 1;\n  /* 1 */\n  color: #9ca3af;\n  /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n  cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n\n:disabled {\n  cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n   This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n  display: block;\n  /* 1 */\n  vertical-align: middle;\n  /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n  max-width: 100%;\n  height: auto;\n}\n\n/*\nEnsure the default browser behavior of the `hidden` attribute.\n*/\n\n[hidden] {\n  display: none;\n}\n\n[type='text'],[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select {\n  -webkit-appearance: none;\n     -moz-appearance: none;\n          appearance: none;\n  background-color: #fff;\n  border-color: #6b7280;\n  border-width: 1px;\n  border-radius: 0px;\n  padding-top: 0.5rem;\n  padding-right: 0.75rem;\n  padding-bottom: 0.5rem;\n  padding-left: 0.75rem;\n  font-size: 1rem;\n  line-height: 1.5rem;\n  --tw-shadow: 0 0 #0000;\n}\n\n[type='text']:focus, [type='email']:focus, [type='url']:focus, [type='password']:focus, [type='number']:focus, [type='date']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='week']:focus, [multiple]:focus, textarea:focus, select:focus {\n  outline: 2px solid transparent;\n  outline-offset: 2px;\n  --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: #2563eb;\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n  border-color: #2563eb;\n}\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n  color: #6b7280;\n  opacity: 1;\n}\n\ninput:-ms-input-placeholder, textarea:-ms-input-placeholder {\n  color: #6b7280;\n  opacity: 1;\n}\n\ninput::placeholder,textarea::placeholder {\n  color: #6b7280;\n  opacity: 1;\n}\n\n::-webkit-datetime-edit-fields-wrapper {\n  padding: 0;\n}\n\n::-webkit-date-and-time-value {\n  min-height: 1.5em;\n}\n\n::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field {\n  padding-top: 0;\n  padding-bottom: 0;\n}\n\nselect {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\");\n  background-position: right 0.5rem center;\n  background-repeat: no-repeat;\n  background-size: 1.5em 1.5em;\n  padding-right: 2.5rem;\n  print-color-adjust: exact;\n}\n\n[multiple] {\n  background-image: initial;\n  background-position: initial;\n  background-repeat: unset;\n  background-size: initial;\n  padding-right: 0.75rem;\n  print-color-adjust: unset;\n}\n\n[type='checkbox'],[type='radio'] {\n  -webkit-appearance: none;\n     -moz-appearance: none;\n          appearance: none;\n  padding: 0;\n  print-color-adjust: exact;\n  display: inline-block;\n  vertical-align: middle;\n  background-origin: border-box;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  flex-shrink: 0;\n  height: 1rem;\n  width: 1rem;\n  color: #2563eb;\n  background-color: #fff;\n  border-color: #6b7280;\n  border-width: 1px;\n  --tw-shadow: 0 0 #0000;\n}\n\n[type='checkbox'] {\n  border-radius: 0px;\n}\n\n[type='radio'] {\n  border-radius: 100%;\n}\n\n[type='checkbox']:focus,[type='radio']:focus {\n  outline: 2px solid transparent;\n  outline-offset: 2px;\n  --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\n  --tw-ring-offset-width: 2px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: #2563eb;\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n}\n\n[type='checkbox']:checked,[type='radio']:checked {\n  border-color: transparent;\n  background-color: currentColor;\n  background-size: 100% 100%;\n  background-position: center;\n  background-repeat: no-repeat;\n}\n\n[type='checkbox']:checked {\n  background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\");\n}\n\n[type='radio']:checked {\n  background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\");\n}\n\n[type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus {\n  border-color: transparent;\n  background-color: currentColor;\n}\n\n[type='checkbox']:indeterminate {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e\");\n  border-color: transparent;\n  background-color: currentColor;\n  background-size: 100% 100%;\n  background-position: center;\n  background-repeat: no-repeat;\n}\n\n[type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus {\n  border-color: transparent;\n  background-color: currentColor;\n}\n\n[type='file'] {\n  background: unset;\n  border-color: inherit;\n  border-width: 0;\n  border-radius: 0;\n  padding: 0;\n  font-size: unset;\n  line-height: inherit;\n}\n\n[type='file']:focus {\n  outline: 1px solid ButtonText;\n  outline: 1px auto -webkit-focus-ring-color;\n}\n\n*, ::before, ::after {\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n}\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0;\n}\n\n.pointer-events-none {\n  pointer-events: none;\n}\n\n.pointer-events-auto {\n  pointer-events: auto;\n}\n\n.static {\n  position: static;\n}\n\n.fixed {\n  position: fixed;\n}\n\n.absolute {\n  position: absolute;\n}\n\n.relative {\n  position: relative;\n}\n\n.inset-0 {\n  top: 0px;\n  right: 0px;\n  bottom: 0px;\n  left: 0px;\n}\n\n.inset-y-0 {\n  top: 0px;\n  bottom: 0px;\n}\n\n.-left-8 {\n  left: -2rem;\n}\n\n.top-1\\/2 {\n  top: 50%;\n}\n\n.top-0 {\n  top: 0px;\n}\n\n.right-0 {\n  right: 0px;\n}\n\n.left-0 {\n  left: 0px;\n}\n\n.z-50 {\n  z-index: 50;\n}\n\n.m-2 {\n  margin: 0.5rem;\n}\n\n.-m-2 {\n  margin: -0.5rem;\n}\n\n.m-1 {\n  margin: 0.25rem;\n}\n\n.m-4 {\n  margin: 1rem;\n}\n\n.mx-1 {\n  margin-left: 0.25rem;\n  margin-right: 0.25rem;\n}\n\n.my-1 {\n  margin-top: 0.25rem;\n  margin-bottom: 0.25rem;\n}\n\n.-my-6 {\n  margin-top: -1.5rem;\n  margin-bottom: -1.5rem;\n}\n\n.mx-2 {\n  margin-left: 0.5rem;\n  margin-right: 0.5rem;\n}\n\n.ml-4 {\n  margin-left: 1rem;\n}\n\n.mt-2 {\n  margin-top: 0.5rem;\n}\n\n.ml-3 {\n  margin-left: 0.75rem;\n}\n\n.mt-8 {\n  margin-top: 2rem;\n}\n\n.mt-1 {\n  margin-top: 0.25rem;\n}\n\n.mt-0\\.5 {\n  margin-top: 0.125rem;\n}\n\n.mt-0 {\n  margin-top: 0px;\n}\n\n.mt-6 {\n  margin-top: 1.5rem;\n}\n\n.ml-auto {\n  margin-left: auto;\n}\n\n.mb-4 {\n  margin-bottom: 1rem;\n}\n\n.ml-1 {\n  margin-left: 0.25rem;\n}\n\n.block {\n  display: block;\n}\n\n.inline-block {\n  display: inline-block;\n}\n\n.flex {\n  display: flex;\n}\n\n.inline-flex {\n  display: inline-flex;\n}\n\n.table {\n  display: table;\n}\n\n.flow-root {\n  display: flow-root;\n}\n\n.h-12 {\n  height: 3rem;\n}\n\n.h-screen {\n  height: 100vh;\n}\n\n.h-fit {\n  height: -webkit-fit-content;\n  height: -moz-fit-content;\n  height: fit-content;\n}\n\n.h-20 {\n  height: 5rem;\n}\n\n.h-full {\n  height: 100%;\n}\n\n.h-7 {\n  height: 1.75rem;\n}\n\n.h-6 {\n  height: 1.5rem;\n}\n\n.h-24 {\n  height: 6rem;\n}\n\n.h-5 {\n  height: 1.25rem;\n}\n\n.h-3 {\n  height: 0.75rem;\n}\n\n.h-4 {\n  height: 1rem;\n}\n\n.h-8 {\n  height: 2rem;\n}\n\n.max-h-\\[95\\%\\] {\n  max-height: 95%;\n}\n\n.w-12 {\n  width: 3rem;\n}\n\n.w-full {\n  width: 100%;\n}\n\n.w-64 {\n  width: 16rem;\n}\n\n.w-80 {\n  width: 20rem;\n}\n\n.w-8 {\n  width: 2rem;\n}\n\n.w-screen {\n  width: 100vw;\n}\n\n.w-72 {\n  width: 18rem;\n}\n\n.w-40 {\n  width: 10rem;\n}\n\n.w-6 {\n  width: 1.5rem;\n}\n\n.w-24 {\n  width: 6rem;\n}\n\n.w-5 {\n  width: 1.25rem;\n}\n\n.w-3 {\n  width: 0.75rem;\n}\n\n.w-16 {\n  width: 4rem;\n}\n\n.w-4 {\n  width: 1rem;\n}\n\n.w-7 {\n  width: 1.75rem;\n}\n\n.min-w-full {\n  min-width: 100%;\n}\n\n.max-w-full {\n  max-width: 100%;\n}\n\n.max-w-md {\n  max-width: 28rem;\n}\n\n.max-w-\\[150px\\] {\n  max-width: 150px;\n}\n\n.flex-1 {\n  flex: 1 1 0%;\n}\n\n.flex-shrink-0 {\n  flex-shrink: 0;\n}\n\n.table-auto {\n  table-layout: auto;\n}\n\n.translate-x-full {\n  --tw-translate-x: 100%;\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.translate-x-0 {\n  --tw-translate-x: 0px;\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.transform {\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.cursor-help {\n  cursor: help;\n}\n\n.cursor-not-allowed {\n  cursor: not-allowed;\n}\n\n.cursor-pointer {\n  cursor: pointer;\n}\n\n.flex-col {\n  flex-direction: column;\n}\n\n.flex-wrap {\n  flex-wrap: wrap;\n}\n\n.items-start {\n  align-items: flex-start;\n}\n\n.items-end {\n  align-items: flex-end;\n}\n\n.items-center {\n  align-items: center;\n}\n\n.justify-center {\n  justify-content: center;\n}\n\n.justify-between {\n  justify-content: space-between;\n}\n\n.justify-evenly {\n  justify-content: space-evenly;\n}\n\n.space-y-2 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-y-reverse: 0;\n  margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));\n  margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));\n}\n\n.divide-y > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-y-reverse: 0;\n  border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n  border-bottom-width: calc(1px * var(--tw-divide-y-reverse));\n}\n\n.divide-gray-200 > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-opacity: 1;\n  border-color: rgb(229 231 235 / var(--tw-divide-opacity));\n}\n\n.divide-gray-100 > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-opacity: 1;\n  border-color: rgb(243 244 246 / var(--tw-divide-opacity));\n}\n\n.overflow-auto {\n  overflow: auto;\n}\n\n.overflow-hidden {\n  overflow: hidden;\n}\n\n.overflow-y-auto {\n  overflow-y: auto;\n}\n\n.overflow-x-hidden {\n  overflow-x: hidden;\n}\n\n.overflow-y-scroll {\n  overflow-y: scroll;\n}\n\n.overflow-ellipsis {\n  text-overflow: ellipsis;\n}\n\n.text-ellipsis {\n  text-overflow: ellipsis;\n}\n\n.whitespace-nowrap {\n  white-space: nowrap;\n}\n\n.rounded-md {\n  border-radius: 0.375rem;\n}\n\n.rounded {\n  border-radius: 0.25rem;\n}\n\n.rounded-lg {\n  border-radius: 0.5rem;\n}\n\n.rounded-full {\n  border-radius: 9999px;\n}\n\n.rounded-t {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.rounded-b {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.border {\n  border-width: 1px;\n}\n\n.border-0 {\n  border-width: 0px;\n}\n\n.border-2 {\n  border-width: 2px;\n}\n\n.border-b {\n  border-bottom-width: 1px;\n}\n\n.border-t {\n  border-top-width: 1px;\n}\n\n.border-b-2 {\n  border-bottom-width: 2px;\n}\n\n.border-solid {\n  border-style: solid;\n}\n\n.border-gray-200 {\n  --tw-border-opacity: 1;\n  border-color: rgb(229 231 235 / var(--tw-border-opacity));\n}\n\n.border-transparent {\n  border-color: transparent;\n}\n\n.border-gray-300 {\n  --tw-border-opacity: 1;\n  border-color: rgb(209 213 219 / var(--tw-border-opacity));\n}\n\n.border-gray-400 {\n  --tw-border-opacity: 1;\n  border-color: rgb(156 163 175 / var(--tw-border-opacity));\n}\n\n.bg-transparent {\n  background-color: transparent;\n}\n\n.bg-gray-50 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n\n.bg-indigo-400 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(129 140 248 / var(--tw-bg-opacity));\n}\n\n.bg-indigo-600 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(79 70 229 / var(--tw-bg-opacity));\n}\n\n.bg-gray-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(107 114 128 / var(--tw-bg-opacity));\n}\n\n.bg-white {\n  --tw-bg-opacity: 1;\n  background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n\n.bg-gray-900 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(17 24 39 / var(--tw-bg-opacity));\n}\n\n.bg-gray-200 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(229 231 235 / var(--tw-bg-opacity));\n}\n\n.bg-blue-200 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(191 219 254 / var(--tw-bg-opacity));\n}\n\n.bg-green-400 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(74 222 128 / var(--tw-bg-opacity));\n}\n\n.bg-gray-400 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(156 163 175 / var(--tw-bg-opacity));\n}\n\n.bg-red-400 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(248 113 113 / var(--tw-bg-opacity));\n}\n\n.bg-blue-400 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(96 165 250 / var(--tw-bg-opacity));\n}\n\n.bg-gray-100 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n\n.bg-gray-300 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(209 213 219 / var(--tw-bg-opacity));\n}\n\n.bg-opacity-75 {\n  --tw-bg-opacity: 0.75;\n}\n\n.bg-opacity-50 {\n  --tw-bg-opacity: 0.5;\n}\n\n.bg-cover {\n  background-size: cover;\n}\n\n.bg-center {\n  background-position: center;\n}\n\n.object-cover {\n  -o-object-fit: cover;\n     object-fit: cover;\n}\n\n.object-center {\n  -o-object-position: center;\n     object-position: center;\n}\n\n.p-2 {\n  padding: 0.5rem;\n}\n\n.p-5 {\n  padding: 1.25rem;\n}\n\n.p-1\\.5 {\n  padding: 0.375rem;\n}\n\n.p-1 {\n  padding: 0.25rem;\n}\n\n.p-6 {\n  padding: 1.5rem;\n}\n\n.p-3 {\n  padding: 0.75rem;\n}\n\n.p-0 {\n  padding: 0px;\n}\n\n.px-2 {\n  padding-left: 0.5rem;\n  padding-right: 0.5rem;\n}\n\n.py-1 {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n}\n\n.py-6 {\n  padding-top: 1.5rem;\n  padding-bottom: 1.5rem;\n}\n\n.px-4 {\n  padding-left: 1rem;\n  padding-right: 1rem;\n}\n\n.px-6 {\n  padding-left: 1.5rem;\n  padding-right: 1.5rem;\n}\n\n.py-3 {\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n}\n\n.py-4 {\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n\n.px-3 {\n  padding-left: 0.75rem;\n  padding-right: 0.75rem;\n}\n\n.py-2 {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.pr-4 {\n  padding-right: 1rem;\n}\n\n.pl-2 {\n  padding-left: 0.5rem;\n}\n\n.pl-10 {\n  padding-left: 2.5rem;\n}\n\n.pl-1 {\n  padding-left: 0.25rem;\n}\n\n.pl-5 {\n  padding-left: 1.25rem;\n}\n\n.text-left {\n  text-align: left;\n}\n\n.text-center {\n  text-align: center;\n}\n\n.text-sm {\n  font-size: 0.875rem;\n  line-height: 1.25rem;\n}\n\n.text-xs {\n  font-size: 0.75rem;\n  line-height: 1rem;\n}\n\n.text-lg {\n  font-size: 1.125rem;\n  line-height: 1.75rem;\n}\n\n.text-base {\n  font-size: 1rem;\n  line-height: 1.5rem;\n}\n\n.text-xl {\n  font-size: 1.25rem;\n  line-height: 1.75rem;\n}\n\n.font-bold {\n  font-weight: 700;\n}\n\n.font-medium {\n  font-weight: 500;\n}\n\n.font-normal {\n  font-weight: 400;\n}\n\n.uppercase {\n  text-transform: uppercase;\n}\n\n.leading-tight {\n  line-height: 1.25;\n}\n\n.leading-6 {\n  line-height: 1.5rem;\n}\n\n.tracking-wider {\n  letter-spacing: 0.05em;\n}\n\n.text-white {\n  --tw-text-opacity: 1;\n  color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n\n.text-red-500 {\n  --tw-text-opacity: 1;\n  color: rgb(239 68 68 / var(--tw-text-opacity));\n}\n\n.text-blue-500 {\n  --tw-text-opacity: 1;\n  color: rgb(59 130 246 / var(--tw-text-opacity));\n}\n\n.text-gray-900 {\n  --tw-text-opacity: 1;\n  color: rgb(17 24 39 / var(--tw-text-opacity));\n}\n\n.text-gray-400 {\n  --tw-text-opacity: 1;\n  color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n\n.text-gray-500 {\n  --tw-text-opacity: 1;\n  color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n\n.text-indigo-600 {\n  --tw-text-opacity: 1;\n  color: rgb(79 70 229 / var(--tw-text-opacity));\n}\n\n.text-gray-800 {\n  --tw-text-opacity: 1;\n  color: rgb(31 41 55 / var(--tw-text-opacity));\n}\n\n.text-blue-600 {\n  --tw-text-opacity: 1;\n  color: rgb(37 99 235 / var(--tw-text-opacity));\n}\n\n.text-gray-700 {\n  --tw-text-opacity: 1;\n  color: rgb(55 65 81 / var(--tw-text-opacity));\n}\n\n.opacity-0 {\n  opacity: 0;\n}\n\n.opacity-100 {\n  opacity: 1;\n}\n\n.shadow-md {\n  --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-xl {\n  --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-sm {\n  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow {\n  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.filter {\n  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n\n.transition {\n  transition-property: color, background-color, border-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-text-decoration-color, -webkit-backdrop-filter;\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-backdrop-filter;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\n\n.transition-opacity {\n  transition-property: opacity;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\n\n.delay-150 {\n  transition-delay: 150ms;\n}\n\n.duration-300 {\n  transition-duration: 300ms;\n}\n\n.duration-150 {\n  transition-duration: 150ms;\n}\n\n.duration-500 {\n  transition-duration: 500ms;\n}\n\n.duration-75 {\n  transition-duration: 75ms;\n}\n\n.ease-in-out {\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n#jkforum-helper .toggle-bg:after {\n  content: '';\n  position: absolute;\n  top: 0.125rem;\n  left: 0.125rem;\n  height: 0.75rem;\n  width: 0.75rem;\n  border-radius: 9999px;\n  border-width: 1px;\n  --tw-border-opacity: 1;\n  border-color: rgb(209 213 219 / var(--tw-border-opacity));\n  --tw-bg-opacity: 1;\n  background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n  transition-property: color, background-color, border-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-text-decoration-color, -webkit-backdrop-filter;\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-backdrop-filter;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\n\n#jkforum-helper input:checked + .toggle-bg:after {\n  transform: translateX(100%);\n  --tw-border-opacity: 1;\n  border-color: rgb(255 255 255 / var(--tw-border-opacity));\n}\n\n#jkforum-helper input:checked + .toggle-bg {\n  --tw-border-opacity: 1;\n  border-color: rgb(37 99 235 / var(--tw-border-opacity));\n  --tw-bg-opacity: 1;\n  background-color: rgb(37 99 235 / var(--tw-bg-opacity));\n}\n\n.border-b {\n  border-bottom: 1px solid lightgray;\n}\n\n/* 增加 visited 样式,图片模式已阅的帖子变灰色 */\n\n.xw0 a:visited {\n  color: grey;\n}\n\n#jkforum-helper button {\n  border: unset;\n}\n\n.focus-within\\:text-gray-400:focus-within {\n  --tw-text-opacity: 1;\n  color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n\n.hover\\:translate-x-9:hover {\n  --tw-translate-x: 2.25rem;\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.hover\\:rotate-\\[360deg\\]:hover {\n  --tw-rotate: 360deg;\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.hover\\:scale-110:hover {\n  --tw-scale-x: 1.1;\n  --tw-scale-y: 1.1;\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.hover\\:border-gray-200:hover {\n  --tw-border-opacity: 1;\n  border-color: rgb(229 231 235 / var(--tw-border-opacity));\n}\n\n.hover\\:bg-indigo-700:hover {\n  --tw-bg-opacity: 1;\n  background-color: rgb(67 56 202 / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-gray-200:hover {\n  --tw-bg-opacity: 1;\n  background-color: rgb(229 231 235 / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-gray-100:hover {\n  --tw-bg-opacity: 1;\n  background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n\n.hover\\:text-gray-500:hover {\n  --tw-text-opacity: 1;\n  color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n\n.hover\\:text-indigo-500:hover {\n  --tw-text-opacity: 1;\n  color: rgb(99 102 241 / var(--tw-text-opacity));\n}\n\n.hover\\:text-gray-900:hover {\n  --tw-text-opacity: 1;\n  color: rgb(17 24 39 / var(--tw-text-opacity));\n}\n\n.hover\\:shadow-lg:hover {\n  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.focus\\:border-blue-500:focus {\n  --tw-border-opacity: 1;\n  border-color: rgb(59 130 246 / var(--tw-border-opacity));\n}\n\n.focus\\:border-gray-100:focus {\n  --tw-border-opacity: 1;\n  border-color: rgb(243 244 246 / var(--tw-border-opacity));\n}\n\n.focus\\:bg-indigo-700:focus {\n  --tw-bg-opacity: 1;\n  background-color: rgb(67 56 202 / var(--tw-bg-opacity));\n}\n\n.focus\\:shadow-lg:focus {\n  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.focus\\:outline-none:focus {\n  outline: 2px solid transparent;\n  outline-offset: 2px;\n}\n\n.focus\\:ring-2:focus {\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.focus\\:ring-0:focus {\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.focus\\:ring-indigo-500:focus {\n  --tw-ring-opacity: 1;\n  --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity));\n}\n\n.focus\\:ring-blue-500:focus {\n  --tw-ring-opacity: 1;\n  --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));\n}\n\n.focus\\:ring-offset-2:focus {\n  --tw-ring-offset-width: 2px;\n}\n\n.active\\:bg-indigo-800:active {\n  --tw-bg-opacity: 1;\n  background-color: rgb(55 48 163 / var(--tw-bg-opacity));\n}\n\n.active\\:shadow-lg:active {\n  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.disabled\\:opacity-25:disabled {\n  opacity: 0.25;\n}\n\n.group:hover .group-hover\\:text-gray-900 {\n  --tw-text-opacity: 1;\n  color: rgb(17 24 39 / var(--tw-text-opacity));\n}\n\n@media (min-width: 640px) {\n  .sm\\:px-6 {\n    padding-left: 1.5rem;\n    padding-right: 1.5rem;\n  }\n\n  .sm\\:text-xs {\n    font-size: 0.75rem;\n    line-height: 1rem;\n  }\n\n  .sm\\:text-sm {\n    font-size: 0.875rem;\n    line-height: 1.25rem;\n  }\n\n  .sm\\:leading-5 {\n    line-height: 1.25rem;\n  }\n\n  .sm\\:duration-700 {\n    transition-duration: 700ms;\n  }\n}\n", ""]);
// Exports
module.exports = ___CSS_LOADER_EXPORT___;


/***/ }),

/***/ 645:
/***/ ((module) => {

"use strict";


/*
  MIT License http://www.opensource.org/licenses/mit-license.php
  Author Tobias Koppers @sokra
*/
module.exports = function (cssWithMappingToString) {
  var list = []; // return the list of modules as css string

  list.toString = function toString() {
    return this.map(function (item) {
      var content = "";
      var needLayer = typeof item[5] !== "undefined";

      if (item[4]) {
        content += "@supports (".concat(item[4], ") {");
      }

      if (item[2]) {
        content += "@media ".concat(item[2], " {");
      }

      if (needLayer) {
        content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");
      }

      content += cssWithMappingToString(item);

      if (needLayer) {
        content += "}";
      }

      if (item[2]) {
        content += "}";
      }

      if (item[4]) {
        content += "}";
      }

      return content;
    }).join("");
  }; // import a list of modules into the list


  list.i = function i(modules, media, dedupe, supports, layer) {
    if (typeof modules === "string") {
      modules = [[null, modules, undefined]];
    }

    var alreadyImportedModules = {};

    if (dedupe) {
      for (var k = 0; k < this.length; k++) {
        var id = this[k][0];

        if (id != null) {
          alreadyImportedModules[id] = true;
        }
      }
    }

    for (var _k = 0; _k < modules.length; _k++) {
      var item = [].concat(modules[_k]);

      if (dedupe && alreadyImportedModules[item[0]]) {
        continue;
      }

      if (typeof layer !== "undefined") {
        if (typeof item[5] === "undefined") {
          item[5] = layer;
        } else {
          item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");
          item[5] = layer;
        }
      }

      if (media) {
        if (!item[2]) {
          item[2] = media;
        } else {
          item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");
          item[2] = media;
        }
      }

      if (supports) {
        if (!item[4]) {
          item[4] = "".concat(supports);
        } else {
          item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");
          item[4] = supports;
        }
      }

      list.push(item);
    }
  };

  return list;
};

/***/ }),

/***/ 81:
/***/ ((module) => {

"use strict";


module.exports = function (i) {
  return i[1];
};

/***/ }),

/***/ 466:
/***/ (() => {

(function (workerScript) {
	if (!/MSIE 10/i.test (navigator.userAgent)) {
		try {
			var blob = new Blob (["\
var fakeIdToId = {};\
onmessage = function (event) {\
	var data = event.data,\
		name = data.name,\
		fakeId = data.fakeId,\
		time;\
	if(data.hasOwnProperty('time')) {\
		time = data.time;\
	}\
	switch (name) {\
		case 'setInterval':\
			fakeIdToId[fakeId] = setInterval(function () {\
				postMessage({fakeId: fakeId});\
			}, time);\
			break;\
		case 'clearInterval':\
			if (fakeIdToId.hasOwnProperty (fakeId)) {\
				clearInterval(fakeIdToId[fakeId]);\
				delete fakeIdToId[fakeId];\
			}\
			break;\
		case 'setTimeout':\
			fakeIdToId[fakeId] = setTimeout(function () {\
				postMessage({fakeId: fakeId});\
				if (fakeIdToId.hasOwnProperty (fakeId)) {\
					delete fakeIdToId[fakeId];\
				}\
			}, time);\
			break;\
		case 'clearTimeout':\
			if (fakeIdToId.hasOwnProperty (fakeId)) {\
				clearTimeout(fakeIdToId[fakeId]);\
				delete fakeIdToId[fakeId];\
			}\
			break;\
	}\
}\
"]);
			// Obtain a blob URL reference to our worker 'file'.
			workerScript = window.URL.createObjectURL(blob);
		} catch (error) {
			/* Blob is not supported, use external script instead */
		}
	}
	var worker,
		fakeIdToCallback = {},
		lastFakeId = 0,
		maxFakeId = 0x7FFFFFFF, // 2 ^ 31 - 1, 31 bit, positive values of signed 32 bit integer
		logPrefix = 'HackTimer.js by turuslan: ';
	if (typeof (Worker) !== 'undefined') {
		function getFakeId () {
			do {
				if (lastFakeId == maxFakeId) {
					lastFakeId = 0;
				} else {
					lastFakeId ++;
				}
			} while (fakeIdToCallback.hasOwnProperty (lastFakeId));
			return lastFakeId;
		}
		try {
			worker = new Worker (workerScript);
			window.setInterval = function (callback, time /* , parameters */) {
				var fakeId = getFakeId ();
				fakeIdToCallback[fakeId] = {
					callback: callback,
					parameters: Array.prototype.slice.call(arguments, 2)
				};
				worker.postMessage ({
					name: 'setInterval',
					fakeId: fakeId,
					time: time
				});
				return fakeId;
			};
			window.clearInterval = function (fakeId) {
				if (fakeIdToCallback.hasOwnProperty(fakeId)) {
					delete fakeIdToCallback[fakeId];
					worker.postMessage ({
						name: 'clearInterval',
						fakeId: fakeId
					});
				}
			};
			window.setTimeout = function (callback, time /* , parameters */) {
				var fakeId = getFakeId ();
				fakeIdToCallback[fakeId] = {
					callback: callback,
					parameters: Array.prototype.slice.call(arguments, 2),
					isTimeout: true
				};
				worker.postMessage ({
					name: 'setTimeout',
					fakeId: fakeId,
					time: time
				});
				return fakeId;
			};
			window.clearTimeout = function (fakeId) {
				if (fakeIdToCallback.hasOwnProperty(fakeId)) {
					delete fakeIdToCallback[fakeId];
					worker.postMessage ({
						name: 'clearTimeout',
						fakeId: fakeId
					});
				}
			};
			worker.onmessage = function (event) {
				var data = event.data,
					fakeId = data.fakeId,
					request,
					parameters,
					callback;
				if (fakeIdToCallback.hasOwnProperty(fakeId)) {
					request = fakeIdToCallback[fakeId];
					callback = request.callback;
					parameters = request.parameters;
					if (request.hasOwnProperty ('isTimeout') && request.isTimeout) {
						delete fakeIdToCallback[fakeId];
					}
				}
				if (typeof (callback) === 'string') {
					try {
						callback = new Function (callback);
					} catch (error) {
						console.log (logPrefix + 'Error parsing callback code string: ', error);
					}
				}
				if (typeof (callback) === 'function') {
					callback.apply (window, parameters);
				}
			};
			worker.onerror = function (event) {
				console.log (event);
			};
		} catch (error) {
			console.log (logPrefix + 'Initialisation failed');
			console.error (error);
		}
	} else {
		console.log (logPrefix + 'Initialisation failed - HTML5 Web Worker is not supported');
	}
}) ('HackTimerWorker.js');


/***/ }),

/***/ 745:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";


var m = __webpack_require__(533);
if (true) {
  exports.createRoot = m.createRoot;
  exports.hydrateRoot = m.hydrateRoot;
} else { var i; }


/***/ }),

/***/ 600:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


        var result = __webpack_require__(529);

        if (result && result.__esModule) {
            result = result.default;
        }

        if (typeof result === "string") {
            module.exports = result;
        } else {
            module.exports = result.toString();
        }
    

/***/ }),

/***/ 632:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
const lib_1 = __webpack_require__(915);
const Home_1 = __webpack_require__(818);
const react_1 = __importStar(__webpack_require__(995));
const commonMeta = __webpack_require__(419);
const App = ({ username, formhash }) => {
    const [user, setUser] = (0, react_1.useState)();
    const [showHome, setShowHome] = (0, react_1.useState)(false);
    const [counter, setCounter] = (0, react_1.useState)({
        signBtn: 0,
        downloadBtn: 0,
        replyBtn: 0,
        thkBtn: 0,
    }); // 防止按钮重复点击
    (0, react_1.useEffect)(() => {
        if (!user) {
            (0, lib_1.creatUser)(username, formhash).then((user) => {
                (0, lib_1.launch)(user); // 启动自动签到、投票、加载原图等
                setUser(user);
            });
        }
    }, [username, formhash, user]);
    return (react_1.default.createElement("div", { className: "fixed z-50" }, showHome ? (user && (react_1.default.createElement(Home_1.Home, { setShowHome: () => {
            setShowHome(!showHome);
        }, user: user, counter: counter, setCounter: setCounter }))) : (react_1.default.createElement("button", { className: "h-12 w-12 fixed -left-8 top-1/2 block text-white bg-transparent vertical transition ease-in-out delay-150 hover:translate-x-9 hover:scale-110 duration-300 bg-cover bg-center hover:rotate-[360deg]", style: { backgroundImage: `url(${commonMeta.icon})` }, onClick: () => {
            if (user) {
                setShowHome(!showHome);
            }
            else {
                new lib_1.MessageBox('未获取到用户,请稍后再试');
            }
        } }))));
};
exports["default"] = App;


/***/ }),

/***/ 321:
/***/ ((__unused_webpack_module, exports) => {

"use strict";

/* eslint-disable @typescript-eslint/no-explicit-any */
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.Status = exports.RunStatus = exports.Mood = void 0;
var Mood;
(function (Mood) {
    Mood["kaixin"] = "kx";
    Mood["nanguo"] = "ng";
    Mood["yumen"] = "ym";
    Mood["wuliao"] = "wl";
    Mood["fennu"] = "nu";
    Mood["cahan"] = "ch";
    Mood["fendou"] = "fd";
    Mood["yonglan"] = "yl";
    Mood["shuai"] = "shuai";
})(Mood = exports.Mood || (exports.Mood = {}));
var Status;
(function (Status) {
    Status["online"] = "online";
    Status["offline"] = "offline";
})(Status || (Status = {}));
exports.Status = Status;
var RunStatus;
(function (RunStatus) {
    RunStatus["NotRunning"] = "\u672A\u8FD0\u884C";
    RunStatus["Waiting"] = "\u7B49\u5F85\u4E2D";
    RunStatus["Running"] = "\u8FD0\u884C\u4E2D";
    RunStatus["Error"] = "\u9519\u8BEF";
})(RunStatus || (RunStatus = {}));
exports.RunStatus = RunStatus;


/***/ }),

/***/ 237:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __rest = (this && this.__rest) || function (s, e) {
    var t = {};
    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
        t[p] = s[p];
    if (s != null && typeof Object.getOwnPropertySymbols === "function")
        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
                t[p[i]] = s[p[i]];
        }
    return t;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.Button = void 0;
const react_1 = __importDefault(__webpack_require__(995));
const Button = (_a) => {
    var { text, title = '', onClick, disabled } = _a, rest = __rest(_a, ["text", "title", "onClick", "disabled"]);
    return (react_1.default.createElement("button", Object.assign({}, rest, { title: title, type: "button", "data-mdb-ripple": "true", "data-mdb-ripple-color": "light", disabled: disabled, className: `mx-1 my-1 px-2 py-1 text-xs font-medium text-center text-white inline-block leading-tight uppercase rounded shadow-md ${disabled
            ? ' cursor-not-allowed bg-indigo-400 '
            : 'bg-indigo-600 hover:bg-indigo-700 hover:shadow-lg focus:bg-indigo-700 focus:shadow-lg active:bg-indigo-800 active:shadow-lg transition duration-150 ease-in-out  focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500'}`, onClick: onClick }), text));
};
exports.Button = Button;


/***/ }),

/***/ 84:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __rest = (this && this.__rest) || function (s, e) {
    var t = {};
    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
        t[p] = s[p];
    if (s != null && typeof Object.getOwnPropertySymbols === "function")
        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
                t[p[i]] = s[p[i]];
        }
    return t;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.Input = void 0;
const react_1 = __importDefault(__webpack_require__(995));
const Input = (_a) => {
    var { label, placeholder, autoComplete, value, type = 'text' } = _a, args = __rest(_a, ["label", "placeholder", "autoComplete", "value", "type"]);
    return (react_1.default.createElement(react_1.default.Fragment, null,
        label ? (react_1.default.createElement("label", { htmlFor: 'input' + label, className: "block m-1 text-xs font-medium text-gray-900" }, label)) : (''),
        react_1.default.createElement("input", Object.assign({}, args, { autoComplete: autoComplete, type: type, id: label ? 'input' + label : '', placeholder: placeholder, value: value, className: "py-1 pl-2 block w-full text-gray-900 bg-gray-50 rounded-lg border sm:text-xs focus:ring-blue-500 focus:border-blue-500 " }))));
};
exports.Input = Input;


/***/ }),

/***/ 653:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.Modal = void 0;
const react_1 = __importDefault(__webpack_require__(995));
const Modal = ({ header, footer, children, width, height, isShow = false, onClose }) => {
    if (!isShow) {
        return react_1.default.createElement(react_1.default.Fragment, null);
    }
    return (react_1.default.createElement("div", { className: "fixed top-0 right-0 h-full w-full left-0 z-50 overflow-y-auto overflow-x-hidden items-center justify-center flex bg-gray-900 bg-opacity-50" },
        react_1.default.createElement("div", { className: `relative rounded-lg bg-white shadow m-4 flex flex-col ${width} ${height}` },
            react_1.default.createElement("div", { className: "flex items-start justify-between rounded-t  border-gray-300 border-solid border-0 border-b p-5" },
                react_1.default.createElement("h3", { className: "text-xl font-medium text-gray-900 " }, header),
                react_1.default.createElement("button", { "aria-label": "Close", className: "ml-auto inline-flex items-center rounded-lg bg-transparent p-1.5 text-sm text-gray-400 hover:bg-gray-200 hover:text-gray-900 ", type: "button", onClick: onClose },
                    react_1.default.createElement("svg", { stroke: "currentColor", fill: "none", strokeWidth: "0", viewBox: "0 0 24 24", "aria-hidden": "true", className: "h-5 w-5", height: "1em", width: "1em", xmlns: "http://www.w3.org/2000/svg" },
                        react_1.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M6 18L18 6M6 6l12 12" })))),
            react_1.default.createElement("div", { className: "p-6 h-full overflow-auto" }, children),
            react_1.default.createElement("div", { className: "flex items-center rounded-b p-6 border-gray-300 border-solid border-0 border-t" }, footer))));
};
exports.Modal = Modal;


/***/ }),

/***/ 414:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.Panel = void 0;
const react_1 = __importDefault(__webpack_require__(995));
const Panel = ({ title, children }) => {
    return (react_1.default.createElement("div", { className: "border-b py-1" },
        react_1.default.createElement("p", { className: "text-center font-bold" }, title),
        react_1.default.createElement("div", { className: "flex flex-wrap" }, children)));
};
exports.Panel = Panel;


/***/ }),

/***/ 420:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
/* eslint-disable react/jsx-key */
const commonType_1 = __webpack_require__(321);
const tools_1 = __webpack_require__(633);
const react_1 = __importStar(__webpack_require__(995));
const react_table_1 = __webpack_require__(282);
const Button_1 = __webpack_require__(237);
const Toggle_1 = __webpack_require__(219);
const EditableCell = ({ value: initialValue, row: { index }, column: { id }, updateMyData, // This is a custom function that we supplied to our table instance
 }) => {
    // We need to keep and update the state of the cell normally
    const [value, setValue] = (0, react_1.useState)(initialValue);
    const onChange = (e) => {
        setValue(e.target.value);
    };
    // We'll only update the external data when the input is blurred
    const onBlur = () => {
        updateMyData(index, id, value);
    };
    // If the initialValue is changed external, sync it up with our state
    (0, react_1.useEffect)(() => {
        setValue(initialValue);
    }, [initialValue]);
    return (react_1.default.createElement("div", null,
        react_1.default.createElement("input", { className: "w-6 mx-1", value: value, onChange: onChange, onBlur: onBlur }),
        "\u5206\u949F/\u70B9\u51FB"));
};
const ToggleCell = ({ value, row: { index }, column: { id }, updateMyData, // This is a custom function that we supplied to our table instance
 }) => {
    const update = () => {
        updateMyData(index, id, value === commonType_1.Status.online ? commonType_1.Status.offline : commonType_1.Status.online);
    };
    return (react_1.default.createElement(Toggle_1.Toggle, { mykey: `${id}-${index}-${value}`, label: value === commonType_1.Status.online ? '已启用' : '未启用', onClick: update, checked: value === commonType_1.Status.online }));
};
const LightCell = ({ value }) => {
    const getLightColor = (value) => {
        switch (true) {
            case value === commonType_1.RunStatus.Running:
                return 'bg-green-400';
            case value === commonType_1.RunStatus.NotRunning:
                return 'bg-gray-400';
            case value === commonType_1.RunStatus.Error:
                return 'bg-red-400';
            case value === commonType_1.RunStatus.Waiting:
                return 'bg-blue-400';
            default:
                break;
        }
    };
    return (react_1.default.createElement("div", { title: "\u72B6\u6001\u4E3A\u2018\u7B49\u5F85\u4E2D\u2019\u65F6\u4E3A\u672A\u5230\u6267\u884C\u65F6\u95F4\u6BB5\uFF0C\u72B6\u6001\u4E3A\u2018\u9519\u8BEF\u2019\u65F6\u8BF7\u5237\u65B0\u9875\u9762\u91CD\u65B0\u8FD0\u884C", className: `flex items-center w-16 cursor-help` },
        react_1.default.createElement("span", { className: `rounded-md px-2 py-1 font-bold text-white ${getLightColor(value)}` }, value)));
};
const DeleteCell = ({ row: { index }, deleteData, // This is a custom function that we supplied to our table instance
 }) => {
    return react_1.default.createElement(Button_1.Button, { text: '删除', onClick: () => deleteData(index) });
};
function ReactTableCard({ title, data, updateMyData, deleteData, skipPageReset = true, searchBar = true, }) {
    const colHeader = (headerItem) => {
        if (headerItem === 'title') {
            return {
                Header: '标题',
                accessor: headerItem,
                Cell: (props) => {
                    return (react_1.default.createElement("strong", { title: props.value, className: "block whitespace-nowrap overflow-hidden overflow-ellipsis mx-1" }, props.value));
                },
            };
        }
        else if (headerItem === 'status') {
            return {
                Header: '启用状态',
                accessor: headerItem,
                Cell: ToggleCell,
            };
        }
        else if (headerItem === 'runStatus') {
            return {
                Header: '运行状态',
                accessor: headerItem,
                Cell: LightCell,
            };
        }
        else if (headerItem === 'cycle') {
            return {
                Header: '点击间隔时间',
                accessor: headerItem,
                Cell: EditableCell,
            };
        }
        else if (headerItem === 'delete') {
            return {
                Header: '操作',
                accessor: headerItem,
                Cell: DeleteCell,
            };
        }
        else if (headerItem === 'url') {
            return {
                Header: '帖子ID',
                accessor: headerItem,
                Cell: ({ value }) => {
                    return (react_1.default.createElement("a", { className: "border-b", title: value, target: "_blank", href: value, rel: "noreferrer" }, (0, tools_1.getTid)(value)));
                },
            };
        }
        else if (headerItem === 'times') {
            return {
                Header: '点击次数',
                accessor: headerItem,
                Cell: ({ value }) => {
                    return react_1.default.createElement("span", null, value + ' 次');
                },
            };
        }
        else if (headerItem === 'nextClickTime') {
            return {
                Header: '下次点击',
                accessor: headerItem,
                Cell: ({ value }) => {
                    return react_1.default.createElement("span", null, new Date(value).toLocaleString());
                },
            };
        }
        else if (headerItem === 'retry') {
            return {
                Header: '重试次数',
                accessor: headerItem,
                Cell: ({ value }) => {
                    return react_1.default.createElement("span", null, value);
                },
            };
        }
        else if (headerItem === 'runTime') {
            return {
                Header: '运行时段',
                accessor: headerItem,
                Cell: ({ value }) => {
                    return react_1.default.createElement("span", null, value ? value.startTime + ':00~' + value.endTime + ':59' : '24h');
                },
            };
        }
        else {
            return {
                Header: headerItem,
                accessor: headerItem,
            };
        }
    };
    const memoColumns = (0, react_1.useMemo)(() => {
        const headers = Object.keys(data[0]).map(colHeader);
        // push columns
        return headers;
    }, [data]);
    const memoData = (0, react_1.useMemo)(() => data, [data]);
    const memoTitle = (0, react_1.useMemo)(() => title, [title]);
    const defaultSort = () => {
        const headers = Object.keys(data[0]).map(colHeader);
        return headers.filter((col) => (col.Header === 'name' ? { id: 'total', desc: true } : { id: 'sum', desc: true }));
    };
    const defaultColumn = {
        Cell: EditableCell,
    };
    const tableInstance = (0, react_table_1.useTable)({
        columns: memoColumns,
        data: memoData,
        initialState: {
            // sortBy: [defaultSort()],
            pageSize: 20,
        },
        // defaultColumn,
        autoResetPage: !skipPageReset,
        disableSortRemove: true,
        updateMyData,
        deleteData,
    }, react_table_1.useGlobalFilter, react_table_1.useSortBy, react_table_1.usePagination);
    const { getTableProps, getTableBodyProps, headerGroups, prepareRow, setGlobalFilter, page, canPreviousPage, canNextPage, pageOptions, pageCount, gotoPage, nextPage, previousPage, setPageSize, state: { pageIndex, pageSize, globalFilter }, } = tableInstance;
    return (react_1.default.createElement("div", null,
        react_1.default.createElement("div", { className: "bg-white px-2 py-4" },
            react_1.default.createElement("h3", { className: "text-lg px-2 py-2 leading-6 font-medium text-gray-900" }, memoTitle),
            searchBar ? (react_1.default.createElement("div", { className: "mx-2 flex-1 relative text-gray-500 focus-within:text-gray-400" },
                react_1.default.createElement("div", { className: "absolute inset-y-0 left-0 pl-1 flex items-center pointer-events-none" },
                    react_1.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", className: "h-4 w-4", height: "25", width: "25" },
                        react_1.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }))),
                react_1.default.createElement("input", { className: "pl-5 block shadow-sm border-2 transition text-gray-900 disabled:opacity-25 focus:border-gray-100 focus:outline-none focus:ring-0 duration-150 ease-in-out sm:text-sm sm:leading-5", type: "text", value: globalFilter || '', onChange: (e) => setGlobalFilter(e.target.value) }))) : (''),
            react_1.default.createElement("table", Object.assign({}, getTableProps(), { className: "mb-4 min-w-full divide-y divide-gray-100 table-auto" }),
                react_1.default.createElement("thead", { className: "bg-gray-50 text-xs uppercase text-gray-700 " }, headerGroups.map((headerGroup) => (react_1.default.createElement("tr", Object.assign({}, headerGroup.getHeaderGroupProps()), headerGroup.headers.map((column) => (react_1.default.createElement("th", Object.assign({}, column.getHeaderProps(column.getSortByToggleProps()), { className: "px-2 py-3 text-left text-xs text-gray-500 uppercase tracking-wider" }),
                    react_1.default.createElement("div", { className: "flex" },
                        column.render('Header'),
                        column.isSorted ? (column.isSortedDesc ? (react_1.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", className: "h-4 w-4", height: "16", width: "16" },
                            react_1.default.createElement("path", { fillRule: "evenodd", d: "M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z", clipRule: "evenodd" }))) : (react_1.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", className: "h-4 w-4", height: "16", width: "16" },
                            react_1.default.createElement("path", { fillRule: "evenodd", d: "M14.707 12.707a1 1 0 01-1.414 0L10 9.414l-3.293 3.293a1 1 0 01-1.414-1.414l4-4a1 1 0 011.414 0l4 4a1 1 0 010 1.414z", clipRule: "evenodd" })))) : (''))))))))),
                react_1.default.createElement("tbody", Object.assign({ className: "w-full divide-y text-left text-sm text-gray-500 ", role: "table" }, getTableBodyProps()), page.map((row) => {
                    prepareRow(row);
                    return (react_1.default.createElement("tr", Object.assign({}, row.getRowProps(), { className: "hover:bg-gray-200 bg-white" }), row.cells.map((cell) => {
                        return (react_1.default.createElement("td", Object.assign({}, cell.getCellProps(), { className: "text-xs p-0 h-8 whitespace-nowrap font-medium text-gray-900 max-w-[150px] overflow-hidden text-ellipsis" }), cell.render('Cell')));
                    })));
                }))),
            react_1.default.createElement("div", { className: "flex justify-center bg-gray-100" },
                react_1.default.createElement("div", { className: "px-2 text-left text-xs text-gray-500 tracking-wider" },
                    react_1.default.createElement("button", { className: "bg-gray-200 hover:bg-gray-100 font-bold py-1 px-2 border-b-2 border-gray-400 hover:border-gray-200 rounded", onClick: () => gotoPage(0), disabled: !canPreviousPage }, '<< 第一页'),
                    ' ',
                    react_1.default.createElement("button", { className: "bg-gray-200 hover:bg-gray-100 font-bold py-1 px-2 border-b-2 border-gray-400 hover:border-gray-200 rounded", onClick: () => previousPage(), disabled: !canPreviousPage }, '< 上一页'),
                    ' ',
                    react_1.default.createElement("button", { className: "bg-gray-200 hover:bg-gray-100 font-bold py-1 px-2 border-b-2 border-gray-400 hover:border-gray-200 rounded", onClick: () => nextPage(), disabled: !canNextPage }, '下一页 >'),
                    ' ',
                    react_1.default.createElement("button", { className: "bg-gray-200 hover:bg-gray-100 font-bold py-1 px-2 border-b-2 border-gray-400 hover:border-gray-200 rounded", onClick: () => gotoPage(pageCount - 1), disabled: !canNextPage }, '最后一页 >>'),
                    ' ',
                    react_1.default.createElement("span", null,
                        "| \u7B2C",
                        ' ',
                        react_1.default.createElement("strong", null,
                            pageIndex + 1,
                            " \u9875\uFF0C\u5171 ",
                            pageOptions.length,
                            " \u9875"),
                        ' '),
                    react_1.default.createElement("span", null,
                        "| \u8DF3\u8F6C\u5230\u7B2C",
                        ' ',
                        react_1.default.createElement("input", { className: "w-8 bg-gray-100 hover:bg-gray-200", type: "number", defaultValue: pageIndex + 1, onChange: (e) => {
                                const page = e.target.value ? Number(e.target.value) - 1 : 0;
                                gotoPage(page);
                            } }),
                        ' ',
                        "\u9875"),
                    ' ',
                    react_1.default.createElement("select", { className: "bg-gray-100 hover:bg-gray-200 pl-1", value: pageSize, onChange: (e) => {
                            setPageSize(Number(e.target.value));
                        } }, [10, 20, 50].map((pageSize) => (react_1.default.createElement("option", { key: pageSize, value: pageSize },
                        "\u663E\u793A",
                        pageSize,
                        "\u6761")))))))));
}
exports["default"] = ReactTableCard;


/***/ }),

/***/ 815:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.TextArea = void 0;
const react_1 = __importDefault(__webpack_require__(995));
const TextArea = ({ label, placeholder, onChange, value, rows = 3, cols }) => {
    return (react_1.default.createElement(react_1.default.Fragment, null,
        react_1.default.createElement("label", { htmlFor: 'textarea' + label, className: "block m-1 text-xs font-medium text-gray-900 " }, label),
        react_1.default.createElement("textarea", { className: "px-2 block w-full text-gray-900 bg-gray-50 rounded-lg border sm:text-xs focus:ring-blue-500 focus:border-blue-500 ", id: 'textarea' + label, rows: rows, cols: cols, placeholder: placeholder, onChange: (e) => {
                onChange(e.target.value);
            }, value: value })));
};
exports.TextArea = TextArea;


/***/ }),

/***/ 219:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.Toggle = void 0;
const react_1 = __importStar(__webpack_require__(995));
const Toggle = ({ label, checked, title, mykey = '-', onClick }) => {
    const [selected, setSelected] = (0, react_1.useState)(checked);
    (0, react_1.useEffect)(() => {
        setSelected(checked);
    }, [checked]);
    return (react_1.default.createElement(react_1.default.Fragment, null,
        react_1.default.createElement("label", { key: label + mykey, title: title, htmlFor: 'toggle-' + mykey + label, className: "mx-1 my-1 flex items-center cursor-pointer relative" },
            react_1.default.createElement("input", { type: "checkbox", id: 'toggle-' + mykey + label, className: "sr-only", checked: selected, onClick: () => {
                    setSelected(!selected);
                }, onChange: (e) => {
                    onClick(e.target.checked);
                } }),
            react_1.default.createElement("div", { className: "toggle-bg bg-gray-300 border-2 border-gray-200 h-4 w-7 rounded-full" }),
            react_1.default.createElement("span", { className: "ml-1 text-gray-900 text-xs" }, label))));
};
exports.Toggle = Toggle;


/***/ }),

/***/ 740:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.Toggle = exports.TextArea = exports.ReactTableCard = exports.Panel = exports.Modal = exports.Input = exports.Button = void 0;
var Button_1 = __webpack_require__(237);
Object.defineProperty(exports, "Button", ({ enumerable: true, get: function () { return Button_1.Button; } }));
var Input_1 = __webpack_require__(84);
Object.defineProperty(exports, "Input", ({ enumerable: true, get: function () { return Input_1.Input; } }));
var Modal_1 = __webpack_require__(653);
Object.defineProperty(exports, "Modal", ({ enumerable: true, get: function () { return Modal_1.Modal; } }));
var Panel_1 = __webpack_require__(414);
Object.defineProperty(exports, "Panel", ({ enumerable: true, get: function () { return Panel_1.Panel; } }));
var Table_1 = __webpack_require__(420);
Object.defineProperty(exports, "ReactTableCard", ({ enumerable: true, get: function () { return __importDefault(Table_1).default; } }));
var TextArea_1 = __webpack_require__(815);
Object.defineProperty(exports, "TextArea", ({ enumerable: true, get: function () { return TextArea_1.TextArea; } }));
var Toggle_1 = __webpack_require__(219);
Object.defineProperty(exports, "Toggle", ({ enumerable: true, get: function () { return Toggle_1.Toggle; } }));


/***/ }),

/***/ 629:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
const app_1 = __importDefault(__webpack_require__(632));
const lib_1 = __webpack_require__(915);
__webpack_require__(466); // 定时器不会因为窗口隐藏而降频
const react_1 = __importDefault(__webpack_require__(995));
const client_1 = __webpack_require__(745);
const start = () => {
    (0, lib_1.skipPhoneValidate)();
    const username = (0, lib_1.getUserName)();
    const formhash = (0, lib_1.getFormhash)();
    if (username && formhash) {
        Promise.resolve().then(() => __importStar(__webpack_require__(19)));
        // 初始化消息盒子
        lib_1.MessageBox.generate();
        // 添加根元素
        const rootDiv = document.createElement('div');
        rootDiv.id = 'jkforum-helper';
        document.body.prepend(rootDiv);
        const root = (0, client_1.createRoot)(rootDiv); // createRoot(container!) if you use TypeScript
        root.render(react_1.default.createElement(app_1.default, { username: username, formhash: formhash }));
    }
};
if (true) {
    start();
}
else {}


/***/ }),

/***/ 516:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.postDataCdata = exports.postData = exports.getData = void 0;
const tools_1 = __webpack_require__(633);
const _1 = __webpack_require__(915);
// GM_xmlhttpRequest GET异步通用模块
function getData(url, type = "document" /* DOCUMENT */, usermethod = "GET" /* GET */) {
    return new Promise((resolve, reject) => {
        GM_xmlhttpRequest({
            method: usermethod,
            url: url,
            responseType: type,
            timeout: 5 * 60 * 1000,
            onload: function (response) {
                if (response.status >= 200 && response.status < 400) {
                    resolve(response.response);
                }
                else {
                    reject(response);
                }
            },
            onerror: function (error) {
                new _1.MessageBox('网络错误');
                reject(error);
            },
            ontimeout: () => {
                new _1.MessageBox('网络超时', 'none', "LOG_POP_GM" /* LOG_POP_GM */);
                reject('timeout');
            },
        });
    });
}
exports.getData = getData;
function postDataCdata(url, postData, responseType = "document" /* DOCUMENT */, usermethod = "POST" /* POST */, contentType = "application/x-www-form-urlencoded" /* FORM */) {
    return new Promise((resolve, reject) => {
        GM_xmlhttpRequest({
            method: usermethod,
            url: url,
            headers: {
                'Content-Type': contentType,
            },
            data: postData,
            responseType: responseType,
            timeout: 1 * 60 * 1000,
            onload: function (response) {
                if (response.status >= 200 && response.status < 400) {
                    resolve((0, tools_1.turnCdata)(response.response));
                }
                else {
                    new _1.MessageBox('请求错误:' + response.status);
                    reject(response.status);
                }
            },
            onerror: function (error) {
                new _1.MessageBox('网络错误');
                reject(error);
            },
            ontimeout: () => {
                new _1.MessageBox('网络超时', 'none', "LOG_POP_GM" /* LOG_POP_GM */);
                reject('timeout');
            },
        });
    });
}
exports.postDataCdata = postDataCdata;
// 正常的post
function postData(url, data, { responseType = "document" /* DOCUMENT */, usermethod = "POST" /* POST */, contentType = "application/x-www-form-urlencoded" /* FORM */, authorization, cookie, } = {
    responseType: "document" /* DOCUMENT */,
    usermethod: "POST" /* POST */,
    contentType: "application/x-www-form-urlencoded" /* FORM */,
}) {
    const headers = {
        'content-type': contentType,
    };
    if (authorization) {
        headers.authorization = authorization;
    }
    if (cookie) {
        headers.cookie = cookie;
    }
    return new Promise((resolve, reject) => {
        GM_xmlhttpRequest({
            method: usermethod,
            url,
            headers,
            data,
            responseType: responseType,
            timeout: 1 * 60 * 1000,
            onload: function (response) {
                if (response.status >= 200 && response.status < 400) {
                    resolve(response.response);
                }
                else {
                    reject(response);
                }
            },
            onerror: function (error) {
                reject(error);
            },
            ontimeout: () => {
                new _1.MessageBox('网络超时', 'none', "LOG_POP_GM" /* LOG_POP_GM */);
                reject('timeout');
            },
        });
    });
}
exports.postData = postData;


/***/ }),

/***/ 342:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.autoPost = void 0;
const tools_1 = __webpack_require__(633);
const ajax_1 = __webpack_require__(516);
const message_1 = __webpack_require__(244);
const autoPost = (user) => __awaiter(void 0, void 0, void 0, function* () {
    var _a, _b;
    if ((_a = user.posts) === null || _a === void 0 ? void 0 : _a.length) {
        if (confirm('已有历史文章,是否使用历史文章发文')) {
            if (!((_b = user.posts) === null || _b === void 0 ? void 0 : _b.length)) {
                return alert('没有读取到文章');
            }
            const post = user.posts[user.posts.length - 1];
            yield newThread(post, user.formhash);
            return;
        }
    }
    if (!location.href.includes('mod=post&action=newthread')) {
        return alert('请进入发表文章页面,输入好文章后再点击自动发文,第一次发文后会保存,之后发文无需再次进入发表文章页面');
    }
    const form = document.querySelector('#postform');
    if (!form) {
        return alert('未找到发帖输入框');
    }
    const inputTime = prompt('请输入回帖间隔时间(单位分钟,默认361分钟)', '361');
    if (!Number.isInteger(Number(inputTime))) {
        return alert('时间未输入或者数值错误');
    }
    if (!form.message.value || !form.message.value) {
        return alert('请输入文章内容');
    }
    const newPost = {
        typeid: form.typeid.value,
        subject: form.subject.value,
        message: form.message.value,
        allownoticeauthor: form.allownoticeauthor.value,
        postUrl: location.href + '&extra=&topicsubmit=yes',
        postTime: Number(inputTime) * 60 * 1000,
    };
    if (!user.posts) {
        user.posts = [];
    }
    user.posts.push(newPost);
    GM_setValue(user.username, user); //保存当天日// today 初始化
    yield newThread(newPost, user.formhash);
});
exports.autoPost = autoPost;
const newThread = (post, formhash) => __awaiter(void 0, void 0, void 0, function* () {
    var _c;
    const currentUnixTimestamp = Math.floor(Date.now() / 1000);
    const data = (0, tools_1.urlSearchParams)({
        formhash: formhash,
        posttime: currentUnixTimestamp,
        wysiwyg: '1',
        typeid: post.typeid,
        subject: post.subject,
        message: post.message,
        accept_checkbox: 'on',
        'localid[]': 1,
        'imglocalid[]': 1,
        uploadalbum: -2,
        usesig: 1,
        allownoticeauthor: post.allownoticeauthor,
    }).toString();
    try {
        const res = yield (0, ajax_1.postData)(post.postUrl, data, {
            responseType: "document" /* DOCUMENT */,
            usermethod: "POST" /* POST */,
            contentType: "application/x-www-form-urlencoded" /* FORM */,
        });
        const msg = (_c = res === null || res === void 0 ? void 0 : res.querySelector('#messagetext p')) === null || _c === void 0 ? void 0 : _c.textContent;
        if (msg) {
            new message_1.MessageBox(msg);
        }
        else {
            new message_1.MessageBox(`发文成功,到设置时间(${post.postTime / 1000 / 60}分钟)后将会再次自动发表文章`);
            setTimeout(() => {
                newThread(post, formhash);
            }, post.postTime);
        }
    }
    catch (error) {
        new message_1.MessageBox('发文失败:' + JSON.stringify(error));
    }
});


/***/ }),

/***/ 134:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.noDisplayPic = exports.downloadImgs = void 0;
const ConcurrencyPromisePool_1 = __webpack_require__(287);
const file_saver_1 = __webpack_require__(581);
const jszip_1 = __importDefault(__webpack_require__(583));
const _1 = __webpack_require__(915);
function downloadImgs(user, counter, setCounter) {
    var _a;
    // 防重复点击
    setCounter(Object.assign(Object.assign({}, counter), { downloadBtn: 1 }));
    const imgsUrls = []; // 图片下载链接
    const imgsTitles = []; // 图片名称
    const foName = document.querySelector('.title-cont h1');
    if (!foName) {
        new _1.MessageBox('没有帖子标题!');
        return setCounter(Object.assign(Object.assign({}, counter), { downloadBtn: 0 }));
    }
    const folderName = foName.innerHTML.trim().replace(/\.+/g, '-');
    const pcbImg = document.querySelectorAll('.pcb img'); // 所有帖子楼层的图片,逐个过滤
    if (pcbImg.length) {
        for (let i = 0; i < pcbImg.length; i++) {
            //遍历图片列表
            const img = pcbImg[i];
            if (img.title && img.getAttribute('file') && ((_a = img.getAttribute('file')) === null || _a === void 0 ? void 0 : _a.includes('mymypic.net'))) {
                const reg = /\./g;
                if (!reg.test(img.title)) {
                    // 文件格式校验
                    if (reg.test(img.alt)) {
                        // 文件格式修复
                        img.title = img.alt;
                    }
                    else {
                        new _1.MessageBox('获取图片名失败!');
                        setCounter(Object.assign(Object.assign({}, counter), { downloadBtn: 0 }));
                        return;
                    }
                }
                const imgTitles = img.title.split('.');
                const title = `${imgTitles[imgTitles.length - 2]}-${i + 1}.${imgTitles[imgTitles.length - 1]}`; // 标题 +i.jpg,防重名!
                imgsTitles.push(title); // 保存下载名称到数组
                const imgAtrrFile = img.getAttribute('file');
                imgAtrrFile && imgsUrls.push(imgAtrrFile.split('.thumb.')[0]); // 保存下载链接到数组
            }
            else if (!img.getAttribute('file') && img.src.includes('mymypic.net')) {
                const nameSrc = img.src.split('/');
                imgsTitles.push(nameSrc[nameSrc.length - 1]); // 保存下载名称到数组
                imgsUrls.push(img.src.split('.thumb.')[0]); // 保存下载链接到数组
            }
            else {
                // console.log(img.src, '跨域请求,不可下载外链图片!');
                // new MessageBox('跨域请求,不可下载外链图片!');
            }
        }
        if (imgsUrls.length && imgsTitles.length) {
            batchDownload(imgsUrls, imgsTitles, folderName, user, counter, setCounter);
        }
        else {
            new _1.MessageBox('没有可下载的图片!');
            setCounter(Object.assign(Object.assign({}, counter), { downloadBtn: 0 }));
            return 0;
        }
    }
    else {
        new _1.MessageBox('没有图片!');
        setCounter(Object.assign(Object.assign({}, counter), { downloadBtn: 0 }));
        return 0;
    }
}
exports.downloadImgs = downloadImgs;
// 批量下载 顺序
function batchDownload(imgsUrls, imgsTitles, folderName, user, counter, setCounter) {
    const zip = new jszip_1.default();
    const promises = [];
    const mesIdH = new _1.MessageBox('正在下载...', 'none'); // 永久消息
    const mesIdP = new _1.MessageBox('...', 'none'); // 永久消息
    for (let index = 0; index < imgsUrls.length; index++) {
        const item = imgsUrls[index];
        // 包装成 promise
        const promise = () => {
            const file_name = imgsTitles[index]; // 获取文件名
            mesIdH.update(`正在下载:第 ${index + 1} / ${imgsUrls.length} 张,文件名:${file_name}`);
            return (0, _1.getData)(item, "blob" /* BLOB */)
                .then((blob) => {
                const data = blob;
                // 下载文件, 并存成ArrayBuffer对象
                zip.file(file_name, data, {
                    binary: true,
                }); // 逐个添加文件
                mesIdP.update(`第 ${index + 1} 张,文件名:${file_name},大小:${(data.size / 1024).toFixed(0)} Kb,下载完成!等待压缩...`);
            })
                .catch((err) => {
                // 移除消息;
                if (err.responseText) {
                    const domParser = new DOMParser();
                    const xmlDoc = domParser.parseFromString(err.responseText, 'text/html');
                    mesIdP.update(`第 ${index + 1} 张,请求错误:${xmlDoc.body.innerHTML}`);
                }
                else if (err.status) {
                    console.error(err.status);
                }
                else {
                    console.error(err);
                }
                return -1; // 错误处理, 标记错误并返回
            });
        };
        promises.push(promise);
    }
    const pool = new ConcurrencyPromisePool_1.ConcurrencyPromisePool(user.limit);
    pool.all(promises).then((results) => {
        mesIdH.remove();
        counter.downloadBtn = 0;
        for (let i = 0; i < results.length; i++) {
            if (results[i] == -1) {
                // new MessageBox("文件缺失!")
                counter.downloadBtn++;
            }
        }
        if (results.length == counter.downloadBtn) {
            new _1.MessageBox('全部图片下载失败!');
            mesIdP.remove();
            setCounter(Object.assign(Object.assign({}, counter), { downloadBtn: 0 }));
            return;
        }
        if (counter.downloadBtn) {
            if (!confirm(`检测到文件缺失 ${counter.downloadBtn} 张,是否继续压缩?`)) {
                mesIdP.remove();
                setCounter(Object.assign(Object.assign({}, counter), { downloadBtn: 0 }));
                return;
            }
        }
        mesIdP.update('正在压缩打包,大文件请耐心等待...');
        zip
            .generateAsync({
            type: 'blob',
        })
            .then((content) => {
            // 生成二进制流
            mesIdP.remove();
            setCounter(Object.assign(Object.assign({}, counter), { downloadBtn: 0 }));
            (0, file_saver_1.saveAs)(content, `${folderName} [${imgsUrls.length}P]`); // 利用file-saver保存文件,大文件需等待很久
        });
    });
}
function noDisplayPic() {
    var _a;
    const pcbImg = document.querySelectorAll('.pcb img'); // 所有帖子楼层的图片,逐个过滤
    if (pcbImg.length) {
        for (let i = 0; i < pcbImg.length; i++) {
            //遍历图片列表
            const img = pcbImg[i];
            // 前10张
            if (img.title && img.getAttribute('file') && ((_a = img.getAttribute('file')) === null || _a === void 0 ? void 0 : _a.includes('mymypic.net'))) {
                img.src = 'https://www.jkforum.net/static/image/common/none.gif';
                // new MessageBox("屏蔽图片成功");
                // 懒加载部分
                const observer = new MutationObserver(() => {
                    // 监听元素子节点属性变化,然后屏蔽链接
                    if (img.src != 'https://www.jkforum.net/static/image/common/none.gif') {
                        observer.disconnect(); // 断开监听
                        console.log('屏蔽图片成功:', img.src);
                        img.src = 'https://www.jkforum.net/static/image/common/none.gif';
                    }
                }); // 建立监听器
                observer.observe(img, {
                    // 开始监听
                    attributes: true,
                });
            }
        }
        new _1.MessageBox('屏蔽图片完成!');
    }
    else {
        new _1.MessageBox('没有图片!');
    }
}
exports.noDisplayPic = noDisplayPic;


/***/ }),

/***/ 662:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.setFastReply = void 0;
const tools_1 = __webpack_require__(633);
const _1 = __webpack_require__(915);
function setFastReply(user) {
    return __awaiter(this, void 0, void 0, function* () {
        // 设置快速回复
        try {
            const htmlData = yield (0, _1.getData)(user.fastReplyUrl);
            const options = htmlData.querySelectorAll('#rqcss select option');
            const fastReply = []; //返回数组
            if (options.length) {
                options.forEach((option) => {
                    if (option.value) {
                        //去掉空值
                        fastReply.push((0, tools_1.replaceHtml)(option.value)); //去掉需要转义的内容
                    }
                });
            }
            else {
                new _1.MessageBox('获取快速回复失败!');
                return user;
            }
            if (fastReply.length) {
                user.fastReply = fastReply;
                new _1.MessageBox('获取快速回复成功!');
            }
            else {
                new _1.MessageBox('获取快速回复失败!');
            }
            return user;
        }
        catch (e) {
            console.error(e);
            return user;
        }
    });
}
exports.setFastReply = setFastReply;


/***/ }),

/***/ 825:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.skipPhoneValidate = void 0;
const _1 = __webpack_require__(915);
const AccessTokenUrl = 'https://jkf.hare200.com/gapi/pan.general.member.MemberServiceV2/AccessToken';
const SigninUrl = 'https://www.jkforum.net/api/pan/sso_signin.php';
const genButton = (text, foo) => {
    const b = document.createElement('button');
    b.textContent = text;
    b.style.cssText = 'margin:16px 10px 0px 0px;float:left';
    if (foo) {
        b.addEventListener('click', foo);
    }
    return b;
};
const skipPhoneValidate = () => {
    var _a;
    if (location.href.includes('https://www.jkforum.net/member.php')) {
        (_a = document.querySelector('.status_loginned')) === null || _a === void 0 ? void 0 : _a.append(genButton('登录前点击按钮跳过手机验证', hackLogin));
    }
};
exports.skipPhoneValidate = skipPhoneValidate;
const hackLogin = () => {
    const xhrSend = XMLHttpRequest.prototype.send;
    let isAuthMethod = false;
    XMLHttpRequest.prototype.send = function (...args) {
        return __awaiter(this, void 0, void 0, function* () {
            if (isAuthMethod) {
                const authBase64 = args[0];
                const response = yield (0, _1.postData)(AccessTokenUrl, authBase64, {
                    contentType: "application/grpc-web-text" /* GRCP */,
                    responseType: "application/grpc-web-text" /* GRCP */,
                    usermethod: "POST" /* POST */,
                });
                const reg = /[ey].*�/;
                const results = response.match(reg);
                if (results) {
                    const jwt = results[0].replace(/�/, '');
                    yield (0, _1.postData)(SigninUrl, undefined, {
                        contentType: "application/grpc-web-text" /* GRCP */,
                        authorization: 'Bearer ' + jwt,
                        responseType: "application/grpc-web-text" /* GRCP */,
                    });
                    window.location.reload();
                }
            }
            return xhrSend.apply(this, args);
        });
    };
    const xhrOpen = XMLHttpRequest.prototype.open;
    XMLHttpRequest.prototype.open = function (method, url) {
        if (url === AccessTokenUrl) {
            isAuthMethod = true;
        }
        else {
            isAuthMethod = false;
        }
        return xhrOpen.apply(this, [method, url, true]);
    };
};


/***/ }),

/***/ 915:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.setTimeoutWorker = exports.setIntervalWorker = exports.autoVoted = exports.getUserName = exports.getUserFromName = exports.getFormhash = exports.creatUser = exports.User = exports.autoThk = exports.timeControl = exports.sign = exports.resetReplyData = exports.replyOrThk = exports.addPageBatch = exports.addOnePage = exports.autoPlay = exports.addPlayEvent = exports.autoPay = exports.loadOriginImage = exports.autofillCaptcha = exports.MessageBox = exports.swThk = exports.swRePic = exports.swPay = exports.swDailyTask = exports.checkUpdate = exports.launch = exports.autoDailyTasks = exports.skipPhoneValidate = exports.setFastReply = exports.noDisplayPic = exports.downloadImgs = exports.postDataCdata = exports.postData = exports.getData = void 0;
var ajax_1 = __webpack_require__(516);
Object.defineProperty(exports, "getData", ({ enumerable: true, get: function () { return ajax_1.getData; } }));
Object.defineProperty(exports, "postData", ({ enumerable: true, get: function () { return ajax_1.postData; } }));
Object.defineProperty(exports, "postDataCdata", ({ enumerable: true, get: function () { return ajax_1.postDataCdata; } }));
var downloadPicture_1 = __webpack_require__(134);
Object.defineProperty(exports, "downloadImgs", ({ enumerable: true, get: function () { return downloadPicture_1.downloadImgs; } }));
Object.defineProperty(exports, "noDisplayPic", ({ enumerable: true, get: function () { return downloadPicture_1.noDisplayPic; } }));
var fastReply_1 = __webpack_require__(662);
Object.defineProperty(exports, "setFastReply", ({ enumerable: true, get: function () { return fastReply_1.setFastReply; } }));
var hackLogin_1 = __webpack_require__(825);
Object.defineProperty(exports, "skipPhoneValidate", ({ enumerable: true, get: function () { return hackLogin_1.skipPhoneValidate; } }));
var launch_1 = __webpack_require__(450);
Object.defineProperty(exports, "autoDailyTasks", ({ enumerable: true, get: function () { return launch_1.autoDailyTasks; } }));
Object.defineProperty(exports, "launch", ({ enumerable: true, get: function () { return launch_1.launch; } }));
var menuCommand_1 = __webpack_require__(817);
Object.defineProperty(exports, "checkUpdate", ({ enumerable: true, get: function () { return menuCommand_1.checkUpdate; } }));
Object.defineProperty(exports, "swDailyTask", ({ enumerable: true, get: function () { return menuCommand_1.swDailyTask; } }));
Object.defineProperty(exports, "swPay", ({ enumerable: true, get: function () { return menuCommand_1.swPay; } }));
Object.defineProperty(exports, "swRePic", ({ enumerable: true, get: function () { return menuCommand_1.swRePic; } }));
Object.defineProperty(exports, "swThk", ({ enumerable: true, get: function () { return menuCommand_1.swThk; } }));
var message_1 = __webpack_require__(244);
Object.defineProperty(exports, "MessageBox", ({ enumerable: true, get: function () { return message_1.MessageBox; } }));
var ocr_1 = __webpack_require__(2);
Object.defineProperty(exports, "autofillCaptcha", ({ enumerable: true, get: function () { return ocr_1.autofillCaptcha; } }));
var originImage_1 = __webpack_require__(87);
Object.defineProperty(exports, "loadOriginImage", ({ enumerable: true, get: function () { return originImage_1.loadOriginImage; } }));
var pay_1 = __webpack_require__(363);
Object.defineProperty(exports, "autoPay", ({ enumerable: true, get: function () { return pay_1.autoPay; } }));
var play_1 = __webpack_require__(687);
Object.defineProperty(exports, "addPlayEvent", ({ enumerable: true, get: function () { return play_1.addPlayEvent; } }));
Object.defineProperty(exports, "autoPlay", ({ enumerable: true, get: function () { return play_1.autoPlay; } }));
var replyAndThank_1 = __webpack_require__(872);
Object.defineProperty(exports, "addOnePage", ({ enumerable: true, get: function () { return replyAndThank_1.addOnePage; } }));
Object.defineProperty(exports, "addPageBatch", ({ enumerable: true, get: function () { return replyAndThank_1.addPageBatch; } }));
Object.defineProperty(exports, "replyOrThk", ({ enumerable: true, get: function () { return replyAndThank_1.replyOrThk; } }));
var resetReplyData_1 = __webpack_require__(821);
Object.defineProperty(exports, "resetReplyData", ({ enumerable: true, get: function () { return resetReplyData_1.resetReplyData; } }));
var sign_1 = __webpack_require__(943);
Object.defineProperty(exports, "sign", ({ enumerable: true, get: function () { return sign_1.sign; } }));
Object.defineProperty(exports, "timeControl", ({ enumerable: true, get: function () { return sign_1.timeControl; } }));
var thank_1 = __webpack_require__(226);
Object.defineProperty(exports, "autoThk", ({ enumerable: true, get: function () { return thank_1.autoThk; } }));
var user_1 = __webpack_require__(506);
Object.defineProperty(exports, "User", ({ enumerable: true, get: function () { return user_1.User; } }));
Object.defineProperty(exports, "creatUser", ({ enumerable: true, get: function () { return user_1.creatUser; } }));
Object.defineProperty(exports, "getFormhash", ({ enumerable: true, get: function () { return user_1.getFormhash; } }));
Object.defineProperty(exports, "getUserFromName", ({ enumerable: true, get: function () { return user_1.getUserFromName; } }));
Object.defineProperty(exports, "getUserName", ({ enumerable: true, get: function () { return user_1.getUserName; } }));
var vote_1 = __webpack_require__(608);
Object.defineProperty(exports, "autoVoted", ({ enumerable: true, get: function () { return vote_1.autoVoted; } }));
var webWorker_1 = __webpack_require__(67);
Object.defineProperty(exports, "setIntervalWorker", ({ enumerable: true, get: function () { return webWorker_1.setIntervalWorker; } }));
Object.defineProperty(exports, "setTimeoutWorker", ({ enumerable: true, get: function () { return webWorker_1.setTimeoutWorker; } }));


/***/ }),

/***/ 450:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.launch = exports.autoDailyTasks = void 0;
const tools_1 = __webpack_require__(633);
const _1 = __webpack_require__(915);
// 启动
function launch(user) {
    return __awaiter(this, void 0, void 0, function* () {
        try {
            // 增加路由地址判断,只执行对应函数
            const localUrl = location.href;
            if (localUrl.includes('thread')) {
                if (user.autoThkSw) {
                    // 自动感谢当前贴
                    yield (0, _1.autoThk)(user);
                }
                if (user.autoPaySw) {
                    // 自动购买当前贴
                    yield (0, _1.autoPay)(user);
                }
                if (user.autoRePicSw) {
                    // 自动加载原图;
                    (0, _1.loadOriginImage)();
                }
                // 自动播放图片
                const counter = {
                    playBtn: 0,
                    playFlag: 0,
                };
                (0, _1.addPlayEvent)(counter, user);
            }
            else if (localUrl.includes('/forum-') ||
                localUrl.includes('/type-')
            // || localUrl.includes('forum.php?mod=forumdisplay') //  图片模式只有一个页面,不需要
            ) {
                // 去掉高亮标题
                const hightLightTitles = document.querySelectorAll('[style="color: #2B65B7"]');
                if (hightLightTitles.length) {
                    hightLightTitles.forEach((e) => {
                        e.style.color = '';
                    });
                }
            }
            // 天变动则签到\投票
            const now = new tools_1.NowTime();
            if (user.today != now.day) {
                user.today = now.day;
                yield Promise.all([(0, _1.sign)(user), (0, _1.autoVoted)(user)]);
            }
            // 异步启动定时每日任务
            if (user.autoDailyTask) {
                autoDailyTasks(user);
            }
        }
        catch (e) {
            GM_setValue(user.username, user); //保存当天日// today 初始化
            console.error(e);
        }
    });
}
exports.launch = launch;
const autoDailyTasks = (user) => __awaiter(void 0, void 0, void 0, function* () {
    yield (0, tools_1.waitFor)(86400000);
    yield Promise.all([(0, _1.sign)(user), (0, _1.autoVoted)(user)]);
    yield autoDailyTasks(user);
});
exports.autoDailyTasks = autoDailyTasks;


/***/ }),

/***/ 817:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.swThk = exports.swRePic = exports.swPay = exports.swDailyTask = exports.checkUpdate = void 0;
const tools_1 = __webpack_require__(633);
const _1 = __webpack_require__(915);
function swRePic(user) {
    if (user.autoRePicSw) {
        user.autoRePicSw = false;
        GM_setValue(user.username, user);
        new _1.MessageBox('已关闭加载原图');
    }
    else {
        user.autoRePicSw = true;
        GM_setValue(user.username, user);
        new _1.MessageBox('已开启加载原图');
    }
}
exports.swRePic = swRePic;
function swPay(user) {
    if (user.autoPaySw) {
        user.autoPaySw = false;
        GM_setValue(user.username, user);
        new _1.MessageBox('已关闭自动购买');
    }
    else {
        user.autoPaySw = true;
        GM_setValue(user.username, user);
        new _1.MessageBox('已开启自动购买');
    }
}
exports.swPay = swPay;
function swThk(user) {
    if (user.autoThkSw) {
        user.autoThkSw = false;
        GM_setValue(user.username, user);
        new _1.MessageBox('已关闭自动感谢');
    }
    else {
        user.autoThkSw = true;
        GM_setValue(user.username, user);
        new _1.MessageBox('已开启自动感谢');
    }
}
exports.swThk = swThk;
function swDailyTask(user) {
    if (user.autoDailyTask) {
        user.autoDailyTask = false;
        GM_setValue(user.username, user);
        new _1.MessageBox('已关闭定时每日任务,刷新页面后生效');
    }
    else {
        user.autoDailyTask = true;
        GM_setValue(user.username, user);
        new _1.MessageBox('已开启定时每日任务,刷新页面后生效');
    }
}
exports.swDailyTask = swDailyTask;
function checkUpdate(user) {
    return __awaiter(this, void 0, void 0, function* () {
        const msg = new _1.MessageBox('正在检查更新...', 'none');
        const data = yield (0, _1.getData)(user.greasyforkUrl);
        const version = data.querySelectorAll('.script-show-version span')[1].innerHTML;
        if ((0, tools_1.getVersionNum)(user.version) < (0, tools_1.getVersionNum)(version)) {
            GM_openInTab(`${user.greasyforkUrl}-jkforum-%E5%8A%A9%E6%89%8B/code/JKForum%20%E5%8A%A9%E6%89%8B.user.js`);
        }
        else {
            new _1.MessageBox('已是最新版本!');
        }
        msg.remove();
    });
}
exports.checkUpdate = checkUpdate;


/***/ }),

/***/ 244:
/***/ ((__unused_webpack_module, exports) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.MessageBox = void 0;
/**
 * 消息通知类:不依赖框架
 * @example
 * 0.先在入口文件中调用静态方法 generate() 方法初始化消息弹出窗口;
 * 1. new MessageBox('hello')
 * 2.空初始化时调用 show() 显示消息;
 * 3.setTime:ms,非数字时为永久消息,需手动调用 update() 刷新消息,remove() 移除消息;
 * 4.importance:LOG_POP:log+自定义弹窗;LOG_POP_GM:log+自定义弹窗+GM系统提示;POP:自定义弹窗;
 */
class MessageBox {
    constructor(text, setTime = 5000, importance = "LOG_POP" /* LOG_POP */) {
        this._msg = null; // 永久显示标记,和元素地址
        this._text = text;
        this._setTime = setTime;
        this._importance = importance;
        this._timer = 0; // 计数器
        // 非空初始化,立即执行;
        if (text !== undefined && text !== null) {
            this.show();
        }
    }
    // 静态方法,初始化消息盒子,先调用本方法初始化消息弹出窗口
    static generate() {
        // 添加样式
        GM_addStyle(`
      #messageBox {
        width: 222px; 
        position: fixed; 
        right: 5%; 
        bottom: 20px; 
        z-index: 999
      }
      #messageBox div {
        width: 100%; 
        background-color: #64ce83; 
        float: left; 
        padding: 5px 10px; 
        margin-top: 10px; 
        border-radius: 10px; 
        color: #fff; 
        box-shadow: 0px 0px 1px 3px #ffffff
      }
      `);
        this._msgBox = document.createElement('div'); // 创建类型为div的DOM对象
        this._msgBox.id = 'messageBox';
        document.body.append(this._msgBox); // 消息盒子添加到body
    }
    // 显示消息
    show(text = this._text, setTime = this._setTime, importance = this._importance) {
        if (this._msg !== null) {
            throw new Error('先移除上条消息,才可再次添加!');
        }
        if (text === undefined || text === null) {
            throw new Error('未输入消息');
        }
        this._text = text;
        this._setTime = setTime;
        this._importance = importance;
        this._msg = document.createElement('div');
        this._msg.textContent = text;
        MessageBox._msgBox.append(this._msg); // 显示消息
        switch (importance) {
            case "LOG_POP" /* LOG_POP */: {
                console.log(text);
                break;
            }
            case "LOG_POP_GM" /* LOG_POP_GM */: {
                console.log(text);
                GM_notification(text);
                break;
            }
            default: {
                break;
            }
        }
        if (setTime && !isNaN(Number(setTime))) {
            // 默认5秒删掉消息,可设置时间,none一直显示
            setTimeout(() => {
                this.remove();
            }, Number(setTime));
        }
    }
    update(text) {
        if (isNaN(Number(this._setTime)) && this._msg) {
            this._msg.textContent = text;
            console.log(text);
            switch (this._importance) {
                case "LOG_POP" /* LOG_POP */: {
                    break;
                }
                case "LOG_POP_GM" /* LOG_POP_GM */: {
                    console.log(text);
                    GM_notification(text);
                    break;
                }
                default: {
                    break;
                }
            }
        }
        else {
            throw new Error('只有弹窗永久消息支持刷新内容:' + this._setTime);
        }
    }
    // 移除方法,没有元素则等待setTime 5秒再试5次
    remove() {
        if (this._msg) {
            this._msg.remove();
            this._msg = null; // 清除标志位
        }
        else {
            // 空初始化时,消息异步发送,导致先执行移除而获取不到元素,默认 setTime=5000
            // 消息发出后,box 非空,可以移除,不会执行 setTime="none"
            if (this._timer == 4) {
                throw new Error('移除的元素不存在:' + this._msg);
            }
            this._timer++;
            setTimeout(() => {
                this.remove();
            }, Number(this._setTime));
        }
    }
}
exports.MessageBox = MessageBox;


/***/ }),

/***/ 2:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.autofillCaptcha = exports.RETRY = void 0;
const commonType_1 = __webpack_require__(321);
const tools_1 = __webpack_require__(633);
const _1 = __webpack_require__(915);
/**
 * OCR
 */
exports.RETRY = 'retry';
function captcha(thread, user) {
    return __awaiter(this, void 0, void 0, function* () {
        const tid = (0, tools_1.getTid)(thread.url);
        const url = `${user.votedUrl}id=topthreads:setstatus&tid=${tid}&handlekey=k_setstatus&infloat=1&freeon=yes&inajax=1`;
        return new Promise((resolve, reject) => {
            const image = document.createElement('img');
            image.id = 'captcha';
            image.src = 'https://www.jkforum.net/captcha/code.php' + '?' + new Date().getMilliseconds();
            image.width = 120;
            image.crossOrigin = 'anonymous';
            document.body.append(image);
            image.onload = function () {
                return __awaiter(this, void 0, void 0, function* () {
                    const base64Img = (0, tools_1.getBase64Image)(image);
                    if (!base64Img) {
                        new _1.MessageBox('图片转码失败,正在重试...');
                        return reject(exports.RETRY);
                    }
                    //文件的Base64字符串获取验证码
                    const code = yield readImage(base64Img, user);
                    if (image.parentNode) {
                        image.parentNode.removeChild(image);
                    }
                    if (typeof code === 'object') {
                        if (code.error_msg === '服务器内部错误') {
                            // 服务器错误自动重试,resolve不受10次重试次数显示
                            new _1.MessageBox(`服务器内部错误,将在 ${thread.cycle} 分钟后自动重试,多次重试未恢复请联系管理员`, 60000 * Number(thread.cycle), "LOG_POP_GM" /* LOG_POP_GM */);
                            return resolve(code.error_msg);
                        }
                        else {
                            // 令牌错误不重试
                            new _1.MessageBox('运行错误,请手动重试或联系管理员:' + code.error_msg, 'none', "LOG_POP_GM" /* LOG_POP_GM */);
                            return reject(code);
                        }
                    }
                    const response = yield (0, _1.postData)(url, (0, tools_1.urlSearchParams)({ captcha_input: code }).toString()).catch((e) => {
                        console.log(e);
                        return exports.RETRY;
                    });
                    if (!response) {
                        new _1.MessageBox(tid + ',无效的帖子ID,请检查帖子状态', 'none', 'LOG_POP_GM');
                        return reject(response);
                    }
                    const result = (0, tools_1.turnCdata)(response);
                    if (result === exports.RETRY) {
                        new _1.MessageBox(tid + ',验证码发送失败,正在重试...');
                        return reject(exports.RETRY);
                    }
                    else if (result === '更新完成!若狀態仍沒更新,請嘗試刷新頁面') {
                        new _1.MessageBox(tid + ',更新完成!自動‘現在有空’中,請不要刷新頁面!');
                        return resolve(result);
                    }
                    else if (result === 'Access denied.') {
                        new _1.MessageBox(tid + ',无此帖子的访问权限,请检查帖子状态', 'none', 'LOG_POP_GM');
                        return reject(result);
                    }
                    else {
                        new _1.MessageBox(tid + ',验证码错误,正在重试...');
                        return reject(exports.RETRY);
                    }
                });
            };
            image.onerror = function (error) {
                console.log(error);
                if (image.parentNode) {
                    image.parentNode.removeChild(image);
                }
                new _1.MessageBox(tid + ',验证码图片加载失败,正在重试...');
                return reject(exports.RETRY);
            };
        });
    });
}
function readImage(base64, user) {
    return __awaiter(this, void 0, void 0, function* () {
        const body = (0, tools_1.urlSearchParams)({ image: base64, token: user.token }).toString();
        const response = yield (0, _1.postData)(user.ocrUrl, body, {
            responseType: "json" /* JSON */,
            usermethod: "POST" /* POST */,
            contentType: "application/x-www-form-urlencoded" /* FORM */,
        }).catch((e) => {
            var _a;
            // 导致提示信息错误
            return { error_msg: ((_a = e.response) === null || _a === void 0 ? void 0 : _a.message) ? e.response.message : e.statusText, error_code: 0 };
        });
        const ocrResults = response;
        if ('words_result' in ocrResults) {
            const words = ocrResults.words_result[0].words.replace(/g/gi, '6');
            if (words.length < 4) {
                return String((0, tools_1.rdNum)(0, 10)) + words;
            }
            else if (words.length > 4) {
                return words.slice(1, 5);
            }
            else {
                return words;
            }
        }
        else if ('error_msg' in ocrResults) {
            return ocrResults;
        }
        return String((0, tools_1.rdNum)(1000, 10000));
    });
}
function autofillCaptcha(t, user, setNextClickTime, saveStatusData, triggerNextClick) {
    var _a;
    return __awaiter(this, void 0, void 0, function* () {
        try {
            // 在异步请求前设置好时间,防止时间错误
            let timeInterval = 60000 * Number(t.cycle);
            let skip = false;
            const now = new Date();
            if (t.runTime) {
                const hours = (0, tools_1.hoursUntilTimeRange)(t.runTime.startTime, t.runTime.endTime);
                if (hours !== 0) {
                    const overMinutes = now.getMinutes() * 60000 + now.getSeconds() * 1000 - (0, tools_1.rdNum)(0, 10000);
                    timeInterval = hours * 3600000 - overMinutes;
                    skip = true;
                }
            }
            const nextClickTime = now.getTime() + timeInterval;
            t.nextClickTime = nextClickTime;
            if (!skip) {
                saveStatusData(t.url, commonType_1.RunStatus.Running);
                yield captcha(t, user);
                t.retry = 0;
            }
            else {
                saveStatusData(t.url, commonType_1.RunStatus.Waiting);
            }
            // 调用计数和存入时间
            setNextClickTime(t, skip);
            setTimeout(() => {
                triggerNextClick(t);
            }, timeInterval);
        }
        catch (e) {
            if (typeof e === 'string') {
                if (e === exports.RETRY) {
                    const timeInterval = 1000 + (0, tools_1.rdNum)(0, 5000);
                    const nextClickTime = new Date().getTime() + timeInterval;
                    t.nextClickTime = nextClickTime;
                    t.retry = ((_a = t.retry) !== null && _a !== void 0 ? _a : 0) + 1;
                    // 调用计数
                    setNextClickTime(t);
                    setTimeout(() => {
                        triggerNextClick(t);
                    }, timeInterval); // 重试频率限制
                }
                else {
                    // 错误则改变状态
                    saveStatusData(t.url, commonType_1.RunStatus.Error);
                }
            }
            else {
                saveStatusData(t.url, commonType_1.RunStatus.Error);
            }
        }
    });
}
exports.autofillCaptcha = autofillCaptcha;


/***/ }),

/***/ 87:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.loadOriginImage = void 0;
const _1 = __webpack_require__(915);
// 加载原图,自动播放
function loadOriginImage() {
    return __awaiter(this, void 0, void 0, function* () {
        const tfImg = document.querySelectorAll('.t_f ignore_js_op img'); //获取图片列表,附件也是ignore_js_op
        if (tfImg) {
            // 加载原图开关
            let count = 0;
            for (let i = 0; i < tfImg.length; i++) {
                //遍历图片列表
                const img = tfImg[i];
                img.setAttribute('onmouseover', ''); // 去掉下载原图提示
                const file = img.getAttribute('file');
                if (img.src.includes('.thumb.') && file) {
                    // 去掉缩略图 加载部分
                    img.src = file.split('.thumb.')[0];
                    console.log('加载原图成功 thumb:', img.src);
                    count++;
                }
                else if (img.src.includes('static/image/common/none.gif') && img.getAttribute('file')) {
                    // 懒加载部分
                    if (file === null || file === void 0 ? void 0 : file.includes('.thumb.')) {
                        img.setAttribute('file', file.split('.thumb.')[0]); // 网站自带forum_viewthread.js  attachimgshow(pid, onlyinpost) 从file延迟加载
                        console.log('加载原图成功 none.gif:', img.getAttribute('file'));
                        count++;
                    }
                }
            }
            if (count) {
                new _1.MessageBox(`加载原图成功 ${count} 张!`);
            }
        }
    });
}
exports.loadOriginImage = loadOriginImage;


/***/ }),

/***/ 363:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.autoPay = void 0;
const tools_1 = __webpack_require__(633);
const _1 = __webpack_require__(915);
// 自动支付
function autoPay(user) {
    var _a;
    return __awaiter(this, void 0, void 0, function* () {
        if (document.querySelector('.viewpay')) {
            const url = user.payUrl;
            const referer = location.href;
            const pData = `formhash=${user.formhash}&referer=${(0, tools_1.turnUrl)(referer)}&tid=${(0, tools_1.getTid)(referer)}&handlekey=pay`;
            const stringOrHtml = yield (0, _1.postDataCdata)(url, pData);
            if ((0, tools_1.checkHtml)(stringOrHtml)) {
                // 确认html
                const info = (_a = stringOrHtml.querySelector('script')) === null || _a === void 0 ? void 0 : _a.innerHTML.split(`', `)[1].slice(1);
                new _1.MessageBox(info);
                location.reload();
            }
            else {
                new _1.MessageBox(stringOrHtml); //其它情况直接输出
            }
        }
    });
}
exports.autoPay = autoPay;


/***/ }),

/***/ 687:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.addPlayEvent = exports.autoPlay = void 0;
const tools_1 = __webpack_require__(633);
const _1 = __webpack_require__(915);
const addPlayEvent = (counter, user) => {
    const zoomimgs = document.querySelectorAll(`img[zoomfile]`); //获取图片列表
    if (zoomimgs) {
        // 自动播放
        for (let i = 0; i < zoomimgs.length; i++) {
            //遍历图片列表
            zoomimgs[i].addEventListener('click', () => {
                autoPlay(counter, user);
            }, {
                once: true,
            });
        }
    }
    const onclickzoomimgs = document.querySelectorAll(`img[onclick="zoom(this, this.src, 0, 0, 0)"]`); //获取图片列表
    if (onclickzoomimgs) {
        // 自动播放
        for (let i = 0; i < onclickzoomimgs.length; i++) {
            //遍历图片列表
            onclickzoomimgs[i].addEventListener('click', () => {
                autoPlay(counter, user);
            }, {
                once: true,
            });
        }
    }
};
exports.addPlayEvent = addPlayEvent;
// 自动播放图片
function autoPlay(counter, user) {
    return __awaiter(this, void 0, void 0, function* () {
        const append_parent = document.querySelector('#append_parent'); // 监听子节点
        if (counter.playBtn || !append_parent) {
            // 防重复点击、添加
            return;
        }
        counter.playBtn = 1; // 已添加标志
        const observer = new MutationObserver(() => {
            // 监听元素子节点变化,然后添加节点
            const imgzoom_y = document.querySelector('#imgzoom .y');
            if (imgzoom_y) {
                // 按钮也是延迟加载,监听是否有 .y
                observer.disconnect(); // 断开监听
                addAutoPlay(counter, user); // 添加按钮
            }
        }); // 建立监听器
        observer.observe(append_parent, {
            // 开始监听 append_parent
            childList: true,
        });
    });
}
exports.autoPlay = autoPlay;
// 添加播放图片按钮、事件
function addAutoPlay(counter, user) {
    var _a;
    const append_parent = document.querySelector('#append_parent');
    if (!append_parent)
        return;
    const imgzoom = append_parent.querySelector('#imgzoom');
    const imgzoom_cover = append_parent.querySelector('#imgzoom_cover');
    if (!imgzoom)
        return;
    const y = imgzoom.querySelector('.y');
    const a = document.createElement('a');
    a.title = '自动播放/停止播放';
    a.innerHTML = '自动播放/停止播放';
    a.href = 'javascript:void(0);';
    a.addEventListener('click', play); // 添加监听播放事件
    a.style.cssText = `background: url(../../template/yibai_city1/style/common/arw_l.gif) rgb(241, 196, 15) center no-repeat;transform: rotate(180deg);width: 60px;height: 18px;overflow: hidden;`;
    if (!y)
        return;
    y.prepend(a); // 添加按钮
    // 遮挡暂停
    window.onblur = function () {
        counter.playFlag = 0;
    };
    // 点击背景层暂停
    imgzoom_cover === null || imgzoom_cover === void 0 ? void 0 : imgzoom_cover.addEventListener('click', () => {
        counter.playFlag = 0;
    });
    // 关闭按钮暂停
    (_a = y.querySelector('.imgclose')) === null || _a === void 0 ? void 0 : _a.addEventListener('click', () => {
        counter.playFlag = 0;
    });
    function play() {
        return __awaiter(this, void 0, void 0, function* () {
            if (!counter.playFlag && !counter.playObserver) {
                // 再次点击暂停,只运行一个监听器
                counter.playFlag = 1;
                const imgzoom_waiting = append_parent === null || append_parent === void 0 ? void 0 : append_parent.querySelector('#imgzoom_waiting');
                const zimg_next = imgzoom === null || imgzoom === void 0 ? void 0 : imgzoom.querySelector('.zimg_next'); // 是否有下一张
                if (!zimg_next || !imgzoom_waiting) {
                    counter.playFlag = 0;
                    new _1.MessageBox('只有一张图!');
                    return;
                }
                counter.playObserver = new MutationObserver(() => __awaiter(this, void 0, void 0, function* () {
                    var _a;
                    const display = imgzoom_waiting.style.display;
                    if (display == 'none') {
                        yield (0, tools_1.waitFor)(user.autoPlayDiff); // 延迟,然后判断是否停止
                        if (counter.playFlag == 0 && counter.playObserver) {
                            counter.playObserver.disconnect();
                            counter.playObserver = undefined; // disconnect()并没有清空监听器
                            return;
                        }
                        (_a = imgzoom === null || imgzoom === void 0 ? void 0 : imgzoom.querySelector('.zimg_next')) === null || _a === void 0 ? void 0 : _a.click(); // 刷新NodeList
                    }
                }));
                counter.playObserver.observe(imgzoom_waiting, {
                    attributes: true,
                });
                // 开始点击下一张
                yield (0, tools_1.waitFor)(user.autoPlayDiff);
                zimg_next.click();
            }
            else {
                counter.playFlag = 0;
            }
        });
    }
}


/***/ }),

/***/ 960:
/***/ ((__unused_webpack_module, exports) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.reCaptcha = void 0;
const reCaptcha = () => {
    Window.prototype.onloadCaptchaCallback = function () {
        const onCaptchaChange = (token) => {
            GM_setValue('CaptchaValue', token);
        };
        grecaptcha.render('reCaptcha', {
            sitekey: '6LfxHOIUAAAAAJ-E2oORT8_zgG3Ia0QM1sg9Pe2s',
            callback: onCaptchaChange,
            hl: 'zh-TW',
        });
    };
    const script = document.createElement('script');
    script.src = 'https://www.google.com/recaptcha/api.js?onload=onloadCaptchaCallback&render=explicit';
    script.async = true;
    script.defer = true;
    document.head.append(script);
};
exports.reCaptcha = reCaptcha;


/***/ }),

/***/ 872:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.replyOrThk = exports.addPageBatch = exports.addOnePage = void 0;
const lib_1 = __webpack_require__(915);
const tools_1 = __webpack_require__(633);
function chooceReply(user, value) {
    if (value) {
        let replyLen = 0; // 统计长度,用于在 user.userReplyMessage 中定位下标
        value.split(';').forEach((element) => {
            // 中文分号分隔字符串
            if (element) {
                user.userReplyMessage.push(element); // 存储自定义回帖内容
                replyLen++;
            }
        });
        GM_setValue(user.username, user);
        new lib_1.MessageBox('已使用自定义回复');
        return replyLen;
    }
    else {
        if (user.fastReply.length && confirm('确认使用快速回复?否则使用历史回复')) {
            GM_setValue(user.username, user);
            new lib_1.MessageBox('已使用快速回复');
            return user.fastReply.length;
        }
        else if (user.userReplyMessage.length && confirm('确认使用历史自定义回复?')) {
            GM_setValue(user.username, user);
            new lib_1.MessageBox('已使用历史自定义回复');
            return user.userReplyMessage.length;
        }
        else {
            alert('没有获取到任何回复,请确认有浏览可快速回贴的版块的权限!否则需要手动输入回帖内容!');
            return -1;
        }
    }
}
function addOnePage(user, inputValue) {
    const currentHref = location.href; // 获取当前页地址
    const reg = /(type-)|(forum-)/;
    // const reg = /(forum-)/;
    if (!reg.test(currentHref)) {
        new lib_1.MessageBox('不支持的页面,仅支持在地址为 forum-x-x 和 type-x-x 的板块页面使用');
        return;
    }
    const fid = currentHref.split('-')[1]; // 获取板块fid
    const page = currentHref.split('-')[2].split('.')[0]; // 获取页码
    if (currentHref.includes('type-')) {
        addPageBatch(user, `${fid}-${page}-${page}`, inputValue, 'type');
        new lib_1.MessageBox('type-x-x 地址板块仅支持添加第一页');
    }
    else {
        addPageBatch(user, `${fid}-${page}-${page}`, inputValue);
    }
}
exports.addOnePage = addOnePage;
function addPageBatch(user, pageCode, inputValue, type = null) {
    return __awaiter(this, void 0, void 0, function* () {
        const reg = new RegExp(/^\d+-\d+-\d+$/);
        let forumPage = '';
        if (reg.test(pageCode)) {
            // 如果输入了正确地址单页
            forumPage = pageCode;
        }
        else {
            new lib_1.MessageBox('未获取到页码');
            return;
        }
        if (reg.test(forumPage)) {
            // 如果输入了正确地址则进行批量处理
            user.page = forumPage;
            GM_setValue(user.username, user);
            let pageFrom = parseInt(forumPage.split('-')[1]); // 获取起点页码
            const pageEnd = parseInt(forumPage.split('-')[2]); // 获取终点页码
            const fid = forumPage.split('-')[0]; // 获取版块代码
            if (pageFrom > pageEnd) {
                new lib_1.MessageBox('页码错误:起点页不能大于终点页!');
                return;
            }
            const msId = new lib_1.MessageBox('正在添加:' + forumPage, 'none');
            const replyLen = chooceReply(user, inputValue); //如果输入了值则使用用户值,如果没有则使用默认值;没有默认值则返回错误
            if (replyLen <= 0) {
                new lib_1.MessageBox('获取回帖内容失败!');
                msId.remove();
                return '获取回帖内容失败!';
            }
            while (pageFrom <= pageEnd) {
                let currentHref = '';
                if (type != null) {
                    currentHref = 'https://www.jkforum.net/' + type + '-' + fid + '-' + pageFrom + '.html'; //生成帖子列表地址
                }
                else {
                    currentHref = 'https://www.jkforum.net/forum-' + fid + '-' + pageFrom + '.html'; //生成帖子列表地址
                }
                new lib_1.MessageBox('当前地址:' + currentHref + ',页码:' + pageFrom);
                let data = yield (0, lib_1.getData)(currentHref);
                // 判断是否需要切换到列表模式。
                while (data.querySelector(`[class="chked"]`)) {
                    yield (0, lib_1.getData)('https://www.jkforum.net/forum.php?mod=forumdisplay&fid=' + fid + '&forumdefstyle=yes'); // 切换到列表模式,同步请求。
                    new lib_1.MessageBox('已切换到列表模式');
                    data = yield (0, lib_1.getData)(currentHref);
                }
                // 添加回帖任务
                setThreadsTask(user, data, fid, replyLen); // 设置任务列表
                pageFrom++;
            }
            msId.remove();
        }
        else {
            new lib_1.MessageBox('请输入回帖列表页码,格式:版块代码-起点页-终点页 ;例如:640-1-2 ;版块代码见版块URL中间数字:forum-640-1', 10000);
        }
    });
}
exports.addPageBatch = addPageBatch;
// 添加任务列表
function setThreadsTask(user, htmlData, fid, replyLen) {
    //帖子类名 40个a标签数组
    const hrefs = htmlData.querySelectorAll('.s');
    // 获取作者昵称和 UID
    const cites = htmlData.querySelectorAll('cite a');
    // 以 fid 创建对象,如果fid存在则写入fid的数组的fidthreads属性的数组内;否则创建新的 fidthreads,自我调用
    const fidthreads = {
        fid: fid,
        fidTime: 0,
        fidRepIndex: 0,
        fidThkIndex: 0,
        fidthreads: [],
    };
    let fidTime = 0; // 统计总时间
    function newFid() {
        if (user.replyThreads.length) {
            for (let i = 0; i < user.replyThreads.length; i++) {
                if (user.replyThreads[i].fid == fid) {
                    addThrInfo(user.replyThreads[i]);
                    user.replyThreads[i].fidTime += fidTime; // 累加时间
                    GM_setValue(user.username, user);
                    return; // 匹配到则退出循环 // 传入对应对象
                }
            }
            // 如果没匹配到同样增加
            user.replyThreads.push(fidthreads);
            newFid();
        }
        else {
            user.replyThreads.push(fidthreads); // 初始化threads
            newFid();
        }
    }
    function addThrInfo(elem) {
        // 回帖变量随即范围限制
        let start = 0;
        if (replyLen == user.fastReply.length || replyLen == user.userReplyMessage.length) {
            // 判断起始位置
        }
        else {
            start = user.userReplyMessage.length - replyLen; // 用户数组长-增加的数据长=起始位置;
            replyLen = user.userReplyMessage.length; // 结束位置
        }
        const msId = new lib_1.MessageBox('...', 'none');
        let count = 0; // 贴数统计
        // 遍历去除回帖用户
        for (let i = 0; i < cites.length; i += 2) {
            // 加入数组
            const touser = cites[i].innerHTML;
            const touseruid = cites[i].href.split('uid=')[1]; // href="home.php?mod=space&uid=1123445"
            const href = hrefs[i / 2].href;
            const tid = (0, tools_1.getTid)(href);
            let noSkip = true; // 跳过标识
            for (let index = 0; index < elem.fidthreads.length; index++) {
                // 确保帖子的唯一性
                const element = elem.fidthreads[index];
                if (element.tid == tid) {
                    noSkip = false;
                    msId.update(`${fid}:任务列表:${index},thread-${tid}-1-1 :已在任务列表,已跳过此贴!`);
                    break;
                }
            }
            if (noSkip) {
                const replyIndex = (0, tools_1.rdNum)(start, replyLen - 1); // 从返回的输入长度获取随机值
                const randomTime = (0, tools_1.rdNum)(user.interval, user.differ + user.interval);
                const thread = {
                    tid: tid,
                    touseruid: touseruid,
                    touser: touser,
                    replyIndex: replyIndex,
                    replyLen: replyLen,
                    randomTime: randomTime, // 回帖时间随机数
                };
                fidTime += randomTime;
                elem.fidthreads.push(thread); // 给对象数组添加
                count++;
            }
        }
        GM_setValue(user.username, user);
        msId.remove();
        new lib_1.MessageBox(`${fid}:任务列表成功添加 ${count} 贴!`, 10000);
    }
    newFid(); // 启动
}
// 回帖\感谢函数
function replyOrThk(counter, user, type = "reply" /* REPLY */, setCounter) {
    var _a, _b;
    return __awaiter(this, void 0, void 0, function* () {
        let fidIndex = 0; // 当前回帖版块序号
        let thkFidIndex = 0; // 当前感谢版块序号
        // 初始化永久消息
        const mesIdRep = new lib_1.MessageBox();
        const mesIdRepContent = new lib_1.MessageBox();
        const mesIdThk = new lib_1.MessageBox();
        if (!user.replyThreads.length) {
            new lib_1.MessageBox('任务列表为空,请先添加任务!');
            return;
        }
        else if (type == "reply" /* REPLY */) {
            setCounter(Object.assign(Object.assign({}, counter), { replyBtn: 1 }));
            mesIdRep.show('开始回帖...', 'none');
            mesIdRepContent.show('...', 'none');
        }
        else {
            setCounter(Object.assign(Object.assign({}, counter), { thkBtn: 1 })); // 防止重复点击
            mesIdThk.show('开始感谢...', 'none');
        }
        while ((type == "reply" /* REPLY */ && fidIndex < user.replyThreads.length) ||
            (type == "thk" /* THANK */ && thkFidIndex < user.replyThreads.length)) {
            // 分别处理感谢和回帖
            const elementForum = user.replyThreads[type == "reply" /* REPLY */ ? fidIndex : thkFidIndex];
            const fid = elementForum.fid;
            let fidRepIndex = elementForum.fidRepIndex; // 上次回复位置
            let fidThkIndex = elementForum.fidThkIndex; // 上次感谢位置
            while ((elementForum.fidthreads.length > fidRepIndex && type == "reply" /* REPLY */) ||
                (elementForum.fidthreads.length > fidThkIndex && type == "thk" /* THANK */)) {
                // 分别处理感谢和回帖
                switch (type) {
                    case "reply" /* REPLY */: {
                        mesIdRep.update(fid +
                            '-版块,当前位置:' +
                            fidRepIndex +
                            ' ,总数:' +
                            elementForum.fidthreads.length +
                            ',预计总耗时:' +
                            (elementForum.fidTime / 1000 / 60).toFixed(1) +
                            ' 分钟时间'); // 显示永久消息
                        const elementThr = elementForum.fidthreads[fidRepIndex];
                        const tid = elementThr.tid;
                        const replyIndex = elementThr.replyIndex;
                        const replyLen = elementThr.replyLen;
                        const randomTime = elementThr.randomTime;
                        // 回帖链接
                        const replyUrlParamsData = (0, tools_1.urlSearchParams)({
                            fid: fid,
                            tid: tid,
                            extra: 'page%3D1',
                            replysubmit: 'yes',
                            infloat: 'yes',
                            inflohandlekeyat: 'fastpost',
                            inajax: 1,
                        });
                        // 拼接回帖报文
                        const date = new Date();
                        const posttime = (date.getTime() / 1000).toFixed(0); // 生产时间戳
                        const replyParamsObj = {
                            message: '',
                            posttime: posttime,
                            formhash: user.formhash,
                            usesig: 1,
                            subject: '',
                        }; // 回帖数据对象
                        if (replyLen == user.fastReply.length) {
                            replyParamsObj.message = user.fastReply[replyIndex];
                        }
                        else if (replyLen <= user.userReplyMessage.length + 1) {
                            replyParamsObj.message = user.userReplyMessage[replyIndex];
                        }
                        else {
                            new lib_1.MessageBox('回帖数据错误,请重置回帖数据', 'none');
                            return;
                        }
                        const replyParamsData = (0, tools_1.urlSearchParams)(replyParamsObj);
                        // 发送数据
                        const data = yield (0, lib_1.postDataCdata)(user.replyUrl + replyUrlParamsData.toString(), replyParamsData.toString());
                        if ((0, tools_1.checkHtml)(data)) {
                            // 确认html
                            const info = (_a = data.querySelector('script')) === null || _a === void 0 ? void 0 : _a.innerHTML.split(`, `)[1];
                            if (!info) {
                                throw new Error("querySelector('script') 错误:" + info);
                            }
                            new lib_1.MessageBox(info.split(',')[0].slice(1) + ',' + info.split(',')[1] + '!'); // 返回html成功消息
                        }
                        else {
                            new lib_1.MessageBox(data, 'none'); //其它情况直接输出
                        }
                        mesIdRepContent.update('序号:' +
                            fidRepIndex +
                            ',随机号:' +
                            replyIndex +
                            ',用时:' +
                            randomTime +
                            ',帖子:' +
                            tid +
                            ',内容:' +
                            replyParamsData.get('message')); //测试使用
                        elementForum.fidRepIndex = ++fidRepIndex;
                        GM_setValue(user.username, user);
                        yield (0, tools_1.waitFor)(randomTime); // 等待指定时间
                        break;
                    }
                    case "thk" /* THANK */: {
                        const elementThr = elementForum.fidthreads[fidThkIndex];
                        const thkParamsData = (0, tools_1.urlSearchParams)({
                            formhash: user.formhash,
                            tid: elementThr.tid,
                            touser: elementThr.touser,
                            touseruid: elementThr.touseruid,
                            handlekey: 'k_thankauthor',
                            addsubmit: 'true',
                        });
                        const data = yield (0, lib_1.postDataCdata)(user.thkUrl, thkParamsData.toString()); //post感谢数据
                        if ((0, tools_1.checkHtml)(data)) {
                            const info = (_b = data.querySelector('.alert_info')) === null || _b === void 0 ? void 0 : _b.innerHTML.split('<')[0].trim(); //去除html,返回字符串
                            new lib_1.MessageBox(info, 1000);
                        }
                        else {
                            new lib_1.MessageBox(data, 1000); //其它情况直接输出
                        }
                        mesIdThk.update(fid +
                            '-版块,当前位置:' +
                            fidThkIndex +
                            ' ,总数:' +
                            elementForum.fidthreads.length +
                            ',帖子ID:' +
                            thkParamsData.get('tid')); // 刷新永久消息
                        elementForum.fidThkIndex = ++fidThkIndex;
                        GM_setValue(user.username, user);
                        yield (0, tools_1.waitFor)(user.thkDiffer); // 等待指定时间
                        break;
                    }
                    default:
                        console.log('参数不在范围');
                        break;
                }
            }
            if (type == "thk" /* THANK */) {
                thkFidIndex++; // 翻页
            }
            else if (type == "reply" /* REPLY */) {
                fidIndex++; // 翻页
            }
            GM_setValue(user.username, user);
        }
        if (type == "thk" /* THANK */) {
            mesIdThk.remove(); // 移除永久消息
            new lib_1.MessageBox('全部感谢完成!', 10000, "LOG_POP_GM" /* LOG_POP_GM */);
            setCounter(Object.assign(Object.assign({}, counter), { thkBtn: 0 }));
        }
        else if (type == "reply" /* REPLY */) {
            mesIdRep.remove(); // 移除永久消息
            mesIdRepContent.remove();
            new lib_1.MessageBox('全部回帖完成!', 10000, "LOG_POP_GM" /* LOG_POP_GM */);
            setCounter(Object.assign(Object.assign({}, counter), { replyBtn: 0 }));
        }
    });
}
exports.replyOrThk = replyOrThk;


/***/ }),

/***/ 821:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.resetReplyData = void 0;
const message_1 = __webpack_require__(244);
const resetReplyData = (user) => {
    user.replyThreads = [];
    user.fastReply = [];
    user.userReplyMessage = [];
    GM_setValue(user.username, user);
    new message_1.MessageBox('重置回帖数据成功');
};
exports.resetReplyData = resetReplyData;


/***/ }),

/***/ 943:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.timeControl = exports.sign = void 0;
const tools_1 = __webpack_require__(633);
const _1 = __webpack_require__(915);
// 定时签到
function timeControl(counter, setCounter, user) {
    const signtime = user.signtime; // 设定签到时间
    // 初始化永久消息通知
    const msIdSig = new _1.MessageBox();
    const msIdTime = new _1.MessageBox();
    let timer = 0;
    function control() {
        return __awaiter(this, void 0, void 0, function* () {
            const now = new tools_1.NowTime(); // 获取当前时间,到秒
            if (now.seconds == signtime) {
                clearInterval(timer); // timer=1 未知原因
                setCounter(Object.assign(Object.assign({}, counter), { signBtn: 0 }));
                // 移除永久消息通知
                msIdSig.remove();
                msIdTime.update('执行中....');
                for (let i = 0; i < user.signNum; i++) {
                    //重试次数
                    sign(user);
                    msIdTime.update('执行第' + (i + 1) + '次');
                    yield (0, tools_1.waitFor)(user.interTime); //重试间隔
                }
                msIdTime.remove();
            }
            else {
                msIdTime.update('时间没有到:' + signtime + ',目前时间:' + now.seconds);
            }
        });
    }
    if (!counter.signBtn) {
        // 防重复点击
        msIdSig.show('定时签到中,请勿退出...', 'none');
        msIdTime.show('...', 'none'); // 占位消息,给刷新用
        timer = window.setInterval(control, 500);
        setCounter(Object.assign(Object.assign({}, counter), { signBtn: timer })); // 运行自动签到}
    }
}
exports.timeControl = timeControl;
function sign(user) {
    var _a;
    return __awaiter(this, void 0, void 0, function* () {
        const signParamsData = (0, tools_1.urlSearchParams)({
            formhash: user.formhash,
            qdxq: user.mood,
            qdmode: 1,
            todaysay: user.todaysay,
            fastreply: 1,
        }).toString();
        const stringOrHtml = yield (0, _1.postDataCdata)(user.signUrl, signParamsData); // 直接post签到数据
        if ((0, tools_1.checkHtml)(stringOrHtml)) {
            // 确认html
            const info = (_a = stringOrHtml.querySelector('.c')) === null || _a === void 0 ? void 0 : _a.innerHTML.split('<')[0].trim(); // 解析html,返回字符串
            new _1.MessageBox(info);
        }
        else {
            new _1.MessageBox(stringOrHtml); //其它情况直接输出
        }
    });
}
exports.sign = sign;


/***/ }),

/***/ 226:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.autoThk = void 0;
const tools_1 = __webpack_require__(633);
const _1 = __webpack_require__(915);
// 自动感谢
function autoThk(user) {
    var _a;
    return __awaiter(this, void 0, void 0, function* () {
        const forms = document.forms;
        if (!(forms === null || forms === void 0 ? void 0 : forms.thankform)) {
            return;
        }
        const thankform = forms.thankform;
        const thkParamsData = (0, tools_1.urlSearchParams)({
            formhash: user.formhash,
            tid: thankform.tid.value,
            touser: thankform.touser.value,
            touseruid: thankform.touseruid.value,
            handlekey: 'k_thankauthor',
            addsubmit: 'true',
        }).toString();
        const xmlData = yield (0, _1.postDataCdata)(user.thkUrl, thkParamsData); //post感谢数据
        if (xmlData && (0, tools_1.checkHtml)(xmlData)) {
            const info = (_a = xmlData.querySelector('.alert_info')) === null || _a === void 0 ? void 0 : _a.innerHTML.split('<')[0].trim(); //去除html,返回字符串
            new _1.MessageBox(info);
        }
        else {
            new _1.MessageBox(xmlData); //其它情况直接输出
        }
        if (document.querySelectorAll('#k_thankauthor').length == 2) {
            //感谢可见
            location.reload();
        }
    });
}
exports.autoThk = autoThk;


/***/ }),

/***/ 506:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.getUserName = exports.getUserFromName = exports.getFormhash = exports.creatUser = exports.User = void 0;
const commonType_1 = __webpack_require__(321);
const tools_1 = __webpack_require__(633);
const _1 = __webpack_require__(915);
class User {
    constructor(username, formhash) {
        this.version = GM_info.script.version;
        this.today = ''; // 签到日期
        this.signtime = '23:59:59'; // 定时签到时间
        this.signNum = 10; // 定时签到重试次数
        this.interTime = 200; // 定时签到重试间隔时间ms
        this.todaysay = '簽到'; // 签到输入内容
        this.mood = commonType_1.Mood.fendou; // 签到心情
        this.autoPlayDiff = 2000; // 自动播放图片间隔时间ms
        this.autoPaySw = true; // 自动支付开关
        this.autoThkSw = true; // 自动感谢开关
        this.autoRePicSw = true; // 自动加载原图开关
        this.autoDailyTask = false; // 定时每日任务开关
        this.differ = 10000; // 回帖随机间隔时间ms
        this.interval = 20000; // 回帖基础间隔时间ms
        this.thkDiffer = 1000; // 批量感谢间隔时间ms
        this.limit = 2; // 并发下载图片数量限制
        this.page = ''; // 批量回帖页码
        this.token = ''; // OCR token
        this.freeTime = 3300000; // 现在有空间隔
        this.freeTid = ''; // 自动现在有空 帖子ID,一个账号一个贴子
        this.freeData = [];
        this.votedMessage = '+1'; // 投票输入内容
        this.ocrUrl = 'https://jkf.iknow.fun/api/ocr/numbers';
        this.votedUrl = 'https://www.jkforum.net/plugin.php?';
        this.applyVotedUrl = 'https://www.jkforum.net/home.php?mod=task&do=apply&id=59';
        this.taskDoneUrl = 'https://www.jkforum.net/home.php?mod=task&do=draw&id=59';
        this.signUrl = 'https://www.jkforum.net/plugin/?id=dsu_paulsign:sign&operation=qiandao&infloat=1&inajax=1';
        this.thkUrl = 'https://www.jkforum.net/plugin/?id=thankauthor:thank&inajax=1';
        this.payUrl = 'https://www.jkforum.net/forum.php?mod=misc&action=pay&paysubmit=yes&infloat=yes&inajax=1';
        this.fastReplyUrl = 'https://www.jkforum.net/thread-8364615-1-1.html';
        this.replyUrl = 'https://www.jkforum.net/forum.php?mod=post&action=reply&';
        this.greasyforkUrl = 'https://greasyfork.org/zh-CN/scripts/427246';
        this.userReplyMessage = []; // 用户保存的回复,历史回帖内容
        this.fastReply = []; // 保存的快速回复,快速回帖内容
        this.replyThreads = []; // 回帖任务数据
        this.username = username;
        this.formhash = formhash;
    }
}
exports.User = User;
const getUserName = () => {
    var _a;
    return (_a = document.querySelector('.avatar_info a')) === null || _a === void 0 ? void 0 : _a.innerHTML;
};
exports.getUserName = getUserName;
const getUserFromName = () => {
    const userName = getUserName();
    return userName ? GM_getValue(userName) : null;
};
exports.getUserFromName = getUserFromName;
const getFormhash = () => {
    var _a;
    return new URLSearchParams((_a = document.querySelector('.listmenu li a')) === null || _a === void 0 ? void 0 : _a.href).get('formhash');
};
exports.getFormhash = getFormhash;
const creatUser = (username, formhash) => __awaiter(void 0, void 0, void 0, function* () {
    let user = GM_getValue(username);
    const userMod = new User(username, formhash);
    if (!user) {
        // 空则写入,或版本变动写入
        user = userMod;
        user = yield (0, _1.setFastReply)(user); // 设置快速回复
        GM_setValue(username, user);
        new _1.MessageBox('添加用户成功!');
    }
    else if (user.version !== GM_info.script.version) {
        const compa = (0, tools_1.isSameObjKey)(userMod, user); // 比较key
        // 更新所有 Url 参数
        user = (0, tools_1.updateUserUrl)(user, userMod); // new对User赋值
        // key相同 只改变版本
        user.version = GM_info.script.version; // 记录新版本
        if (!compa) {
            // key不同
            user = (0, tools_1.mergeObjValue)(userMod, user); // new对User赋值
            new _1.MessageBox('数据更新成功!');
        }
        user = yield (0, _1.setFastReply)(user); // 设置快速回复
        GM_setValue(username, user);
        new _1.MessageBox('版本更新成功!请阅读使用说明。');
    }
    if (user.formhash !== formhash) {
        // formhash 变动存储
        user.formhash = formhash;
        GM_setValue(username, user);
    }
    return user;
});
exports.creatUser = creatUser;


/***/ }),

/***/ 608:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.autoVoted = void 0;
const tools_1 = __webpack_require__(633);
const _1 = __webpack_require__(915);
function autoVoted(user) {
    var _a;
    return __awaiter(this, void 0, void 0, function* () {
        yield (0, _1.getData)(user.applyVotedUrl); // 申请任务
        const msId = new _1.MessageBox('申请投票任务执行成功!正在投票请勿退出页面...', 'none');
        // 投票请求链接
        const votedUrlParams = (0, tools_1.urlSearchParams)({
            id: 'voted',
        }).toString();
        const htmlData = yield (0, _1.getData)(user.votedUrl + votedUrlParams);
        const vidUrl = (_a = htmlData.querySelector('.voted a')) === null || _a === void 0 ? void 0 : _a.href; // 找到链接
        const vid = vidUrl.split('&')[2].split('=')[1]; // 纯数字// 分解链接
        const hrefHtmlData = yield (0, _1.getData)(vidUrl);
        const aidUrl = hrefHtmlData.querySelector('.hp_s_c a').href; // 找到链接
        const aid = aidUrl.split('&')[2].split('=')[1]; // 纯数字// 分解链接
        // 投票请求链接数据
        const votedParams = (0, tools_1.urlSearchParams)({
            id: 'voted',
            ac: 'dian',
            aid: aid,
            vid: vid,
            qr: '',
            inajax: 1,
        }).toString();
        // Post 数据
        const votedParamsData = (0, tools_1.urlSearchParams)({
            formhash: user.formhash,
            inajax: 1,
            handlekey: 'dian',
            sid: 0,
            message: user.votedMessage,
        }).toString();
        // 投票
        const votedMessage = yield (0, _1.postDataCdata)(user.votedUrl + votedParams, votedParamsData);
        if ((0, tools_1.checkHtml)(votedMessage)) {
            let info = '';
            const alertInfo = votedMessage.querySelector('.alert_info');
            const script = votedMessage.querySelector('script');
            if (alertInfo) {
                info = alertInfo.innerHTML; // 解析html,返回字符串,失败警告
                new _1.MessageBox(info);
            }
            else if (script) {
                info = script.innerHTML.split(`', `)[1].slice(1); // 解析html,获取字符串,成功消息
                new _1.MessageBox(info);
                yield (0, _1.getData)(user.taskDoneUrl); // 执行领奖励
                new _1.MessageBox('领取投票奖励成功!');
            }
        }
        else {
            new _1.MessageBox(votedMessage); //其它情况直接输出
        }
        msId.remove();
        GM_setValue(user.username, user); //保存当天日// today 初始化
    });
}
exports.autoVoted = autoVoted;


/***/ }),

/***/ 67:
/***/ ((__unused_webpack_module, exports) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.setTimeoutWorker = exports.setIntervalWorker = void 0;
function setIntervalWorker(callback, interval) {
    const workerBlob = new Blob([`setInterval(() => { postMessage('') }, ${interval})`]);
    const workerURL = URL.createObjectURL(workerBlob);
    const worker = new Worker(workerURL);
    worker.onmessage = () => {
        callback();
    };
    return worker;
}
exports.setIntervalWorker = setIntervalWorker;
function setTimeoutWorker(callback, timeout) {
    const workerBlob = new Blob([`setTimeout(() => { postMessage('') }, ${timeout})`]);
    const workerURL = URL.createObjectURL(workerBlob);
    const worker = new Worker(workerURL);
    worker.onmessage = () => {
        callback();
        worker.terminate();
    };
    return worker;
}
exports.setTimeoutWorker = setTimeoutWorker;


/***/ }),

/***/ 287:
/***/ ((__unused_webpack_module, exports) => {

"use strict";

/* eslint-disable @typescript-eslint/no-explicit-any */
/*
    NodeJS Promise并发控制
    https://xin-tan.com/2020-09-13-bing-fa-kong-zhi/
  */
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.ConcurrencyPromisePool = void 0;
class ConcurrencyPromisePool {
    constructor(limit) {
        this.limit = limit;
        this.runningNum = 0;
        this.queue = [];
        this.results = [];
    }
    all(promises = []) {
        return new Promise((resolve, reject) => {
            for (const promise of promises) {
                // 发送所有 promise
                this._run(promise, resolve, reject);
            }
        });
    }
    _run(promise, resolve, reject) {
        // 超出限制的 promise 入队
        if (this.runningNum >= this.limit) {
            // console.log(">>> 达到上限,入队:", promise);
            this.queue.push(promise);
            return;
        }
        // 正在运行的 promise
        ++this.runningNum;
        promise()
            .then((res) => {
            this.results.push(res);
            --this.runningNum;
            // 运行结束条件:队列长度 && 正在运行的数量
            if (this.queue.length === 0 && this.runningNum === 0) {
                // promise返回结果, 然后递归结束;
                const results = [...this.results];
                // 清空结果,方便重复使用
                this.results = [];
                return resolve(results);
            }
            // 队列还有则,出队,然后递归调用
            if (this.queue.length) {
                // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
                this._run(this.queue.shift(), resolve, reject);
            }
        })
            .catch(reject);
    }
}
exports.ConcurrencyPromisePool = ConcurrencyPromisePool;


/***/ }),

/***/ 19:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
const tailwindStyles = __webpack_require__(600);
// 导出的是 GM_addStyle 的值
// delete css conflicts
exports["default"] = GM_addStyle(tailwindStyles
    .replace(/\nimg,\nvideo {\n {2}max-width: 100%;\n {2}height: auto;\n}\n/, '')
    .replace(/\*,\n::before,\n::after \{\n {2}box-sizing: border-box;\n {2}\/\* 1 \*\/\n {2}border-width: 0;\n {2}\/\* 2 \*\/\n {2}border-style: solid;\n {2}\/\* 2 \*\/\n {2}border-color: #e5e7eb;\n {2}\/\* 2 \*\/\n}/, '')
    .replace(/-webkit-appearance: button;\n {2}\/\* 1 \*\/\n {2}background-color: transparent;\n {2}\/\* 2 \*\/\n {2}background-image: none;\n {2}\/\* 2 \*\//, '')
    .replace(/display: block;\n {2}\/\* 1 \*\//, '')
    .replace(/padding-top: 0.5rem;\n {2}padding-right: 0.75rem;\n {2}padding-bottom: 0.5rem;\n {2}padding-left: 0.75rem;/, '')
    .replace(/font-size: inherit;\n {2}font-weight: inherit;/, ''));


/***/ }),

/***/ 633:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.waitFor = exports.urlSearchParams = exports.updateUserUrl = exports.turnUrl = exports.turnCdata = exports.replaceHtml = exports.rdNum = exports.preciseSetTimeout = exports.preciseSetInterval = exports.mergeObjValue = exports.isSameObjKey = exports.hoursUntilTimeRange = exports.getVersionNum = exports.getUuiD = exports.getTid = exports.getBase64Image = exports.checkHtml = exports.NowTime = void 0;
const lib_1 = __webpack_require__(915);
// POST返回 xml数据类型转换成 字符串或html 模块
function turnCdata(xmlRepo) {
    var _a;
    const data = (_a = xmlRepo.querySelector('root')) === null || _a === void 0 ? void 0 : _a.textContent;
    if (!data)
        return '';
    // 如果判断去掉html是否还有文字,否则返回html
    if (replaceHtml(data)) {
        return replaceHtml(data); // 去掉html内容,返回文字
    }
    else {
        const domParser = new DOMParser();
        const htmlData = domParser.parseFromString(data, 'text/html');
        return htmlData;
    }
}
exports.turnCdata = turnCdata;
// URL 参数添加器
function urlSearchParams(object) {
    const searchParamsData = new URLSearchParams();
    for (const key in object) {
        searchParamsData.append(key, String(object[key]));
    }
    return searchParamsData;
}
exports.urlSearchParams = urlSearchParams;
// 编码统一资源定位符模块
function turnUrl(data, type) {
    if (type) {
        return decodeURI(data);
    }
    else {
        return encodeURI(data);
    }
}
exports.turnUrl = turnUrl;
// 判断html和字符串是不是html
function checkHtml(htmlStr) {
    if (htmlStr instanceof Document) {
        return true;
    }
    else {
        const reg = /<[^>]+>/g;
        return reg.test(htmlStr);
    }
}
exports.checkHtml = checkHtml;
// 过滤html标签、前后空格、特殊符号
function replaceHtml(txt) {
    const reg3 = /[\r|\n|\b|\f|\t|\v]+/g; //去掉特殊符号
    const reg = /<.+>/g; //去掉所有<>内内容
    // 先reg3,\n特殊符号会影响reg的匹配
    return txt.replace(reg3, '').replace(reg, '').trim();
}
exports.replaceHtml = replaceHtml;
// promise 等待模块
const waitFor = (ms) => new Promise((r) => setTimeout(r, ms));
exports.waitFor = waitFor;
// n, m 范围随机整数生成
function rdNum(n, m) {
    const c = m - n + 1;
    return Math.floor(Math.random() * c + n);
}
exports.rdNum = rdNum;
class NowTime {
    constructor() {
        const date = new Date();
        this.day = date.toLocaleDateString();
        this.seconds = date.toTimeString().split(' ')[0];
        this.date = date;
    }
}
exports.NowTime = NowTime;
// 比较键
function isSameObjKey(source, target) {
    if (Object.keys(target).length === Object.keys(source).length) {
        // 用户数据匹配
        for (const key of Object.keys(source)) {
            // https://stackoverflow.com/questions/39282873/object-hasownproperty-yields-the-eslint-no-prototype-builtins-error-how-to
            if (!Object.prototype.hasOwnProperty.call(target, key)) {
                return false;
            }
        }
        return true;
    }
    else {
        return false;
    }
}
exports.isSameObjKey = isSameObjKey;
// 赋值对象的值
function mergeObjValue(target, source) {
    Object.keys(source).forEach((key) => {
        if (source[key] && Object.prototype.hasOwnProperty.call(target, key)) {
            target[key] = source[key];
        }
    });
    return target;
}
exports.mergeObjValue = mergeObjValue;
// 更新User对象的URL值,自动有空间隔时间
function updateUserUrl(target, source) {
    Object.keys(source).forEach((key) => {
        if (key.includes('Url') || key === 'freeTime') {
            target[key] = source[key];
        }
    });
    return target;
}
exports.updateUserUrl = updateUserUrl;
/**
 * 生成不重复的ID
 * @param { Number } randomLength
 */
function getUuiD(randomLength) {
    return Number(Math.random().toString().substr(2, randomLength) + Date.now()).toString(36);
}
exports.getUuiD = getUuiD;
const getVersionNum = (ver) => {
    return Number(ver.replace(/\./g, ''));
};
exports.getVersionNum = getVersionNum;
const getTid = (url) => {
    let tid = url.split('-')[1];
    if (!tid) {
        tid = new URLSearchParams(url).get('tid'); // 用于获取分类贴链接下的 tid
        if (!tid) {
            new lib_1.MessageBox('没有找到Tid: ' + url);
            throw new Error('没有找到Tid: ' + url);
        }
    }
    return tid;
};
exports.getTid = getTid;
const preciseSetInterval = (handler, delay, timeout = 0) => {
    let baseTime = Date.now();
    const callHandler = () => {
        if (Math.abs(Date.now() - baseTime) <= delay + timeout) {
            baseTime = Date.now();
            handler();
        }
    };
    return window.setInterval(callHandler, delay);
};
exports.preciseSetInterval = preciseSetInterval;
const preciseSetTimeout = (handler, delay, timeout = 0) => {
    let baseTime = Date.now();
    const callHandler = () => {
        if (Math.abs(Date.now() - baseTime) <= delay + timeout) {
            baseTime = Date.now();
            handler();
        }
    };
    return window.setTimeout(callHandler, delay);
};
exports.preciseSetTimeout = preciseSetTimeout;
function hoursUntilTimeRange(startHour, endHour) {
    const date = new Date();
    const currentHour = date.getHours();
    if (startHour <= endHour) {
        // 范围在同一天的情况
        if (currentHour >= startHour && currentHour <= endHour) {
            return 0;
        }
        else if (currentHour < startHour) {
            return startHour - currentHour;
        }
        else {
            return 24 - currentHour + startHour;
        }
    }
    else {
        // 范围跨越两天的情况
        if (currentHour >= startHour || currentHour <= endHour) {
            return 0;
        }
        else {
            return startHour - currentHour;
        }
    }
}
exports.hoursUntilTimeRange = hoursUntilTimeRange;
/**
 * 图像转Base64
 */
function getBase64Image(img) {
    const canvas = document.createElement('canvas');
    canvas.width = img.width;
    canvas.height = img.height;
    const ctx = canvas.getContext('2d');
    if (!ctx) {
        return;
    }
    ctx.drawImage(img, 0, 0, img.width, img.height);
    const imgd = ctx.getImageData(0, 0, img.width, img.height);
    // const threshold = 250;
    const imgData = imgd.data;
    const len = imgData.length - 1;
    for (let i = 0; i <= len; i += 4) {
        const R = imgData[i];
        const G = imgData[i + 1];
        const B = imgData[i + 2];
        // const Alpha = imgData[i + 3];
        const avg = (R + G + B) / 3;
        // if (avg > threshold) {
        //   imgData[i] = 255;
        //   imgData[i + 1] = 255;
        //   imgData[i + 2] = 255;
        // } else {
        //   imgData[i] = 0;
        //   imgData[i + 1] = 0;
        //   imgData[i + 2] = 0;
        // }
        imgData[i] = avg;
        imgData[i + 1] = avg;
        imgData[i + 2] = avg;
    }
    ctx.putImageData(imgd, 0, 0);
    // const ext = img.src.substring(img.src.lastIndexOf('.') + 1).toLowerCase();
    const dataURL = canvas.toDataURL('image/jpeg');
    return dataURL;
}
exports.getBase64Image = getBase64Image;


/***/ }),

/***/ 699:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.AutoClickManage = void 0;
const commonType_1 = __webpack_require__(321);
const components_1 = __webpack_require__(740);
const lib_1 = __webpack_require__(915);
const ConcurrencyPromisePool_1 = __webpack_require__(287);
const tools_1 = __webpack_require__(633);
const react_1 = __importStar(__webpack_require__(995));
const AutoClickManage = ({ onClose, user }) => {
    var _a, _b, _c, _d;
    const [data, setData] = (0, react_1.useState)(user.freeData ? user.freeData.map((d) => (Object.assign(Object.assign({}, d), { runStatus: commonType_1.RunStatus.NotRunning }))) : []);
    const [token, setToken] = (0, react_1.useState)(user.token);
    const [threadUrl, setThreadUrl] = (0, react_1.useState)('');
    const [running, setRunning] = (0, react_1.useState)(false);
    const [startTime, setStartTime] = (0, react_1.useState)(((_b = (_a = user.freeData) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.runTime) ? String(user.freeData[0].runTime.startTime) : '0');
    const [endTime, setEndTime] = (0, react_1.useState)(((_d = (_c = user.freeData) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.runTime) ? String(user.freeData[0].runTime.endTime) : '23');
    const [pool] = (0, react_1.useState)(new ConcurrencyPromisePool_1.ConcurrencyPromisePool(1));
    const isInitialMount = (0, react_1.useRef)(true);
    // When our cell renderer calls updateMyData, we'll use the rowIndex, columnId and new value to update the original data
    const updateMyData = (rowIndex, columnId, value) => {
        setData((old) => old.map((row, index) => {
            if (index === rowIndex) {
                return Object.assign(Object.assign({}, old[rowIndex]), { [columnId]: value });
            }
            return row;
        }));
    };
    const deleteData = (rowId) => {
        // We also turn on the flag to not reset the page
        setData((old) => {
            old.splice(rowId, 1);
            return [...old];
        });
    };
    const addThread = () => __awaiter(void 0, void 0, void 0, function* () {
        var _e, _f, _g, _h;
        if (!threadUrl) {
            return alert('请输入帖子链接');
        }
        const tid = (0, tools_1.getTid)(threadUrl);
        if (!tid) {
            return alert(`帖子地址错误,未找到帖子ID:${threadUrl}`);
        }
        if (data.some((t) => (0, tools_1.getTid)(t.url) === tid)) {
            return alert(tid + ',帖子已存在!');
        }
        if (!threadUrl.includes('thread')) {
            return alert(`帖子地址错误:${threadUrl}`);
        }
        const docu = yield (0, lib_1.getData)(threadUrl);
        const topthreadStatus = docu.querySelector('#topthread_status');
        if (!topthreadStatus) {
            return alert('未找到帖子的自动有空元素,请检查帖子');
        }
        const titleCont = docu.querySelector('.title-cont');
        if (!titleCont) {
            return alert('未找到帖子标题');
        }
        const title = ((_f = (_e = titleCont.querySelector('.z')) === null || _e === void 0 ? void 0 : _e.textContent) !== null && _f !== void 0 ? _f : '') + ((_h = (_g = titleCont.querySelector('h1')) === null || _g === void 0 ? void 0 : _g.textContent) !== null && _h !== void 0 ? _h : '');
        if (!title) {
            return alert('未找到帖子标题');
        }
        setData([
            ...data,
            {
                status: commonType_1.Status.online,
                runStatus: commonType_1.RunStatus.NotRunning,
                runTime: { startTime: Number(startTime), endTime: Number(endTime) },
                title,
                url: threadUrl,
                cycle: '55',
                times: 0,
                nextClickTime: 0,
                retry: 0,
                delete: '',
            },
        ]);
    });
    const saveData = (0, react_1.useCallback)(() => {
        user.freeData = data;
        if (token && token.length === 36) {
            user.token !== token ? (user.token = token) : null;
        }
        else {
            new lib_1.MessageBox('没有输入令牌 or 令牌无效', 1000);
        }
        GM_setValue(user.username, user);
    }, [data, token, user]);
    const setNextClickTime = (t, skip) => {
        setData((old) => old.map((row) => {
            if (row.url === t.url) {
                return Object.assign(Object.assign({}, row), { times: skip ? row.times : row.times + 1, nextClickTime: t.nextClickTime, retry: t.retry });
            }
            return row;
        }));
    };
    const triggerNextClick = (t) => {
        const onThread = data.find((onlineThread) => onlineThread.status === 'online' && t.url === onlineThread.url);
        if (!onThread) {
            return;
        }
        // 点击时间校验,防止点击时间错乱
        const diff = Math.abs(t.nextClickTime - new Date().getTime());
        // 时间精度过高,误差等于网络超时时间,设置误差60秒
        if (diff < 60000 && t.retry < 10) {
            // 添加任务,在此处开始闭包,递归调用
            pool.all([() => (0, lib_1.autofillCaptcha)(onThread, user, setNextClickTime, saveStatusData, triggerNextClick)]);
        }
        else if (t.retry >= 10) {
            saveStatusData(onThread.url, commonType_1.RunStatus.Error);
            new lib_1.MessageBox(`帖子ID:${(0, tools_1.getTid)(onThread.url)},连续重试次数过多:${onThread.retry}次,自动现在有空已停止运行!`, 'none', 'LOG_POP_GM');
        }
        else {
            saveStatusData(onThread.url, commonType_1.RunStatus.Error);
            new lib_1.MessageBox(`帖子ID:${(0, tools_1.getTid)(onThread.url)},已错过点击时间,自动现在有空已停止运行!预设点击时间:${new Date(t.nextClickTime).toLocaleString()},实际时间:${new Date().toLocaleString()}`, 'none', 'LOG_POP_GM');
        }
    };
    const saveStatusData = (url, runStatus) => {
        setData((old) => old.map((row) => {
            if (row.url === url) {
                return Object.assign(Object.assign({}, row), { runStatus });
            }
            return row;
        }));
    };
    const start = () => __awaiter(void 0, void 0, void 0, function* () {
        if (!token) {
            return alert('请输入令牌');
        }
        const onThreads = data.filter((t) => t.status === commonType_1.Status.online);
        if (!onThreads.length) {
            return alert('请将需要执行的帖子‘启用状态’设为已启用');
        }
        setRunning(true);
        const promises = onThreads.map((t) => () => (0, lib_1.autofillCaptcha)(Object.assign(Object.assign({}, t), { retry: 0 }), user, setNextClickTime, saveStatusData, triggerNextClick));
        pool.all(promises);
    });
    (0, react_1.useEffect)(() => {
        // only on update
        if (isInitialMount.current) {
            isInitialMount.current = false;
        }
        else {
            saveData();
            if (running && data.every((t) => t.runStatus === commonType_1.RunStatus.NotRunning || t.runStatus === commonType_1.RunStatus.Error)) {
                setRunning(false);
            }
        }
    }, [data, running, saveData]);
    const setRunTime = () => {
        const startTimeNum = Number(startTime);
        const endTimeNum = Number(endTime);
        if (startTimeNum > 23 || startTimeNum < 0 || endTimeNum > 23 || endTimeNum < 0 || startTimeNum === endTimeNum) {
            return alert('时间必须大于等于0点,小于等于23点');
        }
        setData(data.map((d) => (Object.assign(Object.assign({}, d), { runTime: { startTime: startTimeNum, endTime: endTimeNum } }))));
    };
    return (react_1.default.createElement(components_1.Modal, { isShow: true, width: "w-full", height: "max-h-[95%]", header: react_1.default.createElement(react_1.default.Fragment, null, "\u81EA\u52A8\u70B9\u51FB\u73B0\u5728\u6709\u7A7A\u7BA1\u7406\u9875\u9762"), footer: react_1.default.createElement(react_1.default.Fragment, null,
            react_1.default.createElement(components_1.Button, { text: '开始执行', onClick: start, disabled: running }),
            react_1.default.createElement(components_1.Button, { title: "\u4E0D\u4F7F\u7528\u65F6\u8BF7\u505C\u6B62\u8FD0\u884C\uFF0C\u4FEE\u6539\u8BBE\u7F6E\u540E\u9700\u8981\u505C\u6B62\u91CD\u65B0\u8FD0\u884C", text: '停止自动现在有空', onClick: () => {
                    location.reload();
                } }),
            react_1.default.createElement(components_1.Button, { title: "\u505C\u6B62\u8FD0\u884C\u81EA\u52A8\u73B0\u5728\u6709\u7A7A\u540E\u53EF\u5173\u95ED", text: '关闭页面', onClick: onClose, disabled: running })), onClose: () => {
            if (running) {
                alert('停止运行自动现在有空后可关闭');
            }
            else {
                onClose();
            }
        } },
        react_1.default.createElement(react_1.default.Fragment, null,
            react_1.default.createElement("span", { className: "text-red-500" },
                "\u76EE\u524D\u672C\u9875\u9762\u4EC5\u652F\u6301\u7BA1\u7406\u4E00\u4E2AJKF\u8D26\u53F7\u7684\u591A\u4E2A\u5E16\u5B50\uFF0C\u591A\u4E2A\u8D26\u53F7\u8BF7",
                react_1.default.createElement("a", { className: "text-blue-500 border-b", target: "_blank", href: "https://iknow.fun/2023/06/23/chrome-tong-shi-deng-lu-duo-ge-zhang-hao-wang-zhan-duo-kai-jiao-cheng/", rel: "noreferrer" }, "\u591A\u5F00\u6D4F\u89C8\u5668"),
                "\u3002"),
            react_1.default.createElement("div", { className: "flex items-end" },
                react_1.default.createElement("div", { className: "w-64 pr-4" },
                    react_1.default.createElement(components_1.Input, { autoComplete: "off", label: "\u8F93\u5165\u4EE4\u724C\uFF1A", type: "password", onChange: (e) => setToken(e.target.value), placeholder: "\u8BF7\u8F93\u5165\u4EE4\u724C", value: token })),
                react_1.default.createElement("span", null, "\u8FD8\u6CA1\u6709\u4EE4\u724C\uFF1F"),
                react_1.default.createElement(components_1.Button, { title: "https://jkf.iknow.fun", text: '获取令牌', onClick: () => window.open('https://jkf.iknow.fun') })),
            react_1.default.createElement("div", { className: "flex items-end" },
                react_1.default.createElement("div", { className: "w-64" },
                    react_1.default.createElement(components_1.Input, { label: "\u5E16\u5B50\u94FE\u63A5\uFF1A", onChange: (e) => setThreadUrl(e.target.value), placeholder: "\u8BF7\u8F93\u5165\u5E16\u5B50\u94FE\u63A5", value: threadUrl })),
                react_1.default.createElement("div", { className: "ml-4" },
                    react_1.default.createElement(components_1.Button, { text: '添加', onClick: addThread }))),
            react_1.default.createElement("div", { className: "flex items-end justify-between w-80 mt-2" },
                react_1.default.createElement("span", { title: "\u8BBE\u7F6E\u81EA\u52A8\u70B9\u51FB\u4EC5\u5728\u8BE5\u65F6\u95F4\u6BB5\u5185\u8FD0\u884C\uFF0C\u91CD\u65B0\u8FD0\u884C\u540E\u751F\u6548", className: "cursor-help" }, "\u8FD0\u884C\u65F6\u95F4\u6BB5\uFF1A"),
                react_1.default.createElement("div", { className: "w-8" },
                    react_1.default.createElement(components_1.Input, { type: "number", min: 0, max: 23, onChange: (e) => setStartTime(e.target.value), placeholder: "0", value: startTime })),
                react_1.default.createElement("span", null, "\u70B9 ~ "),
                react_1.default.createElement("div", { className: "w-8" },
                    react_1.default.createElement(components_1.Input, { type: "number", min: 0, max: 23, onChange: (e) => setEndTime(e.target.value), placeholder: "23", value: endTime })),
                react_1.default.createElement("span", { className: "pl-2" }, ":59\u5206"),
                react_1.default.createElement(components_1.Button, { text: '保存', title: "\u91CD\u65B0\u8FD0\u884C\u540E\u751F\u6548", onClick: setRunTime })),
            react_1.default.createElement("div", { className: "overflow-auto" }, data.length ? (react_1.default.createElement(components_1.ReactTableCard, { searchBar: false, title: '帖子管理', data: data.map((t) => ({
                    status: t.status,
                    runStatus: t.runStatus,
                    runTime: t.runTime,
                    title: t.title,
                    url: t.url,
                    cycle: t.cycle,
                    times: t.times,
                    nextClickTime: t.nextClickTime,
                    retry: t.retry,
                    delete: '',
                })), updateMyData: updateMyData, deleteData: deleteData })) : ('')))));
};
exports.AutoClickManage = AutoClickManage;


/***/ }),

/***/ 818:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.Home = void 0;
const components_1 = __webpack_require__(740);
const lib_1 = __webpack_require__(915);
const autoPost_1 = __webpack_require__(342);
const reCaptcha_1 = __webpack_require__(960);
const react_1 = __importStar(__webpack_require__(995));
const react_copy_to_clipboard_1 = __webpack_require__(950);
const AutoClickManage_1 = __webpack_require__(699);
const Home = ({ user, setShowHome, counter, setCounter }) => {
    const mask = (0, react_1.useRef)(null);
    const [replyValue, setReplyValue] = (0, react_1.useState)('');
    const [pageValue, setPageValue] = (0, react_1.useState)('');
    const [showModal, setShowModal] = (0, react_1.useState)(false);
    const [showCaptcha, setShowCaptcha] = (0, react_1.useState)(false);
    const [recapchaToken, setRecapchaToken] = (0, react_1.useState)('');
    (0, react_1.useEffect)(() => {
        GM_addValueChangeListener('CaptchaValue', (name, oldValue, newValue) => __awaiter(void 0, void 0, void 0, function* () {
            if (newValue) {
                setRecapchaToken(newValue);
            }
        }));
    }, []);
    return (react_1.default.createElement("div", { ref: mask, className: "fixed top-0 w-screen h-screen flex flex-col justify-center", onClick: (e) => {
            if (mask.current && mask.current === e.target) {
                setShowHome();
            }
        } },
        react_1.default.createElement("div", { className: "h-fit w-72 p-2 m-2 bg-gray-50 shadow-md rounded-md flex flex-col border" },
            react_1.default.createElement("h3", { className: "text-sm text-center font-bold border-b" }, "JKForum Helper"),
            react_1.default.createElement(components_1.Panel, { title: "\u901A\u7528\u8BBE\u7F6E" },
                react_1.default.createElement(components_1.Toggle, { label: '自动感谢', onClick: () => {
                        (0, lib_1.swThk)(user);
                    }, checked: user.autoThkSw }),
                react_1.default.createElement(components_1.Toggle, { label: '自动购买', onClick: () => {
                        (0, lib_1.swPay)(user);
                    }, checked: user.autoPaySw }),
                react_1.default.createElement(components_1.Toggle, { label: '加载原图', onClick: () => {
                        (0, lib_1.swRePic)(user);
                    }, checked: user.autoRePicSw }),
                react_1.default.createElement(components_1.Toggle, { title: '在不刷新网页的情况下,定时检测是否需要执行每日任务', label: '定时每日任务', onClick: () => {
                        (0, lib_1.swDailyTask)(user);
                    }, checked: user.autoDailyTask })),
            react_1.default.createElement(components_1.Panel, { title: "\u6279\u5904\u7406" },
                react_1.default.createElement(components_1.TextArea, { label: '输入回复:', placeholder: '中文分号 ;分隔每条回帖内容,可输入论坛的富文本格式', onChange: setReplyValue, value: replyValue, rows: 2 }),
                react_1.default.createElement(components_1.Input, { label: '输入页码:', placeholder: '板块号-起始页-终止页', onChange: (e) => setPageValue(e.target.value), value: pageValue }),
                react_1.default.createElement(components_1.Button, { text: '添加当前页', onClick: () => {
                        (0, lib_1.addOnePage)(user, replyValue);
                    } }),
                react_1.default.createElement(components_1.Button, { text: '添加页码页', onClick: () => {
                        (0, lib_1.addPageBatch)(user, pageValue, replyValue);
                    } }),
                react_1.default.createElement(components_1.Button, { text: '获取快速回复', onClick: () => {
                        (0, lib_1.setFastReply)(user);
                    } }),
                react_1.default.createElement(components_1.Button, { text: '重置回帖数据', onClick: () => {
                        (0, lib_1.resetReplyData)(user);
                    } }),
                react_1.default.createElement(components_1.Button, { text: '一键回帖', disabled: !!counter.replyBtn, onClick: () => {
                        (0, lib_1.replyOrThk)(counter, user, "reply" /* REPLY */, setCounter);
                    } }),
                react_1.default.createElement(components_1.Button, { text: '一键感谢', disabled: !!counter.thkBtn, onClick: () => {
                        (0, lib_1.replyOrThk)(counter, user, "thk" /* THANK */, setCounter);
                    } })),
            react_1.default.createElement(components_1.Panel, { title: "\u9AD8\u7EA7\u529F\u80FD" },
                react_1.default.createElement(components_1.Button, { text: '定时签到', disabled: !!counter.signBtn, onClick: () => {
                        (0, lib_1.timeControl)(counter, setCounter, user);
                    } }),
                react_1.default.createElement(components_1.Button, { text: '下载图片', disabled: !!counter.downloadBtn, onClick: () => {
                        (0, lib_1.downloadImgs)(user, counter, setCounter);
                    } }),
                react_1.default.createElement(components_1.Button, { text: '自动发文', onClick: () => {
                        (0, autoPost_1.autoPost)(user);
                    } }),
                react_1.default.createElement(components_1.Button, { text: '现在有空', onClick: () => {
                        setShowModal(true);
                    } }),
                react_1.default.createElement(components_1.Button, { text: '屏蔽图片', onClick: () => {
                        (0, lib_1.noDisplayPic)();
                    } }),
                react_1.default.createElement(components_1.Button, { title: "\u670D\u52A1\u5668\u6258\u7BA1\u767B\u5F55\u8D26\u53F7\u65F6\u4F7F\u7528", text: '获取验证码', onClick: () => {
                        setShowCaptcha(true);
                        (0, reCaptcha_1.reCaptcha)();
                    } }),
                react_1.default.createElement(components_1.Button, { text: '检查更新', onClick: () => {
                        (0, lib_1.checkUpdate)(user);
                    } })),
            react_1.default.createElement("br", null),
            react_1.default.createElement(components_1.Button, { text: 'close', onClick: setShowHome }),
            react_1.default.createElement(components_1.Modal, { isShow: showCaptcha, header: react_1.default.createElement("div", { className: "flex w-80" }, "\u670D\u52A1\u5668\u6258\u7BA1\u767B\u5F55\u8D26\u53F7\u65F6\u4F7F\u7528"), footer: react_1.default.createElement("div", { className: "flex justify-evenly w-full" },
                    react_1.default.createElement(components_1.Button, { text: '刷新验证码', onClick: () => {
                            setRecapchaToken('');
                            grecaptcha.reset();
                        } }),
                    react_1.default.createElement(react_copy_to_clipboard_1.CopyToClipboard, { text: recapchaToken, onCopy: () => new lib_1.MessageBox('复制验证码成功') },
                        react_1.default.createElement(components_1.Button, { disabled: !recapchaToken, text: '复制验证码', onClick: () => '' }))), onClose: function () {
                    setShowCaptcha(false);
                } },
                react_1.default.createElement("div", { className: "w-40 h-20", id: "reCaptcha" })),
            showModal ? react_1.default.createElement(AutoClickManage_1.AutoClickManage, { user: user, onClose: () => setShowModal(false) }) : '')));
};
exports.Home = Home;


/***/ }),

/***/ 950:
/***/ ((module) => {

"use strict";
module.exports = CopyToClipboard;

/***/ }),

/***/ 583:
/***/ ((module) => {

"use strict";
module.exports = JSZip;

/***/ }),

/***/ 995:
/***/ ((module) => {

"use strict";
module.exports = React;

/***/ }),

/***/ 533:
/***/ ((module) => {

"use strict";
module.exports = ReactDOM;

/***/ }),

/***/ 282:
/***/ ((module) => {

"use strict";
module.exports = ReactTable;

/***/ }),

/***/ 581:
/***/ ((module) => {

"use strict";
module.exports = saveAs;

/***/ }),

/***/ 419:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse('{"name":"JKForum 助手","name:en":"JKForum Helper","name:zh-TW":"JKForum 助手","name:ja":"JKForum 助手","name:ko":"JKForum 조수","namespace":"https://github.com/Eished/jkforum_helper","version":"0.9.2","description":"JKF 捷克论坛助手:自动签到、定时签到、自动感谢、自动加载原图、自动播放图片、自动支付购买主题贴、自动完成投票任务,优化浏览体验,一键批量回帖/感谢,一键打包下载帖子图片,自动识别验证码,自动现在有空,自动点击置顶广告,登录时跳过绑定手机号验证码,自动发文","description:en":"JKF JKForum Helper: Auto-sign-in, timed sign-in, auto-thank you, auto-load original image, auto-play image, auto-pay to buy theme post, auto-complete voting task, optimize browsing experience, one-click bulk reply/thank you, one-click package to download post image,Skip mobile verification code when logging in","description:zh-TW":"JKF 捷克論壇助手:自動簽到、定時簽到、自動感謝、自動加載原圖、自動播放圖片、自動支付購買主題貼、自動完成投票任務,優化瀏覽體驗,一鍵批量回帖/感謝,一鍵打包下載帖子圖片,自動識別驗證碼,自動現在有空,自動點擊置頂廣告,登錄時跳過綁定手機號驗證碼,自動發文","description:ja":"JKF チェコ語フォーラム助手:自動チェックイン、時限式チェックイン、オートサンキュー、オリジナル画像の自動読み込み、画像の自動再生、トピック投稿の自動支払い、ポールタスクの自動完了、ブラウジングエクスペリエンスの最適化、ワンクリックでの一括返信/サンキュー、ワンクリックでの投稿画像のパッケージダウンロード,ログイン時にモバイル認証コードをスキップ","description:ko":"JKF 체코 포럼 조수: 자동 로그인, 정기 로그인, 자동 감사, 원본 사진 자동로드, 테마 스티커 구매 자동 결제, 투표 작업 자동 완료, 최적화 된 브라우징 경험, 원 클릭 일괄 회신 / 감사, 원 클릭 포스트 사진의 패키지 다운로드 클릭다운로드하십시오,로그인 시 모바일 인증 코드 건너뛰기","author":"Eished","copyright":"Eished","license":"MIT","match":["*://*.jkforum.net/*"],"run-at":"document-idle","supportURL":"https://github.com/Eished/jkforum_helper/issues","homepage":"https://github.com/Eished/jkforum_helper","grant":["GM_getValue","GM_setValue","GM_deleteValue","GM_info","GM_xmlhttpRequest","GM_openInTab","GM_registerMenuCommand","GM_addElement","GM_addStyle","GM_notification","GM_addValueChangeListener"],"connect":["mymypic.net","jkf.iknow.fun","cdn.jsdelivr.net","github.com","greasyfork.org","jkf.hare200.com"],"require":["https://cdn.jsdelivr.net/npm/react@18.1.0/umd/react.production.min.js","https://cdn.jsdelivr.net/npm/react-dom@18.1.0/umd/react-dom.production.min.js","https://cdn.jsdelivr.net/npm/react-table@7.8.0/dist/react-table.production.min.js","https://cdn.jsdelivr.net/npm/file-saver@2.0.5/dist/FileSaver.min.js","https://cdn.jsdelivr.net/npm/jszip@3.9.1/dist/jszip.min.js","https://cdn.jsdelivr.net/npm/react-copy-to-clipboard@5.1.0/build/react-copy-to-clipboard.min.js"],"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDExNi4xNjQ2NTUsIDIwMjEvMDEvMjYtMTU6NDE6MjAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6YzYwNmI3NGQtODA4Zi03YjQ3LWI4NGYtYjNlZmJiMTM4NDIwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkM3MzFDMzYyRUE5MzExRUJCOTU4RkY3NUMxOTY5MDdGIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkM3MzFDMzYxRUE5MzExRUJCOTU4RkY3NUMxOTY5MDdGIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyMS4yIChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjA2MWY1NjgyLTk5OTctNDU0OS04NjIzLWZhNzY0MmVjMTM5MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpjNjA2Yjc0ZC04MDhmLTdiNDctYjg0Zi1iM2VmYmIxMzg0MjAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5urL1nAAAJJUlEQVR42uxba2wU1xX+ZnZ2vYvX4BpDCYVA6xgKkR0wlYlJnyK1iiweVlqgGFpKK6qWAuYtQgitoYANGCTqRnJIQbQ/sJoAKsESMkrTitSQpuJhUBwVHCC21QeCgh17vevd6Tkzs+uZfXgftsevHOvT7twd35lz7rnnfufcGUGWZQxnETHMZdgbQLpy5UpfX0MgjCAkExwabBpEDT4NbkIHoZ3QRviUv/Msbff0/o1ZLBbl5npL0gkZhCkavkj4gtaeqhnArilu6aYfr2YEF6GV8EgS8J/ffh9NaSlo8PlQLwr4iNBAaBUT1YCMKtkdPTJAGuF5wrcIeYQvE0b3hQs5k4CmUmAkm9Kj3Dz/NRJuEP5CWrxDfnSVPn2KRnJsBoDNCSneKUPIJywjvEj4vBnzVCClPqXJMZL9olObVgIm0udEUqTAR8p4fbjmlfGmRcApyYI7QjRDyGo3sQZBGgP8hPAB4TyhyCzlu1VAU5CngVXCDLuEPaT4NZcHx9weTAtEoB6uAvMItYTXCc8N2HCuGYNG3+mw4ceiiL9T4PxVp5fijpCYAThYHSZUE2YOmnVN8wwyRLLDildpavyZvGFqJCOI3QS4twnFg3aB1zwiyYrnaVq82+6mQC3EZoCRhD8Rvj0kmI6sxIdxkoi3yRNmBBtBDENaThBeGFJ0TzUCe/UfPZ30KUQ2wFpC4ZDkvGQEmxXPUEwoV/I/IdQAvK7uHurc3ybhh+QFXwvnAVu1+T90hUaelkf+eEX2dTE7aKRmxaBRxBqd4EQUotJWES92+pBlFVDnN8ACwqiouTOZTxC6ruyjzCRSQYUzLb10d264/+HrWK1WtLe3h5xXd5dSRXcC2R+N/nMTlIAokgG+S65Q5//tnI5cRsThw4fl+vr6APLz8yOeW1VVZTh36tSp3fa9evVqw/l37tyRCwsLld9S7JCby8h+vyNUQn52fPR7DQciRmo/b0DuqMAV7xspgqRlcF+JxYKTJ08GKRI4Tk1NjXjulClTDOc6HI6I52ZnZ+PIkSOGc86cOYNz586FH8kE3d8iGr5PpxXhaW7KjjWxcbuNfuf1eiOe29HRETIFwondbseJEycMyt+6dQsrV65EZ2dnxOwwEWmlW5K7Eignfc1mD5jRg5DSY9m/fz9mzuxKNVpbW1FUVIQnT57E3EdBFiGHlIsSF6wUYlJHqLUnQV0VstgA0/pL+fnz52P9+vWGtjVr1uD69etx9fP1TOBnC7QCWjRxacU3dcgzJa10ZbqMHz8elZWVhraKigqcPHky7r5cHq2C2B73v07kGDCuPwzAyo8b13Xp2tpabNq0ydR7oFiSzgb4nNnKb9iwAQUFBYHjBw8eYPny5SGBs88NQMyXDZBsjrXVSTdr1izs27fP8NuqVavQ0NBgvhsKcLAB7GZcy+PxKMzu+PHjSEpKCrTv3r074nrf56mBDLuoywf6VHh527FjB7KysgJtZ8+exa5du/otpSAyZJFgwvZYW1sb5s2bh23bthnajx07ht7YnLVJmh97oydC8BmrP5IZJEiSJOzdu1dhfXopKSlBTU1NCMOMV07WAu9/Av+eQUR5heJuzjNQN+A0C5hiAJvNhrS0tJD2nJwcrF27FocOHepR/x/+S0U0+dELdE1LV21AgMm7w1evXg2ZBjt37sSkSZNMub4YZrdI0pr63AtaWlqUBOfGjRtYuHAh5syZo7SPGjUKpaWlWLp0acJ9pzsJKYi6JzjSrjtHUL9KZo3+unXrFOVZNm/ejEuXLikFFpYlS5Yoy+OFCxcS6vsX36T5/T2NDndb0IG676xvM8bFvhOmuvrvnALrpby8PCRIxuzapAWvZ9EQnEbzAiRGj53GYBZrPSBY9OTHP/cfPnwYOJ4+fTo2btyYKKHpesSiOwRNEZ8PPlG3KESVsWPHGo4fP36csEc0Nzdjz549hrbt27cjIyPDPCZIE0KMPnMQCFZc5vILV2saGxt7dAOc/t68eTNw7HQ6cfDgQTOzQRcbIKbSS2FhIdLT0wPH9+7dU9ATYQLEAVEvixYtUgolJuUCrWyA/3Y3V1nmzp2LsrIyQ9v58+d7zOBYOPKfPn3a0MbEKDnZlCT1IRvA4MdMWfnJsaqqKpw6dQqXL1/GxYsXMWbMmMA5XKs/evRor90FkyPOF/ySmZmJrVu3muEBzWyAfwbT09zcXCxevFhZn2fPnh3yj8XFxbh9+3av3Qj3FUyHt2zZYiir95E0sAHq9MvctGmRa6T379/HihUrQmp54STYhYN3ioLlwIEDhpjCZXLOFm22JPj6gqmo/PdDZoJcguVyooNTU87Z8/LyMGHCBCUeuFwu3L17V2Fu1dXVePToUUz98wjqgyb3EY0qM0XW1wvYaDa6B5+rl0tlgsIBmMTU+VPif0DdIBmQkkIE8aMS4Kl0lbZlvEy++6Dr95e/A/x6OWIri2sGoFX8Y8GW8qykMcF3B7IBgqVkAS1drV3HeV+Kh85pLNaH92wi2v3JEK9D6wa85to2Z9E3ghJ5j4Z4qDPpzLmBv5v3CDcHiwcouzttOnjim/+dXjRJImqgsyNPg3IMB5EVD3iN4msrZKMj/YGLNkNaeRp9jxeNlD5X6OsB+pn083jS48GmPPMJCn4bJAv+F3jOOOi0y7yED1XXd3fiN0lWvKmvC4Qrih4hlA01/V0evGWVUCxEeVI0kJ8QXh0Kbs+D3e7G78ntl1lEYn9ybAZg4YcmXyI0DVblabnroJHfRm7/AzKAO1zVONq+ABOkXEJlnKtt/wY7WXH5Ggp4X3VYUaZUgyOUzGPZGGkm/FQzxHHC44GotEJvucjnwTu01C20WZBPI/9BgEFGkHj2Ba4RVhF+yZUrqA9Vs1FG9JfCrJjyvpAX9aR8NTVXWS14PzDicuxdJSqTob4xxg8f50B9bS69t/V10DA1lwKp6ltjrsAbY8DfCH8lP75Omrjj0oaNY7VDGD26V990486ehvrgFYOfQH9KMwo/iut/edKmeZ+oux2vFmfcGsNvIfDGwb9tEhqX5eITZxI+5ioO6dlEo+zWvzOYyC57ksMJgZ/PMVEsOuX9O9P+LUufxkL9RjCo1OJS3T3W1wJjEZFIgfDZ2+PDXP4vwABKHSZ0zSd04wAAAABJRU5ErkJggg=="}');

/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			id: moduleId,
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	
/******/ 	// startup
/******/ 	// Load entry module and return exports
/******/ 	// This entry module is referenced by other modules so it can't be inlined
/******/ 	var __webpack_exports__ = __webpack_require__(629);
/******/ 	
/******/ })()
;