bookwalker图源自动下载
// ==UserScript== // @name bookwalker图源下载 // @namespace summer-script // @version 0.5 // @description bookwalker图源自动下载 // @author summer // @match https://viewer.bookwalker.jp/* // @match https://viewer-trial.bookwalker.jp/* // @match https://pcreader.bookwalker.com.tw/* // @match https://preview.bookwalker.com.tw/* // @icon https://bookwalker.jp/favicon.ico // @license GPL-3.0 // @grant GM_xmlhttpRequest // @grant GM_download // @connect bookwalker.jp // @connect bookwalker.com.tw // ==/UserScript== (function () { "use strict"; var tip = { initializing: '初始化中', notSupport: '发生错误, 当前作品不支持或脚本已失效', downloadBtn: '下载图源', downloadBtnPack: '打包下载', downloadPreparing: '下载准备开始...', downloadTip01: '下载期间请勿操作阅读器(包括键盘和鼠标', downloadTip02: '下载期间可以切换到其他标签页', downloadTipPack01: '将进行打包下载, 压缩包将在全部下载完成时生成', downloadTipPack02: '打包功能可能在较旧的浏览器中无法运作', downloadRetry: '图源获取失败, 正在重试...', downloadNetRetry: '网络故障, 正在重试...', downloading: '正在下载', downloadFinish: '下载完毕', downloadPacking: '正在生成压缩包...', downloadPackFailed: '无法下载压缩包', downloadProgress: '正在下载: {1} / {2}', packFailed: '打包失败', fatalError: '脚本运行错误, 请关掉页面稍后再试', warnMultiPage: '检测到暂不支持的数据', }; var config = { packFileName: 'configuration_pack.json', lsKeyBrowserId: 'NFBR.Global/BrowserId', urlAuthInfo: '/browserWebApi/c', urlAuthInfoTrial: '/trial-page/c', urlGetLoader: '/browserWebApi/03/getLoader', hostTrial: ['viewer-trial.bookwalker.jp', 'preview.bookwalker.com.tw'], fontSize: 'normal_default', waitStartMs: 5000, waitNextImgMs: 2000, waitRetryMs: 4000, downloadPackage: false, }; var downloadStatus = { now: 0, sum: 0, }; var ui = initUI(); var authInfo = { // bs: BOOKMARK_SHARED // cti: CONTENT_TITLE // cty: CONTENT_TYPE // lin: LOOK_INSIDE // lp: // lpd: last page info // ms: MARKER_SHARED }; var imageList = []; var packFiles = []; var downloadZip = downloadZipInit(); var Y4jNum = null; if (! checkSupport()) { ui.updateBtnText(tip.notSupport); return; } initNFBR(); waitStart(config.waitStartMs) .then(getLoader) .then(getAuthInfo) .then(getConfigPack) .then(decryptConfigPack) .then(parseImage) .then(downloadImageList) .catch(function (err) { console.warn(err); ui.updateBtnText(tip.notSupport); }); function checkSupport() { var cid = (new URLSearchParams(window.location.search)).get('cid'); if (! cid) { return false; } if (! localStorage.getItem(config.lsKeyBrowserId)) { return false; } return true; } function waitStart(ms) { return new Promise(function (resolve, reject) { function download(pack) { ui.disableBtn(); ui.showMsgBox(); ui.updateBtnText(tip.downloadPreparing); ui.newMsg(tip.downloadPreparing); ui.newMsg(tip.downloadTip01); ui.newMsg(tip.downloadTip02); if (pack) { ui.newMsg(tip.downloadTipPack01); ui.newMsg(tip.downloadTipPack02); config.downloadPackage = true; } resolve(); } function start() { ui.updateBtnText(tip.downloadBtn); ui.listenBtn(function () { download(); }); ui.listenBtnPack(function () { download('pack'); }); } // TODO check viewer loaded setTimeout(start, ms); }); } function getLoader() { if (config.hostTrial.includes(window.location.hostname)) { config.urlAuthInfo = config.urlAuthInfoTrial; return Promise.resolve(null); } return fetch(config.urlGetLoader) .then(function (resp) { return resp.text(); }) .then(function (data) { var reg = new RegExp('Y4j=function\\(\\).+?;\\}'); var match = reg.exec(data); return new Promise(function (resolve, reject) { if (!match) { reject('Error: getLoader match failed'); } else { resolve(match[0]); } }); }) .then(function (code) { var Y4j; eval(code); Y4jNum = Y4j(); return Y4jNum; }); } function getAuthInfo() { var p = { cid: new URLSearchParams(window.location.search).get('cid') }; if (getCookieValue('u1')) { p.u1 = getCookieValue('u1'); } if (getCookieValue('u2')) { p.u2 = getCookieValue('u2'); } if (localStorage.getItem(config.lsKeyBrowserId)) { p.BID = localStorage.getItem(config.lsKeyBrowserId); } if (Y4jNum) { p.cr = Y4jNum; } // TODO: params [lin, w, h] var q = new URLSearchParams(p).toString(); var url = config.urlAuthInfo + '?' + q; return fetch(url) .then(function (resp) { return resp.json(); }).then(function (data) { authInfo = data; return data; }); } function getConfigPack() { try { var url = r###RLBuilder(config.packFileName); } catch (error) { ui.newMsg(`${tip.fatalError}, ` + `URL: ${authInfo.url}, Path: ${config.packFileName}`); return Promise.reject(); } return fetch(url).then(function (resp) { return resp.json(); }); } function decryptConfigPack(conf64) { if (! conf64.data) { return Promise.resolve({ config: conf64, key1: [], key2: [], key3: [], key1Arr: '', key2Arr: '', key3Arr: '', }); } var confEnc = atob(conf64.data); var keyArr = []; for (var k = 0; k < 3; k++) { keyArr[k] = []; for (var i = 0; i < 32; i++) { keyArr[k].push(confEnc.charCodeAt(k * 32 + i)); } } var confData = confEnc.substring(k * 32); var key1 = keyArr[0]; var key2 = keyArr[1]; var key3 = keyArr[2]; var dataArr = new Uint8Array(confData.length); for (var d = 0; d < confData.length; d++) { dataArr[d] = confData.charCodeAt(d); } return window.NFBR.decryptConfig(dataArr, key1, key2, key3); } function parseImage(configData) { // console.log(configData); configData.config.configuration.contents.forEach(function (item) { var keyInfo = { key1: configData.key1, key2: configData.key2, key3: configData.key3, key1Arr: configData.key1Arr, key2Arr: configData.key2Arr, key3Arr: configData.key3Arr, }; var imgInfo = configData.config[item.file]; imgInfo.FileLinkInfo.PageLinkInfoList.forEach(function (pageInfo) { var imgName = item.file; pageInfo.Page.imgName = imgName; var imgHash = window.NFBR.getImgURLHash(pageInfo.Page, keyInfo, configData.config); imgName += '/' + imgHash + '.' + item.type; if (1 == item.index) { imgName += 'bvCoverImage'; } var widthCut = pageInfo.Page.DummyWidth ? pageInfo.Page.DummyWidth : 0; var heightCut = pageInfo.Page.DummyHeight ? pageInfo.Page.DummyHeight : 0; imageList.push({ url: imgName, widthCut: widthCut, heightCut: heightCut, pageInfo: pageInfo, keyInfo: keyInfo, }); }); }); downloadStatus.sum = imageList.length; ui.updateBtnText(tip.downloading); // console.log(imageList); return Promise.resolve(imageList); } function downloadImageList(imgList) { var imgInfo = imgList.shift(); if (! imgInfo) { ui.updateBtnText(tip.downloadFinish); ui.newMsg(tip.downloadFinish); downloadPackage(); return; } downloadStatus.now = downloadStatus.sum - imageList.length; ui.newMsg( tip.downloadProgress, downloadStatus.now, downloadStatus.sum ); var img = new Image(); img.addEventListener('load', function () { var imgWidth = img.naturalWidth - imgInfo.widthCut; var imgHeight = img.naturalHeight - imgInfo.heightCut; var pageInfo = imgInfo.pageInfo; var keyInfo = imgInfo.keyInfo; var blocks = getImageBlocks(pageInfo, keyInfo, img.naturalWidth, img.naturalHeight); var canvas = reOrderImage(img, blocks, imgWidth, imgHeight); downloadImage(canvas, config.waitNextImgMs, function () { URL.revokeObjectURL(img.src); downloadImageList(imgList); }); }); try { var imgSrc = r###RLBuilder(imgInfo.url); } catch (error) { ui.newMsg(`${tip.fatalError}, ` + `URL: ${authInfo.url}, Path: ${imgInfo.url}`); return; } function retryDownload() { // console.log('Parameter expired, retry'); ui.newMsg(tip.downloadRetry); getAuthInfo() .then(function () { waitRetry(config.waitRetryMs) .then(function () { imgList.unshift(imgInfo); downloadImageList(imgList); }); }) .catch(function () { ui.newMsg(tip.downloadNetRetry); waitRetry(config.waitRetryMs) .then(function () { retryDownload(); }); }); } GM_xmlhttpRequest({ method: 'GET', url: imgSrc, responseType: 'blob', onload: function (resp) { if (200 !== resp.status) { retryDownload(); return; } img.src = URL.createObjectURL(resp.response); }, onerror: retryDownload }); } function reOrderImage(img, blocks, imgWidth, imgHeight) { var canvas = document.createElement('canvas'); canvas.width = imgWidth; canvas.height = imgHeight; var ctx = canvas.getContext('2d'); ctx.drawImage(img, 0, 0, imgWidth, imgHeight); for (var i = 0; i < blocks.length; i++) { ctx.drawImage(img, blocks[i].destX, blocks[i].destY, blocks[i].width, blocks[i].height, blocks[i].srcX, blocks[i].srcY, blocks[i].width, blocks[i].height ); } return canvas; } function downloadImage(canvas, delay, cb) { canvas.style.position = 'fixed'; canvas.style.top = '0'; canvas.style.left = '0'; var pageNo = downloadStatus.now.toString(); pageNo = pageNo.padStart(downloadStatus.sum.toString().length, '0'); var filename = `${authInfo.cti} - ${pageNo}.png`; if (config.downloadPackage) { canvas.toBlob(function (blob) { addImageToPackage(blob, filename); setTimeout(cb, delay); }); } else { GM_download({ name: filename, url: canvas.toDataURL(), onload: function () { setTimeout(cb, delay); } }); } } function addImageToPackage(blob, filename) { packFiles.push({ name: filename, input: blob, lastModified: new Date() }); } function downloadPackage() { if (0 === packFiles.length) { return; } ui.newMsg(tip.downloadPacking); downloadZip(packFiles).blob().then(function (blob) { var filename = `${authInfo.cti}.zip`; var blobURL = URL.createObjectURL(blob); // GM_download({ // name: filename, // url: blobURL, // onload: function () { // packFiles = []; // URL.revokeObjectURL(blobURL); // ui.newMsg(tip.downloadFinish); // }, // onerror: function (err) { // ui.newMsg(`${tip.downloadPackFailed}: ${err}`); // } // }); var a = document.createElement("a"); a.href = blobURL; a.download = filename; a.click(); packFiles = []; ui.newMsg(tip.downloadFinish); }).catch(function (err) { ui.newMsg(`${tip.packFailed}: ${err}`); }); } function getImageBlocks(pageInfo, keyInfo, fullWidth, fullHeight) { if (! pageInfo.Page.BlockWidth) { return []; } window.NFBR.calcU2F(pageInfo.Page, keyInfo); var size = pageInfo.Page.Size; var imgBlocks = window.NFBR.getBlocks(pageInfo.Page, fullWidth, fullHeight); return imgBlocks; } function r###RLBuilder(fileName) { var path; if (1 == authInfo.cty || 2 == authInfo.cty) { path = fileName; } else { path = config.fontSize + '/' + fileName; } var url = (new URL(authInfo.url + path)).toString(); url += '?'; url += (new URLSearchParams(authInfo.auth_info)).toString(); return url; } function getCookieValue(name) { const regex = new RegExp(`(^| )${name}=([^;]+)`); const match = document.cookie.match(regex); if (match) { return match[2]; } } function waitRetry(ms){ return new Promise(function (resolve) { setTimeout(resolve, ms); }); } function initUI() { var ui = { btn: null, btnR: null, btnPack: null, cover: null, msgBox: null, listenBtn: function (cb) { this.btn.addEventListener('click', cb); }, listenBtnPack: function (cb) { this.btnPack.addEventListener('click', cb); }, disableBtn: function () { this.btn.disabled = true; this.btnPack.disabled = true; }, enableBtn: function () { this.btn.disabled = false; this.btnPack.disabled = false; }, updateBtnText: function (text) { var args = Array.prototype.slice.call(arguments, 1); this.btn.innerText = text.replace(/{(\d+)}/g, function (match, num) { var key = num - 1; return 'undefined' !== typeof args[key] ? args[key] : match; }); }, showMsgBox: function () { this.cover.style.display = 'block'; this.msgBox.style.display = 'block'; }, hideMsgBox: function () { this.cover.style.display = 'none'; this.msgBox.style.display = 'none'; }, newMsg: function (text) { var args = Array.prototype.slice.call(arguments, 1); text = text.replace(/{(\d+)}/g, function (match, num) { var key = num - 1; return 'undefined' !== typeof args[key] ? args[key] : match; }); this.msgBox.value += text; this.msgBox.value += "\n"; this.msgBox.scrollTop = this.msgBox.scrollHeight; } }; var btn = document.createElement('button'); btn.innerText = tip.initializing; btn.style.position = 'fixed'; btn.style.top = '40px'; btn.style.right = '50px'; btn.style.zIndex = '10030'; btn.style.padding = '9px'; btn.style.background = '#fff'; btn.style.border = '1px solid #aaa'; btn.style.borderRadius = '4px 0 0 4px'; btn.style.minWidth = '112px'; btn.style.color = '#000'; btn.style.cursor = 'pointer'; btn.style.lineHeight = '16px'; btn.style.verticalAlign = 'middle'; document.body.appendChild(btn); ui.btn = btn; var btnR = document.createElement('button'); btnR.style.position = 'fixed'; btnR.style.top = '40px'; btnR.style.right = '20px'; btnR.style.zIndex = '10030'; btnR.style.padding = '9px 0px 9px 0px'; btnR.style.background = '#fff'; btnR.style.border = '1px solid #aaa'; btnR.style.borderLeft = 'none'; btnR.style.borderRadius = '0 4px 4px 0'; btnR.style.width = '30px'; btnR.style.color = '#000'; btnR.style.cursor = 'pointer'; btnR.style.lineHeight = '16px'; document.body.appendChild(btnR); ui.btnR = btnR; var btnRSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); btnRSvg.setAttribute('viewBox', '64 64 896 896'); btnRSvg.setAttribute('fill', 'currentColor'); btnRSvg.setAttribute('width', '12px'); btnRSvg.setAttribute('height', '12px'); btnRSvg.style.verticalAlign = 'top'; btnRSvg.style.padding = '2px'; var btnRSvgPath = document.createElementNS('http://www.w3.org/2000/svg', 'path'); btnRSvgPath.setAttribute( 'd', 'M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 ' + '227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 ' + '7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 ' + '0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z' ); btnRSvg.appendChild(btnRSvgPath); btnR.appendChild(btnRSvg); var btnPack = document.createElement('button'); btnPack.innerText = tip.downloadBtnPack; btnPack.style.position = 'fixed'; btnPack.style.top = '79px'; btnPack.style.right = '20px'; btnPack.style.zIndex = '10031'; btnPack.dataset.ostylePadding = '9px'; btnPack.dataset.ostyleBorder = '1px solid #aaa'; btnPack.style.background = '#fff'; btnPack.style.borderRadius = '4px'; btnPack.style.minWidth = '90px'; btnPack.style.color = '#000'; btnPack.style.cursor = 'pointer'; btnPack.style.lineHeight = '16px'; btnPack.style.verticalAlign = 'middle'; btnPack.style.overflowY = 'hidden'; btnPack.style.transition = '100ms ease-in-out'; btnPack.style.opacity = 0; btnPack.style.boxShadow = '0 6px 16px 0 rgba(0, 0, 0, 0.08), ' + '0 3px 6px -4px rgba(0, 0, 0, 0.12), ' + '0 9px 28px 8px rgba(0, 0, 0, 0.05)'; btnR.addEventListener('mouseenter', function () { btnDropMenuShow(btnPack); }); btnR.addEventListener('click', function () { btnDropMenuShow(btnPack); }); btnR.addEventListener('mouseleave', function () { btnDropMenuHide(btnPack); }); btnPack.addEventListener('mouseenter', function () { btnDropMenuShow(btnPack); }); btnPack.addEventListener('mouseleave', function () { btnDropMenuHide(btnPack); }); document.body.appendChild(btnPack); ui.btnPack = btnPack; function btnDropMenuShow(btn) { clearTimeout(btn.dataset.hidetimer); btn.style.padding = btn.dataset.ostylePadding; btn.style.border = btn.dataset.ostyleBorder; btn.style.height = 'auto'; btn.style.opacity = 1; } function btnDropMenuHide(btn) { btn.dataset.hidetimer = setTimeout(function () { btn.style.height = 0; btn.style.border = 0; btn.style.padding = 0; btn.style.opacity = 0; }, 500); } var cover = document.createElement('div'); cover.style.width = '100%'; cover.style.height = '100%'; cover.style.position = 'fixed'; cover.style.zIndex = '10010'; cover.style.top = '0'; cover.style.left = '0'; cover.style.background = '#000'; cover.style.opacity = '0.1'; cover.style.display = 'none'; document.body.appendChild(cover); ui.cover = cover; var msgBox = document.createElement('textarea'); msgBox.style.width = '600px'; msgBox.style.height = '500px'; msgBox.style.position = 'fixed'; msgBox.style.zIndex = '10020'; msgBox.style.top = '50%'; msgBox.style.left = '50%'; msgBox.style.opacity = '0.9'; msgBox.style.display = 'none'; msgBox.style.padding = '30px'; msgBox.style.transform = 'translate(-50%, -50%)'; msgBox.readOnly = true; document.body.appendChild(msgBox); ui.msgBox = msgBox; return ui; } function initNFBR() { var Gdq = window; Gdq.NFBR = {}; (function () { var Xn3 = [ [1, 3, 10], [1, 5, 16], [1, 5, 19], [1, 9, 29], [1, 11, 6], [1, 11, 16], [1, 19, 3], [1, 21, 20], [1, 27, 27], [2, 5, 15], [2, 5, 21], [2, 7, 7], [2, 7, 9], [2, 7, 25], [2, 9, 15], [2, 15, 17], [2, 15, 25], [2, 21, 9], [3, 1, 14], [3, 3, 26], [3, 3, 28], [3, 3, 29], [3, 5, 20], [3, 5, 22], [3, 5, 25], [3, 7, 29], [3, 13, 7], [3, 23, 25], [3, 25, 24], [3, 27, 11], [4, 3, 17], [4, 3, 27], [4, 5, 15], [5, 3, 21], [5, 7, 22], [5, 9, 7], [5, 9, 28], [5, 9, 31], [5, 13, 6], [5, 15, 17], [5, 17, 13], [5, 21, 12], [5, 27, 8], [5, 27, 21], [5, 27, 25], [5, 27, 28], [6, 1, 11], [6, 3, 17], [6, 17, 9], [6, 21, 7], [6, 21, 13], [7, 1, 9], [7, 1, 18], [7, 1, 25], [7, 13, 25], [7, 17, 21], [7, 25, 12], [7, 25, 20], [8, 7, 23], [8, 9, 23], [9, 5, 14], [9, 5, 25], [9, 11, 19], [9, 21, 16], [10, 9, 21], [10, 9, 25], [11, 7, 12], [11, 7, 16], [11, 17, 13], [11, 21, 13], [12, 9, 23], [13, 3, 17], [13, 3, 27], [13, 5, 19], [13, 17, 15], [14, 1, 15], [14, 13, 15], [15, 1, 29], [17, 15, 20], [17, 15, 23], [17, 15, 26] ], tn3 = [ function (gr3, Br3, Hr3, Rr3) { return ( (gr3 ^= gr3 << Br3), (gr3 ^= gr3 >>> Hr3), (gr3 ^= gr3 << Rr3) ); }, function (Rsm, DMm, UMm, AMm) { return ( (Rsm ^= Rsm << AMm), (Rsm ^= Rsm >>> UMm), (Rsm ^= Rsm << DMm) ); }, function (LMm, jMm, lMm, qMm) { // qLs_MBv(Hsm, 18); // zsm(t6s[pBv] - Y6s[FDs]); return ( (LMm ^= LMm >>> jMm), (LMm ^= LMm << lMm), (LMm ^= LMm >>> qMm) ); }, function (vMm, sMm, MMm, mMm) { return ( (vMm ^= vMm >>> mMm), (vMm ^= vMm << MMm), (vMm ^= vMm >>> sMm) ); }, function (EMm, dMm, OMm, kMm) { return ( (EMm ^= EMm << dMm), (EMm ^= EMm << kMm), (EMm ^= EMm >>> OMm) ); }, function (fMm, TMm, CMm, KMm) { // qLs_MBv(Hsm, 19); // zsm(t6s[rBv] - Y6s[XDs]); return ( (fMm ^= fMm >>> TMm), (fMm ^= fMm >>> KMm), (fMm ^= fMm << CMm) ); }, ], Yn3 = Xn3["length"], zn3 = tn3["length"], gn3 = 2463534242, Bn3 = Xn3[74], Hn3 = tn3[0]; (Gdq["NFBR"]["T8n"] = function () { var Rn3 = gn3, D83 = Bn3[0], U83 = Bn3[1], A83 = Bn3[2], L83 = Hn3; (this["e7Ks"] = function (j83, l83) { Rn3 = gn3; var q83 = Xn3[j83]; (D83 = q83[0]), (U83 = q83[1]), (A83 = q83[2]), (L83 = tn3[l83]); }), (this["j7p"] = function (v83) { var s83 = v83 >>> 0; 0 === s83 && (s83 = gn3), (Rn3 = s83); }), (this["W5C"] = function (M83) { if (M83 <= 1) return 0; for ( var m83, E83, d83 = Rn3, O83 = 4294967295 - M83; (m83 = (E83 = (d83 = L83(d83, D83, U83, A83) >>> 0) - 1) % M83), O83 < E83 - m83; ); return (Rn3 = d83), m83; }); }), Gdq["NFBR"]["T8n"]["prototype"], (Gdq["NFBR"]["T8n"]["M2e"] = Yn3), (Gdq["NFBR"]["T8n"]["B4d"] = zn3), (Gdq["NFBR"]["T8n"]["n2C"] = Yn3 * zn3); })(); Gdq["NFBR"]["C6A"] = {}; var cJm = Gdq["window"], NJm = "e7Ks", WJm = "j7p", ZJm = cJm["NFBR"]["T8n"], xJm = ZJm["M2e"], wJm = ZJm["B4d"], PJm = cJm["Math"]["floor"], JJm = function (func, context) { return Function.prototype.bind.apply( func, Array.prototype.slice.call(arguments, 1) ); }, GJm = cJm["Array"]["prototype"]["push"]; Gdq["NFBR"]["C6A"]["a3f"] = function (hJm, rJm, nJm, bJm) { var pJm = new ZJm(), SJm = rJm ^ nJm ^ bJm, XJm = PJm(hJm / 65536), tJm = PJm(rJm / 65536), YJm = PJm(nJm / 65536), zJm = PJm(bJm / 65536), gJm = xJm, BJm = wJm, HJm = tJm ^ YJm ^ zJm, RJm = XJm ^ zJm, DGm = hJm ^ rJm, UGm = hJm ^ nJm, AGm = hJm ^ bJm, LGm = (HJm >>>= 16) % BJm, jGm = ((HJm - LGm) / BJm) % gJm, lGm = JJm(pJm["W5C"], pJm); pJm[NJm](jGm, LGm), pJm[WJm](SJm); var qGm = lGm(65536) | (lGm(65536) << 16), vGm = tJm >>> 16, sGm = YJm >>> 16; (DGm = (DGm ^ qGm) >>> 0), (UGm = (UGm ^ qGm) >>> 0), (AGm = (AGm ^ qGm) >>> 0); var MGm = (RJm = (RJm >>> 16) ^ lGm(512)) % BJm, mGm = ((RJm - MGm) / BJm) % gJm; pJm[NJm](mGm, MGm), pJm[WJm](DGm); var EGm = dGm(lGm, vGm * sGm); pJm[WJm](UGm); var OGm = kGm(lGm, vGm), fGm = kGm(lGm, sGm), TGm = CGm(lGm, OGm, vGm), KGm = CGm(lGm, fGm, sGm); pJm[WJm](AGm); var VGm = [], QGm = []; FGm(lGm, VGm, QGm, OGm, fGm, vGm, sGm); var IGm = dGm(lGm, vGm), cGm = dGm(lGm, sGm), NGm = [], WGm = []; return ( FGm(lGm, WGm, NGm, TGm, KGm, vGm, sGm), ZGm(vGm, sGm, EGm, IGm, cGm, NGm, WGm, TGm, KGm, QGm, VGm, OGm, fGm) ); }; var ZGm = function ( xGm, wGm, PGm, JGm, GGm, hGm, rGm, nGm, bGm, pGm, SGm, XGm, tGm ) { var YGm, zGm, gGm, BGm, HGm, RGm, Dhm, Uhm, Ahm = [], Lhm = xGm + 1, jhm = wGm + 1, lhm = Lhm << 1, qhm = jhm << 1, vhm = JJm(GJm, Ahm); for (BGm = 0; BGm < xGm; BGm++) for (HGm = 0; HGm < wGm; HGm++) (Dhm = ((Uhm = PGm[BGm + HGm * xGm]) - (RGm = Uhm % xGm)) / xGm), (YGm = BGm < SGm[HGm] ? BGm : BGm + Lhm), (zGm = HGm < pGm[BGm] ? HGm : HGm + jhm), (gGm = RGm < rGm[Dhm] ? RGm : RGm + Lhm), vhm((Dhm < hGm[RGm] ? Dhm : Dhm + jhm) * lhm + YGm), vhm(gGm * qhm + zGm); for ( vhm(bGm * lhm + XGm), vhm(nGm * qhm + tGm), BGm = 0; BGm < xGm; BGm++ ) (HGm = pGm[BGm]), (gGm = (RGm = JGm[BGm]) < nGm ? RGm : RGm + Lhm), vhm((Dhm = hGm[RGm]) * lhm + (YGm = BGm < XGm ? BGm : BGm + Lhm)), vhm(gGm * qhm + HGm); for (HGm = 0; HGm < wGm; HGm++) (BGm = SGm[HGm]), (RGm = rGm[(Dhm = GGm[HGm])]), (zGm = HGm < tGm ? HGm : HGm + jhm), vhm((Dhm < bGm ? Dhm : Dhm + jhm) * lhm + BGm), vhm(RGm * qhm + zGm); return Ahm; }, kGm = function (gPm, BPm) { return BPm < 4 ? gPm(BPm + 1) : gPm(BPm - 1) + 1; }, CGm = function (HPm, RPm, DJm) { // qLs_MBv(zPm, 40); // XPm(t6s[IHv] - Y6s[fUs]); if (0 === DJm) return 0; var UJm = HPm(DJm); return UJm < RPm ? UJm : UJm + 1; }, FGm = function (AJm, LJm, jJm, lJm, qJm, vJm, sJm) { for ( var MJm, mJm, EJm, dJm = vJm, OJm = sJm, kJm = lJm, fJm = qJm, TJm = 0, CJm = 0; 0 < dJm + OJm; ) if ((MJm = AJm(dJm + OJm)) < dJm) { if (MJm < kJm) { for (mJm = CJm; 0 < mJm && !(TJm >= LJm[mJm - 1]); mJm--); for (EJm = CJm + OJm; EJm < sJm && !(TJm >= LJm[EJm]); EJm++); (jJm[TJm] = AJm(EJm - mJm) + mJm), TJm++, kJm--; } else { for (mJm = CJm; 0 < mJm && !(TJm + dJm <= LJm[mJm - 1]); mJm--); for ( EJm = CJm + OJm; EJm < sJm && !(TJm + dJm <= LJm[EJm]); EJm++ ); jJm[TJm + dJm - 1] = AJm(EJm - mJm) + mJm; } dJm--; } else { if (MJm - dJm < fJm) { for (mJm = TJm; 0 < mJm && !(CJm >= jJm[mJm - 1]); mJm--); for (EJm = TJm + dJm; EJm < vJm && !(CJm >= jJm[EJm]); EJm++); (LJm[CJm] = AJm(EJm - mJm) + mJm), CJm++, fJm--; } else { for (mJm = TJm; 0 < mJm && !(CJm + OJm <= jJm[mJm - 1]); mJm--); for ( EJm = TJm + dJm; EJm < vJm && !(CJm + OJm <= jJm[EJm]); EJm++ ); LJm[CJm + OJm - 1] = AJm(EJm - mJm) + mJm; } OJm--; } }, dGm = function (KJm, VJm) { for (var QJm, FJm = [], IJm = 0; IJm < VJm; IJm++) (QJm = KJm(IJm + 1)), (FJm[IJm] = FJm[QJm]), (FJm[QJm] = IJm); return FJm; }, qd3 = function (vd3, sd3, Md3) { //// var md3 = [], Ed3 = vd3["BlockWidth"], dd3 = vd3["BlockWidth"]; // if (vd3["U2F"] === undefined) // md3 = gE3[SE3](sd3, Md3, Ed3, dd3, vd3["M1R"]); var Od3 = vd3["Q1i"], kd3 = vd3["b0F"], fd3 = vd3["v5m"], Td3 = vd3["U2F"], Cd3 = window["NFBR"]["T8n"]["M2e"], Kd3 = window["NFBR"]["T8n"]["B4d"], Vd3 = Math.floor(sd3 / Ed3), Qd3 = Math.floor(Md3 / dd3), Fd3 = sd3 % Ed3, Id3 = Md3 % dd3, cd3 = (Vd3 + 1) << 1, Nd3 = (Qd3 + 1) << 1, Wd3 = (Vd3 + 1) * Ed3 - Fd3, Zd3 = (Qd3 + 1) * dd3 - Id3, xd3 = new window["NFBR"]["T8n"](), wd3 = Td3 ^ Vd3 ^ Qd3, Pd3 = wd3 % Kd3, Jd3 = ((wd3 - Pd3) / Kd3) % Cd3; xd3["e7Ks"](Jd3, Pd3), xd3["j7p"](Od3 ^ kd3 ^ fd3); var Gd3 = xd3["W5C"](65536); (Gd3 += 65536 * xd3["W5C"](65536)), (Gd3 += 4294967296 * xd3["W5C"](512)); var hd3 = 4294967296 * Vd3 + Od3, rd3 = 4294967296 * Qd3 + kd3, nd3 = 4294967296 * Td3 + fd3, bd3 = window["NFBR"]["C6A"]["a3f"](Gd3, hd3, rd3, nd3), pd3 = function (Sd3, Xd3, td3, Yd3) { var zd3, gd3, Bd3, Hd3, Rd3, DO3, UO3 = Ed3, AO3 = dd3, LO3 = Vd3, jO3 = Qd3, lO3 = cd3, qO3 = Nd3, vO3 = Wd3, sO3 = Zd3, MO3 = bd3; if (0 !== td3 && 0 !== Yd3) for (; Sd3 < Xd3; ) { (zd3 = MO3[Sd3++]), (Rd3 = ((gd3 = MO3[Sd3++]) - (Hd3 = gd3 % qO3)) / qO3), (DO3 = (zd3 - (Bd3 = zd3 % lO3)) / lO3); var dO3 = {}; (dO3["srcX"] = Bd3 * UO3 - (LO3 < Bd3 ? vO3 : 0)), (dO3["srcY"] = Hd3 * AO3 - (jO3 < Hd3 ? sO3 : 0)), (dO3["destX"] = Rd3 * UO3 - (LO3 < Rd3 ? vO3 : 0)), (dO3["destY"] = DO3 * AO3 - (jO3 < DO3 ? sO3 : 0)), (dO3["width"] = td3), (dO3["height"] = Yd3), md3.push(dO3); } }, OO3 = 0, kO3 = (Vd3 * Qd3) << 1; pd3(OO3, kO3, Ed3, dd3), pd3((OO3 = kO3), (kO3 += 2), Fd3, Id3), pd3((OO3 = kO3), (kO3 += Vd3 << 1), Ed3, Id3), pd3((OO3 = kO3), (kO3 += Qd3 << 1), Fd3, dd3); return md3; }; Gdq["NFBR"]["getBlocks"] = qd3; Gdq["NFBR"]["calcU2F"] = calcU2F; Gdq["NFBR"]["decryptConfig"] = decryptConfig; Gdq["NFBR"]["getImgURLHash"] = getImgURLHash; function decryptConfig(dataArr, key1, key2, key3) { var lYs = 0; var confName = "configuration_pack.json"; var vYs = vYsInit(); // console.log(dataArr, key1, key2, key3); return d2j(dataArr, dataArr.length, key1, key2, key3) .then(function (returnData) { // console.log(returnData); return b9q.apply(null, returnData); }) .then(function (returnData) { // console.log(returnData); return u6D.apply(null, returnData); }) .then(function (returnData) { // console.log(returnData); return l3I.apply(null, returnData); }) .then(function (returnData) { // console.log(returnData); return x3U.apply(null, returnData); }) .then(function (returnData) { // console.log(returnData); return N3P.apply(null, returnData); }) .then(function (returnData) { // console.log(returnData); return d2j.apply(null, returnData); }) .then(function (returnData) { return d2j.apply(null, returnData); }) .then(function (returnData) { return d2j.apply(null, returnData); }) .then(function (returnData) { // console.log(returnData); return T2l.apply(null, returnData); }) .then(function (returnData) { // console.log(returnData); return Y7p.apply(null, returnData); }) .then(function (returnData) { // console.log(returnData); return Promise.resolve({ config: JSON.parse(returnData[0]), key1: returnData[1], key2: returnData[2], key3: returnData[3], key1Arr: returnData[4], key2Arr: returnData[5], key3Arr: returnData[6], }); }); function vYsInit() { var sYs = confName; for (var MYs, mYs = sYs["length"], EYs = [], kYs = 0; kYs < mYs; ) (MYs = sYs.charCodeAt(kYs++)) < 128 ? EYs.push(MYs) : (MYs < 2048 ? EYs.push(192 | (MYs >> 6)) : (MYs < 55296 || 57344 <= MYs || kYs === mYs ? EYs.push(224 | (MYs >> 12)) : (EYs.push( 240 | ((MYs = 65536 + (((1023 & MYs) << 10) | (1023 & sYs.charCodeAt(kYs++)))) >> 18) ), EYs.push(128 | ((MYs >> 12) & 63))), EYs.push(128 | ((MYs >> 6) & 63))), EYs.push(128 | (63 & MYs))); return EYs; } function LYs(pGM) { var SGM, XGM, tGM, YGM = [], zGM = [], gGM = pGM["length"]; for (XGM = SGM = 0; SGM < 256; SGM++, XGM++) XGM === gGM && (XGM = 0), (zGM[(YGM[SGM] = SGM)] = pGM[XGM]); for (XGM = SGM = 0; SGM < 256; SGM++) (XGM = (XGM + YGM[SGM] + zGM[SGM]) & 255), (tGM = YGM[SGM]), (YGM[SGM] = YGM[XGM]), (YGM[XGM] = tGM); return YGM; } function I1s(k7s, f7s, T7s) { var C7s = []; C7s = C7s.concat(k7s).concat(f7s).concat(T7s); return LYs(C7s); } function a0FBin(pGM) { var SGM, XGM, tGM, YGM = [], zGM = [], gGM = pGM["length"]; for (XGM = SGM = 0; SGM < 256; SGM++, XGM++) XGM === gGM && (XGM = 0), (zGM[(YGM[SGM] = SGM)] = pGM[XGM]); for (XGM = SGM = 0; SGM < 256; SGM++) (XGM = (XGM + YGM[SGM] + zGM[SGM]) & 255), (tGM = YGM[SGM]), (YGM[SGM] = YGM[XGM]), (YGM[XGM] = tGM); return YGM; } function jYs(vhM, shM) { var MhM, mhM, EhM, dhM, OhM, khM = []; (khM["length"] = vhM["length"]), (dhM = a0FBin(shM)), (mhM = MhM = 0); for (var fhM = vhM["length"], ThM = 0; ThM < fhM; ThM++) (mhM = (mhM + dhM[(MhM = (MhM + 1) & 255)]) & 255), (OhM = dhM[MhM]), (dhM[MhM] = dhM[mhM]), (dhM[mhM] = OhM), (EhM = (dhM[MhM] + dhM[mhM]) & 255), (khM[ThM] = vhM[ThM] ^ dhM[EhM]); return khM; } function dgs(K7s, V7s, Q7s, F7s) { var I7s = []; I7s = I7s.concat(V7s).concat(Q7s).concat(F7s); return jYs(K7s, I7s); } function chunkCB(cb) { var isResolve = false; var thenData; var resolveCall = function (data) { isResolve = true; thenData = data; }; return new Promise(function (resolve, reject) { while (true) { if (isResolve) { resolve(thenData); break; } else { cb(resolveCall); } } }); } function d2j(Ggs, hgs, rgs, ngs, bgs) { var pgs, Sgs, Xgs, tgs, Ygs, zgs, ggs = []; switch (lYs) { case 0: (pgs = Ggs), (Sgs = hgs), (zgs = 65536), (Xgs = rgs), (tgs = ngs), (Ygs = bgs); break; case 1: (pgs = bgs), (zgs = Sgs = 32), (Xgs = rgs), (tgs = ngs), (Ygs = null); break; case 2: (pgs = ngs), (zgs = Sgs = 32), (Xgs = rgs), (tgs = bgs), (Ygs = null); break; case 3: (pgs = rgs), (zgs = Sgs = 32), (Xgs = ngs), (tgs = bgs), (Ygs = null); } var Bgs, Hgs = 0, Rgs = 0; for (Bgs = 0; Bgs < 32; Bgs++) (Hgs = (Hgs + Xgs[Bgs]) & 255), (Rgs ^= Xgs[Bgs]); for (Bgs = 0; Bgs < 32; Bgs++) (Hgs = (Hgs + tgs[Bgs]) & 255), (Rgs ^= tgs[Bgs]); if (Ygs) for (Bgs = 0; Bgs < 32; Bgs++) (Hgs = (Hgs + Ygs[Bgs]) & 255), (Rgs ^= Ygs[Bgs]); var D2s = 2 != (2 & Hgs), U2s = 4 != (4 & Hgs), A2s = 8 != (8 & Hgs), L2s = Rgs >>> 5, l2s = 8 - L2s, q2s = 0; return chunkCB(function (resolve) { var v2s = ggs, s2s = D2s, M2s = U2s, m2s = A2s, E2s = L2s, d2s = l2s, k2s = pgs, f2s = q2s, C2s = f2s + zgs; Sgs < C2s && (C2s = Sgs); for ( var K2s, V2s, Q2s, F2s, I2s, c2s, N2s, W2s, Z2s, w2s, P2s, J2s, G2s, h2s, r2s, n2s; f2s < C2s; ) { for ( Q2s = (V2s = C2s < (K2s = f2s + 32)) ? (K2s = C2s) - f2s : 32, W2s = Hgs, Z2s = Rgs, I2s = 0, c2s = f2s; I2s < Q2s; ) (F2s = k2s[c2s++]), s2s && (F2s = ((85 & F2s) << 1) | ((F2s >>> 1) & 85)), M2s && (F2s = ((51 & F2s) << 2) | ((F2s >>> 2) & 51)), m2s && (F2s = ((15 & F2s) << 4) | ((F2s >>> 4) & 15)), (W2s = (W2s + (v2s[I2s++] = F2s)) & 255), (Z2s ^= F2s); for ( J2s = 2 != (2 & W2s), G2s = 4 != (4 & W2s), h2s = 8 != (8 & W2s), r2s = 16 != (16 & W2s), n2s = 32 != (32 & W2s), I2s = 0; I2s < Q2s; I2s++ ) if ( 1 == (1 & I2s) && (J2s && ((c2s = I2s - 1), (F2s = v2s[I2s]), (v2s[I2s] = v2s[c2s]), (v2s[c2s] = F2s)), 3 == (3 & I2s)) ) { if (G2s) for (N2s = w2s = (c2s = I2s) - 2; w2s < c2s; ) (F2s = v2s[c2s]), (v2s[c2s--] = v2s[N2s]), (v2s[N2s--] = F2s); if (7 == (7 & I2s)) { if (h2s) for (N2s = w2s = (c2s = I2s) - 4; w2s < c2s; ) (F2s = v2s[c2s]), (v2s[c2s--] = v2s[N2s]), (v2s[N2s--] = F2s); if (15 == (15 & I2s)) { if (r2s) for (N2s = w2s = (c2s = I2s) - 8; w2s < c2s; ) (F2s = v2s[c2s]), (v2s[c2s--] = v2s[N2s]), (v2s[N2s--] = F2s); if (31 == (31 & I2s) && n2s) for (N2s = w2s = (c2s = I2s) - 16; w2s < c2s; ) (F2s = v2s[c2s]), (v2s[c2s--] = v2s[N2s]), (v2s[N2s--] = F2s); } } } if ( ((P2s = Z2s >>> 3), V2s ? (P2s %= Q2s) : (P2s &= 31), 0 === E2s) ) for (I2s = f2s, c2s = Q2s - P2s; I2s < K2s; ) c2s === Q2s && (c2s = 0), (k2s[I2s++] = v2s[c2s++]); else for (I2s = f2s, c2s = Q2s - P2s - 1; I2s < K2s; ) (F2s = v2s[c2s] << d2s), ++c2s === Q2s && (c2s = 0), (F2s |= v2s[c2s] >>> E2s), (k2s[I2s++] = 255 & F2s); f2s = K2s; } Sgs <= f2s ? (lYs++, resolve([Ggs, hgs, rgs, ngs, bgs])) : (q2s = f2s); }); } function b9q(D7s, U7s, A7s, L7s, j7s) { var l7s = I1s(L7s, vYs, j7s); var q7s = 0, v7s = 0, s7s = 65536; return chunkCB(function (resolve) { var M7s = D7s, m7s = l7s, E7s = q7s, d7s = v7s, O7s = E7s + s7s; for (U7s < O7s && (O7s = U7s); E7s < O7s; ) (M7s[E7s++] ^= m7s[d7s++]), (d7s &= 255); U7s <= E7s ? resolve([M7s, U7s, A7s, L7s, j7s]) : ((q7s = E7s), (v7s = d7s)); }); } function u6D(kgs, fgs, Tgs, Cgs, Kgs) { var Vgs = I1s(vYs, Tgs, Cgs), Qgs = (1 | fgs) - 2, Fgs = 65536 << 1, Igs = 0, cgs = 0; return chunkCB(function (resolve) { var Ngs, Wgs = kgs, Zgs = Vgs, xgs = Qgs, wgs = Igs, Pgs = cgs, Jgs = xgs - Fgs; for (Jgs < 0 && (Jgs = 0); Jgs < xgs; ) (Pgs = (Pgs + Zgs[(wgs = (wgs + 1) & 255)]) & 255), (Ngs = Zgs[wgs]), (Zgs[wgs] = Zgs[Pgs]), (Zgs[Pgs] = Ngs), (Wgs[xgs] ^= Zgs[(Zgs[wgs] + Zgs[Pgs]) & 255]), (xgs -= 2); xgs < 0 ? resolve([Wgs, fgs, Tgs, Cgs, Kgs]) : ((Qgs = xgs), (Igs = wgs), (cgs = Pgs)); }); } function l3I(b1s, p1s, S1s, X1s, t1s) { var Y1s = I1s(t1s, vYs, S1s), g1s = (p1s - 1) & -2, B1s = 65536 << 1, H1s = 0, R1s = 0; return chunkCB(function (resolve) { var Dgs, Ugs = b1s, Ags = Y1s, Lgs = g1s, jgs = H1s, lgs = R1s, qgs = Lgs - B1s; for (qgs < -1 && (qgs = -1); qgs < Lgs; ) (lgs = (lgs + Ags[(jgs = (jgs + 1) & 255)]) & 255), (Dgs = Ags[jgs]), (Ags[jgs] = Ags[lgs]), (Ags[lgs] = Dgs), (Ugs[Lgs] ^= Ags[(Ags[jgs] + Ags[lgs]) & 255]), (Lgs -= 2); Lgs < 0 ? resolve([Ugs, p1s, S1s, X1s, t1s]) : ((g1s = Lgs), (H1s = jgs), (R1s = lgs)); }); } function x3U(b2s, p2s, S2s, X2s, t2s) { var Y2s, z2s, g2s, B2s = p2s; 32 < B2s && (B2s = 32); for (var H2s = 0; H2s < B2s; H2s++) { switch (12 & (g2s = b2s[H2s] ^ S2s[H2s] ^ X2s[H2s] ^ t2s[H2s])) { case 0: Y2s = S2s[H2s]; break; case 4: Y2s = X2s[H2s]; break; case 8: Y2s = t2s[H2s]; break; case 12: Y2s = b2s[H2s]; } switch (3 & g2s) { case 0: (z2s = S2s[H2s]), (S2s[H2s] = Y2s); break; case 1: (z2s = X2s[H2s]), (X2s[H2s] = Y2s); break; case 2: (z2s = t2s[H2s]), (t2s[H2s] = Y2s); break; case 3: (z2s = b2s[H2s]), (b2s[H2s] = Y2s); } switch (12 & g2s) { case 0: S2s[H2s] = z2s; break; case 4: X2s[H2s] = z2s; break; case 8: t2s[H2s] = z2s; break; case 12: b2s[H2s] = z2s; } switch (192 & g2s) { case 0: Y2s = S2s[H2s]; break; case 64: Y2s = X2s[H2s]; break; case 128: Y2s = t2s[H2s]; break; case 192: Y2s = b2s[H2s]; } switch (48 & g2s) { case 0: (z2s = S2s[H2s]), (S2s[H2s] = Y2s); break; case 16: (z2s = X2s[H2s]), (X2s[H2s] = Y2s); break; case 32: (z2s = t2s[H2s]), (t2s[H2s] = Y2s); break; case 48: (z2s = b2s[H2s]), (b2s[H2s] = Y2s); } switch (192 & g2s) { case 0: S2s[H2s] = z2s; break; case 64: X2s[H2s] = z2s; break; case 128: t2s[H2s] = z2s; break; case 192: b2s[H2s] = z2s; } } return chunkCB(function (resolve) { resolve([b2s, p2s, S2s, X2s, t2s]); }); } function N3P(vgs, sgs, Mgs, mgs, Egs) { Egs = dgs(Egs, mgs, Mgs, vYs); mgs = dgs(mgs, Mgs, vYs, Egs); Mgs = dgs(Mgs, vYs, Egs, mgs); return chunkCB(function (resolve) { resolve([vgs, sgs, Mgs, mgs, Egs]); }); } function T2l(T1s, C1s, K1s, V1s, Q1s) { var F1s = I1s(Q1s, V1s, vYs), c1s = 0, N1s = 65536, W1s = 0, Z1s = 0; return chunkCB(function (resolve) { var x1s, w1s = T1s, J1s = F1s, G1s = c1s, h1s = W1s, r1s = Z1s, n1s = G1s + N1s; for (C1s < n1s && (n1s = C1s); G1s < n1s; ) (r1s = (r1s + F1s[(h1s = (h1s + 1) & 255)]) & 255), (x1s = F1s[h1s]), (J1s[h1s] = F1s[r1s]), (J1s[r1s] = x1s), (w1s[G1s++] ^= J1s[(J1s[h1s] + J1s[r1s]) & 255]); C1s <= G1s ? resolve([w1s, C1s, K1s, V1s, Q1s]) : ((c1s = G1s), (W1s = h1s), (Z1s = r1s)); }); } function Y7p(TYs, CYs, KYs, VYs, QYs) { var FYs = undefined, cYs = 0, NYs = 0, WYs = [], ZYs = new Array(16384), xYs = 65536; return chunkCB(function (resolve) { var PYs = "length", JYs = FYs, hYs = TYs, rYs = CYs, nYs = cYs, bYs = NYs, pYs = WYs, SYs = ZYs, tYs = nYs + xYs; rYs < tYs && (tYs = rYs); var YYs, zYs, gYs, BYs, HYs, RYs, Dzs = hYs[tYs - 1]; for ( 128 <= Dzs && (128 == (192 & Dzs) ? tYs < rYs && 128 == (192 & (YYs = hYs[tYs])) && ++tYs < rYs && 128 == (192 & (zYs = hYs[tYs])) && tYs++ : tYs < rYs && 194 <= Dzs && Dzs <= 244 && 128 == (192 & (YYs = hYs[tYs])) && (224 !== Dzs || 160 <= YYs) && (237 !== Dzs || YYs < 160) && (240 !== Dzs || 144 <= YYs) && (244 !== Dzs || YYs < 144) && ++tYs < rYs && 224 <= Dzs && 128 == (192 & (zYs = hYs[tYs])) && ++tYs < rYs && 240 <= Dzs && 128 == (192 & (gYs = hYs[tYs])) && tYs++); nYs < tYs; ) if ( ((Dzs = hYs[nYs]), nYs++, Dzs < 128 ? (SYs[bYs++] = Dzs) : ((YYs = hYs[nYs]), tYs <= nYs || Dzs < 194 || 244 < Dzs || 128 != (192 & YYs) || (224 === Dzs && YYs < 160) || (237 === Dzs && 160 <= YYs) || (240 === Dzs && YYs < 144) || (244 === Dzs && 144 <= YYs) ? (SYs[bYs++] = 65533) : (nYs++, Dzs < 224 ? ((BYs = (63 & YYs) | ((31 & Dzs) << 6)), (SYs[bYs++] = BYs)) : ((zYs = hYs[nYs]), tYs <= nYs || 128 != (192 & zYs) ? (SYs[bYs++] = 65533) : (nYs++, Dzs < 240 ? ((BYs = (63 & zYs) | ((63 & YYs) << 6) | ((15 & Dzs) << 12)), (SYs[bYs++] = BYs)) : ((gYs = hYs[nYs]), tYs <= nYs || 128 != (192 & gYs) ? (SYs[bYs++] = 65533) : (nYs++, (HYs = ((48 & zYs) >> 4) | ((63 & YYs) << 2) | ((7 & Dzs) << 8)), (RYs = (63 & gYs) | ((15 & zYs) << 6)), (SYs[bYs++] = 55232 + HYs), (SYs[bYs++] = NaN + RYs))))))), 16383 <= bYs) ) { SYs[PYs] = bYs; var Uzs = String.fromCharCode.apply(null, SYs); (SYs[16383] = JYs), WYs.push(Uzs), (bYs = 0); } if (rYs <= nYs) { var Azs, Lzs = KYs, jzs = VYs, lzs = QYs; (TYs = hYs = null), (SYs[PYs] = bYs), (Azs = pYs[PYs] ? (WYs.push(String.fromCharCode.apply(null, SYs)), pYs["join"]("")) : String.fromCharCode.apply(null, SYs)), (ZYs = WYs = SYs = pYs = null); var qzs, vzs, szs, Mzs, mzs = new Array(64); for (vzs = qzs = 0; qzs < 32; qzs++) (szs = (Mzs = Lzs[qzs]) >>> 4), (mzs[vzs++] = (szs < 10 ? 48 : 87) + szs), (szs = 15 & Mzs), (mzs[vzs++] = (szs < 10 ? 48 : 87) + szs); var Ezs = String.fromCharCode.apply(null, mzs); for (vzs = qzs = 0; qzs < 32; qzs++) (szs = (Mzs = jzs[qzs]) >>> 4), (mzs[vzs++] = (szs < 10 ? 48 : 87) + szs), (szs = 15 & Mzs), (mzs[vzs++] = (szs < 10 ? 48 : 87) + szs); var dzs = String.fromCharCode.apply(null, mzs); for (vzs = qzs = 0; qzs < 32; qzs++) (szs = (Mzs = lzs[qzs]) >>> 4), (mzs[vzs++] = (szs < 10 ? 48 : 87) + szs), (szs = 15 & Mzs), (mzs[vzs++] = (szs < 10 ? 48 : 87) + szs); var Ozs = String.fromCharCode.apply(null, mzs); resolve([Azs, Ezs, dzs, Ozs, Lzs, jzs, lzs]); } else (cYs = nYs), (NYs = bYs); }); } } function getImgURLHash(pageInfo, keyInfo, Zjm) { function Ojm(kjm, fjm) { for (var Tjm = fjm.length, Cjm = 0; Cjm < Tjm; Cjm++) kjm[Cjm] ^= fjm[Cjm]; } var keyXor = []; Ojm(keyXor, keyInfo.key1Arr); Ojm(keyXor, keyInfo.key2Arr); Ojm(keyXor, keyInfo.key3Arr); if ("string" != typeof Zjm["configuration"]["file-name-version"]) { return pageInfo.No + ""; } return ( (function (wjm, Pjm) { var Jjm = Pjm.No, Gjm = parseInt(Jjm, 10); if (!isNaN(Gjm) && 0 <= Gjm && Gjm < 1152921504606847000) { var hjm = Gjm.toString(16); return hjm.length.toString(16) + hjm; } return "0" + Jjm; })(0, pageInfo) + (function (rjm, njm) { var bjm, pjm, Sjm, Xjm, tjm, Yjm = njm.imgName + "/", zjm = njm.No + "", gjm = keyXor, Bjm = Yjm.length, Hjm = zjm.length, Rjm = gjm.length, D6m = Yjm + zjm, U6m = Bjm + Hjm, A6m = Hjm << 1, L6m = (1 + Bjm) << 1, j6m = (1 + U6m) << 1, l6m = new Array(j6m); for ( pjm = 0, l6m[pjm++] = 0, l6m[pjm++] = 59, bjm = 0; bjm < U6m; bjm++ ) (tjm = D6m.charCodeAt(bjm)), (l6m[pjm++] = tjm >>> 8), (l6m[pjm++] = 255 & tjm); for (var v6m = A6m + j6m + j6m, s6m = 3; v6m < 256; s6m++) v6m += j6m; var M6m, m6m, E6m, d6m = 1670739, O6m = 1282576, k6m = 2237221; for (bjm = L6m, Sjm = pjm = 0; ; ) { for ( ; (M6m = 435 * d6m + ((3 & O6m) << 19) + ((4194296 & (k6m ^= l6m[bjm++] ^ gjm[pjm++])) >>> 3) + ((m6m = 435 * O6m + ((7 & k6m) << 18) + ((E6m = 435 * k6m) >>> 22)) >>> 21)), (k6m = 4194303 & E6m), (O6m = 2097151 & m6m), (d6m = 2097151 & M6m), Rjm <= pjm && (pjm = 0), !(j6m <= bjm); ); if (++Sjm >= s6m) break; bjm = 0; } var f6m = new Array(16); return ( (tjm = (Xjm = (d6m >>> 13) ^ gjm[0]) >>> 4), (f6m[0] = (tjm < 10 ? 48 : 87) + tjm), (tjm = 15 & Xjm), (f6m[1] = (tjm < 10 ? 48 : 87) + tjm), (tjm = (Xjm = ((d6m >>> 5) & 255) ^ gjm[1]) >>> 4), (f6m[2] = (tjm < 10 ? 48 : 87) + tjm), (tjm = 15 & Xjm), (f6m[3] = (tjm < 10 ? 48 : 87) + tjm), (tjm = (Xjm = (((31 & d6m) << 3) | (O6m >>> 18)) ^ gjm[2]) >>> 4), (f6m[4] = (tjm < 10 ? 48 : 87) + tjm), (tjm = 15 & Xjm), (f6m[5] = (tjm < 10 ? 48 : 87) + tjm), (tjm = (Xjm = ((O6m >>> 10) & 255) ^ gjm[3]) >>> 4), (f6m[6] = (tjm < 10 ? 48 : 87) + tjm), (tjm = 15 & Xjm), (f6m[7] = (tjm < 10 ? 48 : 87) + tjm), (tjm = (Xjm = ((O6m >>> 2) & 255) ^ gjm[4]) >>> 4), (f6m[8] = (tjm < 10 ? 48 : 87) + tjm), (tjm = 15 & Xjm), (f6m[9] = (tjm < 10 ? 48 : 87) + tjm), (tjm = (Xjm = (((3 & O6m) << 6) | (k6m >>> 16)) ^ gjm[5]) >>> 4), (f6m[10] = (tjm < 10 ? 48 : 87) + tjm), (tjm = 15 & Xjm), (f6m[11] = (tjm < 10 ? 48 : 87) + tjm), (tjm = (Xjm = ((k6m >>> 8) & 255) ^ gjm[6]) >>> 4), (f6m[12] = (tjm < 10 ? 48 : 87) + tjm), (tjm = 15 & Xjm), (f6m[13] = (tjm < 10 ? 48 : 87) + tjm), (tjm = (Xjm = (255 & k6m) ^ gjm[7]) >>> 4), (f6m[14] = (tjm < 10 ? 48 : 87) + tjm), (tjm = 15 & Xjm), (f6m[15] = (tjm < 10 ? 48 : 87) + tjm), String.fromCharCode.apply(null, f6m) ); })(Zjm, pageInfo) ); } function calcU2F(pageInfo, keyInfo) { var imgName = pageInfo.imgName; var fileName = pageInfo.No + ""; var U2F = 47; var i; for (i = 0; i < imgName.length; i++) { U2F += imgName.charCodeAt(i); } for (i = 0; i < fileName.length; i++) { U2F += fileName.charCodeAt(i); } var keySum = 0; var keyArr = [keyInfo.key1Arr, keyInfo.key2Arr, keyInfo.key3Arr]; var keyAS3Arr = []; for (i = 0; i < keyArr.length; i++) { keyAS3Arr[i] = S03(keyArr[i]); for (var ii = 0; ii < keyArr[i].length; ii++) { keySum += keyArr[i][ii]; } } var FS3 = pageInfo["NS"]; var IS3 = pageInfo["PS"]; var cS3 = pageInfo["RS"]; U2F += keySum; var NS3 = 255 & U2F; NS3 |= NS3 << 8; var WS3 = ((NS3 |= NS3 << 16) ^ keyAS3Arr[0] ^ Gdq["parseInt"](FS3)) >>> 0, ZS3 = (NS3 ^ keyAS3Arr[1] ^ Gdq["parseInt"](IS3)) >>> 0, xS3 = (NS3 ^ keyAS3Arr[2] ^ Gdq["parseInt"](cS3)) >>> 0; pageInfo["U2F"] = U2F % window["NFBR"]["T8n"]["n2C"]; pageInfo["Q1i"] = WS3; pageInfo["b0F"] = ZS3; pageInfo["v5m"] = xS3; function S03(X03) { var t03 = 0, Y03 = -4 & X03.length; 32 < Y03 && (Y03 = 32); for (var z03 = 0; z03 < Y03; ) (t03 ^= X03[z03++] << 24), (t03 ^= X03[z03++] << 16), (t03 ^= X03[z03++] << 8), (t03 ^= X03[z03++]); return t03 >>> 0; } } } /* client-zip v1.6.2 https://github.com/Touffy/client-zip */ function downloadZipInit() { "stream" in Blob.prototype||Object.defineProperty(Blob.prototype,"stream",{value(){return new Response(this).body}});var e=e=>new DataView(new ArrayBuffer(e)),n=e=>new Uint8Array(e.buffer||e),t=e=>(new TextEncoder).encode(String(e));function r(e,r){if(void 0===r||r instanceof Date||(r=new Date(r)),e instanceof File)return{t:r||new Date(e.lastModified),o:e.stream()};if(e instanceof Response)return{t:r||new Date(e.headers.get("Last-Modified")||Date.now()),o:e.body};if(void 0===r)r=new Date;else if(isNaN(r))throw new Error("Invalid modification date.");if("string"==typeof e)return{t:r,o:t(e)};if(e instanceof Blob)return{t:r,o:e.stream()};if(e instanceof Uint8Array||e instanceof ReadableStream)return{t:r,o:e};if(e instanceof ArrayBuffer||ArrayBuffer.isView(e))return{t:r,o:n(e)};if(Symbol.asyncIterator in e)return{t:r,o:o(e)};throw new TypeError("Unsupported input format.")}function o(e){const n="next"in e?e:e[Symbol.asyncIterator]();return new ReadableStream({async pull(e){let t=0;for(;e.desiredSize>t;){const r=await n.next();if(!r.value){e.close();break}{const n=i(r.value);e.enqueue(n),t+=n.byteLength}}},async cancel(e){var t;try{await(null==(t=n.throw)?void 0:t.call(n,e))}catch(e){}}})}function i(e){return"string"==typeof e?t(e):e instanceof Uint8Array?e:n(e)}function a(e,r,o){let[i,a]=function(e){return e?e instanceof Uint8Array?[e,1]:ArrayBuffer.isView(e)||e instanceof ArrayBuffer?[n(e),1]:[t(e),0]:[void 0,0]}(r);if(e instanceof File)return{i:s(i||t(e.name)),u:e.size,l:a};if(e instanceof Response){const n=e.headers.get("content-disposition"),r=n&&n.match(/;\s*filename\*?=["']?(.*?)["']?$/i),f=r&&r[1]||e.url&&new URL(e.url).pathname.split("/").findLast(Boolean),u=f&&decodeURIComponent(f),d=o||+e.headers.get("content-length");return{i:s(i||t(u)),u:d,l:a}}return i=s(i),"string"==typeof e?{i,u:t(e).length,l:a}:e instanceof Blob?{i,u:e.size,l:a}:e instanceof ArrayBuffer||ArrayBuffer.isView(e)?{i,u:e.byteLength,l:a}:{i,u:f(e,o),l:a}}function f(e,n){return n>-1?n:e?void 0:0}function s(e){if(!e||e.every((c=>47===c)))throw new Error("The file must have a name.");for(;47===e[e.length-1];)e=e.subarray(0,-1);return e}var u=new Uint32Array(256);for(let e=0;e<256;++e){let n=e;for(let e=0;e<8;++e)n=n>>>1^(1&n&&3988292384);u[e]=n}function d(e,n=0){n^=-1;for(var t=0,r=e.length;t<r;t++)n=n>>>8^u[255&n^e[t]];return(-1^n)>>>0}function l(e,n,t=0){const r=e.getSeconds()>>1|e.getMinutes()<<5|e.getHours()<<11,o=e.getDate()|e.getMonth()+1<<5|e.getFullYear()-1980<<9;n.setUint16(t,r,1),n.setUint16(t+2,o,1)}function y({i:e,l:n},t){return 8*(!n||(null!=t?t:function(e){try{w.decode(e)}catch(e){return 0}return 1}(e)))}var w=new TextDecoder("utf8",{fatal:1});function p(t,r=0){const o=e(30);return o.setUint32(0,1347093252),o.setUint32(4,335546368|r),l(t.t,o,10),o.setUint16(26,t.i.length,1),n(o)}async function*b(e){let{o:n}=e;if("then"in n&&(n=await n),n instanceof Uint8Array)yield n,e.m=d(n,0),e.u=n.length;else{e.u=0;const t=n.getReader();for(;;){const{value:n,done:r}=await t.read();if(r)break;e.m=d(n,e.m),e.u+=n.length,yield n}}}function B(t){const r=e(16);return r.setUint32(0,1347094280),r.setUint32(4,t.m,1),r.setUint32(8,t.u,1),r.setUint32(12,t.u,1),n(r)}function v(t,r,o=0){const i=e(46);return i.setUint32(0,1347092738),i.setUint32(4,352523264),i.setUint16(8,2048|o),l(t.t,i,12),i.setUint32(16,t.m,1),i.setUint32(20,t.u,1),i.setUint32(24,t.u,1),i.setUint16(28,t.i.length,1),i.setUint16(40,33204,1),i.setUint32(42,r,1),n(i)}function D(e){return e instanceof File||e instanceof Response?[[e],[e]]:[[e.input,e.name,e.size],[e.input,e.lastModified]]}var h=e=>function(e){var n;let t=22;for(const r of e){if(!r.i)throw new Error("Every file must have a non-empty name.");if(isNaN(null!=(n=r.u)?n:NaN))throw new Error(`Missing size for file "${(new TextDecoder).decode(r.i)}".`);t+=2*r.i.length+r.u+92}return t}(function*(e){for(const n of e)yield a(...D(n)[0])}(e));function N(t,i={}){const f={"Content-Type":"application/zip","Content-Disposition":"attachment"};return Number.isInteger(i.length)&&i.length>0&&(f["Content-Length"]=i.length),i.metadata&&(f["Content-Length"]=h(i.metadata)),new Response(o(async function*(t,r){const o=[];let i=0,a=0;for await(const e of t){const n=y(e,r.buffersAreUTF8);yield p(e,n),yield e.i,yield*b(e),yield B(e),o.push(v(e,i,n)),o.push(e.i),a++,i+=46+e.i.length+e.u}let f=0;for(const e of o)yield e,f+=e.length;const s=e(22);s.setUint32(0,1347093766),s.setUint16(8,a,1),s.setUint16(10,a,1),s.setUint32(12,f,1),s.setUint32(16,i,1),yield n(s)}(async function*(e){for await(const n of e){const[e,t]=D(n);yield Object.assign(r(...t),a(...e))}}(t),i)),{headers:f})}; return N; } })();