From c2697affd985e89dd35c59640dca18234ef0b603 Mon Sep 17 00:00:00 2001 From: liwsen Date: Mon, 19 Jan 2026 10:39:22 +0800 Subject: [PATCH] Initial commit of secondary development sample code --- README.md | 42 + 上位机实时画面/ZQL_common.js | 862 +++ 上位机实时画面/assets/accesskey.png | Bin 0 -> 48207 bytes 上位机实时画面/assets/index.png | Bin 0 -> 75329 bytes 上位机实时画面/index.css | 137 + 上位机实时画面/index.html | 68 + 上位机实时画面/index.js | 118 + 上位机实时画面/js/crypto-js.js | 5988 +++++++++++++++++ 上位机实时画面/js/jquery-1.10.2.min.js | 6 + 上位机实时画面/js/jswebrtc.min.js | 1 + 上位机实时画面/js/layui/css/layui.css | 1 + 上位机实时画面/js/layui/font/iconfont.eot | Bin 0 -> 54172 bytes 上位机实时画面/js/layui/font/iconfont.svg | 405 ++ 上位机实时画面/js/layui/font/iconfont.ttf | Bin 0 -> 53996 bytes 上位机实时画面/js/layui/font/iconfont.woff | Bin 0 -> 34624 bytes 上位机实时画面/js/layui/font/iconfont.woff2 | Bin 0 -> 29736 bytes 上位机实时画面/js/layui/layui.js | 1 + 上位机实时画面/js/mpegts.js | 9 + 上位机实时画面/js/mqtt.min.js | 12 + 心跳保活/UdpServer.java | 59 + 心跳保活/server.py | 38 + 快速接收设备告警/custom-api-demo/README.md | 171 + 快速接收设备告警/custom-api-demo/api_demo.py | 40 + .../custom-api-demo/api_demo_tcp.py | 68 + 快速接收设备告警/http-server-demo/README.md | 83 + .../http-server-demo/headers/headers_demo.py | 46 + .../http-server-token/headers_demo1.py | 47 + .../http-server-token/headers_demo2.py | 35 + .../http-server-token/java/AlertController.java | 45 + .../http-server-token/java/AlertMsg.java | 20 + .../http-server-token/java/AlertVideo.java | 18 + .../http-server-token/python/app/__init__.py | 23 + .../http-server-token/python/app/alert.py | 31 + .../http-server-token/python/image.jpg | Bin 0 -> 113605 bytes .../http-server-demo/http-server-token/python/main.py | 4 + .../http-server/java/AlertController.java | 37 + .../http-server-demo/http-server/java/AlertMsg.java | 21 + .../http-server-demo/http-server/java/AlertVideo.java | 19 + .../http-server/python/app/__init__.py | 23 + .../http-server-demo/http-server/python/app/alert.py | 28 + .../http-server-demo/http-server/python/image.jpg | Bin 0 -> 165536 bytes .../http-server-demo/http-server/python/main.py | 4 + 快速接收设备告警/tcp-server-demo/server.py | 107 + 接收大模型复审告警/app/__init__.py | 23 + 接收大模型复审告警/app/vlreview.py | 15 + 接收大模型复审告警/main.py | 4 + 深度对接设备接口/assets/device.png | Bin 0 -> 87062 bytes 深度对接设备接口/assets/facelib.png | Bin 0 -> 74416 bytes 深度对接设备接口/assets/live.png | Bin 0 -> 84175 bytes 深度对接设备接口/assets/source.png | Bin 0 -> 95914 bytes 深度对接设备接口/device.html | 65 + 深度对接设备接口/device.js | 67 + 深度对接设备接口/facelib.html | 100 + 深度对接设备接口/facelib.js | 560 ++ 深度对接设备接口/index.html | 32 + 深度对接设备接口/live.css | 137 + 深度对接设备接口/live.html | 66 + 深度对接设备接口/live.js | 920 +++ 深度对接设备接口/public/crypto-js.js | 5988 +++++++++++++++++ 深度对接设备接口/public/jquery-1.10.2.min.js | 6 + 深度对接设备接口/public/jswebrtc.min.js | 1 + 深度对接设备接口/public/mpegts.js | 9 + 深度对接设备接口/public/mqtt.min.js | 12 + 深度对接设备接口/public/style.css | 126 + 深度对接设备接口/source.html | 61 + 深度对接设备接口/source.js | 468 ++ 66 files changed, 17277 insertions(+) create mode 100644 README.md create mode 100644 上位机实时画面/ZQL_common.js create mode 100644 上位机实时画面/assets/accesskey.png create mode 100644 上位机实时画面/assets/index.png create mode 100644 上位机实时画面/index.css create mode 100644 上位机实时画面/index.html create mode 100644 上位机实时画面/index.js create mode 100644 上位机实时画面/js/crypto-js.js create mode 100644 上位机实时画面/js/jquery-1.10.2.min.js create mode 100644 上位机实时画面/js/jswebrtc.min.js create mode 100644 上位机实时画面/js/layui/css/layui.css create mode 100644 上位机实时画面/js/layui/font/iconfont.eot create mode 100644 上位机实时画面/js/layui/font/iconfont.svg create mode 100644 上位机实时画面/js/layui/font/iconfont.ttf create mode 100644 上位机实时画面/js/layui/font/iconfont.woff create mode 100644 上位机实时画面/js/layui/font/iconfont.woff2 create mode 100644 上位机实时画面/js/layui/layui.js create mode 100644 上位机实时画面/js/mpegts.js create mode 100644 上位机实时画面/js/mqtt.min.js create mode 100644 心跳保活/UdpServer.java create mode 100644 心跳保活/server.py create mode 100644 快速接收设备告警/custom-api-demo/README.md create mode 100644 快速接收设备告警/custom-api-demo/api_demo.py create mode 100644 快速接收设备告警/custom-api-demo/api_demo_tcp.py create mode 100644 快速接收设备告警/http-server-demo/README.md create mode 100644 快速接收设备告警/http-server-demo/headers/headers_demo.py create mode 100644 快速接收设备告警/http-server-demo/http-server-token/headers_demo1.py create mode 100644 快速接收设备告警/http-server-demo/http-server-token/headers_demo2.py create mode 100644 快速接收设备告警/http-server-demo/http-server-token/java/AlertController.java create mode 100644 快速接收设备告警/http-server-demo/http-server-token/java/AlertMsg.java create mode 100644 快速接收设备告警/http-server-demo/http-server-token/java/AlertVideo.java create mode 100644 快速接收设备告警/http-server-demo/http-server-token/python/app/__init__.py create mode 100644 快速接收设备告警/http-server-demo/http-server-token/python/app/alert.py create mode 100644 快速接收设备告警/http-server-demo/http-server-token/python/image.jpg create mode 100644 快速接收设备告警/http-server-demo/http-server-token/python/main.py create mode 100644 快速接收设备告警/http-server-demo/http-server/java/AlertController.java create mode 100644 快速接收设备告警/http-server-demo/http-server/java/AlertMsg.java create mode 100644 快速接收设备告警/http-server-demo/http-server/java/AlertVideo.java create mode 100644 快速接收设备告警/http-server-demo/http-server/python/app/__init__.py create mode 100644 快速接收设备告警/http-server-demo/http-server/python/app/alert.py create mode 100644 快速接收设备告警/http-server-demo/http-server/python/image.jpg create mode 100644 快速接收设备告警/http-server-demo/http-server/python/main.py create mode 100644 快速接收设备告警/tcp-server-demo/server.py create mode 100644 接收大模型复审告警/app/__init__.py create mode 100644 接收大模型复审告警/app/vlreview.py create mode 100644 接收大模型复审告警/main.py create mode 100644 深度对接设备接口/assets/device.png create mode 100644 深度对接设备接口/assets/facelib.png create mode 100644 深度对接设备接口/assets/live.png create mode 100644 深度对接设备接口/assets/source.png create mode 100644 深度对接设备接口/device.html create mode 100644 深度对接设备接口/device.js create mode 100644 深度对接设备接口/facelib.html create mode 100644 深度对接设备接口/facelib.js create mode 100644 深度对接设备接口/index.html create mode 100644 深度对接设备接口/live.css create mode 100644 深度对接设备接口/live.html create mode 100644 深度对接设备接口/live.js create mode 100644 深度对接设备接口/public/crypto-js.js create mode 100644 深度对接设备接口/public/jquery-1.10.2.min.js create mode 100644 深度对接设备接口/public/jswebrtc.min.js create mode 100644 深度对接设备接口/public/mpegts.js create mode 100644 深度对接设备接口/public/mqtt.min.js create mode 100644 深度对接设备接口/public/style.css create mode 100644 深度对接设备接口/source.html create mode 100644 深度对接设备接口/source.js diff --git a/README.md b/README.md new file mode 100644 index 0000000..fc99b14 --- /dev/null +++ b/README.md @@ -0,0 +1,42 @@ +# 二次开发示例代码 +工程总共包含几个模块,快速接收设备告警、深度对接设备接口 和 心跳保活。 + +## 快速接收设备告警 +### http-server-demo 以HTTP协议接收设备告警(最常用) +参考具体文件下的源代码demo即可。 +### tcp-server-demo 以TCP协议接收设备告警(常见PLC控制等) +参考具体文件下的源代码demo即可。 +### custom-api-demo 自定义API(部分用户的平台接口规则限定了可用这个) +参考具体文件下的源代码demo即可。 +## 深度对接设备接口 +可将代码下载到Windows环境,用谷歌浏览器直接打开.html文件运行,内含相关功能的源代码,用户可根据我司提供的代码修改做二次开发。本工程的代码,可直接双击运行,除此之外,恕不提供其它的售后支持,见谅。 +### 实时画面播放&实时检测框 +live.html是实时画面播放和实时检测结果可视化的demo,将文件中的IP地址替换成KS设备的IP地址即可: +![](深度对接设备接口/assets/live.png) +### 摄像头配置&算法绑定 +source.html是视频流管理demo,将文件中的IP地址替换成KS设备的IP地址即可: +![](深度对接设备接口/assets/source.png) + +### 底库分组&人脸底库 +facelib.html是底库分组管理和人脸底库增删改查的demo,将文件中的IP地址替换成KS设备的IP地址即可: +![](深度对接设备接口/assets/facelib.png) + +### 查看设备信息 +device.html是设备信息demo,将文件中的IP地址替换成KS设备的IP地址即可: +![](深度对接设备接口/assets/device.png) + +## 心跳保活 +分别提供了python和java两种语言的服务端对接KS设备心跳的demo代码。 + +## 接收大模型复审告警 +启动main文件,在接收端创建一个server,在设备端【大模型】-【复审任务】-【结果推送】处,填上http://IP:port/vlreview ,即可接收设备的大模型的复审告警。 + + +## 上位机实时画面 +1. 示例代码下载到本地(windows即可)。 +2. 修改index.html中的serverIp、accessKey、accessSecret的三个字段。 三个修改该项在下图位置处修改。 + +![](上位机实时画面/assets/index.png) +![](上位机实时画面/assets/accesskey.png) + +3. 双击index.html打开,即可使用示例代码。 \ No newline at end of file diff --git a/上位机实时画面/ZQL_common.js b/上位机实时画面/ZQL_common.js new file mode 100644 index 0000000..6f2da33 --- /dev/null +++ b/上位机实时画面/ZQL_common.js @@ -0,0 +1,862 @@ +const ZQL_multivideo = { + setVideoEl: () => { + let videoContainer = document.querySelector("#video-container"); + if (ZQL_playingSource.videoNum == 1) { + videoContainer.className = "one-video"; + videoContainer.innerHTML = ` +
+
+
+
+ + 离线 +
+
+
+ + +
+ ` + } else { + videoContainer.className = "four-video"; + videoContainer.innerHTML = ` +
+
+ +
+
+ + +
+
+
+ +
+
+ + +
+
+
+ +
+
+ + +
+
+
+ +
+
+ + +
+ ` + } + }, + liveLoading: (index) => { + let tipel = document.querySelector("#tip" + index); + tipel.innerHTML = `
` + }, + liveOffline: (index) => { + let tipel = document.querySelector("#tip" + index); + tipel.innerHTML = ` +
+ + 离线 +
+ ` + }, + liveStopLoading: (index) => { + let tipel = document.querySelector("#tip" + index); + if (tipel) { + tipel.innerHTML = `` + } + }, + setAlgList(index) { + let el = document.querySelector(`#video-title${index}`); + let algList = ZQL_sources[ZQL_playingSource[index]].alg; + let algEl = '' + el.innerHTML = ` +
${ZQL_sources[ZQL_playingSource[index]].desc}
+
+
算法: ${ZQL_playingSource[index].alg ? ZQL_sources[ZQL_playingSource[index]].alg[alg].reserved_args.ch_name : ''}
+ ${algEl} +
+
关闭
+ `; + el.querySelectorAll('li').forEach(item => { + item.addEventListener('click', (e) => { + let index = e.currentTarget.getAttribute("index"); + let alg = e.currentTarget.getAttribute("alg") + ZQL_videosInfos[index].alg = alg; + let videlel = document.querySelector(`#video-title${index}`); + videlel.querySelector(".algname").innerHTML = '算法:' + ZQL_sources[ZQL_playingSource[index]].alg[alg].reserved_args.ch_name + }) + }) + document.querySelector(`#close${index}`).addEventListener('click', () => { + ZQL_multivideo.clearAlgList(index); + ZQL_multivideo.liveStopLoading(index); + ZQL_multivideo.destoryVideoByIndex(index); + ZQL_playingSource[index] = null; + ZQL_videosInfos[index] = null; + }) + }, + clearAlgList(index) { + let el = document.querySelector(`#video-title${index}`); + if (el) { + el.innerHTML = "" + } + + }, + detectSrs() { + if (ZQLGLOBAL.detectSrsTimer) { + clearInterval(ZQLGLOBAL.detectSrsTimer) + } + ZQLGLOBAL.detectSrsTimer = setInterval(() => { + ZQL_apis.detectStream().then((res) => { + if (document.visibilityState == "visible" && res.code == 0) { + for (let i = 0; i < ZQL_playingSource.videonum; i++) { + let deviceId_cameraId = ZQL_playingSource[i]; + if ( + deviceId_cameraId && + ZQL_videosInfos[i] && + ZQL_videosInfos[i].status != "离线" + ) { + let deviceId = ZQL_sources[deviceId_cameraId].deviceId; + let cameraId = ZQL_sources[deviceId_cameraId].sourceId; + let streamInfo = res.streams.find( + (item) => item.url.indexOf(`${deviceId}/${cameraId}`) > 0 + ); + if ( + !streamInfo || + (streamInfo && streamInfo.publish.active == false) + ) { + ZQL_multivideo.destoryVideoByIndex(i); + ZQL_multivideo.subscribeLive(deviceId_cameraId, i); + } + } + } + } + + }); + }, 60000) + + }, + handleRefresh(index) { + if (!ZQL_videosInfos[index]) { + return; + } + if (ZQL_videosInfos[index].status == "离线") { + ZQL_multivideo.destoryVideoByIndex(index); + ZQL_multivideo.subscribeLive(ZQL_playingSource[index], index); + } else { + if (!ZQL_videosInfos[index].stream) { + return; + } + let video = document.getElementById("video" + index); + video && (video.srcObject = null); + if (ZQL_videosInfos[index] && ZQL_videosInfos[index].replayTimer) { + clearTimeout(ZQL_videosInfos[index].replayTimer); + ZQL_videosInfos[index].replayTimer = null; + } + ZQL_videosInfos[index] && + ZQL_videosInfos[index].srsrtc && + ZQL_videosInfos[index].srsrtc.destroy(); + ZQL_videosInfos[index].srsrtc = null; + ZQL_videosInfos[index].status = ""; + ZQL_multivideo.playVideo(ZQL_playingSource[index], index); + } + }, + subscribeLive(cameraId, index) { + ZQL_multivideo.getCameraSize(cameraId, index); + ZQL_multivideo.liveLoading(index); + ZQL_apis + .subscribeLive( + ZQL_sources[cameraId].deviceId, + ZQL_sources[cameraId].sourceId + ) + .then((data) => { + let stream = data.data; + if (data && stream) { + ZQL_videosInfos[index].stream = stream; + ZQL_multivideo.playVideo(cameraId, index); + } else { + if (ZQL_playingSource[index] == cameraId) { + ZQL_multivideo.liveOffline(index); + // ZQL_videosInfos[index].status = "离线"; + // ZQL_videosInfos[index].loading = false; + // this.reSubcribe(cameraId, index); + } + } + }) + .catch((err) => { + if ( + ZQL_playingSource[index] == cameraId && + ZQL_videosInfos[index] + ) { + ZQL_multivideo.liveOffline(index); + // ZQL_videosInfos[index].status = "离线"; + // ZQL_videosInfos[index].loading = false; + // this.reSubcribe(cameraId, index); + } + }); + }, + playVideo(cameraId, index) { + if (ZQL_videosInfos[index].srsrtc) { + return; + } + ZQL_videosInfos[index].loading = true; + + let video = document.getElementById("video" + index); + let stream = ZQL_videosInfos[index].stream; + var srsrtc; + if (stream.indexOf("webrtc") >= 0) { + let videosrc = + "webrtc://" + ZQLGLOBAL.serverIp + "/live" + stream.split("/live")[1]; + srsrtc = new JSWebrtc.Player(videosrc, { + video: video, + autoplay: true, + onPlay: (obj) => { + ZQL_multivideo.liveStopLoading(index); + ZQL_videosInfos[index].loading = false; + ZQL_videosInfos[index].playerState = "success"; + + if (ZQL_videosInfos[index].refreshTimeInterval) { + clearInterval(ZQL_videosInfos[index].refreshTimeInterval); + } + ZQL_videosInfos[index].refreshTime = + parseInt((Math.random() * 5 + 5) * 1000) * 60; + ZQL_videosInfos[index].refreshTimeInterval = setInterval(() => { + ZQL_multivideo.handleRefresh(index); + }, ZQL_videosInfos[index].refreshTime); + }, + }); + } else if (stream.indexOf(".flv") >= 0) { + let videosrc = `http://${ZQLGLOBAL.serverIp}:${ZQLGLOBAL.srs_http_server}/live${ + stream.split("/live")[1] + }`; + srsrtc = mpegts.createPlayer( + { + type: "flv", + url: videosrc, + isLive: true, + }, + { enableWorker: true } + ); + srsrtc.attachMediaElement(video); + srsrtc.load(); + + srsrtc + .play() + .then((res) => { + ZQL_multivideo.liveStopLoading(index); + ZQL_videosInfos[index].playerState = "success"; + ZQL_videosInfos[index].loading = false; + if (ZQL_videosInfos[index].refreshTimeInterval) { + clearInterval(ZQL_videosInfos[index].refreshTimeInterval); + } + ZQL_videosInfos[index].refreshTime = + parseInt((Math.random() * 5 + 5) * 1000) * 60; + ZQL_videosInfos[index].refreshTimeInterval = setInterval(() => { + ZQL_multivideo.handleRefresh(index); + }, ZQL_videosInfos[index].refreshTime); + }) + .catch((err) => { }); + if (ZQL_videosInfos[index].replayTimer) { + clearTimeout(ZQL_videosInfos[index].replayTimer); + } + ZQL_videosInfos[index].replayTimer = setTimeout(() => { + ZQL_multivideo.replayflv(srsrtc, cameraId, index); + }, 3000); + } else { + video.src = "staticdata/" + stream.split("/home/linaro/ks/")[1]; + } + + ZQL_videosInfos[index].srsrtc = srsrtc; + + }, + replayflv(srsrtc, cameraId, index) { + if (!ZQL_videosInfos[index]) { + return; + } + if (ZQL_videosInfos[index].playerState == "success") { + return; + } else { + srsrtc.unload(); + srsrtc.load(); + srsrtc + .play() + .then((res) => { + ZQL_multivideo.liveStopLoading(index); + ZQL_videosInfos[index].playerState = "success"; + ZQL_videosInfos[index].loading = false; + if (ZQL_videosInfos[index].refreshTimeInterval) { + clearInterval(ZQL_videosInfos[index].refreshTimeInterval); + } + ZQL_videosInfos[index].refreshTime = + parseInt((Math.random() * 5 + 5) * 1000) * 60; + ZQL_videosInfos[index].refreshTimeInterval = setInterval(() => { + ZQL_multivideo.handleRefresh(index); + }, ZQL_videosInfos[index].refreshTime); + }) + .catch((err) => { + // this.destoryVideoByIndex(index); + // this.subscribeLive(cameraId, index); + }); + if (ZQL_videosInfos[index].replayTimer) { + clearTimeout(ZQL_videosInfos[index].replayTimer); + } + ZQL_videosInfos[index].replayTimer = setTimeout(() => { + ZQL_multivideo.replayflv(srsrtc, cameraId, index); + }, 3000); + } + }, + reSubcribe(cameraId, index) { + if (ZQL_videosInfos[index].subscribeTimeout) { + clearTimeout(ZQL_videosInfos[index].subscribeTimeout); + ZQL_videosInfos[index].subscribeTimeout = null; + } + ZQL_multivideo.videosInfos[index].subscribeTimeout = setTimeout(() => { + ZQL_multivideo.subscribeLive(cameraId, index); + }, 1000); + }, + getCameraSize(id, index) { + ZQL_multivideo.setOrisize( + ZQL_sources[id].draw_size[0], + ZQL_sources[id].draw_size[1], + index, id + ); + }, + setOrisize(width, height, index, id) { + let container = document.querySelector(".video-box"); + if (!container) { + return; + } + if (!ZQL_videosInfos[index]) { + let alg = null; + if (sessionStorage.getItem("curalgs")) { + let cameraId = ZQL_playingSource[index]; + let curalgs = JSON.parse(sessionStorage.getItem("curalgs")); + alg = curalgs[cameraId] + ? JSON.parse(JSON.stringify(curalgs[cameraId])) + : null; + } + ZQL_videosInfos[index] = { + id: id, + loading: true, + openWs: true, + alg: alg, + algListShow: false, + subscribeTimeout: null, + refreshTimeInterval: null, // 定时刷新定时器 + refreshTime: null, // 定时刷新时间 + replayTimer: null, + playerState: "pending", + detectInterval: null, + quanping: false, + srsrtc: null, + stream: "", + status: "", + }; + } + if (ZQL_videosInfos[index]) { + let oriWidth = width; + let oriHeight = height; + ZQL_videosInfos[index].oriWidth = oriWidth; + ZQL_videosInfos[index].oriHeight = oriHeight; + + if ( + oriWidth / container.offsetWidth > + oriHeight / container.offsetHeight + ) { + ZQL_videosInfos[index].actualHeight = container.offsetWidth / (oriWidth / oriHeight) + ZQL_videosInfos[index].actualWidth = container.offsetWidth; + } else { + ZQL_videosInfos[index].actualHeight = container.offsetHeight + ZQL_videosInfos[index].actualWidth = container.offsetHeight * (oriWidth / oriHeight) + } + // videoWidth = ZQL_videosInfos[index].actualWidth; + ZQL_multivideo.setPosition(index); + } + }, + setPosition(index) { + let container = document.querySelector(".video-box"); + let video = document.querySelector("#video" + index); + let canvas = document.getElementById("canvas" + index); + let width = ZQL_videosInfos[index].actualWidth, height = ZQL_videosInfos[index].actualHeight; + video.style.position = "absolute"; + video.style.width = width + "px"; + video.style.height = height + "px"; + canvas.width = width; + canvas.height = height; + if (width / container.offsetWidth < height / container.offsetHeight) { + let left = (container.offsetWidth - width) / 2; + video.style.left = Math.floor(left) + "px"; + video.style.top = 0 + "px"; + canvas.style.left = Math.floor(left) + "px"; + canvas.style.top = "0px"; + } else { + let top = (container.offsetHeight - height) / 2; + video.style.top = Math.floor(top) + "px"; + video.style.left = 0 + "px"; + canvas.style.top = Math.floor(top) + "px"; + canvas.style.left = "0px"; + } + }, + setAlarms: (data, index) => { + ZQL_multivideo.clearCanvas(index); + if (ZQL_videosInfos[index] && !ZQL_videosInfos[index].canvas) { + ZQL_videosInfos[index].canvas = document.getElementById("canvas" + index) + } + if ( + !ZQL_videosInfos[index] || + !ZQL_videosInfos[index].actualWidth || + !ZQL_videosInfos[index].actualHeight || + !ZQL_videosInfos[index].oriWidth || + !ZQL_videosInfos[index].oriHeight + ) { + return; + } + // let bbox = data.result.data.bbox; + let bbox = data.bbox; + if (Object.values(bbox.polygons).length > 0) { + Object.values(bbox.polygons).forEach((item) => { + let color = JSON.parse(JSON.stringify(item.color)).reverse(); + // let color = item.color; + let points = item.polygon.map((point) => { + return [ + Math.round( + (point[0] * ZQL_videosInfos[index].actualWidth) / + ZQL_videosInfos[index].oriWidth + ), + Math.round( + (point[1] * ZQL_videosInfos[index].actualHeight) / + ZQL_videosInfos[index].oriHeight + ), + ]; + }); + let context = ZQL_videosInfos[index].canvas.getContext("2d"); + context.font = "20px Arial bolder"; + context.fillStyle = "transparent"; + context.strokeStyle = "rgb(" + color.join(",") + ")"; + context.lineWidth = 2; + ZQL_multivideo.drawPolygons(points, context); + ZQL_multivideo.drawPolygonInfo(context, Object.values(bbox.polygons), index); + }); + } + + if (bbox.rectangles.length > 0) { + bbox.rectangles.forEach((item, i) => { + let color = JSON.parse(JSON.stringify(item.color)).reverse(); + let coordinates = { + x: Math.round( + (item.xyxy[0] * ZQL_videosInfos[index].actualWidth) / + ZQL_videosInfos[index].oriWidth + ), + y: Math.round( + (item.xyxy[1] * ZQL_videosInfos[index].actualHeight) / + ZQL_videosInfos[index].oriHeight + ), + x1: Math.round( + (item.xyxy[2] * ZQL_videosInfos[index].actualWidth) / + ZQL_videosInfos[index].oriWidth + ), + y1: Math.round( + (item.xyxy[3] * ZQL_videosInfos[index].actualHeight) / + ZQL_videosInfos[index].oriHeight + ), + }; + let context = ZQL_videosInfos[index].canvas.getContext("2d"); + context.font = "20px Arial bolder"; + context.fillStyle = "rgb(" + color.join(",") + ")"; + context.fillText(item.label || "", coordinates.x, coordinates.y - 10); + context.strokeStyle = "rgb(" + color.join(",") + ")"; + context.lineWidth = 2; + // context.strokeRect( + // coordinates.x, + // coordinates.y, + // coordinates.x1 - coordinates.x, + // coordinates.y1 - coordinates.y + // ); + let lines = []; + let lineWidth = (coordinates.x1 - coordinates.x) / 4; + let lineHeight = (coordinates.y1 - coordinates.y) / 4; + lines[0] = { + x: coordinates.x, + y: coordinates.y, + x1: coordinates.x + lineWidth, + y1: coordinates.y, + }; + lines[1] = { + x: coordinates.x, + y: coordinates.y, + x1: coordinates.x, + y1: coordinates.y + lineHeight, + }; + lines[2] = { + x: coordinates.x1, + y: coordinates.y, + x1: coordinates.x1 - lineWidth, + y1: coordinates.y, + }; + lines[3] = { + x: coordinates.x1, + y: coordinates.y, + x1: coordinates.x1, + y1: coordinates.y + lineHeight, + }; + lines[4] = { + x: coordinates.x, + y: coordinates.y1, + x1: coordinates.x + lineWidth, + y1: coordinates.y1, + }; + lines[5] = { + x: coordinates.x, + y: coordinates.y1, + x1: coordinates.x, + y1: coordinates.y1 - lineHeight, + }; + lines[6] = { + x: coordinates.x1, + y: coordinates.y1, + x1: coordinates.x1 - lineWidth, + y1: coordinates.y1, + }; + lines[7] = { + x: coordinates.x1, + y: coordinates.y1, + x1: coordinates.x1, + y1: coordinates.y1 - lineHeight, + }; + lines.forEach((item) => { + ZQL_multivideo.drawLine(context, item); + }); + }); + } + + if (Object.values(bbox.lines).length > 0) { + Object.values(bbox.lines).forEach((item, i) => { + let color = JSON.parse(JSON.stringify(item.color)).reverse(); + let coordinates = { + x: Math.round( + (item.line[0][0] * ZQL_videosInfos[index].actualWidth) / + ZQL_videosInfos[index].oriWidth + ), + y: Math.round( + (item.line[0][1] * ZQL_videosInfos[index].actualHeight) / + ZQL_videosInfos[index].oriHeight + ), + x1: Math.round( + (item.line[1][0] * ZQL_videosInfos[index].actualWidth) / + ZQL_videosInfos[index].oriWidth + ), + y1: Math.round( + (item.line[1][1] * ZQL_videosInfos[index].actualHeight) / + ZQL_videosInfos[index].oriHeight + ), + }; + let context = ZQL_videosInfos[index].canvas.getContext("2d"); + context.font = "20px Arial bolder"; + context.fillStyle = "rgb(" + color.join(",") + ")"; + if (item.ext.direction) { + context.fillText(item.name, (coordinates.x + coordinates.x1) / 2, (coordinates.y + coordinates.y1) / 2 + 20); + } + + context.strokeStyle = "rgb(" + color.join(",") + ")"; + context.lineWidth = 2; + ZQL_multivideo.drawLine(context, coordinates); + ZQL_multivideo.drawCountingInfo(context, Object.values(bbox.lines)); + }); + } + }, + drawPolygons(points, context) { + context.beginPath(); + context.moveTo(points[0][0], points[0][1]); + + for (var i = 1; i < points.length; i++) { + context.lineTo(points[i][0], points[i][1]); + } + context.closePath(); + context.fill(); + context.stroke(); + }, + drawLine(ctx, line) { + ctx.beginPath(); + ctx.moveTo(line.x, line.y); + ctx.lineTo(line.x1, line.y1); + ctx.stroke(); + }, + drawCountingInfo(context, lines) { + lines.forEach((item, index) => { + context.fillStyle = "rgb(255,0,0)"; + if (item.ext.direction.length == 2) { + context.fillText(`[${item.name}] ${item.ext.action.count}: ${item.ext.result.count}`, 0, 20 * index + 20); + } else { + context.fillText(`[${item.name}] ${item.ext.action.increase}: ${item.ext.result.increase},${item.ext.action.decrease}: ${item.ext.result.decrease},${item.ext.action.delta}: ${item.ext.result.delta}`, 0, 20 * index + 20); + } + }); + }, + drawPolygonInfo(context, polygons, videoindex) { + polygons.forEach((item, index) => { + context.fillStyle = + "rgb(" + + JSON.parse(JSON.stringify(item.color)).reverse().join(",") + + ")"; + let leftPoint = item.polygon[0]; + for (let i = 1; i < item.polygon.length; i++) { + if (item.polygon[i][0] < leftPoint[0]) { + leftPoint = item.polygon[i]; + } + } + context.fillText( + `${item.name}`, + (leftPoint[0] * ZQL_videosInfos[videoindex].actualWidth) / + ZQL_videosInfos[videoindex].oriWidth, + (leftPoint[1] * ZQL_videosInfos[videoindex].actualHeight) / + ZQL_videosInfos[videoindex].oriHeight + 20 + ); + if (item.ext.result) { + context.fillStyle = "rgb(255,0,0)"; + context.fillText(`${item.name}: ${item.ext.result}`, 0, 20 * index + 20); + } + }); + }, + destroyVideo(videonum) { + for (let i = 0; i < videonum; i++) { + ZQL_multivideo.destoryVideoByIndex(i); + } + }, + destoryVideoByIndex(index) { + ZQL_multivideo.clearCanvas(index); + if (ZQL_videosInfos[index]) { + if ( + ZQL_videosInfos[index] && + ZQL_videosInfos[index].subscribeTimeout + ) { + clearTimeout(ZQL_videosInfos[index].subscribeTimeout); + ZQL_videosInfos[index].subscribeTimeout = null; + } + if (ZQL_videosInfos[index] && ZQL_videosInfos[index].replayTimer) { + clearTimeout(ZQL_videosInfos[index].replayTimer); + ZQL_videosInfos[index].replayTimer = null; + } + if (ZQL_videosInfos[index].refreshTimeInterval) { + clearInterval(ZQL_videosInfos[index].refreshTimeInterval); + ZQL_videosInfos[index].refreshTimeInterval = null; + } + let video = document.getElementById("video" + index); + video && (video.srcObject = null); + ZQL_videosInfos[index].srsrtc && + ZQL_videosInfos[index].srsrtc.destroy(); + ZQL_multivideo.clearCanvas(index); + ZQL_videosInfos[index] = null; + } + }, + clearCanvas(index) { + let canvas = document.getElementById("canvas" + index); + if (canvas && canvas.getContext("2d")) { + canvas + .getContext("2d") + .clearRect(0, 0, canvas.offsetWidth, canvas.offsetHeight); + } + }, + connectMqtt() { + let mqttclient = mqtt.connect(`ws://${ZQLGLOBAL.serverIp}:${ZQLGLOBAL.websocket}/mqtt`); + mqttclient.subscribe( + ZQLGLOBAL.resultTopic, + { qos: 0 }, + (error) => { + if (error) { + console.log("subscribe error:", error); + return; + } + } + ); + mqttclient.on("message", (topic, payload) => { + let msg = JSON.parse(payload.toString()); + if (msg.msg_type == "result") { + let id = msg.data.device.id + "_" + msg.data.source.id; + for (let i = 0; i < 4; i++) { + if (ZQL_videosInfos[i]) { + let alg = + ZQL_videosInfos[i].alg && ZQL_videosInfos[i].alg.algname; + + if ( + id == ZQL_playingSource[i] && + msg.data.alg.name == ZQL_videosInfos[i].alg + ) { + ZQL_multivideo.setAlarms(msg.data.reserved_data, i); + if ( + ZQL_videosInfos[i] && + ZQL_videosInfos[i].canvasTimeout + ) { + clearTimeout(ZQL_videosInfos[i].canvasTimeout); + } + ZQL_videosInfos[i].canvasTimeout = setTimeout(() => { + ZQL_multivideo.clearCanvas(i); + }, 1000); + break; + } + } + } + } + }); + } +} + +const ZQL_apis = { + getDevices: () => { + return new Promise((resolve, reject) => { + $.ajax({ + type: "GET", + dataType: "json", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.getDevices}`, + // header: { Authorization: `Bearer ${ZQLGLOBAL.token}`}, + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", `Bearer ${ZQLGLOBAL.token}`); + }, + success: function (res) { + resolve(res) + }, + error: function (err) { + reject(err) + } + }); + }) + }, + getSources: () => { + return new Promise((resolve, reject) => { + $.ajax({ + type: "GET", + dataType: "json", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.getSources}`, + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", `Bearer ${ZQLGLOBAL.token}`); + }, + success: function (res) { + resolve(res) + }, + error: function (err) { + reject(err) + } + }); + }) + }, + subscribeLive: (device_id, source_id) => { + return new Promise((resolve, reject) => { + $.ajax({ + type: "GET", + dataType: "json", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.subscribe}?device_id=${device_id}&source_id=${source_id}`, + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", `Bearer ${ZQLGLOBAL.token}`); + }, + success: function (res) { + resolve(res) + }, + error: function (err) { + reject(err) + } + }); + }) + }, + sysArgs: () => { + return new Promise((resolve, reject) => { + $.ajax({ + type: "GET", + dataType: "json", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.sysArgs}`, + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", `Bearer ${ZQLGLOBAL.token}`); + }, + success: function (res) { + resolve(res) + }, + error: function (err) { + reject(err) + } + }); + }) + }, + detectStream: () => { + return new Promise((resolve, reject) => { + $.ajax({ + type: "GET", + dataType: "json", + url: `http://${ZQLGLOBAL.serverIp}:${ZQLGLOBAL.srs_http_api}/api/v1/streams?start=0&count=10000`, + success: function (res) { + resolve(res) + }, + error: function (err) { + reject(err) + } + }); + }) + }, + detectVideo: (device_id, stream) => { + return new Promise((resolve, reject) => { + $.ajax({ + type: "GET", + dataType: "json", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.detect}?device_id=${device_id}&stream=${stream}&draw_size=1280`, + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", `Bearer ${ZQLGLOBAL.token}`); + }, + success: function (res) { + if (res.error == 0) { + resolve({ status: 1 }) + } else { + resolve({ status: 0 }) + } + }, + error: function (err) { + reject(err) + } + }); + }) + }, + gettoken: () => { + var ak = ZQLGLOBAL.accessKey; + var sk = ZQLGLOBAL.accessSecret; + var timestamp = parseInt(new Date().getTime() / 1000); + var nonce = ZQL_apis.generateRandomString(10); + let signature = ZQL_apis.generateSignature(ak,sk,timestamp, nonce) + return new Promise((resolve, reject) => { + $.ajax({ + type: "GET", + dataType: "json", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.getToken}?signature=${signature}&ak=${ak}×tamp=${timestamp}&nonce=${nonce}`, + success: function (res) { + resolve(res) + }, + error: function (err) { + reject(err) + } + }); + }) + }, + generateSignature: (ak,sk,timestamp, nonce) => { + var message = `${ak}:${timestamp}:${nonce}`; + var hash = CryptoJS.HmacSHA256(message, sk); + var signature = CryptoJS.enc.Hex.stringify(hash); + return signature + }, + generateRandomString(length) { + let result = ''; + const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + + for (let i = 0; i < length; i++) { + result += characters.charAt(Math.floor(Math.random() * characters.length)); + } + + return result; + } +} diff --git a/上位机实时画面/assets/accesskey.png b/上位机实时画面/assets/accesskey.png new file mode 100644 index 0000000000000000000000000000000000000000..83244599c8c4eeebf395d93808cefabb58144ba8 GIT binary patch literal 48207 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 S4g%r}k&{w}mcD%Z&wl}zBlpw* literal 0 HcmV?d00001 diff --git a/上位机实时画面/assets/index.png b/上位机实时画面/assets/index.png new file mode 100644 index 0000000000000000000000000000000000000000..658c9e82f19f1895b112b635c4fb9f888f07a210 GIT binary patch literal 75329 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 + + + webrtc + + + + + + + + + + + + + + + + +
+
+
+
+ + +
+
+
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/上位机实时画面/index.js b/上位机实时画面/index.js new file mode 100644 index 0000000..6d09211 --- /dev/null +++ b/上位机实时画面/index.js @@ -0,0 +1,118 @@ + +// 设置文档结构 +ZQL_multivideo.setVideoEl(); +// 设置事件监听 +// document.querySelector("#icon-oneviveo").addEventListener('click', () => { +// playingSource.videoNum = 1; +// setVideoEl(); +// }) +// document.querySelector("#icon-fourviveo").addEventListener('click', () => { +// playingSource.videoNum = 4; +// ZQL_multivideo.setVideoEl(); +// }) + +ZQL_apis.gettoken().then(res => { + if(res.error_code == 0){ + ZQLGLOBAL.token = res.data; + init(); + } +}) + +// 1. 获取设备列表,摄像头列表,组成树形结构 +function init() { + Promise.all([ZQL_apis.getDevices(), ZQL_apis.getSources()]).then(res => { + let devices = res[0].data; + for (let deviceId in res[1].data) { + for (let sourceId in res[1].data[deviceId]) { + res[1].data[deviceId][sourceId].sourceId = sourceId + res[1].data[deviceId][sourceId].deviceId = deviceId + } + } + for (let i = 0; i < devices.length; i++) { + devices[i].deviceId = devices[i].id; + devices[i].title = devices[i].name; + devices[i].type = 'device'; + if (res[1].data[devices[i].id]) { + devices[i].children = Object.values(res[1].data[devices[i].id]).map(item => { + item.id = devices[i].deviceId + '_' + item.sourceId; + item.title = item.desc; + item.type = 'source'; + item.checked = false; + ZQL_sources[devices[i].deviceId + '_' + item.sourceId] = item + return item + }) + } else { + // 没有摄像头的设备不显示 + devices.splice(i, 1) + i = i - 1 + } + } + layui.use(function () { + var tree = layui.tree; + var layer = layui.layer; + tree.render({ + elem: '#ZQL_source_tree', + data: devices, + // showCheckbox:true, + onlyIconControl: true, // 是否仅允许节点左侧图标控制展开收缩 + click: function (obj) { + if (obj.data.sourceId) { + let key = obj.data.deviceId + '_' + obj.data.sourceId; + if (ZQL_sources[key].checked == false) { + ZQL_sources[key].checked = true + if (ZQL_playingSource.videoNum == 1) { + ZQL_playingSource[0] = key; + ZQL_multivideo.subscribeLive(key, 0); + ZQL_multivideo.setAlgList(0); + } else { + for (let i = 0; i < 4; i++) { + if (!ZQL_playingSource[i]) { + ZQL_playingSource[i] = key; + ZQL_multivideo.subscribeLive(key, i); + ZQL_multivideo.setAlgList(i) + break; + } + } + } + } else { + ZQL_sources[key].checked = false + if (ZQL_playingSource.videoNum == 1) { + ZQL_playingSource[0] = null; + ZQL_multivideo.destoryVideoByIndex(0); + ZQL_multivideo.clearAlgList(0); + ZQL_multivideo.liveStopLoading(0); + } else { + for (let i = 0; i < 4; i++) { + if (ZQL_playingSource[i] == key) { + ZQL_playingSource[i] = null; + ZQL_multivideo.destoryVideoByIndex(i); + ZQL_multivideo.clearAlgList(i) + ZQL_multivideo.liveStopLoading(i); + } + } + } + } + } + } + }); + }); + }).catch(err => { + console.log(err) + }) + // 获取系统参数,检测srs、连接mqtt + ZQL_apis.sysArgs().then(res => { + if (res.error_code == 0) { + let map = res.data.map; + ZQLGLOBAL = Object.assign(ZQLGLOBAL, map) + } + ZQL_multivideo.detectSrs(); + ZQL_multivideo.connectMqtt() + }).catch(err => { }) +} + + + +//遗留 +// 1.刷新 +// 2.保存已选择的摄像头, +// 3.切换一分屏四分屏 diff --git a/上位机实时画面/js/crypto-js.js b/上位机实时画面/js/crypto-js.js new file mode 100644 index 0000000..17f2b11 --- /dev/null +++ b/上位机实时画面/js/crypto-js.js @@ -0,0 +1,5988 @@ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(); + } + else if (typeof define === "function" && define.amd) { + // AMD + define([], factory); + } + else { + // Global (browser) + root.CryptoJS = factory(); + } +}(this, function () { + + /** + * CryptoJS core components. + */ + var CryptoJS = CryptoJS || (function (Math, undefined) { + /* + * Local polyfil of Object.create + */ + var create = Object.create || (function () { + function F() {}; + + return function (obj) { + var subtype; + + F.prototype = obj; + + subtype = new F(); + + F.prototype = null; + + return subtype; + }; + }()) + + /** + * CryptoJS namespace. + */ + var C = {}; + + /** + * Library namespace. + */ + var C_lib = C.lib = {}; + + /** + * Base object for prototypal inheritance. + */ + var Base = C_lib.Base = (function () { + + + return { + /** + * Creates a new object that inherits from this object. + * + * @param {Object} overrides Properties to copy into the new object. + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * field: 'value', + * + * method: function () { + * } + * }); + */ + extend: function (overrides) { + // Spawn + var subtype = create(this); + + // Augment + if (overrides) { + subtype.mixIn(overrides); + } + + // Create default initializer + if (!subtype.hasOwnProperty('init') || this.init === subtype.init) { + subtype.init = function () { + subtype.$super.init.apply(this, arguments); + }; + } + + // Initializer's prototype is the subtype object + subtype.init.prototype = subtype; + + // Reference supertype + subtype.$super = this; + + return subtype; + }, + + /** + * Extends this object and runs the init method. + * Arguments to create() will be passed to init(). + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var instance = MyType.create(); + */ + create: function () { + var instance = this.extend(); + instance.init.apply(instance, arguments); + + return instance; + }, + + /** + * Initializes a newly created object. + * Override this method to add some logic when your objects are created. + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * init: function () { + * // ... + * } + * }); + */ + init: function () { + }, + + /** + * Copies properties into this object. + * + * @param {Object} properties The properties to mix in. + * + * @example + * + * MyType.mixIn({ + * field: 'value' + * }); + */ + mixIn: function (properties) { + for (var propertyName in properties) { + if (properties.hasOwnProperty(propertyName)) { + this[propertyName] = properties[propertyName]; + } + } + + // IE won't copy toString using the loop above + if (properties.hasOwnProperty('toString')) { + this.toString = properties.toString; + } + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = instance.clone(); + */ + clone: function () { + return this.init.prototype.extend(this); + } + }; + }()); + + /** + * An array of 32-bit words. + * + * @property {Array} words The array of 32-bit words. + * @property {number} sigBytes The number of significant bytes in this word array. + */ + var WordArray = C_lib.WordArray = Base.extend({ + /** + * Initializes a newly created word array. + * + * @param {Array} words (Optional) An array of 32-bit words. + * @param {number} sigBytes (Optional) The number of significant bytes in the words. + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.create(); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); + */ + init: function (words, sigBytes) { + words = this.words = words || []; + + if (sigBytes != undefined) { + this.sigBytes = sigBytes; + } else { + this.sigBytes = words.length * 4; + } + }, + + /** + * Converts this word array to a string. + * + * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex + * + * @return {string} The stringified word array. + * + * @example + * + * var string = wordArray + ''; + * var string = wordArray.toString(); + * var string = wordArray.toString(CryptoJS.enc.Utf8); + */ + toString: function (encoder) { + return (encoder || Hex).stringify(this); + }, + + /** + * Concatenates a word array to this word array. + * + * @param {WordArray} wordArray The word array to append. + * + * @return {WordArray} This word array. + * + * @example + * + * wordArray1.concat(wordArray2); + */ + concat: function (wordArray) { + // Shortcuts + var thisWords = this.words; + var thatWords = wordArray.words; + var thisSigBytes = this.sigBytes; + var thatSigBytes = wordArray.sigBytes; + + // Clamp excess bits + this.clamp(); + + // Concat + if (thisSigBytes % 4) { + // Copy one byte at a time + for (var i = 0; i < thatSigBytes; i++) { + var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); + } + } else { + // Copy one word at a time + for (var i = 0; i < thatSigBytes; i += 4) { + thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; + } + } + this.sigBytes += thatSigBytes; + + // Chainable + return this; + }, + + /** + * Removes insignificant bits. + * + * @example + * + * wordArray.clamp(); + */ + clamp: function () { + // Shortcuts + var words = this.words; + var sigBytes = this.sigBytes; + + // Clamp + words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); + words.length = Math.ceil(sigBytes / 4); + }, + + /** + * Creates a copy of this word array. + * + * @return {WordArray} The clone. + * + * @example + * + * var clone = wordArray.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone.words = this.words.slice(0); + + return clone; + }, + + /** + * Creates a word array filled with random bytes. + * + * @param {number} nBytes The number of random bytes to generate. + * + * @return {WordArray} The random word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.random(16); + */ + random: function (nBytes) { + var words = []; + + var r = (function (m_w) { + var m_w = m_w; + var m_z = 0x3ade68b1; + var mask = 0xffffffff; + + return function () { + m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; + m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; + var result = ((m_z << 0x10) + m_w) & mask; + result /= 0x100000000; + result += 0.5; + return result * (Math.random() > .5 ? 1 : -1); + } + }); + + for (var i = 0, rcache; i < nBytes; i += 4) { + var _r = r((rcache || Math.random()) * 0x100000000); + + rcache = _r() * 0x3ade67b7; + words.push((_r() * 0x100000000) | 0); + } + + return new WordArray.init(words, nBytes); + } + }); + + /** + * Encoder namespace. + */ + var C_enc = C.enc = {}; + + /** + * Hex encoding strategy. + */ + var Hex = C_enc.Hex = { + /** + * Converts a word array to a hex string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The hex string. + * + * @static + * + * @example + * + * var hexString = CryptoJS.enc.Hex.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var hexChars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + hexChars.push((bite >>> 4).toString(16)); + hexChars.push((bite & 0x0f).toString(16)); + } + + return hexChars.join(''); + }, + + /** + * Converts a hex string to a word array. + * + * @param {string} hexStr The hex string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Hex.parse(hexString); + */ + parse: function (hexStr) { + // Shortcut + var hexStrLength = hexStr.length; + + // Convert + var words = []; + for (var i = 0; i < hexStrLength; i += 2) { + words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); + } + + return new WordArray.init(words, hexStrLength / 2); + } + }; + + /** + * Latin1 encoding strategy. + */ + var Latin1 = C_enc.Latin1 = { + /** + * Converts a word array to a Latin1 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Latin1 string. + * + * @static + * + * @example + * + * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var latin1Chars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + latin1Chars.push(String.fromCharCode(bite)); + } + + return latin1Chars.join(''); + }, + + /** + * Converts a Latin1 string to a word array. + * + * @param {string} latin1Str The Latin1 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); + */ + parse: function (latin1Str) { + // Shortcut + var latin1StrLength = latin1Str.length; + + // Convert + var words = []; + for (var i = 0; i < latin1StrLength; i++) { + words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); + } + + return new WordArray.init(words, latin1StrLength); + } + }; + + /** + * UTF-8 encoding strategy. + */ + var Utf8 = C_enc.Utf8 = { + /** + * Converts a word array to a UTF-8 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-8 string. + * + * @static + * + * @example + * + * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); + */ + stringify: function (wordArray) { + try { + return decodeURIComponent(escape(Latin1.stringify(wordArray))); + } catch (e) { + throw new Error('Malformed UTF-8 data'); + } + }, + + /** + * Converts a UTF-8 string to a word array. + * + * @param {string} utf8Str The UTF-8 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); + */ + parse: function (utf8Str) { + return Latin1.parse(unescape(encodeURIComponent(utf8Str))); + } + }; + + /** + * Abstract buffered block algorithm template. + * + * The property blockSize must be implemented in a concrete subtype. + * + * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 + */ + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ + /** + * Resets this block algorithm's data buffer to its initial state. + * + * @example + * + * bufferedBlockAlgorithm.reset(); + */ + reset: function () { + // Initial values + this._data = new WordArray.init(); + this._nDataBytes = 0; + }, + + /** + * Adds new data to this block algorithm's buffer. + * + * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. + * + * @example + * + * bufferedBlockAlgorithm._append('data'); + * bufferedBlockAlgorithm._append(wordArray); + */ + _append: function (data) { + // Convert string to WordArray, else assume WordArray already + if (typeof data == 'string') { + data = Utf8.parse(data); + } + + // Append + this._data.concat(data); + this._nDataBytes += data.sigBytes; + }, + + /** + * Processes available data blocks. + * + * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. + * + * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. + * + * @return {WordArray} The processed data. + * + * @example + * + * var processedData = bufferedBlockAlgorithm._process(); + * var processedData = bufferedBlockAlgorithm._process(!!'flush'); + */ + _process: function (doFlush) { + // Shortcuts + var data = this._data; + var dataWords = data.words; + var dataSigBytes = data.sigBytes; + var blockSize = this.blockSize; + var blockSizeBytes = blockSize * 4; + + // Count blocks ready + var nBlocksReady = dataSigBytes / blockSizeBytes; + if (doFlush) { + // Round up to include partial blocks + nBlocksReady = Math.ceil(nBlocksReady); + } else { + // Round down to include only full blocks, + // less the number of blocks that must remain in the buffer + nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); + } + + // Count words ready + var nWordsReady = nBlocksReady * blockSize; + + // Count bytes ready + var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); + + // Process blocks + if (nWordsReady) { + for (var offset = 0; offset < nWordsReady; offset += blockSize) { + // Perform concrete-algorithm logic + this._doProcessBlock(dataWords, offset); + } + + // Remove processed words + var processedWords = dataWords.splice(0, nWordsReady); + data.sigBytes -= nBytesReady; + } + + // Return processed words + return new WordArray.init(processedWords, nBytesReady); + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = bufferedBlockAlgorithm.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone._data = this._data.clone(); + + return clone; + }, + + _minBufferSize: 0 + }); + + /** + * Abstract hasher template. + * + * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) + */ + var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + */ + cfg: Base.extend(), + + /** + * Initializes a newly created hasher. + * + * @param {Object} cfg (Optional) The configuration options to use for this hash computation. + * + * @example + * + * var hasher = CryptoJS.algo.SHA256.create(); + */ + init: function (cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Set initial values + this.reset(); + }, + + /** + * Resets this hasher to its initial state. + * + * @example + * + * hasher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-hasher logic + this._doReset(); + }, + + /** + * Updates this hasher with a message. + * + * @param {WordArray|string} messageUpdate The message to append. + * + * @return {Hasher} This hasher. + * + * @example + * + * hasher.update('message'); + * hasher.update(wordArray); + */ + update: function (messageUpdate) { + // Append + this._append(messageUpdate); + + // Update the hash + this._process(); + + // Chainable + return this; + }, + + /** + * Finalizes the hash computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The hash. + * + * @example + * + * var hash = hasher.finalize(); + * var hash = hasher.finalize('message'); + * var hash = hasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Final message update + if (messageUpdate) { + this._append(messageUpdate); + } + + // Perform concrete-hasher logic + var hash = this._doFinalize(); + + return hash; + }, + + blockSize: 512/32, + + /** + * Creates a shortcut function to a hasher's object interface. + * + * @param {Hasher} hasher The hasher to create a helper for. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); + */ + _createHelper: function (hasher) { + return function (message, cfg) { + return new hasher.init(cfg).finalize(message); + }; + }, + + /** + * Creates a shortcut function to the HMAC's object interface. + * + * @param {Hasher} hasher The hasher to use in this HMAC helper. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); + */ + _createHmacHelper: function (hasher) { + return function (message, key) { + return new C_algo.HMAC.init(hasher, key).finalize(message); + }; + } + }); + + /** + * Algorithm namespace. + */ + var C_algo = C.algo = {}; + + return C; + }(Math)); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_enc = C.enc; + + /** + * Base64 encoding strategy. + */ + var Base64 = C_enc.Base64 = { + /** + * Converts a word array to a Base64 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Base64 string. + * + * @static + * + * @example + * + * var base64String = CryptoJS.enc.Base64.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + var map = this._map; + + // Clamp excess bits + wordArray.clamp(); + + // Convert + var base64Chars = []; + for (var i = 0; i < sigBytes; i += 3) { + var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; + var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; + + var triplet = (byte1 << 16) | (byte2 << 8) | byte3; + + for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { + base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); + } + } + + // Add padding + var paddingChar = map.charAt(64); + if (paddingChar) { + while (base64Chars.length % 4) { + base64Chars.push(paddingChar); + } + } + + return base64Chars.join(''); + }, + + /** + * Converts a Base64 string to a word array. + * + * @param {string} base64Str The Base64 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Base64.parse(base64String); + */ + parse: function (base64Str) { + // Shortcuts + var base64StrLength = base64Str.length; + var map = this._map; + var reverseMap = this._reverseMap; + + if (!reverseMap) { + reverseMap = this._reverseMap = []; + for (var j = 0; j < map.length; j++) { + reverseMap[map.charCodeAt(j)] = j; + } + } + + // Ignore padding + var paddingChar = map.charAt(64); + if (paddingChar) { + var paddingIndex = base64Str.indexOf(paddingChar); + if (paddingIndex !== -1) { + base64StrLength = paddingIndex; + } + } + + // Convert + return parseLoop(base64Str, base64StrLength, reverseMap); + + }, + + _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' + }; + + function parseLoop(base64Str, base64StrLength, reverseMap) { + var words = []; + var nBytes = 0; + for (var i = 0; i < base64StrLength; i++) { + if (i % 4) { + var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); + var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); + words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); + nBytes++; + } + } + return WordArray.create(words, nBytes); + } + }()); + + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Constants table + var T = []; + + // Compute constants + (function () { + for (var i = 0; i < 64; i++) { + T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; + } + }()); + + /** + * MD5 hash algorithm. + */ + var MD5 = C_algo.MD5 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0x67452301, 0xefcdab89, + 0x98badcfe, 0x10325476 + ]); + }, + + _doProcessBlock: function (M, offset) { + // Swap endian + for (var i = 0; i < 16; i++) { + // Shortcuts + var offset_i = offset + i; + var M_offset_i = M[offset_i]; + + M[offset_i] = ( + (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | + (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) + ); + } + + // Shortcuts + var H = this._hash.words; + + var M_offset_0 = M[offset + 0]; + var M_offset_1 = M[offset + 1]; + var M_offset_2 = M[offset + 2]; + var M_offset_3 = M[offset + 3]; + var M_offset_4 = M[offset + 4]; + var M_offset_5 = M[offset + 5]; + var M_offset_6 = M[offset + 6]; + var M_offset_7 = M[offset + 7]; + var M_offset_8 = M[offset + 8]; + var M_offset_9 = M[offset + 9]; + var M_offset_10 = M[offset + 10]; + var M_offset_11 = M[offset + 11]; + var M_offset_12 = M[offset + 12]; + var M_offset_13 = M[offset + 13]; + var M_offset_14 = M[offset + 14]; + var M_offset_15 = M[offset + 15]; + + // Working varialbes + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + + // Computation + a = FF(a, b, c, d, M_offset_0, 7, T[0]); + d = FF(d, a, b, c, M_offset_1, 12, T[1]); + c = FF(c, d, a, b, M_offset_2, 17, T[2]); + b = FF(b, c, d, a, M_offset_3, 22, T[3]); + a = FF(a, b, c, d, M_offset_4, 7, T[4]); + d = FF(d, a, b, c, M_offset_5, 12, T[5]); + c = FF(c, d, a, b, M_offset_6, 17, T[6]); + b = FF(b, c, d, a, M_offset_7, 22, T[7]); + a = FF(a, b, c, d, M_offset_8, 7, T[8]); + d = FF(d, a, b, c, M_offset_9, 12, T[9]); + c = FF(c, d, a, b, M_offset_10, 17, T[10]); + b = FF(b, c, d, a, M_offset_11, 22, T[11]); + a = FF(a, b, c, d, M_offset_12, 7, T[12]); + d = FF(d, a, b, c, M_offset_13, 12, T[13]); + c = FF(c, d, a, b, M_offset_14, 17, T[14]); + b = FF(b, c, d, a, M_offset_15, 22, T[15]); + + a = GG(a, b, c, d, M_offset_1, 5, T[16]); + d = GG(d, a, b, c, M_offset_6, 9, T[17]); + c = GG(c, d, a, b, M_offset_11, 14, T[18]); + b = GG(b, c, d, a, M_offset_0, 20, T[19]); + a = GG(a, b, c, d, M_offset_5, 5, T[20]); + d = GG(d, a, b, c, M_offset_10, 9, T[21]); + c = GG(c, d, a, b, M_offset_15, 14, T[22]); + b = GG(b, c, d, a, M_offset_4, 20, T[23]); + a = GG(a, b, c, d, M_offset_9, 5, T[24]); + d = GG(d, a, b, c, M_offset_14, 9, T[25]); + c = GG(c, d, a, b, M_offset_3, 14, T[26]); + b = GG(b, c, d, a, M_offset_8, 20, T[27]); + a = GG(a, b, c, d, M_offset_13, 5, T[28]); + d = GG(d, a, b, c, M_offset_2, 9, T[29]); + c = GG(c, d, a, b, M_offset_7, 14, T[30]); + b = GG(b, c, d, a, M_offset_12, 20, T[31]); + + a = HH(a, b, c, d, M_offset_5, 4, T[32]); + d = HH(d, a, b, c, M_offset_8, 11, T[33]); + c = HH(c, d, a, b, M_offset_11, 16, T[34]); + b = HH(b, c, d, a, M_offset_14, 23, T[35]); + a = HH(a, b, c, d, M_offset_1, 4, T[36]); + d = HH(d, a, b, c, M_offset_4, 11, T[37]); + c = HH(c, d, a, b, M_offset_7, 16, T[38]); + b = HH(b, c, d, a, M_offset_10, 23, T[39]); + a = HH(a, b, c, d, M_offset_13, 4, T[40]); + d = HH(d, a, b, c, M_offset_0, 11, T[41]); + c = HH(c, d, a, b, M_offset_3, 16, T[42]); + b = HH(b, c, d, a, M_offset_6, 23, T[43]); + a = HH(a, b, c, d, M_offset_9, 4, T[44]); + d = HH(d, a, b, c, M_offset_12, 11, T[45]); + c = HH(c, d, a, b, M_offset_15, 16, T[46]); + b = HH(b, c, d, a, M_offset_2, 23, T[47]); + + a = II(a, b, c, d, M_offset_0, 6, T[48]); + d = II(d, a, b, c, M_offset_7, 10, T[49]); + c = II(c, d, a, b, M_offset_14, 15, T[50]); + b = II(b, c, d, a, M_offset_5, 21, T[51]); + a = II(a, b, c, d, M_offset_12, 6, T[52]); + d = II(d, a, b, c, M_offset_3, 10, T[53]); + c = II(c, d, a, b, M_offset_10, 15, T[54]); + b = II(b, c, d, a, M_offset_1, 21, T[55]); + a = II(a, b, c, d, M_offset_8, 6, T[56]); + d = II(d, a, b, c, M_offset_15, 10, T[57]); + c = II(c, d, a, b, M_offset_6, 15, T[58]); + b = II(b, c, d, a, M_offset_13, 21, T[59]); + a = II(a, b, c, d, M_offset_4, 6, T[60]); + d = II(d, a, b, c, M_offset_11, 10, T[61]); + c = II(c, d, a, b, M_offset_2, 15, T[62]); + b = II(b, c, d, a, M_offset_9, 21, T[63]); + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + + var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); + var nBitsTotalL = nBitsTotal; + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( + (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | + (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) + ); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( + (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | + (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) + ); + + data.sigBytes = (dataWords.length + 1) * 4; + + // Hash final blocks + this._process(); + + // Shortcuts + var hash = this._hash; + var H = hash.words; + + // Swap endian + for (var i = 0; i < 4; i++) { + // Shortcut + var H_i = H[i]; + + H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | + (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); + } + + // Return final computed hash + return hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + function FF(a, b, c, d, x, s, t) { + var n = a + ((b & c) | (~b & d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function GG(a, b, c, d, x, s, t) { + var n = a + ((b & d) | (c & ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function HH(a, b, c, d, x, s, t) { + var n = a + (b ^ c ^ d) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function II(a, b, c, d, x, s, t) { + var n = a + (c ^ (b | ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.MD5('message'); + * var hash = CryptoJS.MD5(wordArray); + */ + C.MD5 = Hasher._createHelper(MD5); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacMD5(message, key); + */ + C.HmacMD5 = Hasher._createHmacHelper(MD5); + }(Math)); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Reusable object + var W = []; + + /** + * SHA-1 hash algorithm. + */ + var SHA1 = C_algo.SHA1 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0x67452301, 0xefcdab89, + 0x98badcfe, 0x10325476, + 0xc3d2e1f0 + ]); + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var H = this._hash.words; + + // Working variables + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + var e = H[4]; + + // Computation + for (var i = 0; i < 80; i++) { + if (i < 16) { + W[i] = M[offset + i] | 0; + } else { + var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; + W[i] = (n << 1) | (n >>> 31); + } + + var t = ((a << 5) | (a >>> 27)) + e + W[i]; + if (i < 20) { + t += ((b & c) | (~b & d)) + 0x5a827999; + } else if (i < 40) { + t += (b ^ c ^ d) + 0x6ed9eba1; + } else if (i < 60) { + t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; + } else /* if (i < 80) */ { + t += (b ^ c ^ d) - 0x359d3e2a; + } + + e = d; + d = c; + c = (b << 30) | (b >>> 2); + b = a; + a = t; + } + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + H[4] = (H[4] + e) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Return final computed hash + return this._hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA1('message'); + * var hash = CryptoJS.SHA1(wordArray); + */ + C.SHA1 = Hasher._createHelper(SHA1); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA1(message, key); + */ + C.HmacSHA1 = Hasher._createHmacHelper(SHA1); + }()); + + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Initialization and round constants tables + var H = []; + var K = []; + + // Compute constants + (function () { + function isPrime(n) { + var sqrtN = Math.sqrt(n); + for (var factor = 2; factor <= sqrtN; factor++) { + if (!(n % factor)) { + return false; + } + } + + return true; + } + + function getFractionalBits(n) { + return ((n - (n | 0)) * 0x100000000) | 0; + } + + var n = 2; + var nPrime = 0; + while (nPrime < 64) { + if (isPrime(n)) { + if (nPrime < 8) { + H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); + } + K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); + + nPrime++; + } + + n++; + } + }()); + + // Reusable object + var W = []; + + /** + * SHA-256 hash algorithm. + */ + var SHA256 = C_algo.SHA256 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init(H.slice(0)); + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var H = this._hash.words; + + // Working variables + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + var e = H[4]; + var f = H[5]; + var g = H[6]; + var h = H[7]; + + // Computation + for (var i = 0; i < 64; i++) { + if (i < 16) { + W[i] = M[offset + i] | 0; + } else { + var gamma0x = W[i - 15]; + var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ + ((gamma0x << 14) | (gamma0x >>> 18)) ^ + (gamma0x >>> 3); + + var gamma1x = W[i - 2]; + var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ + ((gamma1x << 13) | (gamma1x >>> 19)) ^ + (gamma1x >>> 10); + + W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; + } + + var ch = (e & f) ^ (~e & g); + var maj = (a & b) ^ (a & c) ^ (b & c); + + var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); + var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); + + var t1 = h + sigma1 + ch + K[i] + W[i]; + var t2 = sigma0 + maj; + + h = g; + g = f; + f = e; + e = (d + t1) | 0; + d = c; + c = b; + b = a; + a = (t1 + t2) | 0; + } + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + H[4] = (H[4] + e) | 0; + H[5] = (H[5] + f) | 0; + H[6] = (H[6] + g) | 0; + H[7] = (H[7] + h) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Return final computed hash + return this._hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA256('message'); + * var hash = CryptoJS.SHA256(wordArray); + */ + C.SHA256 = Hasher._createHelper(SHA256); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA256(message, key); + */ + C.HmacSHA256 = Hasher._createHmacHelper(SHA256); + }(Math)); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_enc = C.enc; + + /** + * UTF-16 BE encoding strategy. + */ + var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { + /** + * Converts a word array to a UTF-16 BE string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-16 BE string. + * + * @static + * + * @example + * + * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var utf16Chars = []; + for (var i = 0; i < sigBytes; i += 2) { + var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; + utf16Chars.push(String.fromCharCode(codePoint)); + } + + return utf16Chars.join(''); + }, + + /** + * Converts a UTF-16 BE string to a word array. + * + * @param {string} utf16Str The UTF-16 BE string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); + */ + parse: function (utf16Str) { + // Shortcut + var utf16StrLength = utf16Str.length; + + // Convert + var words = []; + for (var i = 0; i < utf16StrLength; i++) { + words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); + } + + return WordArray.create(words, utf16StrLength * 2); + } + }; + + /** + * UTF-16 LE encoding strategy. + */ + C_enc.Utf16LE = { + /** + * Converts a word array to a UTF-16 LE string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-16 LE string. + * + * @static + * + * @example + * + * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var utf16Chars = []; + for (var i = 0; i < sigBytes; i += 2) { + var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); + utf16Chars.push(String.fromCharCode(codePoint)); + } + + return utf16Chars.join(''); + }, + + /** + * Converts a UTF-16 LE string to a word array. + * + * @param {string} utf16Str The UTF-16 LE string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); + */ + parse: function (utf16Str) { + // Shortcut + var utf16StrLength = utf16Str.length; + + // Convert + var words = []; + for (var i = 0; i < utf16StrLength; i++) { + words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); + } + + return WordArray.create(words, utf16StrLength * 2); + } + }; + + function swapEndian(word) { + return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); + } + }()); + + + (function () { + // Check if typed arrays are supported + if (typeof ArrayBuffer != 'function') { + return; + } + + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + + // Reference original init + var superInit = WordArray.init; + + // Augment WordArray.init to handle typed arrays + var subInit = WordArray.init = function (typedArray) { + // Convert buffers to uint8 + if (typedArray instanceof ArrayBuffer) { + typedArray = new Uint8Array(typedArray); + } + + // Convert other array views to uint8 + if ( + typedArray instanceof Int8Array || + (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || + typedArray instanceof Int16Array || + typedArray instanceof Uint16Array || + typedArray instanceof Int32Array || + typedArray instanceof Uint32Array || + typedArray instanceof Float32Array || + typedArray instanceof Float64Array + ) { + typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); + } + + // Handle Uint8Array + if (typedArray instanceof Uint8Array) { + // Shortcut + var typedArrayByteLength = typedArray.byteLength; + + // Extract bytes + var words = []; + for (var i = 0; i < typedArrayByteLength; i++) { + words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); + } + + // Initialize this word array + superInit.call(this, words, typedArrayByteLength); + } else { + // Else call normal init + superInit.apply(this, arguments); + } + }; + + subInit.prototype = WordArray; + }()); + + + /** @preserve + (c) 2012 by Cédric Mesnil. All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Constants table + var _zl = WordArray.create([ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, + 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, + 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, + 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); + var _zr = WordArray.create([ + 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, + 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, + 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, + 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, + 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); + var _sl = WordArray.create([ + 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, + 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, + 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, + 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, + 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); + var _sr = WordArray.create([ + 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, + 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, + 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, + 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, + 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); + + var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); + var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); + + /** + * RIPEMD160 hash algorithm. + */ + var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ + _doReset: function () { + this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); + }, + + _doProcessBlock: function (M, offset) { + + // Swap endian + for (var i = 0; i < 16; i++) { + // Shortcuts + var offset_i = offset + i; + var M_offset_i = M[offset_i]; + + // Swap + M[offset_i] = ( + (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | + (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) + ); + } + // Shortcut + var H = this._hash.words; + var hl = _hl.words; + var hr = _hr.words; + var zl = _zl.words; + var zr = _zr.words; + var sl = _sl.words; + var sr = _sr.words; + + // Working variables + var al, bl, cl, dl, el; + var ar, br, cr, dr, er; + + ar = al = H[0]; + br = bl = H[1]; + cr = cl = H[2]; + dr = dl = H[3]; + er = el = H[4]; + // Computation + var t; + for (var i = 0; i < 80; i += 1) { + t = (al + M[offset+zl[i]])|0; + if (i<16){ + t += f1(bl,cl,dl) + hl[0]; + } else if (i<32) { + t += f2(bl,cl,dl) + hl[1]; + } else if (i<48) { + t += f3(bl,cl,dl) + hl[2]; + } else if (i<64) { + t += f4(bl,cl,dl) + hl[3]; + } else {// if (i<80) { + t += f5(bl,cl,dl) + hl[4]; + } + t = t|0; + t = rotl(t,sl[i]); + t = (t+el)|0; + al = el; + el = dl; + dl = rotl(cl, 10); + cl = bl; + bl = t; + + t = (ar + M[offset+zr[i]])|0; + if (i<16){ + t += f5(br,cr,dr) + hr[0]; + } else if (i<32) { + t += f4(br,cr,dr) + hr[1]; + } else if (i<48) { + t += f3(br,cr,dr) + hr[2]; + } else if (i<64) { + t += f2(br,cr,dr) + hr[3]; + } else {// if (i<80) { + t += f1(br,cr,dr) + hr[4]; + } + t = t|0; + t = rotl(t,sr[i]) ; + t = (t+er)|0; + ar = er; + er = dr; + dr = rotl(cr, 10); + cr = br; + br = t; + } + // Intermediate hash value + t = (H[1] + cl + dr)|0; + H[1] = (H[2] + dl + er)|0; + H[2] = (H[3] + el + ar)|0; + H[3] = (H[4] + al + br)|0; + H[4] = (H[0] + bl + cr)|0; + H[0] = t; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( + (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | + (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) + ); + data.sigBytes = (dataWords.length + 1) * 4; + + // Hash final blocks + this._process(); + + // Shortcuts + var hash = this._hash; + var H = hash.words; + + // Swap endian + for (var i = 0; i < 5; i++) { + // Shortcut + var H_i = H[i]; + + // Swap + H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | + (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); + } + + // Return final computed hash + return hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + + function f1(x, y, z) { + return ((x) ^ (y) ^ (z)); + + } + + function f2(x, y, z) { + return (((x)&(y)) | ((~x)&(z))); + } + + function f3(x, y, z) { + return (((x) | (~(y))) ^ (z)); + } + + function f4(x, y, z) { + return (((x) & (z)) | ((y)&(~(z)))); + } + + function f5(x, y, z) { + return ((x) ^ ((y) |(~(z)))); + + } + + function rotl(x,n) { + return (x<>>(32-n)); + } + + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.RIPEMD160('message'); + * var hash = CryptoJS.RIPEMD160(wordArray); + */ + C.RIPEMD160 = Hasher._createHelper(RIPEMD160); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacRIPEMD160(message, key); + */ + C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); + }(Math)); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var C_enc = C.enc; + var Utf8 = C_enc.Utf8; + var C_algo = C.algo; + + /** + * HMAC algorithm. + */ + var HMAC = C_algo.HMAC = Base.extend({ + /** + * Initializes a newly created HMAC. + * + * @param {Hasher} hasher The hash algorithm to use. + * @param {WordArray|string} key The secret key. + * + * @example + * + * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); + */ + init: function (hasher, key) { + // Init hasher + hasher = this._hasher = new hasher.init(); + + // Convert string to WordArray, else assume WordArray already + if (typeof key == 'string') { + key = Utf8.parse(key); + } + + // Shortcuts + var hasherBlockSize = hasher.blockSize; + var hasherBlockSizeBytes = hasherBlockSize * 4; + + // Allow arbitrary length keys + if (key.sigBytes > hasherBlockSizeBytes) { + key = hasher.finalize(key); + } + + // Clamp excess bits + key.clamp(); + + // Clone key for inner and outer pads + var oKey = this._oKey = key.clone(); + var iKey = this._iKey = key.clone(); + + // Shortcuts + var oKeyWords = oKey.words; + var iKeyWords = iKey.words; + + // XOR keys with pad constants + for (var i = 0; i < hasherBlockSize; i++) { + oKeyWords[i] ^= 0x5c5c5c5c; + iKeyWords[i] ^= 0x36363636; + } + oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; + + // Set initial values + this.reset(); + }, + + /** + * Resets this HMAC to its initial state. + * + * @example + * + * hmacHasher.reset(); + */ + reset: function () { + // Shortcut + var hasher = this._hasher; + + // Reset + hasher.reset(); + hasher.update(this._iKey); + }, + + /** + * Updates this HMAC with a message. + * + * @param {WordArray|string} messageUpdate The message to append. + * + * @return {HMAC} This HMAC instance. + * + * @example + * + * hmacHasher.update('message'); + * hmacHasher.update(wordArray); + */ + update: function (messageUpdate) { + this._hasher.update(messageUpdate); + + // Chainable + return this; + }, + + /** + * Finalizes the HMAC computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The HMAC. + * + * @example + * + * var hmac = hmacHasher.finalize(); + * var hmac = hmacHasher.finalize('message'); + * var hmac = hmacHasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Shortcut + var hasher = this._hasher; + + // Compute HMAC + var innerHash = hasher.finalize(messageUpdate); + hasher.reset(); + var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); + + return hmac; + } + }); + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var C_algo = C.algo; + var SHA1 = C_algo.SHA1; + var HMAC = C_algo.HMAC; + + /** + * Password-Based Key Derivation Function 2 algorithm. + */ + var PBKDF2 = C_algo.PBKDF2 = Base.extend({ + /** + * Configuration options. + * + * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) + * @property {Hasher} hasher The hasher to use. Default: SHA1 + * @property {number} iterations The number of iterations to perform. Default: 1 + */ + cfg: Base.extend({ + keySize: 128/32, + hasher: SHA1, + iterations: 1 + }), + + /** + * Initializes a newly created key derivation function. + * + * @param {Object} cfg (Optional) The configuration options to use for the derivation. + * + * @example + * + * var kdf = CryptoJS.algo.PBKDF2.create(); + * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); + * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); + */ + init: function (cfg) { + this.cfg = this.cfg.extend(cfg); + }, + + /** + * Computes the Password-Based Key Derivation Function 2. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * + * @return {WordArray} The derived key. + * + * @example + * + * var key = kdf.compute(password, salt); + */ + compute: function (password, salt) { + // Shortcut + var cfg = this.cfg; + + // Init HMAC + var hmac = HMAC.create(cfg.hasher, password); + + // Initial values + var derivedKey = WordArray.create(); + var blockIndex = WordArray.create([0x00000001]); + + // Shortcuts + var derivedKeyWords = derivedKey.words; + var blockIndexWords = blockIndex.words; + var keySize = cfg.keySize; + var iterations = cfg.iterations; + + // Generate key + while (derivedKeyWords.length < keySize) { + var block = hmac.update(salt).finalize(blockIndex); + hmac.reset(); + + // Shortcuts + var blockWords = block.words; + var blockWordsLength = blockWords.length; + + // Iterations + var intermediate = block; + for (var i = 1; i < iterations; i++) { + intermediate = hmac.finalize(intermediate); + hmac.reset(); + + // Shortcut + var intermediateWords = intermediate.words; + + // XOR intermediate with block + for (var j = 0; j < blockWordsLength; j++) { + blockWords[j] ^= intermediateWords[j]; + } + } + + derivedKey.concat(block); + blockIndexWords[0]++; + } + derivedKey.sigBytes = keySize * 4; + + return derivedKey; + } + }); + + /** + * Computes the Password-Based Key Derivation Function 2. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * @param {Object} cfg (Optional) The configuration options to use for this computation. + * + * @return {WordArray} The derived key. + * + * @static + * + * @example + * + * var key = CryptoJS.PBKDF2(password, salt); + * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); + * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); + */ + C.PBKDF2 = function (password, salt, cfg) { + return PBKDF2.create(cfg).compute(password, salt); + }; + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var C_algo = C.algo; + var MD5 = C_algo.MD5; + + /** + * This key derivation function is meant to conform with EVP_BytesToKey. + * www.openssl.org/docs/crypto/EVP_BytesToKey.html + */ + var EvpKDF = C_algo.EvpKDF = Base.extend({ + /** + * Configuration options. + * + * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) + * @property {Hasher} hasher The hash algorithm to use. Default: MD5 + * @property {number} iterations The number of iterations to perform. Default: 1 + */ + cfg: Base.extend({ + keySize: 128/32, + hasher: MD5, + iterations: 1 + }), + + /** + * Initializes a newly created key derivation function. + * + * @param {Object} cfg (Optional) The configuration options to use for the derivation. + * + * @example + * + * var kdf = CryptoJS.algo.EvpKDF.create(); + * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); + * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); + */ + init: function (cfg) { + this.cfg = this.cfg.extend(cfg); + }, + + /** + * Derives a key from a password. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * + * @return {WordArray} The derived key. + * + * @example + * + * var key = kdf.compute(password, salt); + */ + compute: function (password, salt) { + // Shortcut + var cfg = this.cfg; + + // Init hasher + var hasher = cfg.hasher.create(); + + // Initial values + var derivedKey = WordArray.create(); + + // Shortcuts + var derivedKeyWords = derivedKey.words; + var keySize = cfg.keySize; + var iterations = cfg.iterations; + + // Generate key + while (derivedKeyWords.length < keySize) { + if (block) { + hasher.update(block); + } + var block = hasher.update(password).finalize(salt); + hasher.reset(); + + // Iterations + for (var i = 1; i < iterations; i++) { + block = hasher.finalize(block); + hasher.reset(); + } + + derivedKey.concat(block); + } + derivedKey.sigBytes = keySize * 4; + + return derivedKey; + } + }); + + /** + * Derives a key from a password. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * @param {Object} cfg (Optional) The configuration options to use for this computation. + * + * @return {WordArray} The derived key. + * + * @static + * + * @example + * + * var key = CryptoJS.EvpKDF(password, salt); + * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); + * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); + */ + C.EvpKDF = function (password, salt, cfg) { + return EvpKDF.create(cfg).compute(password, salt); + }; + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_algo = C.algo; + var SHA256 = C_algo.SHA256; + + /** + * SHA-224 hash algorithm. + */ + var SHA224 = C_algo.SHA224 = SHA256.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, + 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 + ]); + }, + + _doFinalize: function () { + var hash = SHA256._doFinalize.call(this); + + hash.sigBytes -= 4; + + return hash; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA224('message'); + * var hash = CryptoJS.SHA224(wordArray); + */ + C.SHA224 = SHA256._createHelper(SHA224); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA224(message, key); + */ + C.HmacSHA224 = SHA256._createHmacHelper(SHA224); + }()); + + + (function (undefined) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var X32WordArray = C_lib.WordArray; + + /** + * x64 namespace. + */ + var C_x64 = C.x64 = {}; + + /** + * A 64-bit word. + */ + var X64Word = C_x64.Word = Base.extend({ + /** + * Initializes a newly created 64-bit word. + * + * @param {number} high The high 32 bits. + * @param {number} low The low 32 bits. + * + * @example + * + * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); + */ + init: function (high, low) { + this.high = high; + this.low = low; + } + + /** + * Bitwise NOTs this word. + * + * @return {X64Word} A new x64-Word object after negating. + * + * @example + * + * var negated = x64Word.not(); + */ + // not: function () { + // var high = ~this.high; + // var low = ~this.low; + + // return X64Word.create(high, low); + // }, + + /** + * Bitwise ANDs this word with the passed word. + * + * @param {X64Word} word The x64-Word to AND with this word. + * + * @return {X64Word} A new x64-Word object after ANDing. + * + * @example + * + * var anded = x64Word.and(anotherX64Word); + */ + // and: function (word) { + // var high = this.high & word.high; + // var low = this.low & word.low; + + // return X64Word.create(high, low); + // }, + + /** + * Bitwise ORs this word with the passed word. + * + * @param {X64Word} word The x64-Word to OR with this word. + * + * @return {X64Word} A new x64-Word object after ORing. + * + * @example + * + * var ored = x64Word.or(anotherX64Word); + */ + // or: function (word) { + // var high = this.high | word.high; + // var low = this.low | word.low; + + // return X64Word.create(high, low); + // }, + + /** + * Bitwise XORs this word with the passed word. + * + * @param {X64Word} word The x64-Word to XOR with this word. + * + * @return {X64Word} A new x64-Word object after XORing. + * + * @example + * + * var xored = x64Word.xor(anotherX64Word); + */ + // xor: function (word) { + // var high = this.high ^ word.high; + // var low = this.low ^ word.low; + + // return X64Word.create(high, low); + // }, + + /** + * Shifts this word n bits to the left. + * + * @param {number} n The number of bits to shift. + * + * @return {X64Word} A new x64-Word object after shifting. + * + * @example + * + * var shifted = x64Word.shiftL(25); + */ + // shiftL: function (n) { + // if (n < 32) { + // var high = (this.high << n) | (this.low >>> (32 - n)); + // var low = this.low << n; + // } else { + // var high = this.low << (n - 32); + // var low = 0; + // } + + // return X64Word.create(high, low); + // }, + + /** + * Shifts this word n bits to the right. + * + * @param {number} n The number of bits to shift. + * + * @return {X64Word} A new x64-Word object after shifting. + * + * @example + * + * var shifted = x64Word.shiftR(7); + */ + // shiftR: function (n) { + // if (n < 32) { + // var low = (this.low >>> n) | (this.high << (32 - n)); + // var high = this.high >>> n; + // } else { + // var low = this.high >>> (n - 32); + // var high = 0; + // } + + // return X64Word.create(high, low); + // }, + + /** + * Rotates this word n bits to the left. + * + * @param {number} n The number of bits to rotate. + * + * @return {X64Word} A new x64-Word object after rotating. + * + * @example + * + * var rotated = x64Word.rotL(25); + */ + // rotL: function (n) { + // return this.shiftL(n).or(this.shiftR(64 - n)); + // }, + + /** + * Rotates this word n bits to the right. + * + * @param {number} n The number of bits to rotate. + * + * @return {X64Word} A new x64-Word object after rotating. + * + * @example + * + * var rotated = x64Word.rotR(7); + */ + // rotR: function (n) { + // return this.shiftR(n).or(this.shiftL(64 - n)); + // }, + + /** + * Adds this word with the passed word. + * + * @param {X64Word} word The x64-Word to add with this word. + * + * @return {X64Word} A new x64-Word object after adding. + * + * @example + * + * var added = x64Word.add(anotherX64Word); + */ + // add: function (word) { + // var low = (this.low + word.low) | 0; + // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; + // var high = (this.high + word.high + carry) | 0; + + // return X64Word.create(high, low); + // } + }); + + /** + * An array of 64-bit words. + * + * @property {Array} words The array of CryptoJS.x64.Word objects. + * @property {number} sigBytes The number of significant bytes in this word array. + */ + var X64WordArray = C_x64.WordArray = Base.extend({ + /** + * Initializes a newly created word array. + * + * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. + * @param {number} sigBytes (Optional) The number of significant bytes in the words. + * + * @example + * + * var wordArray = CryptoJS.x64.WordArray.create(); + * + * var wordArray = CryptoJS.x64.WordArray.create([ + * CryptoJS.x64.Word.create(0x00010203, 0x04050607), + * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) + * ]); + * + * var wordArray = CryptoJS.x64.WordArray.create([ + * CryptoJS.x64.Word.create(0x00010203, 0x04050607), + * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) + * ], 10); + */ + init: function (words, sigBytes) { + words = this.words = words || []; + + if (sigBytes != undefined) { + this.sigBytes = sigBytes; + } else { + this.sigBytes = words.length * 8; + } + }, + + /** + * Converts this 64-bit word array to a 32-bit word array. + * + * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. + * + * @example + * + * var x32WordArray = x64WordArray.toX32(); + */ + toX32: function () { + // Shortcuts + var x64Words = this.words; + var x64WordsLength = x64Words.length; + + // Convert + var x32Words = []; + for (var i = 0; i < x64WordsLength; i++) { + var x64Word = x64Words[i]; + x32Words.push(x64Word.high); + x32Words.push(x64Word.low); + } + + return X32WordArray.create(x32Words, this.sigBytes); + }, + + /** + * Creates a copy of this word array. + * + * @return {X64WordArray} The clone. + * + * @example + * + * var clone = x64WordArray.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + + // Clone "words" array + var words = clone.words = this.words.slice(0); + + // Clone each X64Word object + var wordsLength = words.length; + for (var i = 0; i < wordsLength; i++) { + words[i] = words[i].clone(); + } + + return clone; + } + }); + }()); + + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_x64 = C.x64; + var X64Word = C_x64.Word; + var C_algo = C.algo; + + // Constants tables + var RHO_OFFSETS = []; + var PI_INDEXES = []; + var ROUND_CONSTANTS = []; + + // Compute Constants + (function () { + // Compute rho offset constants + var x = 1, y = 0; + for (var t = 0; t < 24; t++) { + RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; + + var newX = y % 5; + var newY = (2 * x + 3 * y) % 5; + x = newX; + y = newY; + } + + // Compute pi index constants + for (var x = 0; x < 5; x++) { + for (var y = 0; y < 5; y++) { + PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; + } + } + + // Compute round constants + var LFSR = 0x01; + for (var i = 0; i < 24; i++) { + var roundConstantMsw = 0; + var roundConstantLsw = 0; + + for (var j = 0; j < 7; j++) { + if (LFSR & 0x01) { + var bitPosition = (1 << j) - 1; + if (bitPosition < 32) { + roundConstantLsw ^= 1 << bitPosition; + } else /* if (bitPosition >= 32) */ { + roundConstantMsw ^= 1 << (bitPosition - 32); + } + } + + // Compute next LFSR + if (LFSR & 0x80) { + // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 + LFSR = (LFSR << 1) ^ 0x71; + } else { + LFSR <<= 1; + } + } + + ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); + } + }()); + + // Reusable objects for temporary values + var T = []; + (function () { + for (var i = 0; i < 25; i++) { + T[i] = X64Word.create(); + } + }()); + + /** + * SHA-3 hash algorithm. + */ + var SHA3 = C_algo.SHA3 = Hasher.extend({ + /** + * Configuration options. + * + * @property {number} outputLength + * The desired number of bits in the output hash. + * Only values permitted are: 224, 256, 384, 512. + * Default: 512 + */ + cfg: Hasher.cfg.extend({ + outputLength: 512 + }), + + _doReset: function () { + var state = this._state = [] + for (var i = 0; i < 25; i++) { + state[i] = new X64Word.init(); + } + + this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; + }, + + _doProcessBlock: function (M, offset) { + // Shortcuts + var state = this._state; + var nBlockSizeLanes = this.blockSize / 2; + + // Absorb + for (var i = 0; i < nBlockSizeLanes; i++) { + // Shortcuts + var M2i = M[offset + 2 * i]; + var M2i1 = M[offset + 2 * i + 1]; + + // Swap endian + M2i = ( + (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | + (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) + ); + M2i1 = ( + (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | + (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) + ); + + // Absorb message into state + var lane = state[i]; + lane.high ^= M2i1; + lane.low ^= M2i; + } + + // Rounds + for (var round = 0; round < 24; round++) { + // Theta + for (var x = 0; x < 5; x++) { + // Mix column lanes + var tMsw = 0, tLsw = 0; + for (var y = 0; y < 5; y++) { + var lane = state[x + 5 * y]; + tMsw ^= lane.high; + tLsw ^= lane.low; + } + + // Temporary values + var Tx = T[x]; + Tx.high = tMsw; + Tx.low = tLsw; + } + for (var x = 0; x < 5; x++) { + // Shortcuts + var Tx4 = T[(x + 4) % 5]; + var Tx1 = T[(x + 1) % 5]; + var Tx1Msw = Tx1.high; + var Tx1Lsw = Tx1.low; + + // Mix surrounding columns + var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); + var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); + for (var y = 0; y < 5; y++) { + var lane = state[x + 5 * y]; + lane.high ^= tMsw; + lane.low ^= tLsw; + } + } + + // Rho Pi + for (var laneIndex = 1; laneIndex < 25; laneIndex++) { + // Shortcuts + var lane = state[laneIndex]; + var laneMsw = lane.high; + var laneLsw = lane.low; + var rhoOffset = RHO_OFFSETS[laneIndex]; + + // Rotate lanes + if (rhoOffset < 32) { + var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); + var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); + } else /* if (rhoOffset >= 32) */ { + var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); + var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); + } + + // Transpose lanes + var TPiLane = T[PI_INDEXES[laneIndex]]; + TPiLane.high = tMsw; + TPiLane.low = tLsw; + } + + // Rho pi at x = y = 0 + var T0 = T[0]; + var state0 = state[0]; + T0.high = state0.high; + T0.low = state0.low; + + // Chi + for (var x = 0; x < 5; x++) { + for (var y = 0; y < 5; y++) { + // Shortcuts + var laneIndex = x + 5 * y; + var lane = state[laneIndex]; + var TLane = T[laneIndex]; + var Tx1Lane = T[((x + 1) % 5) + 5 * y]; + var Tx2Lane = T[((x + 2) % 5) + 5 * y]; + + // Mix rows + lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); + lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); + } + } + + // Iota + var lane = state[0]; + var roundConstant = ROUND_CONSTANTS[round]; + lane.high ^= roundConstant.high; + lane.low ^= roundConstant.low;; + } + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + var blockSizeBits = this.blockSize * 32; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); + dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Shortcuts + var state = this._state; + var outputLengthBytes = this.cfg.outputLength / 8; + var outputLengthLanes = outputLengthBytes / 8; + + // Squeeze + var hashWords = []; + for (var i = 0; i < outputLengthLanes; i++) { + // Shortcuts + var lane = state[i]; + var laneMsw = lane.high; + var laneLsw = lane.low; + + // Swap endian + laneMsw = ( + (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | + (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) + ); + laneLsw = ( + (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | + (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) + ); + + // Squeeze state to retrieve hash + hashWords.push(laneLsw); + hashWords.push(laneMsw); + } + + // Return final computed hash + return new WordArray.init(hashWords, outputLengthBytes); + }, + + clone: function () { + var clone = Hasher.clone.call(this); + + var state = clone._state = this._state.slice(0); + for (var i = 0; i < 25; i++) { + state[i] = state[i].clone(); + } + + return clone; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA3('message'); + * var hash = CryptoJS.SHA3(wordArray); + */ + C.SHA3 = Hasher._createHelper(SHA3); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA3(message, key); + */ + C.HmacSHA3 = Hasher._createHmacHelper(SHA3); + }(Math)); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Hasher = C_lib.Hasher; + var C_x64 = C.x64; + var X64Word = C_x64.Word; + var X64WordArray = C_x64.WordArray; + var C_algo = C.algo; + + function X64Word_create() { + return X64Word.create.apply(X64Word, arguments); + } + + // Constants + var K = [ + X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), + X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), + X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), + X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), + X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), + X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), + X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), + X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), + X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), + X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), + X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), + X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), + X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), + X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), + X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), + X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), + X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), + X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), + X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), + X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), + X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), + X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), + X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), + X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), + X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), + X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), + X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), + X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), + X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), + X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), + X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), + X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), + X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), + X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), + X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), + X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), + X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), + X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), + X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), + X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) + ]; + + // Reusable objects + var W = []; + (function () { + for (var i = 0; i < 80; i++) { + W[i] = X64Word_create(); + } + }()); + + /** + * SHA-512 hash algorithm. + */ + var SHA512 = C_algo.SHA512 = Hasher.extend({ + _doReset: function () { + this._hash = new X64WordArray.init([ + new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), + new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), + new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), + new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) + ]); + }, + + _doProcessBlock: function (M, offset) { + // Shortcuts + var H = this._hash.words; + + var H0 = H[0]; + var H1 = H[1]; + var H2 = H[2]; + var H3 = H[3]; + var H4 = H[4]; + var H5 = H[5]; + var H6 = H[6]; + var H7 = H[7]; + + var H0h = H0.high; + var H0l = H0.low; + var H1h = H1.high; + var H1l = H1.low; + var H2h = H2.high; + var H2l = H2.low; + var H3h = H3.high; + var H3l = H3.low; + var H4h = H4.high; + var H4l = H4.low; + var H5h = H5.high; + var H5l = H5.low; + var H6h = H6.high; + var H6l = H6.low; + var H7h = H7.high; + var H7l = H7.low; + + // Working variables + var ah = H0h; + var al = H0l; + var bh = H1h; + var bl = H1l; + var ch = H2h; + var cl = H2l; + var dh = H3h; + var dl = H3l; + var eh = H4h; + var el = H4l; + var fh = H5h; + var fl = H5l; + var gh = H6h; + var gl = H6l; + var hh = H7h; + var hl = H7l; + + // Rounds + for (var i = 0; i < 80; i++) { + // Shortcut + var Wi = W[i]; + + // Extend message + if (i < 16) { + var Wih = Wi.high = M[offset + i * 2] | 0; + var Wil = Wi.low = M[offset + i * 2 + 1] | 0; + } else { + // Gamma0 + var gamma0x = W[i - 15]; + var gamma0xh = gamma0x.high; + var gamma0xl = gamma0x.low; + var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); + var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); + + // Gamma1 + var gamma1x = W[i - 2]; + var gamma1xh = gamma1x.high; + var gamma1xl = gamma1x.low; + var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); + var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); + + // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] + var Wi7 = W[i - 7]; + var Wi7h = Wi7.high; + var Wi7l = Wi7.low; + + var Wi16 = W[i - 16]; + var Wi16h = Wi16.high; + var Wi16l = Wi16.low; + + var Wil = gamma0l + Wi7l; + var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); + var Wil = Wil + gamma1l; + var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); + var Wil = Wil + Wi16l; + var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); + + Wi.high = Wih; + Wi.low = Wil; + } + + var chh = (eh & fh) ^ (~eh & gh); + var chl = (el & fl) ^ (~el & gl); + var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); + var majl = (al & bl) ^ (al & cl) ^ (bl & cl); + + var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); + var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); + var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); + var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); + + // t1 = h + sigma1 + ch + K[i] + W[i] + var Ki = K[i]; + var Kih = Ki.high; + var Kil = Ki.low; + + var t1l = hl + sigma1l; + var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); + var t1l = t1l + chl; + var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); + var t1l = t1l + Kil; + var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); + var t1l = t1l + Wil; + var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); + + // t2 = sigma0 + maj + var t2l = sigma0l + majl; + var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); + + // Update working variables + hh = gh; + hl = gl; + gh = fh; + gl = fl; + fh = eh; + fl = el; + el = (dl + t1l) | 0; + eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; + dh = ch; + dl = cl; + ch = bh; + cl = bl; + bh = ah; + bl = al; + al = (t1l + t2l) | 0; + ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; + } + + // Intermediate hash value + H0l = H0.low = (H0l + al); + H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); + H1l = H1.low = (H1l + bl); + H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); + H2l = H2.low = (H2l + cl); + H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); + H3l = H3.low = (H3l + dl); + H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); + H4l = H4.low = (H4l + el); + H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); + H5l = H5.low = (H5l + fl); + H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); + H6l = H6.low = (H6l + gl); + H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); + H7l = H7.low = (H7l + hl); + H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Convert hash to 32-bit word array before returning + var hash = this._hash.toX32(); + + // Return final computed hash + return hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + }, + + blockSize: 1024/32 + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA512('message'); + * var hash = CryptoJS.SHA512(wordArray); + */ + C.SHA512 = Hasher._createHelper(SHA512); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA512(message, key); + */ + C.HmacSHA512 = Hasher._createHmacHelper(SHA512); + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_x64 = C.x64; + var X64Word = C_x64.Word; + var X64WordArray = C_x64.WordArray; + var C_algo = C.algo; + var SHA512 = C_algo.SHA512; + + /** + * SHA-384 hash algorithm. + */ + var SHA384 = C_algo.SHA384 = SHA512.extend({ + _doReset: function () { + this._hash = new X64WordArray.init([ + new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), + new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), + new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), + new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) + ]); + }, + + _doFinalize: function () { + var hash = SHA512._doFinalize.call(this); + + hash.sigBytes -= 16; + + return hash; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA384('message'); + * var hash = CryptoJS.SHA384(wordArray); + */ + C.SHA384 = SHA512._createHelper(SHA384); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA384(message, key); + */ + C.HmacSHA384 = SHA512._createHmacHelper(SHA384); + }()); + + + /** + * Cipher core components. + */ + CryptoJS.lib.Cipher || (function (undefined) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; + var C_enc = C.enc; + var Utf8 = C_enc.Utf8; + var Base64 = C_enc.Base64; + var C_algo = C.algo; + var EvpKDF = C_algo.EvpKDF; + + /** + * Abstract base cipher template. + * + * @property {number} keySize This cipher's key size. Default: 4 (128 bits) + * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) + * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. + * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. + */ + var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + * + * @property {WordArray} iv The IV to use for this operation. + */ + cfg: Base.extend(), + + /** + * Creates this cipher in encryption mode. + * + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {Cipher} A cipher instance. + * + * @static + * + * @example + * + * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); + */ + createEncryptor: function (key, cfg) { + return this.create(this._ENC_XFORM_MODE, key, cfg); + }, + + /** + * Creates this cipher in decryption mode. + * + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {Cipher} A cipher instance. + * + * @static + * + * @example + * + * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); + */ + createDecryptor: function (key, cfg) { + return this.create(this._DEC_XFORM_MODE, key, cfg); + }, + + /** + * Initializes a newly created cipher. + * + * @param {number} xformMode Either the encryption or decryption transormation mode constant. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @example + * + * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); + */ + init: function (xformMode, key, cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Store transform mode and key + this._xformMode = xformMode; + this._key = key; + + // Set initial values + this.reset(); + }, + + /** + * Resets this cipher to its initial state. + * + * @example + * + * cipher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-cipher logic + this._doReset(); + }, + + /** + * Adds data to be encrypted or decrypted. + * + * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. + * + * @return {WordArray} The data after processing. + * + * @example + * + * var encrypted = cipher.process('data'); + * var encrypted = cipher.process(wordArray); + */ + process: function (dataUpdate) { + // Append + this._append(dataUpdate); + + // Process available blocks + return this._process(); + }, + + /** + * Finalizes the encryption or decryption process. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. + * + * @return {WordArray} The data after final processing. + * + * @example + * + * var encrypted = cipher.finalize(); + * var encrypted = cipher.finalize('data'); + * var encrypted = cipher.finalize(wordArray); + */ + finalize: function (dataUpdate) { + // Final data update + if (dataUpdate) { + this._append(dataUpdate); + } + + // Perform concrete-cipher logic + var finalProcessedData = this._doFinalize(); + + return finalProcessedData; + }, + + keySize: 128/32, + + ivSize: 128/32, + + _ENC_XFORM_MODE: 1, + + _DEC_XFORM_MODE: 2, + + /** + * Creates shortcut functions to a cipher's object interface. + * + * @param {Cipher} cipher The cipher to create a helper for. + * + * @return {Object} An object with encrypt and decrypt shortcut functions. + * + * @static + * + * @example + * + * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); + */ + _createHelper: (function () { + function selectCipherStrategy(key) { + if (typeof key == 'string') { + return PasswordBasedCipher; + } else { + return SerializableCipher; + } + } + + return function (cipher) { + return { + encrypt: function (message, key, cfg) { + return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); + }, + + decrypt: function (ciphertext, key, cfg) { + return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); + } + }; + }; + }()) + }); + + /** + * Abstract base stream cipher template. + * + * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) + */ + var StreamCipher = C_lib.StreamCipher = Cipher.extend({ + _doFinalize: function () { + // Process partial blocks + var finalProcessedBlocks = this._process(!!'flush'); + + return finalProcessedBlocks; + }, + + blockSize: 1 + }); + + /** + * Mode namespace. + */ + var C_mode = C.mode = {}; + + /** + * Abstract base block cipher mode template. + */ + var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ + /** + * Creates this mode for encryption. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @static + * + * @example + * + * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); + */ + createEncryptor: function (cipher, iv) { + return this.Encryptor.create(cipher, iv); + }, + + /** + * Creates this mode for decryption. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @static + * + * @example + * + * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); + */ + createDecryptor: function (cipher, iv) { + return this.Decryptor.create(cipher, iv); + }, + + /** + * Initializes a newly created mode. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @example + * + * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); + */ + init: function (cipher, iv) { + this._cipher = cipher; + this._iv = iv; + } + }); + + /** + * Cipher Block Chaining mode. + */ + var CBC = C_mode.CBC = (function () { + /** + * Abstract base CBC mode. + */ + var CBC = BlockCipherMode.extend(); + + /** + * CBC encryptor. + */ + CBC.Encryptor = CBC.extend({ + /** + * Processes the data block at offset. + * + * @param {Array} words The data words to operate on. + * @param {number} offset The offset where the block starts. + * + * @example + * + * mode.processBlock(data.words, offset); + */ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // XOR and encrypt + xorBlock.call(this, words, offset, blockSize); + cipher.encryptBlock(words, offset); + + // Remember this block to use with next block + this._prevBlock = words.slice(offset, offset + blockSize); + } + }); + + /** + * CBC decryptor. + */ + CBC.Decryptor = CBC.extend({ + /** + * Processes the data block at offset. + * + * @param {Array} words The data words to operate on. + * @param {number} offset The offset where the block starts. + * + * @example + * + * mode.processBlock(data.words, offset); + */ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // Remember this block to use with next block + var thisBlock = words.slice(offset, offset + blockSize); + + // Decrypt and XOR + cipher.decryptBlock(words, offset); + xorBlock.call(this, words, offset, blockSize); + + // This block becomes the previous block + this._prevBlock = thisBlock; + } + }); + + function xorBlock(words, offset, blockSize) { + // Shortcut + var iv = this._iv; + + // Choose mixing block + if (iv) { + var block = iv; + + // Remove IV for subsequent blocks + this._iv = undefined; + } else { + var block = this._prevBlock; + } + + // XOR blocks + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= block[i]; + } + } + + return CBC; + }()); + + /** + * Padding namespace. + */ + var C_pad = C.pad = {}; + + /** + * PKCS #5/7 padding strategy. + */ + var Pkcs7 = C_pad.Pkcs7 = { + /** + * Pads data using the algorithm defined in PKCS #5/7. + * + * @param {WordArray} data The data to pad. + * @param {number} blockSize The multiple that the data should be padded to. + * + * @static + * + * @example + * + * CryptoJS.pad.Pkcs7.pad(wordArray, 4); + */ + pad: function (data, blockSize) { + // Shortcut + var blockSizeBytes = blockSize * 4; + + // Count padding bytes + var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; + + // Create padding word + var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; + + // Create padding + var paddingWords = []; + for (var i = 0; i < nPaddingBytes; i += 4) { + paddingWords.push(paddingWord); + } + var padding = WordArray.create(paddingWords, nPaddingBytes); + + // Add padding + data.concat(padding); + }, + + /** + * Unpads data that had been padded using the algorithm defined in PKCS #5/7. + * + * @param {WordArray} data The data to unpad. + * + * @static + * + * @example + * + * CryptoJS.pad.Pkcs7.unpad(wordArray); + */ + unpad: function (data) { + // Get number of padding bytes from last byte + var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; + + // Remove padding + data.sigBytes -= nPaddingBytes; + } + }; + + /** + * Abstract base block cipher template. + * + * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) + */ + var BlockCipher = C_lib.BlockCipher = Cipher.extend({ + /** + * Configuration options. + * + * @property {Mode} mode The block mode to use. Default: CBC + * @property {Padding} padding The padding strategy to use. Default: Pkcs7 + */ + cfg: Cipher.cfg.extend({ + mode: CBC, + padding: Pkcs7 + }), + + reset: function () { + // Reset cipher + Cipher.reset.call(this); + + // Shortcuts + var cfg = this.cfg; + var iv = cfg.iv; + var mode = cfg.mode; + + // Reset block mode + if (this._xformMode == this._ENC_XFORM_MODE) { + var modeCreator = mode.createEncryptor; + } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { + var modeCreator = mode.createDecryptor; + // Keep at least one block in the buffer for unpadding + this._minBufferSize = 1; + } + + if (this._mode && this._mode.__creator == modeCreator) { + this._mode.init(this, iv && iv.words); + } else { + this._mode = modeCreator.call(mode, this, iv && iv.words); + this._mode.__creator = modeCreator; + } + }, + + _doProcessBlock: function (words, offset) { + this._mode.processBlock(words, offset); + }, + + _doFinalize: function () { + // Shortcut + var padding = this.cfg.padding; + + // Finalize + if (this._xformMode == this._ENC_XFORM_MODE) { + // Pad data + padding.pad(this._data, this.blockSize); + + // Process final blocks + var finalProcessedBlocks = this._process(!!'flush'); + } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { + // Process final blocks + var finalProcessedBlocks = this._process(!!'flush'); + + // Unpad data + padding.unpad(finalProcessedBlocks); + } + + return finalProcessedBlocks; + }, + + blockSize: 128/32 + }); + + /** + * A collection of cipher parameters. + * + * @property {WordArray} ciphertext The raw ciphertext. + * @property {WordArray} key The key to this ciphertext. + * @property {WordArray} iv The IV used in the ciphering operation. + * @property {WordArray} salt The salt used with a key derivation function. + * @property {Cipher} algorithm The cipher algorithm. + * @property {Mode} mode The block mode used in the ciphering operation. + * @property {Padding} padding The padding scheme used in the ciphering operation. + * @property {number} blockSize The block size of the cipher. + * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. + */ + var CipherParams = C_lib.CipherParams = Base.extend({ + /** + * Initializes a newly created cipher params object. + * + * @param {Object} cipherParams An object with any of the possible cipher parameters. + * + * @example + * + * var cipherParams = CryptoJS.lib.CipherParams.create({ + * ciphertext: ciphertextWordArray, + * key: keyWordArray, + * iv: ivWordArray, + * salt: saltWordArray, + * algorithm: CryptoJS.algo.AES, + * mode: CryptoJS.mode.CBC, + * padding: CryptoJS.pad.PKCS7, + * blockSize: 4, + * formatter: CryptoJS.format.OpenSSL + * }); + */ + init: function (cipherParams) { + this.mixIn(cipherParams); + }, + + /** + * Converts this cipher params object to a string. + * + * @param {Format} formatter (Optional) The formatting strategy to use. + * + * @return {string} The stringified cipher params. + * + * @throws Error If neither the formatter nor the default formatter is set. + * + * @example + * + * var string = cipherParams + ''; + * var string = cipherParams.toString(); + * var string = cipherParams.toString(CryptoJS.format.OpenSSL); + */ + toString: function (formatter) { + return (formatter || this.formatter).stringify(this); + } + }); + + /** + * Format namespace. + */ + var C_format = C.format = {}; + + /** + * OpenSSL formatting strategy. + */ + var OpenSSLFormatter = C_format.OpenSSL = { + /** + * Converts a cipher params object to an OpenSSL-compatible string. + * + * @param {CipherParams} cipherParams The cipher params object. + * + * @return {string} The OpenSSL-compatible string. + * + * @static + * + * @example + * + * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); + */ + stringify: function (cipherParams) { + // Shortcuts + var ciphertext = cipherParams.ciphertext; + var salt = cipherParams.salt; + + // Format + if (salt) { + var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); + } else { + var wordArray = ciphertext; + } + + return wordArray.toString(Base64); + }, + + /** + * Converts an OpenSSL-compatible string to a cipher params object. + * + * @param {string} openSSLStr The OpenSSL-compatible string. + * + * @return {CipherParams} The cipher params object. + * + * @static + * + * @example + * + * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); + */ + parse: function (openSSLStr) { + // Parse base64 + var ciphertext = Base64.parse(openSSLStr); + + // Shortcut + var ciphertextWords = ciphertext.words; + + // Test for salt + if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { + // Extract salt + var salt = WordArray.create(ciphertextWords.slice(2, 4)); + + // Remove salt from ciphertext + ciphertextWords.splice(0, 4); + ciphertext.sigBytes -= 16; + } + + return CipherParams.create({ ciphertext: ciphertext, salt: salt }); + } + }; + + /** + * A cipher wrapper that returns ciphertext as a serializable cipher params object. + */ + var SerializableCipher = C_lib.SerializableCipher = Base.extend({ + /** + * Configuration options. + * + * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL + */ + cfg: Base.extend({ + format: OpenSSLFormatter + }), + + /** + * Encrypts a message. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {WordArray|string} message The message to encrypt. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {CipherParams} A cipher params object. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + */ + encrypt: function (cipher, message, key, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Encrypt + var encryptor = cipher.createEncryptor(key, cfg); + var ciphertext = encryptor.finalize(message); + + // Shortcut + var cipherCfg = encryptor.cfg; + + // Create and return serializable cipher params + return CipherParams.create({ + ciphertext: ciphertext, + key: key, + iv: cipherCfg.iv, + algorithm: cipher, + mode: cipherCfg.mode, + padding: cipherCfg.padding, + blockSize: cipher.blockSize, + formatter: cfg.format + }); + }, + + /** + * Decrypts serialized ciphertext. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {CipherParams|string} ciphertext The ciphertext to decrypt. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {WordArray} The plaintext. + * + * @static + * + * @example + * + * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + */ + decrypt: function (cipher, ciphertext, key, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Convert string to CipherParams + ciphertext = this._parse(ciphertext, cfg.format); + + // Decrypt + var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); + + return plaintext; + }, + + /** + * Converts serialized ciphertext to CipherParams, + * else assumed CipherParams already and returns ciphertext unchanged. + * + * @param {CipherParams|string} ciphertext The ciphertext. + * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. + * + * @return {CipherParams} The unserialized ciphertext. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); + */ + _parse: function (ciphertext, format) { + if (typeof ciphertext == 'string') { + return format.parse(ciphertext, this); + } else { + return ciphertext; + } + } + }); + + /** + * Key derivation function namespace. + */ + var C_kdf = C.kdf = {}; + + /** + * OpenSSL key derivation function. + */ + var OpenSSLKdf = C_kdf.OpenSSL = { + /** + * Derives a key and IV from a password. + * + * @param {string} password The password to derive from. + * @param {number} keySize The size in words of the key to generate. + * @param {number} ivSize The size in words of the IV to generate. + * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. + * + * @return {CipherParams} A cipher params object with the key, IV, and salt. + * + * @static + * + * @example + * + * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); + * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); + */ + execute: function (password, keySize, ivSize, salt) { + // Generate random salt + if (!salt) { + salt = WordArray.random(64/8); + } + + // Derive key and IV + var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); + + // Separate key and IV + var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); + key.sigBytes = keySize * 4; + + // Return params + return CipherParams.create({ key: key, iv: iv, salt: salt }); + } + }; + + /** + * A serializable cipher wrapper that derives the key from a password, + * and returns ciphertext as a serializable cipher params object. + */ + var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ + /** + * Configuration options. + * + * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL + */ + cfg: SerializableCipher.cfg.extend({ + kdf: OpenSSLKdf + }), + + /** + * Encrypts a message using a password. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {WordArray|string} message The message to encrypt. + * @param {string} password The password. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {CipherParams} A cipher params object. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); + * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); + */ + encrypt: function (cipher, message, password, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Derive key and other params + var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); + + // Add IV to config + cfg.iv = derivedParams.iv; + + // Encrypt + var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); + + // Mix in derived params + ciphertext.mixIn(derivedParams); + + return ciphertext; + }, + + /** + * Decrypts serialized ciphertext using a password. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {CipherParams|string} ciphertext The ciphertext to decrypt. + * @param {string} password The password. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {WordArray} The plaintext. + * + * @static + * + * @example + * + * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); + * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); + */ + decrypt: function (cipher, ciphertext, password, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Convert string to CipherParams + ciphertext = this._parse(ciphertext, cfg.format); + + // Derive key and other params + var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); + + // Add IV to config + cfg.iv = derivedParams.iv; + + // Decrypt + var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); + + return plaintext; + } + }); + }()); + + + /** + * Cipher Feedback block mode. + */ + CryptoJS.mode.CFB = (function () { + var CFB = CryptoJS.lib.BlockCipherMode.extend(); + + CFB.Encryptor = CFB.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); + + // Remember this block to use with next block + this._prevBlock = words.slice(offset, offset + blockSize); + } + }); + + CFB.Decryptor = CFB.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // Remember this block to use with next block + var thisBlock = words.slice(offset, offset + blockSize); + + generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); + + // This block becomes the previous block + this._prevBlock = thisBlock; + } + }); + + function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { + // Shortcut + var iv = this._iv; + + // Generate keystream + if (iv) { + var keystream = iv.slice(0); + + // Remove IV for subsequent blocks + this._iv = undefined; + } else { + var keystream = this._prevBlock; + } + cipher.encryptBlock(keystream, 0); + + // Encrypt + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= keystream[i]; + } + } + + return CFB; + }()); + + + /** + * Electronic Codebook block mode. + */ + CryptoJS.mode.ECB = (function () { + var ECB = CryptoJS.lib.BlockCipherMode.extend(); + + ECB.Encryptor = ECB.extend({ + processBlock: function (words, offset) { + this._cipher.encryptBlock(words, offset); + } + }); + + ECB.Decryptor = ECB.extend({ + processBlock: function (words, offset) { + this._cipher.decryptBlock(words, offset); + } + }); + + return ECB; + }()); + + + /** + * ANSI X.923 padding strategy. + */ + CryptoJS.pad.AnsiX923 = { + pad: function (data, blockSize) { + // Shortcuts + var dataSigBytes = data.sigBytes; + var blockSizeBytes = blockSize * 4; + + // Count padding bytes + var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; + + // Compute last byte position + var lastBytePos = dataSigBytes + nPaddingBytes - 1; + + // Pad + data.clamp(); + data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); + data.sigBytes += nPaddingBytes; + }, + + unpad: function (data) { + // Get number of padding bytes from last byte + var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; + + // Remove padding + data.sigBytes -= nPaddingBytes; + } + }; + + + /** + * ISO 10126 padding strategy. + */ + CryptoJS.pad.Iso10126 = { + pad: function (data, blockSize) { + // Shortcut + var blockSizeBytes = blockSize * 4; + + // Count padding bytes + var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; + + // Pad + data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). + concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); + }, + + unpad: function (data) { + // Get number of padding bytes from last byte + var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; + + // Remove padding + data.sigBytes -= nPaddingBytes; + } + }; + + + /** + * ISO/IEC 9797-1 Padding Method 2. + */ + CryptoJS.pad.Iso97971 = { + pad: function (data, blockSize) { + // Add 0x80 byte + data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); + + // Zero pad the rest + CryptoJS.pad.ZeroPadding.pad(data, blockSize); + }, + + unpad: function (data) { + // Remove zero padding + CryptoJS.pad.ZeroPadding.unpad(data); + + // Remove one more byte -- the 0x80 byte + data.sigBytes--; + } + }; + + + /** + * Output Feedback block mode. + */ + CryptoJS.mode.OFB = (function () { + var OFB = CryptoJS.lib.BlockCipherMode.extend(); + + var Encryptor = OFB.Encryptor = OFB.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher + var blockSize = cipher.blockSize; + var iv = this._iv; + var keystream = this._keystream; + + // Generate keystream + if (iv) { + keystream = this._keystream = iv.slice(0); + + // Remove IV for subsequent blocks + this._iv = undefined; + } + cipher.encryptBlock(keystream, 0); + + // Encrypt + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= keystream[i]; + } + } + }); + + OFB.Decryptor = Encryptor; + + return OFB; + }()); + + + /** + * A noop padding strategy. + */ + CryptoJS.pad.NoPadding = { + pad: function () { + }, + + unpad: function () { + } + }; + + + (function (undefined) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var CipherParams = C_lib.CipherParams; + var C_enc = C.enc; + var Hex = C_enc.Hex; + var C_format = C.format; + + var HexFormatter = C_format.Hex = { + /** + * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. + * + * @param {CipherParams} cipherParams The cipher params object. + * + * @return {string} The hexadecimally encoded string. + * + * @static + * + * @example + * + * var hexString = CryptoJS.format.Hex.stringify(cipherParams); + */ + stringify: function (cipherParams) { + return cipherParams.ciphertext.toString(Hex); + }, + + /** + * Converts a hexadecimally encoded ciphertext string to a cipher params object. + * + * @param {string} input The hexadecimally encoded string. + * + * @return {CipherParams} The cipher params object. + * + * @static + * + * @example + * + * var cipherParams = CryptoJS.format.Hex.parse(hexString); + */ + parse: function (input) { + var ciphertext = Hex.parse(input); + return CipherParams.create({ ciphertext: ciphertext }); + } + }; + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var BlockCipher = C_lib.BlockCipher; + var C_algo = C.algo; + + // Lookup tables + var SBOX = []; + var INV_SBOX = []; + var SUB_MIX_0 = []; + var SUB_MIX_1 = []; + var SUB_MIX_2 = []; + var SUB_MIX_3 = []; + var INV_SUB_MIX_0 = []; + var INV_SUB_MIX_1 = []; + var INV_SUB_MIX_2 = []; + var INV_SUB_MIX_3 = []; + + // Compute lookup tables + (function () { + // Compute double table + var d = []; + for (var i = 0; i < 256; i++) { + if (i < 128) { + d[i] = i << 1; + } else { + d[i] = (i << 1) ^ 0x11b; + } + } + + // Walk GF(2^8) + var x = 0; + var xi = 0; + for (var i = 0; i < 256; i++) { + // Compute sbox + var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); + sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; + SBOX[x] = sx; + INV_SBOX[sx] = x; + + // Compute multiplication + var x2 = d[x]; + var x4 = d[x2]; + var x8 = d[x4]; + + // Compute sub bytes, mix columns tables + var t = (d[sx] * 0x101) ^ (sx * 0x1010100); + SUB_MIX_0[x] = (t << 24) | (t >>> 8); + SUB_MIX_1[x] = (t << 16) | (t >>> 16); + SUB_MIX_2[x] = (t << 8) | (t >>> 24); + SUB_MIX_3[x] = t; + + // Compute inv sub bytes, inv mix columns tables + var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); + INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); + INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); + INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); + INV_SUB_MIX_3[sx] = t; + + // Compute next counter + if (!x) { + x = xi = 1; + } else { + x = x2 ^ d[d[d[x8 ^ x2]]]; + xi ^= d[d[xi]]; + } + } + }()); + + // Precomputed Rcon lookup + var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; + + /** + * AES block cipher algorithm. + */ + var AES = C_algo.AES = BlockCipher.extend({ + _doReset: function () { + // Skip reset of nRounds has been set before and key did not change + if (this._nRounds && this._keyPriorReset === this._key) { + return; + } + + // Shortcuts + var key = this._keyPriorReset = this._key; + var keyWords = key.words; + var keySize = key.sigBytes / 4; + + // Compute number of rounds + var nRounds = this._nRounds = keySize + 6; + + // Compute number of key schedule rows + var ksRows = (nRounds + 1) * 4; + + // Compute key schedule + var keySchedule = this._keySchedule = []; + for (var ksRow = 0; ksRow < ksRows; ksRow++) { + if (ksRow < keySize) { + keySchedule[ksRow] = keyWords[ksRow]; + } else { + var t = keySchedule[ksRow - 1]; + + if (!(ksRow % keySize)) { + // Rot word + t = (t << 8) | (t >>> 24); + + // Sub word + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + + // Mix Rcon + t ^= RCON[(ksRow / keySize) | 0] << 24; + } else if (keySize > 6 && ksRow % keySize == 4) { + // Sub word + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + } + + keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; + } + } + + // Compute inv key schedule + var invKeySchedule = this._invKeySchedule = []; + for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { + var ksRow = ksRows - invKsRow; + + if (invKsRow % 4) { + var t = keySchedule[ksRow]; + } else { + var t = keySchedule[ksRow - 4]; + } + + if (invKsRow < 4 || ksRow <= 4) { + invKeySchedule[invKsRow] = t; + } else { + invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ + INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; + } + } + }, + + encryptBlock: function (M, offset) { + this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); + }, + + decryptBlock: function (M, offset) { + // Swap 2nd and 4th rows + var t = M[offset + 1]; + M[offset + 1] = M[offset + 3]; + M[offset + 3] = t; + + this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); + + // Inv swap 2nd and 4th rows + var t = M[offset + 1]; + M[offset + 1] = M[offset + 3]; + M[offset + 3] = t; + }, + + _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { + // Shortcut + var nRounds = this._nRounds; + + // Get input, add round key + var s0 = M[offset] ^ keySchedule[0]; + var s1 = M[offset + 1] ^ keySchedule[1]; + var s2 = M[offset + 2] ^ keySchedule[2]; + var s3 = M[offset + 3] ^ keySchedule[3]; + + // Key schedule row counter + var ksRow = 4; + + // Rounds + for (var round = 1; round < nRounds; round++) { + // Shift rows, sub bytes, mix columns, add round key + var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; + var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; + var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; + var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; + + // Update state + s0 = t0; + s1 = t1; + s2 = t2; + s3 = t3; + } + + // Shift rows, sub bytes, add round key + var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; + var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; + var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; + var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; + + // Set output + M[offset] = t0; + M[offset + 1] = t1; + M[offset + 2] = t2; + M[offset + 3] = t3; + }, + + keySize: 256/32 + }); + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); + * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); + */ + C.AES = BlockCipher._createHelper(AES); + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var BlockCipher = C_lib.BlockCipher; + var C_algo = C.algo; + + // Permuted Choice 1 constants + var PC1 = [ + 57, 49, 41, 33, 25, 17, 9, 1, + 58, 50, 42, 34, 26, 18, 10, 2, + 59, 51, 43, 35, 27, 19, 11, 3, + 60, 52, 44, 36, 63, 55, 47, 39, + 31, 23, 15, 7, 62, 54, 46, 38, + 30, 22, 14, 6, 61, 53, 45, 37, + 29, 21, 13, 5, 28, 20, 12, 4 + ]; + + // Permuted Choice 2 constants + var PC2 = [ + 14, 17, 11, 24, 1, 5, + 3, 28, 15, 6, 21, 10, + 23, 19, 12, 4, 26, 8, + 16, 7, 27, 20, 13, 2, + 41, 52, 31, 37, 47, 55, + 30, 40, 51, 45, 33, 48, + 44, 49, 39, 56, 34, 53, + 46, 42, 50, 36, 29, 32 + ]; + + // Cumulative bit shift constants + var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; + + // SBOXes and round permutation constants + var SBOX_P = [ + { + 0x0: 0x808200, + 0x10000000: 0x8000, + 0x20000000: 0x808002, + 0x30000000: 0x2, + 0x40000000: 0x200, + 0x50000000: 0x808202, + 0x60000000: 0x800202, + 0x70000000: 0x800000, + 0x80000000: 0x202, + 0x90000000: 0x800200, + 0xa0000000: 0x8200, + 0xb0000000: 0x808000, + 0xc0000000: 0x8002, + 0xd0000000: 0x800002, + 0xe0000000: 0x0, + 0xf0000000: 0x8202, + 0x8000000: 0x0, + 0x18000000: 0x808202, + 0x28000000: 0x8202, + 0x38000000: 0x8000, + 0x48000000: 0x808200, + 0x58000000: 0x200, + 0x68000000: 0x808002, + 0x78000000: 0x2, + 0x88000000: 0x800200, + 0x98000000: 0x8200, + 0xa8000000: 0x808000, + 0xb8000000: 0x800202, + 0xc8000000: 0x800002, + 0xd8000000: 0x8002, + 0xe8000000: 0x202, + 0xf8000000: 0x800000, + 0x1: 0x8000, + 0x10000001: 0x2, + 0x20000001: 0x808200, + 0x30000001: 0x800000, + 0x40000001: 0x808002, + 0x50000001: 0x8200, + 0x60000001: 0x200, + 0x70000001: 0x800202, + 0x80000001: 0x808202, + 0x90000001: 0x808000, + 0xa0000001: 0x800002, + 0xb0000001: 0x8202, + 0xc0000001: 0x202, + 0xd0000001: 0x800200, + 0xe0000001: 0x8002, + 0xf0000001: 0x0, + 0x8000001: 0x808202, + 0x18000001: 0x808000, + 0x28000001: 0x800000, + 0x38000001: 0x200, + 0x48000001: 0x8000, + 0x58000001: 0x800002, + 0x68000001: 0x2, + 0x78000001: 0x8202, + 0x88000001: 0x8002, + 0x98000001: 0x800202, + 0xa8000001: 0x202, + 0xb8000001: 0x808200, + 0xc8000001: 0x800200, + 0xd8000001: 0x0, + 0xe8000001: 0x8200, + 0xf8000001: 0x808002 + }, + { + 0x0: 0x40084010, + 0x1000000: 0x4000, + 0x2000000: 0x80000, + 0x3000000: 0x40080010, + 0x4000000: 0x40000010, + 0x5000000: 0x40084000, + 0x6000000: 0x40004000, + 0x7000000: 0x10, + 0x8000000: 0x84000, + 0x9000000: 0x40004010, + 0xa000000: 0x40000000, + 0xb000000: 0x84010, + 0xc000000: 0x80010, + 0xd000000: 0x0, + 0xe000000: 0x4010, + 0xf000000: 0x40080000, + 0x800000: 0x40004000, + 0x1800000: 0x84010, + 0x2800000: 0x10, + 0x3800000: 0x40004010, + 0x4800000: 0x40084010, + 0x5800000: 0x40000000, + 0x6800000: 0x80000, + 0x7800000: 0x40080010, + 0x8800000: 0x80010, + 0x9800000: 0x0, + 0xa800000: 0x4000, + 0xb800000: 0x40080000, + 0xc800000: 0x40000010, + 0xd800000: 0x84000, + 0xe800000: 0x40084000, + 0xf800000: 0x4010, + 0x10000000: 0x0, + 0x11000000: 0x40080010, + 0x12000000: 0x40004010, + 0x13000000: 0x40084000, + 0x14000000: 0x40080000, + 0x15000000: 0x10, + 0x16000000: 0x84010, + 0x17000000: 0x4000, + 0x18000000: 0x4010, + 0x19000000: 0x80000, + 0x1a000000: 0x80010, + 0x1b000000: 0x40000010, + 0x1c000000: 0x84000, + 0x1d000000: 0x40004000, + 0x1e000000: 0x40000000, + 0x1f000000: 0x40084010, + 0x10800000: 0x84010, + 0x11800000: 0x80000, + 0x12800000: 0x40080000, + 0x13800000: 0x4000, + 0x14800000: 0x40004000, + 0x15800000: 0x40084010, + 0x16800000: 0x10, + 0x17800000: 0x40000000, + 0x18800000: 0x40084000, + 0x19800000: 0x40000010, + 0x1a800000: 0x40004010, + 0x1b800000: 0x80010, + 0x1c800000: 0x0, + 0x1d800000: 0x4010, + 0x1e800000: 0x40080010, + 0x1f800000: 0x84000 + }, + { + 0x0: 0x104, + 0x100000: 0x0, + 0x200000: 0x4000100, + 0x300000: 0x10104, + 0x400000: 0x10004, + 0x500000: 0x4000004, + 0x600000: 0x4010104, + 0x700000: 0x4010000, + 0x800000: 0x4000000, + 0x900000: 0x4010100, + 0xa00000: 0x10100, + 0xb00000: 0x4010004, + 0xc00000: 0x4000104, + 0xd00000: 0x10000, + 0xe00000: 0x4, + 0xf00000: 0x100, + 0x80000: 0x4010100, + 0x180000: 0x4010004, + 0x280000: 0x0, + 0x380000: 0x4000100, + 0x480000: 0x4000004, + 0x580000: 0x10000, + 0x680000: 0x10004, + 0x780000: 0x104, + 0x880000: 0x4, + 0x980000: 0x100, + 0xa80000: 0x4010000, + 0xb80000: 0x10104, + 0xc80000: 0x10100, + 0xd80000: 0x4000104, + 0xe80000: 0x4010104, + 0xf80000: 0x4000000, + 0x1000000: 0x4010100, + 0x1100000: 0x10004, + 0x1200000: 0x10000, + 0x1300000: 0x4000100, + 0x1400000: 0x100, + 0x1500000: 0x4010104, + 0x1600000: 0x4000004, + 0x1700000: 0x0, + 0x1800000: 0x4000104, + 0x1900000: 0x4000000, + 0x1a00000: 0x4, + 0x1b00000: 0x10100, + 0x1c00000: 0x4010000, + 0x1d00000: 0x104, + 0x1e00000: 0x10104, + 0x1f00000: 0x4010004, + 0x1080000: 0x4000000, + 0x1180000: 0x104, + 0x1280000: 0x4010100, + 0x1380000: 0x0, + 0x1480000: 0x10004, + 0x1580000: 0x4000100, + 0x1680000: 0x100, + 0x1780000: 0x4010004, + 0x1880000: 0x10000, + 0x1980000: 0x4010104, + 0x1a80000: 0x10104, + 0x1b80000: 0x4000004, + 0x1c80000: 0x4000104, + 0x1d80000: 0x4010000, + 0x1e80000: 0x4, + 0x1f80000: 0x10100 + }, + { + 0x0: 0x80401000, + 0x10000: 0x80001040, + 0x20000: 0x401040, + 0x30000: 0x80400000, + 0x40000: 0x0, + 0x50000: 0x401000, + 0x60000: 0x80000040, + 0x70000: 0x400040, + 0x80000: 0x80000000, + 0x90000: 0x400000, + 0xa0000: 0x40, + 0xb0000: 0x80001000, + 0xc0000: 0x80400040, + 0xd0000: 0x1040, + 0xe0000: 0x1000, + 0xf0000: 0x80401040, + 0x8000: 0x80001040, + 0x18000: 0x40, + 0x28000: 0x80400040, + 0x38000: 0x80001000, + 0x48000: 0x401000, + 0x58000: 0x80401040, + 0x68000: 0x0, + 0x78000: 0x80400000, + 0x88000: 0x1000, + 0x98000: 0x80401000, + 0xa8000: 0x400000, + 0xb8000: 0x1040, + 0xc8000: 0x80000000, + 0xd8000: 0x400040, + 0xe8000: 0x401040, + 0xf8000: 0x80000040, + 0x100000: 0x400040, + 0x110000: 0x401000, + 0x120000: 0x80000040, + 0x130000: 0x0, + 0x140000: 0x1040, + 0x150000: 0x80400040, + 0x160000: 0x80401000, + 0x170000: 0x80001040, + 0x180000: 0x80401040, + 0x190000: 0x80000000, + 0x1a0000: 0x80400000, + 0x1b0000: 0x401040, + 0x1c0000: 0x80001000, + 0x1d0000: 0x400000, + 0x1e0000: 0x40, + 0x1f0000: 0x1000, + 0x108000: 0x80400000, + 0x118000: 0x80401040, + 0x128000: 0x0, + 0x138000: 0x401000, + 0x148000: 0x400040, + 0x158000: 0x80000000, + 0x168000: 0x80001040, + 0x178000: 0x40, + 0x188000: 0x80000040, + 0x198000: 0x1000, + 0x1a8000: 0x80001000, + 0x1b8000: 0x80400040, + 0x1c8000: 0x1040, + 0x1d8000: 0x80401000, + 0x1e8000: 0x400000, + 0x1f8000: 0x401040 + }, + { + 0x0: 0x80, + 0x1000: 0x1040000, + 0x2000: 0x40000, + 0x3000: 0x20000000, + 0x4000: 0x20040080, + 0x5000: 0x1000080, + 0x6000: 0x21000080, + 0x7000: 0x40080, + 0x8000: 0x1000000, + 0x9000: 0x20040000, + 0xa000: 0x20000080, + 0xb000: 0x21040080, + 0xc000: 0x21040000, + 0xd000: 0x0, + 0xe000: 0x1040080, + 0xf000: 0x21000000, + 0x800: 0x1040080, + 0x1800: 0x21000080, + 0x2800: 0x80, + 0x3800: 0x1040000, + 0x4800: 0x40000, + 0x5800: 0x20040080, + 0x6800: 0x21040000, + 0x7800: 0x20000000, + 0x8800: 0x20040000, + 0x9800: 0x0, + 0xa800: 0x21040080, + 0xb800: 0x1000080, + 0xc800: 0x20000080, + 0xd800: 0x21000000, + 0xe800: 0x1000000, + 0xf800: 0x40080, + 0x10000: 0x40000, + 0x11000: 0x80, + 0x12000: 0x20000000, + 0x13000: 0x21000080, + 0x14000: 0x1000080, + 0x15000: 0x21040000, + 0x16000: 0x20040080, + 0x17000: 0x1000000, + 0x18000: 0x21040080, + 0x19000: 0x21000000, + 0x1a000: 0x1040000, + 0x1b000: 0x20040000, + 0x1c000: 0x40080, + 0x1d000: 0x20000080, + 0x1e000: 0x0, + 0x1f000: 0x1040080, + 0x10800: 0x21000080, + 0x11800: 0x1000000, + 0x12800: 0x1040000, + 0x13800: 0x20040080, + 0x14800: 0x20000000, + 0x15800: 0x1040080, + 0x16800: 0x80, + 0x17800: 0x21040000, + 0x18800: 0x40080, + 0x19800: 0x21040080, + 0x1a800: 0x0, + 0x1b800: 0x21000000, + 0x1c800: 0x1000080, + 0x1d800: 0x40000, + 0x1e800: 0x20040000, + 0x1f800: 0x20000080 + }, + { + 0x0: 0x10000008, + 0x100: 0x2000, + 0x200: 0x10200000, + 0x300: 0x10202008, + 0x400: 0x10002000, + 0x500: 0x200000, + 0x600: 0x200008, + 0x700: 0x10000000, + 0x800: 0x0, + 0x900: 0x10002008, + 0xa00: 0x202000, + 0xb00: 0x8, + 0xc00: 0x10200008, + 0xd00: 0x202008, + 0xe00: 0x2008, + 0xf00: 0x10202000, + 0x80: 0x10200000, + 0x180: 0x10202008, + 0x280: 0x8, + 0x380: 0x200000, + 0x480: 0x202008, + 0x580: 0x10000008, + 0x680: 0x10002000, + 0x780: 0x2008, + 0x880: 0x200008, + 0x980: 0x2000, + 0xa80: 0x10002008, + 0xb80: 0x10200008, + 0xc80: 0x0, + 0xd80: 0x10202000, + 0xe80: 0x202000, + 0xf80: 0x10000000, + 0x1000: 0x10002000, + 0x1100: 0x10200008, + 0x1200: 0x10202008, + 0x1300: 0x2008, + 0x1400: 0x200000, + 0x1500: 0x10000000, + 0x1600: 0x10000008, + 0x1700: 0x202000, + 0x1800: 0x202008, + 0x1900: 0x0, + 0x1a00: 0x8, + 0x1b00: 0x10200000, + 0x1c00: 0x2000, + 0x1d00: 0x10002008, + 0x1e00: 0x10202000, + 0x1f00: 0x200008, + 0x1080: 0x8, + 0x1180: 0x202000, + 0x1280: 0x200000, + 0x1380: 0x10000008, + 0x1480: 0x10002000, + 0x1580: 0x2008, + 0x1680: 0x10202008, + 0x1780: 0x10200000, + 0x1880: 0x10202000, + 0x1980: 0x10200008, + 0x1a80: 0x2000, + 0x1b80: 0x202008, + 0x1c80: 0x200008, + 0x1d80: 0x0, + 0x1e80: 0x10000000, + 0x1f80: 0x10002008 + }, + { + 0x0: 0x100000, + 0x10: 0x2000401, + 0x20: 0x400, + 0x30: 0x100401, + 0x40: 0x2100401, + 0x50: 0x0, + 0x60: 0x1, + 0x70: 0x2100001, + 0x80: 0x2000400, + 0x90: 0x100001, + 0xa0: 0x2000001, + 0xb0: 0x2100400, + 0xc0: 0x2100000, + 0xd0: 0x401, + 0xe0: 0x100400, + 0xf0: 0x2000000, + 0x8: 0x2100001, + 0x18: 0x0, + 0x28: 0x2000401, + 0x38: 0x2100400, + 0x48: 0x100000, + 0x58: 0x2000001, + 0x68: 0x2000000, + 0x78: 0x401, + 0x88: 0x100401, + 0x98: 0x2000400, + 0xa8: 0x2100000, + 0xb8: 0x100001, + 0xc8: 0x400, + 0xd8: 0x2100401, + 0xe8: 0x1, + 0xf8: 0x100400, + 0x100: 0x2000000, + 0x110: 0x100000, + 0x120: 0x2000401, + 0x130: 0x2100001, + 0x140: 0x100001, + 0x150: 0x2000400, + 0x160: 0x2100400, + 0x170: 0x100401, + 0x180: 0x401, + 0x190: 0x2100401, + 0x1a0: 0x100400, + 0x1b0: 0x1, + 0x1c0: 0x0, + 0x1d0: 0x2100000, + 0x1e0: 0x2000001, + 0x1f0: 0x400, + 0x108: 0x100400, + 0x118: 0x2000401, + 0x128: 0x2100001, + 0x138: 0x1, + 0x148: 0x2000000, + 0x158: 0x100000, + 0x168: 0x401, + 0x178: 0x2100400, + 0x188: 0x2000001, + 0x198: 0x2100000, + 0x1a8: 0x0, + 0x1b8: 0x2100401, + 0x1c8: 0x100401, + 0x1d8: 0x400, + 0x1e8: 0x2000400, + 0x1f8: 0x100001 + }, + { + 0x0: 0x8000820, + 0x1: 0x20000, + 0x2: 0x8000000, + 0x3: 0x20, + 0x4: 0x20020, + 0x5: 0x8020820, + 0x6: 0x8020800, + 0x7: 0x800, + 0x8: 0x8020000, + 0x9: 0x8000800, + 0xa: 0x20800, + 0xb: 0x8020020, + 0xc: 0x820, + 0xd: 0x0, + 0xe: 0x8000020, + 0xf: 0x20820, + 0x80000000: 0x800, + 0x80000001: 0x8020820, + 0x80000002: 0x8000820, + 0x80000003: 0x8000000, + 0x80000004: 0x8020000, + 0x80000005: 0x20800, + 0x80000006: 0x20820, + 0x80000007: 0x20, + 0x80000008: 0x8000020, + 0x80000009: 0x820, + 0x8000000a: 0x20020, + 0x8000000b: 0x8020800, + 0x8000000c: 0x0, + 0x8000000d: 0x8020020, + 0x8000000e: 0x8000800, + 0x8000000f: 0x20000, + 0x10: 0x20820, + 0x11: 0x8020800, + 0x12: 0x20, + 0x13: 0x800, + 0x14: 0x8000800, + 0x15: 0x8000020, + 0x16: 0x8020020, + 0x17: 0x20000, + 0x18: 0x0, + 0x19: 0x20020, + 0x1a: 0x8020000, + 0x1b: 0x8000820, + 0x1c: 0x8020820, + 0x1d: 0x20800, + 0x1e: 0x820, + 0x1f: 0x8000000, + 0x80000010: 0x20000, + 0x80000011: 0x800, + 0x80000012: 0x8020020, + 0x80000013: 0x20820, + 0x80000014: 0x20, + 0x80000015: 0x8020000, + 0x80000016: 0x8000000, + 0x80000017: 0x8000820, + 0x80000018: 0x8020820, + 0x80000019: 0x8000020, + 0x8000001a: 0x8000800, + 0x8000001b: 0x0, + 0x8000001c: 0x20800, + 0x8000001d: 0x820, + 0x8000001e: 0x20020, + 0x8000001f: 0x8020800 + } + ]; + + // Masks that select the SBOX input + var SBOX_MASK = [ + 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, + 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f + ]; + + /** + * DES block cipher algorithm. + */ + var DES = C_algo.DES = BlockCipher.extend({ + _doReset: function () { + // Shortcuts + var key = this._key; + var keyWords = key.words; + + // Select 56 bits according to PC1 + var keyBits = []; + for (var i = 0; i < 56; i++) { + var keyBitPos = PC1[i] - 1; + keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; + } + + // Assemble 16 subkeys + var subKeys = this._subKeys = []; + for (var nSubKey = 0; nSubKey < 16; nSubKey++) { + // Create subkey + var subKey = subKeys[nSubKey] = []; + + // Shortcut + var bitShift = BIT_SHIFTS[nSubKey]; + + // Select 48 bits according to PC2 + for (var i = 0; i < 24; i++) { + // Select from the left 28 key bits + subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); + + // Select from the right 28 key bits + subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); + } + + // Since each subkey is applied to an expanded 32-bit input, + // the subkey can be broken into 8 values scaled to 32-bits, + // which allows the key to be used without expansion + subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); + for (var i = 1; i < 7; i++) { + subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); + } + subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); + } + + // Compute inverse subkeys + var invSubKeys = this._invSubKeys = []; + for (var i = 0; i < 16; i++) { + invSubKeys[i] = subKeys[15 - i]; + } + }, + + encryptBlock: function (M, offset) { + this._doCryptBlock(M, offset, this._subKeys); + }, + + decryptBlock: function (M, offset) { + this._doCryptBlock(M, offset, this._invSubKeys); + }, + + _doCryptBlock: function (M, offset, subKeys) { + // Get input + this._lBlock = M[offset]; + this._rBlock = M[offset + 1]; + + // Initial permutation + exchangeLR.call(this, 4, 0x0f0f0f0f); + exchangeLR.call(this, 16, 0x0000ffff); + exchangeRL.call(this, 2, 0x33333333); + exchangeRL.call(this, 8, 0x00ff00ff); + exchangeLR.call(this, 1, 0x55555555); + + // Rounds + for (var round = 0; round < 16; round++) { + // Shortcuts + var subKey = subKeys[round]; + var lBlock = this._lBlock; + var rBlock = this._rBlock; + + // Feistel function + var f = 0; + for (var i = 0; i < 8; i++) { + f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; + } + this._lBlock = rBlock; + this._rBlock = lBlock ^ f; + } + + // Undo swap from last round + var t = this._lBlock; + this._lBlock = this._rBlock; + this._rBlock = t; + + // Final permutation + exchangeLR.call(this, 1, 0x55555555); + exchangeRL.call(this, 8, 0x00ff00ff); + exchangeRL.call(this, 2, 0x33333333); + exchangeLR.call(this, 16, 0x0000ffff); + exchangeLR.call(this, 4, 0x0f0f0f0f); + + // Set output + M[offset] = this._lBlock; + M[offset + 1] = this._rBlock; + }, + + keySize: 64/32, + + ivSize: 64/32, + + blockSize: 64/32 + }); + + // Swap bits across the left and right words + function exchangeLR(offset, mask) { + var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; + this._rBlock ^= t; + this._lBlock ^= t << offset; + } + + function exchangeRL(offset, mask) { + var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; + this._lBlock ^= t; + this._rBlock ^= t << offset; + } + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); + * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); + */ + C.DES = BlockCipher._createHelper(DES); + + /** + * Triple-DES block cipher algorithm. + */ + var TripleDES = C_algo.TripleDES = BlockCipher.extend({ + _doReset: function () { + // Shortcuts + var key = this._key; + var keyWords = key.words; + + // Create DES instances + this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2))); + this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4))); + this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6))); + }, + + encryptBlock: function (M, offset) { + this._des1.encryptBlock(M, offset); + this._des2.decryptBlock(M, offset); + this._des3.encryptBlock(M, offset); + }, + + decryptBlock: function (M, offset) { + this._des3.decryptBlock(M, offset); + this._des2.encryptBlock(M, offset); + this._des1.decryptBlock(M, offset); + }, + + keySize: 192/32, + + ivSize: 64/32, + + blockSize: 64/32 + }); + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); + * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); + */ + C.TripleDES = BlockCipher._createHelper(TripleDES); + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var StreamCipher = C_lib.StreamCipher; + var C_algo = C.algo; + + /** + * RC4 stream cipher algorithm. + */ + var RC4 = C_algo.RC4 = StreamCipher.extend({ + _doReset: function () { + // Shortcuts + var key = this._key; + var keyWords = key.words; + var keySigBytes = key.sigBytes; + + // Init sbox + var S = this._S = []; + for (var i = 0; i < 256; i++) { + S[i] = i; + } + + // Key setup + for (var i = 0, j = 0; i < 256; i++) { + var keyByteIndex = i % keySigBytes; + var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; + + j = (j + S[i] + keyByte) % 256; + + // Swap + var t = S[i]; + S[i] = S[j]; + S[j] = t; + } + + // Counters + this._i = this._j = 0; + }, + + _doProcessBlock: function (M, offset) { + M[offset] ^= generateKeystreamWord.call(this); + }, + + keySize: 256/32, + + ivSize: 0 + }); + + function generateKeystreamWord() { + // Shortcuts + var S = this._S; + var i = this._i; + var j = this._j; + + // Generate keystream word + var keystreamWord = 0; + for (var n = 0; n < 4; n++) { + i = (i + 1) % 256; + j = (j + S[i]) % 256; + + // Swap + var t = S[i]; + S[i] = S[j]; + S[j] = t; + + keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); + } + + // Update counters + this._i = i; + this._j = j; + + return keystreamWord; + } + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); + * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); + */ + C.RC4 = StreamCipher._createHelper(RC4); + + /** + * Modified RC4 stream cipher algorithm. + */ + var RC4Drop = C_algo.RC4Drop = RC4.extend({ + /** + * Configuration options. + * + * @property {number} drop The number of keystream words to drop. Default 192 + */ + cfg: RC4.cfg.extend({ + drop: 192 + }), + + _doReset: function () { + RC4._doReset.call(this); + + // Drop + for (var i = this.cfg.drop; i > 0; i--) { + generateKeystreamWord.call(this); + } + } + }); + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); + * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); + */ + C.RC4Drop = StreamCipher._createHelper(RC4Drop); + }()); + + + /** @preserve + * Counter block mode compatible with Dr Brian Gladman fileenc.c + * derived from CryptoJS.mode.CTR + * Jan Hruby jhruby.web@gmail.com + */ + CryptoJS.mode.CTRGladman = (function () { + var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); + + function incWord(word) + { + if (((word >> 24) & 0xff) === 0xff) { //overflow + var b1 = (word >> 16)&0xff; + var b2 = (word >> 8)&0xff; + var b3 = word & 0xff; + + if (b1 === 0xff) // overflow b1 + { + b1 = 0; + if (b2 === 0xff) + { + b2 = 0; + if (b3 === 0xff) + { + b3 = 0; + } + else + { + ++b3; + } + } + else + { + ++b2; + } + } + else + { + ++b1; + } + + word = 0; + word += (b1 << 16); + word += (b2 << 8); + word += b3; + } + else + { + word += (0x01 << 24); + } + return word; + } + + function incCounter(counter) + { + if ((counter[0] = incWord(counter[0])) === 0) + { + // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 + counter[1] = incWord(counter[1]); + } + return counter; + } + + var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher + var blockSize = cipher.blockSize; + var iv = this._iv; + var counter = this._counter; + + // Generate keystream + if (iv) { + counter = this._counter = iv.slice(0); + + // Remove IV for subsequent blocks + this._iv = undefined; + } + + incCounter(counter); + + var keystream = counter.slice(0); + cipher.encryptBlock(keystream, 0); + + // Encrypt + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= keystream[i]; + } + } + }); + + CTRGladman.Decryptor = Encryptor; + + return CTRGladman; + }()); + + + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var StreamCipher = C_lib.StreamCipher; + var C_algo = C.algo; + + // Reusable objects + var S = []; + var C_ = []; + var G = []; + + /** + * Rabbit stream cipher algorithm + */ + var Rabbit = C_algo.Rabbit = StreamCipher.extend({ + _doReset: function () { + // Shortcuts + var K = this._key.words; + var iv = this.cfg.iv; + + // Swap endian + for (var i = 0; i < 4; i++) { + K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | + (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); + } + + // Generate initial state values + var X = this._X = [ + K[0], (K[3] << 16) | (K[2] >>> 16), + K[1], (K[0] << 16) | (K[3] >>> 16), + K[2], (K[1] << 16) | (K[0] >>> 16), + K[3], (K[2] << 16) | (K[1] >>> 16) + ]; + + // Generate initial counter values + var C = this._C = [ + (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), + (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), + (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), + (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) + ]; + + // Carry bit + this._b = 0; + + // Iterate the system four times + for (var i = 0; i < 4; i++) { + nextState.call(this); + } + + // Modify the counters + for (var i = 0; i < 8; i++) { + C[i] ^= X[(i + 4) & 7]; + } + + // IV setup + if (iv) { + // Shortcuts + var IV = iv.words; + var IV_0 = IV[0]; + var IV_1 = IV[1]; + + // Generate four subvectors + var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); + var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); + var i1 = (i0 >>> 16) | (i2 & 0xffff0000); + var i3 = (i2 << 16) | (i0 & 0x0000ffff); + + // Modify counter values + C[0] ^= i0; + C[1] ^= i1; + C[2] ^= i2; + C[3] ^= i3; + C[4] ^= i0; + C[5] ^= i1; + C[6] ^= i2; + C[7] ^= i3; + + // Iterate the system four times + for (var i = 0; i < 4; i++) { + nextState.call(this); + } + } + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var X = this._X; + + // Iterate the system + nextState.call(this); + + // Generate four keystream words + S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); + S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); + S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); + S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); + + for (var i = 0; i < 4; i++) { + // Swap endian + S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | + (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); + + // Encrypt + M[offset + i] ^= S[i]; + } + }, + + blockSize: 128/32, + + ivSize: 64/32 + }); + + function nextState() { + // Shortcuts + var X = this._X; + var C = this._C; + + // Save old counter values + for (var i = 0; i < 8; i++) { + C_[i] = C[i]; + } + + // Calculate new counter values + C[0] = (C[0] + 0x4d34d34d + this._b) | 0; + C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; + C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; + C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; + C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; + C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; + C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; + C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; + this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; + + // Calculate the g-values + for (var i = 0; i < 8; i++) { + var gx = X[i] + C[i]; + + // Construct high and low argument for squaring + var ga = gx & 0xffff; + var gb = gx >>> 16; + + // Calculate high and low result of squaring + var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; + var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); + + // High XOR low + G[i] = gh ^ gl; + } + + // Calculate new state values + X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; + X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; + X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; + X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; + X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; + X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; + X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; + X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; + } + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); + * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); + */ + C.Rabbit = StreamCipher._createHelper(Rabbit); + }()); + + + /** + * Counter block mode. + */ + CryptoJS.mode.CTR = (function () { + var CTR = CryptoJS.lib.BlockCipherMode.extend(); + + var Encryptor = CTR.Encryptor = CTR.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher + var blockSize = cipher.blockSize; + var iv = this._iv; + var counter = this._counter; + + // Generate keystream + if (iv) { + counter = this._counter = iv.slice(0); + + // Remove IV for subsequent blocks + this._iv = undefined; + } + var keystream = counter.slice(0); + cipher.encryptBlock(keystream, 0); + + // Increment counter + counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 + + // Encrypt + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= keystream[i]; + } + } + }); + + CTR.Decryptor = Encryptor; + + return CTR; + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var StreamCipher = C_lib.StreamCipher; + var C_algo = C.algo; + + // Reusable objects + var S = []; + var C_ = []; + var G = []; + + /** + * Rabbit stream cipher algorithm. + * + * This is a legacy version that neglected to convert the key to little-endian. + * This error doesn't affect the cipher's security, + * but it does affect its compatibility with other implementations. + */ + var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ + _doReset: function () { + // Shortcuts + var K = this._key.words; + var iv = this.cfg.iv; + + // Generate initial state values + var X = this._X = [ + K[0], (K[3] << 16) | (K[2] >>> 16), + K[1], (K[0] << 16) | (K[3] >>> 16), + K[2], (K[1] << 16) | (K[0] >>> 16), + K[3], (K[2] << 16) | (K[1] >>> 16) + ]; + + // Generate initial counter values + var C = this._C = [ + (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), + (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), + (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), + (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) + ]; + + // Carry bit + this._b = 0; + + // Iterate the system four times + for (var i = 0; i < 4; i++) { + nextState.call(this); + } + + // Modify the counters + for (var i = 0; i < 8; i++) { + C[i] ^= X[(i + 4) & 7]; + } + + // IV setup + if (iv) { + // Shortcuts + var IV = iv.words; + var IV_0 = IV[0]; + var IV_1 = IV[1]; + + // Generate four subvectors + var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); + var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); + var i1 = (i0 >>> 16) | (i2 & 0xffff0000); + var i3 = (i2 << 16) | (i0 & 0x0000ffff); + + // Modify counter values + C[0] ^= i0; + C[1] ^= i1; + C[2] ^= i2; + C[3] ^= i3; + C[4] ^= i0; + C[5] ^= i1; + C[6] ^= i2; + C[7] ^= i3; + + // Iterate the system four times + for (var i = 0; i < 4; i++) { + nextState.call(this); + } + } + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var X = this._X; + + // Iterate the system + nextState.call(this); + + // Generate four keystream words + S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); + S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); + S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); + S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); + + for (var i = 0; i < 4; i++) { + // Swap endian + S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | + (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); + + // Encrypt + M[offset + i] ^= S[i]; + } + }, + + blockSize: 128/32, + + ivSize: 64/32 + }); + + function nextState() { + // Shortcuts + var X = this._X; + var C = this._C; + + // Save old counter values + for (var i = 0; i < 8; i++) { + C_[i] = C[i]; + } + + // Calculate new counter values + C[0] = (C[0] + 0x4d34d34d + this._b) | 0; + C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; + C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; + C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; + C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; + C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; + C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; + C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; + this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; + + // Calculate the g-values + for (var i = 0; i < 8; i++) { + var gx = X[i] + C[i]; + + // Construct high and low argument for squaring + var ga = gx & 0xffff; + var gb = gx >>> 16; + + // Calculate high and low result of squaring + var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; + var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); + + // High XOR low + G[i] = gh ^ gl; + } + + // Calculate new state values + X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; + X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; + X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; + X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; + X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; + X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; + X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; + X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; + } + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); + * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); + */ + C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); + }()); + + + /** + * Zero padding strategy. + */ + CryptoJS.pad.ZeroPadding = { + pad: function (data, blockSize) { + // Shortcut + var blockSizeBytes = blockSize * 4; + + // Pad + data.clamp(); + data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); + }, + + unpad: function (data) { + // Shortcut + var dataWords = data.words; + + // Unpad + var i = data.sigBytes - 1; + while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { + i--; + } + data.sigBytes = i + 1; + } + }; + + + return CryptoJS; + +})); \ No newline at end of file diff --git a/上位机实时画面/js/jquery-1.10.2.min.js b/上位机实时画面/js/jquery-1.10.2.min.js new file mode 100644 index 0000000..da41706 --- /dev/null +++ b/上位机实时画面/js/jquery-1.10.2.min.js @@ -0,0 +1,6 @@ +/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license +//@ sourceMappingURL=jquery-1.10.2.min.map +*/ +(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="
",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="
","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
a",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="
t
",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t +}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X
","
"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle); +u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("';break;case 3:delete o.title,delete o.closeBtn,-1===o.icon&&o.icon,v.closeAll("loading");break;case 4:r||(o.content=[o.content,"body"]),o.follow=o.content[1],o.content=o.content[0]+'',delete o.title,o.tips="object"==typeof o.tips?o.tips:[o.tips,!0],o.tipsMore||v.closeAll("tips")}a.vessel(r,function(e,t,i){l.append(e[0]),r?2==o.type||4==o.type?m("body").append(e[1]):f.parents("."+u[0])[0]||(f.data("display",f.css("display")).show().addClass("layui-layer-wrap").wrap(e[1]),m("#"+u[0]+s).find("."+u[5]).before(t)):l.append(e[1]),m("#"+u.MOVE)[0]||l.append(d.moveElem=i),a.layero=m("#"+u[0]+s),a.shadeo=m("#"+u.SHADE+s),o.scrollbar||d.setScrollbar(s)}).auto(s),a.shadeo.css({"background-color":o.shade[1]||"#000",opacity:o.shade[0]||o.shade,transition:o.shade[2]||""}),a.shadeo.data(y,o.shade[0]||o.shade),2==o.type&&6==v.ie&&a.layero.find("iframe").attr("src",f[0]),4==o.type?a.tips():(a.offset(),parseInt(d.getStyle(document.getElementById(u.MOVE),"z-index"))||(a.layero.css("visibility","hidden"),v.ready(function(){a.offset(),a.layero.css("visibility","visible")}))),!o.fixed||d.events.resize[a.index]||(d.events.resize[a.index]=function(){a.resize()},g.on("resize",d.events.resize[a.index])),o.time<=0||setTimeout(function(){v.close(a.index)},o.time),a.move().callback(),c(a.layero),a.layero.data("config",o)}},t.pt.resize=function(){var e=this,t=e.config;e.offset(),(/^\d+%$/.test(t.area[0])||/^\d+%$/.test(t.area[1]))&&e.auto(e.index),4==t.type&&e.tips()},t.pt.auto=function(e){var t=this.config,i=m("#"+u[0]+e),n=(""===t.area[0]&&0t.maxWidth)&&i.width(t.maxWidth),[i.innerWidth(),i.innerHeight()]),a=i.find(u[1]).outerHeight()||0,o=i.find("."+u[6]).outerHeight()||0,e=function(e){(e=i.find(e)).height(n[1]-a-o-2*(0|parseFloat(e.css("padding-top"))))};return 2===t.type?e("iframe"):""===t.area[1]?0t.maxHeight?(n[1]=t.maxHeight,e("."+u[5])):t.fixed&&n[1]>=g.height()&&(n[1]=g.height(),e("."+u[5])):e("."+u[5]),this},t.pt.offset=function(){var e=this,t=e.config,i=e.layero,n=[i.outerWidth(),i.outerHeight()],a="object"==typeof t.offset;e.offsetTop=(g.height()-n[1])/2,e.offsetLeft=(g.width()-n[0])/2,a?(e.offsetTop=t.offset[0],e.offsetLeft=t.offset[1]||e.offsetLeft):"auto"!==t.offset&&("t"===t.offset?e.offsetTop=0:"r"===t.offset?e.offsetLeft=g.width()-n[0]:"b"===t.offset?e.offsetTop=g.height()-n[1]:"l"===t.offset?e.offsetLeft=0:"lt"===t.offset?(e.offsetTop=0,e.offsetLeft=0):"lb"===t.offset?(e.offsetTop=g.height()-n[1],e.offsetLeft=0):"rt"===t.offset?(e.offsetTop=0,e.offsetLeft=g.width()-n[0]):"rb"===t.offset?(e.offsetTop=g.height()-n[1],e.offsetLeft=g.width()-n[0]):e.offsetTop=t.offset),t.fixed||(e.offsetTop=/%$/.test(e.offsetTop)?g.height()*parseFloat(e.offsetTop)/100:parseFloat(e.offsetTop),e.offsetLeft=/%$/.test(e.offsetLeft)?g.width()*parseFloat(e.offsetLeft)/100:parseFloat(e.offsetLeft),e.offsetTop+=g.scrollTop(),e.offsetLeft+=g.scrollLeft()),"min"===i.data("maxminStatus")&&(e.offsetTop=g.height()-(i.find(u[1]).outerHeight()||0),e.offsetLeft=i.css("left")),i.css({top:e.offsetTop,left:e.offsetLeft})},t.pt.tips=function(){var e=this.config,t=this.layero,i=[t.outerWidth(),t.outerHeight()],n=m(e.follow),a={width:(n=n[0]?n:m("body")).outerWidth(),height:n.outerHeight(),top:n.offset().top,left:n.offset().left},o=t.find(".layui-layer-TipsG"),n=e.tips[0];e.tips[1]||o.remove(),a.autoLeft=function(){0g.width()&&(o=g.width()-180-(d.minStackArr.edgeIndex=d.minStackArr.edgeIndex||0,d.minStackArr.edgeIndex+=3))<0&&(o=0),t.minStack&&(r.left=o,r.top=g.height()-n,a||d.minStackIndex++,l.attr("minLeft",o)),l.attr("position",s),v.style(e,r,!0),i.hide(),"page"===l.attr("type")&&l.find(u[4]).hide(),d.restScrollbar(e),c.hide())},v.restore=function(e){var t=m("#"+u[0]+e),i=m("#"+u.SHADE+e),n=t.find(".layui-layer-content"),a=t.attr("area").split(","),o=t.attr("type"),s=t.data("config")||{},r=n.data(l);t.removeData("maxminStatus"),v.style(e,{width:a[0],height:a[1],top:parseFloat(a[2]),left:parseFloat(a[3]),position:t.attr("position"),overflow:"visible"},!0),t.find(".layui-layer-max").removeClass("layui-layer-maxmin"),t.find(".layui-layer-min").show(),"page"===o&&t.find(u[4]).show(),s.scrollbar?d.restScrollbar(e):d.setScrollbar(e),r!==h&&(n.removeData(l),(o===d.type[2]?n.children("iframe"):n).css({height:r})),i.show()},v.full=function(t){var i=m("#"+u[0]+t),e=i.data("maxminStatus");"max"!==e&&("min"===e&&v.restore(t),i.data("maxminStatus","max"),d.record(i),u.html.attr("layer-full")||d.setScrollbar(t),setTimeout(function(){var e="fixed"===i.css("position");v.style(t,{top:e?0:g.scrollTop(),left:e?0:g.scrollLeft(),width:"100%",height:"100%"},!0),i.find(".layui-layer-min").hide()},100))},v.title=function(e,t){m("#"+u[0]+(t||v.index)).find(u[1]).html(e)},v.close=function(o,s){var r,e,t,l=(i=m("."+u[0]).children("#"+o).closest("."+u[0]))[0]?(o=i.attr("times"),i):m("#"+u[0]+o),c=l.attr("type"),i=l.data("config")||{},f=i.id&&i.hideOnClose;l[0]&&(r={slideDown:"layer-anim-slide-down-out",slideLeft:"layer-anim-slide-left-out",slideUp:"layer-anim-slide-up-out",slideRight:"layer-anim-slide-right-out"}[i.anim]||"layer-anim-close",e=function(){var e="layui-layer-wrap";if(f)return l.removeClass("layer-anim "+r),l.hide();if(c===d.type[1]&&"object"===l.attr("conType")){l.children(":not(."+u[5]+")").remove();for(var t=l.find("."+e),i=0;i<2;i++)t.unwrap();t.css("display",t.data("display")).removeClass(e)}else{if(c===d.type[2])try{var n=m("#"+u[4]+o)[0];n.contentWindow.document.write(""),n.contentWindow.close(),l.find("."+u[5])[0].removeChild(n)}catch(a){}l[0].innerHTML="",l.remove()}"function"==typeof d.end[o]&&d.end[o](),delete d.end[o],"function"==typeof s&&s(),d.events.resize[o]&&(g.off("resize",d.events.resize[o]),delete d.events.resize[o])},t=m("#"+u.SHADE+o),v.ie&&v.ie<10||!i.isOutAnim?t[f?"hide":"remove"]():(t.css({opacity:0}),setTimeout(function(){t[f?"hide":"remove"]()},350)),i.isOutAnim&&l.addClass("layer-anim "+r),6==v.ie&&d.reselect(),d.restScrollbar(o),"string"==typeof l.attr("minLeft")&&(d.minStackIndex--,d.minStackArr.push(l.attr("minLeft"))),v.ie&&v.ie<10||!i.isOutAnim?e():setTimeout(function(){e()},200))},v.closeAll=function(n,a){"function"==typeof n&&(a=n,n=null);var o=m("."+u[0]);m.each(o,function(e){var t=m(this),i=n?t.attr("type")===n:1;i&&v.close(t.attr("times"),e===o.length-1?a:null)}),0===o.length&&"function"==typeof a&&a()},v.closeLast=function(i,e){var t,n=[],a=m.isArray(i);m("string"==typeof i?".layui-layer-"+i:".layui-layer").each(function(e,t){t=m(t);if(a&&-1===i.indexOf(t.attr("type"))||"none"===t.css("display"))return!0;n.push(Number(t.attr("times")))}),0":'",s=i.success;return delete i.success,v.open(m.extend({type:1,btn:["\u786e\u5b9a","\u53d6\u6d88"],content:o,skin:"layui-layer-prompt"+x("prompt"),maxWidth:g.width(),success:function(e){(a=e.find(".layui-layer-input")).val(i.value||"").focus(),"function"==typeof s&&s(e)},resize:!1,yes:function(e){var t=a.val();t.length>(i.maxlength||500)?v.tips("\u6700\u591a\u8f93\u5165"+(i.maxlength||500)+"\u4e2a\u5b57\u7b26",a,{tips:1}):n&&n(t,e,a)}},i))},v.tab=function(n){var a=(n=n||{}).tab||{},o="layui-this",s=n.success;return delete n.success,v.open(m.extend({type:1,skin:"layui-layer-tab"+x("tab"),resize:!1,title:function(){var e=a.length,t=1,i="";if(0'+a[0].title+"";t"+a[t].title+"";return i}(),content:'
    '+function(){var e=a.length,t=1,i="";if(0'+(a[0].content||"no content")+"";t'+(a[t].content||"no content")+"";return i}()+"
",success:function(e){var t=e.find(".layui-layer-title").children(),i=e.find(".layui-layer-tabmain").children();t.on("mousedown",function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0;var e=m(this),t=e.index();e.addClass(o).siblings().removeClass(o),i.eq(t).show().siblings().hide(),"function"==typeof n.change&&n.change(t)}),"function"==typeof s&&s(e)}},n))},v.photos=function(n,e,a){var s={};if((n=m.extend(!0,{toolbar:!0,footer:!0},n)).photos){var t=!("string"==typeof n.photos||n.photos instanceof m),i=t?n.photos:{},o=i.data||[],r=i.start||0,l=n.success;if(s.imgIndex=1+(0|r),n.img=n.img||"img",delete n.success,t){if(0===o.length)return v.msg("\u6ca1\u6709\u56fe\u7247")}else{var c=m(n.photos),f=function(){o=[],c.find(n.img).each(function(e){var t=m(this);t.attr("layer-index",e),o.push({alt:t.attr("alt"),pid:t.attr("layer-pid"),src:t.attr("lay-src")||t.attr("layer-src")||t.attr("src"),thumb:t.attr("src")})})};if(f(),0===o.length)return;if(e||c.on("click",n.img,function(){f();var e=m(this).attr("layer-index");v.photos(m.extend(n,{photos:{start:e,data:o,tab:n.tab},full:n.full}),!0)}),!e)return}s.imgprev=function(e){s.imgIndex--,s.imgIndex<1&&(s.imgIndex=o.length),s.tabimg(e)},s.imgnext=function(e,t){s.imgIndex++,s.imgIndex>o.length&&(s.imgIndex=1,t)||s.tabimg(e)},s.keyup=function(e){var t;s.end||(t=e.keyCode,e.preventDefault(),37===t?s.imgprev(!0):39===t?s.imgnext(!0):27===t&&v.close(s.index))},s.tabimg=function(e){if(!(o.length<=1))return i.start=s.imgIndex-1,v.close(s.index),v.photos(n,!0,e)},s.isNumber=function(e){return"number"==typeof e&&!isNaN(e)},s.image={},s.getTransform=function(e){var t=[],i=e.rotate,n=e.scaleX,e=e.scale;return s.isNumber(i)&&0!==i&&t.push("rotate("+i+"deg)"),s.isNumber(n)&&1!==n&&t.push("scaleX("+n+")"),s.isNumber(e)&&t.push("scale("+e+")"),t.length?t.join(" "):"none"},s.event=function(e,i,n){var a,o;s.main.find(".layui-layer-photos-prev").on("click",function(e){e.preventDefault(),s.imgprev(!0)}),s.main.find(".layui-layer-photos-next").on("click",function(e){e.preventDefault(),s.imgnext(!0)}),m(document).on("keyup",s.keyup),e.off("click").on("click","*[toolbar-event]",function(){var e=m(this);switch(e.attr("toolbar-event")){case"rotate":s.image.rotate=((s.image.rotate||0)+Number(e.attr("data-option")))%360,s.imgElem.css({transform:s.getTransform(s.image)});break;case"scalex":s.image.scaleX=-1===s.image.scaleX?1:-1,s.imgElem.css({transform:s.getTransform(s.image)});break;case"zoom":var t=Number(e.attr("data-option"));s.image.scale=(s.image.scale||1)+t,t<0&&s.image.scale<0-t&&(s.image.scale=0-t),s.imgElem.css({transform:s.getTransform(s.image)});break;case"reset":s.image.scaleX=1,s.image.scale=1,s.image.rotate=0,s.imgElem.css({transform:"none"});break;case"close":v.close(i)}n.offset(),n.auto(i)}),s.main.on("mousewheel DOMMouseScroll",function(e){var t=e.originalEvent.wheelDelta||-e.originalEvent.detail,i=s.main.find('[toolbar-event="zoom"]');(0n)&&("left"===t.direction?s.imgnext(!0):"right"===t.direction&&s.imgprev(!0))},m.each([n.shadeo,s.main],function(e,t){a.touchSwipe(t,{onTouchEnd:o})}))},s.loadi=v.load(1,{shade:!("shade"in n)&&[.9,h,"unset"],scrollbar:!1});var t=o[r].src,d=function(e){v.close(s.loadi);var t,i=o[r].alt||"";a&&(n.anim=-1),s.index=v.open(m.extend({type:1,id:"layui-layer-photos",area:(e=[e.width,e.height],t=[m(p).width()-100,m(p).height()-100],!n.full&&(t[0]'+i+''+(t=['
'],1','','',"
"].join("")),n.toolbar&&t.push(['
','','','','','','',"
"].join("")),n.footer&&t.push(['"].join("")),t.push(""),t.join(""))+"",success:function(e,t,i){s.main=e.find(".layer-layer-photos-main"),s.footer=e.find(".layui-layer-photos-footer"),s.imgElem=s.main.children("img"),s.event(e,t,i),n.tab&&n.tab(o[r],e),"function"==typeof l&&l(e)},end:function(){s.end=!0,m(document).off("keyup",s.keyup)}},n))},u=function(){v.close(s.loadi),v.msg("\u5f53\u524d\u56fe\u7247\u5730\u5740\u5f02\u5e38\uff0c
\u662f\u5426\u7ee7\u7eed\u67e5\u770b\u4e0b\u4e00\u5f20\uff1f",{time:3e4,btn:["\u4e0b\u4e00\u5f20","\u4e0d\u770b\u4e86"],yes:function(){1").addClass(r));layui.each(i.bars,function(t,e){var n=s('
  • ');n.addClass(e.icon).attr({"lay-type":e.type,style:e.style||(i.bgcolor?"background-color: "+i.bgcolor:"")}).html(e.content),n.on("click",function(){var t=s(this).attr("lay-type");"top"===t&&("body"===i.target?s("html,body"):u).animate({scrollTop:0},i.duration),"function"==typeof i.click&&i.click.call(this,t)}),"object"===layui.type(i.on)&&layui.each(i.on,function(t,e){n.on(t,function(){var t=s(this).attr("lay-type");"function"==typeof e&&e.call(this,t)})}),"top"===e.type&&(n.addClass("layui-fixbar-top"),o=n),l.append(n)}),c.find("."+r).remove(),"object"==typeof i.css&&l.css(i.css),c.append(l),o&&(e=function e(){return u.scrollTop()>=i.margin?t||(o.show(),t=1):t&&(o.hide(),t=0),e}()),u.on("scroll",function(){e&&(clearTimeout(n),n=setTimeout(function(){e()},100))})},countdown:function(i){i=s.extend(!0,{date:new Date,now:new Date},i);var o=arguments,r=(1]|&(?=#[a-zA-Z0-9]+)/g.test(t+="")?t.replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,"""):t},unescape:function(t){return t!==undefined&&null!==t||(t=""),(t+="").replace(/\&/g,"&").replace(/\</g,"<").replace(/\>/g,">").replace(/\'/g,"'").replace(/\"/g,'"')},openWin:function(t){var e=(t=t||{}).window||window.open(t.url||"",t.target,t.specs);t.url||(e.document.open("text/html","replace"),e.document.write(t.content||""),e.document.close())},toVisibleArea:function(t){var e,n,i,o,r,a,c,u;(t=s.extend({margin:160,duration:200,type:"y"},t)).scrollElem[0]&&t.thisElem[0]&&(e=t.scrollElem,c=t.thisElem,i=(r="y"===t.type)?"top":"left",o=e[n=r?"scrollTop":"scrollLeft"](),r=e[r?"height":"width"](),a=e.offset()[i],u={},(c=c.offset()[i]-a)>r-t.margin||c."+w,E=function(e){var i=this;i.index=++h.index,i.config=c.extend({},i.config,h.config,e),i.init()};E.prototype.config={trigger:"click",content:"",className:"",style:"",show:!1,isAllowSpread:!0,isSpreadItem:!0,data:[],delay:[200,300],shade:0,accordion:!1},E.prototype.reload=function(e,i){var t=this;t.config=c.extend({},t.config,e),t.init(!0,i)},E.prototype.init=function(e,i){var t,n=this,l=n.config,a=c(l.elem);return 1');return 0\u6682\u65e0\u6570\u636e
  • '),e},u=function(r,e){return layui.each(e,function(e,i){var t,n=i[s.children]&&0",(t="href"in i?''+a+"":a,n?'
    '+t+("parent"===o?'':"group"===o&&d.isAllowSpread?'':"")+"
    ":'
    '+t+"
    "),""].join(""))).data("item",i),n&&(l=c('
    '),t=c("
      "),"parent"===o?(l.append(u(t,i[s.children])),a.append(l)):a.append(u(t,i[s.children]))),r.append(a))}),r},l=['
      ',"
      "].join("");!(e="contextmenu"!==d.trigger&&!lay.isTopElem(d.elem[0])?e:!0)&&d.elem.data(y+"_opened")||(a.elemView=c("."+v+"["+f+'="'+d.id+'"]'),"reloadData"===i&&a.elemView.length?a.elemView.html(d.content||n()):(a.elemView=c(l),a.elemView.append(d.content||n()),d.className&&a.elemView.addClass(d.className),d.style&&a.elemView.attr("style",d.style),h.thisId=d.id,a.remove(),t.append(a.elemView),d.elem.data(y+"_opened",!0),e=d.shade?'
      ':"",a.elemView.before(e),"mouseenter"===d.trigger&&a.elemView.on("mouseenter",function(){clearTimeout(g.timer)}).on("mouseleave",function(){a.delayRemove()})),a.position(),(g.prevElem=a.elemView).data("prevElem",d.elem),a.elemView.find(".layui-menu").on(o,function(e){layui.stope(e)}),a.elemView.find(".layui-menu li").on("click",function(e){var i=c(this),t=i.data("item")||{},n=t[s.children]&&0n.width()&&(t.addClass(b),(i=t[0].getBoundingClientRect()).left<0)&&t.removeClass(b),i.bottom>n.height())&&t.eq(0).css("margin-top",-(i.bottom-n.height()+5))}).on("mouseleave",t,function(e){var i=c(this).children("."+x);i.removeClass(b),i.css("margin-top",0)}),h.close=function(e){e=g.getThis(e);return e?(e.remove(),g.call(e)):this},h.open=function(e){e=g.getThis(e);return e?(e.render(),g.call(e)):this},h.reload=function(e,i,t){e=g.getThis(e);return e?(e.reload(i,t),g.call(e)):this},h.reloadData=function(){var t=c.extend([],arguments),n=(t[2]="reloadData",new RegExp("^("+["data","templet","content"].join("|")+")$"));return layui.each(t[1],function(e,i){n.test(e)||delete t[1][e]}),h.reload.apply(null,t)},h.render=function(e){e=new E(e);return g.call(e)},e(r,h)});layui.define(["jquery","lay"],function(e){"use strict";var x=layui.$,b=layui.lay,m={config:{},index:layui.slider?layui.slider.index+1e4:0,set:function(e){var t=this;return t.config=x.extend({},t.config,e),t},on:function(e,t){return layui.onevent.call(this,i,e,t)}},i="slider",f="layui-disabled",T="layui-slider-bar",w="layui-slider-wrap",M="layui-slider-wrap-btn",L="layui-slider-tips",E="layui-slider-input-txt",Y="layui-slider-hover",t=function(e){var t=this;t.index=++m.index,t.config=x.extend({},t.config,m.config,e),t.render()};t.prototype.config={type:"default",min:0,max:100,value:0,step:1,showstep:!1,tips:!0,tipsAlways:!1,input:!1,range:!1,height:200,disabled:!1,theme:"#16baaa"},t.prototype.precision=function(){var e=this.config,e=x.map([e.min,e.max,e.step],function(e,t){e=String(e).split(".");return e[1]?e[1].length:0});return Math.max.apply(null,e)},t.prototype.render=function(){var n=this,a=n.config,e=x(a.elem);if(1a.max&&(a.value=a.max),l=(a.value-a.min)/(a.max-a.min)*100+"%");var t,e=a.disabled?"#c2c2c2":a.theme,i='
      '+(a.tips?'
      ":"")+'
      '+(a.range?'
      ':"")+"
      ",l=x(a.elem),s=l.next(".layui-slider");if(s[0]&&s.remove(),n.elemTemp=x(i),a.range?(n.elemTemp.find("."+w).eq(0).data("value",a.value[0]),n.elemTemp.find("."+w).eq(1).data("value",a.value[1])):n.elemTemp.find("."+w).data("value",a.value),l.html(n.elemTemp),"vertical"===a.type&&n.elemTemp.height(a.height+"px"),a.showstep){for(var o=(a.max-a.min)/a.step,r="",u=1;u<1+o;u++){var c=100*u/o;c<100&&(r+='
      ')}n.elemTemp.append(r)}function d(e){e=e.parent().data("value"),e=a.setTips?a.setTips(e):e;n.elemTemp.find("."+L).html(e)}function p(e){var t="vertical"===a.type?a.height:n.elemTemp[0].offsetWidth,i=n.elemTemp.find("."+w);return("vertical"===a.type?t-e.parent()[0].offsetTop-i.height():e.parent()[0].offsetLeft)/t*100}function v(e){"vertical"===a.type?n.elemTemp.find("."+L).css({bottom:e+"%","margin-bottom":"20px",display:"inline-block"}):n.elemTemp.find("."+L).css({left:e+"%",display:"inline-block"})}a.input&&!a.range&&(e=x('
      '),l.css("position","relative"),l.append(e),l.find("."+E).children("input").val(a.value),"vertical"===a.type?e.css({left:0,top:-48}):n.elemTemp.css("margin-right",e.outerWidth()+15)),a.disabled?(n.elemTemp.addClass(f),n.elemTemp.find("."+M).addClass(f)):n.slide(),a.tips&&(a.tipsAlways?(d(s=n.elemTemp.find("."+M)),v(p(s))):n.elemTemp.find("."+M).on("mouseover",function(){d(x(this));var e=p(x(this));clearTimeout(t),t=setTimeout(function(){v(e)},300)}).on("mouseout",function(){clearTimeout(t),a.tipsAlways||n.elemTemp.find("."+L).css("display","none")}))},t.prototype.slide=function(e,t,i){var u=this,c=u.config,d=u.elemTemp,p=function(){return"vertical"===c.type?c.height:d[0].offsetWidth},v=d.find("."+w),o=d.next(".layui-slider-input"),r=o.children("."+E).children("input").val(),m=100/((c.max-c.min)/c.step),f=u.precision(),h=function(e,t,i){e=(e=100<(e=100n[1]&&n.reverse(),u.value=c.range?n:l,c.change&&c.change(u.value),"done"===i&&c.done&&c.done(u.value)},y=function(e){var t=e/p()*100/m,i=Math.round(t)*m;return i=e==p()?Math.ceil(t)*m:i},g=x(['
      p()?p():t)/p()*100/m;h(t,o),r.addClass(Y),d.find("."+L).show(),e.preventDefault()},n=function(e){r.removeClass(Y),c.tipsAlways||setTimeout(function(){d.find("."+L).hide()},e)},a=function(){n&&n(b.touchEventsSupported()?1e3:0),g.remove(),c.done&&c.done(u.value),b.touchEventsSupported()&&(t[0].removeEventListener("touchmove",i,!!b.passiveSupported&&{passive:!1}),t[0].removeEventListener("touchend",a),t[0].removeEventListener("touchcancel",a))},x("#LAY-slider-moving")[0]||x("body").append(g),g.on("mousemove",i),g.on("mouseup",a).on("mouseleave",a),b.touchEventsSupported()&&(t[0].addEventListener("touchmove",i,!!b.passiveSupported&&{passive:!1}),t[0].addEventListener("touchend",a),t[0].addEventListener("touchcancel",a))})}),d.on("click",function(e){var t=x("."+M),i=x(this);!t.is(event.target)&&0===t.has(event.target).length&&t.length&&(i=(t=(t=(t="vertical"===c.type?p()-e.clientY+i.offset().top-x(window).scrollTop():e.clientX-i.offset().left-x(window).scrollLeft())<0?0:t)>p()?p():t)/p()*100/m,t=c.range?"vertical"===c.type?Math.abs(t-parseInt(x(v[0]).css("bottom")))>Math.abs(t-parseInt(x(v[1]).css("bottom")))?1:0:Math.abs(t-v[0].offsetLeft)>Math.abs(t-v[1].offsetLeft)?1:0:0,h(i,t,"done"),e.preventDefault())}),o.children(".layui-slider-input-btn").children("i").each(function(t){x(this).on("click",function(){r=o.children("."+E).children("input").val();var e=((r=1==t?r-c.stepc.max?c.max:Number(r)+c.step)-c.min)/(c.max-c.min)*100/m;h(e,0,"done")})});var n=function(){var e=this.value,e=(e=(e=(e=isNaN(e)?0:e)c.max?c.max:e,((this.value=e)-c.min)/(c.max-c.min)*100/m);h(e,0,"done")};o.children("."+E).children("input").on("keydown",function(e){13===e.keyCode&&(e.preventDefault(),n.call(this))}).on("change",n)},t.prototype.events=function(){this.config},m.render=function(e){e=new t(e);return function(){var i=this,n=i.config;return{setValue:function(e,t){return e=(e=e>n.max?n.max:e)',"",'','',"","","
      "].join("")),t=i.elem=k(i.elem);i.size&&o.addClass("layui-colorpicker-"+i.size),t.addClass("layui-inline").html(e.elemColorBox=o),i.id="id"in i?i.id:t.attr("id")||e.index,e.color=e.elemColorBox.find("."+C)[0].style.background,e.events()},d.prototype.renderPicker=function(){var o,e=this,i=e.config,t=e.elemColorBox[0],r=e.elemPicker=k(['
      ','
      ','
      ','
      ','
      ','
      ',"
      ",'
      ','
      ',"
      ","
      ",'
      ','
      ','
      ',"
      ","
      ",i.predefine?(o=['
      '],layui.each(i.colors,function(e,i){o.push(['
      ','
      ',"
      "].join(""))}),o.push("
      "),o.join("")):"",'
      ','
      ','',"
      ",'
      ','','',"","
      "].join(""));e.elemColorBox.find("."+C)[0];k(a)[0]&&k(a).data("index")==e.index?e.removePicker(d.thisElemInd):(e.removePicker(d.thisElemInd),k("body").append(r)),n.thisId=i.id,d.thisElemInd=e.index,d.thisColor=t.style.background,e.position(),e.pickerEvents()},d.prototype.removePicker=function(e){var i=this.config,e=k("#layui-colorpicker"+(e||this.index));return e[0]&&(e.remove(),delete n.thisId,"function"==typeof i.close)&&i.close(this.color),this},d.prototype.position=function(){var e=this,i=e.config;return r.position(e.bindElem||e.elemColorBox[0],e.elemPicker[0],{position:i.position,align:"center"}),e},d.prototype.val=function(){var e,i=this,o=(i.config,i.elemColorBox.find("."+C)),t=i.elemPicker.find("."+M),r=o[0].style.backgroundColor;r?(e=Y(F(r)),o=o.attr("lay-type"),i.select(e.h,e.s,e.b),"torgb"===o?t.find("input").val(r):"rgba"===o?(o=F(r),3===(r.match(/[0-9]{1,3}/g)||[]).length?(t.find("input").val("rgba("+o.r+", "+o.g+", "+o.b+", 1)"),i.elemPicker.find("."+D).css("left",280)):(t.find("input").val(r),r=280*r.slice(r.lastIndexOf(",")+1,r.length-1),i.elemPicker.find("."+D).css("left",r)),i.elemPicker.find("."+T)[0].style.background="linear-gradient(to right, rgba("+o.r+", "+o.g+", "+o.b+", 0), rgb("+o.r+", "+o.g+", "+o.b+"))"):t.find("input").val("#"+j(e))):(i.select(0,100,100),t.find("input").val(""),i.elemPicker.find("."+T)[0].style.background="",i.elemPicker.find("."+D).css("left",280))},d.prototype.side=function(){var n=this,l=n.config,c=n.elemColorBox.find("."+C),a=c.attr("lay-type"),s=n.elemPicker.find(".layui-colorpicker-side"),e=n.elemPicker.find("."+B),d=n.elemPicker.find("."+I),t=n.elemPicker.find("."+E),u=n.elemPicker.find("."+T),f=n.elemPicker.find("."+D),p=e[0].offsetTop/180*360,h=100-(t[0].offsetTop+3)/180*100,g=(t[0].offsetLeft+3)/260*100,v=Math.round(f[0].offsetLeft/280*100)/100,y=n.elemColorBox.find("."+w),i=n.elemPicker.find(".layui-colorpicker-pre").children("div"),m=function(e,i,o,t){n.select(e,i,o);var r=X({h:e,s:i,b:o}),e=j({h:e,s:i,b:o}),i=n.elemPicker.find("."+M).find("input");y.addClass(x).removeClass(P),c[0].style.background="rgb("+r.r+", "+r.g+", "+r.b+")","torgb"===a?i.val("rgb("+r.r+", "+r.g+", "+r.b+")"):"rgba"===a?(f.css("left",280*t),i.val("rgba("+r.r+", "+r.g+", "+r.b+", "+t+")"),c[0].style.background="rgba("+r.r+", "+r.g+", "+r.b+", "+t+")",u[0].style.background="linear-gradient(to right, rgba("+r.r+", "+r.g+", "+r.b+", 0), rgb("+r.r+", "+r.g+", "+r.b+"))"):i.val("#"+e),l.change&&l.change(k.trim(n.elemPicker.find("."+M).find("input").val()))},o=k(['
      '].join("")),b=function(e){k("#LAY-colorpicker-moving")[0]||k("body").append(o),o.on("mousemove",e),o.on("mouseup",function(){o.remove()}).on("mouseleave",function(){o.remove()})};e.on("mousedown",function(e){var t=this.offsetTop,r=e.clientY;b(function(e){var i=t+(e.clientY-r),o=s[0].offsetHeight,o=(i=o<(i=i<0?0:i)?o:i)/180*360;m(p=o,g,h,v),e.preventDefault()}),e.preventDefault()}),s.on("click",function(e){var i=e.clientY-k(this).offset().top+H.scrollTop(),i=(i=(i=i<0?0:i)>this.offsetHeight?this.offsetHeight:i)/180*360;m(p=i,g,h,v),e.preventDefault()}),t.on("mousedown",function(e){var n=this.offsetTop,l=this.offsetLeft,c=e.clientY,a=e.clientX;layui.stope(e),b(function(e){var i=n+(e.clientY-c),o=l+(e.clientX-a),t=d[0].offsetHeight,r=d[0].offsetWidth,r=(o=r<(o=o<0?0:o)?r:o)/260*100,o=100-(i=t<(i=i<0?0:i)?t:i)/180*100;m(p,g=r,h=o,v),e.preventDefault()}),e.preventDefault()}),d.on("mousedown",function(e){var i=e.clientY-k(this).offset().top+H.scrollTop(),o=e.clientX-k(this).offset().left+H.scrollLeft(),o=((i=i<0?0:i)>this.offsetHeight&&(i=this.offsetHeight),(o=(o=o<0?0:o)>this.offsetWidth?this.offsetWidth:o)/260*100),i=100-i/180*100;m(p,g=o,h=i,v),layui.stope(e),e.preventDefault(),t.trigger(e,"mousedown")}),f.on("mousedown",function(e){var t=this.offsetLeft,r=e.clientX;b(function(e){var i=t+(e.clientX-r),o=u[0].offsetWidth,o=(o<(i=i<0?0:i)&&(i=o),Math.round(i/280*100)/100);m(p,g,h,v=o),e.preventDefault()}),e.preventDefault()}),u.on("click",function(e){var i=e.clientX-k(this).offset().left,i=((i=i<0?0:i)>this.offsetWidth&&(i=this.offsetWidth),Math.round(i/280*100)/100);m(p,g,h,v=i),e.preventDefault()}),i.each(function(){k(this).on("click",function(){k(this).parent(".layui-colorpicker-pre").addClass("selected").siblings().removeClass("selected");var e=this.style.backgroundColor,i=Y(F(e)),o=e.slice(e.lastIndexOf(",")+1,e.length-1);p=i.h,g=i.s,h=i.b,3===(e.match(/[0-9]{1,3}/g)||[]).length&&(o=1),v=o,m(i.h,i.s,i.b,o)})}),r.touchEventsSupported()&&layui.each([{elem:s,eventType:"click"},{elem:u,eventType:"click"},{elem:d,eventType:"mousedown"}],function(e,t){r.touchSwipe(t.elem,{onTouchMove:function(e){var i,o;e=e,i=t.eventType,e=e.touches[0],(o=document.createEvent("MouseEvent")).initMouseEvent(i,!0,!0,window,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)}})})},d.prototype.select=function(e,i,o,t){this.config;var r=j({h:e,s:100,b:100}),e=(j({h:e,s:i,b:o}),e/360*180),o=180-o/100*180,i=i/100*260,n=this.elemPicker.find("."+I)[0];this.elemPicker.find("."+B).css("top",e),n.style.background="#"+r,this.elemPicker.find("."+E).css({top:o/n.offsetHeight*100+"%",left:i/n.offsetWidth*100+"%"})},d.prototype.pickerEvents=function(){var c=this,a=c.config,s=c.elemColorBox.find("."+C),d=c.elemPicker.find("."+M+" input"),o={clear:function(e){s[0].style.background="",c.elemColorBox.find("."+w).removeClass(x).addClass(P),c.color="",a.done&&a.done(""),c.removePicker()},confirm:function(e,i){var o,t,r,n,l=k.trim(d.val());-1>16,g:(65280&r)>>8,b:255&r},t=Y(n),s[0].style.background=o="#"+j(t),c.elemColorBox.find("."+w).removeClass(P).addClass(x)),"change"===i?(c.select(t.h,t.s,t.b,i),a.change&&a.change(o)):(c.color=l,a.done&&a.done(l),c.removePicker())}};c.elemPicker.on("click","*[colorpicker-events]",function(){var e=k(this),i=e.attr("colorpicker-events");o[i]&&o[i].call(this,e)}),d.on("keyup",function(e){var i=k(this);o.confirm.call(this,i,13===e.keyCode?null:"change")})},d.prototype.events=function(){var e=this;e.config;e.elemColorBox.on("click",function(){e.renderPicker(),k(a)[0]&&(e.val(),e.side())})},s.on(i,function(e){var i,o,t;n.thisId&&(i=l.getThis(n.thisId))&&(o=i.config,t=i.elemColorBox.find("."+C),k(e.target).hasClass(c)||k(e.target).parents("."+c)[0]||k(e.target).hasClass(a.replace(/\./g,""))||k(e.target).parents(a)[0]||i.elemPicker&&(i.color?(e=Y(F(i.color)),i.select(e.h,e.s,e.b)):i.elemColorBox.find("."+w).removeClass(x).addClass(P),t[0].style.background=i.color||"","function"==typeof o.cancel&&o.cancel(i.color),i.removePicker()))}),H.on("resize",function(){if(n.thisId){var e=l.getThis(n.thisId);if(e)return!(!e.elemPicker||!k(a)[0])&&void e.position()}}),l.that={},l.getThis=function(e){var i=l.that[e];return i||o.error(e?t+" instance with ID '"+e+"' not found":"ID argument required"),i},n.render=function(e){e=new d(e);return l.call(e)},e(t,n)});layui.define("jquery",function(t){"use strict";var u=layui.$,d=(layui.hint(),layui.device()),c="element",r="layui-this",h="layui-show",o=".layui-tab-title",i=function(){this.config={}},y=(i.prototype.set=function(t){return u.extend(!0,this.config,t),this},i.prototype.on=function(t,i){return layui.onevent.call(this,c,t,i)},i.prototype.tabAdd=function(t,i){var a,e=u(".layui-tab[lay-filter="+t+"]"),l=e.children(o),n=l.children(".layui-tab-bar"),e=e.children(".layui-tab-content"),s=""+(i.title||"unnaming")+"";return n[0]?n.before(s):l.append(s),e.append('
      '+(i.content||"")+"
      "),i.change&&this.tabChange(t,i.id),l.data("LAY_TAB_CHANGE",i.change),C.tabAuto(i.change?"change":null),this},i.prototype.tabDelete=function(t,i){t=u(".layui-tab[lay-filter="+t+"]").children(o).find('>li[lay-id="'+i+'"]');return C.tabDelete(null,t),this},i.prototype.tabChange=function(t,i){t=u(".layui-tab[lay-filter="+t+"]").children(o).find('>li[lay-id="'+i+'"]');return C.tabClick.call(t[0],{liElem:t}),this},i.prototype.tab=function(a){a=a||{},e.on("click",a.headerElem,function(t){var i=u(a.headerElem).index(u(this));C.tabClick.call(this,{index:i,options:a})})},i.prototype.progress=function(t,i){var a="layui-progress",t=u("."+a+"[lay-filter="+t+"]").find("."+a+"-bar"),a=t.find("."+a+"-text");return t.css("width",function(){return/^.+\/.+$/.test(i)?100*new Function("return "+i)()+"%":i}).attr("lay-percent",i),a.text(i),this},".layui-nav"),f="layui-nav-item",p="layui-nav-bar",b="layui-nav-tree",v="layui-nav-child",m="layui-nav-more",g="layui-anim layui-anim-upbit",C={tabClick:function(t){var i=(t=t||{}).options||{},a=t.liElem||u(this),e=i.headerElem?a.parent():a.parents(".layui-tab").eq(0),i=i.bodyElem?u(i.bodyElem):e.children(".layui-tab-content").children(".layui-tab-item"),l=a.find("a"),l="javascript:;"!==l.attr("href")&&"_blank"===l.attr("target"),n="string"==typeof a.attr("lay-unselect"),s=e.attr("lay-filter"),t="index"in t?t.index:a.parent().children("li").index(a);l||n||(a.addClass(r).siblings().removeClass(r),i.eq(t).addClass(h).siblings().removeClass(h)),layui.event.call(this,c,"tab("+s+")",{elem:e,index:t})},tabDelete:function(t,i){var i=i||u(this).parent(),a=i.parent().children("li").index(i),e=i.closest(".layui-tab"),l=e.children(".layui-tab-content").children(".layui-tab-item"),n=e.attr("lay-filter");i.hasClass(r)&&(i.next()[0]&&i.next().is("li")?C.tabClick.call(i.next()[0],{index:a+1}):i.prev()[0]&&i.prev().is("li")&&C.tabClick.call(i.prev()[0],null,a-1)),i.remove(),l.eq(a).remove(),setTimeout(function(){C.tabAuto()},50),layui.event.call(this,c,"tabDelete("+n+")",{elem:e,index:a})},tabAuto:function(l){var n="layui-tab-more",s="layui-tab-bar",o="layui-tab-close",c=this;u(".layui-tab").each(function(){var t,i=u(this),a=i.children(".layui-tab-title"),e=(i.children(".layui-tab-content").children(".layui-tab-item"),'lay-stope="tabmore"'),e=u('');c===window&&d.ie,i.attr("lay-allowclose")&&a.find("li").each(function(){var t,i=u(this);i.find("."+o)[0]||((t=u('')).on("click",C.tabDelete),i.append(t))}),"string"!=typeof i.attr("lay-unauto")&&(a.prop("scrollWidth")>a.outerWidth()+1||a.find("li").length&&a.height()>(t=a.find("li").eq(0).height())+t/2?("change"===l&&a.data("LAY_TAB_CHANGE")&&a.addClass(n),a.find("."+s)[0]||(a.append(e),i.attr("overflow",""),e.on("click",function(t){var i=a.hasClass(n);a[i?"removeClass":"addClass"](n)}))):(a.find("."+s).remove(),i.removeAttr("overflow")))})},hideTabMore:function(t){var i=u(".layui-tab-title");!0!==t&&"tabmore"===u(t.target).attr("lay-stope")||(i.removeClass("layui-tab-more"),i.find(".layui-tab-bar").attr("title",""))},clickThis:function(){var t=u(this),i=t.closest(y),a=i.attr("lay-filter"),e=t.parent(),l=t.siblings("."+v),n="string"==typeof e.attr("lay-unselect");if("javascript:;"!==t.attr("href")&&"_blank"===t.attr("target")||n||l[0]||(i.find("."+r).removeClass(r),e.addClass(r)),i.hasClass(b)){var n=f+"ed",s=!e.hasClass(n),o=function(){u(this).css({display:""}),i.children("."+p).css({opacity:0})};if(l.is(":animated"))return;l.removeClass(g),l[0]&&(s?(l.slideDown(200,o),e.addClass(n)):(e.removeClass(n),l.show().slideUp(200,o)),"string"!=typeof i.attr("lay-accordion")&&"all"!==i.attr("lay-shrink")||((s=e.siblings("."+n)).removeClass(n),s.children("."+v).show().stop().slideUp(200,o)))}layui.event.call(this,c,"nav("+a+")",t)},collapse:function(){var t=u(this),i=t.find(".layui-colla-icon"),a=t.siblings(".layui-colla-content"),e=t.parents(".layui-collapse").eq(0),l=e.attr("lay-filter"),n="none"===a.css("display");"string"==typeof e.attr("lay-accordion")&&((e=e.children(".layui-colla-item").children("."+h)).siblings(".layui-colla-title").children(".layui-colla-icon").html(""),e.removeClass(h)),a[n?"addClass":"removeClass"](h),i.html(n?"":""),layui.event.call(this,c,"collapse("+l+")",{title:t,content:a,show:n})}},a=(i.prototype.render=i.prototype.init=function(t,i){var a=i?'[lay-filter="'+i+'"]':"",i={tab:function(){C.tabAuto.call({})},nav:function(){var s={},o={},c={},r="layui-nav-title";u(y+a).each(function(t){var i=u(this),a=u(''),e=i.find("."+f);i.find("."+p)[0]||(i.append(a),(i.hasClass(b)?e.find("dd,>."+r):e).on("mouseenter",function(){!function(t,i,a){var e,l=u(this),n=l.find("."+v);i.hasClass(b)?n[0]||(e=l.children("."+r),t.css({top:l.offset().top-i.offset().top,height:(e[0]?e:l).outerHeight(),opacity:1})):(n.addClass(g),n.hasClass("layui-nav-child-c")&&n.css({left:-(n.outerWidth()-l.width())/2}),n[0]?t.css({left:t.position().left+t.width()/2,width:0,opacity:0}):t.css({left:l.position().left+parseFloat(l.css("marginLeft")),top:l.position().top+l.height()-t.height()}),s[a]=setTimeout(function(){t.css({width:n[0]?0:l.width(),opacity:n[0]?0:1})},d.ie&&d.ie<10?0:200),clearTimeout(c[a]),"block"===n.css("display")&&clearTimeout(o[a]),o[a]=setTimeout(function(){n.addClass(h),l.find("."+m).addClass(m+"d")},300))}.call(this,a,i,t)}).on("mouseleave",function(){i.hasClass(b)?a.css({height:0,opacity:0}):(clearTimeout(o[t]),o[t]=setTimeout(function(){i.find("."+v).removeClass(h),i.find("."+m).removeClass(m+"d")},300))}),i.on("mouseleave",function(){clearTimeout(s[t]),c[t]=setTimeout(function(){i.hasClass(b)||a.css({width:0,left:a.position().left+a.width()/2,opacity:0})},200)})),e.find("a").each(function(){var t=u(this);t.parent();t.siblings("."+v)[0]&&!t.children("."+m)[0]&&t.append(''),t.off("click",C.clickThis).on("click",C.clickThis)})})},breadcrumb:function(){u(".layui-breadcrumb"+a).each(function(){var t=u(this),i="lay-separator",a=t.attr(i)||"/",e=t.find("a");e.next("span["+i+"]")[0]||(e.each(function(t){t!==e.length-1&&u(this).after(""+a+"")}),t.css("visibility","visible"))})},progress:function(){var e="layui-progress";u("."+e+a).each(function(){var t=u(this),i=t.find(".layui-progress-bar"),a=i.attr("lay-percent");i.css("width",function(){return/^.+\/.+$/.test(a)?100*new Function("return "+a)()+"%":a}),t.attr("lay-showpercent")&&setTimeout(function(){i.html(''+a+"")},350)})},collapse:function(){u(".layui-collapse"+a).each(function(){u(this).find(".layui-colla-item").each(function(){var t=u(this),i=t.find(".layui-colla-title"),t="none"===t.find(".layui-colla-content").css("display");i.find(".layui-colla-icon").remove(),i.append(''+(t?"":"")+""),i.off("click",C.collapse).on("click",C.collapse)})})}};return i[t]?i[t]():layui.each(i,function(t,i){i()})},new i),e=u(document);u(function(){a.render()}),e.on("click",".layui-tab-title li",C.tabClick),u(window).on("resize",C.tabAuto),t(c,a)});layui.define(["lay","layer"],function(e){"use strict";var x=layui.$,a=layui.lay,i=layui.layer,b=layui.device(),t="upload",c="layui_"+t+"_index",s={config:{},index:layui[t]?layui[t].index+1e4:0,set:function(e){var i=this;return i.config=x.extend({},i.config,e),i},on:function(e,i){return layui.onevent.call(this,t,e,i)}},o=function(){var i=this,e=i.config.id;return{upload:function(e){i.upload.call(i,e)},reload:function(e){i.reload.call(i,e)},config:(o.that[e]=i).config}},l="layui-upload-file",r="layui-upload-form",F="layui-upload-iframe",w="layui-upload-choose",L="UPLOADING",z=function(e){var i=this;i.index=++s.index,i.config=x.extend({},i.config,s.config,e),i.render()};z.prototype.config={accept:"images",exts:"",auto:!0,bindAction:"",url:"",force:"",field:"file",acceptMime:"",method:"post",data:{},drag:!0,size:0,number:0,multiple:!1,text:{"cross-domain":"Cross-domain requests are not supported","data-format-error":"Please return JSON data format","check-error":"",error:"","limit-number":null,"limit-size":null}},z.prototype.reload=function(e){var i=this;i.config=x.extend({},i.config,e),i.render(!0)},z.prototype.render=function(e){var i=this,t=i.config,n=x(t.elem);return 1"].join("")),n=i.elem.next();(n.hasClass(l)||n.hasClass(r))&&n.remove(),b.ie&&b.ie<10&&i.elem.wrap('
      '),e.isFile()?(e.elemFile=i.elem,i.field=i.elem[0].name):i.elem.after(t),b.ie&&b.ie<10&&e.initIE()},z.prototype.initIE=function(){var t,e=this.config,i=x(''),n=x(['
      ',""].join(""));x("#"+F)[0]||x("body").append(i),e.elem.next().hasClass(r)||(this.elemFile.wrap(n),e.elem.next("."+r).append((t=[],layui.each(e.data,function(e,i){i="function"==typeof i?i():i,t.push('')}),t.join(""))))},z.prototype.msg=function(e){return i.msg(e,{icon:2,shift:6})},z.prototype.isFile=function(){var e=this.config.elem[0];if(e)return"input"===e.tagName.toLocaleLowerCase()&&"file"===e.type},z.prototype.preview=function(n){window.FileReader&&layui.each(this.chooseFiles,function(e,i){var t=new FileReader;t.readAsDataURL(i),t.onload=function(){n&&n(e,i,this.result)}})},z.prototype.upload=function(e,i){var t,n,a,o,u=this,f=u.config,c=f.text||{},l=u.elemFile[0],s=function(){return e||u.files||u.chooseFiles||l.files},r=function(){var a=0,o=0,l=s(),r=function(){f.multiple&&a+o===u.fileLength&&"function"==typeof f.allDone&&f.allDone({total:u.fileLength,successful:a,failed:o})},t=function(t){var n=new FormData,i=function(e){t.unified?layui.each(l,function(e,i){delete i[L]}):delete e[L]};if(layui.each(f.data,function(e,i){i="function"==typeof i?t.unified?i():i(t.index,t.file):i,n.append(e,i)}),t.unified)layui.each(l,function(e,i){i[L]||(i[L]=!0,n.append(f.field,i))});else{if(t.file[L])return;n.append(f.field,t.file),t.file[L]=!0}var e={url:f.url,type:"post",data:n,dataType:f.dataType||"json",contentType:!1,processData:!1,headers:f.headers||{},success:function(e){f.unified?a+=u.fileLength:a++,p(t.index,e),r(t.index),i(t.file)},error:function(e){f.unified?o+=u.fileLength:o++,u.msg(c.error||["Upload failed, please try again.","status: "+(e.status||"")+" - "+(e.statusText||"error")].join("
      ")),m(t.index),r(t.index),i(t.file)}};"function"==typeof f.progress&&(e.xhr=function(){var e=x.ajaxSettings.xhr();return e.upload.addEventListener("progress",function(e){var i;e.lengthComputable&&(i=Math.floor(e.loaded/e.total*100),f.progress(i,(f.item||f.elem)[0],e,t.index))}),e}),x.ajax(e)};f.unified?t({unified:!0,index:0}):layui.each(l,function(e,i){t({index:e,file:i})})},d=function(){var n=x("#"+F);u.elemFile.parent().submit(),clearInterval(z.timer),z.timer=setInterval(function(){var e,i=n.contents().find("body");try{e=i.text()}catch(t){u.msg(c["cross-domain"]),clearInterval(z.timer),m()}e&&(clearInterval(z.timer),i.html(""),p(0,e))},30)},p=function(e,i){if(u.elemFile.next("."+w).remove(),l.value="","json"===f.force&&"object"!=typeof i)try{i=JSON.parse(i)}catch(t){return i={},u.msg(c["data-format-error"])}"function"==typeof f.done&&f.done(i,e||0,function(e){u.upload(e)})},m=function(e){f.auto&&(l.value=""),"function"==typeof f.error&&f.error(e||0,function(e){u.upload(e)})},h=f.exts,g=(n=[],layui.each(e||u.chooseFiles,function(e,i){n.push(i.name)}),n),v={preview:function(e){u.preview(e)},upload:function(e,i){var t={};t[e]=i,u.upload(t)},pushFile:function(){return u.files=u.files||{},layui.each(u.chooseFiles,function(e,i){u.files[e]=i}),u.files},resetFile:function(e,i,t){i=new File([i],t);u.files=u.files||{},u.files[e]=i},getChooseFiles:function(){return u.chooseFiles}},y={file:"\u6587\u4ef6",images:"\u56fe\u7247",video:"\u89c6\u9891",audio:"\u97f3\u9891"}[f.accept]||"\u6587\u4ef6",g=0===g.length?l.value.match(/[^\/\\]+\..+/g)||[]:g;if(0!==g.length){switch(f.accept){case"file":layui.each(g,function(e,i){if(h&&!RegExp(".\\.("+h+")$","i").test(escape(i)))return t=!0});break;case"video":layui.each(g,function(e,i){if(!RegExp(".\\.("+(h||"avi|mp4|wma|rmvb|rm|flash|3gp|flv")+")$","i").test(escape(i)))return t=!0});break;case"audio":layui.each(g,function(e,i){if(!RegExp(".\\.("+(h||"mp3|wav|mid")+")$","i").test(escape(i)))return t=!0});break;default:layui.each(g,function(e,i){if(!RegExp(".\\.("+(h||"jpg|png|gif|bmp|jpeg|svg|webp")+")$","i").test(escape(i)))return t=!0})}if(t)return u.msg(c["check-error"]||"\u9009\u62e9\u7684"+y+"\u4e2d\u5305\u542b\u4e0d\u652f\u6301\u7684\u683c\u5f0f"),l.value="";if("choose"!==i&&!f.auto||(f.choose&&f.choose(v),"choose"!==i)){if(u.fileLength=(a=0,y=s(),layui.each(y,function(){a++}),a),f.number&&u.fileLength>f.number)return u.msg("function"==typeof c["limit-number"]?c["limit-number"](f,u.fileLength):"\u540c\u65f6\u6700\u591a\u53ea\u80fd\u4e0a\u4f20: "+f.number+" \u4e2a\u6587\u4ef6
      \u60a8\u5f53\u524d\u5df2\u7ecf\u9009\u62e9\u4e86: "+u.fileLength+" \u4e2a\u6587\u4ef6");if(01024*f.size&&(i=1<=(i=f.size/1024)?i.toFixed(2)+"MB":f.size+"KB",l.value="",o=i)}),o)return u.msg("function"==typeof c["limit-size"]?c["limit-size"](f,o):"\u6587\u4ef6\u5927\u5c0f\u4e0d\u80fd\u8d85\u8fc7 "+o);if(!f.before||!1!==f.before(v))b.ie?(9'+e+"")},r=function(t){var n=!0;return layui.each(a.files,function(e,i){if(!(n=!(i.name===t.name)))return!0}),n},u=function(e){var t=function(e){e.ext=e.name.substr(e.name.lastIndexOf(".")+1).toLowerCase(),e.sizes=s.util.parseSize(e.size)};return e instanceof FileList?layui.each(e,function(e,i){t(i)}):t(e),e},f=function(e){var t;return(e=e||[]).length?a.files?(t=[],layui.each(e,function(e,i){r(i)&&t.push(u(i))}),t):u(e):[]};n.elem.off("upload.start").on("upload.start",function(){var e=x(this);a.config.item=e,a.elemFile[0].click()}),b.ie&&b.ie<10||n.elem.off("upload.over").on("upload.over",function(){x(this).attr("lay-over","")}).off("upload.leave").on("upload.leave",function(){x(this).removeAttr("lay-over")}).off("upload.drop").on("upload.drop",function(e,i){var t=x(this),i=f(i.originalEvent.dataTransfer.files);t.removeAttr("lay-over"),o(i),n.auto?a.upload():l(i)}),a.elemFile.on("change",function(){var e=f(this.files);0!==e.length&&(o(e),n.auto?a.upload():l(e))}),n.bindAction.off("upload.action").on("upload.action",function(){a.upload()}),n.elem.data(c)||(n.elem.on("click",function(){a.isFile()||x(this).trigger("upload.start")}),n.drag&&n.elem.on("dragover",function(e){e.preventDefault(),x(this).trigger("upload.over")}).on("dragleave",function(e){x(this).trigger("upload.leave")}).on("drop",function(e){e.preventDefault(),x(this).trigger("upload.drop",e)}),n.bindAction.on("click",function(){x(this).trigger("upload.action")}),n.elem.data(c,n.id))},s.util={parseSize:function(e,i){var t,n;return i=i||2,null!=e&&e?(t="string"==typeof e?parseFloat(e):e,n=Math.floor(Math.log(t)/Math.log(1024)),(e=(e=t/Math.pow(1024,n))%1==0?e:parseFloat(e.toFixed(i)))+["Bytes","Kb","Mb","Gb","Tb","Pb","Eb","Zb","Yb"][n]):"0"}},o.that={},o.getThis=function(e){var i=o.that[e];return i||hint.error(e?t+" instance with ID '"+e+"' not found":"ID argument required"),i},s.render=function(e){e=new z(e);return o.call(e)},e(t,s)});layui.define(["lay","layer","util"],function(e){"use strict";var T=layui.$,h=layui.layer,N=layui.util,l=layui.hint(),$=(layui.device(),"form"),u=".layui-form",_="layui-this",F="layui-hide",A="layui-disabled",t=function(){this.config={verify:{required:function(e){if(!/[\S]+/.test(e))return"\u5fc5\u586b\u9879\u4e0d\u80fd\u4e3a\u7a7a"},phone:function(e){if(e&&!/^1\d{10}$/.test(e))return"\u624b\u673a\u53f7\u683c\u5f0f\u4e0d\u6b63\u786e"},email:function(e){if(e&&!/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(e))return"\u90ae\u7bb1\u683c\u5f0f\u4e0d\u6b63\u786e"},url:function(e){if(e&&!/^(#|(http(s?)):\/\/|\/\/)[^\s]+\.[^\s]+$/.test(e))return"\u94fe\u63a5\u683c\u5f0f\u4e0d\u6b63\u786e"},number:function(e){if(e&&isNaN(e))return"\u53ea\u80fd\u586b\u5199\u6570\u5b57"},date:function(e){if(e&&!/^(\d{4})[-\/](\d{1}|0\d{1}|1[0-2])([-\/](\d{1}|0\d{1}|[1-2][0-9]|3[0-1]))*$/.test(e))return"\u65e5\u671f\u683c\u5f0f\u4e0d\u6b63\u786e"},identity:function(e){if(e&&!/(^\d{15}$)|(^\d{17}(x|X|\d)$)/.test(e))return"\u8eab\u4efd\u8bc1\u53f7\u683c\u5f0f\u4e0d\u6b63\u786e"}},autocomplete:null}},i=(t.prototype.set=function(e){return T.extend(!0,this.config,e),this},t.prototype.verify=function(e){return T.extend(!0,this.config.verify,e),this},t.prototype.getFormElem=function(e){return T(u+(e?'[lay-filter="'+e+'"]':""))},t.prototype.on=function(e,t){return layui.onevent.call(this,$,e,t)},t.prototype.val=function(e,i){return this.getFormElem(e).each(function(e,t){var a=T(this);layui.each(i,function(e,t){var i,e=a.find('[name="'+e+'"]');e[0]&&("checkbox"===(i=e[0].type)?e[0].checked=t:"radio"===i?e.each(function(){this.checked=this.value==t+""}):e.val(t))})}),r.render(null,e),this.getValue(e)},t.prototype.getValue=function(e,t){t=t||this.getFormElem(e);var a={},n={},e=t.find("input,select,textarea");return layui.each(e,function(e,t){var i;T(this);t.name=(t.name||"").replace(/^\s*|\s*&/,""),t.name&&(/^.*\[\]$/.test(t.name)&&(i=t.name.match(/^(.*)\[\]$/g)[0],a[i]=0|a[i],i=t.name.replace(/^(.*)\[\]$/,"$1["+a[i]+++"]")),/^(checkbox|radio)$/.test(t.type)&&!t.checked||(n[i||t.name]=t.value))}),n},t.prototype.render=function(e,t){var i=this.config,a=T(u+(t?'[lay-filter="'+t+'"]':"")),n={input:function(e){var e=e||a.find("input,textarea"),t=(i.autocomplete&&e.attr("autocomplete",i.autocomplete),function(e,t){var i=e.val(),a=Number(i),n=Number(e.attr("step"))||1,l=Number(e.attr("min")),r=Number(e.attr("max")),s=Number(e.attr("lay-precision")),o="click"!==t&&""===i,c="init"===t;isNaN(a)||("click"===t&&(a=!!T(this).index()?a-n:a+n),t=function(e){return((e.toString().match(/\.(\d+$)/)||[])[1]||"").length},s=0<=s?s:Math.max(t(n),t(i)),o||(c||r<=(a=a<=l?l:a)&&(a=r),0===s?a=parseInt(a):0'),e=layui.isArray(i.value)?i.value:[i.value],e=T((a=[],layui.each(e,function(e,t){a.push('')}),a.join(""))),n=(t.append(e),i.split&&t.addClass("layui-input-split"),i.className&&t.addClass(i.className),r.next("."+u)),l=(n[0]&&n.remove(),r.parent().hasClass(o)||r.wrap('
      '),r.next("."+c));l[0]?((n=l.find("."+u))[0]&&n.remove(),l.prepend(t),r.css("padding-right",function(){return(r.closest(".layui-input-group")[0]?0:l.outerWidth())+t.outerWidth()})):(t.addClass(c),r.after(t)),"auto"===i.show&&d(t,r.val()),"function"==typeof i.init&&i.init.call(this,r,i),r.on("input propertychange",function(){var e=this.value;"auto"===i.show&&d(t,e)}),r.on("blur",function(){"function"==typeof i.blur&&i.blur.call(this,r,i)}),e.on("click",function(){var e=r.attr("lay-filter");T(this).hasClass(A)||("function"==typeof i.click&&i.click.call(this,r,i),layui.event.call(this,$,"input-affix("+e+")",{elem:r[0],affix:s,options:i}))})},f={eye:{value:"eye-invisible",click:function(e,t){var i="LAY_FORM_INPUT_AFFIX_SHOW",a=e.data(i);e.attr("type",a?"password":"text").data(i,!a),n({value:a?"eye-invisible":"eye"})}},clear:{value:"clear",click:function(e){e.val("").focus(),d(T(this).parent(),null)},show:"auto",disabled:e},number:{value:["up","down"],split:!0,className:"layui-input-number",disabled:r.is("[disabled]"),init:function(e){t.call(this,e,"init")},click:function(e){t.call(this,e,"click")},blur:function(e){t.call(this,e,"blur")}}};n()})},select:function(e){var m,u="\u8bf7\u9009\u62e9",g="layui-form-select",b="layui-select-title",x="layui-select-none",k="layui-select-create-option",C="",e=e||a.find("select"),w=function(e,t){T(e.target).parent().hasClass(b)&&!t||((e=T("."+g)).removeClass(g+"ed "+g+"up"),e.hasClass("layui-select-creatable")&&e.children("dl").children("."+k).remove(),m&&C&&m.val(C)),m=null},d=function(n,e,t,c){var s,u,a,i,o,d,l,r=T(this),f=n.find("."+b),h=f.find("input"),y=n.find("dl"),p=(y.children("dd"),y.children("dt")),v=this.selectedIndex;e||(u=r.attr("lay-search"),a=!(!lay.ie||"10"!==lay.ie&&"11"!==lay.ie||!h.attr("placeholder")),i=function(){var e=n.offset().top+n.outerHeight()+5-j.scrollTop(),t=y.outerHeight(),i=y.children("dd");v=r[0].selectedIndex,n.addClass(g+"ed"),i.removeClass(F),p.removeClass(F),s=null,i.removeClass(_),0<=v&&i.eq(v).addClass(_),e+t>j.height()&&t<=e&&n.addClass(g+"up"),d(),a&&y.off("mousedown.select.ieph").on("mousedown.select.ieph",function(){h[0].__ieph=!0,setTimeout(function(){h[0].__ieph=!1},60)})},o=function(e){n.removeClass(g+"ed "+g+"up"),h.blur(),s=null,c&&y.children("."+k).remove(),e||l(h.val(),function(e){var t=r[0].selectedIndex;e&&(C=T(r[0].options[t]).html(),0===t&&C===h.attr("placeholder")&&(C=""),h.val(C||""))})},d=function(){var e,t,i=y.children("dd."+_);i[0]&&(e=i.position().top,t=y.height(),i=i.height(),t")).addClass(k).attr("lay-value",i).html(N.escape(i)),y.append(t)):e?y.find("."+x)[0]||y.append('

      \u65e0\u5339\u914d\u9879

      '):y.find("."+x).remove()},"keyup"),""===i&&(r.val(""),y.find("."+_).removeClass(_),(r[0].options[0]||{}).value||y.children("dd:eq(0)").addClass(_),y.find("."+x).remove(),c)&&y.children("."+k).remove(),void d()))},50)).on("blur",function(e){var t=r[0].selectedIndex;m=h,C=T(r[0].options[t]).text(),0===t&&C===h.attr("placeholder")&&(C=""),setTimeout(function(){l(h.val(),function(e){C||h.val("")},"blur")},200)}),y.on("click","dd",function(){var e,t=T(this),i=t.attr("lay-value"),a=r.attr("lay-filter");return t.hasClass(A)||(t.hasClass("layui-select-tips")?h.val(""):(h.val(t.text()),t.addClass(_)),c&&t.hasClass(k)&&(t.removeClass(k),(e=T("
      "].join(""));i.after(l),function(a,n){var l=T(this);a.on("click",function(){var e=T(this),t=l.attr("lay-filter"),e=e.next("*[lay-checkbox]")[0]?e.next().html():l.attr("title")||"",i=l.attr("lay-skin")||"primary",e="switch"===i?e.split("|"):[e];l[0].disabled||(l[0].indeterminate&&(l[0].indeterminate=!1,a.find("."+c.SUBTRA).removeClass(c.SUBTRA).addClass("layui-icon-ok")),l[0].checked?(l[0].checked=!1,a.removeClass(n[1]),"switch"===i&&a.children("div").html(e[1])):(l[0].checked=!0,a.addClass(n[1]),"switch"===i&&a.children("div").html(e[0])),layui.event.call(l[0],$,n[2]+"("+t+")",{elem:l[0],value:l[0].value,othis:a}))})}.call(this,l,r)})},radio:function(e){var o="layui-form-radio",c=["layui-icon-radio","layui-icon-circle"],e=e||a.find("input[type=radio]");e.each(function(e,t){var i=T(this),a=i.next("."+o),n=this.disabled,l=i.attr("lay-skin");if("string"==typeof i.attr("lay-ignore"))return i.show();a[0]&&a.remove();var a=N.escape(t.title||""),r=[],s=(i.next("[lay-radio]")[0]&&(a=(s=i.next()).html()||"",1",'',"
      "+a+"
      ","
      "].join("")));i.after(s),function(a){var n=T(this),l="layui-anim-scaleSpring";a.on("click",function(){var e=n[0].name,t=n.parents(u),i=n.attr("lay-filter"),e=t.find("input[name="+e.replace(/(\.|#|\[|\])/g,"\\$1")+"]");n[0].disabled||(layui.each(e,function(){var e=T(this).next("."+o);this.checked=!1,e.removeClass(o+"ed"),e.children(".layui-icon").removeClass(l+" "+c[0]).addClass(c[1])}),n[0].checked=!0,a.addClass(o+"ed"),a.children(".layui-icon").addClass(l+" "+c[0]),layui.event.call(n[0],$,"radio("+i+")",{elem:n[0],value:n[0].value,othis:a}))})}.call(this,s)})}},t=function(){layui.each(n,function(e,t){t()})};return"object"===layui.type(e)?T(e).is(u)?(a=T(e),t()):e.each(function(e,t){var i=T(t);i.closest(u).length&&("SELECT"===t.tagName?n.select(i):"INPUT"===t.tagName&&("checkbox"===(t=t.type)||"radio"===t?n[t](i):n.input(i)))}):e?n[e]?n[e]():l.error('\u4e0d\u652f\u6301\u7684 "'+e+'" \u8868\u5355\u6e32\u67d3'):t(),this},t.prototype.validate=function(e){var u,d=this.config.verify,f="layui-form-danger";return!(e=T(e))[0]||(e.attr("lay-verify")!==undefined||!1!==this.validate(e.find("*[lay-verify]")))&&(layui.each(e,function(e,r){var s=T(this),t=(s.attr("lay-verify")||"").split("|"),o=s.attr("lay-vertype"),c=T.trim(s.val());if(s.removeClass(f),layui.each(t,function(e,t){var i="",a=d[t];if(a){var n="function"==typeof a?i=a(c,r):!a[0].test(c),l="select"===r.tagName.toLowerCase()||/^(checkbox|radio)$/.test(r.type),i=i||a[1];if("required"===t&&(i=s.attr("lay-reqtext")||i),n)return"tips"===o?h.tips(i,"string"!=typeof s.attr("lay-ignore")&&l?s.next():s,{tips:1}):"alert"===o?h.alert(i,{title:"\u63d0\u793a",shadeClose:!0}):/\b(string|number)\b/.test(typeof i)&&h.msg(i,{icon:5,shift:6}),setTimeout(function(){(l?s.next().find("input"):r).focus()},7),s.addClass(f),u=!0}}),u)return u}),!u)},t.prototype.submit=function(e,t){var i={},a=T(this),e="string"==typeof e?e:a.attr("lay-filter"),n=this.getFormElem?this.getFormElem(e):a.parents(u).eq(0),l=n.find("*[lay-verify]");return!!r.validate(l)&&(i=r.getValue(null,n),l={elem:this.getFormElem?window.event&&window.event.target:this,form:(this.getFormElem?n:a.parents("form"))[0],field:i},"function"==typeof t&&t(l),layui.event.call(this,$,"submit("+e+")",l))}),r=new t,t=T(document),j=T(window);T(function(){r.render()}),t.on("reset",u,function(){var e=T(this).attr("lay-filter");setTimeout(function(){r.render(null,e)},50)}),t.on("submit",u,i).on("click","*[lay-submit]",i),e($,r)});layui.define(["lay","laytpl","laypage","form","util"],function(n){"use strict";var f=layui.$,d=layui.lay,m=layui.laytpl,O=layui.laypage,p=layui.layer,v=layui.form,g=layui.util,b=layui.hint(),x=layui.device(),k={config:{checkName:"LAY_CHECKED",indexName:"LAY_INDEX",numbersName:"LAY_NUM",disabledName:"LAY_DISABLED"},cache:{},index:layui.table?layui.table.index+1e4:0,set:function(e){return this.config=f.extend({},this.config,e),this},on:function(e,t){return layui.onevent.call(this,N,e,t)}},w=function(){var a=this,e=a.config,i=e.id||e.index;return{config:e,reload:function(e,t){a.reload.call(a,e,t)},reloadData:function(e,t){k.reloadData(i,e,t)},setColsWidth:function(){a.setColsWidth.call(a)},resize:function(){a.resize.call(a)}}},C=function(e){var t=w.that[e];return t||b.error(e?"The table instance with ID '"+e+"' not found":"ID argument required"),t||null},l=function(e){var t=w.config[e];return t||b.error(e?"The table instance with ID '"+e+"' not found":"ID argument required"),t||null},T=function(e){var t=this.config||{},a=(e=e||{}).item3,i=e.content;"numbers"===a.type&&(i=e.tplData[k.config.numbersName]);("escape"in a?a:t).escape&&(i=g.escape(i));t=e.text&&a.exportTemplet||a.templet||a.toolbar;return t&&(i="function"==typeof t?t.call(a,e.tplData,e.obj):m(function(e){try{return d(e).html()}catch(t){return e}}(t)||String(i)).render(f.extend({LAY_COL:a},e.tplData))),e.text?f("
      "+i+"
      ").text():i},N="table",R="lay-"+N+"-id",t=".layui-table",D="layui-hide",y="layui-hide-v",h="layui-none",L="layui-table-view",o=".layui-table-header",E=".layui-table-body",u=".layui-table-fixed-r",P=".layui-table-pageview",A=".layui-table-sort",_="layui-table-checked",M="layui-table-edit",W="layui-table-hover",I="laytable-cell-group",H="layui-table-col-special",j="layui-table-tool-panel",S="layui-table-expanded",F="LAY_TABLE_MOVE_DICT",e=function(e){return['
      ',"","{{# layui.each(d.data.cols, function(i1, item1){ }}","","{{# layui.each(item1, function(i2, item2){ }}",'{{# if(item2.fixed && item2.fixed !== "right"){ left = true; } }}','{{# if(item2.fixed === "right"){ right = true; } }}',(e=e||{}).fixed&&"right"!==e.fixed?'{{# if(item2.fixed && item2.fixed !== "right"){ }}':"right"===e.fixed?'{{# if(item2.fixed === "right"){ }}':"","{{# var isSort = !(item2.colGroup) && item2.sort; }}",'",e.fixed?"{{# }; }}":"","{{# }); }}","","{{# }); }}","","
      ','
      ','{{# if(item2.type === "checkbox"){ }}','',"{{# } else { }}",'{{-item2.title||""}}',"{{# if(isSort){ }}",'',"{{# } }}","{{# } }}","
      ","
      "].join("")},a=['',"","
      "].join(""),s=[,"{{# if(d.data.toolbar){ }}",'
      ','
      ','
      ',"
      ","{{# } }}",'
      ',"{{# if(d.data.loading){ }}",'
      ','
      ','{{# if(typeof d.data.loading === "string"){ }}',"{{- d.data.loading}}","{{# } else{ }}",'',"{{# } }}","
      ","
      ","{{# } }}","{{# var left, right; }}",'
      ',e(),"
      ",'
      ',a,"
      ","{{# if(left){ }}",'
      ','
      ',e({fixed:!0}),"
      ",'
      ',a,"
      ","
      ","{{# }; }}","{{# if(right){ }}",'
      ','
      ',e({fixed:"right"}),'
      ',"
      ",'
      ',a,"
      ","
      ","{{# }; }}","
      ","{{# if(d.data.totalRow){ }}",'
      ','','',"
      ","
      ","{{# } }}",'
      ','
      ',"
      "].join(""),r=f(window),z=f(document),i=function(e){this.index=++k.index,this.config=f.extend({},this.config,k.config,e),this.render()},c=(i.prototype.config={limit:10,loading:!0,escape:!0,cellMinWidth:60,cellMaxWidth:Number.MAX_VALUE,editTrigger:"click",defaultToolbar:["filter","exports","print"],defaultContextmenu:!0,autoSort:!0,text:{none:"\u65e0\u6570\u636e"},cols:[]},i.prototype.render=function(e){var t=this,a=t.config,i=(a.elem=f(a.elem),a.where=a.where||{},a.id="id"in a?a.id:a.elem.attr("id")||t.index);if(w.that[i]=t,(w.config[i]=a).request=f.extend({pageName:"page",limitName:"limit"},a.request),a.response=f.extend({statusName:"code",statusCode:0,msgName:"msg",dataName:"data",totalRowName:"totalRow",countName:"count"},a.response),null!==a.page&&"object"==typeof a.page&&(a.limit=a.page.limit||a.limit,a.limits=a.page.limits||a.limits,t.page=a.page.curr=a.page.curr||1,delete a.page.elem,delete a.page.jump),!a.elem[0])return t;if(a.elem.attr("lay-filter")||a.elem.attr("lay-filter",a.id),"reloadData"===e)return t.pullData(t.page,{type:"reloadData"});a.index=t.index,t.key=a.id||a.index,t.setInit(),a.height&&/^full-.+$/.test(a.height)?(t.fullHeightGap=a.height.split("-")[1],a.height=r.height()-(parseFloat(t.fullHeightGap)||0)):a.height&&/^#\w+\S*-.+$/.test(a.height)?(i=a.height.split("-"),t.parentHeightGap=i.pop(),t.parentDiv=i.join("-"),a.height=f(t.parentDiv).height()-(parseFloat(t.parentHeightGap)||0)):"function"==typeof a.height&&(t.customHeightFunc=a.height,a.height=t.customHeightFunc());var l,e=a.elem,i=e.next("."+L),n=t.elem=f("
      ");n.addClass((l=[L,L+"-"+t.index,"layui-form","layui-border-box"],a.className&&l.push(a.className),l.join(" "))).attr(((l={"lay-filter":"LAY-TABLE-FORM-DF-"+t.index,style:(l=[],a.width&&l.push("width:"+a.width+"px;"),l.join(""))})[R]=a.id,l)).html(m(s,{open:"{{",close:"}}"}).render({data:a,index:t.index})),t.renderStyle(),i[0]&&(t.resizeObserver&&t.resizeObserver.unobserve(t.elem[0]),i.remove()),e.after(n),t.layTool=n.find(".layui-table-tool"),t.layBox=n.find(".layui-table-box"),t.layHeader=n.find(o),t.layMain=n.find(".layui-table-main"),t.layBody=n.find(E),t.layFixed=n.find(".layui-table-fixed"),t.layFixLeft=n.find(".layui-table-fixed-l"),t.layFixRight=n.find(u),t.layTotal=n.find(".layui-table-total"),t.layPage=n.find(".layui-table-page"),t.renderToolbar(),t.renderPagebar(),t.fullSize(),t.pullData(t.page),t.events()},i.prototype.initOpts=function(e){this.config;e.checkbox&&(e.type="checkbox"),e.space&&(e.type="space"),e.type||(e.type="normal"),"normal"!==e.type&&(e.unresize=!0,e.width=e.width||{checkbox:50,radio:50,space:30,numbers:60}[e.type])},i.prototype.setInit=function(e){var l,a,r=this,d=r.config;if(d.clientWidth=d.width||(l=function(e){var t,a=(e=e||d.elem.parent()).width();try{t="none"===e.css("display")}catch(i){}return!e[0]||a&&!t?a:l(e.parent())})(),"width"===e)return d.clientWidth;d.height=d.maxHeight||d.height,d.css&&-1===d.css.indexOf(L)&&(a=d.css.split("}"),layui.each(a,function(e,t){t&&(a[e]="."+L+"-"+r.index+" "+t)}),d.css=a.join("}"));var c=function(a,e,i,l){var n,o;l?(l.key=[d.index,a,i].join("-"),l.colspan=l.colspan||0,l.rowspan=l.rowspan||0,r.initOpts(l),(n=a+(parseInt(l.rowspan)||1)) td:hover > .layui-table-cell{overflow: auto;}"].concat(x.ie?[".layui-table-edit{height: "+i+";}","td[data-edit]:hover:after{height: "+i+";}"]:[]),function(e,t){t&&o.push(a+" "+t)})),l.css&&o.push(l.css),d.style({target:this.elem[0],text:o.join(""),id:"DF-table-"+n})},i.prototype.renderToolbar=function(){var e=this.config,t=['
      ','
      ','
      '].join(""),a=this.layTool.find(".layui-table-tool-temp"),i=("default"===e.toolbar?a.html(t):"string"==typeof e.toolbar&&(t=f(e.toolbar).html()||"")&&a.html(m(t).render(e)),{filter:{title:"\u7b5b\u9009\u5217",layEvent:"LAYTABLE_COLS",icon:"layui-icon-cols"},exports:{title:"\u5bfc\u51fa",layEvent:"LAYTABLE_EXPORT",icon:"layui-icon-export"},print:{title:"\u6253\u5370",layEvent:"LAYTABLE_PRINT",icon:"layui-icon-print"}}),l=[];"object"==typeof e.defaultToolbar&&layui.each(e.defaultToolbar,function(e,t){t="string"==typeof t?i[t]:t;t&&l.push('
      ')}),this.layTool.find(".layui-table-tool-self").html(l.join(""))},i.prototype.renderPagebar=function(){var e,t=this.config,a=this.layPagebar=f('
      ');t.pagebar&&((e=f(t.pagebar).html()||"")&&a.append(m(e).render(t)),this.layPage.append(a))},i.prototype.setParentCol=function(e,t){var a=this.config,i=this.layHeader.find('th[data-key="'+t+'"]'),l=parseInt(i.attr("colspan"))||0;i[0]&&(t=t.split("-"),t=a.cols[t[1]][t[2]],e?l--:l++,i.attr("colspan",l),i[l?"removeClass":"addClass"](D),t.colspan2=l,t.hide=l<1,a=i.data("parentkey"))&&this.setParentCol(e,a)},i.prototype.setColsPatch=function(){var a=this,e=a.config;layui.each(e.cols,function(e,t){layui.each(t,function(e,t){t.hide&&a.setParentCol(t.hide,t.parentKey)})})},i.prototype.setGroupWidth=function(i){var e,l=this;l.config.cols.length<=1||((e=l.layHeader.find((i?"th[data-key="+i.data("parentkey")+"]>":"")+"."+I)).css("width",0),layui.each(e.get().reverse(),function(){var e=f(this),t=e.parent().data("key"),a=0;l.layHeader.eq(0).find("th[data-parentkey="+t+"]").width(function(e,t){f(this).hasClass(D)||0 tr:first-child > th:last-child")).data("field")&&e.prev()[0]?t(e.prev()):e})()).data("key"),n.cssRules(e,function(e){var t=e.style.width||a.outerWidth();e.style.width=parseFloat(t)+l+"px",0'+(e||"Error")+"");a[0]&&(t.layNone.remove(),a.remove()),t.layFixed.addClass(D),t.layMain.find("tbody").html(""),t.layMain.append(t.layNone=e),t.layTotal.addClass(y),t.layPage.find(P).addClass(y),k.cache[t.key]=[],t.syncCheckAll(),t.renderForm(),t.setColsWidth(),t.loading(!1)},i.prototype.page=1,i.prototype.pullData=function(a,t){var e,i,l=this,n=l.config,o=(n.HAS_SET_COLS_PATCH||l.setColsPatch(),n.HAS_SET_COLS_PATCH=!0,n.request),r=n.response,d=function(){"object"==typeof n.initSort&&l.sort({field:n.initSort.field,type:n.initSort.type,reloadType:t.type})},c=function(e,t){l.setColsWidth(),l.loading(!1),"function"==typeof n.done&&n.done(e,a,e[r.countName],t)};t=t||{},"function"==typeof n.before&&n.before(n),l.startTime=(new Date).getTime(),t.renderData?((e={})[r.dataName]=k.cache[l.key],e[r.countName]=n.url?"object"===layui.type(n.page)?n.page.count:e[r.dataName].length:n.data.length,"object"==typeof n.totalRow&&(e[r.totalRowName]=f.extend({},l.totalRow)),l.renderData({res:e,curr:a,count:e[r.countName],type:t.type,sort:!0}),c(e,"renderData")):n.url?(i={},n.page&&(i[o.pageName]=a,i[o.limitName]=n.limit),o=f.extend(i,n.where),n.contentType&&0==n.contentType.indexOf("application/json")&&(o=JSON.stringify(o)),l.loading(!0),f.ajax({type:n.method||"get",url:n.url,contentType:n.contentType,data:o,dataType:n.dataType||"json",jsonpCallback:n.jsonpCallback,headers:n.headers||{},complete:"function"==typeof n.complete?n.complete:undefined,success:function(e){(e="function"==typeof n.parseData?n.parseData(e)||e:e)[r.statusName]!=r.statusCode?l.errorView(e[r.msgName]||'\u8fd4\u56de\u7684\u6570\u636e\u4e0d\u7b26\u5408\u89c4\u8303\uff0c\u6b63\u786e\u7684\u6210\u529f\u72b6\u6001\u7801\u5e94\u4e3a\uff1a"'+r.statusName+'": '+r.statusCode):(l.totalRow=e[r.totalRowName],l.renderData({res:e,curr:a,count:e[r.countName],type:t.type}),d(),n.time=(new Date).getTime()-l.startTime+" ms"),c(e,t.type)},error:function(e,t){l.errorView("\u8bf7\u6c42\u5f02\u5e38\uff0c\u9519\u8bef\u63d0\u793a\uff1a"+t),"function"==typeof n.error&&n.error(e,t)}})):"array"===layui.type(n.data)&&(e={},i=a*n.limit-n.limit,o=n.data.concat(),e[r.dataName]=n.page?o.splice(i,n.limit):o,e[r.countName]=n.data.length,"object"==typeof n.totalRow&&(e[r.totalRowName]=f.extend({},n.totalRow)),l.totalRow=e[r.totalRowName],l.renderData({res:e,curr:a,count:e[r.countName],type:t.type}),d(),c(e,t.type))},i.prototype.eachCols=function(e){return k.eachCols(null,e,this.config.cols),this},i.prototype.col=function(e){try{return e=e.split("-"),this.config.cols[e[1]][e[2]]||{}}catch(t){return b.error(t),{}}},i.prototype.getTrHtml=function(a,l,n,e){var s=this,u=s.config,y=e&&e.trs||[],h=e&&e.trs_fixed||[],p=e&&e.trs_fixed_r||[];return n=n||1,layui.each(a,function(e,o){var i=[],r=[],d=[],c=e+u.limit*(n-1)+1;if("object"!=typeof o){a[e]=o={LAY_KEY:o};try{k.cache[s.key][e]=o}catch(t){}}"array"===layui.type(o)&&0===o.length||(o[k.config.numbersName]=c,l||(o[k.config.indexName]=e),s.eachCols(function(e,l){var t,e=l.field||e,a=l.key,n=o[e];n!==undefined&&null!==n||(n=""),l.colGroup||(e=['','
      "+function(){var e,t=f.extend(!0,{LAY_COL:l},o),a=k.config.checkName,i=k.config.disabledName;switch(l.type){case"checkbox":return'';case"radio":return'';case"numbers":return c}return l.toolbar?m(f(l.toolbar).html()||"").render(t):T.call(s,{item3:l,content:n,tplData:t})}(),"
      "].join(""),i.push(e),l.fixed&&"right"!==l.fixed&&r.push(e),"right"===l.fixed&&d.push(e))}),e=['data-index="'+e+'"'],o[k.config.checkName]&&e.push('class="'+_+'"'),e=e.join(" "),y.push(""+i.join("")+""),h.push(""+r.join("")+""),p.push(""+d.join("")+""))}),{trs:y,trs_fixed:h,trs_fixed_r:p}},k.getTrHtml=function(e,t){e=C(e);return e.getTrHtml(t,null,e.page)},i.prototype.renderData=function(e){var a=this,i=a.config,t=e.res,l=e.curr,n=a.count=e.count,o=e.sort,r=t[i.response.dataName]||[],t=t[i.response.totalRowName],d=[],c=[],s=[],u=function(){if(!o&&a.sortKey)return a.sort({field:a.sortKey.field,type:a.sortKey.sort,pull:!0,reloadType:e.type});a.getTrHtml(r,o,l,{trs:d,trs_fixed:c,trs_fixed_r:s}),"fixed"===i.scrollPos&&"reloadData"===e.type||a.layBody.scrollTop(0),"reset"===i.scrollPos&&a.layBody.scrollLeft(0),a.layMain.find("."+h).remove(),a.layMain.find("tbody").html(d.join("")),a.layFixLeft.find("tbody").html(c.join("")),a.layFixRight.find("tbody").html(s.join("")),a.syncCheckAll(),a.renderForm(),a.fullSize(),a.haveInit?a.scrollPatch():setTimeout(function(){a.scrollPatch()},50),a.haveInit=!0,p.close(a.tipsIndex)};return k.cache[a.key]=r,a.layTotal[0==r.length?"addClass":"removeClass"](y),a.layPage[i.page||i.pagebar?"removeClass":"addClass"](D),a.layPage.find(P)[!i.page||0==n||0===r.length&&1==l?"addClass":"removeClass"](y),0===r.length?a.errorView(i.text.none):(a.layFixLeft.removeClass(D),o?u():(u(),a.renderTotal(r,t),a.layTotal&&a.layTotal.removeClass(D),void(i.page&&(i.page=f.extend({elem:"layui-table-page"+i.index,count:n,limit:i.limit,limits:i.limits||[10,20,30,40,50,60,70,80,90],groups:3,layout:["prev","page","next","skip","count","limit"],prev:'',next:'',jump:function(e,t){t||(a.page=e.curr,i.limit=e.limit,a.pullData(e.curr))}},i.page),i.page.count=n,O.render(i.page)))))},k.renderData=function(e){e=C(e);e&&e.pullData(e.page,{renderData:!0,type:"reloadData"})},i.prototype.renderTotal=function(e,o){var r,d=this,c=d.config,s={};c.totalRow&&(layui.each(e,function(e,i){"array"===layui.type(i)&&0===i.length||d.eachCols(function(e,t){var e=t.field||e,a=i[e];t.totalRow&&(s[e]=(s[e]||0)+(parseFloat(a)||0))})}),d.dataTotal=[],r=[],d.eachCols(function(e,t){var a,e=t.field||e,i=o&&o[t.field],l="totalRowDecimals"in t?t.totalRowDecimals:2,l=s[e]?parseFloat(s[e]||0).toFixed(l):"",l=(a=t.totalRowText||"",(n={LAY_COL:t})[e]=l,n=t.totalRow&&T.call(d,{item3:t,content:l,tplData:n})||a,i||n),n=(t.field&&d.dataTotal.push({field:t.field,total:f("
      "+l+"
      ").text()}),['','
      "+("string"==typeof(a=t.totalRow||c.totalRow)?m(a).render(f.extend({TOTAL_NUMS:i||s[e],TOTAL_ROW:o||{},LAY_COL:t},t)):l),"
      "].join(""));r.push(n)}),e=d.layTotal.find(".layui-table-patch"),d.layTotal.find("tbody").html(""+r.join("")+(e.length?e.get(0).outerHTML:"")+""))},i.prototype.getColElem=function(e,t){return e.eq(0).find(".laytable-cell-"+t+":eq(0)")},i.prototype.renderForm=function(e){this.config;var t=this.elem.attr("lay-filter");v.render(e,t)},i.prototype.renderFormByElem=function(a){layui.each(["input","select"],function(e,t){v.render(a.find(t))})},i.prototype.syncCheckAll=function(){var a,e=this,i=e.config,t=e.layHeader.find('input[name="layTableCheckbox"]'),l=k.checkStatus(e.key);t[0]&&(a=l.isAll,e.eachCols(function(e,t){"checkbox"===t.type&&(t[i.checkName]=a)}),t.prop({checked:l.isAll,indeterminate:!l.isAll&&l.data.length}),v.render(t))},i.prototype.setRowActive=function(e,t,a){this.config;e=this.layBody.find('tr[data-index="'+e+'"]');if(t=t||"layui-table-click",a)return e.removeClass(t);e.addClass(t),e.siblings("tr").removeClass(t)},i.prototype.setRowChecked=function(i){var e=this,l=e.config,n="all"===i.index,o="array"===layui.type(i.index),r=(t=e.layBody.find("tr"),n?t:t.filter(o?function(){var e=f(this).data("index");return-1!==i.index.indexOf(e)}:'[data-index="'+i.index+'"]')),t=(i=f.extend({type:"checkbox"},i),k.cache[e.key]),a="checked"in i,d=function(e){return"radio"===i.type||(a?i.checked:!e)},t=(layui.each(t,function(e,t){var a;"array"===layui.type(t)||t[l.disabledName]||(n||(o?-1!==i.index.indexOf(e):Number(i.index)===e)?(a=t[l.checkName]=d(t[l.checkName]),(e=r.filter('[data-index="'+e+'"]'))[a?"addClass":"removeClass"](_),"radio"===i.type&&e.siblings().removeClass(_)):"radio"===i.type&&delete t[l.checkName])}),r.find('input[lay-type="'+({radio:"layTableRadio",checkbox:"layTableCheckbox"}[i.type]||"checkbox")+'"]:not(:disabled)')),c=t.last(),s=c.closest(u);("radio"===i.type&&s.hasClass(D)?t.first():t).prop("checked",d(c.prop("checked"))),e.syncCheckAll(),e.renderForm(i.type)},i.prototype.sort=function(l){var e,t=this,a={},i=t.config,n=i.elem.attr("lay-filter"),o=k.cache[t.key];"string"==typeof(l=l||{}).field&&(r=l.field,t.layHeader.find("th").each(function(e,t){var a=f(this),i=a.data("field");if(i===l.field)return l.field=a,r=i,!1}));try{var r=r||l.field.data("field"),d=l.field.data("key");if(t.sortKey&&!l.pull&&r===t.sortKey.field&&l.type===t.sortKey.sort)return;var c=t.layHeader.find("th .laytable-cell-"+d).find(A);t.layHeader.find("th").find(A).removeAttr("lay-sort"),c.attr("lay-sort",l.type||null),t.layFixed.find("th")}catch(s){b.error("Table modules: sort field '"+r+"' not matched")}t.sortKey={field:r,sort:l.type},i.autoSort&&("asc"===l.type?e=layui.sort(o,r,null,!0):"desc"===l.type?e=layui.sort(o,r,!0,!0):(e=layui.sort(o,k.config.indexName,null,!0),delete t.sortKey,delete i.initSort)),a[i.response.dataName]=e||o,t.renderData({res:a,curr:t.page,count:t.count,sort:!0,type:l.reloadType}),l.fromEvent&&(i.initSort={field:r,type:l.type},layui.event.call(l.field,N,"sort("+n+")",f.extend({config:i},i.initSort)))},i.prototype.loading=function(e){this.config.loading&&this.layBox.find(".layui-table-init").toggleClass(y,!e)},i.prototype.cssRules=function(t,a){var e=this.elem.children("style")[0];d.getStyleRules(e,function(e){if(e.selectorText===".laytable-cell-"+t)return a(e),!0})},i.prototype.fullSize=function(){var e,a,i=this,t=i.config,l=t.height;i.fullHeightGap?(l=r.height()-i.fullHeightGap)<135&&(l=135):i.parentDiv&&i.parentHeightGap?(l=f(i.parentDiv).height()-i.parentHeightGap)<135&&(l=135):i.customHeightFunc&&(l=i.customHeightFunc())<135&&(l=135),1
      ')).find("div").css({width:a}),e.find("tr").append(t)):e.find(".layui-table-patch").remove()};n(e.layHeader),n(e.layTotal);n=e.layMain.height()-i;e.layFixed.find(E).css("height",t.height()>=n?n:"auto").scrollTop(e.layMain.scrollTop()),e.layFixRight[k.cache[e.key]&&k.cache[e.key].length&&0');a.html(t),s.height&&a.css("max-height",s.height-(c.layTool.outerHeight()||50)),i.find("."+j)[0]||i.append(a),c.renderForm(),a.on("click",function(e){layui.stope(e)}),e.done&&e.done(a,t)};switch(layui.stope(e),z.trigger("table.tool.panel.remove"),p.close(c.tipsIndex),t){case"LAYTABLE_COLS":n({list:(a=[],c.eachCols(function(e,t){t.field&&"normal"==t.type&&a.push('
    • "+(t.fieldTitle||t.title||t.field)+"").text())+'" lay-filter="LAY_TABLE_TOOL_COLS">
    • ')}),a.join("")),done:function(){v.on("checkbox(LAY_TABLE_TOOL_COLS)",function(e){var e=f(e.elem),t=this.checked,a=e.data("key"),i=c.col(a),l=i.hide,e=e.data("parentkey");i.key&&(i.hide=!t,c.elem.find('*[data-key="'+a+'"]')[t?"removeClass":"addClass"](D),l!=i.hide&&c.setParentCol(!t,e),c.resize(),layui.event.call(this,N,"colToggled("+u+")",{col:i,config:s}))})}});break;case"LAYTABLE_EXPORT":if(!l.length)return p.tips("\u5f53\u524d\u8868\u683c\u65e0\u6570\u636e",this,{tips:3});x.ie?p.tips("\u5bfc\u51fa\u529f\u80fd\u4e0d\u652f\u6301 IE\uff0c\u8bf7\u7528 Chrome \u7b49\u9ad8\u7ea7\u6d4f\u89c8\u5668\u5bfc\u51fa",this,{tips:3}):n({list:['
    • \u5bfc\u51fa csv \u683c\u5f0f\u6587\u4ef6
    • ','
    • \u5bfc\u51fa xls \u683c\u5f0f\u6587\u4ef6
    • '].join(""),done:function(e,t){t.on("click",function(){var e=f(this).data("type");k.exportFile.call(c,s.id,null,e)})}});break;case"LAYTABLE_PRINT":if(!l.length)return p.tips("\u5f53\u524d\u8868\u683c\u65e0\u6570\u636e",this,{tips:3});var o=window.open("about:blank","_blank"),r=[""].join(""),d=f(c.layHeader.html());d.append(c.layMain.find("table").html()),d.append(c.layTotal.find("table").html()),d.find("th.layui-table-patch").remove(),d.find("thead>tr>th."+H).filter(function(e,t){return!f(t).children("."+I).length}).remove(),d.find("tbody>tr>td."+H).remove(),o.document.write(r+d.prop("outerHTML")),o.document.close(),layui.device("edg").edg?(o.onafterprint=o.close,o.print()):(o.print(),o.close())}layui.event.call(this,N,"toolbar("+u+")",f.extend({event:t,config:s},{}))}),c.layHeader.on("click","*[lay-event]",function(e){var t=f(this),a=t.attr("lay-event"),t=t.closest("th").data("key"),t=c.col(t);layui.event.call(this,N,"colTool("+u+")",f.extend({event:a,config:s,col:t},{}))}),c.layPagebar.on("click","*[lay-event]",function(e){var t=f(this).attr("lay-event");layui.event.call(this,N,"pagebar("+u+")",f.extend({event:t,config:s},{}))}),e.on("mousemove",function(e){var t=f(this),a=t.offset().left,e=e.clientX-a;t.data("unresize")||w.eventMoveElem||(r.allowResize=t.width()-e<=10,o.css("cursor",r.allowResize?"col-resize":""))}).on("mouseleave",function(){f(this);w.eventMoveElem||(r.allowResize=!1,o.css("cursor",""))}).on("mousedown",function(e){var t,a=f(this);r.allowResize&&(t=a.data("key"),e.preventDefault(),r.offset=[e.clientX,e.clientY],c.cssRules(t,function(e){var t=e.style.width||a.outerWidth();r.rule=e,r.ruleWidth=parseFloat(t),r.minWidth=a.data("minwidth")||s.cellMinWidth,r.maxWidth=a.data("maxwidth")||s.cellMaxWidth}),a.data(F,r),w.eventMoveElem=a)}),w.docEvent||z.on("mousemove",function(e){var t,a;w.eventMoveElem&&(t=w.eventMoveElem.data(F)||{},w.eventMoveElem.data("resizing",1),e.preventDefault(),t.rule)&&(e=t.ruleWidth+e.clientX-t.offset[0],a=w.eventMoveElem.closest("."+L).attr(R),a=C(a))&&((e=et.maxWidth&&(e=t.maxWidth),t.rule.style.width=e+"px",a.setGroupWidth(w.eventMoveElem),p.close(c.tipsIndex))}).on("mouseup",function(e){var t,a,i,l,n;w.eventMoveElem&&(i=(t=w.eventMoveElem).closest("."+L).attr(R),a=C(i))&&(i=t.data("key"),l=a.col(i),n=a.config.elem.attr("lay-filter"),r={},o.css("cursor",""),a.scrollPatch(),t.removeData(F),delete w.eventMoveElem,a.cssRules(i,function(e){l.width=parseFloat(e.style.width),layui.event.call(t[0],N,"colResized("+n+")",{col:l,config:a.config})}))}),w.docEvent=!0,e.on("click",function(e){var t=f(this),a=t.find(A),i=a.attr("lay-sort");if(!a[0]||1===t.data("resizing"))return t.removeData("resizing");c.sort({field:t,type:"asc"===i?"desc":"desc"===i?null:"asc",fromEvent:!0})}).find(A+" .layui-edge ").on("click",function(e){var t=f(this),a=t.index(),t=t.parents("th").eq(0).data("field");layui.stope(e),0===a?c.sort({field:t,type:"asc",fromEvent:!0}):c.sort({field:t,type:"desc",fromEvent:!0})}),c.commonMember=function(e){var a=f(this).parents("tr").eq(0).data("index"),t=c.layBody.find('tr[data-index="'+a+'"]'),i=(k.cache[c.key]||[])[a]||{},l={tr:t,config:s,data:k.clearCacheKey(i),dataCache:i,index:a,del:function(){k.cache[c.key][a]=[],t.remove(),c.scrollPatch()},update:function(e,t){c.updateRow({index:a,data:e=e||{},related:t},function(e,t){l.data[e]=t})},setRowChecked:function(e){c.setRowChecked(f.extend({index:a},e))}};return f.extend(l,e)}),a=(c.elem.on("click",'input[name="layTableCheckbox"]+',function(e){var t=f(this),a=t.closest("td"),t=t.prev(),i=(c.layBody.find('input[name="layTableCheckbox"]'),t.parents("tr").eq(0).data("index")),l=t[0].checked,n="layTableAllChoose"===t.attr("lay-filter");t[0].disabled||(n?c.setRowChecked({index:"all",checked:l}):(c.setRowChecked({index:i,checked:l}),layui.stope(e)),layui.event.call(t[0],N,"checkbox("+u+")",d.call(t[0],{checked:l,type:n?"all":"one",getCol:function(){return c.col(a.data("key"))}})))}),c.elem.on("click",'input[lay-type="layTableRadio"]+',function(e){var t=f(this),a=t.closest("td"),t=t.prev(),i=t[0].checked,l=t.parents("tr").eq(0).data("index");if(layui.stope(e),t[0].disabled)return!1;c.setRowChecked({type:"radio",index:l}),layui.event.call(t[0],N,"radio("+u+")",d.call(t[0],{checked:i,getCol:function(){return c.col(a.data("key"))}}))}),c.layBody.on("mouseenter","tr",function(){var e=f(this),t=e.index();e.data("off")||c.layBody.find("tr:eq("+t+")").addClass(W)}).on("mouseleave","tr",function(){var e=f(this),t=e.index();e.data("off")||c.layBody.find("tr:eq("+t+")").removeClass(W)}).on("click","tr",function(e){var t=[".layui-form-checkbox",".layui-form-switch",".layui-form-radio","[lay-unrow]"].join(",");f(e.target).is(t)||f(e.target).closest(t)[0]||a.call(this,"row")}).on("dblclick","tr",function(){a.call(this,"rowDouble")}).on("contextmenu","tr",function(e){s.defaultContextmenu||e.preventDefault(),a.call(this,"rowContextmenu")}),function(e){var t=f(this);t.data("off")||layui.event.call(this,N,e+"("+u+")",d.call(t.children("td")[0]))}),n=function(e,t){var a,i,l;(e=f(e)).data("off")||(l=e.data("field"),i=e.data("key"),i=c.col(i),a=e.closest("tr").data("index"),a=k.cache[c.key][a],e.children(y),(i="function"==typeof i.edit?i.edit(a):i.edit)&&((i=f("textarea"===i?'':''))[0].value=(l=e.data("content")||a[l])===undefined||null===l?"":l,e.find("."+M)[0]||e.append(i),i.focus(),t)&&layui.stope(t))},i=(c.layBody.on("change","."+M,function(){var e=f(this),t=e.parent(),a=this.value,i=e.parent().data("field"),e=e.closest("tr").data("index"),e=k.cache[c.key][e],l=d.call(t[0],{value:a,field:i,oldValue:e[i],td:t,reedit:function(){setTimeout(function(){n(l.td);var e={};e[i]=l.oldValue,l.update(e)})},getCol:function(){return c.col(t.data("key"))}}),e={};e[i]=a,l.update(e),layui.event.call(t[0],N,"edit("+u+")",l)}).on("blur","."+M,function(){f(this).remove()}),c.layBody.on(s.editTrigger,"td",function(e){n(this,e)}).on("mouseenter","td",function(){t.call(this)}).on("mouseleave","td",function(){t.call(this,"hide")}),c.layTotal.on("mouseenter","td",function(){t.call(this)}).on("mouseleave","td",function(){t.call(this,"hide")}),"layui-table-grid-down"),t=function(e){var t=f(this),a=t.children(y);t.data("off")||t.parent().hasClass(S)||(e?t.find(".layui-table-grid-down").remove():!(a.prop("scrollWidth")>a.prop("clientWidth")||0'))},l=function(e,t){var a=f(this),i=a.parent(),l=i.data("key"),n=c.col(l),o=i.parent().data("index"),r=i.children(y),i="layui-table-cell-c",d=f('');"tips"===(t=t||n.expandedMode||s.cellExpandedMode)?c.tipsIndex=p.tips(['
      ',r.html(),"
      ",''].join(""),r[0],{tips:[3,""],time:-1,anim:-1,maxWidth:x.ios||x.android?300:c.elem.width()/2,isOutAnim:!1,skin:"layui-table-tips",success:function(e,t){e.find(".layui-table-tips-c").on("click",function(){p.close(t)})}}):(c.elem.find("."+i).trigger("click"),c.cssRules(l,function(e){var t=e.style.width,a=n.expandedWidth||s.cellExpandedWidth;atr").each(function(i){n.cols[i]=[],f(this).children().each(function(e){var t=f(this),a=t.attr("lay-data"),a=d.options(this,{attr:a?"lay-data":null,errorText:r+(a||t.attr("lay-options"))}),t=f.extend({title:t.text(),colspan:parseInt(t.attr("colspan"))||1,rowspan:parseInt(t.attr("rowspan"))||1},a);n.cols[i].push(t)})}),e.find("tbody>tr")),t=k.render(n);!a.length||o.data||t.config.url||(l=0,k.eachCols(t.config.id,function(e,i){a.each(function(e){n.data[e]=n.data[e]||{};var t=f(this),a=i.field;n.data[e][a]=t.children("td").eq(l).html()}),l++}),t.reloadData({data:n.data}))}),this},w.that={},w.config={},function(a,i,e,l){var n,o;l.colGroup&&(n=0,a++,l.CHILD_COLS=[],o=e+(parseInt(l.rowspan)||1),layui.each(i[o],function(e,t){t.parentKey?t.parentKey===l.key&&(t.PARENT_COL_INDEX=a,l.CHILD_COLS.push(t),c(a,i,o,t)):t.PARENT_COL_INDEX||1<=n&&n==(l.colspan||1)||(t.PARENT_COL_INDEX=a,l.CHILD_COLS.push(t),n+=parseInt(1td').filter('[data-field="'+e+'"]')}}})).replace(/"/g,'""'),n.push(a='"'+a+'"')):t.field&&"normal"!==t.type&&0==i&&(d[t.field]=!0)}),r.push(n.join(","))}),c&&layui.each(c.dataTotal,function(e,t){d[t.field]||i.push('"'+(t.total||"")+'"')}),o.join(",")+"\r\n"+r.join("\r\n")+"\r\n"+i.join(","))),u.download=(a.title||n.title||"table_"+(n.index||""))+"."+l,document.body.appendChild(u),u.click(),document.body.removeChild(u)},k.getOptions=l,k.hideCol=function(e,l){var n=C(e);n&&("boolean"===layui.type(l)?n.eachCols(function(e,t){var a=t.key,i=n.col(a),t=t.parentKey;i.hide!=l&&(i=i.hide=l,n.elem.find('*[data-key="'+a+'"]')[i?"addClass":"removeClass"](D),n.setParentCol(i,t))}):(l=layui.isArray(l)?l:[l],layui.each(l,function(e,l){n.eachCols(function(e,t){var a,i;l.field===t.field&&(a=t.key,i=n.col(a),t=t.parentKey,"hide"in l)&&i.hide!=l.hide&&(i=i.hide=!!l.hide,n.elem.find('*[data-key="'+a+'"]')[i?"addClass":"removeClass"](D),n.setParentCol(i,t))})})),f("."+j).remove(),n.resize())},k.reload=function(e,t,a,i){if(l(e))return(e=C(e)).reload(t,a,i),w.call(e)},k.reloadData=function(){var a=f.extend([],arguments),i=(a[3]="reloadData",new RegExp("^("+["elem","id","cols","width","height","maxHeight","toolbar","defaultToolbar","className","css","pagebar"].join("|")+")$"));return layui.each(a[1],function(e,t){i.test(e)&&delete a[1][e]}),k.reload.apply(null,a)},k.render=function(e){e=new i(e);return w.call(e)},k.clearCacheKey=function(e){return delete(e=f.extend({},e))[k.config.checkName],delete e[k.config.indexName],delete e[k.config.numbersName],delete e[k.config.disabledName],e},f(function(){k.init()}),n(N,k)});layui.define(["table"],function(e){"use strict";var A=layui.$,x=layui.form,P=layui.table,y=layui.hint(),B={config:{},on:P.on,eachCols:P.eachCols,index:P.index,set:function(e){var t=this;return t.config=A.extend({},t.config,e),t},resize:P.resize,getOptions:P.getOptions,hideCol:P.hideCol,renderData:P.renderData},i=function(){var a=this,e=a.config,n=e.id||e.index;return{config:e,reload:function(e,t){a.reload.call(a,e,t)},reloadData:function(e,t){B.reloadData(n,e,t)}}},j=function(e){var t=i.that[e];return t||y.error(e?"The treeTable instance with ID '"+e+"' not found":"ID argument required"),t||null},F="lay-table-id",L="layui-hide",s=".layui-table-body",q=".layui-table-main",R=".layui-table-fixed-l",Y=".layui-table-fixed-r",l="layui-table-checked",h="layui-table-tree",z="LAY_DATA_INDEX",m="LAY_DATA_INDEX_HISTORY",f="LAY_PARENT_INDEX",b="LAY_CHECKBOX_HALF",H="LAY_EXPAND",X="LAY_HAS_EXPANDED",V="LAY_ASYNC_STATUS",n=["all","parent","children","none"],t=/<[^>]+?>/,p=["flexIconClose","flexIconOpen","iconClose","iconOpen","iconLeaf","icon"],a=function(e){var t=this;t.index=++B.index,t.config=A.extend(!0,{},t.config,B.config,e),t.init(),t.render()},g=function(n,i,e){var l=P.cache[n];layui.each(e||l,function(e,t){var a=t[z]||"";-1!==a.indexOf("-")&&(l[a]=t),t[i]&&g(n,i,t[i])})},d=function(d,a,e){var r=j(d),o=("reloadData"!==e&&(r.status={expand:{}}),A.extend(!0,{},r.getOptions(),a)),n=o.tree,c=n.customName.children,i=n.customName.id,l=(delete a.hasNumberCol,delete a.hasChecboxCol,delete a.hasRadioCol,P.eachCols(null,function(e,t){"numbers"===t.type?a.hasNumberCol=!0:"checkbox"===t.type?a.hasChecboxCol=!0:"radio"===t.type&&(a.hasRadioCol=!0)},o.cols),a.parseData),u=a.done;"reloadData"===e&&"fixed"===o.scrollPos&&(r.scrollTopCache=r.config.elem.next().find(s).scrollTop()),o.url?e&&(!l||l.mod)||(a.parseData=function(){var e=this,t=arguments,a=t[0],t=("function"===layui.type(l)&&(a=l.apply(e,t)||t[0]),e.response.dataName);return n.data.isSimpleData&&!n["async"].enable&&(a[t]=r.flatToTree(a[t])),N(a[t],function(e){e[H]=H in e?e[H]:e[i]!==undefined&&r.status.expand[e[i]]},c),e.autoSort&&e.initSort&&e.initSort.type&&layui.sort(a[t],e.initSort.field,"desc"===e.initSort.type,!0),r.initData(a[t]),a},a.parseData.mod=!0):(a.data=a.data||[],n.data.isSimpleData&&(a.data=r.flatToTree(a.data)),r.initData(a.data)),e&&(!u||u.mod)||(a.done=function(){var e,t=arguments,a=t[3],n="renderData"===a,i=(n||delete r.isExpandAll,this.elem.next()),l=(r.updateStatus(null,{LAY_HAS_EXPANDED:!1}),g(d,c),i.find('[name="layTableCheckbox"][lay-filter="layTableAllChoose"]'));if(l.length&&(e=B.checkStatus(d),l.prop({checked:e.isAll&&e.data.length,indeterminate:!e.isAll&&e.data.length})),!n&&o.autoSort&&o.initSort&&o.initSort.type&&B.sort(d),r.renderTreeTable(i),"reloadData"===a&&"fixed"===this.scrollPos&&i.find(s).scrollTop(r.scrollTopCache),"function"===layui.type(u))return u.apply(this,t)},a.done.mod=!0),a&&a.tree&&a.tree.view&&layui.each(p,function(e,t){a.tree.view[t]!==undefined&&(a.tree.view[t]=r.normalizedIcon(a.tree.view[t]))})};a.prototype.init=function(){var e=this.config,t=e.tree.data.cascade,t=(-1===n.indexOf(t)&&(e.tree.data.cascade="all"),P.render(A.extend({},e,{data:[],url:"",done:null}))),a=t.config.id;(i.that[a]=this).tableIns=t,d(a,e)},a.prototype.config={tree:{customName:{children:"children",isParent:"isParent",name:"name",id:"id",pid:"parentId",icon:"icon"},view:{indent:14,flexIconClose:'',flexIconOpen:'',showIcon:!0,icon:"",iconClose:'',iconOpen:'',iconLeaf:'',showFlexIconIfNotParent:!1,dblClickExpand:!0,expandAllDefault:!1},data:{isSimpleData:!1,rootPid:null,cascade:"all"},"async":{enable:!1,url:"",type:null,contentType:null,headers:null,where:null,autoParam:[]},callback:{beforeExpand:null,onExpand:null}}},a.prototype.normalizedIcon=function(e){return e?t.test(e)?e:'':""},a.prototype.getOptions=function(){return this.tableIns?P.getOptions(this.tableIns.config.id):this.config},a.prototype.flatToTree=function(e){var n,i,l,d,r,o,c,u,t=this.getOptions(),a=t.tree,s=a.customName,t=t.id;return e=e||P.cache[t],t=e,n=s.id,i=s.pid,l=s.children,d=a.data.rootPid,n=n||"id",i=i||"parentId",l=l||"children",c={},u=[],layui.each(t,function(e,t){r=n+t[n],o=n+t[i],c[r]||(c[r]={},c[r][l]=[]);var a={};a[l]=c[r][l],c[r]=A.extend({},t,a),((d?c[r][i]===d:!c[r][i])?u:(c[o]||(c[o]={},c[o][l]=[]),c[o][l])).push(c[r])}),u},a.prototype.treeToFlat=function(e,n,i){var l=this,d=l.getOptions().tree.customName,r=d.children,o=d.pid,c=[];return layui.each(e,function(e,t){var e=(i?i+"-":"")+e,a=A.extend({},t);a[o]=t[o]||n,c.push(a),c=c.concat(l.treeToFlat(t[r],t[d.id],e))}),c},a.prototype.getTreeNode=function(e){var t,a,n=this;return e?(a=(t=n.getOptions()).tree,t.id,a.customName,{data:e,dataIndex:e[z],getParentNode:function(){return n.getNodeByIndex(e[f])}}):y.error("\u627e\u4e0d\u5230\u8282\u70b9\u6570\u636e")},a.prototype.getNodeByIndex=function(t){var a,e,n=this,i=n.getNodeDataByIndex(t);return i?((e=n.getOptions()).tree.customName.parent,a=e.id,(e={data:i,dataIndex:i[z],getParentNode:function(){return n.getNodeByIndex(i[f])},update:function(e){return B.updateNode(a,t,e)},remove:function(){return B.removeNode(a,t)},expand:function(e){return B.expandNode(a,A.extend({},e,{index:t}))},setChecked:function(e){return B.setRowChecked(a,A.extend({},e,{index:t}))}}).dataIndex=t,e):y.error("\u627e\u4e0d\u5230\u8282\u70b9\u6570\u636e")},a.prototype.getNodeById=function(a){var e=this.getOptions(),n=e.tree.customName.id,i="",e=B.getData(e.id,!0);if(layui.each(e,function(e,t){if(t[n]===a)return i=t[z],!0}),i)return this.getNodeByIndex(i)},a.prototype.getNodeDataByIndex=function(e,t,a){var n=this.getOptions(),i=n.tree,n=n.id,n=P.cache[n],l=n[e];if("delete"!==a&&l)return A.extend(l,a),t?A.extend({},l):l;for(var d=n,r=String(e).split("-"),o=0,c=i.customName.children;o
      '),N=function(e){y[V]="success",y[s.children]=e,c.initData(y[s.children],y[z]),J(t,!0,!p&&n,i,l)},C=m.format,"function"===layui.type(C)?C(y,o,N):(I=A.extend({},m.where||o.where),C=m.autoParam,layui.each(C,function(e,t){t=t.split("=");I[t[0].trim()]=y[(t[1]||t[0]).trim()]}),(C=m.contentType||o.contentType)&&0==C.indexOf("application/json")&&(I=JSON.stringify(I)),O=m.method||o.method,D=m.dataType||o.dataType,T=m.jsonpCallback||o.jsonpCallback,_=m.headers||o.headers,k=m.parseData||o.parseData,w=m.response||o.response,A.ajax({type:O||"get",url:b,contentType:C,data:I,dataType:D||"json",jsonpCallback:T,headers:_||{},success:function(e){(e="function"==typeof k?k.call(o,e)||e:e)[w.statusName]!=w.statusCode?(y[V]="error",g.html('')):N(e[w.dataName])},error:function(e,t){y[V]="error","function"==typeof o.error&&o.error(e,t)}})),h;y[X]=!0,v.length&&(!o.initSort||o.url&&!o.autoSort||((m=o.initSort).type?layui.sort(v,m.field,"desc"===m.type,!0):layui.sort(v,P.config.indexName,null,!0)),c.initData(y[s.children],y[z]),O=P.getTrHtml(r,v,null,null,e),S={trs:A(O.trs.join("")),trs_fixed:A(O.trs_fixed.join("")),trs_fixed_r:A(O.trs_fixed_r.join(""))},E=(e.split("-").length-1||0)+1,layui.each(v,function(e,t){S.trs.eq(e).attr({"data-index":t[z],"lay-data-index":t[z],"data-level":E}).data("index",t[z]),S.trs_fixed.eq(e).attr({"data-index":t[z],"lay-data-index":t[z],"data-level":E}).data("index",t[z]),S.trs_fixed_r.eq(e).attr({"data-index":t[z],"lay-data-index":t[z],"data-level":E}).data("index",t[z])}),d.find(q).find('tbody tr[lay-data-index="'+e+'"]').after(S.trs),d.find(R).find('tbody tr[lay-data-index="'+e+'"]').after(S.trs_fixed),d.find(Y).find('tbody tr[lay-data-index="'+e+'"]').after(S.trs_fixed_r),c.renderTreeTable(S.trs,E),n)&&!p&&layui.each(v,function(e,t){J({dataIndex:t[z],trElem:d.find('tr[lay-data-index="'+t[z]+'"]').first(),tableViewElem:d,tableId:r,options:o},a,n,i,l)})}else c.isExpandAll=!1,(n&&!p?(layui.each(v,function(e,t){J({dataIndex:t[z],trElem:d.find('tr[lay-data-index="'+t[z]+'"]').first(),tableViewElem:d,tableId:r,options:o},a,n,i,l)}),d.find(v.map(function(e,t,a){return'tr[lay-data-index="'+e[z]+'"]'}).join(","))):(b=c.treeToFlat(v,y[s.id],e),d.find(b.map(function(e,t,a){return'tr[lay-data-index="'+e[z]+'"]'}).join(",")))).addClass(L);U("resize-"+r,function(){B.resize(r)},0)(),l&&"loading"!==y[V]&&(C=u.callback.onExpand,"function"===layui.type(C))&&C(r,y,x)}return h},v=(B.expandNode=function(e,t){var a,n,i,e=j(e);if(e)return a=(t=t||{}).index,n=t.expandFlag,i=t.inherit,t=t.callbackFlag,e=e.getOptions().elem.next(),J({trElem:e.find('tr[lay-data-index="'+a+'"]').first()},n,i,null,t)},B.expandAll=function(a,e){if("boolean"!==layui.type(e))return y.error("expandAll \u7684\u5c55\u5f00\u72b6\u6001\u53c2\u6570\u53ea\u63a5\u6536true/false");var t=j(a);if(t){t.isExpandAll=e;var n=t.getOptions(),i=n.tree,l=n.elem.next(),d=i.customName.isParent,r=i.customName.id,o=i.view.showFlexIconIfNotParent;if(e){e=B.getData(a,!0);if(i["async"].enable){var c=!0;if(layui.each(e,function(e,t){if(t[d]&&!t[V])return!(c=!1)}),!c)return void layui.each(B.getData(a),function(e,t){B.expandNode(a,{index:t[z],expandFlag:!0,inherit:!0})})}var u=!0;if(layui.each(e,function(e,t){if(t[d]&&!t[X])return!(u=!1)}),u)t.updateStatus(null,function(e){(e[d]||o)&&(e[H]=!0,e[r]!==undefined)&&(t.status.expand[e[r]]=!0)}),l.find('tbody tr[data-level!="0"]').removeClass(L),l.find(".layui-table-tree-flexIcon").html(i.view.flexIconOpen),i.view.showIcon&&l.find(".layui-table-tree-nodeIcon:not(.layui-table-tree-iconCustom,.layui-table-tree-iconLeaf)").html(i.view.iconOpen);else{if(t.updateStatus(null,function(e){(e[d]||o)&&(e[H]=!0,e[X]=!0,e[r]!==undefined)&&(t.status.expand[e[r]]=!0)}),n.initSort&&n.initSort.type&&n.autoSort)return B.sort(a);var s,n=P.getTrHtml(a,e),f={trs:A(n.trs.join("")),trs_fixed:A(n.trs_fixed.join("")),trs_fixed_r:A(n.trs_fixed_r.join(""))};layui.each(e,function(e,t){var a=t[z].split("-").length-1;s={"data-index":t[z],"lay-data-index":t[z],"data-level":a},f.trs.eq(e).attr(s).data("index",t[z]),f.trs_fixed.eq(e).attr(s).data("index",t[z]),f.trs_fixed_r.eq(e).attr(s).data("index",t[z])}),layui.each(["main","fixed-l","fixed-r"],function(e,t){l.find(".layui-table-"+t+" tbody").html(f[["trs","trs_fixed","trs_fixed_r"][e]])}),t.renderTreeTable(l,0,!1)}}else t.updateStatus(null,function(e){(e[d]||o)&&(e[H]=!1,e[r]!==undefined)&&(t.status.expand[e[r]]=!1)}),l.find('.layui-table-box tbody tr[data-level!="0"]').addClass(L),l.find(".layui-table-tree-flexIcon").html(i.view.flexIconClose),i.view.showIcon&&l.find(".layui-table-tree-nodeIcon:not(.layui-table-tree-iconCustom,.layui-table-tree-iconLeaf)").html(i.view.iconClose);B.resize(a)}},a.prototype.updateNodeIcon=function(e){var t=this.getOptions().tree||{},a=e.scopeEl,n=e.isExpand,e=e.isParent;a.find(".layui-table-tree-flexIcon").css("visibility",e||t.view.showFlexIconIfNotParent?"visible":"hidden").html(n?t.view.flexIconOpen:t.view.flexIconClose),t.view.showIcon&&(a=a.find(".layui-table-tree-nodeIcon:not(.layui-table-tree-iconCustom)"),n=e?n?t.view.iconOpen:t.view.iconClose:t.view.iconLeaf,a.toggleClass("layui-table-tree-iconLeaf",!e).html(n))},a.prototype.renderTreeTable=function(e,t,a){var l=this,n=l.getOptions(),d=n.elem.next(),i=(d.hasClass(h)||d.addClass(h),n.id),r=n.tree||{},o=(r.data,r.view||{}),c=r.customName||{},u=c.isParent,s=(d.attr("lay-filter"),l),f=((t=t||0)||(d.find(".layui-table-body tr:not([data-level])").attr("data-level",t),layui.each(P.cache[i],function(e,t){d.find('.layui-table-main tbody tr[data-level="0"]:eq('+e+")").attr("lay-data-index",t[z]),d.find('.layui-table-fixed-l tbody tr[data-level="0"]:eq('+e+")").attr("lay-data-index",t[z]),d.find('.layui-table-fixed-r tbody tr[data-level="0"]:eq('+e+")").attr("lay-data-index",t[z])})),null),y=c.name,p=o.indent||14;if(layui.each(e.find('td[data-field="'+y+'"]'),function(e,t){var a,n,i=(t=A(t)).closest("tr"),t=t.children(".layui-table-cell");t.hasClass("layui-table-tree-item")||(n=i.attr("lay-data-index"))&&(i=d.find('tr[lay-data-index="'+n+'"]'),(a=s.getNodeDataByIndex(n))[H]&&a[u]&&((f=f||{})[n]=!0),a[b]&&i.find('input[type="checkbox"][name="layTableCheckbox"]').prop("indeterminate",!0),n=t.html(),(t=i.find('td[data-field="'+y+'"]>div.layui-table-cell')).addClass("layui-table-tree-item"),t.html(['
      ',a[H]?o.flexIconOpen:o.flexIconClose,"
      ",o.showIcon?'
      '+(l.normalizedIcon(a[c.icon])||o.icon||(a[u]?a[H]?o.iconOpen:o.iconClose:o.iconLeaf)||"")+"
      ":"",n].join("")).find(".layui-table-tree-flexIcon").on("click",function(e){layui.stope(e),J({trElem:i},null,null,null,!0)}))}),!t&&r.view.expandAllDefault&&l.isExpandAll===undefined)return B.expandAll(i,!0);(!1!==a&&f?(layui.each(f,function(e,t){e=d.find('tr[lay-data-index="'+e+'"]');e.find(".layui-table-tree-flexIcon").html(o.flexIconOpen),J({trElem:e.first()},!0)}),U("renderTreeTable2-"+i,function(){x.render(A(".layui-table-tree["+F+'="'+i+'"]'))},0)):U("renderTreeTable-"+i,function(){n.hasNumberCol&&v(l),x.render(A(".layui-table-tree["+F+'="'+i+'"]'))},0))()},function(a){var e=a.getOptions(),t=e.elem.next(),n=0,i=t.find(".layui-table-main tbody tr"),l=t.find(".layui-table-fixed-l tbody tr"),d=t.find(".layui-table-fixed-r tbody tr");layui.each(a.treeToFlat(P.cache[e.id]),function(e,t){t.LAY_HIDE||(a.getNodeDataByIndex(t[z]).LAY_NUM=++n,i.eq(e).find(".laytable-cell-numbers").html(n),l.eq(e).find(".laytable-cell-numbers").html(n),d.eq(e).find(".laytable-cell-numbers").html(n))})}),N=(a.prototype.render=function(e){var t=this;t.tableIns=P["reloadData"===e?"reloadData":"reload"](t.tableIns.config.id,A.extend(!0,{},t.config)),t.config=t.tableIns.config},a.prototype.reload=function(e,t,a){var n=this;e=e||{},delete n.haveInit,layui.each(e,function(e,t){"array"===layui.type(t)&&delete n.config[e]}),d(n.getOptions().id,e,a||!0),n.config=A.extend(t,{},n.config,e),n.render(a)},B.reloadData=function(){var e=A.extend(!0,[],arguments);return e[3]="reloadData",B.reload.apply(null,e)},function(e,a,n,i){var l=[];return layui.each(e,function(e,t){"function"===layui.type(a)?a(t):A.extend(t,a),l.push(A.extend({},t)),i||(l=l.concat(N(t[n],a,n,i)))}),l}),o=(a.prototype.updateStatus=function(e,t,a){var n=this.getOptions(),i=n.tree;return e=e||P.cache[n.id],N(e,t,i.customName.children,a)},a.prototype.getTableData=function(){var e=this.getOptions();return P.cache[e.id]},B.updateStatus=function(e,t,a){var e=j(e),n=e.getOptions();return a=a||(n.url?P.cache[n.id]:n.data),e.updateStatus(a,t)},B.sort=function(e){var t,a,i,l,n,d=j(e);d&&(n=(t=d.getOptions()).tree,a=B.getData(e),i=n.customName.children,l=function(e,a,n){layui.sort(e,a,n,!0),layui.each(e,function(e,t){l(t[i]||[],a,n)})},t.autoSort)&&((n=t.initSort).type?l(a,n.field,"desc"===n.type):l(a,P.config.indexName,null),P.cache[e]=a,d.initData(a),B.renderData(e))},function(n){var t=n.config.id,i=j(t),a=n.data=B.getNodeDataByIndex(t,n.index),l=a[z],d=(n.dataIndex=l,n.update);n.update=function(){var e=arguments,t=(A.extend(i.getNodeDataByIndex(l),e[0]),d.apply(this,e)),a=n.config.tree.customName.name;return a in e[0]&&n.tr.find('td[data-field="'+a+'"]').children("div.layui-table-cell").removeClass("layui-table-tree-item"),i.renderTreeTable(n.tr,n.tr.attr("data-level"),!1),t},n.del=function(){B.removeNode(t,a)},n.setRowChecked=function(e){B.setRowChecked(t,{index:a,checked:e})}}),u=(B.updateNode=function(e,a,t){var n,i,l,d,r,o=j(e);o&&((d=o.getOptions()).tree,d=(n=d.elem.next()).find('tr[lay-data-index="'+a+'"]'),i=d.attr("data-index"),l=d.attr("data-level"),t)&&(d=o.getNodeDataByIndex(a,!1,t),r=P.getTrHtml(e,[d]),layui.each(["main","fixed-l","fixed-r"],function(e,t){n.find(".layui-table-"+t+' tbody tr[lay-data-index="'+a+'"]').replaceWith(A(r[["trs","trs_fixed","trs_fixed_r"][e]].join("")).attr({"data-index":i,"lay-data-index":a,"data-level":l}).data("index",i))}),o.renderTreeTable(n.find('tr[lay-data-index="'+a+'"]'),l))},B.removeNode=function(e,t){var a=j(e);if(a){var n,i=a.getOptions(),l=i.tree,d=l.customName.isParent,r=l.customName.children,o=i.elem.next(),c=[],u=P.cache[e],t=a.getNodeDataByIndex("string"===layui.type(t)?t:t[z],!1,"delete"),s=a.getNodeDataByIndex(t[f]),l=(a.updateCheckStatus(s),a.treeToFlat([t],t[l.customName.pid],t[f])),t=(layui.each(l,function(e,t){t=t[z];c.push('tr[lay-data-index="'+t+'"]'),-1!==t.indexOf("-")&&delete u[t]}),o.find(c.join(",")).remove(),a.initData());for(n in u)-1!==n.indexOf("-")&&n!==u[n][z]&&delete u[n];layui.each(a.treeToFlat(t),function(e,t){t[m]&&t[m]!==t[z]&&o.find('tr[lay-data-index="'+t[m]+'"]').attr({"data-index":t[z],"lay-data-index":t[z]}).data("index",t[z])}),layui.each(u,function(e,t){o.find('tr[data-level="0"][lay-data-index="'+t[z]+'"]').attr("data-index",e).data("index",e)}),i.hasNumberCol&&v(a),s&&(l=o.find('tr[lay-data-index="'+s[z]+'"]'),s[d]=!(!s[r]||!s[r].length),a.updateNodeIcon({scopeEl:l,isExpand:s[H],isParent:s[d]})),B.resize(e)}},B.addNodes=function(e,t){var a=j(e);if(a){var n=a.getOptions(),i=n.tree,l=n.elem.next(),d=P.config.checkName,r=(t=t||{}).parentIndex,o=t.index,c=t.data,t=t.focus,u=(r="number"===layui.type(r)?r.toString():r)?a.getNodeDataByIndex(r):null,o="number"===layui.type(o)?o:-1,c=A.extend(!0,[],layui.isArray(c)?c:[c]);layui.each(c,function(e,t){d in t||!u||(t[d]=u[d])}),a.getTableData();if(u){var s=i.customName.isParent,f=i.customName.children;u[s]=!0;var y=(y=u[f])?(p=y.splice(-1===o?y.length:o),u[f]=y.concat(c,p)):u[f]=c,f=(a.updateStatus(y,function(e){(e[s]||i.view.showFlexIconIfNotParent)&&(e[X]=!1)}),a.treeToFlat(y));l.find(f.map(function(e){return'tr[lay-data-index="'+e[z]+'"]'}).join(",")).remove(),a.initData(),u[X]=!1,u[V]="local",J({trElem:l.find('tr[lay-data-index="'+r+'"]')},!0)}else{var p=P.cache[e].splice(-1===o?P.cache[e].length:o);if(P.cache[e]=P.cache[e].concat(c,p),n.url||(n.page?(y=n.page,n.data.splice.apply(n.data,[y.limit*(y.curr-1),y.limit].concat(P.cache[e]))):n.data=P.cache[e]),a.initData(),l.find(".layui-none").length)return P.renderData(e),c;var x,f=P.getTrHtml(e,c),h={trs:A(f.trs.join("")),trs_fixed:A(f.trs_fixed.join("")),trs_fixed_r:A(f.trs_fixed_r.join(""))},r=(layui.each(c,function(e,t){x={"data-index":t[z],"lay-data-index":t[z],"data-level":"0"},h.trs.eq(e).attr(x).data("index",t[z]),h.trs_fixed.eq(e).attr(x).data("index",t[z]),h.trs_fixed_r.eq(e).attr(x).data("index",t[z])}),parseInt(c[0][z])-1),y=l.find(q),n=l.find(R),f=l.find(Y);-1==r?y.find('tr[data-level="0"][data-index="0"]')[0]?(y.find('tr[data-level="0"][data-index="0"]').before(h.trs),n.find('tr[data-level="0"][data-index="0"]').before(h.trs_fixed),f.find('tr[data-level="0"][data-index="0"]').before(h.trs_fixed_r)):(y.find("tbody").prepend(h.trs),n.find("tbody").prepend(h.trs_fixed),f.find("tbody").prepend(h.trs_fixed_r)):-1===o?(y.find("tbody").append(h.trs),n.find("tbody").append(h.trs_fixed),f.find("tbody").append(h.trs_fixed_r)):(r=p[0][m],y.find('tr[data-level="0"][data-index="'+r+'"]').before(h.trs),n.find('tr[data-level="0"][data-index="'+r+'"]').before(h.trs_fixed),f.find('tr[data-level="0"][data-index="'+r+'"]').before(h.trs_fixed_r)),layui.each(P.cache[e],function(e,t){l.find('tr[data-level="0"][lay-data-index="'+t[z]+'"]').attr("data-index",e).data("index",e)}),a.renderTreeTable(l.find(c.map(function(e,t,a){return'tr[lay-data-index="'+e[z]+'"]'}).join(",")))}return a.updateCheckStatus(u),u&&(o=l.find('tr[lay-data-index="'+u[z]+'"]'),a.updateNodeIcon({scopeEl:o,isExpand:u[H],isParent:u[s]})),B.resize(e),t&&l.find(q).find('tr[lay-data-index="'+c[0][z]+'"]').get(0).scrollIntoViewIfNeeded(),c}},B.checkStatus=function(e,n){var i,t,a,l=j(e);if(l)return l=l.getOptions().tree,i=P.config.checkName,t=B.getData(e,!0).filter(function(e,t,a){return e[i]||n&&e[b]}),a=!0,layui.each("all"===l.data.cascade?P.cache[e]:B.getData(e,!0),function(e,t){if(!t[i])return!(a=!1)}),{data:t,isAll:a}},B.on("sort",function(e){var e=e.config,t=e.elem.next(),e=e.id;t.hasClass(h)&&B.sort(e)}),B.on("row",function(e){e.config.elem.next().hasClass(h)&&o(e)}),B.on("rowDouble",function(e){var t=e.config,a=t.elem.next();t.id;a.hasClass(h)&&(o(e),(t.tree||{}).view.dblClickExpand)&&J({trElem:e.tr.first()},null,null,null,!0)}),B.on("rowContextmenu",function(e){var t=e.config,a=t.elem.next();t.id;a.hasClass(h)&&o(e)}),B.on("tool",function(e){var t=e.config,a=t.elem.next();t.id;a.hasClass(h)&&o(e)}),B.on("edit",function(e){var t=e.config,a=t.elem.next();t.id;a.hasClass(h)&&(o(e),e.field===t.tree.customName.name)&&((a={})[e.field]=e.value,e.update(a))}),B.on("radio",function(e){var t=e.config,a=t.elem.next(),t=t.id;a.hasClass(h)&&(a=j(t),o(e),u.call(a,e.tr,e.checked))}),a.prototype.setRowCheckedClass=function(e,t){var a=this.getOptions(),n=(e.data("index"),a.elem.next());e[t?"addClass":"removeClass"](l),e.each(function(){var e=A(this).data("index");n.find('.layui-table-fixed-r tbody tr[data-index="'+e+'"]')[t?"addClass":"removeClass"](l)})},a.prototype.updateCheckStatus=function(e,t){var a,n,i,l,d,r,o,c=this,u=c.getOptions();return!!u.hasChecboxCol&&(a=u.tree,n=u.id,i=u.elem.next(),l=P.config.checkName,"all"!==(d=a.data.cascade)&&"parent"!==d||!e||(d=c.updateParentCheckStatus(e,"boolean"===layui.type(t)?t:null),layui.each(d,function(e,t){var a=i.find('tr[lay-data-index="'+t[z]+'"] input[name="layTableCheckbox"]:not(:disabled)'),n=t[l];c.setRowCheckedClass(a.closest("tr"),n),x.render(a.prop({checked:n,indeterminate:t[b]}))})),o=!(r=!0),0<(e=(e="all"===a.data.cascade?P.cache[n]:B.getData(n,!0)).filter(function(e){return!e[u.disabledName]})).length?layui.each(e,function(e,t){if((t[l]||t[b])&&(o=!0),t[l]||(r=!1),o&&!r)return!0}):r=!1,o=o&&!r,x.render(i.find('input[name="layTableCheckbox"][lay-filter="layTableAllChoose"]').prop({checked:r,indeterminate:o})),r)},a.prototype.updateParentCheckStatus=function(a,n){var i,e=this.getOptions(),t=e.tree,e=e.id,l=P.config.checkName,t=t.customName.children,d=[];return!(a[b]=!1)===n?a[t].length?layui.each(a[t],function(e,t){if(!t[l])return n=!1,a[b]=!0}):n=!1:!1===n?layui.each(a[t],function(e,t){if(t[l]||t[b])return a[b]=!0}):(n=!1,i=0,layui.each(a[t],function(e,t){t[l]&&i++}),n=a[t].length?a[t].length===i:a[l],a[b]=!n&&0')),n=(e.tree(a),i.elem=p(i.elem));if(n[0]){if(e.key=i.id||e.index,e.elem=a,e.elemNone=p('
      '+i.text.none+"
      "),n.html(e.elem),0==e.elem.find(".layui-tree-set").length)return e.elem.append(e.elemNone);i.showCheckbox&&e.renderForm("checkbox"),e.elem.find(".layui-tree-set").each(function(){var e=p(this);e.parent(".layui-tree-pack")[0]||e.addClass("layui-tree-setHide"),!e.next()[0]&&e.parents(".layui-tree-pack").eq(1).hasClass("layui-tree-lineExtend")&&e.addClass(T),e.next()[0]||e.parents(".layui-tree-set").eq(0).next()[0]||e.addClass(T)}),e.events()}},l.prototype.renderForm=function(e){i.render(e,"LAY-tree-"+this.index)},l.prototype.tree=function(r,e){var d=this,s=d.config,o=s.customName,e=e||s.data;layui.each(e,function(e,i){var a,n,t=i[o.children]&&0"),c=p(['
      ','
      ','
      ',s.showLine?t?'':'':'',s.showCheckbox?'':"",s.isJump&&i.href?''+(i[o.title]||i.label||s.text.defaultNodeName)+"":''+(i[o.title]||i.label||s.text.defaultNodeName)+"","
      ",s.edit?(a={add:'',update:'',del:''},n=['
      '],!0===s.edit&&(s.edit=["update","del"]),"object"==typeof s.edit?(layui.each(s.edit,function(e,i){n.push(a[i]||"")}),n.join("")+"
      "):void 0):"","
      "].join(""));t&&(c.append(l),d.tree(l,i[o.children])),r.append(c),c.prev("."+k)[0]&&c.prev().children(".layui-tree-pack").addClass("layui-tree-showLine"),t||c.parent(".layui-tree-pack").addClass("layui-tree-lineExtend"),d.spread(c,i),s.showCheckbox&&(i.checked&&d.checkids.push(i[o.id]),d.checkClick(c,i)),s.edit&&d.operate(c,i)})},l.prototype.spread=function(n,t){var l=this,c=l.config,e=n.children("."+b),i=e.children("."+g),a=i.find('input[same="layuiTreeCheck"]'),r=e.find("."+C),e=e.find("."+w),d=c.onlyIconControl?r:i,s="";d.on("click",function(e){var i=n.children("."+N),a=(d.children(".layui-icon")[0]?d:d.find(".layui-tree-icon")).children(".layui-icon");i[0]?n.hasClass(F)?(n.removeClass(F),i.slideUp(200),a.removeClass(x).addClass(v),l.updateFieldValue(t,"spread",!1)):(n.addClass(F),i.slideDown(200),a.addClass(x).removeClass(v),l.updateFieldValue(t,"spread",!0),c.accordion&&((i=n.siblings("."+k)).removeClass(F),i.children("."+N).slideUp(200),i.find(".layui-tree-icon").children(".layui-icon").removeClass(x).addClass(v))):s="normal"}),e.on("click",function(){p(this).hasClass(u)||(s=n.hasClass(F)?c.onlyIconControl?"open":"close":c.onlyIconControl?"close":"open",a[0]&&l.updateFieldValue(t,"checked",a.prop("checked")),c.click&&c.click({elem:n,state:s,data:t}))})},l.prototype.updateFieldValue=function(e,i,a){i in e&&(e[i]=a)},l.prototype.setCheckbox=function(e,i,a){var t,n=this,l=n.config.customName,c=a.prop("checked");a.prop("disabled")||("object"!=typeof i[l.children]&&!e.find("."+N)[0]||e.find("."+N).find('input[same="layuiTreeCheck"]').each(function(e){this.disabled||((e=i[l.children][e])&&n.updateFieldValue(e,"checked",c),n.updateFieldValue(this,"checked",c))}),(t=function(e){var i,a,n;e.parents("."+k)[0]&&(a=(e=e.parent("."+N)).parent(),n=e.prev().find('input[same="layuiTreeCheck"]'),c?n.prop("checked",c):(e.find('input[same="layuiTreeCheck"]').each(function(){this.checked&&(i=!0)}),i||n.prop("checked",!1)),t(a))})(e),n.renderForm("checkbox"))},l.prototype.checkClick=function(a,n){var t=this,l=t.config;a.children("."+b).children("."+g).on("click",'input[same="layuiTreeCheck"]+',function(e){layui.stope(e);var e=p(this).prev(),i=e.prop("checked");e.prop("disabled")||(t.setCheckbox(a,n,e),t.updateFieldValue(n,"checked",i),l.oncheck&&l.oncheck({elem:a,checked:i,data:n}))})},l.prototype.operate=function(r,d){var s=this,o=s.config,u=o.customName,e=r.children("."+b),h=e.children("."+g);e.children(".layui-tree-btnGroup").on("click",".layui-icon",function(e){layui.stope(e);var i,e=p(this).data("type"),n=r.children("."+N),t={data:d,type:e,elem:r};if("add"==e){n[0]||(o.showLine?(h.find("."+C).addClass("layui-tree-icon"),h.find("."+C).children(".layui-icon").addClass(v).removeClass("layui-icon-file")):h.find(".layui-tree-iconArrow").removeClass(m),r.append('
      '));var a,l=o.operate&&o.operate(t),c={};if(c[u.title]=o.text.defaultNodeName,c[u.id]=l,s.tree(r.children("."+N),[c]),o.showLine&&(n[0]?(n.hasClass(S)||n.addClass(S),r.find("."+N).each(function(){p(this).children("."+k).last().addClass(T)}),(n.children("."+k).last().prev().hasClass(T)?n.children("."+k).last().prev():n.children("."+k).last()).removeClass(T),!r.parent("."+N)[0]&&r.next()[0]&&n.children("."+k).last().removeClass(T)):(l=r.siblings("."+k),a=1,c=r.parent("."+N),layui.each(l,function(e,i){p(i).children("."+N)[0]||(a=0)}),(1==a?(l.children("."+N).addClass(L),l.children("."+N).children("."+k).removeClass(T),r.children("."+N).addClass(L),c.removeClass(S),c.children("."+k).last().children("."+N).children("."+k).last()):r.children("."+N).children("."+k)).addClass(T))),!o.showCheckbox)return;h.find('input[same="layuiTreeCheck"]')[0].checked&&(r.children("."+N).children("."+k).last().find('input[same="layuiTreeCheck"]')[0].checked=!0),s.renderForm("checkbox")}else"update"==e?(l=h.children("."+w).html(),h.children("."+w).html(""),h.append(''),h.children(".layui-tree-editInput").val(f.unescape(l)).focus(),i=function(e){var i=f.escape(e.val().trim())||o.text.defaultNodeName;e.remove(),h.children("."+w).html(i),t.data[u.title]=i,o.operate&&o.operate(t)},h.children(".layui-tree-editInput").blur(function(){i(p(this))}),h.children(".layui-tree-editInput").on("keydown",function(e){13===e.keyCode&&(e.preventDefault(),i(p(this)))})):y.confirm('\u786e\u8ba4\u5220\u9664\u8be5\u8282\u70b9 "'+(d[u.title]||"")+'" \u5417\uff1f',function(e){var l,a,i;o.operate&&o.operate(t),t.status="remove",y.close(e),r.prev("."+k)[0]||r.next("."+k)[0]||r.parent("."+N)[0]?(r.siblings("."+k).children("."+b)[0]?(o.showCheckbox&&(l=function(e){var i,a,n,t;e.parents("."+k)[0]&&(i=e.siblings("."+k).children("."+b),a=(e=e.parent("."+N).prev()).find('input[same="layuiTreeCheck"]')[0],n=1,(t=0)==a.checked)&&(i.each(function(e,i){i=p(i).find('input[same="layuiTreeCheck"]')[0];0!=i.checked||i.disabled||(n=0),i.disabled||(t=1)}),1==n)&&1==t&&(a.checked=!0,s.renderForm("checkbox"),l(e.parent("."+k)))})(r),o.showLine&&(e=r.siblings("."+k),a=1,i=r.parent("."+N),layui.each(e,function(e,i){p(i).children("."+N)[0]||(a=0)}),1==a?(n[0]||(i.removeClass(S),e.children("."+N).addClass(L),e.children("."+N).children("."+k).removeClass(T)),(r.next()[0]?i.children("."+k).last():r.prev()).children("."+N).children("."+k).last().addClass(T),r.next()[0]||r.parents("."+k)[1]||r.parents("."+k).eq(0).next()[0]||r.prev("."+k).addClass(T)):!r.next()[0]&&r.hasClass(T)&&r.prev().addClass(T))):(e=r.parent("."+N).prev(),o.showLine?(e.find("."+C).removeClass("layui-tree-icon"),e.find("."+C).children(".layui-icon").removeClass(x).addClass("layui-icon-file"),(i=e.parents("."+N).eq(0)).addClass(S),i.children("."+k).each(function(){p(this).children("."+N).children("."+k).last().addClass(T)})):e.find(".layui-tree-iconArrow").addClass(m),r.parents("."+k).eq(0).removeClass(F),r.parent("."+N).remove()),r.remove()):(r.remove(),s.elem.append(s.elemNone))})})},l.prototype.events=function(){var i=this,t=i.config;i.elem.find(".layui-tree-checkedFirst");i.setChecked(i.checkids),i.elem.find(".layui-tree-search").on("keyup",function(){var e=p(this),a=e.val(),e=e.nextAll(),n=[];e.find("."+w).each(function(){var i,e=p(this).parents("."+b);-1!=p(this).html().indexOf(a)&&(n.push(p(this).parent()),(i=function(e){e.addClass("layui-tree-searchShow"),e.parent("."+N)[0]&&i(e.parent("."+N).parent("."+k))})(e.parent("."+k)))}),e.find("."+b).each(function(){var e=p(this).parent("."+k);e.hasClass("layui-tree-searchShow")||e.addClass(m)}),0==e.find(".layui-tree-searchShow").length&&i.elem.append(i.elemNone),t.onsearch&&t.onsearch({elem:n})}),i.elem.find(".layui-tree-search").on("keydown",function(){p(this).nextAll().find("."+b).each(function(){p(this).parent("."+k).removeClass("layui-tree-searchShow "+m)}),p(".layui-tree-emptyText")[0]&&p(".layui-tree-emptyText").remove()})},l.prototype.getChecked=function(){var t=this,e=t.config,l=e.customName,i=[],a=[],c=(t.elem.find(".layui-form-checked").each(function(){i.push(p(this).prev()[0].value)}),function(e,n){layui.each(e,function(e,a){layui.each(i,function(e,i){if(a[l.id]==i)return t.updateFieldValue(a,"checked",!0),delete(i=p.extend({},a))[l.children],n.push(i),a[l.children]&&(i[l.children]=[],c(a[l.children],i[l.children])),!0})})});return c(p.extend({},e.data),a),a},l.prototype.setChecked=function(l){this.config;this.elem.find("."+k).each(function(e,i){var a=p(this).data("id"),n=p(i).children("."+b).find('input[same="layuiTreeCheck"]'),t=n.next();if("number"==typeof l){if(a.toString()==l.toString())return n[0].checked||t.click(),!1}else"object"==typeof l&&layui.each(l,function(e,i){if(i.toString()==a.toString()&&!n[0].checked)return t.click(),!0})})},n.that={},n.config={},t.reload=function(e,i){e=n.that[e];return e.reload(i),n.call(e)},t.getChecked=function(e){return n.that[e].getChecked()},t.setChecked=function(e,i){return n.that[e].setChecked(i)},t.render=function(e){e=new l(e);return n.call(e)},e(a,t)});layui.define(["laytpl","form"],function(e){"use strict";var d=layui.$,n=layui.laytpl,t=layui.form,a="transfer",i={config:{},index:layui[a]?layui[a].index+1e4:0,set:function(e){var t=this;return t.config=d.extend({},t.config,e),t},on:function(e,t){return layui.onevent.call(this,a,e,t)}},l=function(){var t=this,e=t.config,a=e.id||t.index;return l.that[a]=t,{config:l.config[a]=e,reload:function(e){t.reload.call(t,e)},getData:function(){return t.getData.call(t)}}},s="layui-hide",u="layui-btn-disabled",c="layui-none",r="layui-transfer-box",h="layui-transfer-header",o="layui-transfer-search",f="layui-transfer-data",y=function(e){return['
      ','
      ','","
      ","{{# if(d.data.showSearch){ }}",'","{{# } }}",'
        ',"
        "].join("")},p=['
        ',y({index:0,checkAllName:"layTransferLeftCheckAll"}),'
        ','",'","
        ",y({index:1,checkAllName:"layTransferRightCheckAll"}),"
        "].join(""),v=function(e){var t=this;t.index=++i.index,t.config=d.extend({},t.config,i.config,e),t.render()};v.prototype.config={title:["\u5217\u8868\u4e00","\u5217\u8868\u4e8c"],width:200,height:360,data:[],value:[],showSearch:!1,id:"",text:{none:"\u65e0\u6570\u636e",searchNone:"\u65e0\u5339\u914d\u6570\u636e"}},v.prototype.reload=function(e){var t=this;t.config=d.extend({},t.config,e),t.render()},v.prototype.render=function(){var e=this,t=e.config,a=e.elem=d(n(p,{open:"{{",close:"}}"}).render({data:t,index:e.index})),i=t.elem=d(t.elem);i[0]&&(t.data=t.data||[],t.value=t.value||[],t.id="id"in t?t.id:elem.attr("id")||e.index,e.key=t.id,i.html(e.elem),e.layBox=e.elem.find("."+r),e.layHeader=e.elem.find("."+h),e.laySearch=e.elem.find("."+o),e.layData=a.find("."+f),e.layBtn=a.find(".layui-transfer-active .layui-btn"),e.layBox.css({width:t.width,height:t.height}),e.layData.css({height:(i=t.height-e.layHeader.outerHeight(),t.showSearch&&(i-=e.laySearch.outerHeight()),i-2)}),e.renderData(),e.events())},v.prototype.renderData=function(){var e=this,t=e.config,l=[{checkName:"layTransferLeftCheck",views:[]},{checkName:"layTransferRightCheck",views:[]}];e.parseData(function(a){var i=a.selected?1:0,n=["
      • ",'',"
      • "].join("");i?layui.each(t.value,function(e,t){t==a.value&&a.selected&&(l[i].views[e]=n)}):l[i].views.push(n),delete a.selected}),e.layData.eq(0).html(l[0].views.join("")),e.layData.eq(1).html(l[1].views.join("")),e.renderCheckBtn()},v.prototype.renderForm=function(e){t.render(e,"LAY-transfer-"+this.index)},v.prototype.renderCheckBtn=function(c){var r=this,o=r.config;c=c||{},r.layBox.each(function(e){var t=d(this),a=t.find("."+f),t=t.find("."+h).find('input[type="checkbox"]'),i=a.find('input[type="checkbox"]'),n=0,l=!1;i.each(function(){var e=d(this).data("hide");(this.checked||this.disabled||e)&&n++,this.checked&&!e&&(l=!0)}),t.prop("checked",l&&n===i.length),r.layBtn.eq(e)[l?"removeClass":"addClass"](u),c.stopNone||(i=a.children("li:not(."+s+")").length,r.noneView(a,i?"":o.text.none))}),r.renderForm("checkbox")},v.prototype.noneView=function(e,t){var a=d('

        '+(t||"")+"

        ");e.find("."+c)[0]&&e.find("."+c).remove(),t.replace(/\s/g,"")&&e.append(a)},v.prototype.setValue=function(){var e=this.config,t=[];return this.layBox.eq(1).find("."+f+' input[type="checkbox"]').each(function(){d(this).data("hide")||t.push(this.value)}),e.value=t,this},v.prototype.parseData=function(t){var i=this.config,n=[];return layui.each(i.data,function(e,a){a=("function"==typeof i.parseData?i.parseData(a):a)||a,n.push(a=d.extend({},a)),layui.each(i.value,function(e,t){t==a.value&&(a.selected=!0)}),t&&t(a)}),i.data=n,this},v.prototype.getData=function(e){var t=this.config,i=[];return this.setValue(),layui.each(e||t.value,function(e,a){layui.each(t.data,function(e,t){delete t.selected,a==t.value&&i.push(t)})}),i},v.prototype.transfer=function(e,t){var a,i=this,n=i.config,l=i.layBox.eq(e),c=[],t=(t?((a=(t=t).find('input[type="checkbox"]'))[0].checked=!1,l.siblings("."+r).find("."+f).append(t.clone()),t.remove(),c.push(a[0].value),i.setValue()):l.each(function(e){d(this).find("."+f).children("li").each(function(){var e=d(this),t=e.find('input[type="checkbox"]'),a=t.data("hide");t[0].checked&&!a&&(t[0].checked=!1,l.siblings("."+r).find("."+f).append(e.clone()),e.remove(),c.push(t[0].value)),i.setValue()})}),i.renderCheckBtn(),l.siblings("."+r).find("."+o+" input"));""!==t.val()&&t.trigger("keyup"),n.onchange&&n.onchange(i.getData(c),e)},v.prototype.events=function(){var n=this,l=n.config;n.elem.on("click",'input[lay-filter="layTransferCheckbox"]+',function(){var e=d(this).prev(),t=e[0].checked,a=e.parents("."+r).eq(0).find("."+f);e[0].disabled||("all"===e.attr("lay-type")&&a.find('input[type="checkbox"]').each(function(){this.disabled||(this.checked=t)}),setTimeout(function(){n.renderCheckBtn({stopNone:!0})},0))}),n.elem.on("dblclick","."+f+">li",function(e){var t=d(this),a=t.children('input[type="checkbox"]'),i=t.parent().parent().data("index");a[0].disabled||!1!==("function"==typeof l.dblclick?l.dblclick({elem:t,data:n.getData([a[0].value])[0],index:i}):null)&&n.transfer(i,t)}),n.layBtn.on("click",function(){var e=d(this),t=e.data("index");e.hasClass(u)||n.transfer(t)}),n.laySearch.find("input").on("keyup",function(){var i=this.value,e=d(this).parents("."+o).eq(0).siblings("."+f),t=e.children("li"),t=(t.each(function(){var e=d(this),t=e.find('input[type="checkbox"]'),a=t[0].title,a=("cs"!==l.showSearch&&(a=a.toLowerCase(),i=i.toLowerCase()),-1!==a.indexOf(i));e[a?"removeClass":"addClass"](s),t.data("hide",!a)}),n.renderCheckBtn(),t.length===e.children("li."+s).length);n.noneView(e,t?l.text.searchNone:"")})},l.that={},l.config={},i.reload=function(e,t){e=l.that[e];return e.reload(t),l.call(e)},i.getData=function(e){return l.that[e].getData()},i.render=function(e){e=new v(e);return l.call(e)},e(a,i)});layui.define(["jquery","lay"],function(e){"use strict";var a=layui.$,l=layui.lay,t=(layui.hint(),layui.device(),{config:{},set:function(e){var i=this;return i.config=a.extend({},i.config,e),i},on:function(e,i){return layui.onevent.call(this,d,e,i)}}),d="carousel",r="layui-this",s="layui-carousel-left",u="layui-carousel-right",c="layui-carousel-prev",h="layui-carousel-next",o="layui-carousel-arrow",m="layui-carousel-ind",i=function(e){var i=this;i.config=a.extend({},i.config,t.config,e),i.render()};i.prototype.config={width:"600px",height:"280px",full:!1,arrow:"hover",indicator:"inside",autoplay:!0,interval:3e3,anim:"",trigger:"click",index:0},i.prototype.render=function(){var e=this,i=e.config,n=a(i.elem);if(1*[carousel-item]>*"),i.index<0&&(i.index=0),i.index>=e.elemItem.length&&(i.index=e.elemItem.length-1),i.interval<800&&(i.interval=800),i.full?i.elem.css({position:"fixed",width:"100%",height:"100%",zIndex:9999}):i.elem.css({width:i.width,height:i.height}),i.elem.attr("lay-anim",i.anim),e.elemItem.eq(i.index).addClass(r),e.elemItem.length<=1||(e.indicator(),e.arrow(),e.autoplay(),e.events()))},i.prototype.reload=function(e){var i=this;clearInterval(i.timer),i.config=a.extend({},i.config,e),i.render()},i.prototype.prevIndex=function(){var e=this.config.index-1;return e=e<0?this.elemItem.length-1:e},i.prototype.nextIndex=function(){var e=this.config.index+1;return e=e>=this.elemItem.length?0:e},i.prototype.addIndex=function(e){var i=this.config;i.index=i.index+(e=e||1),i.index>=this.elemItem.length&&(i.index=0)},i.prototype.subIndex=function(e){var i=this.config;i.index=i.index-(e=e||1),i.index<0&&(i.index=this.elemItem.length-1)},i.prototype.autoplay=function(){var e=this,i=e.config;i.autoplay&&(clearInterval(e.timer),e.timer=setInterval(function(){e.slide()},i.interval))},i.prototype.arrow=function(){var i=this,e=i.config,n=a(['",'"].join(""));e.elem.attr("lay-arrow",e.arrow),e.elem.find("."+o)[0]&&e.elem.find("."+o).remove(),e.elem.append(n),n.on("click",function(){var e=a(this).attr("lay-type");i.slide(e)})},i.prototype["goto"]=function(e){var i=this,n=i.config;e>n.index?i.slide("add",e-n.index):e
          ',(i=[],layui.each(e.elemItem,function(e){i.push("")}),i.join("")),"
        "].join(""));n.elem.attr("lay-indicator",n.indicator),n.elem.find("."+m)[0]&&n.elem.find("."+m).remove(),n.elem.append(t),"updown"===n.anim&&t.css("margin-top",-t.height()/2),t.find("li").on("hover"===n.trigger?"mouseover":n.trigger,function(){e["goto"](a(this).index())})},i.prototype.slide=function(e,i){var n=this,t=n.elemItem,a=n.config,o=a.index,l=a.elem.attr("lay-filter");n.haveSlide||("sub"===e?(n.subIndex(i),t.eq(a.index).addClass(c),setTimeout(function(){t.eq(o).addClass(u),t.eq(a.index).addClass(u)},50)):(n.addIndex(i),t.eq(a.index).addClass(h),setTimeout(function(){t.eq(o).addClass(s),t.eq(a.index).addClass(s)},50)),setTimeout(function(){t.removeClass(r+" "+c+" "+h+" "+s+" "+u),t.eq(a.index).addClass(r),n.haveSlide=!1},350),n.elemInd.find("li").eq(a.index).addClass(r).siblings().removeClass(r),n.haveSlide=!0,e={index:a.index,prevIndex:o,item:t.eq(a.index)},"function"==typeof a.change&&a.change(e),layui.event.call(this,d,"change("+l+")",e))},i.prototype.events=function(){var t,a,o=this,e=o.config;e.elem.data("haveEvents")||(e.elem.on("mouseenter touchstart",function(){"always"!==o.config.autoplay&&clearInterval(o.timer)}).on("mouseleave touchend",function(){"always"!==o.config.autoplay&&o.autoplay()}),t=e.elem,a="updown"===e.anim,l.touchSwipe(t,{onTouchEnd:function(e,i){var n=Date.now()-i.timeStart,i=a?i.distanceY:i.distanceX;(.25t[a?"height":"width"]()/3)&&o.slide(0a.length&&(a.value=a.length),parseInt(a.value)===a.value||a.half||(a.value=Math.ceil(a.value)-a.value<.5?Math.ceil(a.value):Math.floor(a.value)),'
          "),n=1;n<=a.length;n++){var o='
        • ";a.half&&parseInt(a.value)!==a.value&&n==Math.ceil(a.value)?i=i+'
        • ":i+=o}i+="
        "+(a.text?''+a.value+"\u661f":"")+"";var l=a.elem,s=l.next(".layui-rate");s[0]&&s.remove(),e.elemTemp=u(i),a.span=e.elemTemp.next("span"),a.setText&&a.setText(a.value),l.html(e.elemTemp),l.addClass("layui-inline"),a.readonly||e.action()},a.prototype.setvalue=function(e){this.config.value=e,this.render()},a.prototype.action=function(){var n=this.config,t=this.elemTemp,i=t.find("i").width(),l=t.children("li");l.each(function(e){var a=e+1,l=u(this);l.on("click",function(e){n.value=a,n.half&&e.pageX-u(this).offset().left<=i/2&&(n.value=n.value-.5),n.text&&t.next("span").text(n.value+"\u661f"),n.choose&&n.choose(n.value),n.setText&&n.setText(n.value)}),l.on("mousemove",function(e){t.find("i").each(function(){u(this).addClass(h).removeClass(s)}),t.find("i:lt("+a+")").each(function(){u(this).addClass(f).removeClass(v)}),n.half&&e.pageX-u(this).offset().left<=i/2&&l.children("i").addClass(o).removeClass(f)}),l.on("mouseleave",function(){t.find("i").each(function(){u(this).addClass(h).removeClass(s)}),t.find("i:lt("+Math.floor(n.value)+")").each(function(){u(this).addClass(f).removeClass(v)}),n.half&&parseInt(n.value)!==n.value&&t.children("li:eq("+Math.floor(n.value)+")").children("i").addClass(o).removeClass("layui-icon-rate-solid layui-icon-rate")})}),r.touchSwipe(t,{onTouchMove:function(e,a){var i;Date.now()-a.timeStart<=200||(a=e.touches[0].pageX,e=t.width()/n.length,a=(a-t.offset().left)/e,(i=(i=(e=a%1)<=.5&&n.half?.5+(a-e):Math.ceil(a))>n.length?n.length:i)<0&&(i=0),l.each(function(e){var a=u(this).children("i"),l=Math.ceil(i)-e==1,t=Math.ceil(i)>e,e=i-e==.5;t?(a.addClass(f).removeClass(v),n.half&&e&&a.addClass(o).removeClass(f)):a.addClass(h).removeClass(s),a.toggleClass("layui-rate-hover",l)}),n.value=i,n.text&&t.next("span").text(n.value+"\u661f"),n.setText&&n.setText(n.value))},onTouchEnd:function(e,a){Date.now()-a.timeStart<=200||(t.find("i").removeClass("layui-rate-hover"),n.choose&&n.choose(n.value),n.setText&&n.setText(n.value))}})},a.prototype.events=function(){},c.render=function(e){e=new a(e);return function(){var a=this;return{setvalue:function(e){a.setvalue.call(a,e)},config:a.config}}.call(e)},e(l,c)});layui.define("jquery",function(o){"use strict";var v=layui.$,l=function(o){};l.prototype.load=function(o){var i,n,r,l,c,m,e,a,f,s,u,p,t,d,y=this,h=0,g=v((o=o||{}).elem);if(g[0])return c=v(o.scrollElem||document),m="mb"in o?o.mb:50,e=!("isAuto"in o)||o.isAuto,a=o.end||"\u6ca1\u6709\u66f4\u591a\u4e86",f="top"===(o.direction||"bottom"),y._cleanup(g,c),s=o.scrollElem&&o.scrollElem!==document,p=v('"),g.find(".layui-flow-more")[0]||g[f?"prepend":"append"](p),t=function(o,l){var e=s?c.prop("scrollHeight"):document.documentElement.scrollHeight,t=c.scrollTop();o=v(o),p[f?"after":"before"](o),(l=0==l||null)?p.html(a):p.find("a").html(u),n=l,i=null,r&&r(),f&&(o=s?c.prop("scrollHeight"):document.documentElement.scrollHeight,1===h?c.scrollTop(o):1
        '),"function"==typeof o.done&&o.done(++h,t)})(),p.find("a").on("click.flow",function(){v(this);n||i||d()}),o.isLazyimg&&(r=y.lazyimg({elem:o.elem+" img",scrollElem:o.scrollElem,direction:o.direction})),e&&c.on("scroll.flow",function(){var e=v(this),t=e.scrollTop();l&&clearTimeout(l),!n&&g.width()&&(l=setTimeout(function(){var o=(s?e:v(window)).height(),l=s?e.prop("scrollHeight"):document.documentElement.scrollHeight;(f?t<=m:l-t-o<=m)&&!i&&d()},100))}),y},l.prototype.lazyimg=function(o){var l,m=this,a=0,f=v((o=o||{}).scrollElem||document),s=o.elem||"img",n="top"===(o.direction||"bottom"),u=o.scrollElem&&o.scrollElem!==document,p=function(l,o){var e,t=f.scrollTop(),o=t+o,i=u?l.offset().top-f.offset().top+t:l.offset().top;(n?i+l.height():i)>=t&&i<=o&&l.attr("lay-src")&&(e=l.attr("lay-src"),layui.img(e,function(){var o=m.lazyimg.elem.eq(a);l.attr("src",e).removeAttr("lay-src"),o[0]&&r(o),a++},function(){m.lazyimg.elem.eq(a);l.removeAttr("lay-src")}))},r=function(o,l){var e=(u?l||f:v(window)).height(),t=f.scrollTop(),i=t+e;if(m.lazyimg.elem=v(s),o)p(o,e);else for(var n=0;n"),preview:"Preview"},wordWrap:!0,lang:"text",highlighter:!1,langMarker:!1},W=layui.code?layui.code.index+1e4:0,R=function(e){return String(e).replace(/\s+$/,"").replace(/^\n|\n$/,"")};e("code",function(l,e){var o,i,t,a,n,d,c,s,r,u,y,p,E,f,h,v,m,L,_,M,C,g={config:l=x.extend(!0,{},T,l),reload:function(e){layui.code(this.updateOptions(e))},updateOptions:function(e){return delete(e=e||{}).elem,x.extend(!0,l,e)},reloadCode:function(e){layui.code(this.updateOptions(e),"reloadCode")}},w=x(l.elem);return 1',l.ln?['
        ',D.digit(t+1)+".","
        "].join(""):"",'
        ',e||" ","
        ",""].join("")})}},a=l.code,n=function(e){return"function"==typeof l.codeParse?l.codeParse(e,l):e},"reloadCode"===e?o.children(".layui-code-wrap").html(w(n(a)).html):(d=layui.code.index=++W,o.attr("lay-code-index",d),(M=A.CDDE_DATA_CLASS in o.data())&&o.attr("class",o.data(A.CDDE_DATA_CLASS)||""),M||o.data(A.CDDE_DATA_CLASS,o.attr("class")),c={copy:{className:"file-b",title:["\u590d\u5236\u4ee3\u7801"],event:function(e){var t=D.unescape(n(l.code));lay.clipboard.writeText({text:t,done:function(){N.msg("\u5df2\u590d\u5236",{icon:1})},error:function(){N.msg("\u590d\u5236\u5931\u8d25",{icon:2})}}),"function"==typeof l.onCopy&&l.onCopy(t)}}},function b(){var e=o.parent("."+A.ELEM_PREVIEW),t=e.children("."+A.ELEM_TAB),a=e.children("."+A.ELEM_ITEM+"-preview");return t.remove(),a.remove(),e[0]&&o.unwrap(),b}(),l.preview&&(M="LAY-CODE-DF-"+d,f=l.layout||["code","preview"],s="iframe"===l.preview,E=x('
        '),C=x('
        '),r=x('
        '),_=x('
        '),u=x('
        '),l.id&&E.attr("id",l.id),E.addClass(l.className),C.attr("lay-filter",M),layui.each(f,function(e,t){var a=x('
      • ');0===e&&a.addClass("layui-this"),a.html(l.text[t]),r.append(a)}),x.extend(c,{full:{className:"screen-full",title:["\u6700\u5927\u5316\u663e\u793a","\u8fd8\u539f\u663e\u793a"],event:function(e){var e=e.elem,t=e.closest("."+A.ELEM_PREVIEW),a="layui-icon-"+this.className,i="layui-icon-screen-restore",l=this.title,o=x("html,body"),n="layui-scrollbar-hide";e.hasClass(a)?(t.addClass(A.ELEM_FULL),e.removeClass(a).addClass(i),e.attr("title",l[1]),o.addClass(n)):(t.removeClass(A.ELEM_FULL),e.removeClass(i).addClass(a),e.attr("title",l[0]),o.removeClass(n))}},window:{className:"release",title:["\u5728\u65b0\u7a97\u53e3\u9884\u89c8"],event:function(e){D.openWin({content:n(l.code)})}}}),l.copy&&("array"===layui.type(l.tools)?-1===l.tools.indexOf("copy")&&l.tools.unshift("copy"):l.tools=["copy"]),u.on("click",">i",function(){var e=x(this),t=e.data("type"),e={elem:e,type:t,options:l,rawCode:l.code,finalCode:D.unescape(n(l.code))};c[t]&&"function"==typeof c[t].event&&c[t].event(e),"function"==typeof l.toolsEvent&&l.toolsEvent(e)}),l.addTools&&l.tools&&(l.tools=[].concat(l.tools,l.addTools)),layui.each(l.tools,function(e,t){var a="object"==typeof t,i=a?t:c[t]||{className:t,title:[t]},l=i.className||i.type,o=i.title||[""],a=a?i.type||l:t;a&&(c[a]||((t={})[a]=i,x.extend(c,t)),u.append(''))}),o.addClass(A.ELEM_ITEM).wrap(E),C.append(r),l.tools&&C.append(u),o.before(C),s&&_.html(''),y=function(e){var t=e.children("iframe")[0];s&&t?t.srcdoc=n(l.code):e.html(l.code),setTimeout(function(){"function"==typeof l.done&&l.done({container:e,options:l,render:function(){I.render(e.find(".layui-form")),S.render()}})},3)},"preview"===f[0]?(_.addClass(A.ELEM_SHOW),o.before(_),y(_)):o.addClass(A.ELEM_SHOW).after(_),l.previewStyle=[l.style,l.previewStyle].join(""),_.attr("style",l.previewStyle),S.on("tab("+M+")",function(e){var t=x(this),a=x(e.elem).closest("."+A.ELEM_PREVIEW).find("."+A.ELEM_ITEM),e=a.eq(e.index);a.removeClass(A.ELEM_SHOW),e.addClass(A.ELEM_SHOW),"preview"===t.attr("lay-id")&&y(e),L()})),p=x(''),o.addClass((E=["layui-code-view layui-border-box"],l.wordWrap||E.push("layui-code-nowrap"),E.join(" "))),(C=l.theme||l.skin)&&(o.removeClass("layui-code-theme-dark layui-code-theme-light"),o.addClass("layui-code-theme-"+C)),l.highlighter&&o.addClass([l.highlighter,"language-"+l.lang,"layui-code-hl"].join(" ")),f=w(l.encode?D.escape(n(a)):a),h=f.lines,o.html(p.html(f.html)),l.ln&&o.append('
        '),l.height&&p.css("max-height",l.height),l.codeStyle=[l.style,l.codeStyle].join(""),l.codeStyle&&p.attr("style",function(e,t){return(t||"")+l.codeStyle}),v=[{selector:">.layui-code-wrap>.layui-code-line{}",setValue:function(e,t){e.style["padding-left"]=t+"px"}},{selector:">.layui-code-wrap>.layui-code-line>.layui-code-line-number{}",setValue:function(e,t){e.style.width=t+"px"}},{selector:">.layui-code-ln-side{}",setValue:function(e,t){e.style.width=t+"px"}}],m=lay.style({target:o[0],id:"DF-code-"+d,text:x.map(x.map(v,function(e){return e.selector}),function(e,t){return['.layui-code-view[lay-code-index="'+d+'"]',e].join(" ")}).join("")}),L=function b(){var e,i;return l.ln&&(e=Math.floor(h.length/100),i=p.children("."+A.ELEM_LINE).last().children("."+A.ELEM_LINE_NUM).outerWidth(),o.addClass(A.ELEM_LN_MODE),e)&&A.LINE_RAW_WIDTH
      • ')).html(l.title||l.text.code),o.prepend(_)),M=x('
        '),l.copy&&!l.preview&&((C=x(['','',""].join(""))).on("click",function(){c.copy.event()}),M.append(C)),l.langMarker&&M.append(''+l.lang+""),l.about&&M.append(l.about),o.append(M),l.preview||setTimeout(function(){"function"==typeof l.done&&l.done({})},3),l.elem.length===1+d&&"function"==typeof l.allDone&&l.allDone())),g})}),layui["layui.all"]||layui.addcss("modules/code.css?v=6","skincodecss"); \ No newline at end of file diff --git a/上位机实时画面/js/mpegts.js b/上位机实时画面/js/mpegts.js new file mode 100644 index 0000000..da8af61 --- /dev/null +++ b/上位机实时画面/js/mpegts.js @@ -0,0 +1,9 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.mpegts=t():e.mpegts=t()}(window,(function(){return function(e){var t={};function i(n){if(t[n])return t[n].exports;var a=t[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,i),a.l=!0,a.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)i.d(n,a,function(t){return e[t]}.bind(null,a));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=14)}([function(e,t,i){"use strict";var n=i(6),a=i.n(n),r=function(){function e(){}return e.e=function(t,i){t&&!e.FORCE_GLOBAL_TAG||(t=e.GLOBAL_TAG);var n="["+t+"] > "+i;e.ENABLE_CALLBACK&&e.emitter.emit("log","error",n),e.ENABLE_ERROR&&(console.error?console.error(n):console.warn?console.warn(n):console.log(n))},e.i=function(t,i){t&&!e.FORCE_GLOBAL_TAG||(t=e.GLOBAL_TAG);var n="["+t+"] > "+i;e.ENABLE_CALLBACK&&e.emitter.emit("log","info",n),e.ENABLE_INFO&&(console.info?console.info(n):console.log(n))},e.w=function(t,i){t&&!e.FORCE_GLOBAL_TAG||(t=e.GLOBAL_TAG);var n="["+t+"] > "+i;e.ENABLE_CALLBACK&&e.emitter.emit("log","warn",n),e.ENABLE_WARN&&(console.warn?console.warn(n):console.log(n))},e.d=function(t,i){t&&!e.FORCE_GLOBAL_TAG||(t=e.GLOBAL_TAG);var n="["+t+"] > "+i;e.ENABLE_CALLBACK&&e.emitter.emit("log","debug",n),e.ENABLE_DEBUG&&(console.debug?console.debug(n):console.log(n))},e.v=function(t,i){t&&!e.FORCE_GLOBAL_TAG||(t=e.GLOBAL_TAG);var n="["+t+"] > "+i;e.ENABLE_CALLBACK&&e.emitter.emit("log","verbose",n),e.ENABLE_VERBOSE&&console.log(n)},e}();r.GLOBAL_TAG="mpegts.js",r.FORCE_GLOBAL_TAG=!1,r.ENABLE_ERROR=!0,r.ENABLE_INFO=!0,r.ENABLE_WARN=!0,r.ENABLE_DEBUG=!0,r.ENABLE_VERBOSE=!0,r.ENABLE_CALLBACK=!1,r.emitter=new a.a,t.a=r},function(e,t,i){"use strict";t.a={IO_ERROR:"io_error",DEMUX_ERROR:"demux_error",INIT_SEGMENT:"init_segment",MEDIA_SEGMENT:"media_segment",LOADING_COMPLETE:"loading_complete",RECOVERED_EARLY_EOF:"recovered_early_eof",MEDIA_INFO:"media_info",METADATA_ARRIVED:"metadata_arrived",SCRIPTDATA_ARRIVED:"scriptdata_arrived",TIMED_ID3_METADATA_ARRIVED:"timed_id3_metadata_arrived",SMPTE2038_METADATA_ARRIVED:"smpte2038_metadata_arrived",SCTE35_METADATA_ARRIVED:"scte35_metadata_arrived",PES_PRIVATE_DATA_DESCRIPTOR:"pes_private_data_descriptor",PES_PRIVATE_DATA_ARRIVED:"pes_private_data_arrived",STATISTICS_INFO:"statistics_info",RECOMMEND_SEEKPOINT:"recommend_seekpoint"}},function(e,t,i){"use strict";i.d(t,"c",(function(){return a})),i.d(t,"b",(function(){return r})),i.d(t,"a",(function(){return s}));var n=i(3),a={kIdle:0,kConnecting:1,kBuffering:2,kError:3,kComplete:4},r={OK:"OK",EXCEPTION:"Exception",HTTP_STATUS_CODE_INVALID:"HttpStatusCodeInvalid",CONNECTING_TIMEOUT:"ConnectingTimeout",EARLY_EOF:"EarlyEof",UNRECOVERABLE_EARLY_EOF:"UnrecoverableEarlyEof"},s=function(){function e(e){this._type=e||"undefined",this._status=a.kIdle,this._needStash=!1,this._onContentLengthKnown=null,this._onURLRedirect=null,this._onDataArrival=null,this._onError=null,this._onComplete=null}return e.prototype.destroy=function(){this._status=a.kIdle,this._onContentLengthKnown=null,this._onURLRedirect=null,this._onDataArrival=null,this._onError=null,this._onComplete=null},e.prototype.isWorking=function(){return this._status===a.kConnecting||this._status===a.kBuffering},Object.defineProperty(e.prototype,"type",{get:function(){return this._type},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"status",{get:function(){return this._status},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"needStashBuffer",{get:function(){return this._needStash},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onContentLengthKnown",{get:function(){return this._onContentLengthKnown},set:function(e){this._onContentLengthKnown=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onURLRedirect",{get:function(){return this._onURLRedirect},set:function(e){this._onURLRedirect=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onDataArrival",{get:function(){return this._onDataArrival},set:function(e){this._onDataArrival=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onError",{get:function(){return this._onError},set:function(e){this._onError=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onComplete",{get:function(){return this._onComplete},set:function(e){this._onComplete=e},enumerable:!1,configurable:!0}),e.prototype.open=function(e,t){throw new n.c("Unimplemented abstract function!")},e.prototype.abort=function(){throw new n.c("Unimplemented abstract function!")},e}()},function(e,t,i){"use strict";i.d(t,"d",(function(){return r})),i.d(t,"a",(function(){return s})),i.d(t,"b",(function(){return o})),i.d(t,"c",(function(){return d}));var n,a=(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(e,t)},function(e,t){function i(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)}),r=function(){function e(e){this._message=e}return Object.defineProperty(e.prototype,"name",{get:function(){return"RuntimeException"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"message",{get:function(){return this._message},enumerable:!1,configurable:!0}),e.prototype.toString=function(){return this.name+": "+this.message},e}(),s=function(e){function t(t){return e.call(this,t)||this}return a(t,e),Object.defineProperty(t.prototype,"name",{get:function(){return"IllegalStateException"},enumerable:!1,configurable:!0}),t}(r),o=function(e){function t(t){return e.call(this,t)||this}return a(t,e),Object.defineProperty(t.prototype,"name",{get:function(){return"InvalidArgumentException"},enumerable:!1,configurable:!0}),t}(r),d=function(e){function t(t){return e.call(this,t)||this}return a(t,e),Object.defineProperty(t.prototype,"name",{get:function(){return"NotImplementedException"},enumerable:!1,configurable:!0}),t}(r)},function(e,t,i){"use strict";var n={};!function(){var e=self.navigator.userAgent.toLowerCase(),t=/(edge)\/([\w.]+)/.exec(e)||/(opr)[\/]([\w.]+)/.exec(e)||/(chrome)[ \/]([\w.]+)/.exec(e)||/(iemobile)[\/]([\w.]+)/.exec(e)||/(version)(applewebkit)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+).*(version)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("trident")>=0&&/(rv)(?::| )([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(firefox)[ \/]([\w.]+)/.exec(e)||[],i=/(ipad)/.exec(e)||/(ipod)/.exec(e)||/(windows phone)/.exec(e)||/(iphone)/.exec(e)||/(kindle)/.exec(e)||/(android)/.exec(e)||/(windows)/.exec(e)||/(mac)/.exec(e)||/(linux)/.exec(e)||/(cros)/.exec(e)||[],a={browser:t[5]||t[3]||t[1]||"",version:t[2]||t[4]||"0",majorVersion:t[4]||t[2]||"0",platform:i[0]||""},r={};if(a.browser){r[a.browser]=!0;var s=a.majorVersion.split(".");r.version={major:parseInt(a.majorVersion,10),string:a.version},s.length>1&&(r.version.minor=parseInt(s[1],10)),s.length>2&&(r.version.build=parseInt(s[2],10))}if(a.platform&&(r[a.platform]=!0),(r.chrome||r.opr||r.safari)&&(r.webkit=!0),r.rv||r.iemobile){r.rv&&delete r.rv;a.browser="msie",r.msie=!0}if(r.edge){delete r.edge;a.browser="msedge",r.msedge=!0}if(r.opr){a.browser="opera",r.opera=!0}if(r.safari&&r.android){a.browser="android",r.android=!0}for(var o in r.name=a.browser,r.platform=a.platform,n)n.hasOwnProperty(o)&&delete n[o];Object.assign(n,r)}(),t.a=n},function(e,t,i){"use strict";t.a={OK:"OK",FORMAT_ERROR:"FormatError",FORMAT_UNSUPPORTED:"FormatUnsupported",CODEC_UNSUPPORTED:"CodecUnsupported"}},function(e,t,i){"use strict";var n,a="object"==typeof Reflect?Reflect:null,r=a&&"function"==typeof a.apply?a.apply:function(e,t,i){return Function.prototype.apply.call(e,t,i)};n=a&&"function"==typeof a.ownKeys?a.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var s=Number.isNaN||function(e){return e!=e};function o(){o.init.call(this)}e.exports=o,e.exports.once=function(e,t){return new Promise((function(i,n){function a(i){e.removeListener(t,r),n(i)}function r(){"function"==typeof e.removeListener&&e.removeListener("error",a),i([].slice.call(arguments))}g(e,t,r,{once:!0}),"error"!==t&&function(e,t,i){"function"==typeof e.on&&g(e,"error",t,i)}(e,a,{once:!0})}))},o.EventEmitter=o,o.prototype._events=void 0,o.prototype._eventsCount=0,o.prototype._maxListeners=void 0;var d=10;function _(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function h(e){return void 0===e._maxListeners?o.defaultMaxListeners:e._maxListeners}function c(e,t,i,n){var a,r,s,o;if(_(i),void 0===(r=e._events)?(r=e._events=Object.create(null),e._eventsCount=0):(void 0!==r.newListener&&(e.emit("newListener",t,i.listener?i.listener:i),r=e._events),s=r[t]),void 0===s)s=r[t]=i,++e._eventsCount;else if("function"==typeof s?s=r[t]=n?[i,s]:[s,i]:n?s.unshift(i):s.push(i),(a=h(e))>0&&s.length>a&&!s.warned){s.warned=!0;var d=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");d.name="MaxListenersExceededWarning",d.emitter=e,d.type=t,d.count=s.length,o=d,console&&console.warn&&console.warn(o)}return e}function u(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function l(e,t,i){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:i},a=u.bind(n);return a.listener=i,n.wrapFn=a,a}function f(e,t,i){var n=e._events;if(void 0===n)return[];var a=n[t];return void 0===a?[]:"function"==typeof a?i?[a.listener||a]:[a]:i?function(e){for(var t=new Array(e.length),i=0;i0&&(s=t[0]),s instanceof Error)throw s;var o=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw o.context=s,o}var d=a[e];if(void 0===d)return!1;if("function"==typeof d)r(d,this,t);else{var _=d.length,h=m(d,_);for(i=0;i<_;++i)r(h[i],this,t)}return!0},o.prototype.addListener=function(e,t){return c(this,e,t,!1)},o.prototype.on=o.prototype.addListener,o.prototype.prependListener=function(e,t){return c(this,e,t,!0)},o.prototype.once=function(e,t){return _(t),this.on(e,l(this,e,t)),this},o.prototype.prependOnceListener=function(e,t){return _(t),this.prependListener(e,l(this,e,t)),this},o.prototype.removeListener=function(e,t){var i,n,a,r,s;if(_(t),void 0===(n=this._events))return this;if(void 0===(i=n[e]))return this;if(i===t||i.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,i.listener||t));else if("function"!=typeof i){for(a=-1,r=i.length-1;r>=0;r--)if(i[r]===t||i[r].listener===t){s=i[r].listener,a=r;break}if(a<0)return this;0===a?i.shift():function(e,t){for(;t+1=0;n--)this.removeListener(e,t[n]);return this},o.prototype.listeners=function(e){return f(this,e,!0)},o.prototype.rawListeners=function(e){return f(this,e,!1)},o.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},o.prototype.listenerCount=p,o.prototype.eventNames=function(){return this._eventsCount>0?n(this._events):[]}},function(e,t,i){"use strict";i.d(t,"d",(function(){return n})),i.d(t,"b",(function(){return a})),i.d(t,"a",(function(){return r})),i.d(t,"c",(function(){return s}));var n=function(e,t,i,n,a){this.dts=e,this.pts=t,this.duration=i,this.originalDts=n,this.isSyncPoint=a,this.fileposition=null},a=function(){function e(){this.beginDts=0,this.endDts=0,this.beginPts=0,this.endPts=0,this.originalBeginDts=0,this.originalEndDts=0,this.syncPoints=[],this.firstSample=null,this.lastSample=null}return e.prototype.appendSyncPoint=function(e){e.isSyncPoint=!0,this.syncPoints.push(e)},e}(),r=function(){function e(){this._list=[]}return e.prototype.clear=function(){this._list=[]},e.prototype.appendArray=function(e){var t=this._list;0!==e.length&&(t.length>0&&e[0].originalDts=t[a].dts&&et[n].lastSample.originalDts&&e=t[n].lastSample.originalDts&&(n===t.length-1||n0&&(a=this._searchNearestSegmentBefore(i.originalBeginDts)+1),this._lastAppendLocation=a,this._list.splice(a,0,i)},e.prototype.getLastSegmentBefore=function(e){var t=this._searchNearestSegmentBefore(e);return t>=0?this._list[t]:null},e.prototype.getLastSampleBefore=function(e){var t=this.getLastSegmentBefore(e);return null!=t?t.lastSample:null},e.prototype.getLastSyncPointBefore=function(e){for(var t=this._searchNearestSegmentBefore(e),i=this._list[t].syncPoints;0===i.length&&t>0;)t--,i=this._list[t].syncPoints;return i.length>0?i[i.length-1]:null},e}()},function(e,t,i){"use strict";var n=function(){function e(){this.mimeType=null,this.duration=null,this.hasAudio=null,this.hasVideo=null,this.audioCodec=null,this.videoCodec=null,this.audioDataRate=null,this.videoDataRate=null,this.audioSampleRate=null,this.audioChannelCount=null,this.width=null,this.height=null,this.fps=null,this.profile=null,this.level=null,this.refFrames=null,this.chromaFormat=null,this.sarNum=null,this.sarDen=null,this.metadata=null,this.segments=null,this.segmentCount=null,this.hasKeyframesIndex=null,this.keyframesIndex=null}return e.prototype.isComplete=function(){var e=!1===this.hasAudio||!0===this.hasAudio&&null!=this.audioCodec&&null!=this.audioSampleRate&&null!=this.audioChannelCount,t=!1===this.hasVideo||!0===this.hasVideo&&null!=this.videoCodec&&null!=this.width&&null!=this.height&&null!=this.fps&&null!=this.profile&&null!=this.level&&null!=this.refFrames&&null!=this.chromaFormat&&null!=this.sarNum&&null!=this.sarDen;return null!=this.mimeType&&e&&t},e.prototype.isSeekable=function(){return!0===this.hasKeyframesIndex},e.prototype.getNearestKeyframe=function(e){if(null==this.keyframesIndex)return null;var t=this.keyframesIndex,i=this._search(t.times,e);return{index:i,milliseconds:t.times[i],fileposition:t.filepositions[i]}},e.prototype._search=function(e,t){var i=0,n=e.length-1,a=0,r=0,s=n;for(t=e[a]&&t0){var i=e.getConfig();t.emit("change",i)}},e.registerListener=function(t){e.emitter.addListener("change",t)},e.removeListener=function(t){e.emitter.removeListener("change",t)},e.addLogListener=function(t){r.a.emitter.addListener("log",t),r.a.emitter.listenerCount("log")>0&&(r.a.ENABLE_CALLBACK=!0,e._notifyChange())},e.removeLogListener=function(t){r.a.emitter.removeListener("log",t),0===r.a.emitter.listenerCount("log")&&(r.a.ENABLE_CALLBACK=!1,e._notifyChange())},e}();s.emitter=new a.a,t.a=s},function(e,t,i){"use strict";var n=i(6),a=i.n(n),r=i(0),s=i(4),o=i(8);function d(e,t,i){var n=e;if(t+i=128){t.push(String.fromCharCode(65535&r)),n+=2;continue}}else if(i[n]<240){if(d(i,n,2))if((r=(15&i[n])<<12|(63&i[n+1])<<6|63&i[n+2])>=2048&&55296!=(63488&r)){t.push(String.fromCharCode(65535&r)),n+=3;continue}}else if(i[n]<248){var r;if(d(i,n,3))if((r=(7&i[n])<<18|(63&i[n+1])<<12|(63&i[n+2])<<6|63&i[n+3])>65536&&r<1114112){r-=65536,t.push(String.fromCharCode(r>>>10|55296)),t.push(String.fromCharCode(1023&r|56320)),n+=4;continue}}t.push(String.fromCharCode(65533)),++n}return t.join("")},c=i(3),u=(_=new ArrayBuffer(2),new DataView(_).setInt16(0,256,!0),256===new Int16Array(_)[0]),l=function(){function e(){}return e.parseScriptData=function(t,i,n){var a={};try{var s=e.parseValue(t,i,n),o=e.parseValue(t,i+s.size,n-s.size);a[s.data]=o.data}catch(e){r.a.e("AMF",e.toString())}return a},e.parseObject=function(t,i,n){if(n<3)throw new c.a("Data not enough when parse ScriptDataObject");var a=e.parseString(t,i,n),r=e.parseValue(t,i+a.size,n-a.size),s=r.objectEnd;return{data:{name:a.data,value:r.data},size:a.size+r.size,objectEnd:s}},e.parseVariable=function(t,i,n){return e.parseObject(t,i,n)},e.parseString=function(e,t,i){if(i<2)throw new c.a("Data not enough when parse String");var n=new DataView(e,t,i).getUint16(0,!u);return{data:n>0?h(new Uint8Array(e,t+2,n)):"",size:2+n}},e.parseLongString=function(e,t,i){if(i<4)throw new c.a("Data not enough when parse LongString");var n=new DataView(e,t,i).getUint32(0,!u);return{data:n>0?h(new Uint8Array(e,t+4,n)):"",size:4+n}},e.parseDate=function(e,t,i){if(i<10)throw new c.a("Data size invalid when parse Date");var n=new DataView(e,t,i),a=n.getFloat64(0,!u),r=n.getInt16(8,!u);return{data:new Date(a+=60*r*1e3),size:10}},e.parseValue=function(t,i,n){if(n<1)throw new c.a("Data not enough when parse Value");var a,s=new DataView(t,i,n),o=1,d=s.getUint8(0),_=!1;try{switch(d){case 0:a=s.getFloat64(1,!u),o+=8;break;case 1:a=!!s.getUint8(1),o+=1;break;case 2:var h=e.parseString(t,i+1,n-1);a=h.data,o+=h.size;break;case 3:a={};var l=0;for(9==(16777215&s.getUint32(n-4,!u))&&(l=3);o32)throw new c.b("ExpGolomb: readBits() bits exceeded max 32bits!");if(e<=this._current_word_bits_left){var t=this._current_word>>>32-e;return this._current_word<<=e,this._current_word_bits_left-=e,t}var i=this._current_word_bits_left?this._current_word:0;i>>>=32-this._current_word_bits_left;var n=e-this._current_word_bits_left;this._fillCurrentWord();var a=Math.min(n,this._current_word_bits_left),r=this._current_word>>>32-a;return this._current_word<<=a,this._current_word_bits_left-=a,i=i<>>e))return this._current_word<<=e,this._current_word_bits_left-=e,e;return this._fillCurrentWord(),e+this._skipLeadingZero()},e.prototype.readUEG=function(){var e=this._skipLeadingZero();return this.readBits(e+1)-1},e.prototype.readSEG=function(){var e=this.readUEG();return 1&e?e+1>>>1:-1*(e>>>1)},e}(),p=function(){function e(){}return e._ebsp2rbsp=function(e){for(var t=e,i=t.byteLength,n=new Uint8Array(i),a=0,r=0;r=2&&3===t[r]&&0===t[r-1]&&0===t[r-2]||(n[a]=t[r],a++);return new Uint8Array(n.buffer,0,a)},e.parseSPS=function(t){for(var i=t.subarray(1,4),n="avc1.",a=0;a<3;a++){var r=i[a].toString(16);r.length<2&&(r="0"+r),n+=r}var s=e._ebsp2rbsp(t),o=new f(s);o.readByte();var d=o.readByte();o.readByte();var _=o.readByte();o.readUEG();var h=e.getProfileString(d),c=e.getLevelString(_),u=1,l=420,p=8,m=8;if((100===d||110===d||122===d||244===d||44===d||83===d||86===d||118===d||128===d||138===d||144===d)&&(3===(u=o.readUEG())&&o.readBits(1),u<=3&&(l=[0,420,422,444][u]),p=o.readUEG()+8,m=o.readUEG()+8,o.readBits(1),o.readBool()))for(var g=3!==u?8:12,v=0;v0&&M<16?(D=[1,12,10,16,40,24,20,32,80,18,15,64,160,4,3,2][M-1],C=[1,11,11,11,33,11,11,11,33,11,11,33,99,3,2,1][M-1]):255===M&&(D=o.readByte()<<8|o.readByte(),C=o.readByte()<<8|o.readByte())}if(o.readBool()&&o.readBool(),o.readBool()&&(o.readBits(4),o.readBool()&&o.readBits(24)),o.readBool()&&(o.readUEG(),o.readUEG()),o.readBool()){var x=o.readBits(32),U=o.readBits(32);I=o.readBool(),B=(O=U)/(P=2*x)}}var N=1;1===D&&1===C||(N=D/C);var G=0,V=0;0===u?(G=1,V=2-R):(G=3===u?1:2,V=(1===u?2:1)*(2-R));var F=16*(E+1),j=16*(A+1)*(2-R);F-=(T+L)*G,j-=(w+k)*V;var z=Math.ceil(F*N);return o.destroy(),o=null,{codec_mimetype:n,profile_idc:d,level_idc:_,profile_string:h,level_string:c,chroma_format_idc:u,bit_depth:p,bit_depth_luma:p,bit_depth_chroma:m,ref_frames:S,chroma_format:l,chroma_format_string:e.getChromaFormatString(l),frame_rate:{fixed:I,fps:B,fps_den:P,fps_num:O},sar_ratio:{width:D,height:C},codec_size:{width:F,height:j},present_size:{width:z,height:j}}},e._skipScalingList=function(e,t){for(var i=8,n=8,a=0;a=2&&3===t[r]&&0===t[r-1]&&0===t[r-2]||(n[a]=t[r],a++);return new Uint8Array(n.buffer,0,a)},e.parseVPS=function(t){var i=e._ebsp2rbsp(t),n=new f(i);n.readByte(),n.readByte();n.readBits(4);n.readBits(2);n.readBits(6);return{num_temporal_layers:n.readBits(3)+1,temporal_id_nested:n.readBool()}},e.parseSPS=function(t){var i=e._ebsp2rbsp(t),n=new f(i);n.readByte(),n.readByte();for(var a=0,r=0,s=0,o=0,d=(n.readBits(4),n.readBits(3)),_=(n.readBool(),n.readBits(2)),h=n.readBool(),c=n.readBits(5),u=n.readByte(),l=n.readByte(),p=n.readByte(),m=n.readByte(),g=n.readByte(),v=n.readByte(),y=n.readByte(),b=n.readByte(),S=n.readByte(),E=n.readByte(),A=n.readByte(),R=[],T=[],L=0;L0)for(L=d;L<8;L++)n.readBits(2);for(L=0;L1&&n.readSEG();for(L=0;L0&&Q<=16?(W=[1,12,10,16,40,24,20,32,80,18,15,64,160,4,3,2][Q-1],X=[1,11,11,11,33,11,11,11,33,11,11,33,99,3,2,1][Q-1]):255===Q&&(W=n.readBits(16),X=n.readBits(16))}if(n.readBool()&&n.readBool(),n.readBool())n.readBits(3),n.readBool(),n.readBool()&&(n.readByte(),n.readByte(),n.readByte());n.readBool()&&(n.readUEG(),n.readUEG());n.readBool(),n.readBool(),n.readBool();if(n.readBool()&&(n.readUEG(),n.readUEG(),n.readUEG(),n.readUEG()),n.readBool())if(J=n.readBits(32),Z=n.readBits(32),n.readBool())if(n.readUEG(),n.readBool()){var $=!1,ee=!1,te=!1;if($=n.readBool(),ee=n.readBool(),$||ee){(te=n.readBool())&&(n.readByte(),n.readBits(5),n.readBool(),n.readBits(5));n.readBits(4),n.readBits(4);te&&n.readBits(4),n.readBits(5),n.readBits(5),n.readBits(5)}for(L=0;L<=d;L++){var ie=n.readBool();Y=ie;var ne=!1,ae=1;ie||(ne=n.readBool());var re=!1;if(ne?n.readSEG():re=n.readBool(),re||(ae=n.readUEG()+1),$)for(V=0;V>>2!=0,s=0!=(1&t[4]),o=(n=t)[a=5]<<24|n[a+1]<<16|n[a+2]<<8|n[a+3];return o<9?i:{match:!0,consumed:o,dataOffset:o,hasAudioTrack:r,hasVideoTrack:s}},e.prototype.bindDataSource=function(e){return e.onDataArrival=this.parseChunks.bind(this),this},Object.defineProperty(e.prototype,"onTrackMetadata",{get:function(){return this._onTrackMetadata},set:function(e){this._onTrackMetadata=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onMediaInfo",{get:function(){return this._onMediaInfo},set:function(e){this._onMediaInfo=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onMetaDataArrived",{get:function(){return this._onMetaDataArrived},set:function(e){this._onMetaDataArrived=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onScriptDataArrived",{get:function(){return this._onScriptDataArrived},set:function(e){this._onScriptDataArrived=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onError",{get:function(){return this._onError},set:function(e){this._onError=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onDataAvailable",{get:function(){return this._onDataAvailable},set:function(e){this._onDataAvailable=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"timestampBase",{get:function(){return this._timestampBase},set:function(e){this._timestampBase=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"overridedDuration",{get:function(){return this._duration},set:function(e){this._durationOverrided=!0,this._duration=e,this._mediaInfo.duration=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"overridedHasAudio",{set:function(e){this._hasAudioFlagOverrided=!0,this._hasAudio=e,this._mediaInfo.hasAudio=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"overridedHasVideo",{set:function(e){this._hasVideoFlagOverrided=!0,this._hasVideo=e,this._mediaInfo.hasVideo=e},enumerable:!1,configurable:!0}),e.prototype.resetMediaInfo=function(){this._mediaInfo=new o.a},e.prototype._isInitialMetadataDispatched=function(){return this._hasAudio&&this._hasVideo?this._audioInitialMetadataDispatched&&this._videoInitialMetadataDispatched:this._hasAudio&&!this._hasVideo?this._audioInitialMetadataDispatched:!(this._hasAudio||!this._hasVideo)&&this._videoInitialMetadataDispatched},e.prototype.parseChunks=function(t,i){if(!(this._onError&&this._onMediaInfo&&this._onTrackMetadata&&this._onDataAvailable))throw new c.a("Flv: onError & onMediaInfo & onTrackMetadata & onDataAvailable callback must be specified");var n=0,a=this._littleEndian;if(0===i){if(!(t.byteLength>13))return 0;n=e.probe(t).dataOffset}this._firstParse&&(this._firstParse=!1,i+n!==this._dataOffset&&r.a.w(this.TAG,"First time parsing but chunk byteStart invalid!"),0!==(s=new DataView(t,n)).getUint32(0,!a)&&r.a.w(this.TAG,"PrevTagSize0 !== 0 !!!"),n+=4);for(;nt.byteLength)break;var o=s.getUint8(0),d=16777215&s.getUint32(0,!a);if(n+11+d+4>t.byteLength)break;if(8===o||9===o||18===o){var _=s.getUint8(4),h=s.getUint8(5),u=s.getUint8(6)|h<<8|_<<16|s.getUint8(7)<<24;0!==(16777215&s.getUint32(7,!a))&&r.a.w(this.TAG,"Meet tag which has StreamID != 0!");var l=n+11;switch(o){case 8:this._parseAudioData(t,l,d,u);break;case 9:this._parseVideoData(t,l,d,u,i+n);break;case 18:this._parseScriptData(t,l,d)}var f=s.getUint32(11+d,!a);f!==11+d&&r.a.w(this.TAG,"Invalid PrevTagSize "+f),n+=11+d+4}else r.a.w(this.TAG,"Unsupported tag type "+o+", skipped"),n+=11+d+4}return this._isInitialMetadataDispatched()&&this._dispatch&&(this._audioTrack.length||this._videoTrack.length)&&this._onDataAvailable(this._audioTrack,this._videoTrack),n},e.prototype._parseScriptData=function(e,t,i){var n=l.parseScriptData(e,t,i);if(n.hasOwnProperty("onMetaData")){if(null==n.onMetaData||"object"!=typeof n.onMetaData)return void r.a.w(this.TAG,"Invalid onMetaData structure!");this._metadata&&r.a.w(this.TAG,"Found another onMetaData tag!"),this._metadata=n;var a=this._metadata.onMetaData;if(this._onMetaDataArrived&&this._onMetaDataArrived(Object.assign({},a)),"boolean"==typeof a.hasAudio&&!1===this._hasAudioFlagOverrided&&(this._hasAudio=a.hasAudio,this._mediaInfo.hasAudio=this._hasAudio),"boolean"==typeof a.hasVideo&&!1===this._hasVideoFlagOverrided&&(this._hasVideo=a.hasVideo,this._mediaInfo.hasVideo=this._hasVideo),"number"==typeof a.audiodatarate&&(this._mediaInfo.audioDataRate=a.audiodatarate),"number"==typeof a.videodatarate&&(this._mediaInfo.videoDataRate=a.videodatarate),"number"==typeof a.width&&(this._mediaInfo.width=a.width),"number"==typeof a.height&&(this._mediaInfo.height=a.height),"number"==typeof a.duration){if(!this._durationOverrided){var s=Math.floor(a.duration*this._timescale);this._duration=s,this._mediaInfo.duration=s}}else this._mediaInfo.duration=0;if("number"==typeof a.framerate){var o=Math.floor(1e3*a.framerate);if(o>0){var d=o/1e3;this._referenceFrameRate.fixed=!0,this._referenceFrameRate.fps=d,this._referenceFrameRate.fps_num=o,this._referenceFrameRate.fps_den=1e3,this._mediaInfo.fps=d}}if("object"==typeof a.keyframes){this._mediaInfo.hasKeyframesIndex=!0;var _=a.keyframes;this._mediaInfo.keyframesIndex=this._parseKeyframesIndex(_),a.keyframes=null}else this._mediaInfo.hasKeyframesIndex=!1;this._dispatch=!1,this._mediaInfo.metadata=a,r.a.v(this.TAG,"Parsed onMetaData"),this._mediaInfo.isComplete()&&this._onMediaInfo(this._mediaInfo)}Object.keys(n).length>0&&this._onScriptDataArrived&&this._onScriptDataArrived(Object.assign({},n))},e.prototype._parseKeyframesIndex=function(e){for(var t=[],i=[],n=1;n>>4;if(2===s||10===s){var o=0,d=(12&a)>>>2;if(d>=0&&d<=4){o=this._flvSoundRateTable[d];var _=1&a,h=this._audioMetadata,c=this._audioTrack;if(h||(!1===this._hasAudio&&!1===this._hasAudioFlagOverrided&&(this._hasAudio=!0,this._mediaInfo.hasAudio=!0),(h=this._audioMetadata={}).type="audio",h.id=c.id,h.timescale=this._timescale,h.duration=this._duration,h.audioSampleRate=o,h.channelCount=0===_?1:2),10===s){var u=this._parseAACAudioData(e,t+1,i-1);if(null==u)return;if(0===u.packetType){if(h.config){if(S(u.data.config,h.config))return;r.a.w(this.TAG,"AudioSpecificConfig has been changed, re-generate initialization segment")}var l=u.data;h.audioSampleRate=l.samplingRate,h.channelCount=l.channelCount,h.codec=l.codec,h.originalCodec=l.originalCodec,h.config=l.config,h.refSampleDuration=1024/h.audioSampleRate*h.timescale,r.a.v(this.TAG,"Parsed AudioSpecificConfig"),this._isInitialMetadataDispatched()?this._dispatch&&(this._audioTrack.length||this._videoTrack.length)&&this._onDataAvailable(this._audioTrack,this._videoTrack):this._audioInitialMetadataDispatched=!0,this._dispatch=!1,this._onTrackMetadata("audio",h),(g=this._mediaInfo).audioCodec=h.originalCodec,g.audioSampleRate=h.audioSampleRate,g.audioChannelCount=h.channelCount,g.hasVideo?null!=g.videoCodec&&(g.mimeType='video/x-flv; codecs="'+g.videoCodec+","+g.audioCodec+'"'):g.mimeType='video/x-flv; codecs="'+g.audioCodec+'"',g.isComplete()&&this._onMediaInfo(g)}else if(1===u.packetType){var f=this._timestampBase+n,p={unit:u.data,length:u.data.byteLength,dts:f,pts:f};c.samples.push(p),c.length+=u.data.length}else r.a.e(this.TAG,"Flv: Unsupported AAC data type "+u.packetType)}else if(2===s){if(!h.codec){var g;if(null==(l=this._parseMP3AudioData(e,t+1,i-1,!0)))return;h.audioSampleRate=l.samplingRate,h.channelCount=l.channelCount,h.codec=l.codec,h.originalCodec=l.originalCodec,h.refSampleDuration=1152/h.audioSampleRate*h.timescale,r.a.v(this.TAG,"Parsed MPEG Audio Frame Header"),this._audioInitialMetadataDispatched=!0,this._onTrackMetadata("audio",h),(g=this._mediaInfo).audioCodec=h.codec,g.audioSampleRate=h.audioSampleRate,g.audioChannelCount=h.channelCount,g.audioDataRate=l.bitRate,g.hasVideo?null!=g.videoCodec&&(g.mimeType='video/x-flv; codecs="'+g.videoCodec+","+g.audioCodec+'"'):g.mimeType='video/x-flv; codecs="'+g.audioCodec+'"',g.isComplete()&&this._onMediaInfo(g)}var v=this._parseMP3AudioData(e,t+1,i-1,!1);if(null==v)return;f=this._timestampBase+n;var y={unit:v,length:v.byteLength,dts:f,pts:f};c.samples.push(y),c.length+=v.length}}else this._onError(m.a.FORMAT_ERROR,"Flv: Invalid audio sample rate idx: "+d)}else this._onError(m.a.CODEC_UNSUPPORTED,"Flv: Unsupported audio codec idx: "+s)}},e.prototype._parseAACAudioData=function(e,t,i){if(!(i<=1)){var n={},a=new Uint8Array(e,t,i);return n.packetType=a[0],0===a[0]?n.data=this._parseAACAudioSpecificConfig(e,t+1,i-1):n.data=a.subarray(1),n}r.a.w(this.TAG,"Flv: Invalid AAC packet, missing AACPacketType or/and Data!")},e.prototype._parseAACAudioSpecificConfig=function(e,t,i){var n,a,r=new Uint8Array(e,t,i),s=null,o=0,d=null;if(o=n=r[0]>>>3,(a=(7&r[0])<<1|r[1]>>>7)<0||a>=this._mpegSamplingRates.length)this._onError(m.a.FORMAT_ERROR,"Flv: AAC invalid sampling frequency index!");else{var _=this._mpegSamplingRates[a],h=(120&r[1])>>>3;if(!(h<0||h>=8)){5===o&&(d=(7&r[1])<<1|r[2]>>>7,(124&r[2])>>>2);var c=self.navigator.userAgent.toLowerCase();return-1!==c.indexOf("firefox")?a>=6?(o=5,s=new Array(4),d=a-3):(o=2,s=new Array(2),d=a):-1!==c.indexOf("android")?(o=2,s=new Array(2),d=a):(o=5,d=a,s=new Array(4),a>=6?d=a-3:1===h&&(o=2,s=new Array(2),d=a)),s[0]=o<<3,s[0]|=(15&a)>>>1,s[1]=(15&a)<<7,s[1]|=(15&h)<<3,5===o&&(s[1]|=(15&d)>>>1,s[2]=(1&d)<<7,s[2]|=8,s[3]=0),{config:s,samplingRate:_,channelCount:h,codec:"mp4a.40."+o,originalCodec:"mp4a.40."+n}}this._onError(m.a.FORMAT_ERROR,"Flv: AAC invalid channel configuration")}},e.prototype._parseMP3AudioData=function(e,t,i,n){if(!(i<4)){this._littleEndian;var a=new Uint8Array(e,t,i),s=null;if(n){if(255!==a[0])return;var o=a[1]>>>3&3,d=(6&a[1])>>1,_=(240&a[2])>>>4,h=(12&a[2])>>>2,c=3!==(a[3]>>>6&3)?2:1,u=0,l=0;switch(o){case 0:u=this._mpegAudioV25SampleRateTable[h];break;case 2:u=this._mpegAudioV20SampleRateTable[h];break;case 3:u=this._mpegAudioV10SampleRateTable[h]}switch(d){case 1:34,_>>4;if(0!=(128&s)){var d=15&s,_=String.fromCharCode.apply(String,new Uint8Array(e,t,i).slice(1,5));if("hvc1"!==_)return void this._onError(m.a.CODEC_UNSUPPORTED,"Flv: Unsupported codec in video frame: "+_);this._parseEnhancedHEVCVideoPacket(e,t+5,i-5,n,a,o,d)}else{var h=15&s;if(7===h)this._parseAVCVideoPacket(e,t+1,i-1,n,a,o);else{if(12!==h)return void this._onError(m.a.CODEC_UNSUPPORTED,"Flv: Unsupported codec in video frame: "+h);this._parseHEVCVideoPacket(e,t+1,i-1,n,a,o)}}}},e.prototype._parseAVCVideoPacket=function(e,t,i,n,a,s){if(i<4)r.a.w(this.TAG,"Flv: Invalid AVC packet, missing AVCPacketType or/and CompositionTime");else{var o=this._littleEndian,d=new DataView(e,t,i),_=d.getUint8(0),h=(16777215&d.getUint32(0,!o))<<8>>8;if(0===_)this._parseAVCDecoderConfigurationRecord(e,t+4,i-4);else if(1===_)this._parseAVCVideoData(e,t+4,i-4,n,a,s,h);else if(2!==_)return void this._onError(m.a.FORMAT_ERROR,"Flv: Invalid video packet type "+_)}},e.prototype._parseHEVCVideoPacket=function(e,t,i,n,a,s){if(i<4)r.a.w(this.TAG,"Flv: Invalid HEVC packet, missing HEVCPacketType or/and CompositionTime");else{var o=this._littleEndian,d=new DataView(e,t,i),_=d.getUint8(0),h=(16777215&d.getUint32(0,!o))<<8>>8;if(0===_)this._parseHEVCDecoderConfigurationRecord(e,t+4,i-4);else if(1===_)this._parseHEVCVideoData(e,t+4,i-4,n,a,s,h);else if(2!==_)return void this._onError(m.a.FORMAT_ERROR,"Flv: Invalid video packet type "+_)}},e.prototype._parseEnhancedHEVCVideoPacket=function(e,t,i,n,a,s,o){if(i<4)r.a.w(this.TAG,"Flv: Invalid HEVC packet, missing HEVCPacketType or/and CompositionTime");else{var d=this._littleEndian,_=new DataView(e,t,i);if(0===o)this._parseHEVCDecoderConfigurationRecord(e,t,i);else if(1===o){var h=(4294967040&_.getUint32(0,!d))>>8;this._parseHEVCVideoData(e,t+3,i-3,n,a,s,h)}else if(3===o)this._parseHEVCVideoData(e,t,i,n,a,s,0);else if(2!==o)return void this._onError(m.a.FORMAT_ERROR,"Flv: Invalid video packet type "+o)}},e.prototype._parseAVCDecoderConfigurationRecord=function(e,t,i){if(i<7)r.a.w(this.TAG,"Flv: Invalid AVCDecoderConfigurationRecord, lack of data!");else{var n=this._videoMetadata,a=this._videoTrack,s=this._littleEndian,o=new DataView(e,t,i);if(n){if(void 0!==n.avcc){var d=new Uint8Array(e,t,i);if(S(d,n.avcc))return;r.a.w(this.TAG,"AVCDecoderConfigurationRecord has been changed, re-generate initialization segment")}}else!1===this._hasVideo&&!1===this._hasVideoFlagOverrided&&(this._hasVideo=!0,this._mediaInfo.hasVideo=!0),(n=this._videoMetadata={}).type="video",n.id=a.id,n.timescale=this._timescale,n.duration=this._duration;var _=o.getUint8(0),h=o.getUint8(1);o.getUint8(2),o.getUint8(3);if(1===_&&0!==h)if(this._naluLengthSize=1+(3&o.getUint8(4)),3===this._naluLengthSize||4===this._naluLengthSize){var c=31&o.getUint8(5);if(0!==c){c>1&&r.a.w(this.TAG,"Flv: Strange AVCDecoderConfigurationRecord: SPS Count = "+c);for(var u=6,l=0;l1&&r.a.w(this.TAG,"Flv: Strange AVCDecoderConfigurationRecord: PPS Count = "+w),u++;for(l=0;l=i){r.a.w(this.TAG,"Malformed Nalu near timestamp "+f+", offset = "+u+", dataSize = "+i);break}var m=_.getUint32(u,!d);if(3===l&&(m>>>=8),m>i-l)return void r.a.w(this.TAG,"Malformed Nalus near timestamp "+f+", NaluSize > DataSize!");var g=31&_.getUint8(u+l);5===g&&(p=!0);var v=new Uint8Array(e,t+u,l+m),y={type:g,data:v};h.push(y),c+=v.byteLength,u+=l+m}if(h.length){var b=this._videoTrack,S={units:h,length:c,isKeyframe:p,dts:f,cts:o,pts:f+o};p&&(S.fileposition=a),b.samples.push(S),b.length+=c}},e.prototype._parseHEVCVideoData=function(e,t,i,n,a,s,o){for(var d=this._littleEndian,_=new DataView(e,t,i),h=[],c=0,u=0,l=this._naluLengthSize,f=this._timestampBase+n,p=1===s;u=i){r.a.w(this.TAG,"Malformed Nalu near timestamp "+f+", offset = "+u+", dataSize = "+i);break}var m=_.getUint32(u,!d);if(3===l&&(m>>>=8),m>i-l)return void r.a.w(this.TAG,"Malformed Nalus near timestamp "+f+", NaluSize > DataSize!");var g=31&_.getUint8(u+l);19!==g&&20!==g||(p=!0);var v=new Uint8Array(e,t+u,l+m),y={type:g,data:v};h.push(y),c+=v.byteLength,u+=l+m}if(h.length){var b=this._videoTrack,S={units:h,length:c,isKeyframe:p,dts:f,cts:o,pts:f+o};p&&(S.fileposition=a),b.samples.push(S),b.length+=c}},e}(),R=function(){function e(){}return e.prototype.destroy=function(){this.onError=null,this.onMediaInfo=null,this.onMetaDataArrived=null,this.onTrackMetadata=null,this.onDataAvailable=null,this.onTimedID3Metadata=null,this.onSMPTE2038Metadata=null,this.onSCTE35Metadata=null,this.onPESPrivateData=null,this.onPESPrivateDataDescriptor=null},e}(),T=function(){this.program_pmt_pid={}};!function(e){e[e.kMPEG1Audio=3]="kMPEG1Audio",e[e.kMPEG2Audio=4]="kMPEG2Audio",e[e.kPESPrivateData=6]="kPESPrivateData",e[e.kADTSAAC=15]="kADTSAAC",e[e.kLOASAAC=17]="kLOASAAC",e[e.kAC3=129]="kAC3",e[e.kID3=21]="kID3",e[e.kSCTE35=134]="kSCTE35",e[e.kH264=27]="kH264",e[e.kH265=36]="kH265"}(E||(E={}));var L,w=function(){this.pid_stream_type={},this.common_pids={h264:void 0,h265:void 0,adts_aac:void 0,loas_aac:void 0,opus:void 0,ac3:void 0,mp3:void 0},this.pes_private_data_pids={},this.timed_id3_pids={},this.scte_35_pids={},this.smpte2038_pids={}},k=function(){},D=function(){},C=function(){this.slices=[],this.total_length=0,this.expected_length=0,this.file_position=0};!function(e){e[e.kUnspecified=0]="kUnspecified",e[e.kSliceNonIDR=1]="kSliceNonIDR",e[e.kSliceDPA=2]="kSliceDPA",e[e.kSliceDPB=3]="kSliceDPB",e[e.kSliceDPC=4]="kSliceDPC",e[e.kSliceIDR=5]="kSliceIDR",e[e.kSliceSEI=6]="kSliceSEI",e[e.kSliceSPS=7]="kSliceSPS",e[e.kSlicePPS=8]="kSlicePPS",e[e.kSliceAUD=9]="kSliceAUD",e[e.kEndOfSequence=10]="kEndOfSequence",e[e.kEndOfStream=11]="kEndOfStream",e[e.kFiller=12]="kFiller",e[e.kSPSExt=13]="kSPSExt",e[e.kReserved0=14]="kReserved0"}(L||(L={}));var B,I,O=function(){},P=function(e){var t=e.data.byteLength;this.type=e.type,this.data=new Uint8Array(4+t),new DataView(this.data.buffer).setUint32(0,t),this.data.set(e.data,4)},M=function(){function e(e){this.TAG="H264AnnexBParser",this.current_startcode_offset_=0,this.eof_flag_=!1,this.data_=e,this.current_startcode_offset_=this.findNextStartCodeOffset(0),this.eof_flag_&&r.a.e(this.TAG,"Could not find H264 startcode until payload end!")}return e.prototype.findNextStartCodeOffset=function(e){for(var t=e,i=this.data_;;){if(t+3>=i.byteLength)return this.eof_flag_=!0,i.byteLength;var n=i[t+0]<<24|i[t+1]<<16|i[t+2]<<8|i[t+3],a=i[t+0]<<16|i[t+1]<<8|i[t+2];if(1===n||1===a)return t;t++}},e.prototype.readNextNaluPayload=function(){for(var e=this.data_,t=null;null==t&&!this.eof_flag_;){var i=this.current_startcode_offset_,n=31&e[i+=1===(e[i]<<24|e[i+1]<<16|e[i+2]<<8|e[i+3])?4:3],a=(128&e[i])>>>7,r=this.findNextStartCodeOffset(i);if(this.current_startcode_offset_=r,!(n>=L.kReserved0)&&0===a){var s=e.subarray(i,r);(t=new O).type=n,t.data=s}}return t},e}(),x=function(){function e(e,t,i){var n=8+e.byteLength+1+2+t.byteLength,a=!1;66!==e[3]&&77!==e[3]&&88!==e[3]&&(a=!0,n+=4);var r=this.data=new Uint8Array(n);r[0]=1,r[1]=e[1],r[2]=e[2],r[3]=e[3],r[4]=255,r[5]=225;var s=e.byteLength;r[6]=s>>>8,r[7]=255&s;var o=8;r.set(e,8),r[o+=s]=1;var d=t.byteLength;r[o+1]=d>>>8,r[o+2]=255&d,r.set(t,o+3),o+=3+d,a&&(r[o]=252|i.chroma_format_idc,r[o+1]=248|i.bit_depth_luma-8,r[o+2]=248|i.bit_depth_chroma-8,r[o+3]=0,o+=4)}return e.prototype.getData=function(){return this.data},e}();!function(e){e[e.kNull=0]="kNull",e[e.kAACMain=1]="kAACMain",e[e.kAAC_LC=2]="kAAC_LC",e[e.kAAC_SSR=3]="kAAC_SSR",e[e.kAAC_LTP=4]="kAAC_LTP",e[e.kAAC_SBR=5]="kAAC_SBR",e[e.kAAC_Scalable=6]="kAAC_Scalable",e[e.kLayer1=32]="kLayer1",e[e.kLayer2=33]="kLayer2",e[e.kLayer3=34]="kLayer3"}(B||(B={})),function(e){e[e.k96000Hz=0]="k96000Hz",e[e.k88200Hz=1]="k88200Hz",e[e.k64000Hz=2]="k64000Hz",e[e.k48000Hz=3]="k48000Hz",e[e.k44100Hz=4]="k44100Hz",e[e.k32000Hz=5]="k32000Hz",e[e.k24000Hz=6]="k24000Hz",e[e.k22050Hz=7]="k22050Hz",e[e.k16000Hz=8]="k16000Hz",e[e.k12000Hz=9]="k12000Hz",e[e.k11025Hz=10]="k11025Hz",e[e.k8000Hz=11]="k8000Hz",e[e.k7350Hz=12]="k7350Hz"}(I||(I={}));var U,N,G=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],V=(U=function(e,t){return(U=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(e,t)},function(e,t){function i(){this.constructor=e}U(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)}),F=function(){},j=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return V(t,e),t}(F),z=function(){function e(e){this.TAG="AACADTSParser",this.data_=e,this.current_syncword_offset_=this.findNextSyncwordOffset(0),this.eof_flag_&&r.a.e(this.TAG,"Could not found ADTS syncword until payload end")}return e.prototype.findNextSyncwordOffset=function(e){for(var t=e,i=this.data_;;){if(t+7>=i.byteLength)return this.eof_flag_=!0,i.byteLength;if(4095===(i[t+0]<<8|i[t+1])>>>4)return t;t++}},e.prototype.readNextAACFrame=function(){for(var e=this.data_,t=null;null==t&&!this.eof_flag_;){var i=this.current_syncword_offset_,n=(8&e[i+1])>>>3,a=(6&e[i+1])>>>1,r=1&e[i+1],s=(192&e[i+2])>>>6,o=(60&e[i+2])>>>2,d=(1&e[i+2])<<2|(192&e[i+3])>>>6,_=(3&e[i+3])<<11|e[i+4]<<3|(224&e[i+5])>>>5;e[i+6];if(i+_>this.data_.byteLength){this.eof_flag_=!0,this.has_last_incomplete_data=!0;break}var h=1===r?7:9,c=_-h;i+=h;var u=this.findNextSyncwordOffset(i+c);if(this.current_syncword_offset_=u,(0===n||1===n)&&0===a){var l=e.subarray(i,i+c);(t=new F).audio_object_type=s+1,t.sampling_freq_index=o,t.sampling_frequency=G[o],t.channel_config=d,t.data=l}}return t},e.prototype.hasIncompleteData=function(){return this.has_last_incomplete_data},e.prototype.getIncompleteData=function(){return this.has_last_incomplete_data?this.data_.subarray(this.current_syncword_offset_):null},e}(),H=function(){function e(e){this.TAG="AACLOASParser",this.data_=e,this.current_syncword_offset_=this.findNextSyncwordOffset(0),this.eof_flag_&&r.a.e(this.TAG,"Could not found LOAS syncword until payload end")}return e.prototype.findNextSyncwordOffset=function(e){for(var t=e,i=this.data_;;){if(t+1>=i.byteLength)return this.eof_flag_=!0,i.byteLength;if(695===(i[t+0]<<3|i[t+1]>>>5))return t;t++}},e.prototype.getLATMValue=function(e){for(var t=e.readBits(2),i=0,n=0;n<=t;n++)i<<=8,i|=e.readByte();return i},e.prototype.readNextAACFrame=function(e){for(var t=this.data_,i=null;null==i&&!this.eof_flag_;){var n=this.current_syncword_offset_,a=(31&t[n+1])<<8|t[n+2];if(n+3+a>=this.data_.byteLength){this.eof_flag_=!0,this.has_last_incomplete_data=!0;break}var s=new f(t.subarray(n+3,n+3+a)),o=null;if(s.readBool()){if(null==e){r.a.w(this.TAG,"StreamMuxConfig Missing"),this.current_syncword_offset_=this.findNextSyncwordOffset(n+3+a),s.destroy();continue}o=e}else{var d=s.readBool();if(d&&s.readBool()){r.a.e(this.TAG,"audioMuxVersionA is Not Supported"),s.destroy();break}if(d&&this.getLATMValue(s),!s.readBool()){r.a.e(this.TAG,"allStreamsSameTimeFraming zero is Not Supported"),s.destroy();break}if(0!==s.readBits(6)){r.a.e(this.TAG,"more than 2 numSubFrames Not Supported"),s.destroy();break}if(0!==s.readBits(4)){r.a.e(this.TAG,"more than 2 numProgram Not Supported"),s.destroy();break}if(0!==s.readBits(3)){r.a.e(this.TAG,"more than 2 numLayer Not Supported"),s.destroy();break}var _=d?this.getLATMValue(s):0,h=s.readBits(5);_-=5;var c=s.readBits(4);_-=4;var u=s.readBits(4);_-=4,s.readBits(3),(_-=3)>0&&s.readBits(_);var l=s.readBits(3);if(0!==l){r.a.e(this.TAG,"frameLengthType = "+l+". Only frameLengthType = 0 Supported"),s.destroy();break}s.readByte();var p=s.readBool();if(p)if(d)this.getLATMValue(s);else{for(var m=0;;){m<<=8;var g=s.readBool();if(m+=s.readByte(),!g)break}console.log(m)}s.readBool()&&s.readByte(),(o=new j).audio_object_type=h,o.sampling_freq_index=c,o.sampling_frequency=G[o.sampling_freq_index],o.channel_config=u,o.other_data_present=p}for(var v=0;;){var y=s.readByte();if(v+=y,255!==y)break}for(var b=new Uint8Array(v),S=0;S=6?(n=5,t=new Array(4),s=a-3):(n=2,t=new Array(2),s=a):-1!==o.indexOf("android")?(n=2,t=new Array(2),s=a):(n=5,s=a,t=new Array(4),a>=6?s=a-3:1===r&&(n=2,t=new Array(2),s=a)),t[0]=n<<3,t[0]|=(15&a)>>>1,t[1]=(15&a)<<7,t[1]|=(15&r)<<3,5===n&&(t[1]|=(15&s)>>>1,t[2]=(1&s)<<7,t[2]|=8,t[3]=0),this.config=t,this.sampling_rate=G[a],this.channel_count=r,this.codec_mimetype="mp4a.40."+n,this.original_codec_mimetype="mp4a.40."+i},K=function(){},W=function(){};!function(e){e[e.kSpliceNull=0]="kSpliceNull",e[e.kSpliceSchedule=4]="kSpliceSchedule",e[e.kSpliceInsert=5]="kSpliceInsert",e[e.kTimeSignal=6]="kTimeSignal",e[e.kBandwidthReservation=7]="kBandwidthReservation",e[e.kPrivateCommand=255]="kPrivateCommand"}(N||(N={}));var X,Y=function(e){var t=e.readBool();return t?(e.readBits(6),{time_specified_flag:t,pts_time:4*e.readBits(31)+e.readBits(2)}):(e.readBits(7),{time_specified_flag:t})},J=function(e){var t=e.readBool();return e.readBits(6),{auto_return:t,duration:4*e.readBits(31)+e.readBits(2)}},Z=function(e,t){var i=t.readBits(8);return e?{component_tag:i}:{component_tag:i,splice_time:Y(t)}},Q=function(e){return{component_tag:e.readBits(8),utc_splice_time:e.readBits(32)}},$=function(e){var t=e.readBits(32),i=e.readBool();e.readBits(7);var n={splice_event_id:t,splice_event_cancel_indicator:i};if(i)return n;if(n.out_of_network_indicator=e.readBool(),n.program_splice_flag=e.readBool(),n.duration_flag=e.readBool(),e.readBits(5),n.program_splice_flag)n.utc_splice_time=e.readBits(32);else{n.component_count=e.readBits(8),n.components=[];for(var a=0;a=i.byteLength)return this.eof_flag_=!0,i.byteLength;var n=i[t+0]<<24|i[t+1]<<16|i[t+2]<<8|i[t+3],a=i[t+0]<<16|i[t+1]<<8|i[t+2];if(1===n||1===a)return t;t++}},e.prototype.readNextNaluPayload=function(){for(var e=this.data_,t=null;null==t&&!this.eof_flag_;){var i=this.current_startcode_offset_,n=e[i+=1===(e[i]<<24|e[i+1]<<16|e[i+2]<<8|e[i+3])?4:3]>>1&63,a=(128&e[i])>>>7,r=this.findNextStartCodeOffset(i);if(this.current_startcode_offset_=r,0===a){var s=e.subarray(i,r);(t=new de).type=n,t.data=s}}return t},e}(),ce=function(){function e(e,t,i,n){var a=23+(5+e.byteLength)+(5+t.byteLength)+(5+i.byteLength),r=this.data=new Uint8Array(a);r[0]=1,r[1]=(3&n.general_profile_space)<<6|(n.general_tier_flag?1:0)<<5|31&n.general_profile_idc,r[2]=n.general_profile_compatibility_flags_1,r[3]=n.general_profile_compatibility_flags_2,r[4]=n.general_profile_compatibility_flags_3,r[5]=n.general_profile_compatibility_flags_4,r[6]=n.general_constraint_indicator_flags_1,r[7]=n.general_constraint_indicator_flags_2,r[8]=n.general_constraint_indicator_flags_3,r[9]=n.general_constraint_indicator_flags_4,r[10]=n.general_constraint_indicator_flags_5,r[11]=n.general_constraint_indicator_flags_6,r[12]=n.general_level_idc,r[13]=240|(3840&n.min_spatial_segmentation_idc)>>8,r[14]=255&n.min_spatial_segmentation_idc,r[15]=252|3&n.parallelismType,r[16]=252|3&n.chroma_format_idc,r[17]=248|7&n.bit_depth_luma_minus8,r[18]=248|7&n.bit_depth_chroma_minus8,r[19]=0,r[20]=0,r[21]=(3&n.constant_frame_rate)<<6|(7&n.num_temporal_layers)<<3|(n.temporal_id_nested?1:0)<<2|3,r[22]=3,r[23]=128|X.kSliceVPS,r[24]=0,r[25]=1,r[26]=(65280&e.byteLength)>>8,r[27]=(255&e.byteLength)>>0,r.set(e,28),r[23+(5+e.byteLength)+0]=128|X.kSliceSPS,r[23+(5+e.byteLength)+1]=0,r[23+(5+e.byteLength)+2]=1,r[23+(5+e.byteLength)+3]=(65280&t.byteLength)>>8,r[23+(5+e.byteLength)+4]=(255&t.byteLength)>>0,r.set(t,23+(5+e.byteLength)+5),r[23+(5+e.byteLength+5+t.byteLength)+0]=128|X.kSlicePPS,r[23+(5+e.byteLength+5+t.byteLength)+1]=0,r[23+(5+e.byteLength+5+t.byteLength)+2]=1,r[23+(5+e.byteLength+5+t.byteLength)+3]=(65280&i.byteLength)>>8,r[23+(5+e.byteLength+5+t.byteLength)+4]=(255&i.byteLength)>>0,r.set(i,23+(5+e.byteLength+5+t.byteLength)+5)}return e.prototype.getData=function(){return this.data},e}(),ue=function(){},le=function(){},fe=function(){},pe=[[64,64,80,80,96,96,112,112,128,128,160,160,192,192,224,224,256,256,320,320,384,384,448,448,512,512,640,640,768,768,896,896,1024,1024,1152,1152,1280,1280],[69,70,87,88,104,105,121,122,139,140,174,175,208,209,243,244,278,279,348,349,417,418,487,488,557,558,696,697,835,836,975,976,1114,1115,1253,1254,1393,1394],[96,96,120,120,144,144,168,168,192,192,240,240,288,288,336,336,384,384,480,480,576,576,672,672,768,768,960,960,1152,1152,1344,1344,1536,1536,1728,1728,1920,1920]],me=function(){function e(e){this.TAG="AC3Parser",this.data_=e,this.current_syncword_offset_=this.findNextSyncwordOffset(0),this.eof_flag_&&r.a.e(this.TAG,"Could not found AC3 syncword until payload end")}return e.prototype.findNextSyncwordOffset=function(e){for(var t=e,i=this.data_;;){if(t+7>=i.byteLength)return this.eof_flag_=!0,i.byteLength;if(2935===(i[t+0]<<8|i[t+1]<<0))return t;t++}},e.prototype.readNextAC3Frame=function(){for(var e=this.data_,t=null;null==t&&!this.eof_flag_;){var i=this.current_syncword_offset_,n=e[i+4]>>6,a=[48e3,44200,33e3][n],r=63&e[i+4],s=2*pe[n][r];if(i+s>this.data_.byteLength){this.eof_flag_=!0,this.has_last_incomplete_data=!0;break}var o=this.findNextSyncwordOffset(i+s);this.current_syncword_offset_=o;var d=e[i+5]>>3,_=7&e[i+5],h=e[i+6]>>5,c=0;0!=(1&h)&&1!==h&&(c+=2),0!=(4&h)&&(c+=2),2===h&&(c+=2);var u=(e[i+6]<<8|e[i+7]<<0)>>12-c&1,l=[2,1,2,3,3,4,4,5][h]+u;(t=new fe).sampling_frequency=a,t.channel_count=l,t.channel_mode=h,t.bit_stream_identification=d,t.low_frequency_effects_channel_on=u,t.bit_stream_mode=_,t.frame_size_code=r,t.data=e.subarray(i,i+s)}return t},e.prototype.hasIncompleteData=function(){return this.has_last_incomplete_data},e.prototype.getIncompleteData=function(){return this.has_last_incomplete_data?this.data_.subarray(this.current_syncword_offset_):null},e}(),ge=function(e){var t;t=[e.sampling_rate_code<<6|e.bit_stream_identification<<1|e.bit_stream_mode>>2,(3&e.bit_stream_mode)<<6|e.channel_mode<<3|e.low_frequency_effects_channel_on<<2|e.frame_size_code>>4,e.frame_size_code<<4&224],this.config=t,this.sampling_rate=e.sampling_frequency,this.bit_stream_identification=e.bit_stream_identification,this.bit_stream_mode=e.bit_stream_mode,this.low_frequency_effects_channel_on=e.low_frequency_effects_channel_on,this.channel_count=e.channel_count,this.channel_mode=e.channel_mode,this.codec_mimetype="ac-3",this.original_codec_mimetype="ac-3"},ve=function(){var e=function(t,i){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(t,i)};return function(t,i){function n(){this.constructor=t}e(t,i),t.prototype=null===i?Object.create(i):(n.prototype=i.prototype,new n)}}(),ye=function(){return(ye=Object.assign||function(e){for(var t,i=1,n=arguments.length;i=4?(r.a.v("TSDemuxer","ts_packet_size = 192, m2ts mode"),i-=4):204===n&&r.a.v("TSDemuxer","ts_packet_size = 204, RS encoded MPEG2-TS stream"),{match:!0,consumed:0,ts_packet_size:n,sync_offset:i})},t.prototype.bindDataSource=function(e){return e.onDataArrival=this.parseChunks.bind(this),this},t.prototype.resetMediaInfo=function(){this.media_info_=new o.a},t.prototype.parseChunks=function(e,t){if(!(this.onError&&this.onMediaInfo&&this.onTrackMetadata&&this.onDataAvailable))throw new c.a("onError & onMediaInfo & onTrackMetadata & onDataAvailable callback must be specified");var i=0;for(this.first_parse_&&(this.first_parse_=!1,i=this.sync_offset_);i+this.ts_packet_size_<=e.byteLength;){var n=t+i;192===this.ts_packet_size_&&(i+=4);var a=new Uint8Array(e,i,188),s=a[0];if(71!==s){r.a.e(this.TAG,"sync_byte = "+s+", not 0x47");break}var o=(64&a[1])>>>6,d=(a[1],(31&a[1])<<8|a[2]),_=(48&a[3])>>>4,h=15&a[3],u={},l=4;if(2==_||3==_){var f=a[4];if(5+f===188){i+=188,204===this.ts_packet_size_&&(i+=16);continue}f>0&&(u=this.parseAdaptationField(e,i+4,1+f)),l=5+f}if(1==_||3==_)if(0===d||d===this.current_pmt_pid_||null!=this.pmt_&&this.pmt_.pid_stream_type[d]===E.kSCTE35){var p=188-l;this.handleSectionSlice(e,i+l,p,{pid:d,file_position:n,payload_unit_start_indicator:o,continuity_conunter:h,random_access_indicator:u.random_access_indicator})}else if(null!=this.pmt_&&null!=this.pmt_.pid_stream_type[d]){p=188-l;var m=this.pmt_.pid_stream_type[d];d!==this.pmt_.common_pids.h264&&d!==this.pmt_.common_pids.h265&&d!==this.pmt_.common_pids.adts_aac&&d!==this.pmt_.common_pids.loas_aac&&d!==this.pmt_.common_pids.ac3&&d!==this.pmt_.common_pids.opus&&d!==this.pmt_.common_pids.mp3&&!0!==this.pmt_.pes_private_data_pids[d]&&!0!==this.pmt_.timed_id3_pids[d]||this.handlePESSlice(e,i+l,p,{pid:d,stream_type:m,file_position:n,payload_unit_start_indicator:o,continuity_conunter:h,random_access_indicator:u.random_access_indicator})}i+=188,204===this.ts_packet_size_&&(i+=16)}return this.dispatchAudioVideoMediaSegment(),i},t.prototype.parseAdaptationField=function(e,t,i){var n=new Uint8Array(e,t,i),a=n[0];return a>0?a>183?(r.a.w(this.TAG,"Illegal adaptation_field_length: "+a),{}):{discontinuity_indicator:(128&n[1])>>>7,random_access_indicator:(64&n[1])>>>6,elementary_stream_priority_indicator:(32&n[1])>>>5}:{}},t.prototype.handleSectionSlice=function(e,t,i,n){var a=new Uint8Array(e,t,i),r=this.section_slice_queues_[n.pid];if(n.payload_unit_start_indicator){var s=a[0];if(null!=r&&0!==r.total_length){var o=new Uint8Array(e,t+1,Math.min(i,s));r.slices.push(o),r.total_length+=o.byteLength,r.total_length===r.expected_length?this.emitSectionSlices(r,n):this.clearSlices(r,n)}for(var d=1+s;d=r.expected_length&&this.clearSlices(r,n),d+=o.byteLength}}else if(null!=r&&0!==r.total_length){o=new Uint8Array(e,t,Math.min(i,r.expected_length-r.total_length));r.slices.push(o),r.total_length+=o.byteLength,r.total_length===r.expected_length?this.emitSectionSlices(r,n):r.total_length>=r.expected_length&&this.clearSlices(r,n)}},t.prototype.handlePESSlice=function(e,t,i,n){var a=new Uint8Array(e,t,i),s=a[0]<<16|a[1]<<8|a[2],o=(a[3],a[4]<<8|a[5]);if(n.payload_unit_start_indicator){if(1!==s)return void r.a.e(this.TAG,"handlePESSlice: packet_start_code_prefix should be 1 but with value "+s);var d=this.pes_slice_queues_[n.pid];d&&(0===d.expected_length||d.expected_length===d.total_length?this.emitPESSlices(d,n):this.clearSlices(d,n)),this.pes_slice_queues_[n.pid]=new C,this.pes_slice_queues_[n.pid].file_position=n.file_position,this.pes_slice_queues_[n.pid].random_access_indicator=n.random_access_indicator}if(null!=this.pes_slice_queues_[n.pid]){var _=this.pes_slice_queues_[n.pid];_.slices.push(a),n.payload_unit_start_indicator&&(_.expected_length=0===o?0:o+6),_.total_length+=a.byteLength,_.expected_length>0&&_.expected_length===_.total_length?this.emitPESSlices(_,n):_.expected_length>0&&_.expected_length<_.total_length&&this.clearSlices(_,n)}},t.prototype.emitSectionSlices=function(e,t){for(var i=new Uint8Array(e.total_length),n=0,a=0;n>>6,o=t[8],d=void 0,_=void 0;2!==s&&3!==s||(d=536870912*(14&t[9])+4194304*(255&t[10])+16384*(254&t[11])+128*(255&t[12])+(254&t[13])/2,_=3===s?536870912*(14&t[14])+4194304*(255&t[15])+16384*(254&t[16])+128*(255&t[17])+(254&t[18])/2:d);var h=9+o,c=void 0;if(0!==a){if(a<3+o)return void r.a.v(this.TAG,"Malformed PES: PES_packet_length < 3 + PES_header_data_length");c=a-3-o}else c=t.byteLength-h;var u=t.subarray(h,h+c);switch(e.stream_type){case E.kMPEG1Audio:case E.kMPEG2Audio:this.parseMP3Payload(u,d);break;case E.kPESPrivateData:this.pmt_.common_pids.opus===e.pid?this.parseOpusPayload(u,d):this.pmt_.common_pids.ac3===e.pid?this.parseAC3Payload(u,d):this.pmt_.smpte2038_pids[e.pid]?this.parseSMPTE2038MetadataPayload(u,d,_,e.pid,n):this.parsePESPrivateDataPayload(u,d,_,e.pid,n);break;case E.kADTSAAC:this.parseADTSAACPayload(u,d);break;case E.kLOASAAC:this.parseLOASAACPayload(u,d);break;case E.kAC3:this.parseAC3Payload(u,d);break;case E.kID3:this.parseTimedID3MetadataPayload(u,d,_,e.pid,n);break;case E.kH264:this.parseH264Payload(u,d,_,e.file_position,e.random_access_indicator);break;case E.kH265:this.parseH265Payload(u,d,_,e.file_position,e.random_access_indicator)}}else if((188===n||191===n||240===n||241===n||255===n||242===n||248===n)&&e.stream_type===E.kPESPrivateData){h=6,c=void 0;c=0!==a?a:t.byteLength-h;u=t.subarray(h,h+c);this.parsePESPrivateDataPayload(u,void 0,void 0,e.pid,n)}}else r.a.e(this.TAG,"parsePES: packet_start_code_prefix should be 1 but with value "+i)},t.prototype.parsePAT=function(e){var t=e[0];if(0===t){var i=(15&e[1])<<8|e[2],n=(e[3],e[4],(62&e[5])>>>1),a=1&e[5],s=e[6],o=(e[7],null);if(1===a&&0===s)(o=new T).version_number=n;else if(null==(o=this.pat_))return;for(var d=i-5-4,_=-1,h=-1,c=8;c<8+d;c+=4){var u=e[c]<<8|e[c+1],l=(31&e[c+2])<<8|e[c+3];0===u?o.network_pid=l:(o.program_pmt_pid[u]=l,-1===_&&(_=u),-1===h&&(h=l))}1===a&&0===s&&(null==this.pat_&&r.a.v(this.TAG,"Parsed first PAT: "+JSON.stringify(o)),this.pat_=o,this.current_program_=_,this.current_pmt_pid_=h)}else r.a.e(this.TAG,"parsePAT: table_id "+t+" is not corresponded to PAT!")},t.prototype.parsePMT=function(e){var t=e[0];if(2===t){var i=(15&e[1])<<8|e[2],n=e[3]<<8|e[4],a=(62&e[5])>>>1,s=1&e[5],o=e[6],d=(e[7],null);if(1===s&&0===o)(d=new w).program_number=n,d.version_number=a,this.program_pmt_map_[n]=d;else if(null==(d=this.program_pmt_map_[n]))return;e[8],e[9];for(var _=(15&e[10])<<8|e[11],h=12+_,c=i-9-_-4,u=h;u0){for(var v=u+5;v1&&(r.a.w(this.TAG,"AAC: Detected pts overlapped, expected: "+s+"ms, PES pts: "+a+"ms"),a=s)}}for(var o,d=new z(e),_=null,h=a;null!=(_=d.readNextAACFrame());){n=1024/_.sampling_frequency*1e3;var c={codec:"aac",data:_};0==this.audio_init_segment_dispatched_?(this.audio_metadata_={codec:"aac",audio_object_type:_.audio_object_type,sampling_freq_index:_.sampling_freq_index,sampling_frequency:_.sampling_frequency,channel_config:_.channel_config},this.dispatchAudioInitSegment(c)):this.detectAudioMetadataChange(c)&&(this.dispatchAudioMediaSegment(),this.dispatchAudioInitSegment(c)),o=h;var u=Math.floor(h),l={unit:_.data,length:_.data.byteLength,pts:u,dts:u};this.audio_track_.samples.push(l),this.audio_track_.length+=_.data.byteLength,h+=n}d.hasIncompleteData()&&(this.aac_last_incomplete_data_=d.getIncompleteData()),o&&(this.aac_last_sample_pts_=o)}},t.prototype.parseLOASAACPayload=function(e,t){var i;if(!this.has_video_||this.video_init_segment_dispatched_){if(this.aac_last_incomplete_data_){var n=new Uint8Array(e.byteLength+this.aac_last_incomplete_data_.byteLength);n.set(this.aac_last_incomplete_data_,0),n.set(e,this.aac_last_incomplete_data_.byteLength),e=n}var a,s;if(null!=t&&(s=t/this.timescale_),"aac"===this.audio_metadata_.codec){if(null==t&&null!=this.aac_last_sample_pts_)a=1024/this.audio_metadata_.sampling_frequency*1e3,s=this.aac_last_sample_pts_+a;else if(null==t)return void r.a.w(this.TAG,"AAC: Unknown pts");if(this.aac_last_incomplete_data_&&this.aac_last_sample_pts_){a=1024/this.audio_metadata_.sampling_frequency*1e3;var o=this.aac_last_sample_pts_+a;Math.abs(o-s)>1&&(r.a.w(this.TAG,"AAC: Detected pts overlapped, expected: "+o+"ms, PES pts: "+s+"ms"),s=o)}}for(var d,_=new H(e),h=null,c=s;null!=(h=_.readNextAACFrame(null!==(i=this.loas_previous_frame)&&void 0!==i?i:void 0));){this.loas_previous_frame=h,a=1024/h.sampling_frequency*1e3;var u={codec:"aac",data:h};0==this.audio_init_segment_dispatched_?(this.audio_metadata_={codec:"aac",audio_object_type:h.audio_object_type,sampling_freq_index:h.sampling_freq_index,sampling_frequency:h.sampling_frequency,channel_config:h.channel_config},this.dispatchAudioInitSegment(u)):this.detectAudioMetadataChange(u)&&(this.dispatchAudioMediaSegment(),this.dispatchAudioInitSegment(u)),d=c;var l=Math.floor(c),f={unit:h.data,length:h.data.byteLength,pts:l,dts:l};this.audio_track_.samples.push(f),this.audio_track_.length+=h.data.byteLength,c+=a}_.hasIncompleteData()&&(this.aac_last_incomplete_data_=_.getIncompleteData()),d&&(this.aac_last_sample_pts_=d)}},t.prototype.parseAC3Payload=function(e,t){if(!this.has_video_||this.video_init_segment_dispatched_){var i,n;if(null!=t&&(n=t/this.timescale_),"ac-3"===this.audio_metadata_.codec)if(null==t&&null!=this.aac_last_sample_pts_)i=1536/this.audio_metadata_.sampling_frequency*1e3,n=this.aac_last_sample_pts_+i;else if(null==t)return void r.a.w(this.TAG,"Opus: Unknown pts");for(var a,s=new me(e),o=null,d=n;null!=(o=s.readNextAC3Frame());){i=1536/o.sampling_frequency*1e3;var _={codec:"ac-3",data:o};0==this.audio_init_segment_dispatched_?(this.audio_metadata_={codec:"ac-3",sampling_frequency:o.sampling_frequency,bit_stream_identification:o.bit_stream_identification,bit_stream_mode:o.bit_stream_mode,low_frequency_effects_channel_on:o.low_frequency_effects_channel_on,channel_mode:o.channel_mode},console.log(JSON.stringify(this.audio_metadata_)),this.dispatchAudioInitSegment(_)):this.detectAudioMetadataChange(_)&&(this.dispatchAudioMediaSegment(),this.dispatchAudioInitSegment(_)),a=d;var h=Math.floor(d),c={unit:o.data,length:o.data.byteLength,pts:h,dts:h};this.audio_track_.samples.push(c),this.audio_track_.length+=o.data.byteLength,d+=i}a&&(this.aac_last_sample_pts_=a)}},t.prototype.parseOpusPayload=function(e,t){if(!this.has_video_||this.video_init_segment_dispatched_){var i,n;if(null!=t&&(n=t/this.timescale_),"opus"===this.audio_metadata_.codec)if(null==t&&null!=this.aac_last_sample_pts_)i=20,n=this.aac_last_sample_pts_+i;else if(null==t)return void r.a.w(this.TAG,"Opus: Unknown pts");for(var a,s=n,o=0;o>>3&3,s=(6&e[1])>>1,o=(240&e[2])>>>4,d=(12&e[2])>>>2,_=3!==(e[3]>>>6&3)?2:1,h=0,c=34;switch(r){case 0:h=[11025,12e3,8e3,0][d];break;case 2:h=[22050,24e3,16e3,0][d];break;case 3:h=[44100,48e3,32e3,0][d]}switch(s){case 1:c=34,o>>24&255,i[1]=t>>>16&255,i[2]=t>>>8&255,i[3]=255&t,i.set(e,4);var s=8;for(r=0;r>>24&255,t>>>16&255,t>>>8&255,255&t,i>>>24&255,i>>>16&255,i>>>8&255,255&i,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]))},e.trak=function(t){return e.box(e.types.trak,e.tkhd(t),e.mdia(t))},e.tkhd=function(t){var i=t.id,n=t.duration,a=t.presentWidth,r=t.presentHeight;return e.box(e.types.tkhd,new Uint8Array([0,0,0,7,0,0,0,0,0,0,0,0,i>>>24&255,i>>>16&255,i>>>8&255,255&i,0,0,0,0,n>>>24&255,n>>>16&255,n>>>8&255,255&n,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,a>>>8&255,255&a,0,0,r>>>8&255,255&r,0,0]))},e.mdia=function(t){return e.box(e.types.mdia,e.mdhd(t),e.hdlr(t),e.minf(t))},e.mdhd=function(t){var i=t.timescale,n=t.duration;return e.box(e.types.mdhd,new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,i>>>24&255,i>>>16&255,i>>>8&255,255&i,n>>>24&255,n>>>16&255,n>>>8&255,255&n,85,196,0,0]))},e.hdlr=function(t){var i=null;return i="audio"===t.type?e.constants.HDLR_AUDIO:e.constants.HDLR_VIDEO,e.box(e.types.hdlr,i)},e.minf=function(t){var i=null;return i="audio"===t.type?e.box(e.types.smhd,e.constants.SMHD):e.box(e.types.vmhd,e.constants.VMHD),e.box(e.types.minf,i,e.dinf(),e.stbl(t))},e.dinf=function(){return e.box(e.types.dinf,e.box(e.types.dref,e.constants.DREF))},e.stbl=function(t){return e.box(e.types.stbl,e.stsd(t),e.box(e.types.stts,e.constants.STTS),e.box(e.types.stsc,e.constants.STSC),e.box(e.types.stsz,e.constants.STSZ),e.box(e.types.stco,e.constants.STCO))},e.stsd=function(t){return"audio"===t.type?"mp3"===t.codec?e.box(e.types.stsd,e.constants.STSD_PREFIX,e.mp3(t)):"ac-3"===t.codec?e.box(e.types.stsd,e.constants.STSD_PREFIX,e.ac3(t)):"opus"===t.codec?e.box(e.types.stsd,e.constants.STSD_PREFIX,e.Opus(t)):e.box(e.types.stsd,e.constants.STSD_PREFIX,e.mp4a(t)):"video"===t.type&&t.codec.startsWith("hvc1")?e.box(e.types.stsd,e.constants.STSD_PREFIX,e.hvc1(t)):e.box(e.types.stsd,e.constants.STSD_PREFIX,e.avc1(t))},e.mp3=function(t){var i=t.channelCount,n=t.audioSampleRate,a=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,i,0,16,0,0,0,0,n>>>8&255,255&n,0,0]);return e.box(e.types[".mp3"],a)},e.mp4a=function(t){var i=t.channelCount,n=t.audioSampleRate,a=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,i,0,16,0,0,0,0,n>>>8&255,255&n,0,0]);return e.box(e.types.mp4a,a,e.esds(t))},e.ac3=function(t){var i=t.channelCount,n=t.audioSampleRate,a=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,i,0,16,0,0,0,0,n>>>8&255,255&n,0,0]);return e.box(e.types["ac-3"],a,e.box(e.types.dac3,new Uint8Array(t.config)))},e.esds=function(t){var i=t.config||[],n=i.length,a=new Uint8Array([0,0,0,0,3,23+n,0,1,0,4,15+n,64,21,0,0,0,0,0,0,0,0,0,0,0,5].concat([n]).concat(i).concat([6,1,2]));return e.box(e.types.esds,a)},e.Opus=function(t){var i=t.channelCount,n=t.audioSampleRate,a=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,i,0,16,0,0,0,0,n>>>8&255,255&n,0,0]);return e.box(e.types.Opus,a,e.dOps(t))},e.dOps=function(t){var i=t.channelCount,n=t.channelConfigCode,a=t.audioSampleRate;if(t.config)return e.box(e.types.dOps,s);var r=[];switch(n){case 1:case 2:r=[0];break;case 0:r=[255,1,1,0,1];break;case 128:r=[255,2,0,0,1];break;case 3:r=[1,2,1,0,2,1];break;case 4:r=[1,2,2,0,1,2,3];break;case 5:r=[1,3,2,0,4,1,2,3];break;case 6:r=[1,4,2,0,4,1,2,3,5];break;case 7:r=[1,4,2,0,4,1,2,3,5,6];break;case 8:r=[1,5,3,0,6,1,2,3,4,5,7];break;case 130:r=[1,1,2,0,1];break;case 131:r=[1,1,3,0,1,2];break;case 132:r=[1,1,4,0,1,2,3];break;case 133:r=[1,1,5,0,1,2,3,4];break;case 134:r=[1,1,6,0,1,2,3,4,5];break;case 135:r=[1,1,7,0,1,2,3,4,5,6];break;case 136:r=[1,1,8,0,1,2,3,4,5,6,7]}var s=new Uint8Array(Se([0,i,0,0,a>>>24&255,a>>>17&255,a>>>8&255,a>>>0&255,0,0],r));return e.box(e.types.dOps,s)},e.avc1=function(t){var i=t.avcc,n=t.codecWidth,a=t.codecHeight,r=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,n>>>8&255,255&n,a>>>8&255,255&a,0,72,0,0,0,72,0,0,0,0,0,0,0,1,10,120,113,113,47,102,108,118,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,255,255]);return e.box(e.types.avc1,r,e.box(e.types.avcC,i))},e.hvc1=function(t){var i=t.hvcc,n=t.codecWidth,a=t.codecHeight,r=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,n>>>8&255,255&n,a>>>8&255,255&a,0,72,0,0,0,72,0,0,0,0,0,0,0,1,10,120,113,113,47,102,108,118,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,255,255]);return e.box(e.types.hvc1,r,e.box(e.types.hvcC,i))},e.mvex=function(t){return e.box(e.types.mvex,e.trex(t))},e.trex=function(t){var i=t.id,n=new Uint8Array([0,0,0,0,i>>>24&255,i>>>16&255,i>>>8&255,255&i,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]);return e.box(e.types.trex,n)},e.moof=function(t,i){return e.box(e.types.moof,e.mfhd(t.sequenceNumber),e.traf(t,i))},e.mfhd=function(t){var i=new Uint8Array([0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,255&t]);return e.box(e.types.mfhd,i)},e.traf=function(t,i){var n=t.id,a=e.box(e.types.tfhd,new Uint8Array([0,0,0,0,n>>>24&255,n>>>16&255,n>>>8&255,255&n])),r=e.box(e.types.tfdt,new Uint8Array([0,0,0,0,i>>>24&255,i>>>16&255,i>>>8&255,255&i])),s=e.sdtp(t),o=e.trun(t,s.byteLength+16+16+8+16+8+8);return e.box(e.types.traf,a,r,o,s)},e.sdtp=function(t){for(var i=t.samples||[],n=i.length,a=new Uint8Array(4+n),r=0;r>>24&255,a>>>16&255,a>>>8&255,255&a,i>>>24&255,i>>>16&255,i>>>8&255,255&i],0);for(var o=0;o>>24&255,d>>>16&255,d>>>8&255,255&d,_>>>24&255,_>>>16&255,_>>>8&255,255&_,h.isLeading<<2|h.dependsOn,h.isDependedOn<<6|h.hasRedundancy<<4|h.isNonSync,0,0,c>>>24&255,c>>>16&255,c>>>8&255,255&c],12+16*o)}return e.box(e.types.trun,s)},e.mdat=function(t){return e.box(e.types.mdat,t)},e}();Ee.init();var Ae=Ee,Re=function(){function e(){}return e.getSilentFrame=function(e,t){if("mp4a.40.2"===e){if(1===t)return new Uint8Array([0,200,0,128,35,128]);if(2===t)return new Uint8Array([33,0,73,144,2,25,0,35,128]);if(3===t)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,142]);if(4===t)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,128,44,128,8,2,56]);if(5===t)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,130,48,4,153,0,33,144,2,56]);if(6===t)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,130,48,4,153,0,33,144,2,0,178,0,32,8,224])}else{if(1===t)return new Uint8Array([1,64,34,128,163,78,230,128,186,8,0,0,0,28,6,241,193,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94]);if(2===t)return new Uint8Array([1,64,34,128,163,94,230,128,186,8,0,0,0,0,149,0,6,241,161,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94]);if(3===t)return new Uint8Array([1,64,34,128,163,94,230,128,186,8,0,0,0,0,149,0,6,241,161,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94])}return null},e}(),Te=i(7),Le=function(){function e(e){this.TAG="MP4Remuxer",this._config=e,this._isLive=!0===e.isLive,this._dtsBase=-1,this._dtsBaseInited=!1,this._audioDtsBase=1/0,this._videoDtsBase=1/0,this._audioNextDts=void 0,this._videoNextDts=void 0,this._audioStashedLastSample=null,this._videoStashedLastSample=null,this._audioMeta=null,this._videoMeta=null,this._audioSegmentInfoList=new Te.c("audio"),this._videoSegmentInfoList=new Te.c("video"),this._onInitSegment=null,this._onMediaSegment=null,this._forceFirstIDR=!(!s.a.chrome||!(s.a.version.major<50||50===s.a.version.major&&s.a.version.build<2661)),this._fillSilentAfterSeek=s.a.msedge||s.a.msie,this._mp3UseMpegAudio=!s.a.firefox,this._fillAudioTimestampGap=this._config.fixAudioTimestampGap}return e.prototype.destroy=function(){this._dtsBase=-1,this._dtsBaseInited=!1,this._audioMeta=null,this._videoMeta=null,this._audioSegmentInfoList.clear(),this._audioSegmentInfoList=null,this._videoSegmentInfoList.clear(),this._videoSegmentInfoList=null,this._onInitSegment=null,this._onMediaSegment=null},e.prototype.bindDataSource=function(e){return e.onDataAvailable=this.remux.bind(this),e.onTrackMetadata=this._onTrackMetadataReceived.bind(this),this},Object.defineProperty(e.prototype,"onInitSegment",{get:function(){return this._onInitSegment},set:function(e){this._onInitSegment=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onMediaSegment",{get:function(){return this._onMediaSegment},set:function(e){this._onMediaSegment=e},enumerable:!1,configurable:!0}),e.prototype.insertDiscontinuity=function(){this._audioNextDts=this._videoNextDts=void 0},e.prototype.seek=function(e){this._audioStashedLastSample=null,this._videoStashedLastSample=null,this._videoSegmentInfoList.clear(),this._audioSegmentInfoList.clear()},e.prototype.remux=function(e,t){if(!this._onMediaSegment)throw new c.a("MP4Remuxer: onMediaSegment callback must be specificed!");this._dtsBaseInited||this._calculateDtsBase(e,t),t&&this._remuxVideo(t),e&&this._remuxAudio(e)},e.prototype._onTrackMetadataReceived=function(e,t){var i=null,n="mp4",a=t.codec;if("audio"===e)this._audioMeta=t,"mp3"===t.codec&&this._mp3UseMpegAudio?(n="mpeg",a="",i=new Uint8Array):i=Ae.generateInitSegment(t);else{if("video"!==e)return;this._videoMeta=t,i=Ae.generateInitSegment(t)}if(!this._onInitSegment)throw new c.a("MP4Remuxer: onInitSegment callback must be specified!");this._onInitSegment(e,{type:e,data:i.buffer,codec:a,container:e+"/"+n,mediaDuration:t.duration})},e.prototype._calculateDtsBase=function(e,t){this._dtsBaseInited||(e&&e.samples&&e.samples.length&&(this._audioDtsBase=e.samples[0].dts),t&&t.samples&&t.samples.length&&(this._videoDtsBase=t.samples[0].dts),this._dtsBase=Math.min(this._audioDtsBase,this._videoDtsBase),this._dtsBaseInited=!0)},e.prototype.getTimestampBase=function(){if(this._dtsBaseInited)return this._dtsBase},e.prototype.flushStashedSamples=function(){var e=this._videoStashedLastSample,t=this._audioStashedLastSample,i={type:"video",id:1,sequenceNumber:0,samples:[],length:0};null!=e&&(i.samples.push(e),i.length=e.length);var n={type:"audio",id:2,sequenceNumber:0,samples:[],length:0};null!=t&&(n.samples.push(t),n.length=t.length),this._videoStashedLastSample=null,this._audioStashedLastSample=null,this._remuxVideo(i,!0),this._remuxAudio(n,!0)},e.prototype._remuxAudio=function(e,t){if(null!=this._audioMeta){var i,n=e,a=n.samples,o=void 0,d=-1,_=this._audioMeta.refSampleDuration,h="mp3"===this._audioMeta.codec&&this._mp3UseMpegAudio,c=this._dtsBaseInited&&void 0===this._audioNextDts,u=!1;if(a&&0!==a.length&&(1!==a.length||t)){var l=0,f=null,p=0;h?(l=0,p=n.length):(l=8,p=8+n.length);var m=null;if(a.length>1&&(p-=(m=a.pop()).length),null!=this._audioStashedLastSample){var g=this._audioStashedLastSample;this._audioStashedLastSample=null,a.unshift(g),p+=g.length}null!=m&&(this._audioStashedLastSample=m);var v=a[0].dts-this._dtsBase;if(this._audioNextDts)o=v-this._audioNextDts;else if(this._audioSegmentInfoList.isEmpty())o=0,this._fillSilentAfterSeek&&!this._videoSegmentInfoList.isEmpty()&&"mp3"!==this._audioMeta.originalCodec&&(u=!0);else{var y=this._audioSegmentInfoList.getLastSampleBefore(v);if(null!=y){var b=v-(y.originalDts+y.duration);b<=3&&(b=0),o=v-(y.dts+y.duration+b)}else o=0}if(u){var S=v-o,E=this._videoSegmentInfoList.getLastSegmentBefore(v);if(null!=E&&E.beginDts=3*_&&this._fillAudioTimestampGap&&!s.a.safari){D=!0;var O,P=Math.floor(o/_);r.a.w(this.TAG,"Large audio timestamp gap detected, may cause AV sync to drift. Silent frames will be generated to avoid unsync.\noriginalDts: "+k+" ms, curRefDts: "+I+" ms, dtsCorrection: "+Math.round(o)+" ms, generate: "+P+" frames"),A=Math.floor(I),B=Math.floor(I+_)-A,null==(O=Re.getSilentFrame(this._audioMeta.originalCodec,this._audioMeta.channelCount))&&(r.a.w(this.TAG,"Unable to generate silent frame for "+this._audioMeta.originalCodec+" with "+this._audioMeta.channelCount+" channels, repeat last frame"),O=w),C=[];for(var M=0;M=1?T[T.length-1].duration:Math.floor(_);this._audioNextDts=A+B}-1===d&&(d=A),T.push({dts:A,pts:A,cts:0,unit:g.unit,size:g.unit.byteLength,duration:B,originalDts:k,flags:{isLeading:0,dependsOn:1,isDependedOn:0,hasRedundancy:0}}),D&&T.push.apply(T,C)}}if(0===T.length)return n.samples=[],void(n.length=0);h?f=new Uint8Array(p):((f=new Uint8Array(p))[0]=p>>>24&255,f[1]=p>>>16&255,f[2]=p>>>8&255,f[3]=255&p,f.set(Ae.types.mdat,4));for(L=0;L1&&(c-=(u=r.pop()).length),null!=this._videoStashedLastSample){var l=this._videoStashedLastSample;this._videoStashedLastSample=null,r.unshift(l),c+=l.length}null!=u&&(this._videoStashedLastSample=u);var f=r[0].dts-this._dtsBase;if(this._videoNextDts)s=f-this._videoNextDts;else if(this._videoSegmentInfoList.isEmpty())s=0;else{var p=this._videoSegmentInfoList.getLastSampleBefore(f);if(null!=p){var m=f-(p.originalDts+p.duration);m<=3&&(m=0),s=f-(p.dts+p.duration+m)}else s=0}for(var g=new Te.b,v=[],y=0;y=1?v[v.length-1].duration:Math.floor(this._videoMeta.refSampleDuration);if(S){var L=new Te.d(E,R,T,l.dts,!0);L.fileposition=l.fileposition,g.appendSyncPoint(L)}v.push({dts:E,pts:R,cts:A,units:l.units,size:l.length,isKeyframe:S,duration:T,originalDts:b,flags:{isLeading:0,dependsOn:S?2:1,isDependedOn:S?1:0,hasRedundancy:0,isNonSync:S?0:1}})}(h=new Uint8Array(c))[0]=c>>>24&255,h[1]=c>>>16&255,h[2]=c>>>8&255,h[3]=255&c,h.set(Ae.types.mdat,4);for(y=0;y0)this._demuxer.bindDataSource(this._ioctl),this._demuxer.timestampBase=this._mediaDataSource.segments[this._currentSegmentIndex].timestampBase,n=this._demuxer.parseChunks(e,t);else{var a=null;(a=A.probe(e)).match&&(this._setupFLVDemuxerRemuxer(a),n=this._demuxer.parseChunks(e,t)),a.match||a.needMoreData||(a=be.probe(e)).match&&(this._setupTSDemuxerRemuxer(a),n=this._demuxer.parseChunks(e,t)),a.match||a.needMoreData||(a=null,r.a.e(this.TAG,"Non MPEG-TS/FLV, Unsupported media type!"),Promise.resolve().then((function(){i._internalAbort()})),this._emitter.emit(ke.a.DEMUX_ERROR,m.a.FORMAT_UNSUPPORTED,"Non MPEG-TS/FLV, Unsupported media type!"))}return n},e.prototype._setupFLVDemuxerRemuxer=function(e){this._demuxer=new A(e,this._config),this._remuxer||(this._remuxer=new Le(this._config));var t=this._mediaDataSource;null==t.duration||isNaN(t.duration)||(this._demuxer.overridedDuration=t.duration),"boolean"==typeof t.hasAudio&&(this._demuxer.overridedHasAudio=t.hasAudio),"boolean"==typeof t.hasVideo&&(this._demuxer.overridedHasVideo=t.hasVideo),this._demuxer.timestampBase=t.segments[this._currentSegmentIndex].timestampBase,this._demuxer.onError=this._onDemuxException.bind(this),this._demuxer.onMediaInfo=this._onMediaInfo.bind(this),this._demuxer.onMetaDataArrived=this._onMetaDataArrived.bind(this),this._demuxer.onScriptDataArrived=this._onScriptDataArrived.bind(this),this._remuxer.bindDataSource(this._demuxer.bindDataSource(this._ioctl)),this._remuxer.onInitSegment=this._onRemuxerInitSegmentArrival.bind(this),this._remuxer.onMediaSegment=this._onRemuxerMediaSegmentArrival.bind(this)},e.prototype._setupTSDemuxerRemuxer=function(e){var t=this._demuxer=new be(e,this._config);this._remuxer||(this._remuxer=new Le(this._config)),t.onError=this._onDemuxException.bind(this),t.onMediaInfo=this._onMediaInfo.bind(this),t.onMetaDataArrived=this._onMetaDataArrived.bind(this),t.onTimedID3Metadata=this._onTimedID3Metadata.bind(this),t.onSMPTE2038Metadata=this._onSMPTE2038Metadata.bind(this),t.onSCTE35Metadata=this._onSCTE35Metadata.bind(this),t.onPESPrivateDataDescriptor=this._onPESPrivateDataDescriptor.bind(this),t.onPESPrivateData=this._onPESPrivateData.bind(this),this._remuxer.bindDataSource(this._demuxer),this._demuxer.bindDataSource(this._ioctl),this._remuxer.onInitSegment=this._onRemuxerInitSegmentArrival.bind(this),this._remuxer.onMediaSegment=this._onRemuxerMediaSegmentArrival.bind(this)},e.prototype._onMediaInfo=function(e){var t=this;null==this._mediaInfo&&(this._mediaInfo=Object.assign({},e),this._mediaInfo.keyframesIndex=null,this._mediaInfo.segments=[],this._mediaInfo.segmentCount=this._mediaDataSource.segments.length,Object.setPrototypeOf(this._mediaInfo,o.a.prototype));var i=Object.assign({},e);Object.setPrototypeOf(i,o.a.prototype),this._mediaInfo.segments[this._currentSegmentIndex]=i,this._reportSegmentMediaInfo(this._currentSegmentIndex),null!=this._pendingSeekTime&&Promise.resolve().then((function(){var e=t._pendingSeekTime;t._pendingSeekTime=null,t.seek(e)}))},e.prototype._onMetaDataArrived=function(e){this._emitter.emit(ke.a.METADATA_ARRIVED,e)},e.prototype._onScriptDataArrived=function(e){this._emitter.emit(ke.a.SCRIPTDATA_ARRIVED,e)},e.prototype._onTimedID3Metadata=function(e){var t=this._remuxer.getTimestampBase();null!=t&&(null!=e.pts&&(e.pts-=t),null!=e.dts&&(e.dts-=t),this._emitter.emit(ke.a.TIMED_ID3_METADATA_ARRIVED,e))},e.prototype._onSMPTE2038Metadata=function(e){var t=this._remuxer.getTimestampBase();null!=t&&(null!=e.pts&&(e.pts-=t),null!=e.dts&&(e.dts-=t),null!=e.nearest_pts&&(e.nearest_pts-=t),this._emitter.emit(ke.a.SMPTE2038_METADATA_ARRIVED,e))},e.prototype._onSCTE35Metadata=function(e){var t=this._remuxer.getTimestampBase();null!=t&&(null!=e.pts&&(e.pts-=t),null!=e.nearest_pts&&(e.nearest_pts-=t),this._emitter.emit(ke.a.SCTE35_METADATA_ARRIVED,e))},e.prototype._onPESPrivateDataDescriptor=function(e){this._emitter.emit(ke.a.PES_PRIVATE_DATA_DESCRIPTOR,e)},e.prototype._onPESPrivateData=function(e){var t=this._remuxer.getTimestampBase();null!=t&&(null!=e.pts&&(e.pts-=t),null!=e.nearest_pts&&(e.nearest_pts-=t),null!=e.dts&&(e.dts-=t),this._emitter.emit(ke.a.PES_PRIVATE_DATA_ARRIVED,e))},e.prototype._onIOSeeked=function(){this._remuxer.insertDiscontinuity()},e.prototype._onIOComplete=function(e){var t=e+1;t0&&i[0].originalDts===n&&(n=i[0].pts),this._emitter.emit(ke.a.RECOMMEND_SEEKPOINT,n)}},e.prototype._enableStatisticsReporter=function(){null==this._statisticsReporter&&(this._statisticsReporter=self.setInterval(this._reportStatisticsInfo.bind(this),this._config.statisticsInfoReportInterval))},e.prototype._disableStatisticsReporter=function(){this._statisticsReporter&&(self.clearInterval(this._statisticsReporter),this._statisticsReporter=null)},e.prototype._reportSegmentMediaInfo=function(e){var t=this._mediaInfo.segments[e],i=Object.assign({},t);i.duration=this._mediaInfo.duration,i.segmentCount=this._mediaInfo.segmentCount,delete i.segments,delete i.keyframesIndex,this._emitter.emit(ke.a.MEDIA_INFO,i)},e.prototype._reportStatisticsInfo=function(){var e={};e.url=this._ioctl.currentURL,e.hasRedirect=this._ioctl.hasRedirect,e.hasRedirect&&(e.redirectedURL=this._ioctl.currentRedirectedURL),e.speed=this._ioctl.currentSpeed,e.loaderType=this._ioctl.loaderType,e.currentSegmentIndex=this._currentSegmentIndex,e.totalSegmentCount=this._mediaDataSource.segments.length,this._emitter.emit(ke.a.STATISTICS_INFO,e)},e}();t.a=De},function(e,t,i){"use strict";var n,a=i(0),r=function(){function e(){this._firstCheckpoint=0,this._lastCheckpoint=0,this._intervalBytes=0,this._totalBytes=0,this._lastSecondBytes=0,self.performance&&self.performance.now?this._now=self.performance.now.bind(self.performance):this._now=Date.now}return e.prototype.reset=function(){this._firstCheckpoint=this._lastCheckpoint=0,this._totalBytes=this._intervalBytes=0,this._lastSecondBytes=0},e.prototype.addBytes=function(e){0===this._firstCheckpoint?(this._firstCheckpoint=this._now(),this._lastCheckpoint=this._firstCheckpoint,this._intervalBytes+=e,this._totalBytes+=e):this._now()-this._lastCheckpoint<1e3?(this._intervalBytes+=e,this._totalBytes+=e):(this._lastSecondBytes=this._intervalBytes,this._intervalBytes=e,this._totalBytes+=e,this._lastCheckpoint=this._now())},Object.defineProperty(e.prototype,"currentKBps",{get:function(){this.addBytes(0);var e=(this._now()-this._lastCheckpoint)/1e3;return 0==e&&(e=1),this._intervalBytes/e/1024},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"lastSecondKBps",{get:function(){return this.addBytes(0),0!==this._lastSecondBytes?this._lastSecondBytes/1024:this._now()-this._lastCheckpoint>=500?this.currentKBps:0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"averageKBps",{get:function(){var e=(this._now()-this._firstCheckpoint)/1e3;return this._totalBytes/e/1024},enumerable:!1,configurable:!0}),e}(),s=i(2),o=i(4),d=i(3),_=(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(e,t)},function(e,t){function i(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)}),h=function(e){function t(t,i){var n=e.call(this,"fetch-stream-loader")||this;return n.TAG="FetchStreamLoader",n._seekHandler=t,n._config=i,n._needStash=!0,n._requestAbort=!1,n._abortController=null,n._contentLength=null,n._receivedLength=0,n}return _(t,e),t.isSupported=function(){try{var e=o.a.msedge&&o.a.version.minor>=15048,t=!o.a.msedge||e;return self.fetch&&self.ReadableStream&&t}catch(e){return!1}},t.prototype.destroy=function(){this.isWorking()&&this.abort(),e.prototype.destroy.call(this)},t.prototype.open=function(e,t){var i=this;this._dataSource=e,this._range=t;var n=e.url;this._config.reuseRedirectedURL&&null!=e.redirectedURL&&(n=e.redirectedURL);var a=this._seekHandler.getConfig(n,t),r=new self.Headers;if("object"==typeof a.headers){var o=a.headers;for(var _ in o)o.hasOwnProperty(_)&&r.append(_,o[_])}var h={method:"GET",headers:r,mode:"cors",cache:"default",referrerPolicy:"no-referrer-when-downgrade"};if("object"==typeof this._config.headers)for(var _ in this._config.headers)r.append(_,this._config.headers[_]);!1===e.cors&&(h.mode="same-origin"),e.withCredentials&&(h.credentials="include"),e.referrerPolicy&&(h.referrerPolicy=e.referrerPolicy),self.AbortController&&(this._abortController=new self.AbortController,h.signal=this._abortController.signal),this._status=s.c.kConnecting,self.fetch(a.url,h).then((function(e){if(i._requestAbort)return i._status=s.c.kIdle,void e.body.cancel();if(e.ok&&e.status>=200&&e.status<=299){if(e.url!==a.url&&i._onURLRedirect){var t=i._seekHandler.removeURLParameters(e.url);i._onURLRedirect(t)}var n=e.headers.get("Content-Length");return null!=n&&(i._contentLength=parseInt(n),0!==i._contentLength&&i._onContentLengthKnown&&i._onContentLengthKnown(i._contentLength)),i._pump.call(i,e.body.getReader())}if(i._status=s.c.kError,!i._onError)throw new d.d("FetchStreamLoader: Http code invalid, "+e.status+" "+e.statusText);i._onError(s.b.HTTP_STATUS_CODE_INVALID,{code:e.status,msg:e.statusText})})).catch((function(e){if(!i._abortController||!i._abortController.signal.aborted){if(i._status=s.c.kError,!i._onError)throw e;i._onError(s.b.EXCEPTION,{code:-1,msg:e.message})}}))},t.prototype.abort=function(){if(this._requestAbort=!0,(this._status!==s.c.kBuffering||!o.a.chrome)&&this._abortController)try{this._abortController.abort()}catch(e){}},t.prototype._pump=function(e){var t=this;return e.read().then((function(i){if(i.done)if(null!==t._contentLength&&t._receivedLength299)){if(this._status=s.c.kError,!this._onError)throw new d.d("MozChunkedLoader: Http code invalid, "+t.status+" "+t.statusText);this._onError(s.b.HTTP_STATUS_CODE_INVALID,{code:t.status,msg:t.statusText})}else this._status=s.c.kBuffering}},t.prototype._onProgress=function(e){if(this._status!==s.c.kError){null===this._contentLength&&null!==e.total&&0!==e.total&&(this._contentLength=e.total,this._onContentLengthKnown&&this._onContentLengthKnown(this._contentLength));var t=e.target.response,i=this._range.from+this._receivedLength;this._receivedLength+=t.byteLength,this._onDataArrival&&this._onDataArrival(t,i,this._receivedLength)}},t.prototype._onLoadEnd=function(e){!0!==this._requestAbort?this._status!==s.c.kError&&(this._status=s.c.kComplete,this._onComplete&&this._onComplete(this._range.from,this._range.from+this._receivedLength-1)):this._requestAbort=!1},t.prototype._onXhrError=function(e){this._status=s.c.kError;var t=0,i=null;if(this._contentLength&&e.loaded=this._contentLength&&(i=this._range.from+this._contentLength-1),this._currentRequestRange={from:t,to:i},this._internalOpen(this._dataSource,this._currentRequestRange)},t.prototype._internalOpen=function(e,t){this._lastTimeLoaded=0;var i=e.url;this._config.reuseRedirectedURL&&(null!=this._currentRedirectedURL?i=this._currentRedirectedURL:null!=e.redirectedURL&&(i=e.redirectedURL));var n=this._seekHandler.getConfig(i,t);this._currentRequestURL=n.url;var a=this._xhr=new XMLHttpRequest;if(a.open("GET",n.url,!0),a.responseType="arraybuffer",a.onreadystatechange=this._onReadyStateChange.bind(this),a.onprogress=this._onProgress.bind(this),a.onload=this._onLoad.bind(this),a.onerror=this._onXhrError.bind(this),e.withCredentials&&(a.withCredentials=!0),"object"==typeof n.headers){var r=n.headers;for(var s in r)r.hasOwnProperty(s)&&a.setRequestHeader(s,r[s])}if("object"==typeof this._config.headers){r=this._config.headers;for(var s in r)r.hasOwnProperty(s)&&a.setRequestHeader(s,r[s])}a.send()},t.prototype.abort=function(){this._requestAbort=!0,this._internalAbort(),this._status=s.c.kComplete},t.prototype._internalAbort=function(){this._xhr&&(this._xhr.onreadystatechange=null,this._xhr.onprogress=null,this._xhr.onload=null,this._xhr.onerror=null,this._xhr.abort(),this._xhr=null)},t.prototype._onReadyStateChange=function(e){var t=e.target;if(2===t.readyState){if(null!=t.responseURL){var i=this._seekHandler.removeURLParameters(t.responseURL);t.responseURL!==this._currentRequestURL&&i!==this._currentRedirectedURL&&(this._currentRedirectedURL=i,this._onURLRedirect&&this._onURLRedirect(i))}if(t.status>=200&&t.status<=299){if(this._waitForTotalLength)return;this._status=s.c.kBuffering}else{if(this._status=s.c.kError,!this._onError)throw new d.d("RangeLoader: Http code invalid, "+t.status+" "+t.statusText);this._onError(s.b.HTTP_STATUS_CODE_INVALID,{code:t.status,msg:t.statusText})}}},t.prototype._onProgress=function(e){if(this._status!==s.c.kError){if(null===this._contentLength){var t=!1;if(this._waitForTotalLength){this._waitForTotalLength=!1,this._totalLengthReceived=!0,t=!0;var i=e.total;this._internalAbort(),null!=i&0!==i&&(this._totalLength=i)}if(-1===this._range.to?this._contentLength=this._totalLength-this._range.from:this._contentLength=this._range.to-this._range.from+1,t)return void this._openSubRange();this._onContentLengthKnown&&this._onContentLengthKnown(this._contentLength)}var n=e.loaded-this._lastTimeLoaded;this._lastTimeLoaded=e.loaded,this._speedSampler.addBytes(n)}},t.prototype._normalizeSpeed=function(e){var t=this._chunkSizeKBList,i=t.length-1,n=0,a=0,r=i;if(e=t[n]&&e=3&&(t=this._speedSampler.currentKBps)),0!==t){var i=this._normalizeSpeed(t);this._currentSpeedNormalized!==i&&(this._currentSpeedNormalized=i,this._currentChunkSizeKB=i)}var n=e.target.response,a=this._range.from+this._receivedLength;this._receivedLength+=n.byteLength;var r=!1;null!=this._contentLength&&this._receivedLength0&&this._receivedLength0)for(var r=i.split("&"),s=0;s0;o[0]!==this._startName&&o[0]!==this._endName&&(d&&(a+="&"),a+=r[s])}return 0===a.length?t:t+"?"+a},e}(),y=function(){function e(e,t,i){this.TAG="IOController",this._config=t,this._extraData=i,this._stashInitialSize=65536,null!=t.stashInitialSize&&t.stashInitialSize>0&&(this._stashInitialSize=t.stashInitialSize),this._stashUsed=0,this._stashSize=this._stashInitialSize,this._bufferSize=3145728,this._stashBuffer=new ArrayBuffer(this._bufferSize),this._stashByteStart=0,this._enableStash=!0,!1===t.enableStashBuffer&&(this._enableStash=!1),this._loader=null,this._loaderClass=null,this._seekHandler=null,this._dataSource=e,this._isWebSocketURL=/wss?:\/\/(.+?)/.test(e.url),this._refTotalLength=e.filesize?e.filesize:null,this._totalLength=this._refTotalLength,this._fullRequestFlag=!1,this._currentRange=null,this._redirectedURL=null,this._speedNormalized=0,this._speedSampler=new r,this._speedNormalizeList=[32,64,96,128,192,256,384,512,768,1024,1536,2048,3072,4096],this._isEarlyEofReconnecting=!1,this._paused=!1,this._resumeFrom=0,this._onDataArrival=null,this._onSeeked=null,this._onError=null,this._onComplete=null,this._onRedirect=null,this._onRecoveredEarlyEof=null,this._selectSeekHandler(),this._selectLoader(),this._createLoader()}return e.prototype.destroy=function(){this._loader.isWorking()&&this._loader.abort(),this._loader.destroy(),this._loader=null,this._loaderClass=null,this._dataSource=null,this._stashBuffer=null,this._stashUsed=this._stashSize=this._bufferSize=this._stashByteStart=0,this._currentRange=null,this._speedSampler=null,this._isEarlyEofReconnecting=!1,this._onDataArrival=null,this._onSeeked=null,this._onError=null,this._onComplete=null,this._onRedirect=null,this._onRecoveredEarlyEof=null,this._extraData=null},e.prototype.isWorking=function(){return this._loader&&this._loader.isWorking()&&!this._paused},e.prototype.isPaused=function(){return this._paused},Object.defineProperty(e.prototype,"status",{get:function(){return this._loader.status},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"extraData",{get:function(){return this._extraData},set:function(e){this._extraData=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onDataArrival",{get:function(){return this._onDataArrival},set:function(e){this._onDataArrival=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onSeeked",{get:function(){return this._onSeeked},set:function(e){this._onSeeked=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onError",{get:function(){return this._onError},set:function(e){this._onError=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onComplete",{get:function(){return this._onComplete},set:function(e){this._onComplete=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onRedirect",{get:function(){return this._onRedirect},set:function(e){this._onRedirect=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onRecoveredEarlyEof",{get:function(){return this._onRecoveredEarlyEof},set:function(e){this._onRecoveredEarlyEof=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"currentURL",{get:function(){return this._dataSource.url},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"hasRedirect",{get:function(){return null!=this._redirectedURL||null!=this._dataSource.redirectedURL},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"currentRedirectedURL",{get:function(){return this._redirectedURL||this._dataSource.redirectedURL},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"currentSpeed",{get:function(){return this._loaderClass===f?this._loader.currentSpeed:this._speedSampler.lastSecondKBps},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"loaderType",{get:function(){return this._loader.type},enumerable:!1,configurable:!0}),e.prototype._selectSeekHandler=function(){var e=this._config;if("range"===e.seekType)this._seekHandler=new g(this._config.rangeLoadZeroStart);else if("param"===e.seekType){var t=e.seekParamStart||"bstart",i=e.seekParamEnd||"bend";this._seekHandler=new v(t,i)}else{if("custom"!==e.seekType)throw new d.b("Invalid seekType in config: "+e.seekType);if("function"!=typeof e.customSeekHandler)throw new d.b("Custom seekType specified in config but invalid customSeekHandler!");this._seekHandler=new e.customSeekHandler}},e.prototype._selectLoader=function(){if(null!=this._config.customLoader)this._loaderClass=this._config.customLoader;else if(this._isWebSocketURL)this._loaderClass=m;else if(h.isSupported())this._loaderClass=h;else if(u.isSupported())this._loaderClass=u;else{if(!f.isSupported())throw new d.d("Your browser doesn't support xhr with arraybuffer responseType!");this._loaderClass=f}},e.prototype._createLoader=function(){this._loader=new this._loaderClass(this._seekHandler,this._config),!1===this._loader.needStashBuffer&&(this._enableStash=!1),this._loader.onContentLengthKnown=this._onContentLengthKnown.bind(this),this._loader.onURLRedirect=this._onURLRedirect.bind(this),this._loader.onDataArrival=this._onLoaderChunkArrival.bind(this),this._loader.onComplete=this._onLoaderComplete.bind(this),this._loader.onError=this._onLoaderError.bind(this)},e.prototype.open=function(e){this._currentRange={from:0,to:-1},e&&(this._currentRange.from=e),this._speedSampler.reset(),e||(this._fullRequestFlag=!0),this._loader.open(this._dataSource,Object.assign({},this._currentRange))},e.prototype.abort=function(){this._loader.abort(),this._paused&&(this._paused=!1,this._resumeFrom=0)},e.prototype.pause=function(){this.isWorking()&&(this._loader.abort(),0!==this._stashUsed?(this._resumeFrom=this._stashByteStart,this._currentRange.to=this._stashByteStart-1):this._resumeFrom=this._currentRange.to+1,this._stashUsed=0,this._stashByteStart=0,this._paused=!0)},e.prototype.resume=function(){if(this._paused){this._paused=!1;var e=this._resumeFrom;this._resumeFrom=0,this._internalSeek(e,!0)}},e.prototype.seek=function(e){this._paused=!1,this._stashUsed=0,this._stashByteStart=0,this._internalSeek(e,!0)},e.prototype._internalSeek=function(e,t){this._loader.isWorking()&&this._loader.abort(),this._flushStashBuffer(t),this._loader.destroy(),this._loader=null;var i={from:e,to:-1};this._currentRange={from:i.from,to:-1},this._speedSampler.reset(),this._stashSize=this._stashInitialSize,this._createLoader(),this._loader.open(this._dataSource,i),this._onSeeked&&this._onSeeked()},e.prototype.updateUrl=function(e){if(!e||"string"!=typeof e||0===e.length)throw new d.b("Url must be a non-empty string!");this._dataSource.url=e},e.prototype._expandBuffer=function(e){for(var t=this._stashSize;t+10485760){var n=new Uint8Array(this._stashBuffer,0,this._stashUsed);new Uint8Array(i,0,t).set(n,0)}this._stashBuffer=i,this._bufferSize=t}},e.prototype._normalizeSpeed=function(e){var t=this._speedNormalizeList,i=t.length-1,n=0,a=0,r=i;if(e=t[n]&&e=512&&e<=1024?Math.floor(1.5*e):2*e)>8192&&(t=8192);var i=1024*t+1048576;this._bufferSize0){var r=this._stashBuffer.slice(0,this._stashUsed);if((_=this._dispatchChunks(r,this._stashByteStart))0){h=new Uint8Array(r,_);o.set(h,0),this._stashUsed=h.byteLength,this._stashByteStart+=_}}else this._stashUsed=0,this._stashByteStart+=_;this._stashUsed+e.byteLength>this._bufferSize&&(this._expandBuffer(this._stashUsed+e.byteLength),o=new Uint8Array(this._stashBuffer,0,this._bufferSize)),o.set(new Uint8Array(e),this._stashUsed),this._stashUsed+=e.byteLength}else{if((_=this._dispatchChunks(e,t))this._bufferSize&&(this._expandBuffer(s),o=new Uint8Array(this._stashBuffer,0,this._bufferSize)),o.set(new Uint8Array(e,_),0),this._stashUsed+=s,this._stashByteStart=t+_}}else if(0===this._stashUsed){var s;if((_=this._dispatchChunks(e,t))this._bufferSize&&this._expandBuffer(s),(o=new Uint8Array(this._stashBuffer,0,this._bufferSize)).set(new Uint8Array(e,_),0),this._stashUsed+=s,this._stashByteStart=t+_}else{var o,_;if(this._stashUsed+e.byteLength>this._bufferSize&&this._expandBuffer(this._stashUsed+e.byteLength),(o=new Uint8Array(this._stashBuffer,0,this._bufferSize)).set(new Uint8Array(e),this._stashUsed),this._stashUsed+=e.byteLength,(_=this._dispatchChunks(this._stashBuffer.slice(0,this._stashUsed),this._stashByteStart))0){var h=new Uint8Array(this._stashBuffer,_);o.set(h,0)}this._stashUsed-=_,this._stashByteStart+=_}}},e.prototype._flushStashBuffer=function(e){if(this._stashUsed>0){var t=this._stashBuffer.slice(0,this._stashUsed),i=this._dispatchChunks(t,this._stashByteStart),n=t.byteLength-i;if(i0){var r=new Uint8Array(this._stashBuffer,0,this._bufferSize),s=new Uint8Array(t,i);r.set(s,0),this._stashUsed=s.byteLength,this._stashByteStart+=i}return 0}a.a.w(this.TAG,n+" bytes unconsumed data remain when flush buffer, dropped")}return this._stashUsed=0,this._stashByteStart=0,n}return 0},e.prototype._onLoaderComplete=function(e,t){this._flushStashBuffer(!0),this._onComplete&&this._onComplete(this._extraData)},e.prototype._onLoaderError=function(e,t){switch(a.a.e(this.TAG,"Loader error, code = "+t.code+", msg = "+t.msg),this._flushStashBuffer(!1),this._isEarlyEofReconnecting&&(this._isEarlyEofReconnecting=!1,e=s.b.UNRECOVERABLE_EARLY_EOF),e){case s.b.EARLY_EOF:if(!this._config.isLive&&this._totalLength){var i=this._currentRange.to+1;return void(i0}),!1)}e.exports=function(e,t){t=t||{};var a={main:i.m},o=t.all?{main:Object.keys(a.main)}:function(e,t){for(var i={main:[t]},n={main:[]},a={main:{}};s(i);)for(var o=Object.keys(i),d=0;d1)for(var i=1;i0&&(n+=";codecs="+i.codec);var a=!1;if(c.a.v(this.TAG,"Received Initialization Segment, mimeType: "+n),this._lastInitSegments[i.type]=i,n!==this._mimeTypes[i.type]){if(this._mimeTypes[i.type])c.a.v(this.TAG,"Notice: "+i.type+" mimeType changed, origin: "+this._mimeTypes[i.type]+", target: "+n);else{a=!0;try{var r=this._sourceBuffers[i.type]=this._mediaSource.addSourceBuffer(n);r.addEventListener("error",this.e.onSourceBufferError),r.addEventListener("updateend",this.e.onSourceBufferUpdateEnd)}catch(e){return c.a.e(this.TAG,e.message),void this._emitter.emit(S.ERROR,{code:e.code,msg:e.message})}}this._mimeTypes[i.type]=n}t||this._pendingSegments[i.type].push(i),a||this._sourceBuffers[i.type]&&!this._sourceBuffers[i.type].updating&&this._doAppendSegments(),u.a.safari&&"audio/mpeg"===i.container&&i.mediaDuration>0&&(this._requireSetMediaDuration=!0,this._pendingMediaDuration=i.mediaDuration/1e3,this._updateMediaSourceDuration())},e.prototype.appendMediaSegment=function(e){var t=e;this._pendingSegments[t.type].push(t),this._config.autoCleanupSourceBuffer&&this._needCleanupSourceBuffer()&&this._doCleanupSourceBuffer();var i=this._sourceBuffers[t.type];!i||i.updating||this._hasPendingRemoveRanges()||this._doAppendSegments()},e.prototype.seek=function(e){for(var t in this._sourceBuffers)if(this._sourceBuffers[t]){var i=this._sourceBuffers[t];if("open"===this._mediaSource.readyState)try{i.abort()}catch(e){c.a.e(this.TAG,e.message)}this._idrList.clear();var n=this._pendingSegments[t];if(n.splice(0,n.length),"closed"!==this._mediaSource.readyState){for(var a=0;a=1&&e-n.start(0)>=this._config.autoCleanupMaxBackwardDuration)return!0}}return!1},e.prototype._doCleanupSourceBuffer=function(){var e=this._mediaElement.currentTime;for(var t in this._sourceBuffers){var i=this._sourceBuffers[t];if(i){for(var n=i.buffered,a=!1,r=0;r=this._config.autoCleanupMaxBackwardDuration){a=!0;var d=e-this._config.autoCleanupMinBackwardDuration;this._pendingRemoveRanges[t].push({start:s,end:d})}}else o0&&(isNaN(t)||i>t)&&(c.a.v(this.TAG,"Update MediaSource duration from "+t+" to "+i),this._mediaSource.duration=i),this._requireSetMediaDuration=!1,this._pendingMediaDuration=0}},e.prototype._doRemoveRanges=function(){for(var e in this._pendingRemoveRanges)if(this._sourceBuffers[e]&&!this._sourceBuffers[e].updating)for(var t=this._sourceBuffers[e],i=this._pendingRemoveRanges[e];i.length&&!t.updating;){var n=i.shift();t.remove(n.start,n.end)}},e.prototype._doAppendSegments=function(){var e=this._pendingSegments;for(var t in e)if(this._sourceBuffers[t]&&!this._sourceBuffers[t].updating&&e[t].length>0){var i=e[t].shift();if(i.timestampOffset){var n=this._sourceBuffers[t].timestampOffset,a=i.timestampOffset/1e3;Math.abs(n-a)>.1&&(c.a.v(this.TAG,"Update MPEG audio timestampOffset from "+n+" to "+a),this._sourceBuffers[t].timestampOffset=a),delete i.timestampOffset}if(!i.data||0===i.data.byteLength)continue;try{this._sourceBuffers[t].appendBuffer(i.data),this._isBufferFull=!1,"video"===t&&i.hasOwnProperty("info")&&this._idrList.appendArray(i.info.syncPoints)}catch(e){this._pendingSegments[t].unshift(i),22===e.code?(this._isBufferFull||this._emitter.emit(S.BUFFER_FULL),this._isBufferFull=!0):(c.a.e(this.TAG,e.message),this._emitter.emit(S.ERROR,{code:e.code,msg:e.message}))}}},e.prototype._onSourceOpen=function(){if(c.a.v(this.TAG,"MediaSource onSourceOpen"),this._mediaSource.removeEventListener("sourceopen",this.e.onSourceOpen),this._pendingSourceBufferInit.length>0)for(var e=this._pendingSourceBufferInit;e.length;){var t=e.shift();this.appendInitSegment(t,!0)}this._hasPendingSegments()&&this._doAppendSegments(),this._emitter.emit(S.SOURCE_OPEN)},e.prototype._onSourceEnded=function(){c.a.v(this.TAG,"MediaSource onSourceEnded")},e.prototype._onSourceClose=function(){c.a.v(this.TAG,"MediaSource onSourceClose"),this._mediaSource&&null!=this.e&&(this._mediaSource.removeEventListener("sourceopen",this.e.onSourceOpen),this._mediaSource.removeEventListener("sourceended",this.e.onSourceEnded),this._mediaSource.removeEventListener("sourceclose",this.e.onSourceClose))},e.prototype._hasPendingSegments=function(){var e=this._pendingSegments;return e.video.length>0||e.audio.length>0},e.prototype._hasPendingRemoveRanges=function(){var e=this._pendingRemoveRanges;return e.video.length>0||e.audio.length>0},e.prototype._onSourceBufferUpdateEnd=function(){this._requireSetMediaDuration?this._updateMediaSourceDuration():this._hasPendingRemoveRanges()?this._doRemoveRanges():this._hasPendingSegments()?this._doAppendSegments():this._hasPendingEos&&this.endOfStream(),this._emitter.emit(S.UPDATE_END)},e.prototype._onSourceBufferError=function(e){c.a.e(this.TAG,"SourceBuffer Error: "+e)},e}(),T=i(5),L={NETWORK_ERROR:"NetworkError",MEDIA_ERROR:"MediaError",OTHER_ERROR:"OtherError"},w={NETWORK_EXCEPTION:d.b.EXCEPTION,NETWORK_STATUS_CODE_INVALID:d.b.HTTP_STATUS_CODE_INVALID,NETWORK_TIMEOUT:d.b.CONNECTING_TIMEOUT,NETWORK_UNRECOVERABLE_EARLY_EOF:d.b.UNRECOVERABLE_EARLY_EOF,MEDIA_MSE_ERROR:"MediaMSEError",MEDIA_FORMAT_ERROR:T.a.FORMAT_ERROR,MEDIA_FORMAT_UNSUPPORTED:T.a.FORMAT_UNSUPPORTED,MEDIA_CODEC_UNSUPPORTED:T.a.CODEC_UNSUPPORTED},k=function(){function e(e,t){this.TAG="MSEPlayer",this._type="MSEPlayer",this._emitter=new h.a,this._config=s(),"object"==typeof t&&Object.assign(this._config,t);var i=e.type.toLowerCase();if("mse"!==i&&"mpegts"!==i&&"m2ts"!==i&&"flv"!==i)throw new A.b("MSEPlayer requires an mpegts/m2ts/flv MediaDataSource input!");!0===e.isLive&&(this._config.isLive=!0),this.e={onvLoadedMetadata:this._onvLoadedMetadata.bind(this),onvSeeking:this._onvSeeking.bind(this),onvCanPlay:this._onvCanPlay.bind(this),onvStalled:this._onvStalled.bind(this),onvProgress:this._onvProgress.bind(this)},self.performance&&self.performance.now?this._now=self.performance.now.bind(self.performance):this._now=Date.now,this._pendingSeekTime=null,this._requestSetTime=!1,this._seekpointRecord=null,this._progressChecker=null,this._mediaDataSource=e,this._mediaElement=null,this._msectl=null,this._transmuxer=null,this._mseSourceOpened=!1,this._hasPendingLoad=!1,this._receivedCanPlay=!1,this._mediaInfo=null,this._statisticsInfo=null;var n=u.a.chrome&&(u.a.version.major<50||50===u.a.version.major&&u.a.version.build<2661);this._alwaysSeekKeyframe=!!(n||u.a.msedge||u.a.msie),this._alwaysSeekKeyframe&&(this._config.accurateSeek=!1)}return e.prototype.destroy=function(){null!=this._progressChecker&&(window.clearInterval(this._progressChecker),this._progressChecker=null),this._transmuxer&&this.unload(),this._mediaElement&&this.detachMediaElement(),this.e=null,this._mediaDataSource=null,this._emitter.removeAllListeners(),this._emitter=null},e.prototype.on=function(e,t){var i=this;e===l.MEDIA_INFO?null!=this._mediaInfo&&Promise.resolve().then((function(){i._emitter.emit(l.MEDIA_INFO,i.mediaInfo)})):e===l.STATISTICS_INFO&&null!=this._statisticsInfo&&Promise.resolve().then((function(){i._emitter.emit(l.STATISTICS_INFO,i.statisticsInfo)})),this._emitter.addListener(e,t)},e.prototype.off=function(e,t){this._emitter.removeListener(e,t)},e.prototype.attachMediaElement=function(e){var t=this;if(this._mediaElement=e,e.addEventListener("loadedmetadata",this.e.onvLoadedMetadata),e.addEventListener("seeking",this.e.onvSeeking),e.addEventListener("canplay",this.e.onvCanPlay),e.addEventListener("stalled",this.e.onvStalled),e.addEventListener("progress",this.e.onvProgress),this._msectl=new R(this._config),this._msectl.on(S.UPDATE_END,this._onmseUpdateEnd.bind(this)),this._msectl.on(S.BUFFER_FULL,this._onmseBufferFull.bind(this)),this._msectl.on(S.SOURCE_OPEN,(function(){t._mseSourceOpened=!0,t._hasPendingLoad&&(t._hasPendingLoad=!1,t.load())})),this._msectl.on(S.ERROR,(function(e){t._emitter.emit(l.ERROR,L.MEDIA_ERROR,w.MEDIA_MSE_ERROR,e)})),this._msectl.attachMediaElement(e),null!=this._pendingSeekTime)try{e.currentTime=this._pendingSeekTime,this._pendingSeekTime=null}catch(e){}},e.prototype.detachMediaElement=function(){this._mediaElement&&(this._msectl.detachMediaElement(),this._mediaElement.removeEventListener("loadedmetadata",this.e.onvLoadedMetadata),this._mediaElement.removeEventListener("seeking",this.e.onvSeeking),this._mediaElement.removeEventListener("canplay",this.e.onvCanPlay),this._mediaElement.removeEventListener("stalled",this.e.onvStalled),this._mediaElement.removeEventListener("progress",this.e.onvProgress),this._mediaElement=null),this._msectl&&(this._msectl.destroy(),this._msectl=null)},e.prototype.load=function(){var e=this;if(!this._mediaElement)throw new A.a("HTMLMediaElement must be attached before load()!");if(this._transmuxer)throw new A.a("MSEPlayer.load() has been called, please call unload() first!");this._hasPendingLoad||(this._config.deferLoadAfterSourceOpen&&!1===this._mseSourceOpened?this._hasPendingLoad=!0:(this._mediaElement.readyState>0&&(this._requestSetTime=!0,this._mediaElement.currentTime=0),this._transmuxer=new b(this._mediaDataSource,this._config),this._transmuxer.on(v.a.INIT_SEGMENT,(function(t,i){e._msectl.appendInitSegment(i)})),this._transmuxer.on(v.a.MEDIA_SEGMENT,(function(t,i){if(e._msectl.appendMediaSegment(i),e._config.lazyLoad&&!e._config.isLive){var n=e._mediaElement.currentTime;i.info.endDts>=1e3*(n+e._config.lazyLoadMaxDuration)&&null==e._progressChecker&&(c.a.v(e.TAG,"Maximum buffering duration exceeded, suspend transmuxing task"),e._suspendTransmuxer())}})),this._transmuxer.on(v.a.LOADING_COMPLETE,(function(){e._msectl.endOfStream(),e._emitter.emit(l.LOADING_COMPLETE)})),this._transmuxer.on(v.a.RECOVERED_EARLY_EOF,(function(){e._emitter.emit(l.RECOVERED_EARLY_EOF)})),this._transmuxer.on(v.a.IO_ERROR,(function(t,i){e._emitter.emit(l.ERROR,L.NETWORK_ERROR,t,i)})),this._transmuxer.on(v.a.DEMUX_ERROR,(function(t,i){e._emitter.emit(l.ERROR,L.MEDIA_ERROR,t,{code:-1,msg:i})})),this._transmuxer.on(v.a.MEDIA_INFO,(function(t){e._mediaInfo=t,e._emitter.emit(l.MEDIA_INFO,Object.assign({},t))})),this._transmuxer.on(v.a.METADATA_ARRIVED,(function(t){e._emitter.emit(l.METADATA_ARRIVED,t)})),this._transmuxer.on(v.a.SCRIPTDATA_ARRIVED,(function(t){e._emitter.emit(l.SCRIPTDATA_ARRIVED,t)})),this._transmuxer.on(v.a.TIMED_ID3_METADATA_ARRIVED,(function(t){e._emitter.emit(l.TIMED_ID3_METADATA_ARRIVED,t)})),this._transmuxer.on(v.a.SMPTE2038_METADATA_ARRIVED,(function(t){e._emitter.emit(l.SMPTE2038_METADATA_ARRIVED,t)})),this._transmuxer.on(v.a.SCTE35_METADATA_ARRIVED,(function(t){e._emitter.emit(l.SCTE35_METADATA_ARRIVED,t)})),this._transmuxer.on(v.a.PES_PRIVATE_DATA_DESCRIPTOR,(function(t){e._emitter.emit(l.PES_PRIVATE_DATA_DESCRIPTOR,t)})),this._transmuxer.on(v.a.PES_PRIVATE_DATA_ARRIVED,(function(t){e._emitter.emit(l.PES_PRIVATE_DATA_ARRIVED,t)})),this._transmuxer.on(v.a.STATISTICS_INFO,(function(t){e._statisticsInfo=e._fillStatisticsInfo(t),e._emitter.emit(l.STATISTICS_INFO,Object.assign({},e._statisticsInfo))})),this._transmuxer.on(v.a.RECOMMEND_SEEKPOINT,(function(t){e._mediaElement&&!e._config.accurateSeek&&(e._requestSetTime=!0,e._mediaElement.currentTime=t/1e3)})),this._transmuxer.open()))},e.prototype.unload=function(){this._mediaElement&&this._mediaElement.pause(),this._msectl&&this._msectl.seek(0),this._transmuxer&&(this._transmuxer.close(),this._transmuxer.destroy(),this._transmuxer=null)},e.prototype.play=function(){return this._mediaElement.play()},e.prototype.pause=function(){this._mediaElement.pause()},Object.defineProperty(e.prototype,"type",{get:function(){return this._type},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"buffered",{get:function(){return this._mediaElement.buffered},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"duration",{get:function(){return this._mediaElement.duration},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"volume",{get:function(){return this._mediaElement.volume},set:function(e){this._mediaElement.volume=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"muted",{get:function(){return this._mediaElement.muted},set:function(e){this._mediaElement.muted=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"currentTime",{get:function(){return this._mediaElement?this._mediaElement.currentTime:0},set:function(e){this._mediaElement?this._internalSeek(e):this._pendingSeekTime=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"mediaInfo",{get:function(){return Object.assign({},this._mediaInfo)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"statisticsInfo",{get:function(){return null==this._statisticsInfo&&(this._statisticsInfo={}),this._statisticsInfo=this._fillStatisticsInfo(this._statisticsInfo),Object.assign({},this._statisticsInfo)},enumerable:!1,configurable:!0}),e.prototype._fillStatisticsInfo=function(e){if(e.playerType=this._type,!(this._mediaElement instanceof HTMLVideoElement))return e;var t=!0,i=0,n=0;if(this._mediaElement.getVideoPlaybackQuality){var a=this._mediaElement.getVideoPlaybackQuality();i=a.totalVideoFrames,n=a.droppedVideoFrames}else null!=this._mediaElement.webkitDecodedFrameCount?(i=this._mediaElement.webkitDecodedFrameCount,n=this._mediaElement.webkitDroppedFrameCount):t=!1;return t&&(e.decodedFrames=i,e.droppedFrames=n),e},e.prototype._onmseUpdateEnd=function(){var e=this._mediaElement.buffered,t=this._mediaElement.currentTime;if(this._config.isLive&&this._config.liveBufferLatencyChasing&&e.length>0&&!this._mediaElement.paused){var i=e.end(e.length-1);if(i>this._config.liveBufferLatencyMaxLatency&&i-t>this._config.liveBufferLatencyMaxLatency){var n=i-this._config.liveBufferLatencyMinRemain;this.currentTime=n}}if(this._config.lazyLoad&&!this._config.isLive){for(var a=0,r=0;r=t+this._config.lazyLoadMaxDuration&&null==this._progressChecker&&(c.a.v(this.TAG,"Maximum buffering duration exceeded, suspend transmuxing task"),this._suspendTransmuxer())}},e.prototype._onmseBufferFull=function(){c.a.v(this.TAG,"MSE SourceBuffer is full, suspend transmuxing task"),null==this._progressChecker&&this._suspendTransmuxer()},e.prototype._suspendTransmuxer=function(){this._transmuxer&&(this._transmuxer.pause(),null==this._progressChecker&&(this._progressChecker=window.setInterval(this._checkProgressAndResume.bind(this),1e3)))},e.prototype._checkProgressAndResume=function(){for(var e=this._mediaElement.currentTime,t=this._mediaElement.buffered,i=!1,n=0;n=a&&e=r-this._config.lazyLoadRecoverDuration&&(i=!0);break}}i&&(window.clearInterval(this._progressChecker),this._progressChecker=null,i&&(c.a.v(this.TAG,"Continue loading from paused position"),this._transmuxer.resume()))},e.prototype._isTimepointBuffered=function(e){for(var t=this._mediaElement.buffered,i=0;i=n&&e0){var a=this._mediaElement.buffered.start(0);(a<1&&e0&&t.currentTime0){var n=i.start(0);if(n<1&&t0&&(this._mediaElement.currentTime=0),this._mediaElement.preload="auto",this._mediaElement.load(),this._statisticsReporter=window.setInterval(this._reportStatisticsInfo.bind(this),this._config.statisticsInfoReportInterval)},e.prototype.unload=function(){this._mediaElement&&(this._mediaElement.src="",this._mediaElement.removeAttribute("src")),null!=this._statisticsReporter&&(window.clearInterval(this._statisticsReporter),this._statisticsReporter=null)},e.prototype.play=function(){return this._mediaElement.play()},e.prototype.pause=function(){this._mediaElement.pause()},Object.defineProperty(e.prototype,"type",{get:function(){return this._type},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"buffered",{get:function(){return this._mediaElement.buffered},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"duration",{get:function(){return this._mediaElement.duration},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"volume",{get:function(){return this._mediaElement.volume},set:function(e){this._mediaElement.volume=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"muted",{get:function(){return this._mediaElement.muted},set:function(e){this._mediaElement.muted=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"currentTime",{get:function(){return this._mediaElement?this._mediaElement.currentTime:0},set:function(e){this._mediaElement?this._mediaElement.currentTime=e:this._pendingSeekTime=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"mediaInfo",{get:function(){var e={mimeType:(this._mediaElement instanceof HTMLAudioElement?"audio/":"video/")+this._mediaDataSource.type};return this._mediaElement&&(e.duration=Math.floor(1e3*this._mediaElement.duration),this._mediaElement instanceof HTMLVideoElement&&(e.width=this._mediaElement.videoWidth,e.height=this._mediaElement.videoHeight)),e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"statisticsInfo",{get:function(){var e={playerType:this._type,url:this._mediaDataSource.url};if(!(this._mediaElement instanceof HTMLVideoElement))return e;var t=!0,i=0,n=0;if(this._mediaElement.getVideoPlaybackQuality){var a=this._mediaElement.getVideoPlaybackQuality();i=a.totalVideoFrames,n=a.droppedVideoFrames}else null!=this._mediaElement.webkitDecodedFrameCount?(i=this._mediaElement.webkitDecodedFrameCount,n=this._mediaElement.webkitDroppedFrameCount):t=!1;return t&&(e.decodedFrames=i,e.droppedFrames=n),e},enumerable:!1,configurable:!0}),e.prototype._onvLoadedMetadata=function(e){null!=this._pendingSeekTime&&(this._mediaElement.currentTime=this._pendingSeekTime,this._pendingSeekTime=null),this._emitter.emit(l.MEDIA_INFO,this.mediaInfo)},e.prototype._reportStatisticsInfo=function(){this._emitter.emit(l.STATISTICS_INFO,this.statisticsInfo)},e}();n.a.install();var C={createPlayer:function(e,t){var i=e;if(null==i||"object"!=typeof i)throw new A.b("MediaDataSource must be an javascript object!");if(!i.hasOwnProperty("type"))throw new A.b("MediaDataSource must has type field to indicate video file type!");switch(i.type){case"mse":case"mpegts":case"m2ts":case"flv":return new k(i,t);default:return new D(i,t)}},isSupported:function(){return o.supportMSEH264Playback()},getFeatureList:function(){return o.getFeatureList()}};C.BaseLoader=d.a,C.LoaderStatus=d.c,C.LoaderErrors=d.b,C.Events=l,C.ErrorTypes=L,C.ErrorDetails=w,C.MSEPlayer=k,C.NativePlayer=D,C.LoggingControl=m.a,Object.defineProperty(C,"version",{enumerable:!0,get:function(){return"1.7.3"}});t.default=C}])})); +//# sourceMappingURL=mpegts.js.map \ No newline at end of file diff --git a/上位机实时画面/js/mqtt.min.js b/上位机实时画面/js/mqtt.min.js new file mode 100644 index 0000000..4f5b90b --- /dev/null +++ b/上位机实时画面/js/mqtt.min.js @@ -0,0 +1,12 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).mqtt=e()}}((function(){return function e(t,r,n){function i(o,a){if(!r[o]){if(!t[o]){var l="function"==typeof require&&require;if(!a&&l)return l(o,!0);if(s)return s(o,!0);var u=new Error("Cannot find module '"+o+"'");throw u.code="MODULE_NOT_FOUND",u}var c=r[o]={exports:{}};t[o][0].call(c.exports,(function(e){return i(t[o][1][e]||e)}),c,c.exports,e,t,r,n)}return r[o].exports}for(var s="function"==typeof require&&require,o=0;o{setTimeout(e,0)},w=n.setImmediate||((...e)=>{const t=e.shift();_((()=>{t(...e)}))}),v={keepalive:60,reschedulePings:!0,protocolId:"MQTT",protocolVersion:4,reconnectPeriod:1e3,connectTimeout:3e4,clean:!0,resubscribe:!0,writeCache:!0},S=["ECONNREFUSED","EADDRINUSE","ECONNRESET","ENOTFOUND","ETIMEDOUT"];class E extends y.TypedEventEmitter{static defaultId(){return`mqttjs_${Math.random().toString(16).substr(2,8)}`}constructor(e,t){super(),this.options=t||{};for(const e in v)void 0===this.options[e]?this.options[e]=v[e]:this.options[e]=t[e];this.log=this.options.log||(0,b.default)("mqttjs:client"),this.noop=this._noop.bind(this),this.log("MqttClient :: options.protocol",t.protocol),this.log("MqttClient :: options.protocolVersion",t.protocolVersion),this.log("MqttClient :: options.username",t.username),this.log("MqttClient :: options.keepalive",t.keepalive),this.log("MqttClient :: options.reconnectPeriod",t.reconnectPeriod),this.log("MqttClient :: options.rejectUnauthorized",t.rejectUnauthorized),this.log("MqttClient :: options.properties.topicAliasMaximum",t.properties?t.properties.topicAliasMaximum:void 0),this.options.clientId="string"==typeof t.clientId?t.clientId:E.defaultId(),this.log("MqttClient :: clientId",this.options.clientId),this.options.customHandleAcks=5===t.protocolVersion&&t.customHandleAcks?t.customHandleAcks:(...e)=>{e[3](null,0)},this.options.writeCache||(u.default.writeToStream.cacheNumbers=!1),this.streamBuilder=e,this.messageIdProvider=void 0===this.options.messageIdProvider?new c.default:this.options.messageIdProvider,this.outgoingStore=t.outgoingStore||new g.default,this.incomingStore=t.incomingStore||new g.default,this.queueQoSZero=void 0===t.queueQoSZero||t.queueQoSZero,this._resubscribeTopics={},this.messageIdToTopic={},this.pingTimer=null,this.connected=!1,this.disconnecting=!1,this.reconnecting=!1,this.queue=[],this.connackTimer=null,this.reconnectTimer=null,this._storeProcessing=!1,this._packetIdsDuringStoreProcessing={},this._storeProcessingQueue=[],this.outgoing={},this._firstConnection=!0,t.properties&&t.properties.topicAliasMaximum>0&&(t.properties.topicAliasMaximum>65535?this.log("MqttClient :: options.properties.topicAliasMaximum is out of range"):this.topicAliasRecv=new l.default(t.properties.topicAliasMaximum)),this.on("connect",(()=>{const{queue:e}=this,t=()=>{const r=e.shift();this.log("deliver :: entry %o",r);let n=null;if(!r)return void this._resubscribe();n=r.packet,this.log("deliver :: call _sendPacket for %o",n);let i=!0;n.messageId&&0!==n.messageId&&(this.messageIdProvider.register(n.messageId)||(i=!1)),i?this._sendPacket(n,(e=>{r.cb&&r.cb(e),t()})):(this.log("messageId: %d has already used. The message is skipped and removed.",n.messageId),t())};this.log("connect :: sending queued packets"),t()})),this.on("close",(()=>{this.log("close :: connected set to `false`"),this.connected=!1,this.log("close :: clearing connackTimer"),clearTimeout(this.connackTimer),this.log("close :: clearing ping timer"),null!==this.pingTimer&&(this.pingTimer.clear(),this.pingTimer=null),this.topicAliasRecv&&this.topicAliasRecv.clear(),this.log("close :: calling _setupReconnect"),this._setupReconnect()})),this.options.manualConnect||(this.log("MqttClient :: setting up stream"),this.connect())}handleAuth(e,t){t()}handleMessage(e,t){t()}_nextId(){return this.messageIdProvider.allocate()}getLastMessageId(){return this.messageIdProvider.getLastAllocated()}connect(){var e;const t=new h.Writable,r=u.default.parser(this.options);let n=null;const i=[];this.log("connect :: calling method to clear reconnect"),this._clearReconnect(),this.log("connect :: using streamBuilder provided to client to create stream"),this.stream=this.streamBuilder(this),r.on("packet",(e=>{this.log("parser :: on packet push to packets array."),i.push(e)}));const s=()=>{this.log("work :: getting next packet in queue");const e=i.shift();if(e)this.log("work :: packet pulled from queue"),(0,m.default)(this,e,o);else{this.log("work :: no packets in queue");const e=n;n=null,this.log("work :: done flag is %s",!!e),e&&e()}},o=()=>{if(i.length)_(s);else{const e=n;n=null,e()}};t._write=(e,t,i)=>{n=i,this.log("writable stream :: parsing buffer"),r.parse(e),s()};this.log("connect :: pipe stream to writable stream"),this.stream.pipe(t),this.stream.on("error",(e=>{this.log("streamErrorHandler :: error",e.message),S.includes(e.code)?(this.log("streamErrorHandler :: emitting error"),this.emit("error",e)):this.noop(e)})),this.stream.on("close",(()=>{this.log("(%s)stream :: on close",this.options.clientId),this._flushVolatile(),this.log("stream: emit close to MqttClient"),this.emit("close")})),this.log("connect: sending packet `connect`");const a={cmd:"connect",protocolId:this.options.protocolId,protocolVersion:this.options.protocolVersion,clean:this.options.clean,clientId:this.options.clientId,keepalive:this.options.keepalive,username:this.options.username,password:this.options.password,properties:this.options.properties};if(this.options.will&&(a.will=Object.assign(Object.assign({},this.options.will),{payload:null===(e=this.options.will)||void 0===e?void 0:e.payload})),this.topicAliasRecv&&(a.properties||(a.properties={}),this.topicAliasRecv&&(a.properties.topicAliasMaximum=this.topicAliasRecv.max)),this._writePacket(a),r.on("error",this.emit.bind(this,"error")),this.options.properties){if(!this.options.properties.authenticationMethod&&this.options.properties.authenticationData)return this.end((()=>this.emit("error",new Error("Packet has no Authentication Method")))),this;if(this.options.properties.authenticationMethod&&this.options.authPacket&&"object"==typeof this.options.authPacket){const e=Object.assign({cmd:"auth",reasonCode:0},this.options.authPacket);this._writePacket(e)}}return this.stream.setMaxListeners(1e3),clearTimeout(this.connackTimer),this.connackTimer=setTimeout((()=>{this.log("!!connectTimeout hit!! Calling _cleanUp with force `true`"),this._cleanUp(!0)}),this.options.connectTimeout),this}publish(e,t,r,n){this.log("publish :: message `%s` to topic `%s`",t,e);const{options:i}=this;"function"==typeof r&&(n=r,r=null),r=r||{};r=Object.assign(Object.assign({},{qos:0,retain:!1,dup:!1}),r);const{qos:s,retain:o,dup:a,properties:l,cbStorePut:u}=r;if(this._checkDisconnecting(n))return this;const c=()=>{let r=0;if((1===s||2===s)&&(r=this._nextId(),null===r))return this.log("No messageId left"),!1;const c={cmd:"publish",topic:e,payload:t,qos:s,retain:o,messageId:r,dup:a};switch(5===i.protocolVersion&&(c.properties=l),this.log("publish :: qos",s),s){case 1:case 2:this.outgoing[c.messageId]={volatile:!1,cb:n||this.noop},this.log("MqttClient:publish: packet cmd: %s",c.cmd),this._sendPacket(c,void 0,u);break;default:this.log("MqttClient:publish: packet cmd: %s",c.cmd),this._sendPacket(c,n,u)}return!0};return(this._storeProcessing||this._storeProcessingQueue.length>0||!c())&&this._storeProcessingQueue.push({invoke:c,cbStorePut:r.cbStorePut,callback:n}),this}publishAsync(e,t,r){return new Promise(((n,i)=>{this.publish(e,t,r,((e,t)=>{e?i(e):n(t)}))}))}subscribe(e,t,r){const n=this.options.protocolVersion;"function"==typeof t&&(r=t),r=r||this.noop;let i=!1,s=[];"string"==typeof e?s=e=[e]:Array.isArray(e)?s=e:"object"==typeof e&&(i=e.resubscribe,delete e.resubscribe,s=Object.keys(e));const o=p.validateTopics(s);if(null!==o)return w(r,new Error(`Invalid topic ${o}`)),this;if(this._checkDisconnecting(r))return this.log("subscribe: discconecting true"),this;const a={qos:0};5===n&&(a.nl=!1,a.rap=!1,a.rh=0);const l=(t=Object.assign(Object.assign({},a),t)).properties,u=[],c=(e,r)=>{if(r=r||t,!Object.prototype.hasOwnProperty.call(this._resubscribeTopics,e)||this._resubscribeTopics[e].qos{this.log("subscribe: array topic %s",e),c(e)})):Object.keys(e).forEach((t=>{this.log("subscribe: object topic %s, %o",t,e[t]),c(t,e[t])})),!u.length)return r(null,[]),this;const h=()=>{const e=this._nextId();if(null===e)return this.log("No messageId left"),!1;const t={cmd:"subscribe",subscriptions:u,messageId:e};if(l&&(t.properties=l),this.options.resubscribe){this.log("subscribe :: resubscribe true");const e=[];u.forEach((t=>{if(this.options.reconnectPeriod>0){const r={qos:t.qos};5===n&&(r.nl=t.nl||!1,r.rap=t.rap||!1,r.rh=t.rh||0,r.properties=t.properties),this._resubscribeTopics[t.topic]=r,e.push(t.topic)}})),this.messageIdToTopic[t.messageId]=e}return this.outgoing[t.messageId]={volatile:!0,cb(e,t){if(!e){const{granted:e}=t;for(let t=0;t0||!h())&&this._storeProcessingQueue.push({invoke:h,callback:r}),this}subscribeAsync(e,t){return new Promise(((r,n)=>{this.subscribe(e,t,((e,t)=>{e?n(e):r(t)}))}))}unsubscribe(e,t,r){"string"==typeof e&&(e=[e]),"function"==typeof t&&(r=t),r=r||this.noop;const n=p.validateTopics(e);if(null!==n)return w(r,new Error(`Invalid topic ${n}`)),this;if(this._checkDisconnecting(r))return this;const i=()=>{const n=this._nextId();if(null===n)return this.log("No messageId left"),!1;const i={cmd:"unsubscribe",messageId:n,unsubscriptions:[]};return"string"==typeof e?i.unsubscriptions=[e]:Array.isArray(e)&&(i.unsubscriptions=e),this.options.resubscribe&&i.unsubscriptions.forEach((e=>{delete this._resubscribeTopics[e]})),"object"==typeof t&&t.properties&&(i.properties=t.properties),this.outgoing[i.messageId]={volatile:!0,cb:r},this.log("unsubscribe: call _sendPacket"),this._sendPacket(i),!0};return(this._storeProcessing||this._storeProcessingQueue.length>0||!i())&&this._storeProcessingQueue.push({invoke:i,callback:r}),this}unsubscribeAsync(e,t){return new Promise(((r,n)=>{this.unsubscribe(e,t,((e,t)=>{e?n(e):r(t)}))}))}end(e,t,r){this.log("end :: (%s)",this.options.clientId),null!=e&&"boolean"==typeof e||(r=r||t,t=e,e=!1),"object"!=typeof t&&(r=r||t,t=null),this.log("end :: cb? %s",!!r),r&&"function"==typeof r||(r=this.noop);const n=()=>{this.log("end :: closeStores: closing incoming and outgoing stores"),this.disconnected=!0,this.incomingStore.close((e=>{this.outgoingStore.close((t=>{if(this.log("end :: closeStores: emitting end"),this.emit("end"),r){const n=e||t;this.log("end :: closeStores: invoking callback with args"),r(n)}}))})),this._deferredReconnect&&this._deferredReconnect()},i=()=>{this.log("end :: (%s) :: finish :: calling _cleanUp with force %s",this.options.clientId,e),this._cleanUp(e,(()=>{this.log("end :: finish :: calling process.nextTick on closeStores"),_(n)}),t)};return this.disconnecting?(r(),this):(this._clearReconnect(),this.disconnecting=!0,!e&&Object.keys(this.outgoing).length>0?(this.log("end :: (%s) :: calling finish in 10ms once outgoing is empty",this.options.clientId),this.once("outgoingEmpty",setTimeout.bind(null,i,10))):(this.log("end :: (%s) :: immediately calling finish",this.options.clientId),i()),this)}endAsync(e,t){return new Promise(((r,n)=>{this.end(e,t,(e=>{e?n(e):r()}))}))}removeOutgoingMessage(e){if(this.outgoing[e]){const{cb:t}=this.outgoing[e];this._removeOutgoingAndStoreMessage(e,(()=>{t(new Error("Message removed"))}))}return this}reconnect(e){this.log("client reconnect");const t=()=>{e?(this.options.incomingStore=e.incomingStore,this.options.outgoingStore=e.outgoingStore):(this.options.incomingStore=null,this.options.outgoingStore=null),this.incomingStore=this.options.incomingStore||new g.default,this.outgoingStore=this.options.outgoingStore||new g.default,this.disconnecting=!1,this.disconnected=!1,this._deferredReconnect=null,this._reconnect()};return this.disconnecting&&!this.disconnected?this._deferredReconnect=t:t(),this}_flushVolatile(){this.outgoing&&(this.log("_flushVolatile :: deleting volatile messages from the queue and setting their callbacks as error function"),Object.keys(this.outgoing).forEach((e=>{this.outgoing[e].volatile&&"function"==typeof this.outgoing[e].cb&&(this.outgoing[e].cb(new Error("Connection closed")),delete this.outgoing[e])})))}_flush(){this.outgoing&&(this.log("_flush: queue exists? %b",!!this.outgoing),Object.keys(this.outgoing).forEach((e=>{"function"==typeof this.outgoing[e].cb&&(this.outgoing[e].cb(new Error("Connection closed")),delete this.outgoing[e])})))}_removeTopicAliasAndRecoverTopicName(e){let t;e.properties&&(t=e.properties.topicAlias);let r=e.topic.toString();if(this.log("_removeTopicAliasAndRecoverTopicName :: alias %d, topic %o",t,r),0===r.length){if(void 0===t)return new Error("Unregistered Topic Alias");if(r=this.topicAliasSend.getTopicByAlias(t),void 0===r)return new Error("Unregistered Topic Alias");e.topic=r}t&&delete e.properties.topicAlias}_checkDisconnecting(e){return this.disconnecting&&(e&&e!==this.noop?e(new Error("client disconnecting")):this.emit("error",new Error("client disconnecting"))),this.disconnecting}_reconnect(){this.log("_reconnect: emitting reconnect to client"),this.emit("reconnect"),this.connected?(this.end((()=>{this.connect()})),this.log("client already connected. disconnecting first.")):(this.log("_reconnect: calling connect"),this.connect())}_setupReconnect(){!this.disconnecting&&!this.reconnectTimer&&this.options.reconnectPeriod>0?(this.reconnecting||(this.log("_setupReconnect :: emit `offline` state"),this.emit("offline"),this.log("_setupReconnect :: set `reconnecting` to `true`"),this.reconnecting=!0),this.log("_setupReconnect :: setting reconnectTimer for %d ms",this.options.reconnectPeriod),this.reconnectTimer=setInterval((()=>{this.log("reconnectTimer :: reconnect triggered!"),this._reconnect()}),this.options.reconnectPeriod)):this.log("_setupReconnect :: doing nothing...")}_clearReconnect(){this.log("_clearReconnect : clearing reconnect timer"),this.reconnectTimer&&(clearInterval(this.reconnectTimer),this.reconnectTimer=null)}_cleanUp(e,t,r={}){if(t&&(this.log("_cleanUp :: done callback provided for on stream close"),this.stream.on("close",t)),this.log("_cleanUp :: forced? %s",e),e)0===this.options.reconnectPeriod&&this.options.clean&&this._flush(),this.log("_cleanUp :: (%s) :: destroying stream",this.options.clientId),this.stream.destroy();else{const e=Object.assign({cmd:"disconnect"},r);this.log("_cleanUp :: (%s) :: call _sendPacket with disconnect packet",this.options.clientId),this._sendPacket(e,(()=>{this.log("_cleanUp :: (%s) :: destroying stream",this.options.clientId),w((()=>{this.stream.end((()=>{this.log("_cleanUp :: (%s) :: stream destroyed",this.options.clientId)}))}))}))}this.disconnecting||(this.log("_cleanUp :: client not disconnecting. Clearing and resetting reconnect."),this._clearReconnect(),this._setupReconnect()),null!==this.pingTimer&&(this.log("_cleanUp :: clearing pingTimer"),this.pingTimer.clear(),this.pingTimer=null),t&&!this.connected&&(this.log("_cleanUp :: (%s) :: removing stream `done` callback `close` listener",this.options.clientId),this.stream.removeListener("close",t),t())}_storeAndSend(e,t,r){this.log("storeAndSend :: store packet with cmd %s to outgoingStore",e.cmd);let n,i=e;if("publish"===i.cmd&&(i=(0,d.default)(e),n=this._removeTopicAliasAndRecoverTopicName(i),n))return t&&t(n);this.outgoingStore.put(i,(n=>{if(n)return t&&t(n);r(),this._writePacket(e,t)}))}_applyTopicAlias(e){if(5===this.options.protocolVersion&&"publish"===e.cmd){let t;e.properties&&(t=e.properties.topicAlias);const r=e.topic.toString();if(this.topicAliasSend)if(t){if(0!==r.length&&(this.log("applyTopicAlias :: register topic: %s - alias: %d",r,t),!this.topicAliasSend.put(r,t)))return this.log("applyTopicAlias :: error out of range. topic: %s - alias: %d",r,t),new Error("Sending Topic Alias out of range")}else 0!==r.length&&(this.options.autoAssignTopicAlias?(t=this.topicAliasSend.getAliasByTopic(r),t?(e.topic="",e.properties=Object.assign(Object.assign({},e.properties),{topicAlias:t}),this.log("applyTopicAlias :: auto assign(use) topic: %s - alias: %d",r,t)):(t=this.topicAliasSend.getLruAlias(),this.topicAliasSend.put(r,t),e.properties=Object.assign(Object.assign({},e.properties),{topicAlias:t}),this.log("applyTopicAlias :: auto assign topic: %s - alias: %d",r,t))):this.options.autoUseTopicAlias&&(t=this.topicAliasSend.getAliasByTopic(r),t&&(e.topic="",e.properties=Object.assign(Object.assign({},e.properties),{topicAlias:t}),this.log("applyTopicAlias :: auto use topic: %s - alias: %d",r,t))));else if(t)return this.log("applyTopicAlias :: error out of range. topic: %s - alias: %d",r,t),new Error("Sending Topic Alias out of range")}}_noop(e){this.log("noop ::",e)}_writePacket(e,t){this.log("_writePacket :: packet: %O",e),this.log("_writePacket :: emitting `packetsend`"),this.emit("packetsend",e),this._shiftPingInterval(),this.log("_writePacket :: writing to stream");const r=u.default.writeToStream(e,this.stream,this.options);this.log("_writePacket :: writeToStream result %s",r),!r&&t&&t!==this.noop?(this.log("_writePacket :: handle events on `drain` once through callback."),this.stream.once("drain",t)):t&&(this.log("_writePacket :: invoking cb"),t())}_sendPacket(e,t,r,n){this.log("_sendPacket :: (%s) :: start",this.options.clientId),r=r||this.noop,t=t||this.noop;const i=this._applyTopicAlias(e);if(i)t(i);else{if(!this.connected)return"auth"===e.cmd?void this._writePacket(e,t):(this.log("_sendPacket :: client not connected. Storing packet offline."),void this._storePacket(e,t,r));if(n)this._writePacket(e,t);else{switch(e.cmd){case"publish":break;case"pubrel":return void this._storeAndSend(e,t,r);default:return void this._writePacket(e,t)}switch(e.qos){case 2:case 1:this._storeAndSend(e,t,r);break;default:this._writePacket(e,t)}this.log("_sendPacket :: (%s) :: end",this.options.clientId)}}}_storePacket(e,t,r){this.log("_storePacket :: packet: %o",e),this.log("_storePacket :: cb? %s",!!t),r=r||this.noop;let n=e;if("publish"===n.cmd){n=(0,d.default)(e);const r=this._removeTopicAliasAndRecoverTopicName(n);if(r)return t&&t(r)}const i=n.qos||0;0===i&&this.queueQoSZero||"publish"!==n.cmd?this.queue.push({packet:n,cb:t}):i>0?(t=this.outgoing[n.messageId]?this.outgoing[n.messageId].cb:null,this.outgoingStore.put(n,(e=>{if(e)return t&&t(e);r()}))):t&&t(new Error("No connection to broker"))}_setupPingTimer(){this.log("_setupPingTimer :: keepalive %d (seconds)",this.options.keepalive),!this.pingTimer&&this.options.keepalive&&(this.pingResp=!0,this.pingTimer=(0,f.default)((()=>{this._checkPing()}),1e3*this.options.keepalive))}_shiftPingInterval(){this.pingTimer&&this.options.keepalive&&this.options.reschedulePings&&this.pingTimer.reschedule(1e3*this.options.keepalive)}_checkPing(){this.log("_checkPing :: checking ping..."),this.pingResp?(this.log("_checkPing :: ping response received. Clearing flag and sending `pingreq`"),this.pingResp=!1,this._sendPacket({cmd:"pingreq"})):(this.log("_checkPing :: calling _cleanUp with force true"),this._cleanUp(!0))}_resubscribe(){this.log("_resubscribe");const e=Object.keys(this._resubscribeTopics);if(!this._firstConnection&&(this.options.clean||this.options.protocolVersion>=4&&!this.connackPacket.sessionPresent)&&e.length>0)if(this.options.resubscribe)if(5===this.options.protocolVersion){this.log("_resubscribe: protocolVersion 5");for(let t=0;t{let r=this.outgoingStore.createStream();const n=()=>{r.destroy(),r=null,this._flushStoreProcessingQueue(),i()},i=()=>{this._storeProcessing=!1,this._packetIdsDuringStoreProcessing={}};this.once("close",n),r.on("error",(e=>{i(),this._flushStoreProcessingQueue(),this.removeListener("close",n),this.emit("error",e)}));const s=()=>{if(!r)return;const e=r.read(1);let t;e?(this._storeProcessing=!0,this._packetIdsDuringStoreProcessing[e.messageId]?s():this.disconnecting||this.reconnectTimer?r.destroy&&r.destroy():(t=this.outgoing[e.messageId]?this.outgoing[e.messageId].cb:null,this.outgoing[e.messageId]={volatile:!1,cb(e,r){t&&t(e,r),s()}},this._packetIdsDuringStoreProcessing[e.messageId]=!0,this.messageIdProvider.register(e.messageId)?this._sendPacket(e,void 0,void 0,!0):this.log("messageId: %d has already used.",e.messageId))):r.once("readable",s)};r.on("end",(()=>{let r=!0;for(const e in this._packetIdsDuringStoreProcessing)if(!this._packetIdsDuringStoreProcessing[e]){r=!1;break}r?(i(),this.removeListener("close",n),this._invokeAllStoreProcessingQueue(),this.emit("connect",e)):t()})),s()};t()}_invokeStoreProcessingQueue(){if(!this._storeProcessing&&this._storeProcessingQueue.length>0){const e=this._storeProcessingQueue[0];if(e&&e.invoke())return this._storeProcessingQueue.shift(),!0}return!1}_invokeAllStoreProcessingQueue(){for(;this._invokeStoreProcessingQueue(););}_flushStoreProcessingQueue(){for(const e of this._storeProcessingQueue)e.cbStorePut&&e.cbStorePut(new Error("Connection closed")),e.callback&&e.callback(new Error("Connection closed"));this._storeProcessingQueue.splice(0)}_removeOutgoingAndStoreMessage(e,t){delete this.outgoing[e],this.outgoingStore.del({messageId:e},((r,n)=>{t(r,n),this.messageIdProvider.deallocate(e),this._invokeStoreProcessingQueue()}))}}r.default=E}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./TypedEmitter":1,"./default-message-id-provider":9,"./handlers":13,"./store":18,"./topic-alias-recv":19,"./validations":22,_process:102,debug:30,"mqtt-packet":75,"readable-stream":125,reinterval:131,"rfdc/default":132}],3:[function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0});const i=e("buffer"),s=e("readable-stream"),o=n(e("duplexify"));let a,l,u,c=!1;r.default=(e,t)=>{if(t.hostname=t.hostname||t.host,!t.hostname)throw new Error("Could not determine host. Specify host manually.");const r="MQIsdp"===t.protocolId&&3===t.protocolVersion?"mqttv3.1":"mqtt";!function(e){e.hostname||(e.hostname="localhost"),e.path||(e.path="/"),e.wsOptions||(e.wsOptions={})}(t);const n=function(e,t){const r="alis"===e.protocol?"wss":"ws";let n=`${r}://${e.hostname}${e.path}`;return e.port&&80!==e.port&&443!==e.port&&(n=`${r}://${e.hostname}:${e.port}${e.path}`),"function"==typeof e.transformWsUrl&&(n=e.transformWsUrl(n,e,t)),n}(t,e);return a=t.my,a.connectSocket({url:n,protocols:r}),l=function(){const e=new s.Transform;return e._write=(e,t,r)=>{a.sendSocketMessage({data:e.buffer,success(){r()},fail(){r(new Error)}})},e._flush=e=>{a.closeSocket({success(){e()}})},e}(),u=o.default.obj(),c||(c=!0,a.onSocketOpen((()=>{u.setReadable(l),u.setWritable(l),u.emit("connect")})),a.onSocketMessage((e=>{if("string"==typeof e.data){const t=i.Buffer.from(e.data,"base64");l.push(t)}else{const t=new FileReader;t.addEventListener("load",(()=>{let e=t.result;e=e instanceof ArrayBuffer?i.Buffer.from(e):i.Buffer.from(e,"utf8"),l.push(e)})),t.readAsArrayBuffer(e.data)}})),a.onSocketClose((()=>{u.end(),u.destroy()})),a.onSocketError((e=>{u.destroy(e)}))),u}},{buffer:29,duplexify:32,"readable-stream":125}],4:[function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0}),r.connectAsync=void 0;const i=n(e("debug")),s=n(e("url")),o=n(e("../client")),a=n(e("../is-browser")),l=(0,i.default)("mqttjs"),u={};function c(e,t){if(l("connecting to an MQTT broker..."),"object"!=typeof e||t||(t=e,e=""),t=t||{},e&&"string"==typeof e){const r=s.default.parse(e,!0);if(null!=r.port&&(r.port=Number(r.port)),null===(t=Object.assign(Object.assign({},r),t)).protocol)throw new Error("Missing protocol");t.protocol=t.protocol.replace(/:$/,"")}if(function(e){let t;e.auth&&(t=e.auth.match(/^(.+):(.+)$/),t?(e.username=t[1],e.password=t[2]):e.username=e.auth)}(t),t.query&&"string"==typeof t.query.clientId&&(t.clientId=t.query.clientId),t.cert&&t.key){if(!t.protocol)throw new Error("Missing secure protocol key");if(-1===["mqtts","wss","wxs","alis"].indexOf(t.protocol))switch(t.protocol){case"mqtt":t.protocol="mqtts";break;case"ws":t.protocol="wss";break;case"wx":t.protocol="wxs";break;case"ali":t.protocol="alis";break;default:throw new Error(`Unknown protocol for secure connection: "${t.protocol}"!`)}}if(!u[t.protocol]){const e=-1!==["mqtts","wss"].indexOf(t.protocol);t.protocol=["mqtt","mqtts","ws","wss","wx","wxs","ali","alis"].filter(((t,r)=>(!e||r%2!=0)&&"function"==typeof u[t]))[0]}if(!1===t.clean&&!t.clientId)throw new Error("Missing clientId for unclean clients");t.protocol&&(t.defaultProtocol=t.protocol);const r=new o.default((function(e){return t.servers&&(e._reconnectCount&&e._reconnectCount!==t.servers.length||(e._reconnectCount=0),t.host=t.servers[e._reconnectCount].host,t.port=t.servers[e._reconnectCount].port,t.protocol=t.servers[e._reconnectCount].protocol?t.servers[e._reconnectCount].protocol:t.defaultProtocol,t.hostname=t.host,e._reconnectCount++),l("calling streambuilder for",t.protocol),u[t.protocol](e,t)}),t);return r.on("error",(()=>{})),r}a.default?(u.wx=e("./wx").default,u.wxs=e("./wx").default,u.ali=e("./ali").default,u.alis=e("./ali").default):(u.mqtt=e("./tcp").default,u.tcp=e("./tcp").default,u.ssl=e("./tls").default,u.tls=u.ssl,u.mqtts=e("./tls").default),u.ws=e("./ws").default,u.wss=e("./ws").default,r.connectAsync=function(e,t,r=!0){return new Promise(((n,i)=>{const s=c(e,t),o={connect:e=>{a(),n(s)},end:()=>{a(),n(s)},error:e=>{a(),s.end(),i(e)}};function a(){Object.keys(o).forEach((e=>{s.off(e,o[e])}))}!1===r&&(o.close=()=>{o.error(new Error("Couldn't connect to server"))}),Object.keys(o).forEach((e=>{s.on(e,o[e])}))}))},r.default=c},{"../client":2,"../is-browser":16,"./ali":3,"./tcp":5,"./tls":6,"./ws":7,"./wx":8,debug:30,url:137}],5:[function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0});const i=n(e("net")),s=(0,n(e("debug")).default)("mqttjs:tcp");r.default=(e,t)=>{t.port=t.port||1883,t.hostname=t.hostname||t.host||"localhost";const{port:r}=t,n=t.hostname;return s("port %d and host %s",r,n),i.default.createConnection(r,n)}},{debug:30,net:26}],6:[function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0});const i=n(e("tls")),s=n(e("net")),o=(0,n(e("debug")).default)("mqttjs:tls");r.default=(e,t)=>{t.port=t.port||8883,t.host=t.hostname||t.host||"localhost",0===s.default.isIP(t.host)&&(t.servername=t.host),t.rejectUnauthorized=!1!==t.rejectUnauthorized,delete t.path,o("port %d host %s rejectUnauthorized %b",t.port,t.host,t.rejectUnauthorized);const r=i.default.connect(t);function n(n){t.rejectUnauthorized&&e.emit("error",n),r.end()}return r.on("secureConnect",(()=>{t.rejectUnauthorized&&!r.authorized?r.emit("error",new Error("TLS not authorized")):r.removeListener("error",n)})),r.on("error",n),r}},{debug:30,net:26,tls:26}],7:[function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0});const i=e("buffer"),s=n(e("ws")),o=n(e("debug")),a=n(e("duplexify")),l=e("readable-stream"),u=n(e("../is-browser")),c=(0,o.default)("mqttjs:ws"),h=["rejectUnauthorized","ca","cert","key","pfx","passphrase"];function f(e,t){let r=`${e.protocol}://${e.hostname}:${e.port}${e.path}`;return"function"==typeof e.transformWsUrl&&(r=e.transformWsUrl(r,e,t)),r}function d(e){const t=e;return e.hostname||(t.hostname="localhost"),e.port||("wss"===e.protocol?t.port=443:t.port=80),e.path||(t.path="/"),e.wsOptions||(t.wsOptions={}),u.default||"wss"!==e.protocol||h.forEach((r=>{Object.prototype.hasOwnProperty.call(e,r)&&!Object.prototype.hasOwnProperty.call(e.wsOptions,r)&&(t.wsOptions[r]=e[r])})),t}r.default=u.default?(e,t)=>{let r;c("browserStreamBuilder");const n=function(e){const t=d(e);if(t.hostname||(t.hostname=t.host),!t.hostname){if("undefined"==typeof document)throw new Error("Could not determine host. Specify host manually.");const e=new URL(document.URL);t.hostname=e.hostname,t.port||(t.port=Number(e.port))}return void 0===t.objectMode&&(t.objectMode=!(!0===t.binary||void 0===t.binary)),t}(t),s=n.browserBufferSize||524288,o=t.browserBufferTimeout||1e3,u=!t.objectMode,h=function(e,t){const r="MQIsdp"===t.protocolId&&3===t.protocolVersion?"mqttv3.1":"mqtt",n=f(t,e),i=new WebSocket(n,[r]);return i.binaryType="arraybuffer",i}(e,t),p=function(e,t,r){const n=new l.Transform({objectMode:e.objectMode});return n._write=t,n._flush=r,n}(t,(function e(t,r,n){h.bufferedAmount>s&&setTimeout(e,o,t,r,n);u&&"string"==typeof t&&(t=i.Buffer.from(t,"utf8"));try{h.send(t)}catch(e){return n(e)}n()}),(function(e){h.close(),e()}));t.objectMode||(p._writev=w),p.on("close",(()=>{h.close()}));const b=void 0!==h.addEventListener;function g(){r.setReadable(p),r.setWritable(p),r.emit("connect")}function m(){r.end(),r.destroy()}function y(e){r.destroy(e)}function _(e){let{data:t}=e;t=t instanceof ArrayBuffer?i.Buffer.from(t):i.Buffer.from(t,"utf8"),p.push(t)}function w(e,t){const r=new Array(e.length);for(let t=0;t{c("streamBuilder");const r=d(t),n=f(r,e),i=function(e,t,r){c("createWebSocket"),c(`protocol: ${r.protocolId} ${r.protocolVersion}`);const n="MQIsdp"===r.protocolId&&3===r.protocolVersion?"mqttv3.1":"mqtt";return c(`creating new Websocket for url: ${t} and protocol: ${n}`),new s.default(t,[n],r.wsOptions)}(0,n,r),o=s.default.createWebSocketStream(i,r.wsOptions);return o.url=n,i.on("close",(()=>{o.destroy()})),o}},{"../is-browser":16,buffer:29,debug:30,duplexify:32,"readable-stream":125,ws:141}],8:[function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0});const i=e("buffer"),s=e("readable-stream"),o=n(e("duplexify"));let a,l,u;r.default=(e,t)=>{if(t.hostname=t.hostname||t.host,!t.hostname)throw new Error("Could not determine host. Specify host manually.");const r="MQIsdp"===t.protocolId&&3===t.protocolVersion?"mqttv3.1":"mqtt";!function(e){e.hostname||(e.hostname="localhost"),e.path||(e.path="/"),e.wsOptions||(e.wsOptions={})}(t);const n=function(e,t){const r="wxs"===e.protocol?"wss":"ws";let n=`${r}://${e.hostname}${e.path}`;return e.port&&80!==e.port&&443!==e.port&&(n=`${r}://${e.hostname}:${e.port}${e.path}`),"function"==typeof e.transformWsUrl&&(n=e.transformWsUrl(n,e,t)),n}(t,e);a=wx.connectSocket({url:n,protocols:[r]}),l=function(){const e=new s.Transform;return e._write=(e,t,r)=>{a.send({data:e.buffer,success(){r()},fail(e){r(new Error(e))}})},e._flush=e=>{a.close({success(){e()}})},e}(),u=o.default.obj(),u._destroy=(e,t)=>{a.close({success(){t&&t(e)}})};const c=u.destroy;return u.destroy=()=>{u.destroy=c,setTimeout((()=>{a.close({fail(){u._destroy(new Error)}})}),0)},a.onOpen((()=>{u.setReadable(l),u.setWritable(l),u.emit("connect")})),a.onMessage((e=>{let{data:t}=e;t=t instanceof ArrayBuffer?i.Buffer.from(t):i.Buffer.from(t,"utf8"),l.push(t)})),a.onClose((()=>{u.emit("close"),u.end(),u.destroy()})),a.onError((e=>{u.destroy(new Error(e.errMsg))})),u}},{buffer:29,duplexify:32,"readable-stream":125}],9:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});r.default=class{constructor(){this.nextId=Math.max(1,Math.floor(65535*Math.random()))}allocate(){const e=this.nextId++;return 65536===this.nextId&&(this.nextId=1),e}getLastAllocated(){return 1===this.nextId?65535:this.nextId-1}register(e){return!0}deallocate(e){}clear(){}}},{}],10:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.ReasonCodes=void 0,r.ReasonCodes={0:"",1:"Unacceptable protocol version",2:"Identifier rejected",3:"Server unavailable",4:"Bad username or password",5:"Not authorized",16:"No matching subscribers",17:"No subscription existed",128:"Unspecified error",129:"Malformed Packet",130:"Protocol Error",131:"Implementation specific error",132:"Unsupported Protocol Version",133:"Client Identifier not valid",134:"Bad User Name or Password",135:"Not authorized",136:"Server unavailable",137:"Server busy",138:"Banned",139:"Server shutting down",140:"Bad authentication method",141:"Keep Alive timeout",142:"Session taken over",143:"Topic Filter invalid",144:"Topic Name invalid",145:"Packet identifier in use",146:"Packet Identifier not found",147:"Receive Maximum exceeded",148:"Topic Alias invalid",149:"Packet too large",150:"Message rate too high",151:"Quota exceeded",152:"Administrative action",153:"Payload format invalid",154:"Retain not supported",155:"QoS not supported",156:"Use another server",157:"Server moved",158:"Shared Subscriptions not supported",159:"Connection rate exceeded",160:"Maximum connect time",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"};r.default=(e,t)=>{const{messageId:n}=t,i=t.cmd;let s=null;const o=e.outgoing[n]?e.outgoing[n].cb:null;let a;if(o){switch(e.log("_handleAck :: packet type",i),i){case"pubcomp":case"puback":{const i=t.reasonCode;i&&i>0&&16!==i?(a=new Error(`Publish error: ${r.ReasonCodes[i]}`),a.code=i,e._removeOutgoingAndStoreMessage(n,(()=>{o(a,t)}))):e._removeOutgoingAndStoreMessage(n,o);break}case"pubrec":{s={cmd:"pubrel",qos:2,messageId:n};const i=t.reasonCode;i&&i>0&&16!==i?(a=new Error(`Publish error: ${r.ReasonCodes[i]}`),a.code=i,e._removeOutgoingAndStoreMessage(n,(()=>{o(a,t)}))):e._sendPacket(s);break}case"suback":{delete e.outgoing[n],e.messageIdProvider.deallocate(n);const r=t.granted;for(let t=0;t{delete e._resubscribeTopics[t]}))}delete e.messageIdToTopic[n],e._invokeStoreProcessingQueue(),o(null,t);break}case"unsuback":delete e.outgoing[n],e.messageIdProvider.deallocate(n),e._invokeStoreProcessingQueue(),o(null);break;default:e.emit("error",new Error("unrecognized packet type"))}e.disconnecting&&0===Object.keys(e.outgoing).length&&e.emit("outgoingEmpty")}else e.log("_handleAck :: Server sent an ack in error. Ignoring.")}},{}],11:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const n=e("../shared"),i=e("./ack");r.default=(e,t)=>{const{options:r}=e,s=r.protocolVersion,o=5===s?t.reasonCode:t.returnCode;if(5===s)e.handleAuth(t,((t,r)=>{if(t)e.emit("error",t);else if(24===o)e.reconnecting=!1,e._sendPacket(r);else{const t=new n.ErrorWithReasonCode(`Connection refused: ${i.ReasonCodes[o]}`,o);e.emit("error",t)}}));else{const t=new n.ErrorWithReasonCode(`Protocol error: Auth packets are only supported in MQTT 5. Your version:${s}`,o);e.emit("error",t)}}},{"../shared":17,"./ack":10}],12:[function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0});const i=e("./ack"),s=n(e("../topic-alias-send")),o=e("../shared");r.default=(e,t)=>{e.log("_handleConnack");const{options:r}=e,n=5===r.protocolVersion?t.reasonCode:t.returnCode;if(clearTimeout(e.connackTimer),delete e.topicAliasSend,t.properties){if(t.properties.topicAliasMaximum){if(t.properties.topicAliasMaximum>65535)return void e.emit("error",new Error("topicAliasMaximum from broker is out of range"));t.properties.topicAliasMaximum>0&&(e.topicAliasSend=new s.default(t.properties.topicAliasMaximum))}t.properties.serverKeepAlive&&r.keepalive&&(r.keepalive=t.properties.serverKeepAlive,e._shiftPingInterval()),t.properties.maximumPacketSize&&(r.properties||(r.properties={}),r.properties.maximumPacketSize=t.properties.maximumPacketSize)}if(0===n)e.reconnecting=!1,e._onConnect(t);else if(n>0){const t=new o.ErrorWithReasonCode(`Connection refused: ${i.ReasonCodes[n]}`,n);e.emit("error",t)}}},{"../shared":17,"../topic-alias-send":20,"./ack":10}],13:[function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0});const i=n(e("./publish")),s=n(e("./auth")),o=n(e("./connack")),a=n(e("./ack")),l=n(e("./pubrel"));r.default=(e,t,r)=>{const{options:n}=e;if(5===n.protocolVersion&&n.properties&&n.properties.maximumPacketSize&&n.properties.maximumPacketSize{e.log("handlePublish: packet %o",t),r=void 0!==r?r:e.noop;let i=t.topic.toString();const s=t.payload,{qos:o}=t,{messageId:a}=t,{options:l}=e;if(5===e.options.protocolVersion){let r;if(t.properties&&(r=t.properties.topicAlias),void 0!==r)if(0===i.length){if(!(r>0&&r<=65535))return e.log("handlePublish :: topic alias out of range. alias: %d",r),void e.emit("error",new Error("Received Topic Alias is out of range"));{const t=e.topicAliasRecv.getTopicByAlias(r);if(!t)return e.log("handlePublish :: unregistered topic alias. alias: %d",r),void e.emit("error",new Error("Received unregistered Topic Alias"));i=t,e.log("handlePublish :: topic complemented by alias. topic: %s - alias: %d",i,r)}}else{if(!e.topicAliasRecv.put(i,r))return e.log("handlePublish :: topic alias out of range. alias: %d",r),void e.emit("error",new Error("Received Topic Alias is out of range"));e.log("handlePublish :: registered topic: %s - alias: %d",i,r)}}switch(e.log("handlePublish: qos %d",o),o){case 2:l.customHandleAcks(i,s,t,((i,s)=>("number"==typeof i&&(s=i,i=null),i?e.emit("error",i):-1===n.indexOf(s)?e.emit("error",new Error("Wrong reason code for pubrec")):void(s?e._sendPacket({cmd:"pubrec",messageId:a,reasonCode:s},r):e.incomingStore.put(t,(()=>{e._sendPacket({cmd:"pubrec",messageId:a},r)}))))));break;case 1:l.customHandleAcks(i,s,t,((o,l)=>("number"==typeof o&&(l=o,o=null),o?e.emit("error",o):-1===n.indexOf(l)?e.emit("error",new Error("Wrong reason code for puback")):(l||e.emit("message",i,s,t),void e.handleMessage(t,(t=>{if(t)return r&&r(t);e._sendPacket({cmd:"puback",messageId:a,reasonCode:l},r)}))))));break;case 0:e.emit("message",i,s,t),e.handleMessage(t,r);break;default:e.log("handlePublish: unknown QoS. Doing nothing.")}}},{}],15:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});r.default=(e,t,r)=>{e.log("handling pubrel packet");const n=void 0!==r?r:e.noop,{messageId:i}=t,s={cmd:"pubcomp",messageId:i};e.incomingStore.get(t,((t,r)=>{t?e._sendPacket(s,n):(e.emit("message",r.topic,r.payload,r),e.handleMessage(r,(t=>{if(t)return n(t);e.incomingStore.del(r,e.noop),e._sendPacket(s,n)})))}))}},{}],16:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const n="undefined"!=typeof window&&void 0!==window.document;r.default=n},{}],17:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.applyMixin=r.ErrorWithReasonCode=void 0;class n extends Error{constructor(e,t){super(e),this.code=t,Object.setPrototypeOf(this,n.prototype),Object.getPrototypeOf(this).name="ErrorWithReasonCode"}}r.ErrorWithReasonCode=n,r.applyMixin=function(e,t,r=!1){var n;const i=[t];for(;;){const e=i[0],t=Object.getPrototypeOf(e);if(!(null==t?void 0:t.prototype))break;i.unshift(t)}for(const t of i)for(const i of Object.getOwnPropertyNames(t.prototype))(r||"constructor"!==i)&&Object.defineProperty(e.prototype,i,null!==(n=Object.getOwnPropertyDescriptor(t.prototype,i))&&void 0!==n?n:Object.create(null))}},{}],18:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const n=e("readable-stream"),i={objectMode:!0},s={clean:!0};r.default=class{constructor(e){this.options=e||{},this.options=Object.assign(Object.assign({},s),e),this._inflights=new Map}put(e,t){return this._inflights.set(e.messageId,e),t&&t(),this}createStream(){const e=new n.Readable(i),t=[];let r=!1,s=0;return this._inflights.forEach(((e,r)=>{t.push(e)})),e._read=()=>{!r&&s{if(!r)return r=!0,setTimeout((()=>{e.emit("close")}),0),e},e}del(e,t){const r=this._inflights.get(e.messageId);return r?(this._inflights.delete(e.messageId),t(null,r)):t&&t(new Error("missing packet")),this}get(e,t){const r=this._inflights.get(e.messageId);return r?t(null,r):t&&t(new Error("missing packet")),this}close(e){this.options.clean&&(this._inflights=null),e&&e()}}},{"readable-stream":125}],19:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});r.default=class{constructor(e){this.aliasToTopic={},this.max=e}put(e,t){return!(0===t||t>this.max)&&(this.aliasToTopic[t]=e,this.length=Object.keys(this.aliasToTopic).length,!0)}getTopicByAlias(e){return this.aliasToTopic[e]}clear(){this.aliasToTopic={}}}},{}],20:[function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0});const i=n(e("lru-cache")),s=e("number-allocator");r.default=class{constructor(e){e>0&&(this.aliasToTopic=new i.default({max:e}),this.topicToAlias={},this.numberAllocator=new s.NumberAllocator(1,e),this.max=e,this.length=0)}put(e,t){if(0===t||t>this.max)return!1;const r=this.aliasToTopic.get(t);return r&&delete this.topicToAlias[r],this.aliasToTopic.set(t,e),this.topicToAlias[e]=t,this.numberAllocator.use(t),this.length=this.aliasToTopic.size,!0}getTopicByAlias(e){return this.aliasToTopic.get(e)}getAliasByTopic(e){const t=this.topicToAlias[e];return void 0!==t&&this.aliasToTopic.get(t),t}clear(){this.aliasToTopic.clear(),this.topicToAlias={},this.numberAllocator.clear(),this.length=0}getLruAlias(){const e=this.numberAllocator.firstVacant();return e||[...this.aliasToTopic.keys()][this.aliasToTopic.size-1]}}},{"lru-cache":72,"number-allocator":98}],21:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const n=e("number-allocator");r.default=class{constructor(){this.numberAllocator=new n.NumberAllocator(1,65535)}allocate(){return this.lastId=this.numberAllocator.alloc(),this.lastId}getLastAllocated(){return this.lastId}register(e){return this.numberAllocator.use(e)}deallocate(e){this.numberAllocator.free(e)}clear(){this.numberAllocator.clear()}}},{"number-allocator":98}],22:[function(e,t,r){"use strict";function n(e){const t=e.split("/");for(let e=0;e0?o-4:o;for(r=0;r>16&255,u[c++]=t>>8&255,u[c++]=255&t;2===a&&(t=i[e.charCodeAt(r)]<<2|i[e.charCodeAt(r+1)]>>4,u[c++]=255&t);1===a&&(t=i[e.charCodeAt(r)]<<10|i[e.charCodeAt(r+1)]<<4|i[e.charCodeAt(r+2)]>>2,u[c++]=t>>8&255,u[c++]=255&t);return u},r.fromByteArray=function(e){for(var t,r=e.length,i=r%3,s=[],o=16383,a=0,l=r-i;al?l:a+o));1===i?(t=e[r-1],s.push(n[t>>2]+n[t<<4&63]+"==")):2===i&&(t=(e[r-2]<<8)+e[r-1],s.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+"="));return s.join("")};for(var n=[],i=[],s="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0;a<64;++a)n[a]=o[a],i[o.charCodeAt(a)]=a;function l(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function u(e,t,r){for(var i,s,o=[],a=t;a>18&63]+n[s>>12&63]+n[s>>6&63]+n[63&s]);return o.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},{}],26:[function(e,t,r){},{}],27:[function(e,t,r){var n=e("buffer"),i=n.Buffer;function s(e,t){for(var r in e)t[r]=e[r]}function o(e,t,r){return i(e,t,r)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=n:(s(n,r),r.Buffer=o),s(i,o),o.from=function(e,t,r){if("number"==typeof e)throw new TypeError("Argument must not be a number");return i(e,t,r)},o.alloc=function(e,t,r){if("number"!=typeof e)throw new TypeError("Argument must be a number");var n=i(e);return void 0!==t?"string"==typeof r?n.fill(t,r):n.fill(t):n.fill(0),n},o.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return i(e)},o.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return n.SlowBuffer(e)}},{buffer:29}],28:[function(e,t,r){"use strict";var n=e("safe-buffer").Buffer,i=n.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function s(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(n.isEncoding===i||!i(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=l,this.end=u,t=4;break;case"utf8":this.fillLast=a,t=4;break;case"base64":this.text=c,this.end=h,t=3;break;default:return this.write=f,void(this.end=d)}this.lastNeed=0,this.lastTotal=0,this.lastChar=n.allocUnsafe(t)}function o(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function a(e){var t=this.lastTotal-this.lastNeed,r=function(e,t,r){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==r?r:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function l(e,t){if((e.length-t)%2==0){var r=e.toString("utf16le",t);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function u(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,r)}return t}function c(e,t){var r=(e.length-t)%3;return 0===r?e.toString("base64",t):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-r))}function h(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function f(e){return e.toString(this.encoding)}function d(e){return e&&e.length?this.write(e):""}r.StringDecoder=s,s.prototype.write=function(e){if(0===e.length)return"";var t,r;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r=0)return i>0&&(e.lastNeed=i-1),i;if(--n=0)return i>0&&(e.lastNeed=i-2),i;if(--n=0)return i>0&&(2===i?i=0:e.lastNeed=i-3),i;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=r;var n=e.length-(r-this.lastNeed);return e.copy(this.lastChar,0,n),e.toString("utf8",t,n)},s.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},{"safe-buffer":27}],29:[function(e,t,r){(function(t){(function(){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +"use strict";var t=e("base64-js"),n=e("ieee754");r.Buffer=o,r.SlowBuffer=function(e){+e!=e&&(e=0);return o.alloc(+e)},r.INSPECT_MAX_BYTES=50;var i=2147483647;function s(e){if(e>i)throw new RangeError('The value "'+e+'" is invalid for option "size"');var t=new Uint8Array(e);return t.__proto__=o.prototype,t}function o(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return u(e)}return a(e,t,r)}function a(e,t,r){if("string"==typeof e)return function(e,t){"string"==typeof t&&""!==t||(t="utf8");if(!o.isEncoding(t))throw new TypeError("Unknown encoding: "+t);var r=0|f(e,t),n=s(r),i=n.write(e,t);i!==r&&(n=n.slice(0,i));return n}(e,t);if(ArrayBuffer.isView(e))return c(e);if(null==e)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(F(e,ArrayBuffer)||e&&F(e.buffer,ArrayBuffer))return function(e,t,r){if(t<0||e.byteLength=i)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i.toString(16)+" bytes");return 0|e}function f(e,t){if(o.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||F(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);var r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var i=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return N(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return U(e).length;default:if(i)return n?-1:N(e).length;t=(""+t).toLowerCase(),i=!0}}function d(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return R(this,t,r);case"utf8":case"utf-8":return A(this,t,r);case"ascii":return T(this,t,r);case"latin1":case"binary":return I(this,t,r);case"base64":return E(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function p(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function b(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),W(r=+r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=o.from(t,n)),o.isBuffer(t))return 0===t.length?-1:g(e,t,r,n,i);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):g(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function g(e,t,r,n,i){var s,o=1,a=e.length,l=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;o=2,a/=2,l/=2,r/=2}function u(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}if(i){var c=-1;for(s=r;sa&&(r=a-l),s=r;s>=0;s--){for(var h=!0,f=0;fi&&(n=i):n=i;var s=t.length;n>s/2&&(n=s/2);for(var o=0;o>8,i=r%256,s.push(i),s.push(n);return s}(t,e.length-r),e,r,n)}function E(e,r,n){return 0===r&&n===e.length?t.fromByteArray(e):t.fromByteArray(e.slice(r,n))}function A(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i239?4:u>223?3:u>191?2:1;if(i+h<=r)switch(h){case 1:u<128&&(c=u);break;case 2:128==(192&(s=e[i+1]))&&(l=(31&u)<<6|63&s)>127&&(c=l);break;case 3:s=e[i+1],o=e[i+2],128==(192&s)&&128==(192&o)&&(l=(15&u)<<12|(63&s)<<6|63&o)>2047&&(l<55296||l>57343)&&(c=l);break;case 4:s=e[i+1],o=e[i+2],a=e[i+3],128==(192&s)&&128==(192&o)&&128==(192&a)&&(l=(15&u)<<18|(63&s)<<12|(63&o)<<6|63&a)>65535&&l<1114112&&(c=l)}null===c?(c=65533,h=1):c>65535&&(c-=65536,n.push(c>>>10&1023|55296),c=56320|1023&c),n.push(c),i+=h}return function(e){var t=e.length;if(t<=k)return String.fromCharCode.apply(String,e);var r="",n=0;for(;nt&&(e+=" ... "),""},o.prototype.compare=function(e,t,r,n,i){if(F(e,Uint8Array)&&(e=o.from(e,e.offset,e.byteLength)),!o.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(this===e)return 0;for(var s=(i>>>=0)-(n>>>=0),a=(r>>>=0)-(t>>>=0),l=Math.min(s,a),u=this.slice(n,i),c=e.slice(t,r),h=0;h>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-t;if((void 0===r||r>i)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var s=!1;;)switch(n){case"hex":return m(this,e,t,r);case"utf8":case"utf-8":return y(this,e,t,r);case"ascii":return _(this,e,t,r);case"latin1":case"binary":return w(this,e,t,r);case"base64":return v(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,e,t,r);default:if(s)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),s=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var k=4096;function T(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;in)&&(r=n);for(var i="",s=t;sr)throw new RangeError("Trying to access beyond buffer length")}function P(e,t,r,n,i,s){if(!o.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function x(e,t,r,n,i,s){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function M(e,t,r,i,s){return t=+t,r>>>=0,s||x(e,0,r,4),n.write(e,t,r,i,23,4),r+4}function B(e,t,r,i,s){return t=+t,r>>>=0,s||x(e,0,r,8),n.write(e,t,r,i,52,8),r+8}o.prototype.slice=function(e,t){var r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||C(e,t,this.length);for(var n=this[e],i=1,s=0;++s>>=0,t>>>=0,r||C(e,t,this.length);for(var n=this[e+--t],i=1;t>0&&(i*=256);)n+=this[e+--t]*i;return n},o.prototype.readUInt8=function(e,t){return e>>>=0,t||C(e,1,this.length),this[e]},o.prototype.readUInt16LE=function(e,t){return e>>>=0,t||C(e,2,this.length),this[e]|this[e+1]<<8},o.prototype.readUInt16BE=function(e,t){return e>>>=0,t||C(e,2,this.length),this[e]<<8|this[e+1]},o.prototype.readUInt32LE=function(e,t){return e>>>=0,t||C(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},o.prototype.readUInt32BE=function(e,t){return e>>>=0,t||C(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},o.prototype.readIntLE=function(e,t,r){e>>>=0,t>>>=0,r||C(e,t,this.length);for(var n=this[e],i=1,s=0;++s=(i*=128)&&(n-=Math.pow(2,8*t)),n},o.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||C(e,t,this.length);for(var n=t,i=1,s=this[e+--n];n>0&&(i*=256);)s+=this[e+--n]*i;return s>=(i*=128)&&(s-=Math.pow(2,8*t)),s},o.prototype.readInt8=function(e,t){return e>>>=0,t||C(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},o.prototype.readInt16LE=function(e,t){e>>>=0,t||C(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt16BE=function(e,t){e>>>=0,t||C(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt32LE=function(e,t){return e>>>=0,t||C(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},o.prototype.readInt32BE=function(e,t){return e>>>=0,t||C(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},o.prototype.readFloatLE=function(e,t){return e>>>=0,t||C(e,4,this.length),n.read(this,e,!0,23,4)},o.prototype.readFloatBE=function(e,t){return e>>>=0,t||C(e,4,this.length),n.read(this,e,!1,23,4)},o.prototype.readDoubleLE=function(e,t){return e>>>=0,t||C(e,8,this.length),n.read(this,e,!0,52,8)},o.prototype.readDoubleBE=function(e,t){return e>>>=0,t||C(e,8,this.length),n.read(this,e,!1,52,8)},o.prototype.writeUIntLE=function(e,t,r,n){(e=+e,t>>>=0,r>>>=0,n)||P(this,e,t,r,Math.pow(2,8*r)-1,0);var i=1,s=0;for(this[t]=255&e;++s>>=0,r>>>=0,n)||P(this,e,t,r,Math.pow(2,8*r)-1,0);var i=r-1,s=1;for(this[t+i]=255&e;--i>=0&&(s*=256);)this[t+i]=e/s&255;return t+r},o.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,1,255,0),this[t]=255&e,t+1},o.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},o.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},o.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},o.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},o.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var i=Math.pow(2,8*r-1);P(this,e,t,r,i-1,-i)}var s=0,o=1,a=0;for(this[t]=255&e;++s>0)-a&255;return t+r},o.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var i=Math.pow(2,8*r-1);P(this,e,t,r,i-1,-i)}var s=r-1,o=1,a=0;for(this[t+s]=255&e;--s>=0&&(o*=256);)e<0&&0===a&&0!==this[t+s+1]&&(a=1),this[t+s]=(e/o>>0)-a&255;return t+r},o.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},o.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},o.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},o.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},o.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},o.prototype.writeFloatLE=function(e,t,r){return M(this,e,t,!0,r)},o.prototype.writeFloatBE=function(e,t,r){return M(this,e,t,!1,r)},o.prototype.writeDoubleLE=function(e,t,r){return B(this,e,t,!0,r)},o.prototype.writeDoubleBE=function(e,t,r){return B(this,e,t,!1,r)},o.prototype.copy=function(e,t,r,n){if(!o.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t=0;--s)e[s+t]=this[s+r];else Uint8Array.prototype.set.call(e,this.subarray(r,n),t);return i},o.prototype.fill=function(e,t,r,n){if("string"==typeof e){if("string"==typeof t?(n=t,t=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!o.isEncoding(n))throw new TypeError("Unknown encoding: "+n);if(1===e.length){var i=e.charCodeAt(0);("utf8"===n&&i<128||"latin1"===n)&&(e=i)}}else"number"==typeof e&&(e&=255);if(t<0||this.length>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(s=t;s55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&s.push(239,191,189);continue}if(o+1===n){(t-=3)>-1&&s.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&s.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&s.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;s.push(r)}else if(r<2048){if((t-=2)<0)break;s.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;s.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;s.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return s}function U(e){return t.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(L,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function D(e,t,r,n){for(var i=0;i=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function F(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function W(e){return e!=e}}).call(this)}).call(this,e("buffer").Buffer)},{"base64-js":25,buffer:29,ieee754:50}],30:[function(e,t,r){(function(n){(function(){r.formatArgs=function(e){if(e[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+e[0]+(this.useColors?"%c ":" ")+"+"+t.exports.humanize(this.diff),!this.useColors)return;const r="color: "+this.color;e.splice(1,0,r,"color: inherit");let n=0,i=0;e[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(n++,"%c"===e&&(i=n))})),e.splice(i,0,r)},r.save=function(e){try{e?r.storage.setItem("debug",e):r.storage.removeItem("debug")}catch(e){}},r.load=function(){let e;try{e=r.storage.getItem("debug")}catch(e){}!e&&void 0!==n&&"env"in n&&(e=n.env.DEBUG);return e},r.useColors=function(){if("undefined"!=typeof window&&window.process&&("renderer"===window.process.type||window.process.__nwjs))return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},r.storage=function(){try{return localStorage}catch(e){}}(),r.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),r.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],r.log=console.debug||console.log||(()=>{}),t.exports=e("./common")(r);const{formatters:i}=t.exports;i.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}}).call(this)}).call(this,e("_process"))},{"./common":31,_process:102}],31:[function(e,t,r){t.exports=function(t){function r(e){let t,i,s,o=null;function a(...e){if(!a.enabled)return;const n=a,i=Number(new Date),s=i-(t||i);n.diff=s,n.prev=t,n.curr=i,t=i,e[0]=r.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let o=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((t,i)=>{if("%%"===t)return"%";o++;const s=r.formatters[i];if("function"==typeof s){const r=e[o];t=s.call(n,r),e.splice(o,1),o--}return t})),r.formatArgs.call(n,e);(n.log||r.log).apply(n,e)}return a.namespace=e,a.useColors=r.useColors(),a.color=r.selectColor(e),a.extend=n,a.destroy=r.destroy,Object.defineProperty(a,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==o?o:(i!==r.namespaces&&(i=r.namespaces,s=r.enabled(e)),s),set:e=>{o=e}}),"function"==typeof r.init&&r.init(a),a}function n(e,t){const n=r(this.namespace+(void 0===t?":":t)+e);return n.log=this.log,n}function i(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return r.debug=r,r.default=r,r.coerce=function(e){if(e instanceof Error)return e.stack||e.message;return e},r.disable=function(){const e=[...r.names.map(i),...r.skips.map(i).map((e=>"-"+e))].join(",");return r.enable(""),e},r.enable=function(e){let t;r.save(e),r.namespaces=e,r.names=[],r.skips=[];const n=("string"==typeof e?e:"").split(/[\s,]+/),i=n.length;for(t=0;t{r[e]=t[e]})),r.names=[],r.skips=[],r.formatters={},r.selectColor=function(e){let t=0;for(let r=0;r2?"one of ".concat(t," ").concat(e.slice(0,r-1).join(", "),", or ")+e[r-1]:2===r?"one of ".concat(t," ").concat(e[0]," or ").concat(e[1]):"of ".concat(t," ").concat(e[0])}return"of ".concat(t," ").concat(String(e))}i("ERR_INVALID_OPT_VALUE",(function(e,t){return'The value "'+t+'" is invalid for option "'+e+'"'}),TypeError),i("ERR_INVALID_ARG_TYPE",(function(e,t,r){var n,i,o,a;if("string"==typeof t&&(i="not ",t.substr(!o||o<0?0:+o,i.length)===i)?(n="must not be",t=t.replace(/^not /,"")):n="must be",function(e,t,r){return(void 0===r||r>e.length)&&(r=e.length),e.substring(r-t.length,r)===t}(e," argument"))a="The ".concat(e," ").concat(n," ").concat(s(t,"type"));else{var l=function(e,t,r){return"number"!=typeof r&&(r=0),!(r+t.length>e.length)&&-1!==e.indexOf(t,r)}(e,".")?"property":"argument";a='The "'.concat(e,'" ').concat(l," ").concat(n," ").concat(s(t,"type"))}return a+=". Received type ".concat(typeof r)}),TypeError),i("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),i("ERR_METHOD_NOT_IMPLEMENTED",(function(e){return"The "+e+" method is not implemented"})),i("ERR_STREAM_PREMATURE_CLOSE","Premature close"),i("ERR_STREAM_DESTROYED",(function(e){return"Cannot call "+e+" after a stream was destroyed"})),i("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),i("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),i("ERR_STREAM_WRITE_AFTER_END","write after end"),i("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),i("ERR_UNKNOWN_ENCODING",(function(e){return"Unknown encoding: "+e}),TypeError),i("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),t.exports.codes=n},{}],34:[function(e,t,r){(function(r){(function(){"use strict";var n=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};t.exports=u;var i=e("./_stream_readable"),s=e("./_stream_writable");e("inherits")(u,i);for(var o=n(s.prototype),a=0;a0)if("string"==typeof t||o.objectMode||Object.getPrototypeOf(t)===a.prototype||(t=function(e){return a.from(e)}(t)),n)o.endEmitted?S(e,new v):I(e,o,t,!0);else if(o.ended)S(e,new _);else{if(o.destroyed)return!1;o.reading=!1,o.decoder&&!r?(t=o.decoder.write(t),o.objectMode||0!==t.length?I(e,o,t,!1):x(e,o)):I(e,o,t,!1)}else n||(o.reading=!1,x(e,o));return!o.ended&&(o.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=R?e=R:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function C(e){var t=e._readableState;u("emitReadable",t.needReadable,t.emittedReadable),t.needReadable=!1,t.emittedReadable||(u("emitReadable",t.flowing),t.emittedReadable=!0,r.nextTick(P,e))}function P(e){var t=e._readableState;u("emitReadable_",t.destroyed,t.length,t.ended),t.destroyed||!t.length&&!t.ended||(e.emit("readable"),t.emittedReadable=!1),t.needReadable=!t.flowing&&!t.ended&&t.length<=t.highWaterMark,N(e)}function x(e,t){t.readingMore||(t.readingMore=!0,r.nextTick(M,e,t))}function M(e,t){for(;!t.reading&&!t.ended&&(t.length0,t.resumeScheduled&&!t.paused?t.flowing=!0:e.listenerCount("data")>0&&e.resume()}function L(e){u("readable nexttick read 0"),e.read(0)}function j(e,t){u("resume",t.reading),t.reading||e.read(0),t.resumeScheduled=!1,e.emit("resume"),N(e),t.flowing&&!t.reading&&e.read(0)}function N(e){var t=e._readableState;for(u("flow",t.flowing);t.flowing&&null!==e.read(););}function U(e,t){return 0===t.length?null:(t.objectMode?r=t.buffer.shift():!e||e>=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.first():t.buffer.concat(t.length),t.buffer.clear()):r=t.buffer.consume(e,t.decoder),r);var r}function D(e){var t=e._readableState;u("endReadable",t.endEmitted),t.endEmitted||(t.ended=!0,r.nextTick(F,t,e))}function F(e,t){if(u("endReadableNT",e.endEmitted,e.length),!e.endEmitted&&0===e.length&&(e.endEmitted=!0,t.readable=!1,t.emit("end"),e.autoDestroy)){var r=t._writableState;(!r||r.autoDestroy&&r.finished)&&t.destroy()}}function W(e,t){for(var r=0,n=e.length;r=t.highWaterMark:t.length>0)||t.ended))return u("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?D(this):C(this),null;if(0===(e=O(e,t))&&t.ended)return 0===t.length&&D(this),null;var n,i=t.needReadable;return u("need readable",i),(0===t.length||t.length-e0?U(e,t):null)?(t.needReadable=t.length<=t.highWaterMark,e=0):(t.length-=e,t.awaitDrain=0),0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&D(this)),null!==n&&this.emit("data",n),n},k.prototype._read=function(e){S(this,new w("_read()"))},k.prototype.pipe=function(e,t){var n=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=e;break;case 1:i.pipes=[i.pipes,e];break;default:i.pipes.push(e)}i.pipesCount+=1,u("pipe count=%d opts=%j",i.pipesCount,t);var o=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?l:g;function a(t,r){u("onunpipe"),t===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,u("cleanup"),e.removeListener("close",p),e.removeListener("finish",b),e.removeListener("drain",c),e.removeListener("error",d),e.removeListener("unpipe",a),n.removeListener("end",l),n.removeListener("end",g),n.removeListener("data",f),h=!0,!i.awaitDrain||e._writableState&&!e._writableState.needDrain||c())}function l(){u("onend"),e.end()}i.endEmitted?r.nextTick(o):n.once("end",o),e.on("unpipe",a);var c=function(e){return function(){var t=e._readableState;u("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,"data")&&(t.flowing=!0,N(e))}}(n);e.on("drain",c);var h=!1;function f(t){u("ondata");var r=e.write(t);u("dest.write",r),!1===r&&((1===i.pipesCount&&i.pipes===e||i.pipesCount>1&&-1!==W(i.pipes,e))&&!h&&(u("false write response, pause",i.awaitDrain),i.awaitDrain++),n.pause())}function d(t){u("onerror",t),g(),e.removeListener("error",d),0===s(e,"error")&&S(e,t)}function p(){e.removeListener("finish",b),g()}function b(){u("onfinish"),e.removeListener("close",p),g()}function g(){u("unpipe"),n.unpipe(e)}return n.on("data",f),function(e,t,r){if("function"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?Array.isArray(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,"error",d),e.once("close",p),e.once("finish",b),e.emit("pipe",n),i.flowing||(u("pipe resume"),n.resume()),e},k.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,r)),this;if(!e){var n=t.pipes,i=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var s=0;s0,!1!==i.flowing&&this.resume()):"readable"===e&&(i.endEmitted||i.readableListening||(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,u("on readable",i.length,i.reading),i.length?C(this):i.reading||r.nextTick(L,this))),n},k.prototype.addListener=k.prototype.on,k.prototype.removeListener=function(e,t){var n=o.prototype.removeListener.call(this,e,t);return"readable"===e&&r.nextTick(B,this),n},k.prototype.removeAllListeners=function(e){var t=o.prototype.removeAllListeners.apply(this,arguments);return"readable"!==e&&void 0!==e||r.nextTick(B,this),t},k.prototype.resume=function(){var e=this._readableState;return e.flowing||(u("resume"),e.flowing=!e.readableListening,function(e,t){t.resumeScheduled||(t.resumeScheduled=!0,r.nextTick(j,e,t))}(this,e)),e.paused=!1,this},k.prototype.pause=function(){return u("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(u("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this},k.prototype.wrap=function(e){var t=this,r=this._readableState,n=!1;for(var i in e.on("end",(function(){if(u("wrapped end"),r.decoder&&!r.ended){var e=r.decoder.end();e&&e.length&&t.push(e)}t.push(null)})),e.on("data",(function(i){(u("wrapped data"),r.decoder&&(i=r.decoder.write(i)),r.objectMode&&null==i)||(r.objectMode||i&&i.length)&&(t.push(i)||(n=!0,e.pause()))})),e)void 0===this[i]&&"function"==typeof e[i]&&(this[i]=function(t){return function(){return e[t].apply(e,arguments)}}(i));for(var s=0;s-1))throw new v(e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(k.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(k.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),k.prototype._write=function(e,t,r){r(new b("_write()"))},k.prototype._writev=null,k.prototype.end=function(e,t,n){var i=this._writableState;return"function"==typeof e?(n=e,e=null,t=null):"function"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),i.corked&&(i.corked=1,this.uncork()),i.ending||function(e,t,n){t.ending=!0,P(e,t),n&&(t.finished?r.nextTick(n):e.once("finish",n));t.ended=!0,e.writable=!1}(this,i,n),this},Object.defineProperty(k.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(k.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),k.prototype.destroy=h.destroy,k.prototype._undestroy=h.undestroy,k.prototype._destroy=function(e,t){t(e)}}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../errors":33,"./_stream_duplex":34,"./internal/streams/destroy":41,"./internal/streams/state":45,"./internal/streams/stream":46,_process:102,buffer:29,inherits:51,"util-deprecate":139}],39:[function(e,t,r){(function(r){(function(){"use strict";var n;function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var s=e("./end-of-stream"),o=Symbol("lastResolve"),a=Symbol("lastReject"),l=Symbol("error"),u=Symbol("ended"),c=Symbol("lastPromise"),h=Symbol("handlePromise"),f=Symbol("stream");function d(e,t){return{value:e,done:t}}function p(e){var t=e[o];if(null!==t){var r=e[f].read();null!==r&&(e[c]=null,e[o]=null,e[a]=null,t(d(r,!1)))}}function b(e){r.nextTick(p,e)}var g=Object.getPrototypeOf((function(){})),m=Object.setPrototypeOf((i(n={get stream(){return this[f]},next:function(){var e=this,t=this[l];if(null!==t)return Promise.reject(t);if(this[u])return Promise.resolve(d(void 0,!0));if(this[f].destroyed)return new Promise((function(t,n){r.nextTick((function(){e[l]?n(e[l]):t(d(void 0,!0))}))}));var n,i=this[c];if(i)n=new Promise(function(e,t){return function(r,n){e.then((function(){t[u]?r(d(void 0,!0)):t[h](r,n)}),n)}}(i,this));else{var s=this[f].read();if(null!==s)return Promise.resolve(d(s,!1));n=new Promise(this[h])}return this[c]=n,n}},Symbol.asyncIterator,(function(){return this})),i(n,"return",(function(){var e=this;return new Promise((function(t,r){e[f].destroy(null,(function(e){e?r(e):t(d(void 0,!0))}))}))})),n),g);t.exports=function(e){var t,r=Object.create(m,(i(t={},f,{value:e,writable:!0}),i(t,o,{value:null,writable:!0}),i(t,a,{value:null,writable:!0}),i(t,l,{value:null,writable:!0}),i(t,u,{value:e._readableState.endEmitted,writable:!0}),i(t,h,{value:function(e,t){var n=r[f].read();n?(r[c]=null,r[o]=null,r[a]=null,e(d(n,!1))):(r[o]=e,r[a]=t)},writable:!0}),t));return r[c]=null,s(e,(function(e){if(e&&"ERR_STREAM_PREMATURE_CLOSE"!==e.code){var t=r[a];return null!==t&&(r[c]=null,r[o]=null,r[a]=null,t(e)),void(r[l]=e)}var n=r[o];null!==n&&(r[c]=null,r[o]=null,r[a]=null,n(d(void 0,!0))),r[u]=!0})),e.on("readable",b.bind(null,r)),r}}).call(this)}).call(this,e("_process"))},{"./end-of-stream":42,_process:102}],40:[function(e,t,r){"use strict";function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){for(var r=0;r0?this.tail.next=t:this.head=t,this.tail=t,++this.length}},{key:"unshift",value:function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length}},{key:"shift",value:function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(e){if(0===this.length)return"";for(var t=this.head,r=""+t.data;t=t.next;)r+=e+t.data;return r}},{key:"concat",value:function(e){if(0===this.length)return o.alloc(0);for(var t,r,n,i=o.allocUnsafe(e>>>0),s=this.head,a=0;s;)t=s.data,r=i,n=a,o.prototype.copy.call(t,r,n),a+=s.data.length,s=s.next;return i}},{key:"consume",value:function(e,t){var r;return ei.length?i.length:e;if(s===i.length?n+=i:n+=i.slice(0,e),0==(e-=s)){s===i.length?(++r,t.next?this.head=t.next:this.head=this.tail=null):(this.head=t,t.data=i.slice(s));break}++r}return this.length-=r,n}},{key:"_getBuffer",value:function(e){var t=o.allocUnsafe(e),r=this.head,n=1;for(r.data.copy(t),e-=r.data.length;r=r.next;){var i=r.data,s=e>i.length?i.length:e;if(i.copy(t,t.length-e,0,s),0==(e-=s)){s===i.length?(++n,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=i.slice(s));break}++n}return this.length-=n,t}},{key:l,value:function(e,t){return a(this,function(e){for(var t=1;t0,(function(e){c||(c=e),e&&f.forEach(l),s||(f.forEach(l),h(c))}))}));return r.reduce(u)}},{"../../../errors":33,"./end-of-stream":42}],45:[function(e,t,r){"use strict";var n=e("../../../errors").codes.ERR_INVALID_OPT_VALUE;t.exports={getHighWaterMark:function(e,t,r,i){var s=function(e,t,r){return null!=e.highWaterMark?e.highWaterMark:t?e[r]:null}(t,i,r);if(null!=s){if(!isFinite(s)||Math.floor(s)!==s||s<0)throw new n(i?r:"highWaterMark",s);return Math.floor(s)}return e.objectMode?16:16384}}},{"../../../errors":33}],46:[function(e,t,r){t.exports=e("events").EventEmitter},{events:49}],47:[function(e,t,r){(r=t.exports=e("./lib/_stream_readable.js")).Stream=r,r.Readable=r,r.Writable=e("./lib/_stream_writable.js"),r.Duplex=e("./lib/_stream_duplex.js"),r.Transform=e("./lib/_stream_transform.js"),r.PassThrough=e("./lib/_stream_passthrough.js"),r.finished=e("./lib/internal/streams/end-of-stream.js"),r.pipeline=e("./lib/internal/streams/pipeline.js")},{"./lib/_stream_duplex.js":34,"./lib/_stream_passthrough.js":35,"./lib/_stream_readable.js":36,"./lib/_stream_transform.js":37,"./lib/_stream_writable.js":38,"./lib/internal/streams/end-of-stream.js":42,"./lib/internal/streams/pipeline.js":44}],48:[function(e,t,r){(function(r){(function(){var n=e("once"),i=function(){},s=function(e,t,o){if("function"==typeof t)return s(e,null,t);t||(t={}),o=n(o||i);var a=e._writableState,l=e._readableState,u=t.readable||!1!==t.readable&&e.readable,c=t.writable||!1!==t.writable&&e.writable,h=!1,f=function(){e.writable||d()},d=function(){c=!1,u||o.call(e)},p=function(){u=!1,c||o.call(e)},b=function(t){o.call(e,t?new Error("exited with error code: "+t):null)},g=function(t){o.call(e,t)},m=function(){r.nextTick(y)},y=function(){if(!h)return(!u||l&&l.ended&&!l.destroyed)&&(!c||a&&a.ended&&!a.destroyed)?void 0:o.call(e,new Error("premature close"))},_=function(){e.req.on("finish",d)};return!function(e){return e.setHeader&&"function"==typeof e.abort}(e)?c&&!a&&(e.on("end",f),e.on("close",f)):(e.on("complete",d),e.on("abort",m),e.req?_():e.on("request",_)),function(e){return e.stdio&&Array.isArray(e.stdio)&&3===e.stdio.length}(e)&&e.on("exit",b),e.on("end",p),e.on("finish",d),!1!==t.error&&e.on("error",g),e.on("close",m),function(){h=!0,e.removeListener("complete",d),e.removeListener("abort",m),e.removeListener("request",_),e.req&&e.req.removeListener("finish",d),e.removeListener("end",f),e.removeListener("close",f),e.removeListener("finish",d),e.removeListener("exit",b),e.removeListener("end",p),e.removeListener("error",g),e.removeListener("close",m)}};t.exports=s}).call(this)}).call(this,e("_process"))},{_process:102,once:100}],49:[function(e,t,r){"use strict";var n,i="object"==typeof Reflect?Reflect:null,s=i&&"function"==typeof i.apply?i.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)};n=i&&"function"==typeof i.ownKeys?i.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var o=Number.isNaN||function(e){return e!=e};function a(){a.init.call(this)}t.exports=a,t.exports.once=function(e,t){return new Promise((function(r,n){function i(r){e.removeListener(t,s),n(r)}function s(){"function"==typeof e.removeListener&&e.removeListener("error",i),r([].slice.call(arguments))}m(e,t,s,{once:!0}),"error"!==t&&function(e,t,r){"function"==typeof e.on&&m(e,"error",t,r)}(e,i,{once:!0})}))},a.EventEmitter=a,a.prototype._events=void 0,a.prototype._eventsCount=0,a.prototype._maxListeners=void 0;var l=10;function u(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function c(e){return void 0===e._maxListeners?a.defaultMaxListeners:e._maxListeners}function h(e,t,r,n){var i,s,o,a;if(u(r),void 0===(s=e._events)?(s=e._events=Object.create(null),e._eventsCount=0):(void 0!==s.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),s=e._events),o=s[t]),void 0===o)o=s[t]=r,++e._eventsCount;else if("function"==typeof o?o=s[t]=n?[r,o]:[o,r]:n?o.unshift(r):o.push(r),(i=c(e))>0&&o.length>i&&!o.warned){o.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=o.length,a=l,console&&console.warn&&console.warn(a)}return e}function f(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function d(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},i=f.bind(n);return i.listener=r,n.wrapFn=i,i}function p(e,t,r){var n=e._events;if(void 0===n)return[];var i=n[t];return void 0===i?[]:"function"==typeof i?r?[i.listener||i]:[i]:r?function(e){for(var t=new Array(e.length),r=0;r0&&(o=t[0]),o instanceof Error)throw o;var a=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw a.context=o,a}var l=i[e];if(void 0===l)return!1;if("function"==typeof l)s(l,this,t);else{var u=l.length,c=g(l,u);for(r=0;r=0;s--)if(r[s]===t||r[s].listener===t){o=r[s].listener,i=s;break}if(i<0)return this;0===i?r.shift():function(e,t){for(;t+1=0;n--)this.removeListener(e,t[n]);return this},a.prototype.listeners=function(e){return p(this,e,!0)},a.prototype.rawListeners=function(e){return p(this,e,!1)},a.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):b.call(e,t)},a.prototype.listenerCount=b,a.prototype.eventNames=function(){return this._eventsCount>0?n(this._events):[]}},{}],50:[function(e,t,r){ +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ +r.read=function(e,t,r,n,i){var s,o,a=8*i-n-1,l=(1<>1,c=-7,h=r?i-1:0,f=r?-1:1,d=e[t+h];for(h+=f,s=d&(1<<-c)-1,d>>=-c,c+=a;c>0;s=256*s+e[t+h],h+=f,c-=8);for(o=s&(1<<-c)-1,s>>=-c,c+=n;c>0;o=256*o+e[t+h],h+=f,c-=8);if(0===s)s=1-u;else{if(s===l)return o?NaN:1/0*(d?-1:1);o+=Math.pow(2,n),s-=u}return(d?-1:1)*o*Math.pow(2,s-n)},r.write=function(e,t,r,n,i,s){var o,a,l,u=8*s-i-1,c=(1<>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=n?0:s-1,p=n?1:-1,b=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,o=c):(o=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-o))<1&&(o--,l*=2),(t+=o+h>=1?f/l:f*Math.pow(2,1-h))*l>=2&&(o++,l/=2),o+h>=c?(a=0,o=c):o+h>=1?(a=(t*l-1)*Math.pow(2,i),o+=h):(a=t*Math.pow(2,h-1)*Math.pow(2,i),o=0));i>=8;e[r+d]=255&a,d+=p,a/=256,i-=8);for(o=o<0;e[r+d]=255&o,d+=p,o/=256,u-=8);e[r+d-p]|=128*b}},{}],51:[function(e,t,r){"function"==typeof Object.create?t.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:t.exports=function(e,t){if(t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}}},{}],52:[function(e,t,r){"use strict";Object.defineProperty(r,"t",{value:!0}),r.ContainerIterator=r.Container=r.Base=void 0;r.ContainerIterator=class{constructor(e=0){this.iteratorType=e}equals(e){return this.o===e.o}};class n{constructor(){this.i=0}get length(){return this.i}size(){return this.i}empty(){return 0===this.i}}r.Base=n;r.Container=class extends n{}},{}],53:[function(e,t,r){"use strict";Object.defineProperty(r,"t",{value:!0}),r.HashContainerIterator=r.HashContainer=void 0;var n,i=e("../../ContainerBase"),s=(n=e("../../../utils/checkObject"))&&n.t?n:{default:n},o=e("../../../utils/throwError");class a extends i.ContainerIterator{constructor(e,t,r){super(r),this.o=e,this.h=t,0===this.iteratorType?(this.pre=function(){return this.o.L===this.h&&(0,o.throwIteratorAccessError)(),this.o=this.o.L,this},this.next=function(){return this.o===this.h&&(0,o.throwIteratorAccessError)(),this.o=this.o.B,this}):(this.pre=function(){return this.o.B===this.h&&(0,o.throwIteratorAccessError)(),this.o=this.o.B,this},this.next=function(){return this.o===this.h&&(0,o.throwIteratorAccessError)(),this.o=this.o.L,this})}}r.HashContainerIterator=a;class l extends i.Container{constructor(){super(),this.H=[],this.g={},this.HASH_TAG=Symbol("@@HASH_TAG"),Object.setPrototypeOf(this.g,null),this.h={},this.h.L=this.h.B=this.p=this._=this.h}V(e){const{L:t,B:r}=e;t.B=r,r.L=t,e===this.p&&(this.p=r),e===this._&&(this._=t),this.i-=1}M(e,t,r){let n;if(void 0===r&&(r=(0,s.default)(e)),r){const r=e[this.HASH_TAG];if(void 0!==r)return this.H[r].l=t,this.i;Object.defineProperty(e,this.HASH_TAG,{value:this.H.length,configurable:!0}),n={u:e,l:t,L:this._,B:this.h},this.H.push(n)}else{const r=this.g[e];if(r)return r.l=t,this.i;n={u:e,l:t,L:this._,B:this.h},this.g[e]=n}return 0===this.i?(this.p=n,this.h.B=n):this._.B=n,this._=n,this.h.L=n,++this.i}I(e,t){if(void 0===t&&(t=(0,s.default)(e)),t){const t=e[this.HASH_TAG];return void 0===t?this.h:this.H[t]}return this.g[e]||this.h}clear(){const e=this.HASH_TAG;this.H.forEach((function(t){delete t.u[e]})),this.H=[],this.g={},Object.setPrototypeOf(this.g,null),this.i=0,this.p=this._=this.h.L=this.h.B=this.h}eraseElementByKey(e,t){let r;if(void 0===t&&(t=(0,s.default)(e)),t){const t=e[this.HASH_TAG];if(void 0===t)return!1;delete e[this.HASH_TAG],r=this.H[t],delete this.H[t]}else{if(r=this.g[e],void 0===r)return!1;delete this.g[e]}return this.V(r),!0}eraseElementByIterator(e){const t=e.o;return t===this.h&&(0,o.throwIteratorAccessError)(),this.V(t),e.next()}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let t=this.p;for(;e--;)t=t.B;return this.V(t),this.i}}r.HashContainer=l},{"../../../utils/checkObject":70,"../../../utils/throwError":71,"../../ContainerBase":52}],54:[function(e,t,r){"use strict";Object.defineProperty(r,"t",{value:!0}),r.default=void 0;var n,i=e("./Base"),s=(n=e("../../utils/checkObject"))&&n.t?n:{default:n},o=e("../../utils/throwError");class a extends i.HashContainerIterator{constructor(e,t,r,n){super(e,t,n),this.container=r}get pointer(){this.o===this.h&&(0,o.throwIteratorAccessError)();const e=this;return new Proxy([],{get:(t,r)=>"0"===r?e.o.u:"1"===r?e.o.l:void 0,set(t,r,n){if("1"!==r)throw new TypeError("props must be 1");return e.o.l=n,!0}})}copy(){return new a(this.o,this.h,this.container,this.iteratorType)}}class l extends i.HashContainer{constructor(e=[]){super();const t=this;e.forEach((function(e){t.setElement(e[0],e[1])}))}begin(){return new a(this.p,this.h,this)}end(){return new a(this.h,this.h,this)}rBegin(){return new a(this._,this.h,this,1)}rEnd(){return new a(this.h,this.h,this,1)}front(){if(0!==this.i)return[this.p.u,this.p.l]}back(){if(0!==this.i)return[this._.u,this._.l]}setElement(e,t,r){return this.M(e,t,r)}getElementByKey(e,t){if(void 0===t&&(t=(0,s.default)(e)),t){const t=e[this.HASH_TAG];return void 0!==t?this.H[t].l:void 0}const r=this.g[e];return r?r.l:void 0}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let t=this.p;for(;e--;)t=t.B;return[t.u,t.l]}find(e,t){const r=this.I(e,t);return new a(r,this.h,this)}forEach(e){let t=0,r=this.p;for(;r!==this.h;)e([r.u,r.l],t++,this),r=r.B}[Symbol.iterator](){return function*(){let e=this.p;for(;e!==this.h;)yield[e.u,e.l],e=e.B}.bind(this)()}}var u=l;r.default=u},{"../../utils/checkObject":70,"../../utils/throwError":71,"./Base":53}],55:[function(e,t,r){"use strict";Object.defineProperty(r,"t",{value:!0}),r.default=void 0;var n=e("./Base"),i=e("../../utils/throwError");class s extends n.HashContainerIterator{constructor(e,t,r,n){super(e,t,n),this.container=r}get pointer(){return this.o===this.h&&(0,i.throwIteratorAccessError)(),this.o.u}copy(){return new s(this.o,this.h,this.container,this.iteratorType)}}class o extends n.HashContainer{constructor(e=[]){super();const t=this;e.forEach((function(e){t.insert(e)}))}begin(){return new s(this.p,this.h,this)}end(){return new s(this.h,this.h,this)}rBegin(){return new s(this._,this.h,this,1)}rEnd(){return new s(this.h,this.h,this,1)}front(){return this.p.u}back(){return this._.u}insert(e,t){return this.M(e,void 0,t)}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let t=this.p;for(;e--;)t=t.B;return t.u}find(e,t){const r=this.I(e,t);return new s(r,this.h,this)}forEach(e){let t=0,r=this.p;for(;r!==this.h;)e(r.u,t++,this),r=r.B}[Symbol.iterator](){return function*(){let e=this.p;for(;e!==this.h;)yield e.u,e=e.B}.bind(this)()}}var a=o;r.default=a},{"../../utils/throwError":71,"./Base":53}],56:[function(e,t,r){"use strict";Object.defineProperty(r,"t",{value:!0}),r.default=void 0;var n=e("../ContainerBase");class i extends n.Base{constructor(e=[],t=function(e,t){return e>t?-1:e>1;for(let e=this.i-1>>1;e>=0;--e)this.k(e,n)}m(e){const t=this.C[e];for(;e>0;){const r=e-1>>1,n=this.C[r];if(this.v(n,t)<=0)break;this.C[e]=n,e=r}this.C[e]=t}k(e,t){const r=this.C[e];for(;e0&&(t=n,i=this.C[n]),this.v(i,r)>=0)break;this.C[e]=i,e=t}this.C[e]=r}clear(){this.i=0,this.C.length=0}push(e){this.C.push(e),this.m(this.i),this.i+=1}pop(){if(0===this.i)return;const e=this.C[0],t=this.C.pop();return this.i-=1,this.i&&(this.C[0]=t,this.k(0,this.i>>1)),e}top(){return this.C[0]}find(e){return this.C.indexOf(e)>=0}remove(e){const t=this.C.indexOf(e);return!(t<0)&&(0===t?this.pop():t===this.i-1?(this.C.pop(),this.i-=1):(this.C.splice(t,1,this.C.pop()),this.i-=1,this.m(t),this.k(t,this.i>>1)),!0)}updateItem(e){const t=this.C.indexOf(e);return!(t<0)&&(this.m(t),this.k(t,this.i>>1),!0)}toArray(){return[...this.C]}}var s=i;r.default=s},{"../ContainerBase":52}],57:[function(e,t,r){"use strict";Object.defineProperty(r,"t",{value:!0}),r.default=void 0;var n=e("../ContainerBase");class i extends n.Base{constructor(e=[]){super(),this.j=0,this.q=[];const t=this;e.forEach((function(e){t.push(e)}))}clear(){this.q=[],this.i=this.j=0}push(e){const t=this.q.length;if(this.j/t>.5&&this.j+this.i>=t&&t>4096){const t=this.i;for(let e=0;e{if("number"==typeof e.length)return e.length;if("number"==typeof e.size)return e.size;if("function"==typeof e.size)return e.size();throw new TypeError("Cannot get the length or size of the container")})();this.F=t,this.P=Math.max(Math.ceil(r/this.F),1);for(let e=0;e>1)-(n>>1),this.D=this.N=this.F-r%this.F>>1;const i=this;e.forEach((function(e){i.pushBack(e)}))}T(){const e=[],t=Math.max(this.P>>1,1);for(let r=0;r>1}begin(){return new o(0,this)}end(){return new o(this.i,this)}rBegin(){return new o(this.i-1,this,1)}rEnd(){return new o(-1,this,1)}front(){if(0!==this.i)return this.A[this.j][this.D]}back(){if(0!==this.i)return this.A[this.R][this.N]}pushBack(e){return this.i&&(this.N0?this.N-=1:this.R>0?(this.R-=1,this.N=this.F-1):(this.R=this.P-1,this.N=this.F-1)),this.i-=1,e}pushFront(e){return this.i&&(this.D>0?this.D-=1:this.j>0?(this.j-=1,this.D=this.F-1):(this.j=this.P-1,this.D=this.F-1),this.j===this.R&&this.D===this.N&&this.T()),this.i+=1,this.A[this.j][this.D]=e,this.i}popFront(){if(0===this.i)return;const e=this.A[this.j][this.D];return 1!==this.i&&(this.Dthis.i-1)throw new RangeError;const{curNodeBucketIndex:t,curNodePointerIndex:r}=this.O(e);return this.A[t][r]}setElementByPos(e,t){if(e<0||e>this.i-1)throw new RangeError;const{curNodeBucketIndex:r,curNodePointerIndex:n}=this.O(e);this.A[r][n]=t}insert(e,t,r=1){if(e<0||e>this.i)throw new RangeError;if(0===e)for(;r--;)this.pushFront(t);else if(e===this.i)for(;r--;)this.pushBack(t);else{const n=[];for(let t=e;tthis.i-1)throw new RangeError;if(0===e)this.popFront();else if(e===this.i-1)this.popBack();else{const t=[];for(let r=e+1;re;)this.popBack();return this.i}sort(e){const t=[];for(let e=0;ethis.i-1)throw new RangeError;let t=this.p;for(;e--;)t=t.B;return t.l}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let t=this.p;for(;e--;)t=t.B;return this.V(t),this.i}eraseElementByValue(e){let t=this.p;for(;t!==this.h;)t.l===e&&this.V(t),t=t.B;return this.i}eraseElementByIterator(e){const t=e.o;return t===this.h&&(0,o.throwIteratorAccessError)(),e=e.next(),this.V(t),e}pushBack(e){return this.G(e,this._),this.i}popBack(){if(0===this.i)return;const e=this._.l;return this.V(this._),e}pushFront(e){return this.G(e,this.h),this.i}popFront(){if(0===this.i)return;const e=this.p.l;return this.V(this.p),e}setElementByPos(e,t){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;r.l=t}insert(e,t,r=1){if(e<0||e>this.i)throw new RangeError;if(r<=0)return this.i;if(0===e)for(;r--;)this.pushFront(t);else if(e===this.i)for(;r--;)this.pushBack(t);else{let n=this.p;for(let t=1;tthis.i-1)throw new RangeError;return this.J[e]}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;return this.J.splice(e,1),this.i-=1,this.i}eraseElementByValue(e){let t=0;for(let r=0;rthis.i-1)throw new RangeError;this.J[e]=t}insert(e,t,r=1){if(e<0||e>this.i)throw new RangeError;return this.J.splice(e,0,...new Array(r).fill(t)),this.i+=r,this.i}find(e){for(let t=0;tt?1:0},t=!1){super(),this.Y=void 0,this.v=e,t?(this.re=n.TreeNodeEnableIndex,this.M=function(e,t,r){const n=this.ne(e,t,r);if(n){let e=n.tt;for(;e!==this.h;)e.rt+=1,e=e.tt;const t=this.he(n);if(t){const{parentNode:e,grandParent:r,curNode:n}=t;e.ie(),r.ie(),n.ie()}}return this.i},this.V=function(e){let t=this.fe(e);for(;t!==this.h;)t.rt-=1,t=t.tt}):(this.re=n.TreeNode,this.M=function(e,t,r){const n=this.ne(e,t,r);return n&&this.he(n),this.i},this.V=this.fe),this.h=new this.re}X(e,t){let r=this.h;for(;e;){const n=this.v(e.u,t);if(n<0)e=e.W;else{if(!(n>0))return e;r=e,e=e.U}}return r}Z(e,t){let r=this.h;for(;e;){this.v(e.u,t)<=0?e=e.W:(r=e,e=e.U)}return r}$(e,t){let r=this.h;for(;e;){const n=this.v(e.u,t);if(n<0)r=e,e=e.W;else{if(!(n>0))return e;e=e.U}}return r}rr(e,t){let r=this.h;for(;e;){this.v(e.u,t)<0?(r=e,e=e.W):e=e.U}return r}ue(e){for(;;){const t=e.tt;if(t===this.h)return;if(1===e.ee)return void(e.ee=0);if(e===t.U){const r=t.W;if(1===r.ee)r.ee=0,t.ee=1,t===this.Y?this.Y=t.te():t.te();else{if(r.W&&1===r.W.ee)return r.ee=t.ee,t.ee=0,r.W.ee=0,void(t===this.Y?this.Y=t.te():t.te());r.U&&1===r.U.ee?(r.ee=1,r.U.ee=0,r.se()):(r.ee=1,e=t)}}else{const r=t.U;if(1===r.ee)r.ee=0,t.ee=1,t===this.Y?this.Y=t.se():t.se();else{if(r.U&&1===r.U.ee)return r.ee=t.ee,t.ee=0,r.U.ee=0,void(t===this.Y?this.Y=t.se():t.se());r.W&&1===r.W.ee?(r.ee=1,r.W.ee=0,r.te()):(r.ee=1,e=t)}}}}fe(e){if(1===this.i)return this.clear(),this.h;let t=e;for(;t.U||t.W;){if(t.W)for(t=t.W;t.U;)t=t.U;else t=t.U;[e.u,t.u]=[t.u,e.u],[e.l,t.l]=[t.l,e.l],e=t}this.h.U===t?this.h.U=t.tt:this.h.W===t&&(this.h.W=t.tt),this.ue(t);const r=t.tt;return t===r.U?r.U=void 0:r.W=void 0,this.i-=1,this.Y.ee=0,r}oe(e,t){if(void 0===e)return!1;return!!this.oe(e.U,t)||(!!t(e)||this.oe(e.W,t))}he(e){for(;;){const t=e.tt;if(0===t.ee)return;const r=t.tt;if(t===r.U){const n=r.W;if(n&&1===n.ee){if(n.ee=t.ee=0,r===this.Y)return;r.ee=1,e=r;continue}if(e===t.W){if(e.ee=0,e.U&&(e.U.tt=t),e.W&&(e.W.tt=r),t.W=e.U,r.U=e.W,e.U=t,e.W=r,r===this.Y)this.Y=e,this.h.tt=e;else{const t=r.tt;t.U===r?t.U=e:t.W=e}return e.tt=r.tt,t.tt=e,r.tt=e,r.ee=1,{parentNode:t,grandParent:r,curNode:e}}t.ee=0,r===this.Y?this.Y=r.se():r.se(),r.ee=1}else{const n=r.U;if(n&&1===n.ee){if(n.ee=t.ee=0,r===this.Y)return;r.ee=1,e=r;continue}if(e===t.U){if(e.ee=0,e.U&&(e.U.tt=r),e.W&&(e.W.tt=t),r.W=e.U,t.U=e.W,e.U=r,e.W=t,r===this.Y)this.Y=e,this.h.tt=e;else{const t=r.tt;t.U===r?t.U=e:t.W=e}return e.tt=r.tt,t.tt=e,r.tt=e,r.ee=1,{parentNode:t,grandParent:r,curNode:e}}t.ee=0,r===this.Y?this.Y=r.te():r.te(),r.ee=1}return}}ne(e,t,r){if(void 0===this.Y)return this.i+=1,this.Y=new this.re(e,t),this.Y.ee=0,this.Y.tt=this.h,this.h.tt=this.Y,this.h.U=this.Y,void(this.h.W=this.Y);let n;const i=this.h.U,s=this.v(i.u,e);if(0!==s){if(s>0)i.U=new this.re(e,t),i.U.tt=i,n=i.U,this.h.U=n;else{const i=this.h.W,s=this.v(i.u,e);if(0===s)return void(i.l=t);if(s<0)i.W=new this.re(e,t),i.W.tt=i,n=i.W,this.h.W=n;else{if(void 0!==r){const i=r.o;if(i!==this.h){const r=this.v(i.u,e);if(0===r)return void(i.l=t);if(r>0){const r=i.L(),s=this.v(r.u,e);if(0===s)return void(r.l=t);s<0&&(n=new this.re(e,t),void 0===r.W?(r.W=n,n.tt=r):(i.U=n,n.tt=i))}}}if(void 0===n)for(n=this.Y;;){const r=this.v(n.u,e);if(r>0){if(void 0===n.U){n.U=new this.re(e,t),n.U.tt=n,n=n.U;break}n=n.U}else{if(!(r<0))return void(n.l=t);if(void 0===n.W){n.W=new this.re(e,t),n.W.tt=n,n=n.W;break}n=n.W}}}}return this.i+=1,n}i.l=t}I(e,t){for(;e;){const r=this.v(e.u,t);if(r<0)e=e.W;else{if(!(r>0))return e;e=e.U}}return e||this.h}clear(){this.i=0,this.Y=void 0,this.h.tt=void 0,this.h.U=this.h.W=void 0}updateKeyByIterator(e,t){const r=e.o;if(r===this.h&&(0,s.throwIteratorAccessError)(),1===this.i)return r.u=t,!0;if(r===this.h.U)return this.v(r.B().u,t)>0&&(r.u=t,!0);if(r===this.h.W)return this.v(r.L().u,t)<0&&(r.u=t,!0);const n=r.L().u;if(this.v(n,t)>=0)return!1;const i=r.B().u;return!(this.v(i,t)<=0)&&(r.u=t,!0)}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let t=0;const r=this;return this.oe(this.Y,(function(n){return e===t?(r.V(n),!0):(t+=1,!1)})),this.i}eraseElementByKey(e){if(0===this.i)return!1;const t=this.I(this.Y,e);return t!==this.h&&(this.V(t),!0)}eraseElementByIterator(e){const t=e.o;t===this.h&&(0,s.throwIteratorAccessError)();const r=void 0===t.W;return 0===e.iteratorType?r&&e.next():r&&void 0!==t.U||e.next(),this.V(t),e}forEach(e){let t=0;for(const r of this)e(r,t++,this)}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let t,r=0;for(const n of this){if(r===e){t=n;break}r+=1}return t}getHeight(){if(0===this.i)return 0;const e=function(t){return t?Math.max(e(t.U),e(t.W))+1:0};return e(this.Y)}}var a=o;r.default=a},{"../../../utils/throwError":71,"../../ContainerBase":52,"./TreeNode":65}],67:[function(e,t,r){"use strict";Object.defineProperty(r,"t",{value:!0}),r.default=void 0;var n=o(e("./Base")),i=o(e("./Base/TreeIterator")),s=e("../../utils/throwError");function o(e){return e&&e.t?e:{default:e}}class a extends i.default{constructor(e,t,r,n){super(e,t,n),this.container=r}get pointer(){this.o===this.h&&(0,s.throwIteratorAccessError)();const e=this;return new Proxy([],{get:(t,r)=>"0"===r?e.o.u:"1"===r?e.o.l:void 0,set(t,r,n){if("1"!==r)throw new TypeError("props must be 1");return e.o.l=n,!0}})}copy(){return new a(this.o,this.h,this.container,this.iteratorType)}}class l extends n.default{constructor(e=[],t,r){super(t,r);const n=this;e.forEach((function(e){n.setElement(e[0],e[1])}))}*K(e){void 0!==e&&(yield*this.K(e.U),yield[e.u,e.l],yield*this.K(e.W))}begin(){return new a(this.h.U||this.h,this.h,this)}end(){return new a(this.h,this.h,this)}rBegin(){return new a(this.h.W||this.h,this.h,this,1)}rEnd(){return new a(this.h,this.h,this,1)}front(){if(0===this.i)return;const e=this.h.U;return[e.u,e.l]}back(){if(0===this.i)return;const e=this.h.W;return[e.u,e.l]}lowerBound(e){const t=this.X(this.Y,e);return new a(t,this.h,this)}upperBound(e){const t=this.Z(this.Y,e);return new a(t,this.h,this)}reverseLowerBound(e){const t=this.$(this.Y,e);return new a(t,this.h,this)}reverseUpperBound(e){const t=this.rr(this.Y,e);return new a(t,this.h,this)}setElement(e,t,r){return this.M(e,t,r)}find(e){const t=this.I(this.Y,e);return new a(t,this.h,this)}getElementByKey(e){return this.I(this.Y,e).l}union(e){const t=this;return e.forEach((function(e){t.setElement(e[0],e[1])})),this.i}[Symbol.iterator](){return this.K(this.Y)}}var u=l;r.default=u},{"../../utils/throwError":71,"./Base":66,"./Base/TreeIterator":64}],68:[function(e,t,r){"use strict";Object.defineProperty(r,"t",{value:!0}),r.default=void 0;var n=o(e("./Base")),i=o(e("./Base/TreeIterator")),s=e("../../utils/throwError");function o(e){return e&&e.t?e:{default:e}}class a extends i.default{constructor(e,t,r,n){super(e,t,n),this.container=r}get pointer(){return this.o===this.h&&(0,s.throwIteratorAccessError)(),this.o.u}copy(){return new a(this.o,this.h,this.container,this.iteratorType)}}class l extends n.default{constructor(e=[],t,r){super(t,r);const n=this;e.forEach((function(e){n.insert(e)}))}*K(e){void 0!==e&&(yield*this.K(e.U),yield e.u,yield*this.K(e.W))}begin(){return new a(this.h.U||this.h,this.h,this)}end(){return new a(this.h,this.h,this)}rBegin(){return new a(this.h.W||this.h,this.h,this,1)}rEnd(){return new a(this.h,this.h,this,1)}front(){return this.h.U?this.h.U.u:void 0}back(){return this.h.W?this.h.W.u:void 0}insert(e,t){return this.M(e,void 0,t)}find(e){const t=this.I(this.Y,e);return new a(t,this.h,this)}lowerBound(e){const t=this.X(this.Y,e);return new a(t,this.h,this)}upperBound(e){const t=this.Z(this.Y,e);return new a(t,this.h,this)}reverseLowerBound(e){const t=this.$(this.Y,e);return new a(t,this.h,this)}reverseUpperBound(e){const t=this.rr(this.Y,e);return new a(t,this.h,this)}union(e){const t=this;return e.forEach((function(e){t.insert(e)})),this.i}[Symbol.iterator](){return this.K(this.Y)}}var u=l;r.default=u},{"../../utils/throwError":71,"./Base":66,"./Base/TreeIterator":64}],69:[function(e,t,r){"use strict";Object.defineProperty(r,"t",{value:!0}),Object.defineProperty(r,"Deque",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(r,"HashMap",{enumerable:!0,get:function(){return f.default}}),Object.defineProperty(r,"HashSet",{enumerable:!0,get:function(){return h.default}}),Object.defineProperty(r,"LinkList",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(r,"OrderedMap",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(r,"OrderedSet",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(r,"PriorityQueue",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(r,"Queue",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(r,"Stack",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(r,"Vector",{enumerable:!0,get:function(){return o.default}});var n=d(e("./container/OtherContainer/Stack")),i=d(e("./container/OtherContainer/Queue")),s=d(e("./container/OtherContainer/PriorityQueue")),o=d(e("./container/SequentialContainer/Vector")),a=d(e("./container/SequentialContainer/LinkList")),l=d(e("./container/SequentialContainer/Deque")),u=d(e("./container/TreeContainer/OrderedSet")),c=d(e("./container/TreeContainer/OrderedMap")),h=d(e("./container/HashContainer/HashSet")),f=d(e("./container/HashContainer/HashMap"));function d(e){return e&&e.t?e:{default:e}}},{"./container/HashContainer/HashMap":54,"./container/HashContainer/HashSet":55,"./container/OtherContainer/PriorityQueue":56,"./container/OtherContainer/Queue":57,"./container/OtherContainer/Stack":58,"./container/SequentialContainer/Deque":61,"./container/SequentialContainer/LinkList":62,"./container/SequentialContainer/Vector":63,"./container/TreeContainer/OrderedMap":67,"./container/TreeContainer/OrderedSet":68}],70:[function(e,t,r){"use strict";Object.defineProperty(r,"t",{value:!0}),r.default=function(e){const t=typeof e;return"object"===t&&null!==e||"function"===t}},{}],71:[function(e,t,r){"use strict";Object.defineProperty(r,"t",{value:!0}),r.throwIteratorAccessError=function(){throw new RangeError("Iterator access denied!")}},{}],72:[function(e,t,r){(function(e){(function(){const r="object"==typeof performance&&performance&&"function"==typeof performance.now?performance:Date,n="function"==typeof AbortController?AbortController:class{constructor(){this.signal=new o}abort(e=new Error("This operation was aborted")){this.signal.reason=this.signal.reason||e,this.signal.aborted=!0,this.signal.dispatchEvent({type:"abort",target:this.signal})}},i="function"==typeof AbortSignal,s="function"==typeof n.AbortSignal,o=i?AbortSignal:s?n.AbortController:class{constructor(){this.reason=void 0,this.aborted=!1,this._listeners=[]}dispatchEvent(e){"abort"===e.type&&(this.aborted=!0,this.onabort(e),this._listeners.forEach((t=>t(e)),this))}onabort(){}addEventListener(e,t){"abort"===e&&this._listeners.push(t)}removeEventListener(e,t){"abort"===e&&(this._listeners=this._listeners.filter((e=>e!==t)))}},a=new Set,l=(e,t)=>{const r=`LRU_CACHE_OPTION_${e}`;h(r)&&f(r,`${e} option`,`options.${t}`,m)},u=(e,t)=>{const r=`LRU_CACHE_METHOD_${e}`;if(h(r)){const{prototype:n}=m,{get:i}=Object.getOwnPropertyDescriptor(n,e);f(r,`${e} method`,`cache.${t}()`,i)}},c=(...t)=>{"object"==typeof e&&e&&"function"==typeof e.emitWarning?e.emitWarning(...t):console.error(...t)},h=e=>!a.has(e),f=(e,t,r,n)=>{a.add(e);c(`The ${t} is deprecated. Please use ${r} instead.`,"DeprecationWarning",e,n)},d=e=>e&&e===Math.floor(e)&&e>0&&isFinite(e),p=e=>d(e)?e<=Math.pow(2,8)?Uint8Array:e<=Math.pow(2,16)?Uint16Array:e<=Math.pow(2,32)?Uint32Array:e<=Number.MAX_SAFE_INTEGER?b:null:null;class b extends Array{constructor(e){super(e),this.fill(0)}}class g{constructor(e){if(0===e)return[];const t=p(e);this.heap=new t(e),this.length=0}push(e){this.heap[this.length++]=e}pop(){return this.heap[--this.length]}}class m{constructor(e={}){const{max:t=0,ttl:r,ttlResolution:n=1,ttlAutopurge:i,updateAgeOnGet:s,updateAgeOnHas:o,allowStale:u,dispose:f,disposeAfter:b,noDisposeOnSet:y,noUpdateTTL:_,maxSize:w=0,maxEntrySize:v=0,sizeCalculation:S,fetchMethod:E,fetchContext:A,noDeleteOnFetchRejection:k,noDeleteOnStaleGet:T,allowStaleOnFetchRejection:I,allowStaleOnFetchAbort:R,ignoreFetchAbort:O}=e,{length:C,maxAge:P,stale:x}=e instanceof m?{}:e;if(0!==t&&!d(t))throw new TypeError("max option must be a nonnegative integer");const M=t?p(t):Array;if(!M)throw new Error("invalid max value: "+t);if(this.max=t,this.maxSize=w,this.maxEntrySize=v||this.maxSize,this.sizeCalculation=S||C,this.sizeCalculation){if(!this.maxSize&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if("function"!=typeof this.sizeCalculation)throw new TypeError("sizeCalculation set to non-function")}if(this.fetchMethod=E||null,this.fetchMethod&&"function"!=typeof this.fetchMethod)throw new TypeError("fetchMethod must be a function if specified");if(this.fetchContext=A,!this.fetchMethod&&void 0!==A)throw new TypeError("cannot set fetchContext without fetchMethod");if(this.keyMap=new Map,this.keyList=new Array(t).fill(null),this.valList=new Array(t).fill(null),this.next=new M(t),this.prev=new M(t),this.head=0,this.tail=0,this.free=new g(t),this.initialFill=1,this.size=0,"function"==typeof f&&(this.dispose=f),"function"==typeof b?(this.disposeAfter=b,this.disposed=[]):(this.disposeAfter=null,this.disposed=null),this.noDisposeOnSet=!!y,this.noUpdateTTL=!!_,this.noDeleteOnFetchRejection=!!k,this.allowStaleOnFetchRejection=!!I,this.allowStaleOnFetchAbort=!!R,this.ignoreFetchAbort=!!O,0!==this.maxEntrySize){if(0!==this.maxSize&&!d(this.maxSize))throw new TypeError("maxSize must be a positive integer if specified");if(!d(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.initializeSizeTracking()}if(this.allowStale=!!u||!!x,this.noDeleteOnStaleGet=!!T,this.updateAgeOnGet=!!s,this.updateAgeOnHas=!!o,this.ttlResolution=d(n)||0===n?n:1,this.ttlAutopurge=!!i,this.ttl=r||P||0,this.ttl){if(!d(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.initializeTTLTracking()}if(0===this.max&&0===this.ttl&&0===this.maxSize)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.max&&!this.maxSize){const e="LRU_CACHE_UNBOUNDED";if(h(e)){a.add(e);c("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",e,m)}}x&&l("stale","allowStale"),P&&l("maxAge","ttl"),C&&l("length","sizeCalculation")}getRemainingTTL(e){return this.has(e,{updateAgeOnHas:!1})?1/0:0}initializeTTLTracking(){this.ttls=new b(this.max),this.starts=new b(this.max),this.setItemTTL=(e,t,n=r.now())=>{if(this.starts[e]=0!==t?n:0,this.ttls[e]=t,0!==t&&this.ttlAutopurge){const r=setTimeout((()=>{this.isStale(e)&&this.delete(this.keyList[e])}),t+1);r.unref&&r.unref()}},this.updateItemAge=e=>{this.starts[e]=0!==this.ttls[e]?r.now():0},this.statusTTL=(r,n)=>{r&&(r.ttl=this.ttls[n],r.start=this.starts[n],r.now=e||t(),r.remainingTTL=r.now+r.ttl-r.start)};let e=0;const t=()=>{const t=r.now();if(this.ttlResolution>0){e=t;const r=setTimeout((()=>e=0),this.ttlResolution);r.unref&&r.unref()}return t};this.getRemainingTTL=r=>{const n=this.keyMap.get(r);return void 0===n?0:0===this.ttls[n]||0===this.starts[n]?1/0:this.starts[n]+this.ttls[n]-(e||t())},this.isStale=r=>0!==this.ttls[r]&&0!==this.starts[r]&&(e||t())-this.starts[r]>this.ttls[r]}updateItemAge(e){}statusTTL(e,t){}setItemTTL(e,t,r){}isStale(e){return!1}initializeSizeTracking(){this.calculatedSize=0,this.sizes=new b(this.max),this.removeItemSize=e=>{this.calculatedSize-=this.sizes[e],this.sizes[e]=0},this.requireSize=(e,t,r,n)=>{if(this.isBackgroundFetch(t))return 0;if(!d(r)){if(!n)throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");if("function"!=typeof n)throw new TypeError("sizeCalculation must be a function");if(r=n(t,e),!d(r))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}return r},this.addItemSize=(e,t,r)=>{if(this.sizes[e]=t,this.maxSize){const t=this.maxSize-this.sizes[e];for(;this.calculatedSize>t;)this.evict(!0)}this.calculatedSize+=this.sizes[e],r&&(r.entrySize=t,r.totalCalculatedSize=this.calculatedSize)}}removeItemSize(e){}addItemSize(e,t){}requireSize(e,t,r,n){if(r||n)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache")}*indexes({allowStale:e=this.allowStale}={}){if(this.size)for(let t=this.tail;this.isValidIndex(t)&&(!e&&this.isStale(t)||(yield t),t!==this.head);)t=this.prev[t]}*rindexes({allowStale:e=this.allowStale}={}){if(this.size)for(let t=this.head;this.isValidIndex(t)&&(!e&&this.isStale(t)||(yield t),t!==this.tail);)t=this.next[t]}isValidIndex(e){return void 0!==e&&this.keyMap.get(this.keyList[e])===e}*entries(){for(const e of this.indexes())void 0===this.valList[e]||void 0===this.keyList[e]||this.isBackgroundFetch(this.valList[e])||(yield[this.keyList[e],this.valList[e]])}*rentries(){for(const e of this.rindexes())void 0===this.valList[e]||void 0===this.keyList[e]||this.isBackgroundFetch(this.valList[e])||(yield[this.keyList[e],this.valList[e]])}*keys(){for(const e of this.indexes())void 0===this.keyList[e]||this.isBackgroundFetch(this.valList[e])||(yield this.keyList[e])}*rkeys(){for(const e of this.rindexes())void 0===this.keyList[e]||this.isBackgroundFetch(this.valList[e])||(yield this.keyList[e])}*values(){for(const e of this.indexes())void 0===this.valList[e]||this.isBackgroundFetch(this.valList[e])||(yield this.valList[e])}*rvalues(){for(const e of this.rindexes())void 0===this.valList[e]||this.isBackgroundFetch(this.valList[e])||(yield this.valList[e])}[Symbol.iterator](){return this.entries()}find(e,t){for(const r of this.indexes()){const n=this.valList[r],i=this.isBackgroundFetch(n)?n.__staleWhileFetching:n;if(void 0!==i&&e(i,this.keyList[r],this))return this.get(this.keyList[r],t)}}forEach(e,t=this){for(const r of this.indexes()){const n=this.valList[r],i=this.isBackgroundFetch(n)?n.__staleWhileFetching:n;void 0!==i&&e.call(t,i,this.keyList[r],this)}}rforEach(e,t=this){for(const r of this.rindexes()){const n=this.valList[r],i=this.isBackgroundFetch(n)?n.__staleWhileFetching:n;void 0!==i&&e.call(t,i,this.keyList[r],this)}}get prune(){return u("prune","purgeStale"),this.purgeStale}purgeStale(){let e=!1;for(const t of this.rindexes({allowStale:!0}))this.isStale(t)&&(this.delete(this.keyList[t]),e=!0);return e}dump(){const e=[];for(const t of this.indexes({allowStale:!0})){const n=this.keyList[t],i=this.valList[t],s=this.isBackgroundFetch(i)?i.__staleWhileFetching:i;if(void 0===s)continue;const o={value:s};if(this.ttls){o.ttl=this.ttls[t];const e=r.now()-this.starts[t];o.start=Math.floor(Date.now()-e)}this.sizes&&(o.size=this.sizes[t]),e.unshift([n,o])}return e}load(e){this.clear();for(const[t,n]of e){if(n.start){const e=Date.now()-n.start;n.start=r.now()-e}this.set(t,n.value,n)}}dispose(e,t,r){}set(e,t,{ttl:r=this.ttl,start:n,noDisposeOnSet:i=this.noDisposeOnSet,size:s=0,sizeCalculation:o=this.sizeCalculation,noUpdateTTL:a=this.noUpdateTTL,status:l}={}){if(s=this.requireSize(e,t,s,o),this.maxEntrySize&&s>this.maxEntrySize)return l&&(l.set="miss",l.maxEntrySizeExceeded=!0),this.delete(e),this;let u=0===this.size?void 0:this.keyMap.get(e);if(void 0===u)u=this.newIndex(),this.keyList[u]=e,this.valList[u]=t,this.keyMap.set(e,u),this.next[this.tail]=u,this.prev[u]=this.tail,this.tail=u,this.size++,this.addItemSize(u,s,l),l&&(l.set="add"),a=!1;else{this.moveToTail(u);const r=this.valList[u];if(t!==r){if(this.isBackgroundFetch(r)?r.__abortController.abort(new Error("replaced")):i||(this.dispose(r,e,"set"),this.disposeAfter&&this.disposed.push([r,e,"set"])),this.removeItemSize(u),this.valList[u]=t,this.addItemSize(u,s,l),l){l.set="replace";const e=r&&this.isBackgroundFetch(r)?r.__staleWhileFetching:r;void 0!==e&&(l.oldValue=e)}}else l&&(l.set="update")}if(0===r||0!==this.ttl||this.ttls||this.initializeTTLTracking(),a||this.setItemTTL(u,r,n),this.statusTTL(l,u),this.disposeAfter)for(;this.disposed.length;)this.disposeAfter(...this.disposed.shift());return this}newIndex(){return 0===this.size?this.tail:this.size===this.max&&0!==this.max?this.evict(!1):0!==this.free.length?this.free.pop():this.initialFill++}pop(){if(this.size){const e=this.valList[this.head];return this.evict(!0),e}}evict(e){const t=this.head,r=this.keyList[t],n=this.valList[t];return this.isBackgroundFetch(n)?n.__abortController.abort(new Error("evicted")):(this.dispose(n,r,"evict"),this.disposeAfter&&this.disposed.push([n,r,"evict"])),this.removeItemSize(t),e&&(this.keyList[t]=null,this.valList[t]=null,this.free.push(t)),this.head=this.next[t],this.keyMap.delete(r),this.size--,t}has(e,{updateAgeOnHas:t=this.updateAgeOnHas,status:r}={}){const n=this.keyMap.get(e);if(void 0!==n){if(!this.isStale(n))return t&&this.updateItemAge(n),r&&(r.has="hit"),this.statusTTL(r,n),!0;r&&(r.has="stale",this.statusTTL(r,n))}else r&&(r.has="miss");return!1}peek(e,{allowStale:t=this.allowStale}={}){const r=this.keyMap.get(e);if(void 0!==r&&(t||!this.isStale(r))){const e=this.valList[r];return this.isBackgroundFetch(e)?e.__staleWhileFetching:e}}backgroundFetch(e,t,r,i){const s=void 0===t?void 0:this.valList[t];if(this.isBackgroundFetch(s))return s;const o=new n;r.signal&&r.signal.addEventListener("abort",(()=>o.abort(r.signal.reason)));const a={signal:o.signal,options:r,context:i},l=(n,i=!1)=>{const{aborted:s}=o.signal,l=r.ignoreFetchAbort&&void 0!==n;return r.status&&(s&&!i?(r.status.fetchAborted=!0,r.status.fetchError=o.signal.reason,l&&(r.status.fetchAbortIgnored=!0)):r.status.fetchResolved=!0),!s||l||i?(this.valList[t]===c&&(void 0===n?c.__staleWhileFetching?this.valList[t]=c.__staleWhileFetching:this.delete(e):(r.status&&(r.status.fetchUpdated=!0),this.set(e,n,a.options))),n):u(o.signal.reason)},u=n=>{const{aborted:i}=o.signal,s=i&&r.allowStaleOnFetchAbort,a=s||r.allowStaleOnFetchRejection,l=a||r.noDeleteOnFetchRejection;if(this.valList[t]===c){!l||void 0===c.__staleWhileFetching?this.delete(e):s||(this.valList[t]=c.__staleWhileFetching)}if(a)return r.status&&void 0!==c.__staleWhileFetching&&(r.status.returnedStale=!0),c.__staleWhileFetching;if(c.__returned===c)throw n};r.status&&(r.status.fetchDispatched=!0);const c=new Promise(((t,n)=>{this.fetchMethod(e,s,a).then((e=>t(e)),n),o.signal.addEventListener("abort",(()=>{r.ignoreFetchAbort&&!r.allowStaleOnFetchAbort||(t(),r.allowStaleOnFetchAbort&&(t=e=>l(e,!0)))}))})).then(l,(e=>(r.status&&(r.status.fetchRejected=!0,r.status.fetchError=e),u(e))));return c.__abortController=o,c.__staleWhileFetching=s,c.__returned=null,void 0===t?(this.set(e,c,{...a.options,status:void 0}),t=this.keyMap.get(e)):this.valList[t]=c,c}isBackgroundFetch(e){return e&&"object"==typeof e&&"function"==typeof e.then&&Object.prototype.hasOwnProperty.call(e,"__staleWhileFetching")&&Object.prototype.hasOwnProperty.call(e,"__returned")&&(e.__returned===e||null===e.__returned)}async fetch(e,{allowStale:t=this.allowStale,updateAgeOnGet:r=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,ttl:i=this.ttl,noDisposeOnSet:s=this.noDisposeOnSet,size:o=0,sizeCalculation:a=this.sizeCalculation,noUpdateTTL:l=this.noUpdateTTL,noDeleteOnFetchRejection:u=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:c=this.allowStaleOnFetchRejection,ignoreFetchAbort:h=this.ignoreFetchAbort,allowStaleOnFetchAbort:f=this.allowStaleOnFetchAbort,fetchContext:d=this.fetchContext,forceRefresh:p=!1,status:b,signal:g}={}){if(!this.fetchMethod)return b&&(b.fetch="get"),this.get(e,{allowStale:t,updateAgeOnGet:r,noDeleteOnStaleGet:n,status:b});const m={allowStale:t,updateAgeOnGet:r,noDeleteOnStaleGet:n,ttl:i,noDisposeOnSet:s,size:o,sizeCalculation:a,noUpdateTTL:l,noDeleteOnFetchRejection:u,allowStaleOnFetchRejection:c,allowStaleOnFetchAbort:f,ignoreFetchAbort:h,status:b,signal:g};let y=this.keyMap.get(e);if(void 0===y){b&&(b.fetch="miss");const t=this.backgroundFetch(e,y,m,d);return t.__returned=t}{const n=this.valList[y];if(this.isBackgroundFetch(n)){const e=t&&void 0!==n.__staleWhileFetching;return b&&(b.fetch="inflight",e&&(b.returnedStale=!0)),e?n.__staleWhileFetching:n.__returned=n}const i=this.isStale(y);if(!p&&!i)return b&&(b.fetch="hit"),this.moveToTail(y),r&&this.updateItemAge(y),this.statusTTL(b,y),n;const s=this.backgroundFetch(e,y,m,d),o=void 0!==s.__staleWhileFetching,a=o&&t;return b&&(b.fetch=o&&i?"stale":"refresh",a&&i&&(b.returnedStale=!0)),a?s.__staleWhileFetching:s.__returned=s}}get(e,{allowStale:t=this.allowStale,updateAgeOnGet:r=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,status:i}={}){const s=this.keyMap.get(e);if(void 0!==s){const o=this.valList[s],a=this.isBackgroundFetch(o);return this.statusTTL(i,s),this.isStale(s)?(i&&(i.get="stale"),a?(i&&(i.returnedStale=t&&void 0!==o.__staleWhileFetching),t?o.__staleWhileFetching:void 0):(n||this.delete(e),i&&(i.returnedStale=t),t?o:void 0)):(i&&(i.get="hit"),a?o.__staleWhileFetching:(this.moveToTail(s),r&&this.updateItemAge(s),o))}i&&(i.get="miss")}connect(e,t){this.prev[t]=e,this.next[e]=t}moveToTail(e){e!==this.tail&&(e===this.head?this.head=this.next[e]:this.connect(this.prev[e],this.next[e]),this.connect(this.tail,e),this.tail=e)}get del(){return u("del","delete"),this.delete}delete(e){let t=!1;if(0!==this.size){const r=this.keyMap.get(e);if(void 0!==r)if(t=!0,1===this.size)this.clear();else{this.removeItemSize(r);const t=this.valList[r];this.isBackgroundFetch(t)?t.__abortController.abort(new Error("deleted")):(this.dispose(t,e,"delete"),this.disposeAfter&&this.disposed.push([t,e,"delete"])),this.keyMap.delete(e),this.keyList[r]=null,this.valList[r]=null,r===this.tail?this.tail=this.prev[r]:r===this.head?this.head=this.next[r]:(this.next[this.prev[r]]=this.next[r],this.prev[this.next[r]]=this.prev[r]),this.size--,this.free.push(r)}}if(this.disposed)for(;this.disposed.length;)this.disposeAfter(...this.disposed.shift());return t}clear(){for(const e of this.rindexes({allowStale:!0})){const t=this.valList[e];if(this.isBackgroundFetch(t))t.__abortController.abort(new Error("deleted"));else{const r=this.keyList[e];this.dispose(t,r,"delete"),this.disposeAfter&&this.disposed.push([t,r,"delete"])}}if(this.keyMap.clear(),this.valList.fill(null),this.keyList.fill(null),this.ttls&&(this.ttls.fill(0),this.starts.fill(0)),this.sizes&&this.sizes.fill(0),this.head=0,this.tail=0,this.initialFill=1,this.free.length=0,this.calculatedSize=0,this.size=0,this.disposed)for(;this.disposed.length;)this.disposeAfter(...this.disposed.shift())}get reset(){return u("reset","clear"),this.clear}get length(){return((e,t)=>{const r=`LRU_CACHE_PROPERTY_${e}`;if(h(r)){const{prototype:n}=m,{get:i}=Object.getOwnPropertyDescriptor(n,e);f(r,`${e} property`,`cache.${t}`,i)}})("length","size"),this.size}static get AbortController(){return n}static get AbortSignal(){return o}}t.exports=m}).call(this)}).call(this,e("_process"))},{_process:102}],73:[function(e,t,r){const n=t.exports,{Buffer:i}=e("buffer");n.types={0:"reserved",1:"connect",2:"connack",3:"publish",4:"puback",5:"pubrec",6:"pubrel",7:"pubcomp",8:"subscribe",9:"suback",10:"unsubscribe",11:"unsuback",12:"pingreq",13:"pingresp",14:"disconnect",15:"auth"},n.requiredHeaderFlags={1:0,2:0,4:0,5:0,6:2,7:0,8:2,9:0,10:2,11:0,12:0,13:0,14:0,15:0},n.requiredHeaderFlagsErrors={};for(const e in n.requiredHeaderFlags){const t=n.requiredHeaderFlags[e];n.requiredHeaderFlagsErrors[e]="Invalid header flag bits, must be 0x"+t.toString(16)+" for "+n.types[e]+" packet"}n.codes={};for(const e in n.types){const t=n.types[e];n.codes[t]=e}n.CMD_SHIFT=4,n.CMD_MASK=240,n.DUP_MASK=8,n.QOS_MASK=3,n.QOS_SHIFT=1,n.RETAIN_MASK=1,n.VARBYTEINT_MASK=127,n.VARBYTEINT_FIN_MASK=128,n.VARBYTEINT_MAX=268435455,n.SESSIONPRESENT_MASK=1,n.SESSIONPRESENT_HEADER=i.from([n.SESSIONPRESENT_MASK]),n.CONNACK_HEADER=i.from([n.codes.connack<[0,1].map((r=>[0,1].map((s=>{const o=i.alloc(1);return o.writeUInt8(n.codes[e]<i.from([e]))),n.EMPTY={pingreq:i.from([n.codes.pingreq<<4,0]),pingresp:i.from([n.codes.pingresp<<4,0]),disconnect:i.from([n.codes.disconnect<<4,0])},n.MQTT5_PUBACK_PUBREC_CODES={0:"Success",16:"No matching subscribers",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",144:"Topic Name invalid",145:"Packet identifier in use",151:"Quota exceeded",153:"Payload format invalid"},n.MQTT5_PUBREL_PUBCOMP_CODES={0:"Success",146:"Packet Identifier not found"},n.MQTT5_SUBACK_CODES={0:"Granted QoS 0",1:"Granted QoS 1",2:"Granted QoS 2",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",143:"Topic Filter invalid",145:"Packet Identifier in use",151:"Quota exceeded",158:"Shared Subscriptions not supported",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"},n.MQTT5_UNSUBACK_CODES={0:"Success",17:"No subscription existed",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",143:"Topic Filter invalid",145:"Packet Identifier in use"},n.MQTT5_DISCONNECT_CODES={0:"Normal disconnection",4:"Disconnect with Will Message",128:"Unspecified error",129:"Malformed Packet",130:"Protocol Error",131:"Implementation specific error",135:"Not authorized",137:"Server busy",139:"Server shutting down",141:"Keep Alive timeout",142:"Session taken over",143:"Topic Filter invalid",144:"Topic Name invalid",147:"Receive Maximum exceeded",148:"Topic Alias invalid",149:"Packet too large",150:"Message rate too high",151:"Quota exceeded",152:"Administrative action",153:"Payload format invalid",154:"Retain not supported",155:"QoS not supported",156:"Use another server",157:"Server moved",158:"Shared Subscriptions not supported",159:"Connection rate exceeded",160:"Maximum connect time",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"},n.MQTT5_AUTH_CODES={0:"Success",24:"Continue authentication",25:"Re-authenticate"}},{buffer:29}],74:[function(e,t,r){const n=e("./writeToStream"),i=e("events"),{Buffer:s}=e("buffer");class o extends i{constructor(){super(),this._array=new Array(20),this._i=0}write(e){return this._array[this._i++]=e,!0}concat(){let e=0;const t=new Array(this._array.length),r=this._array;let n,i=0;for(n=0;nthis.length||e<0)return;const t=this._offset(e);return this._bufs[t[0]][t[1]]},s.prototype.slice=function(e,t){return"number"==typeof e&&e<0&&(e+=this.length),"number"==typeof t&&t<0&&(t+=this.length),this.copy(null,0,e,t)},s.prototype.copy=function(e,t,r,i){if(("number"!=typeof r||r<0)&&(r=0),("number"!=typeof i||i>this.length)&&(i=this.length),r>=this.length)return e||n.alloc(0);if(i<=0)return e||n.alloc(0);const s=!!e,o=this._offset(r),a=i-r;let l=a,u=s&&t||0,c=o[1];if(0===r&&i===this.length){if(!s)return 1===this._bufs.length?this._bufs[0]:n.concat(this._bufs,this.length);for(let t=0;tr)){this._bufs[t].copy(e,u,c,c+l),u+=r;break}this._bufs[t].copy(e,u,c),u+=r,l-=r,c&&(c=0)}return e.length>u?e.slice(0,u):e},s.prototype.shallowSlice=function(e,t){if(e=e||0,t="number"!=typeof t?this.length:t,e<0&&(e+=this.length),t<0&&(t+=this.length),e===t)return this._new();const r=this._offset(e),n=this._offset(t),i=this._bufs.slice(r[0],n[0]+1);return 0===n[1]?i.pop():i[i.length-1]=i[i.length-1].slice(0,n[1]),0!==r[1]&&(i[0]=i[0].slice(r[1])),this._new(i)},s.prototype.toString=function(e,t,r){return this.slice(t,r).toString(e)},s.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;){if(!(e>=this._bufs[0].length)){this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift()}return this},s.prototype.duplicate=function(){const e=this._new();for(let t=0;tthis.length?this.length:t;const i=this._offset(t);let s=i[0],o=i[1];for(;s=e.length){const r=t.indexOf(e,o);if(-1!==r)return this._reverseOffset([s,r]);o=t.length-e.length+1}else{const t=this._reverseOffset([s,o]);if(this._match(t,e))return t;o++}}o=0}return-1},s.prototype._match=function(e,t){if(this.length-e>8,0),t.writeUInt8(255&e,1),t}t.exports={cache:i,generateCache:function(){for(let e=0;e<65536;e++)i[e]=o(e)},generateNumber:o,genBufVariableByteInt:function(e){let t=0,r=0;const i=n.allocUnsafe(4);do{t=e%128|0,(e=e/128|0)>0&&(t|=128),i.writeUInt8(t,r++)}while(e>0&&r<4);return e>0&&(r=0),s?i.subarray(0,r):i.slice(0,r)},generate4ByteBuffer:function(e){const t=n.allocUnsafe(4);return t.writeUInt32BE(e,0),t}}},{buffer:29}],94:[function(e,t,r){t.exports=class{constructor(){this.cmd=null,this.retain=!1,this.qos=0,this.dup=!1,this.length=-1,this.topic=null,this.payload=null}}},{}],95:[function(e,t,r){const n=e("bl"),i=e("events"),s=e("./packet"),o=e("./constants"),a=e("debug")("mqtt-packet:parser");class l extends i{constructor(){super(),this.parser=this.constructor.parser}static parser(e){return this instanceof l?(this.settings=e||{},this._states=["_parseHeader","_parseLength","_parsePayload","_newPacket"],this._resetState(),this):(new l).parser(e)}_resetState(){a("_resetState: resetting packet, error, _list, and _stateCounter"),this.packet=new s,this.error=null,this._list=n(),this._stateCounter=0}parse(e){for(this.error&&this._resetState(),this._list.append(e),a("parse: current state: %s",this._states[this._stateCounter]);(-1!==this.packet.length||this._list.length>0)&&this[this._states[this._stateCounter]]()&&!this.error;)this._stateCounter++,a("parse: state complete. _stateCounter is now: %d",this._stateCounter),a("parse: packet.length: %d, buffer list length: %d",this.packet.length,this._list.length),this._stateCounter>=this._states.length&&(this._stateCounter=0);return a("parse: exited while loop. packet: %d, buffer list length: %d",this.packet.length,this._list.length),this._list.length}_parseHeader(){const e=this._list.readUInt8(0),t=e>>o.CMD_SHIFT;this.packet.cmd=o.types[t];const r=15&e,n=o.requiredHeaderFlags[t];return null!=n&&r!==n?this._emitError(new Error(o.requiredHeaderFlagsErrors[t])):(this.packet.retain=0!=(e&o.RETAIN_MASK),this.packet.qos=e>>o.QOS_SHIFT&o.QOS_MASK,this.packet.qos>2?this._emitError(new Error("Packet must not have both QoS bits set to 1")):(this.packet.dup=0!=(e&o.DUP_MASK),a("_parseHeader: packet: %o",this.packet),this._list.consume(1),!0))}_parseLength(){const e=this._parseVarByteNum(!0);return e&&(this.packet.length=e.value,this._list.consume(e.bytes)),a("_parseLength %d",e.value),!!e}_parsePayload(){a("_parsePayload: payload %O",this._list);let e=!1;if(0===this.packet.length||this._list.length>=this.packet.length){switch(this._pos=0,this.packet.cmd){case"connect":this._parseConnect();break;case"connack":this._parseConnack();break;case"publish":this._parsePublish();break;case"puback":case"pubrec":case"pubrel":case"pubcomp":this._parseConfirmation();break;case"subscribe":this._parseSubscribe();break;case"suback":this._parseSuback();break;case"unsubscribe":this._parseUnsubscribe();break;case"unsuback":this._parseUnsuback();break;case"pingreq":case"pingresp":break;case"disconnect":this._parseDisconnect();break;case"auth":this._parseAuth();break;default:this._emitError(new Error("Not supported"))}e=!0}return a("_parsePayload complete result: %s",e),e}_parseConnect(){let e,t,r,n;a("_parseConnect");const i={},s=this.packet,l=this._parseString();if(null===l)return this._emitError(new Error("Cannot parse protocolId"));if("MQTT"!==l&&"MQIsdp"!==l)return this._emitError(new Error("Invalid protocolId"));if(s.protocolId=l,this._pos>=this._list.length)return this._emitError(new Error("Packet too short"));if(s.protocolVersion=this._list.readUInt8(this._pos),s.protocolVersion>=128&&(s.bridgeMode=!0,s.protocolVersion=s.protocolVersion-128),3!==s.protocolVersion&&4!==s.protocolVersion&&5!==s.protocolVersion)return this._emitError(new Error("Invalid protocol version"));if(this._pos++,this._pos>=this._list.length)return this._emitError(new Error("Packet too short"));if(1&this._list.readUInt8(this._pos))return this._emitError(new Error("Connect flag bit 0 must be 0, but got 1"));i.username=this._list.readUInt8(this._pos)&o.USERNAME_MASK,i.password=this._list.readUInt8(this._pos)&o.PASSWORD_MASK,i.will=this._list.readUInt8(this._pos)&o.WILL_FLAG_MASK;const u=!!(this._list.readUInt8(this._pos)&o.WILL_RETAIN_MASK),c=(this._list.readUInt8(this._pos)&o.WILL_QOS_MASK)>>o.WILL_QOS_SHIFT;if(i.will)s.will={},s.will.retain=u,s.will.qos=c;else{if(u)return this._emitError(new Error("Will Retain Flag must be set to zero when Will Flag is set to 0"));if(c)return this._emitError(new Error("Will QoS must be set to zero when Will Flag is set to 0"))}if(s.clean=0!=(this._list.readUInt8(this._pos)&o.CLEAN_SESSION_MASK),this._pos++,s.keepalive=this._parseNum(),-1===s.keepalive)return this._emitError(new Error("Packet too short"));if(5===s.protocolVersion){const e=this._parseProperties();Object.getOwnPropertyNames(e).length&&(s.properties=e)}const h=this._parseString();if(null===h)return this._emitError(new Error("Packet too short"));if(s.clientId=h,a("_parseConnect: packet.clientId: %s",s.clientId),i.will){if(5===s.protocolVersion){const e=this._parseProperties();Object.getOwnPropertyNames(e).length&&(s.will.properties=e)}if(e=this._parseString(),null===e)return this._emitError(new Error("Cannot parse will topic"));if(s.will.topic=e,a("_parseConnect: packet.will.topic: %s",s.will.topic),t=this._parseBuffer(),null===t)return this._emitError(new Error("Cannot parse will payload"));s.will.payload=t,a("_parseConnect: packet.will.paylaod: %s",s.will.payload)}if(i.username){if(n=this._parseString(),null===n)return this._emitError(new Error("Cannot parse username"));s.username=n,a("_parseConnect: packet.username: %s",s.username)}if(i.password){if(r=this._parseBuffer(),null===r)return this._emitError(new Error("Cannot parse password"));s.password=r}return this.settings=s,a("_parseConnect: complete"),s}_parseConnack(){a("_parseConnack");const e=this.packet;if(this._list.length<1)return null;const t=this._list.readUInt8(this._pos++);if(t>1)return this._emitError(new Error("Invalid connack flags, bits 7-1 must be set to 0"));if(e.sessionPresent=!!(t&o.SESSIONPRESENT_MASK),5===this.settings.protocolVersion)this._list.length>=2?e.reasonCode=this._list.readUInt8(this._pos++):e.reasonCode=0;else{if(this._list.length<2)return null;e.returnCode=this._list.readUInt8(this._pos++)}if(-1===e.returnCode||-1===e.reasonCode)return this._emitError(new Error("Cannot parse return code"));if(5===this.settings.protocolVersion){const t=this._parseProperties();Object.getOwnPropertyNames(t).length&&(e.properties=t)}a("_parseConnack: complete")}_parsePublish(){a("_parsePublish");const e=this.packet;if(e.topic=this._parseString(),null===e.topic)return this._emitError(new Error("Cannot parse topic"));if(!(e.qos>0)||this._parseMessageId()){if(5===this.settings.protocolVersion){const t=this._parseProperties();Object.getOwnPropertyNames(t).length&&(e.properties=t)}e.payload=this._list.slice(this._pos,e.length),a("_parsePublish: payload from buffer list: %o",e.payload)}}_parseSubscribe(){a("_parseSubscribe");const e=this.packet;let t,r,n,i,s,l,u;if(e.subscriptions=[],this._parseMessageId()){if(5===this.settings.protocolVersion){const t=this._parseProperties();Object.getOwnPropertyNames(t).length&&(e.properties=t)}if(e.length<=0)return this._emitError(new Error("Malformed subscribe, no payload specified"));for(;this._pos=e.length)return this._emitError(new Error("Malformed Subscribe Payload"));if(r=this._parseByte(),5===this.settings.protocolVersion){if(192&r)return this._emitError(new Error("Invalid subscribe topic flag bits, bits 7-6 must be 0"))}else if(252&r)return this._emitError(new Error("Invalid subscribe topic flag bits, bits 7-2 must be 0"));if(n=r&o.SUBSCRIBE_OPTIONS_QOS_MASK,n>2)return this._emitError(new Error("Invalid subscribe QoS, must be <= 2"));if(l=0!=(r>>o.SUBSCRIBE_OPTIONS_NL_SHIFT&o.SUBSCRIBE_OPTIONS_NL_MASK),s=0!=(r>>o.SUBSCRIBE_OPTIONS_RAP_SHIFT&o.SUBSCRIBE_OPTIONS_RAP_MASK),i=r>>o.SUBSCRIBE_OPTIONS_RH_SHIFT&o.SUBSCRIBE_OPTIONS_RH_MASK,i>2)return this._emitError(new Error("Invalid retain handling, must be <= 2"));u={topic:t,qos:n},5===this.settings.protocolVersion?(u.nl=l,u.rap=s,u.rh=i):this.settings.bridgeMode&&(u.rh=0,u.rap=!0,u.nl=!0),a("_parseSubscribe: push subscription `%s` to subscription",u),e.subscriptions.push(u)}}}_parseSuback(){a("_parseSuback");const e=this.packet;if(this.packet.granted=[],this._parseMessageId()){if(5===this.settings.protocolVersion){const t=this._parseProperties();Object.getOwnPropertyNames(t).length&&(e.properties=t)}if(e.length<=0)return this._emitError(new Error("Malformed suback, no payload specified"));for(;this._pos2&&128!==e)return this._emitError(new Error("Invalid suback QoS, must be 0, 1, 2 or 128"));this.packet.granted.push(e)}}}_parseUnsubscribe(){a("_parseUnsubscribe");const e=this.packet;if(e.unsubscriptions=[],this._parseMessageId()){if(5===this.settings.protocolVersion){const t=this._parseProperties();Object.getOwnPropertyNames(t).length&&(e.properties=t)}if(e.length<=0)return this._emitError(new Error("Malformed unsubscribe, no payload specified"));for(;this._pos2){switch(e.reasonCode=this._parseByte(),this.packet.cmd){case"puback":case"pubrec":if(!o.MQTT5_PUBACK_PUBREC_CODES[e.reasonCode])return this._emitError(new Error("Invalid "+this.packet.cmd+" reason code"));break;case"pubrel":case"pubcomp":if(!o.MQTT5_PUBREL_PUBCOMP_CODES[e.reasonCode])return this._emitError(new Error("Invalid "+this.packet.cmd+" reason code"))}a("_parseConfirmation: packet.reasonCode `%d`",e.reasonCode)}else e.reasonCode=0;if(e.length>3){const t=this._parseProperties();Object.getOwnPropertyNames(t).length&&(e.properties=t)}}return!0}_parseDisconnect(){const e=this.packet;if(a("_parseDisconnect"),5===this.settings.protocolVersion){this._list.length>0?(e.reasonCode=this._parseByte(),o.MQTT5_DISCONNECT_CODES[e.reasonCode]||this._emitError(new Error("Invalid disconnect reason code"))):e.reasonCode=0;const t=this._parseProperties();Object.getOwnPropertyNames(t).length&&(e.properties=t)}return a("_parseDisconnect result: true"),!0}_parseAuth(){a("_parseAuth");const e=this.packet;if(5!==this.settings.protocolVersion)return this._emitError(new Error("Not supported auth packet for this version MQTT"));if(e.reasonCode=this._parseByte(),!o.MQTT5_AUTH_CODES[e.reasonCode])return this._emitError(new Error("Invalid auth reason code"));const t=this._parseProperties();return Object.getOwnPropertyNames(t).length&&(e.properties=t),a("_parseAuth: result: true"),!0}_parseMessageId(){const e=this.packet;return e.messageId=this._parseNum(),null===e.messageId?(this._emitError(new Error("Cannot parse messageId")),!1):(a("_parseMessageId: packet.messageId %d",e.messageId),!0)}_parseString(e){const t=this._parseNum(),r=t+this._pos;if(-1===t||r>this._list.length||r>this.packet.length)return null;const n=this._list.toString("utf8",this._pos,r);return this._pos+=t,a("_parseString: result: %s",n),n}_parseStringPair(){return a("_parseStringPair"),{name:this._parseString(),value:this._parseString()}}_parseBuffer(){const e=this._parseNum(),t=e+this._pos;if(-1===e||t>this._list.length||t>this.packet.length)return null;const r=this._list.slice(this._pos,t);return this._pos+=e,a("_parseBuffer: result: %o",r),r}_parseNum(){if(this._list.length-this._pos<2)return-1;const e=this._list.readUInt16BE(this._pos);return this._pos+=2,a("_parseNum: result: %s",e),e}_parse4ByteNum(){if(this._list.length-this._pos<4)return-1;const e=this._list.readUInt32BE(this._pos);return this._pos+=4,a("_parse4ByteNum: result: %s",e),e}_parseVarByteNum(e){a("_parseVarByteNum");let t,r=0,n=1,i=0,s=!1;const l=this._pos?this._pos:0;for(;r<4&&l+r=r&&this._emitError(new Error("Invalid variable byte integer")),l&&(this._pos+=r),s=!!s&&(e?{bytes:r,value:i}:i),a("_parseVarByteNum: result: %o",s),s}_parseByte(){let e;return this._pos=4)&&(h||u))y+=i.byteLength(h)+2;else{if(a<4)return t.destroy(new Error("clientId must be supplied before 3.1.1")),!1;if(1*u==0)return t.destroy(new Error("clientId must be given if cleanSession set to 0")),!1}if("number"!=typeof c||c<0||c>65535||c%1!=0)return t.destroy(new Error("Invalid keepalive")),!1;y+=2;if(y+=1,5===a){if(g=T(t,p),!g)return!1;y+=g.length}if(l){if("object"!=typeof l)return t.destroy(new Error("Invalid will")),!1;if(!l.topic||"string"!=typeof l.topic)return t.destroy(new Error("Invalid will topic")),!1;if(y+=i.byteLength(l.topic)+2,y+=2,l.payload){if(!(l.payload.length>=0))return t.destroy(new Error("Invalid will payload")),!1;"string"==typeof l.payload?y+=i.byteLength(l.payload):y+=l.payload.length}if(m={},5===a){if(m=T(t,l.properties),!m)return!1;y+=m.length}}let _=!1;if(null!=f){if(!P(f))return t.destroy(new Error("Invalid username")),!1;_=!0,y+=i.byteLength(f)+2}if(null!=d){if(!_)return t.destroy(new Error("Username is required to use password")),!1;if(!P(d))return t.destroy(new Error("Invalid password")),!1;y+=C(d)+2}t.write(n.CONNECT_HEADER),w(t,y),k(t,o),s.bridgeMode&&(a+=128);t.write(131===a?n.VERSION131:132===a?n.VERSION132:4===a?n.VERSION4:5===a?n.VERSION5:n.VERSION3);let S=0;S|=null!=f?n.USERNAME_MASK:0,S|=null!=d?n.PASSWORD_MASK:0,S|=l&&l.retain?n.WILL_RETAIN_MASK:0,S|=l&&l.qos?l.qos<0&&b(t,d);null!=m&&m.write();return u("publish: payload: %o",f),t.write(f)}(e,t,r);case"puback":case"pubrec":case"pubrel":case"pubcomp":return function(e,t,r){const s=r?r.protocolVersion:4,o=e||{},a=o.cmd||"puback",l=o.messageId,u=o.dup&&"pubrel"===a?n.DUP_MASK:0;let c=0;const h=o.reasonCode,f=o.properties;let d=5===s?3:2;"pubrel"===a&&(c=1);if("number"!=typeof l)return t.destroy(new Error("Invalid messageId")),!1;let p=null;if(5===s&&"object"==typeof f){if(p=I(t,f,r,d),!p)return!1;d+=p.length}t.write(n.ACKS[a][c][u][0]),3===d&&(d+=0!==h?1:-1);w(t,d),b(t,l),5===s&&2!==d&&t.write(i.from([h]));null!==p?p.write():4===d&&t.write(i.from([0]));return!0}(e,t,r);case"subscribe":return function(e,t,r){u("subscribe: packet: ");const s=r?r.protocolVersion:4,o=e||{},a=o.dup?n.DUP_MASK:0,l=o.messageId,c=o.subscriptions,h=o.properties;let f=0;if("number"!=typeof l)return t.destroy(new Error("Invalid messageId")),!1;f+=2;let d=null;if(5===s){if(d=T(t,h),!d)return!1;f+=d.length}if("object"!=typeof c||!c.length)return t.destroy(new Error("Invalid subscriptions")),!1;for(let e=0;e2)return t.destroy(new Error("Invalid subscriptions - invalid Retain Handling")),!1}f+=i.byteLength(r)+2+1}u("subscribe: writing to stream: %o",n.SUBSCRIBE_HEADER),t.write(n.SUBSCRIBE_HEADER[1][a?1:0][0]),w(t,f),b(t,l),null!==d&&d.write();let p=!0;for(const e of c){const r=e.topic,o=e.qos,a=+e.nl,l=+e.rap,u=e.rh;let c;v(t,r),c=n.SUBSCRIBE_OPTIONS_QOS[o],5===s&&(c|=a?n.SUBSCRIBE_OPTIONS_NL:0,c|=l?n.SUBSCRIBE_OPTIONS_RAP:0,c|=u?n.SUBSCRIBE_OPTIONS_RH[u]:0),p=t.write(i.from([c]))}return p}(e,t,r);case"suback":return function(e,t,r){const s=r?r.protocolVersion:4,o=e||{},a=o.messageId,l=o.granted,u=o.properties;let c=0;if("number"!=typeof a)return t.destroy(new Error("Invalid messageId")),!1;c+=2;if("object"!=typeof l||!l.length)return t.destroy(new Error("Invalid qos vector")),!1;for(let e=0;eb===E,set(e){e?(c&&0!==Object.keys(c).length||(g=!0),b=E):(g=!1,b=A)}});const _={};function w(e,t){if(t>n.VARBYTEINT_MAX)return e.destroy(new Error(`Invalid variable byte integer: ${t}`)),!1;let r=_[t];return r||(r=d(t),t<16384&&(_[t]=r)),u("writeVarByteInt: writing to stream: %o",r),e.write(r)}function v(e,t){const r=i.byteLength(t);return b(e,r),u("writeString: %s",t),e.write(t,"utf8")}function S(e,t,r){v(e,t),v(e,r)}function E(e,t){return u("writeNumberCached: number: %d",t),u("writeNumberCached: %o",c[t]),e.write(c[t])}function A(e,t){const r=h(t);return u("writeNumberGenerated: %o",r),e.write(r)}function k(e,t){"string"==typeof t?v(e,t):t?(b(e,t.length),e.write(t)):b(e,0)}function T(e,t){if("object"!=typeof t||null!=t.length)return{length:1,write(){O(e,{},0)}};let r=0;function s(t,r){let s=0;switch(n.propertiesTypes[t]){case"byte":if("boolean"!=typeof r)return e.destroy(new Error(`Invalid ${t}: ${r}`)),!1;s+=2;break;case"int8":if("number"!=typeof r||r<0||r>255)return e.destroy(new Error(`Invalid ${t}: ${r}`)),!1;s+=2;break;case"binary":if(r&&null===r)return e.destroy(new Error(`Invalid ${t}: ${r}`)),!1;s+=1+i.byteLength(r)+2;break;case"int16":if("number"!=typeof r||r<0||r>65535)return e.destroy(new Error(`Invalid ${t}: ${r}`)),!1;s+=3;break;case"int32":if("number"!=typeof r||r<0||r>4294967295)return e.destroy(new Error(`Invalid ${t}: ${r}`)),!1;s+=5;break;case"var":if("number"!=typeof r||r<0||r>268435455)return e.destroy(new Error(`Invalid ${t}: ${r}`)),!1;s+=1+i.byteLength(d(r));break;case"string":if("string"!=typeof r)return e.destroy(new Error(`Invalid ${t}: ${r}`)),!1;s+=3+i.byteLength(r.toString());break;case"pair":if("object"!=typeof r)return e.destroy(new Error(`Invalid ${t}: ${r}`)),!1;s+=Object.getOwnPropertyNames(r).reduce(((e,t)=>{const n=r[t];return Array.isArray(n)?e+=n.reduce(((e,r)=>e+=3+i.byteLength(t.toString())+2+i.byteLength(r.toString())),0):e+=3+i.byteLength(t.toString())+2+i.byteLength(r[t].toString()),e}),0);break;default:return e.destroy(new Error(`Invalid property ${t}: ${r}`)),!1}return s}if(t)for(const e in t){let n=0,i=0;const o=t[e];if(Array.isArray(o))for(let t=0;ts;){const r=i.shift();if(!r||!t[r])return!1;delete t[r],o=T(e,t)}return o}function R(e,t,r){switch(n.propertiesTypes[t]){case"byte":e.write(i.from([n.properties[t]])),e.write(i.from([+r]));break;case"int8":e.write(i.from([n.properties[t]])),e.write(i.from([r]));break;case"binary":e.write(i.from([n.properties[t]])),k(e,r);break;case"int16":e.write(i.from([n.properties[t]])),b(e,r);break;case"int32":e.write(i.from([n.properties[t]])),function(e,t){const r=p(t);u("write4ByteNumber: %o",r),e.write(r)}(e,r);break;case"var":e.write(i.from([n.properties[t]])),w(e,r);break;case"string":e.write(i.from([n.properties[t]])),v(e,r);break;case"pair":Object.getOwnPropertyNames(r).forEach((s=>{const o=r[s];Array.isArray(o)?o.forEach((r=>{e.write(i.from([n.properties[t]])),S(e,s.toString(),r.toString())})):(e.write(i.from([n.properties[t]])),S(e,s.toString(),o.toString()))}));break;default:return e.destroy(new Error(`Invalid property ${t} value: ${r}`)),!1}}function O(e,t,r){w(e,r);for(const r in t)if(Object.prototype.hasOwnProperty.call(t,r)&&null!==t[r]){const n=t[r];if(Array.isArray(n))for(let t=0;t=1.5*r;return Math.round(e/r)+" "+n+(i?"s":"")}t.exports=function(e,t){t=t||{};var r=typeof e;if("string"===r&&e.length>0)return function(e){if((e=String(e)).length>100)return;var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(!t)return;var r=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return r*l;case"weeks":case"week":case"w":return r*a;case"days":case"day":case"d":return r*o;case"hours":case"hour":case"hrs":case"hr":case"h":return r*s;case"minutes":case"minute":case"mins":case"min":case"m":return r*i;case"seconds":case"second":case"secs":case"sec":case"s":return r*n;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}(e);if("number"===r&&isFinite(e))return t.long?function(e){var t=Math.abs(e);if(t>=o)return u(e,t,o,"day");if(t>=s)return u(e,t,s,"hour");if(t>=i)return u(e,t,i,"minute");if(t>=n)return u(e,t,n,"second");return e+" ms"}(e):function(e){var t=Math.abs(e);if(t>=o)return Math.round(e/o)+"d";if(t>=s)return Math.round(e/s)+"h";if(t>=i)return Math.round(e/i)+"m";if(t>=n)return Math.round(e/n)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},{}],98:[function(e,t,r){const n=e("./lib/number-allocator.js");t.exports.NumberAllocator=n},{"./lib/number-allocator.js":99}],99:[function(e,t,r){"use strict";const n=e("js-sdsl").OrderedSet,i=e("debug")("number-allocator:trace"),s=e("debug")("number-allocator:error");function o(e,t){this.low=e,this.high=t}function a(e,t){if(!(this instanceof a))return new a(e,t);this.min=e,this.max=t,this.ss=new n([],((e,t)=>e.compare(t))),i("Create"),this.clear()}o.prototype.equals=function(e){return this.low===e.low&&this.high===e.high},o.prototype.compare=function(e){return this.lowe)&&(n===e?(this.ss.updateKeyByIterator(r,new o(n+1,s)),i("use():"+e),!0):s===e?(this.ss.updateKeyByIterator(r,new o(n,s-1)),i("use():"+e),!0):(this.ss.updateKeyByIterator(r,new o(e+1,s)),this.ss.insert(new o(n,e-1)),i("use():"+e),!0))}return i("use():failed"),!1},a.prototype.free=function(e){if(ethis.max)return void s("free():"+e+" is out of range");const t=new o(e,e),r=this.ss.upperBound(t);if(r.equals(this.ss.end())){if(r.equals(this.ss.begin()))return void this.ss.insert(t);r.pre();const n=r.pointer.high;r.pointer.high+1===e?this.ss.updateKeyByIterator(r,new o(n,e)):this.ss.insert(t)}else if(r.equals(this.ss.begin()))if(e+1===r.pointer.low){const t=r.pointer.high;this.ss.updateKeyByIterator(r,new o(e,t))}else this.ss.insert(t);else{const n=r.pointer.low,i=r.pointer.high;r.pre();const s=r.pointer.low;r.pointer.high+1===e?e+1===n?(this.ss.eraseElementByIterator(r),this.ss.updateKeyByIterator(r,new o(s,i))):this.ss.updateKeyByIterator(r,new o(s,e)):e+1===n?(this.ss.eraseElementByIterator(r.next()),this.ss.insert(new o(e,i))):this.ss.insert(t)}i("free():"+e)},a.prototype.clear=function(){i("clear()"),this.ss.clear(),this.ss.insert(new o(this.min,this.max))},a.prototype.intervalCount=function(){return this.ss.size()},a.prototype.dump=function(){console.log("length:"+this.ss.size());for(const e of this.ss)console.log(e)},t.exports=a},{debug:30,"js-sdsl":69}],100:[function(e,t,r){var n=e("wrappy");function i(e){var t=function(){return t.called?t.value:(t.called=!0,t.value=e.apply(this,arguments))};return t.called=!1,t}function s(e){var t=function(){if(t.called)throw new Error(t.onceError);return t.called=!0,t.value=e.apply(this,arguments)},r=e.name||"Function wrapped with `once`";return t.onceError=r+" shouldn't be called more than once",t.called=!1,t}t.exports=n(i),t.exports.strict=n(s),i.proto=i((function(){Object.defineProperty(Function.prototype,"once",{value:function(){return i(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return s(this)},configurable:!0})}))},{wrappy:140}],101:[function(e,t,r){(function(e){(function(){"use strict";void 0===e||!e.version||0===e.version.indexOf("v0.")||0===e.version.indexOf("v1.")&&0!==e.version.indexOf("v1.8.")?t.exports={nextTick:function(t,r,n,i){if("function"!=typeof t)throw new TypeError('"callback" argument must be a function');var s,o,a=arguments.length;switch(a){case 0:case 1:return e.nextTick(t);case 2:return e.nextTick((function(){t.call(null,r)}));case 3:return e.nextTick((function(){t.call(null,r,n)}));case 4:return e.nextTick((function(){t.call(null,r,n,i)}));default:for(s=new Array(a-1),o=0;o1)for(var r=1;r= 0x80 (not a basic code point)","invalid-input":"Invalid input"},S=c-h,E=Math.floor,A=String.fromCharCode;function k(e){throw new RangeError(v[e])}function T(e,t){for(var r=e.length,n=[];r--;)n[r]=t(e[r]);return n}function I(e,t){var r=e.split("@"),n="";return r.length>1&&(n=r[0]+"@",e=r[1]),n+T((e=e.replace(w,".")).split("."),t).join(".")}function R(e){for(var t,r,n=[],i=0,s=e.length;i=55296&&t<=56319&&i65535&&(t+=A((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=A(e)})).join("")}function C(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function P(e,t,r){var n=0;for(e=r?E(e/p):e>>1,e+=E(e/t);e>S*f>>1;n+=c)e=E(e/S);return E(n+(S+1)*e/(e+d))}function x(e){var t,r,n,i,s,o,a,l,d,p,y,_=[],w=e.length,v=0,S=g,A=b;for((r=e.lastIndexOf(m))<0&&(r=0),n=0;n=128&&k("not-basic"),_.push(e.charCodeAt(n));for(i=r>0?r+1:0;i=w&&k("invalid-input"),((l=(y=e.charCodeAt(i++))-48<10?y-22:y-65<26?y-65:y-97<26?y-97:c)>=c||l>E((u-v)/o))&&k("overflow"),v+=l*o,!(l<(d=a<=A?h:a>=A+f?f:a-A));a+=c)o>E(u/(p=c-d))&&k("overflow"),o*=p;A=P(v-s,t=_.length+1,0==s),E(v/t)>u-S&&k("overflow"),S+=E(v/t),v%=t,_.splice(v++,0,S)}return O(_)}function M(e){var t,r,n,i,s,o,a,l,d,p,y,_,w,v,S,T=[];for(_=(e=R(e)).length,t=g,r=0,s=b,o=0;o<_;++o)(y=e[o])<128&&T.push(A(y));for(n=i=T.length,i&&T.push(m);n<_;){for(a=u,o=0;o<_;++o)(y=e[o])>=t&&yE((u-r)/(w=n+1))&&k("overflow"),r+=(a-t)*w,t=a,o=0;o<_;++o)if((y=e[o])u&&k("overflow"),y==t){for(l=r,d=c;!(l<(p=d<=s?h:d>=s+f?f:d-s));d+=c)S=l-p,v=c-p,T.push(A(C(p+S%v,0))),l=E(S/v);T.push(A(C(l,0))),s=P(r,w,n==i),r=0,++n}++r,++t}return T.join("")}if(a={version:"1.4.1",ucs2:{decode:R,encode:O},decode:x,encode:M,toASCII:function(e){return I(e,(function(e){return _.test(e)?"xn--"+M(e):e}))},toUnicode:function(e){return I(e,(function(e){return y.test(e)?x(e.slice(4).toLowerCase()):e}))}},i&&s)if(t.exports==i)s.exports=a;else for(l in a)a.hasOwnProperty(l)&&(i[l]=a[l]);else n.punycode=a}(this)}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],104:[function(e,t,r){"use strict";function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.exports=function(e,t,r,s){t=t||"&",r=r||"=";var o={};if("string"!=typeof e||0===e.length)return o;var a=/\+/g;e=e.split(t);var l=1e3;s&&"number"==typeof s.maxKeys&&(l=s.maxKeys);var u=e.length;l>0&&u>l&&(u=l);for(var c=0;c=0?(h=b.substr(0,g),f=b.substr(g+1)):(h=b,f=""),d=decodeURIComponent(h),p=decodeURIComponent(f),n(o,d)?i(o[d])?o[d].push(p):o[d]=[o[d],p]:o[d]=p}return o};var i=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},{}],105:[function(e,t,r){"use strict";var n=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};t.exports=function(e,t,r,a){return t=t||"&",r=r||"=",null===e&&(e=void 0),"object"==typeof e?s(o(e),(function(o){var a=encodeURIComponent(n(o))+r;return i(e[o])?s(e[o],(function(e){return a+encodeURIComponent(n(e))})).join(t):a+encodeURIComponent(n(e[o]))})).join(t):a?encodeURIComponent(n(a))+r+encodeURIComponent(n(e)):""};var i=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};function s(e,t){if(e.map)return e.map(t);for(var r=[],n=0;n{if("object"!=typeof e||!("aborted"in e))throw new u(t,"AbortSignal",e)})(e,"signal"),!s(r)&&!o(r))throw new u("stream",["ReadableStream","WritableStream","Stream"],r);return t.exports.addAbortSignalNoValidate(e,r)},t.exports.addAbortSignalNoValidate=function(e,t){if("object"!=typeof e||!("aborted"in e))return t;const r=s(t)?()=>{t.destroy(new n(void 0,{cause:e.reason}))}:()=>{t[a](new n(void 0,{cause:e.reason}))};return e.aborted?r():(e.addEventListener("abort",r),l(t,(()=>e.removeEventListener("abort",r)))),t}},{"../../ours/errors":126,"./end-of-stream":113,"./utils":122}],108:[function(e,t,r){"use strict";const{StringPrototypeSlice:n,SymbolIterator:i,TypedArrayPrototypeSet:s,Uint8Array:o}=e("../../ours/primordials"),{Buffer:a}=e("buffer"),{inspect:l}=e("../../ours/util");t.exports=class{constructor(){this.head=null,this.tail=null,this.length=0}push(e){const t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length}unshift(e){const t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length}shift(){if(0===this.length)return;const e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}clear(){this.head=this.tail=null,this.length=0}join(e){if(0===this.length)return"";let t=this.head,r=""+t.data;for(;null!==(t=t.next);)r+=e+t.data;return r}concat(e){if(0===this.length)return a.alloc(0);const t=a.allocUnsafe(e>>>0);let r=this.head,n=0;for(;r;)s(t,r.data,n),n+=r.data.length,r=r.next;return t}consume(e,t){const r=this.head.data;if(es.length)){e===s.length?(t+=s,++i,r.next?this.head=r.next:this.head=this.tail=null):(t+=n(s,0,e),this.head=r,r.data=n(s,e));break}t+=s,e-=s.length,++i}while(null!==(r=r.next));return this.length-=i,t}_getBuffer(e){const t=a.allocUnsafe(e),r=e;let n=this.head,i=0;do{const a=n.data;if(!(e>a.length)){e===a.length?(s(t,a,r-e),++i,n.next?this.head=n.next:this.head=this.tail=null):(s(t,new o(a.buffer,a.byteOffset,e),r-e),this.head=n,n.data=a.slice(e));break}s(t,a,r-e),e-=a.length,++i}while(null!==(n=n.next));return this.length-=i,t}[Symbol.for("nodejs.util.inspect.custom")](e,t){return l(this,{...t,depth:0,customInspect:!1})}}},{"../../ours/primordials":127,"../../ours/util":128,buffer:29}],109:[function(e,t,r){"use strict";const{pipeline:n}=e("./pipeline"),i=e("./duplex"),{destroyer:s}=e("./destroy"),{isNodeStream:o,isReadable:a,isWritable:l,isWebStream:u,isTransformStream:c,isWritableStream:h,isReadableStream:f}=e("./utils"),{AbortError:d,codes:{ERR_INVALID_ARG_VALUE:p,ERR_MISSING_ARGS:b}}=e("../../ours/errors"),g=e("./end-of-stream");t.exports=function(...e){if(0===e.length)throw new b("streams");if(1===e.length)return i.from(e[0]);const t=[...e];if("function"==typeof e[0]&&(e[0]=i.from(e[0])),"function"==typeof e[e.length-1]){const t=e.length-1;e[t]=i.from(e[t])}for(let r=0;r0&&!(l(e[r])||h(e[r])||c(e[r])))throw new p(`streams[${r}]`,t[r],"must be writable")}let r,m,y,_,w;const v=e[0],S=n(e,(function(e){const t=_;_=null,t?t(e):e?w.destroy(e):A||E||w.destroy()})),E=!!(l(v)||h(v)||c(v)),A=!!(a(S)||f(S)||c(S));if(w=new i({writableObjectMode:!(null==v||!v.writableObjectMode),readableObjectMode:!(null==S||!S.writableObjectMode),writable:E,readable:A}),E){if(o(v))w._write=function(e,t,n){v.write(e,t)?n():r=n},w._final=function(e){v.end(),m=e},v.on("drain",(function(){if(r){const e=r;r=null,e()}}));else if(u(v)){const e=(c(v)?v.writable:v).getWriter();w._write=async function(t,r,n){try{await e.ready,e.write(t).catch((()=>{})),n()}catch(e){n(e)}},w._final=async function(t){try{await e.ready,e.close().catch((()=>{})),m=t}catch(e){t(e)}}}const e=c(S)?S.readable:S;g(e,(()=>{if(m){const e=m;m=null,e()}}))}if(A)if(o(S))S.on("readable",(function(){if(y){const e=y;y=null,e()}})),S.on("end",(function(){w.push(null)})),w._read=function(){for(;;){const e=S.read();if(null===e)return void(y=w._read);if(!w.push(e))return}};else if(u(S)){const e=(c(S)?S.readable:S).getReader();w._read=async function(){for(;;)try{const{value:t,done:r}=await e.read();if(!w.push(t))return;if(r)return void w.push(null)}catch{return}}}return w._destroy=function(e,t){e||null===_||(e=new d),y=null,r=null,m=null,null===_?t(e):(_=t,o(S)&&s(S,e))},w}},{"../../ours/errors":126,"./destroy":110,"./duplex":111,"./end-of-stream":113,"./pipeline":118,"./utils":122}],110:[function(e,t,r){"use strict";const n=e("process/"),{aggregateTwoErrors:i,codes:{ERR_MULTIPLE_CALLBACK:s},AbortError:o}=e("../../ours/errors"),{Symbol:a}=e("../../ours/primordials"),{kDestroyed:l,isDestroyed:u,isFinished:c,isServerRequest:h}=e("./utils"),f=a("kDestroy"),d=a("kConstruct");function p(e,t,r){e&&(e.stack,t&&!t.errored&&(t.errored=e),r&&!r.errored&&(r.errored=e))}function b(e,t,r){let i=!1;function s(t){if(i)return;i=!0;const s=e._readableState,o=e._writableState;p(t,o,s),o&&(o.closed=!0),s&&(s.closed=!0),"function"==typeof r&&r(t),t?n.nextTick(g,e,t):n.nextTick(m,e)}try{e._destroy(t||null,s)}catch(t){s(t)}}function g(e,t){y(e,t),m(e)}function m(e){const t=e._readableState,r=e._writableState;r&&(r.closeEmitted=!0),t&&(t.closeEmitted=!0),(null!=r&&r.emitClose||null!=t&&t.emitClose)&&e.emit("close")}function y(e,t){const r=e._readableState,n=e._writableState;null!=n&&n.errorEmitted||null!=r&&r.errorEmitted||(n&&(n.errorEmitted=!0),r&&(r.errorEmitted=!0),e.emit("error",t))}function _(e,t,r){const i=e._readableState,s=e._writableState;if(null!=s&&s.destroyed||null!=i&&i.destroyed)return this;null!=i&&i.autoDestroy||null!=s&&s.autoDestroy?e.destroy(t):t&&(t.stack,s&&!s.errored&&(s.errored=t),i&&!i.errored&&(i.errored=t),r?n.nextTick(y,e,t):y(e,t))}function w(e){let t=!1;function r(r){if(t)return void _(e,null!=r?r:new s);t=!0;const i=e._readableState,o=e._writableState,a=o||i;i&&(i.constructed=!0),o&&(o.constructed=!0),a.destroyed?e.emit(f,r):r?_(e,r,!0):n.nextTick(v,e)}try{e._construct((e=>{n.nextTick(r,e)}))}catch(e){n.nextTick(r,e)}}function v(e){e.emit(d)}function S(e){return(null==e?void 0:e.setHeader)&&"function"==typeof e.abort}function E(e){e.emit("close")}function A(e,t){e.emit("error",t),n.nextTick(E,e)}t.exports={construct:function(e,t){if("function"!=typeof e._construct)return;const r=e._readableState,i=e._writableState;r&&(r.constructed=!1),i&&(i.constructed=!1),e.once(d,t),e.listenerCount(d)>1||n.nextTick(w,e)},destroyer:function(e,t){e&&!u(e)&&(t||c(e)||(t=new o),h(e)?(e.socket=null,e.destroy(t)):S(e)?e.abort():S(e.req)?e.req.abort():"function"==typeof e.destroy?e.destroy(t):"function"==typeof e.close?e.close():t?n.nextTick(A,e,t):n.nextTick(E,e),e.destroyed||(e[l]=!0))},destroy:function(e,t){const r=this._readableState,n=this._writableState,s=n||r;return null!=n&&n.destroyed||null!=r&&r.destroyed?("function"==typeof t&&t(),this):(p(e,n,r),n&&(n.destroyed=!0),r&&(r.destroyed=!0),s.constructed?b(this,e,t):this.once(f,(function(r){b(this,i(r,e),t)})),this)},undestroy:function(){const e=this._readableState,t=this._writableState;e&&(e.constructed=!0,e.closed=!1,e.closeEmitted=!1,e.destroyed=!1,e.errored=null,e.errorEmitted=!1,e.reading=!1,e.ended=!1===e.readable,e.endEmitted=!1===e.readable),t&&(t.constructed=!0,t.destroyed=!1,t.closed=!1,t.closeEmitted=!1,t.errored=null,t.errorEmitted=!1,t.finalCalled=!1,t.prefinished=!1,t.ended=!1===t.writable,t.ending=!1===t.writable,t.finished=!1===t.writable)},errorOrDestroy:_}},{"../../ours/errors":126,"../../ours/primordials":127,"./utils":122,"process/":102}],111:[function(e,t,r){"use strict";const{ObjectDefineProperties:n,ObjectGetOwnPropertyDescriptor:i,ObjectKeys:s,ObjectSetPrototypeOf:o}=e("../../ours/primordials");t.exports=u;const a=e("./readable"),l=e("./writable");o(u.prototype,a.prototype),o(u,a);{const e=s(l.prototype);for(let t=0;t{h=!1,e&&g(t,e),p(e)})),u._write=function(e,t,i){r.write(e,t)?i():n=i},u._final=function(e){r.end(),i=e},r.on("drain",(function(){if(n){const e=n;n=null,e()}})),r.on("finish",(function(){if(i){const e=i;i=null,e()}}))),c&&(f(t,(e=>{c=!1,e&&g(t,e),p(e)})),t.on("readable",(function(){if(a){const e=a;a=null,e()}})),t.on("end",(function(){u.push(null)})),u._read=function(){for(;;){const e=t.read();if(null===e)return void(a=u._read);if(!u.push(e))return}}),u._destroy=function(e,s){e||null===l||(e=new d),a=null,n=null,i=null,null===l?s(e):(l=s,g(r,e),g(t,e))},u}t.exports=function e(t,r){if(h(t))return t;if(u(t))return T({readable:t});if(c(t))return T({writable:t});if(l(t))return T({writable:!1,readable:!1});if("function"==typeof t){const{value:e,write:i,final:s,destroy:o}=function(e){let{promise:t,resolve:r}=_();const i=new E,s=i.signal,o=e(async function*(){for(;;){const e=t;t=null;const{chunk:i,done:o,cb:a}=await e;if(n.nextTick(a),o)return;if(s.aborted)throw new d(void 0,{cause:s.reason});({promise:t,resolve:r}=_()),yield i}}(),{signal:s});return{value:o,write(e,t,n){const i=r;r=null,i({chunk:e,done:!1,cb:n})},final(e){const t=r;r=null,t({done:!0,cb:e})},destroy(e,t){i.abort(),t(e)}}}(t);if(a(e))return w(k,e,{objectMode:!0,write:i,final:s,destroy:o});const l=null==e?void 0:e.then;if("function"==typeof l){let t;const r=A(l,e,(e=>{if(null!=e)throw new b("nully","body",e)}),(e=>{g(t,e)}));return t=new k({objectMode:!0,readable:!1,write:i,final(e){s((async()=>{try{await r,n.nextTick(e,null)}catch(t){n.nextTick(e,t)}}))},destroy:o})}throw new b("Iterable, AsyncIterable or AsyncFunction",r,e)}if(S(t))return e(t.arrayBuffer());if(a(t))return w(k,t,{objectMode:!0,writable:!1});if("object"==typeof(null==t?void 0:t.writable)||"object"==typeof(null==t?void 0:t.readable)){return T({readable:null!=t&&t.readable?u(null==t?void 0:t.readable)?null==t?void 0:t.readable:e(t.readable):void 0,writable:null!=t&&t.writable?c(null==t?void 0:t.writable)?null==t?void 0:t.writable:e(t.writable):void 0})}const i=null==t?void 0:t.then;if("function"==typeof i){let e;return A(i,t,(t=>{null!=t&&e.push(t),e.push(null)}),(t=>{g(e,t)})),e=new k({objectMode:!0,writable:!1,read(){}})}throw new p(r,["Blob","ReadableStream","WritableStream","Stream","Iterable","AsyncIterable","Function","{ readable, writable } pair","Promise"],t)}},{"../../ours/errors":126,"../../ours/primordials":127,"../../ours/util":128,"./destroy":110,"./duplex":111,"./end-of-stream":113,"./from":114,"./readable":119,"./utils":122,"abort-controller":24,buffer:29,"process/":102}],113:[function(e,t,r){const n=e("process/"),{AbortError:i,codes:s}=e("../../ours/errors"),{ERR_INVALID_ARG_TYPE:o,ERR_STREAM_PREMATURE_CLOSE:a}=s,{kEmptyObject:l,once:u}=e("../../ours/util"),{validateAbortSignal:c,validateFunction:h,validateObject:f,validateBoolean:d}=e("../validators"),{Promise:p,PromisePrototypeThen:b}=e("../../ours/primordials"),{isClosed:g,isReadable:m,isReadableNodeStream:y,isReadableStream:_,isReadableFinished:w,isReadableErrored:v,isWritable:S,isWritableNodeStream:E,isWritableStream:A,isWritableFinished:k,isWritableErrored:T,isNodeStream:I,willEmitClose:R,kIsClosedPromise:O}=e("./utils");const C=()=>{};function P(e,t,r){var s,d;if(2===arguments.length?(r=t,t=l):null==t?t=l:f(t,"options"),h(r,"callback"),c(t.signal,"options.signal"),r=u(r),_(e)||A(e))return function(e,t,r){let s=!1,o=C;if(t.signal)if(o=()=>{s=!0,r.call(e,new i(void 0,{cause:t.signal.reason}))},t.signal.aborted)n.nextTick(o);else{const n=r;r=u(((...r)=>{t.signal.removeEventListener("abort",o),n.apply(e,r)})),t.signal.addEventListener("abort",o)}const a=(...t)=>{s||n.nextTick((()=>r.apply(e,t)))};return b(e[O].promise,a,a),C}(e,t,r);if(!I(e))throw new o("stream",["ReadableStream","WritableStream","Stream"],e);const p=null!==(s=t.readable)&&void 0!==s?s:y(e),P=null!==(d=t.writable)&&void 0!==d?d:E(e),x=e._writableState,M=e._readableState,B=()=>{e.writable||N()};let L=R(e)&&y(e)===p&&E(e)===P,j=k(e,!1);const N=()=>{j=!0,e.destroyed&&(L=!1),(!L||e.readable&&!p)&&(p&&!U||r.call(e))};let U=w(e,!1);const D=()=>{U=!0,e.destroyed&&(L=!1),(!L||e.writable&&!P)&&(P&&!j||r.call(e))},F=t=>{r.call(e,t)};let W=g(e);const q=()=>{W=!0;const t=T(e)||v(e);return t&&"boolean"!=typeof t?r.call(e,t):p&&!U&&y(e,!0)&&!w(e,!1)?r.call(e,new a):!P||j||k(e,!1)?void r.call(e):r.call(e,new a)},H=()=>{W=!0;const t=T(e)||v(e);if(t&&"boolean"!=typeof t)return r.call(e,t);r.call(e)},z=()=>{e.req.on("finish",N)};!function(e){return e.setHeader&&"function"==typeof e.abort}(e)?P&&!x&&(e.on("end",B),e.on("close",B)):(e.on("complete",N),L||e.on("abort",q),e.req?z():e.on("request",z)),L||"boolean"!=typeof e.aborted||e.on("aborted",q),e.on("end",D),e.on("finish",N),!1!==t.error&&e.on("error",F),e.on("close",q),W?n.nextTick(q):null!=x&&x.errorEmitted||null!=M&&M.errorEmitted?L||n.nextTick(H):(p||L&&!m(e)||!j&&!1!==S(e))&&(P||L&&!S(e)||!U&&!1!==m(e))?M&&e.req&&e.aborted&&n.nextTick(H):n.nextTick(H);const V=()=>{r=C,e.removeListener("aborted",q),e.removeListener("complete",N),e.removeListener("abort",q),e.removeListener("request",z),e.req&&e.req.removeListener("finish",N),e.removeListener("end",B),e.removeListener("close",B),e.removeListener("finish",N),e.removeListener("end",D),e.removeListener("error",F),e.removeListener("close",q)};if(t.signal&&!W){const s=()=>{const n=r;V(),n.call(e,new i(void 0,{cause:t.signal.reason}))};if(t.signal.aborted)n.nextTick(s);else{const n=r;r=u(((...r)=>{t.signal.removeEventListener("abort",s),n.apply(e,r)})),t.signal.addEventListener("abort",s)}}return V}t.exports=P,t.exports.finished=function(e,t){var r;let n=!1;return null===t&&(t=l),null!==(r=t)&&void 0!==r&&r.cleanup&&(d(t.cleanup,"cleanup"),n=t.cleanup),new p(((r,i)=>{const s=P(e,t,(e=>{n&&s(),e?i(e):r()}))}))}},{"../../ours/errors":126,"../../ours/primordials":127,"../../ours/util":128,"../validators":124,"./utils":122,"process/":102}],114:[function(e,t,r){"use strict";const n=e("process/"),{PromisePrototypeThen:i,SymbolAsyncIterator:s,SymbolIterator:o}=e("../../ours/primordials"),{Buffer:a}=e("buffer"),{ERR_INVALID_ARG_TYPE:l,ERR_STREAM_NULL_VALUES:u}=e("../../ours/errors").codes;t.exports=function(e,t,r){let c,h;if("string"==typeof t||t instanceof a)return new e({objectMode:!0,...r,read(){this.push(t),this.push(null)}});if(t&&t[s])h=!0,c=t[s]();else{if(!t||!t[o])throw new l("iterable",["Iterable"],t);h=!1,c=t[o]()}const f=new e({objectMode:!0,highWaterMark:1,...r});let d=!1;return f._read=function(){d||(d=!0,async function(){for(;;){try{const{value:e,done:t}=h?await c.next():c.next();if(t)f.push(null);else{const t=e&&"function"==typeof e.then?await e:e;if(null===t)throw d=!1,new u;if(f.push(t))continue;d=!1}}catch(e){f.destroy(e)}break}}())},f._destroy=function(e,t){i(async function(e){const t=null!=e,r="function"==typeof c.throw;if(t&&r){const{value:t,done:r}=await c.throw(e);if(await t,r)return}if("function"==typeof c.return){const{value:e}=await c.return();await e}}(e),(()=>n.nextTick(t,e)),(r=>n.nextTick(t,r||e)))},f}},{"../../ours/errors":126,"../../ours/primordials":127,buffer:29,"process/":102}],115:[function(e,t,r){"use strict";const{ArrayIsArray:n,ObjectSetPrototypeOf:i}=e("../../ours/primordials"),{EventEmitter:s}=e("events");function o(e){s.call(this,e)}function a(e,t,r){if("function"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?n(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}i(o.prototype,s.prototype),i(o,s),o.prototype.pipe=function(e,t){const r=this;function n(t){e.writable&&!1===e.write(t)&&r.pause&&r.pause()}function i(){r.readable&&r.resume&&r.resume()}r.on("data",n),e.on("drain",i),e._isStdio||t&&!1===t.end||(r.on("end",l),r.on("close",u));let o=!1;function l(){o||(o=!0,e.end())}function u(){o||(o=!0,"function"==typeof e.destroy&&e.destroy())}function c(e){h(),0===s.listenerCount(this,"error")&&this.emit("error",e)}function h(){r.removeListener("data",n),e.removeListener("drain",i),r.removeListener("end",l),r.removeListener("close",u),r.removeListener("error",c),e.removeListener("error",c),r.removeListener("end",h),r.removeListener("close",h),e.removeListener("close",h)}return a(r,"error",c),a(e,"error",c),r.on("end",h),r.on("close",h),e.on("close",h),e.emit("pipe",r),e},t.exports={Stream:o,prependListener:a}},{"../../ours/primordials":127,events:49}],116:[function(e,t,r){"use strict";const n=globalThis.AbortController||e("abort-controller").AbortController,{codes:{ERR_INVALID_ARG_VALUE:i,ERR_INVALID_ARG_TYPE:s,ERR_MISSING_ARGS:o,ERR_OUT_OF_RANGE:a},AbortError:l}=e("../../ours/errors"),{validateAbortSignal:u,validateInteger:c,validateObject:h}=e("../validators"),f=e("../../ours/primordials").Symbol("kWeak"),{finished:d}=e("./end-of-stream"),p=e("./compose"),{addAbortSignalNoValidate:b}=e("./add-abort-signal"),{isWritable:g,isNodeStream:m}=e("./utils"),{ArrayPrototypePush:y,MathFloor:_,Number:w,NumberIsNaN:v,Promise:S,PromiseReject:E,PromisePrototypeThen:A,Symbol:k}=e("../../ours/primordials"),T=k("kEmpty"),I=k("kEof");function R(e,t){if("function"!=typeof e)throw new s("fn",["Function","AsyncFunction"],e);null!=t&&h(t,"options"),null!=(null==t?void 0:t.signal)&&u(t.signal,"options.signal");let r=1;return null!=(null==t?void 0:t.concurrency)&&(r=_(t.concurrency)),c(r,"concurrency",1),async function*(){var i,s;const o=new n,a=this,u=[],c=o.signal,h={signal:c},f=()=>o.abort();let d,p;null!=t&&null!==(i=t.signal)&&void 0!==i&&i.aborted&&f(),null==t||null===(s=t.signal)||void 0===s||s.addEventListener("abort",f);let b=!1;function g(){b=!0}!async function(){try{for await(let t of a){var n;if(b)return;if(c.aborted)throw new l;try{t=e(t,h)}catch(e){t=E(e)}t!==T&&("function"==typeof(null===(n=t)||void 0===n?void 0:n.catch)&&t.catch(g),u.push(t),d&&(d(),d=null),!b&&u.length&&u.length>=r&&await new S((e=>{p=e})))}u.push(I)}catch(e){const t=E(e);A(t,void 0,g),u.push(t)}finally{var i;b=!0,d&&(d(),d=null),null==t||null===(i=t.signal)||void 0===i||i.removeEventListener("abort",f)}}();try{for(;;){for(;u.length>0;){const e=await u[0];if(e===I)return;if(c.aborted)throw new l;e!==T&&(yield e),u.shift(),p&&(p(),p=null)}await new S((e=>{d=e}))}}finally{o.abort(),b=!0,p&&(p(),p=null)}}.call(this)}async function O(e,t=void 0){for await(const r of C.call(this,e,t))return!0;return!1}function C(e,t){if("function"!=typeof e)throw new s("fn",["Function","AsyncFunction"],e);return R.call(this,(async function(t,r){return await e(t,r)?t:T}),t)}class P extends o{constructor(){super("reduce"),this.message="Reduce of an empty stream requires an initial value"}}function x(e){if(e=w(e),v(e))return 0;if(e<0)throw new a("number",">= 0",e);return e}t.exports.streamReturningOperators={asIndexedPairs:function(e=void 0){return null!=e&&h(e,"options"),null!=(null==e?void 0:e.signal)&&u(e.signal,"options.signal"),async function*(){let t=0;for await(const n of this){var r;if(null!=e&&null!==(r=e.signal)&&void 0!==r&&r.aborted)throw new l({cause:e.signal.reason});yield[t++,n]}}.call(this)},drop:function(e,t=void 0){return null!=t&&h(t,"options"),null!=(null==t?void 0:t.signal)&&u(t.signal,"options.signal"),e=x(e),async function*(){var r;if(null!=t&&null!==(r=t.signal)&&void 0!==r&&r.aborted)throw new l;for await(const r of this){var n;if(null!=t&&null!==(n=t.signal)&&void 0!==n&&n.aborted)throw new l;e--<=0&&(yield r)}}.call(this)},filter:C,flatMap:function(e,t){const r=R.call(this,e,t);return async function*(){for await(const e of r)yield*e}.call(this)},map:R,take:function(e,t=void 0){return null!=t&&h(t,"options"),null!=(null==t?void 0:t.signal)&&u(t.signal,"options.signal"),e=x(e),async function*(){var r;if(null!=t&&null!==(r=t.signal)&&void 0!==r&&r.aborted)throw new l;for await(const r of this){var n;if(null!=t&&null!==(n=t.signal)&&void 0!==n&&n.aborted)throw new l;if(!(e-- >0))return;yield r}}.call(this)},compose:function(e,t){if(null!=t&&h(t,"options"),null!=(null==t?void 0:t.signal)&&u(t.signal,"options.signal"),m(e)&&!g(e))throw new i("stream",e,"must be writable");const r=p(this,e);return null!=t&&t.signal&&b(t.signal,r),r}},t.exports.promiseReturningOperators={every:async function(e,t=void 0){if("function"!=typeof e)throw new s("fn",["Function","AsyncFunction"],e);return!await O.call(this,(async(...t)=>!await e(...t)),t)},forEach:async function(e,t){if("function"!=typeof e)throw new s("fn",["Function","AsyncFunction"],e);for await(const r of R.call(this,(async function(t,r){return await e(t,r),T}),t));},reduce:async function(e,t,r){var i;if("function"!=typeof e)throw new s("reducer",["Function","AsyncFunction"],e);null!=r&&h(r,"options"),null!=(null==r?void 0:r.signal)&&u(r.signal,"options.signal");let o=arguments.length>1;if(null!=r&&null!==(i=r.signal)&&void 0!==i&&i.aborted){const e=new l(void 0,{cause:r.signal.reason});throw this.once("error",(()=>{})),await d(this.destroy(e)),e}const a=new n,c=a.signal;if(null!=r&&r.signal){const e={once:!0,[f]:this};r.signal.addEventListener("abort",(()=>a.abort()),e)}let p=!1;try{for await(const n of this){var b;if(p=!0,null!=r&&null!==(b=r.signal)&&void 0!==b&&b.aborted)throw new l;o?t=await e(t,n,{signal:c}):(t=n,o=!0)}if(!p&&!o)throw new P}finally{a.abort()}return t},toArray:async function(e){null!=e&&h(e,"options"),null!=(null==e?void 0:e.signal)&&u(e.signal,"options.signal");const t=[];for await(const n of this){var r;if(null!=e&&null!==(r=e.signal)&&void 0!==r&&r.aborted)throw new l(void 0,{cause:e.signal.reason});y(t,n)}return t},some:O,find:async function(e,t){for await(const r of C.call(this,e,t))return r}}},{"../../ours/errors":126,"../../ours/primordials":127,"../validators":124,"./add-abort-signal":107,"./compose":109,"./end-of-stream":113,"./utils":122,"abort-controller":24}],117:[function(e,t,r){"use strict";const{ObjectSetPrototypeOf:n}=e("../../ours/primordials");t.exports=s;const i=e("./transform");function s(e){if(!(this instanceof s))return new s(e);i.call(this,e)}n(s.prototype,i.prototype),n(s,i),s.prototype._transform=function(e,t,r){r(null,e)}},{"../../ours/primordials":127,"./transform":121}],118:[function(e,t,r){const n=e("process/"),{ArrayIsArray:i,Promise:s,SymbolAsyncIterator:o}=e("../../ours/primordials"),a=e("./end-of-stream"),{once:l}=e("../../ours/util"),u=e("./destroy"),c=e("./duplex"),{aggregateTwoErrors:h,codes:{ERR_INVALID_ARG_TYPE:f,ERR_INVALID_RETURN_VALUE:d,ERR_MISSING_ARGS:p,ERR_STREAM_DESTROYED:b,ERR_STREAM_PREMATURE_CLOSE:g},AbortError:m}=e("../../ours/errors"),{validateFunction:y,validateAbortSignal:_}=e("../validators"),{isIterable:w,isReadable:v,isReadableNodeStream:S,isNodeStream:E,isTransformStream:A,isWebStream:k,isReadableStream:T,isReadableEnded:I}=e("./utils"),R=globalThis.AbortController||e("abort-controller").AbortController;let O,C;function P(e,t,r){let n=!1;e.on("close",(()=>{n=!0}));return{destroy:t=>{n||(n=!0,u.destroyer(e,t||new b("pipe")))},cleanup:a(e,{readable:t,writable:r},(e=>{n=!e}))}}function x(t){if(w(t))return t;if(S(t))return async function*(t){C||(C=e("./readable"));yield*C.prototype[o].call(t)}(t);throw new f("val",["Readable","Iterable","AsyncIterable"],t)}async function M(e,t,r,{end:n}){let i,o=null;const l=e=>{if(e&&(i=e),o){const e=o;o=null,e()}},u=()=>new s(((e,t)=>{i?t(i):o=()=>{i?t(i):e()}}));t.on("drain",l);const c=a(t,{readable:!1},l);try{t.writableNeedDrain&&await u();for await(const r of e)t.write(r)||await u();n&&t.end(),await u(),r()}catch(e){r(i!==e?h(i,e):e)}finally{c(),t.off("drain",l)}}async function B(e,t,r,{end:n}){A(t)&&(t=t.writable);const i=t.getWriter();try{for await(const t of e)await i.ready,i.write(t).catch((()=>{}));await i.ready,n&&await i.close(),r()}catch(e){try{await i.abort(e),r(e)}catch(e){r(e)}}}function L(t,r,s){if(1===t.length&&i(t[0])&&(t=t[0]),t.length<2)throw new p("streams");const o=new R,a=o.signal,l=null==s?void 0:s.signal,u=[];function h(){N(new m)}let b,g;_(l,"options.signal"),null==l||l.addEventListener("abort",h);const y=[];let I,C=0;function L(e){N(e,0==--C)}function N(e,t){if(!e||b&&"ERR_STREAM_PREMATURE_CLOSE"!==b.code||(b=e),b||t){for(;y.length;)y.shift()(b);null==l||l.removeEventListener("abort",h),o.abort(),t&&(b||u.forEach((e=>e())),n.nextTick(r,b,g))}}for(let W=0;W0,V=H||!1!==(null==s?void 0:s.end),$=W===t.length-1;if(E(q)){if(V){const{destroy:K,cleanup:G}=P(q,H,z);y.push(K),v(q)&&$&&u.push(G)}function U(e){e&&"AbortError"!==e.name&&"ERR_STREAM_PREMATURE_CLOSE"!==e.code&&L(e)}q.on("error",U),v(q)&&$&&u.push((()=>{q.removeListener("error",U)}))}if(0===W)if("function"==typeof q){if(I=q({signal:a}),!w(I))throw new d("Iterable, AsyncIterable or Stream","source",I)}else I=w(q)||S(q)||A(q)?q:c.from(q);else if("function"==typeof q){var D;if(A(I))I=x(null===(D=I)||void 0===D?void 0:D.readable);else I=x(I);if(I=q(I,{signal:a}),H){if(!w(I,!0))throw new d("AsyncIterable",`transform[${W-1}]`,I)}else{var F;O||(O=e("./passthrough"));const Q=new O({objectMode:!0}),Y=null===(F=I)||void 0===F?void 0:F.then;if("function"==typeof Y)C++,Y.call(I,(e=>{g=e,null!=e&&Q.write(e),V&&Q.end(),n.nextTick(L)}),(e=>{Q.destroy(e),n.nextTick(L,e)}));else if(w(I,!0))C++,M(I,Q,L,{end:V});else{if(!T(I)&&!A(I))throw new d("AsyncIterable or Promise","destination",I);{const X=I.readable||I;C++,M(X,Q,L,{end:V})}}I=Q;const{destroy:J,cleanup:Z}=P(I,!1,!0);y.push(J),$&&u.push(Z)}}else if(E(q)){if(S(I)){C+=2;const ee=j(I,q,L,{end:V});v(q)&&$&&u.push(ee)}else if(A(I)||T(I)){const te=I.readable||I;C++,M(te,q,L,{end:V})}else{if(!w(I))throw new f("val",["Readable","Iterable","AsyncIterable","ReadableStream","TransformStream"],I);C++,M(I,q,L,{end:V})}I=q}else if(k(q)){if(S(I))C++,B(x(I),q,L,{end:V});else if(T(I)||w(I))C++,B(I,q,L,{end:V});else{if(!A(I))throw new f("val",["Readable","Iterable","AsyncIterable","ReadableStream","TransformStream"],I);C++,B(I.readable,q,L,{end:V})}I=q}else I=c.from(q)}return(null!=a&&a.aborted||null!=l&&l.aborted)&&n.nextTick(h),I}function j(e,t,r,{end:i}){let s=!1;if(t.on("close",(()=>{s||r(new g)})),e.pipe(t,{end:!1}),i){function o(){s=!0,t.end()}I(e)?n.nextTick(o):e.once("end",o)}else r();return a(e,{readable:!0,writable:!1},(t=>{const n=e._readableState;t&&"ERR_STREAM_PREMATURE_CLOSE"===t.code&&n&&n.ended&&!n.errored&&!n.errorEmitted?e.once("end",r).once("error",r):r(t)})),a(t,{readable:!1,writable:!0},r)}t.exports={pipelineImpl:L,pipeline:function(...e){return L(e,l(function(e){return y(e[e.length-1],"streams[stream.length - 1]"),e.pop()}(e)))}}},{"../../ours/errors":126,"../../ours/primordials":127,"../../ours/util":128,"../validators":124,"./destroy":110,"./duplex":111,"./end-of-stream":113,"./passthrough":117,"./readable":119,"./utils":122,"abort-controller":24,"process/":102}],119:[function(e,t,r){const n=e("process/"),{ArrayPrototypeIndexOf:i,NumberIsInteger:s,NumberIsNaN:o,NumberParseInt:a,ObjectDefineProperties:l,ObjectKeys:u,ObjectSetPrototypeOf:c,Promise:h,SafeSet:f,SymbolAsyncIterator:d,Symbol:p}=e("../../ours/primordials");t.exports=D,D.ReadableState=U;const{EventEmitter:b}=e("events"),{Stream:g,prependListener:m}=e("./legacy"),{Buffer:y}=e("buffer"),{addAbortSignal:_}=e("./add-abort-signal"),w=e("./end-of-stream");let v=e("../../ours/util").debuglog("stream",(e=>{v=e}));const S=e("./buffer_list"),E=e("./destroy"),{getHighWaterMark:A,getDefaultHighWaterMark:k}=e("./state"),{aggregateTwoErrors:T,codes:{ERR_INVALID_ARG_TYPE:I,ERR_METHOD_NOT_IMPLEMENTED:R,ERR_OUT_OF_RANGE:O,ERR_STREAM_PUSH_AFTER_EOF:C,ERR_STREAM_UNSHIFT_AFTER_END_EVENT:P}}=e("../../ours/errors"),{validateObject:x}=e("../validators"),M=p("kPaused"),{StringDecoder:B}=e("string_decoder"),L=e("./from");c(D.prototype,g.prototype),c(D,g);const j=()=>{},{errorOrDestroy:N}=E;function U(t,r,n){"boolean"!=typeof n&&(n=r instanceof e("./duplex")),this.objectMode=!(!t||!t.objectMode),n&&(this.objectMode=this.objectMode||!(!t||!t.readableObjectMode)),this.highWaterMark=t?A(this,t,"readableHighWaterMark",n):k(!1),this.buffer=new S,this.length=0,this.pipes=[],this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.constructed=!0,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this[M]=null,this.errorEmitted=!1,this.emitClose=!t||!1!==t.emitClose,this.autoDestroy=!t||!1!==t.autoDestroy,this.destroyed=!1,this.errored=null,this.closed=!1,this.closeEmitted=!1,this.defaultEncoding=t&&t.defaultEncoding||"utf8",this.awaitDrainWriters=null,this.multiAwaitDrain=!1,this.readingMore=!1,this.dataEmitted=!1,this.decoder=null,this.encoding=null,t&&t.encoding&&(this.decoder=new B(t.encoding),this.encoding=t.encoding)}function D(t){if(!(this instanceof D))return new D(t);const r=this instanceof e("./duplex");this._readableState=new U(t,this,r),t&&("function"==typeof t.read&&(this._read=t.read),"function"==typeof t.destroy&&(this._destroy=t.destroy),"function"==typeof t.construct&&(this._construct=t.construct),t.signal&&!r&&_(t.signal,this)),g.call(this,t),E.construct(this,(()=>{this._readableState.needReadable&&V(this,this._readableState)}))}function F(e,t,r,n){v("readableAddChunk",t);const i=e._readableState;let s;if(i.objectMode||("string"==typeof t?(r=r||i.defaultEncoding,i.encoding!==r&&(n&&i.encoding?t=y.from(t,r).toString(i.encoding):(t=y.from(t,r),r=""))):t instanceof y?r="":g._isUint8Array(t)?(t=g._uint8ArrayToBuffer(t),r=""):null!=t&&(s=new I("chunk",["string","Buffer","Uint8Array"],t))),s)N(e,s);else if(null===t)i.reading=!1,function(e,t){if(v("onEofChunk"),t.ended)return;if(t.decoder){const e=t.decoder.end();e&&e.length&&(t.buffer.push(e),t.length+=t.objectMode?1:e.length)}t.ended=!0,t.sync?H(e):(t.needReadable=!1,t.emittedReadable=!0,z(e))}(e,i);else if(i.objectMode||t&&t.length>0)if(n)if(i.endEmitted)N(e,new P);else{if(i.destroyed||i.errored)return!1;W(e,i,t,!0)}else if(i.ended)N(e,new C);else{if(i.destroyed||i.errored)return!1;i.reading=!1,i.decoder&&!r?(t=i.decoder.write(t),i.objectMode||0!==t.length?W(e,i,t,!1):V(e,i)):W(e,i,t,!1)}else n||(i.reading=!1,V(e,i));return!i.ended&&(i.length0?(t.multiAwaitDrain?t.awaitDrainWriters.clear():t.awaitDrainWriters=null,t.dataEmitted=!0,e.emit("data",r)):(t.length+=t.objectMode?1:r.length,n?t.buffer.unshift(r):t.buffer.push(r),t.needReadable&&H(e)),V(e,t)}D.prototype.destroy=E.destroy,D.prototype._undestroy=E.undestroy,D.prototype._destroy=function(e,t){t(e)},D.prototype[b.captureRejectionSymbol]=function(e){this.destroy(e)},D.prototype.push=function(e,t){return F(this,e,t,!1)},D.prototype.unshift=function(e,t){return F(this,e,t,!0)},D.prototype.isPaused=function(){const e=this._readableState;return!0===e[M]||!1===e.flowing},D.prototype.setEncoding=function(e){const t=new B(e);this._readableState.decoder=t,this._readableState.encoding=this._readableState.decoder.encoding;const r=this._readableState.buffer;let n="";for(const e of r)n+=t.write(e);return r.clear(),""!==n&&r.push(n),this._readableState.length=n.length,this};function q(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:o(e)?t.flowing&&t.length?t.buffer.first().length:t.length:e<=t.length?e:t.ended?t.length:0}function H(e){const t=e._readableState;v("emitReadable",t.needReadable,t.emittedReadable),t.needReadable=!1,t.emittedReadable||(v("emitReadable",t.flowing),t.emittedReadable=!0,n.nextTick(z,e))}function z(e){const t=e._readableState;v("emitReadable_",t.destroyed,t.length,t.ended),t.destroyed||t.errored||!t.length&&!t.ended||(e.emit("readable"),t.emittedReadable=!1),t.needReadable=!t.flowing&&!t.ended&&t.length<=t.highWaterMark,Y(e)}function V(e,t){!t.readingMore&&t.constructed&&(t.readingMore=!0,n.nextTick($,e,t))}function $(e,t){for(;!t.reading&&!t.ended&&(t.length0,t.resumeScheduled&&!1===t[M]?t.flowing=!0:e.listenerCount("data")>0?e.resume():t.readableListening||(t.flowing=null)}function G(e){v("readable nexttick read 0"),e.read(0)}function Q(e,t){v("resume",t.reading),t.reading||e.read(0),t.resumeScheduled=!1,e.emit("resume"),Y(e),t.flowing&&!t.reading&&e.read(0)}function Y(e){const t=e._readableState;for(v("flow",t.flowing);t.flowing&&null!==e.read(););}function J(e,t){"function"!=typeof e.read&&(e=D.wrap(e,{objectMode:!0}));const r=async function*(e,t){let r,n=j;function i(t){this===e?(n(),n=j):n=t}e.on("readable",i);const s=w(e,{writable:!1},(e=>{r=e?T(r,e):null,n(),n=j}));try{for(;;){const t=e.destroyed?null:e.read();if(null!==t)yield t;else{if(r)throw r;if(null===r)return;await new h(i)}}}catch(e){throw r=T(r,e),r}finally{!r&&!1===(null==t?void 0:t.destroyOnReturn)||void 0!==r&&!e._readableState.autoDestroy?(e.off("readable",i),s()):E.destroyer(e,null)}}(e,t);return r.stream=e,r}function Z(e,t){if(0===t.length)return null;let r;return t.objectMode?r=t.buffer.shift():!e||e>=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.first():t.buffer.concat(t.length),t.buffer.clear()):r=t.buffer.consume(e,t.decoder),r}function X(e){const t=e._readableState;v("endReadable",t.endEmitted),t.endEmitted||(t.ended=!0,n.nextTick(ee,t,e))}function ee(e,t){if(v("endReadableNT",e.endEmitted,e.length),!e.errored&&!e.closeEmitted&&!e.endEmitted&&0===e.length)if(e.endEmitted=!0,t.emit("end"),t.writable&&!1===t.allowHalfOpen)n.nextTick(te,t);else if(e.autoDestroy){const e=t._writableState;(!e||e.autoDestroy&&(e.finished||!1===e.writable))&&t.destroy()}}function te(e){e.writable&&!e.writableEnded&&!e.destroyed&&e.end()}let re;function ne(){return void 0===re&&(re={}),re}D.prototype.read=function(e){v("read",e),void 0===e?e=NaN:s(e)||(e=a(e,10));const t=this._readableState,r=e;if(e>t.highWaterMark&&(t.highWaterMark=function(e){if(e>1073741824)throw new O("size","<= 1GiB",e);return e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,++e}(e)),0!==e&&(t.emittedReadable=!1),0===e&&t.needReadable&&((0!==t.highWaterMark?t.length>=t.highWaterMark:t.length>0)||t.ended))return v("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?X(this):H(this),null;if(0===(e=q(e,t))&&t.ended)return 0===t.length&&X(this),null;let n,i=t.needReadable;if(v("need readable",i),(0===t.length||t.length-e0?Z(e,t):null,null===n?(t.needReadable=t.length<=t.highWaterMark,e=0):(t.length-=e,t.multiAwaitDrain?t.awaitDrainWriters.clear():t.awaitDrainWriters=null),0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&X(this)),null===n||t.errorEmitted||t.closeEmitted||(t.dataEmitted=!0,this.emit("data",n)),n},D.prototype._read=function(e){throw new R("_read()")},D.prototype.pipe=function(e,t){const r=this,i=this._readableState;1===i.pipes.length&&(i.multiAwaitDrain||(i.multiAwaitDrain=!0,i.awaitDrainWriters=new f(i.awaitDrainWriters?[i.awaitDrainWriters]:[]))),i.pipes.push(e),v("pipe count=%d opts=%j",i.pipes.length,t);const s=(!t||!1!==t.end)&&e!==n.stdout&&e!==n.stderr?a:g;function o(t,n){v("onunpipe"),t===r&&n&&!1===n.hasUnpiped&&(n.hasUnpiped=!0,function(){v("cleanup"),e.removeListener("close",p),e.removeListener("finish",b),l&&e.removeListener("drain",l);e.removeListener("error",d),e.removeListener("unpipe",o),r.removeListener("end",a),r.removeListener("end",g),r.removeListener("data",h),u=!0,l&&i.awaitDrainWriters&&(!e._writableState||e._writableState.needDrain)&&l()}())}function a(){v("onend"),e.end()}let l;i.endEmitted?n.nextTick(s):r.once("end",s),e.on("unpipe",o);let u=!1;function c(){u||(1===i.pipes.length&&i.pipes[0]===e?(v("false write response, pause",0),i.awaitDrainWriters=e,i.multiAwaitDrain=!1):i.pipes.length>1&&i.pipes.includes(e)&&(v("false write response, pause",i.awaitDrainWriters.size),i.awaitDrainWriters.add(e)),r.pause()),l||(l=function(e,t){return function(){const r=e._readableState;r.awaitDrainWriters===t?(v("pipeOnDrain",1),r.awaitDrainWriters=null):r.multiAwaitDrain&&(v("pipeOnDrain",r.awaitDrainWriters.size),r.awaitDrainWriters.delete(t)),r.awaitDrainWriters&&0!==r.awaitDrainWriters.size||!e.listenerCount("data")||e.resume()}}(r,e),e.on("drain",l))}function h(t){v("ondata");const r=e.write(t);v("dest.write",r),!1===r&&c()}function d(t){if(v("onerror",t),g(),e.removeListener("error",d),0===e.listenerCount("error")){const r=e._writableState||e._readableState;r&&!r.errorEmitted?N(e,t):e.emit("error",t)}}function p(){e.removeListener("finish",b),g()}function b(){v("onfinish"),e.removeListener("close",p),g()}function g(){v("unpipe"),r.unpipe(e)}return r.on("data",h),m(e,"error",d),e.once("close",p),e.once("finish",b),e.emit("pipe",r),!0===e.writableNeedDrain?i.flowing&&c():i.flowing||(v("pipe resume"),r.resume()),e},D.prototype.unpipe=function(e){const t=this._readableState;if(0===t.pipes.length)return this;if(!e){const e=t.pipes;t.pipes=[],this.pause();for(let t=0;t0,!1!==i.flowing&&this.resume()):"readable"===e&&(i.endEmitted||i.readableListening||(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,v("on readable",i.length,i.reading),i.length?H(this):i.reading||n.nextTick(G,this))),r},D.prototype.addListener=D.prototype.on,D.prototype.removeListener=function(e,t){const r=g.prototype.removeListener.call(this,e,t);return"readable"===e&&n.nextTick(K,this),r},D.prototype.off=D.prototype.removeListener,D.prototype.removeAllListeners=function(e){const t=g.prototype.removeAllListeners.apply(this,arguments);return"readable"!==e&&void 0!==e||n.nextTick(K,this),t},D.prototype.resume=function(){const e=this._readableState;return e.flowing||(v("resume"),e.flowing=!e.readableListening,function(e,t){t.resumeScheduled||(t.resumeScheduled=!0,n.nextTick(Q,e,t))}(this,e)),e[M]=!1,this},D.prototype.pause=function(){return v("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(v("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState[M]=!0,this},D.prototype.wrap=function(e){let t=!1;e.on("data",(r=>{!this.push(r)&&e.pause&&(t=!0,e.pause())})),e.on("end",(()=>{this.push(null)})),e.on("error",(e=>{N(this,e)})),e.on("close",(()=>{this.destroy()})),e.on("destroy",(()=>{this.destroy()})),this._read=()=>{t&&e.resume&&(t=!1,e.resume())};const r=u(e);for(let t=1;t{t?e?e(t):this.destroy(t):(null!=r&&this.push(r),this.push(null),e&&e())}))}function h(){this._final!==c&&c.call(this)}u.prototype._final=c,u.prototype._transform=function(e,t,r){throw new s("_transform()")},u.prototype._write=function(e,t,r){const n=this._readableState,i=this._writableState,s=n.length;this._transform(e,t,((e,t)=>{e?r(e):(null!=t&&this.push(t),i.ended||s===n.length||n.length{const e=this._writableState;e.writing||q(this,e),V(this,e)}))}function L(e,t,r,i){const s=e._writableState;if("function"==typeof r)i=r,r=s.defaultEncoding;else{if(r){if("buffer"!==r&&!b.isEncoding(r))throw new R(r)}else r=s.defaultEncoding;"function"!=typeof i&&(i=C)}if(null===t)throw new T;if(!s.objectMode)if("string"==typeof t)!1!==s.decodeStrings&&(t=b.from(t,r),r="buffer");else if(t instanceof b)r="buffer";else{if(!p._isUint8Array(t))throw new w("chunk",["string","Buffer","Uint8Array"],t);t=p._uint8ArrayToBuffer(t),r="buffer"}let o;return s.ending?o=new I:s.destroyed&&(o=new A("write")),o?(n.nextTick(i,o),O(e,o,!0),o):(s.pendingcb++,function(e,t,r,n,i){const s=t.objectMode?1:r.length;t.length+=s;const o=t.lengthr.bufferedIndex&&q(e,r),i?null!==r.afterWriteTickInfo&&r.afterWriteTickInfo.cb===s?r.afterWriteTickInfo.count++:(r.afterWriteTickInfo={count:1,cb:s,stream:e,state:r},n.nextTick(D,r.afterWriteTickInfo)):F(e,r,1,s))):O(e,new S)}function D({stream:e,state:t,count:r,cb:n}){return t.afterWriteTickInfo=null,F(e,t,r,n)}function F(e,t,r,n){for(!t.ending&&!e.destroyed&&0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"));r-- >0;)t.pendingcb--,n();t.destroyed&&W(t),V(e,t)}function W(e){if(e.writing)return;for(let r=e.bufferedIndex;r1&&e._writev){t.pendingcb-=o-1;const n=t.allNoop?C:e=>{for(let t=a;t256?(r.splice(0,a),t.bufferedIndex=0):t.bufferedIndex=a}t.bufferProcessing=!1}function H(e){return e.ending&&!e.destroyed&&e.constructed&&0===e.length&&!e.errored&&0===e.buffered.length&&!e.finished&&!e.writing&&!e.errorEmitted&&!e.closeEmitted}function z(e,t){t.prefinished||t.finalCalled||("function"!=typeof e._final||t.destroyed?(t.prefinished=!0,e.emit("prefinish")):(t.finalCalled=!0,function(e,t){let r=!1;function i(i){if(r)O(e,null!=i?i:S());else if(r=!0,t.pendingcb--,i){const r=t[P].splice(0);for(let e=0;e{H(t)?$(e,t):t.pendingcb--}),e,t)):H(t)&&(t.pendingcb++,$(e,t))))}function $(e,t){t.pendingcb--,t.finished=!0;const r=t[P].splice(0);for(let e=0;e{if("number"!=typeof e)throw new _(t,"number",e);if(!a(e))throw new v(t,"an integer",e);if(en)throw new v(t,`>= ${r} && <= ${n}`,e)})),O=m(((e,t,r=-2147483648,n=2147483647)=>{if("number"!=typeof e)throw new _(t,"number",e);if(!a(e))throw new v(t,"an integer",e);if(en)throw new v(t,`>= ${r} && <= ${n}`,e)})),C=m(((e,t,r=!1)=>{if("number"!=typeof e)throw new _(t,"number",e);if(!a(e))throw new v(t,"an integer",e);const n=r?1:0,i=4294967295;if(ei)throw new v(t,`>= ${n} && <= ${i}`,e)}));function P(e,t){if("string"!=typeof e)throw new _(t,"string",e)}const x=m(((e,t,r)=>{if(!i(r,e)){const n=s(o(r,(e=>"string"==typeof e?`'${e}'`:p(e))),", ");throw new w(t,e,"must be one of: "+n)}}));function M(e,t){if("boolean"!=typeof e)throw new _(t,"boolean",e)}function B(e,t,r){return null!=e&&f(e,t)?e[t]:r}const L=m(((e,t,r=null)=>{const i=B(r,"allowArray",!1),s=B(r,"allowFunction",!1);if(!B(r,"nullable",!1)&&null===e||!i&&n(e)||"object"!=typeof e&&(!s||"function"!=typeof e))throw new _(t,"Object",e)})),j=m(((e,t)=>{if(null!=e&&"object"!=typeof e&&"function"!=typeof e)throw new _(t,"a dictionary",e)})),N=m(((e,t,r=0)=>{if(!n(e))throw new _(t,"Array",e);if(e.length{if(!k(e))throw new _(t,["Buffer","TypedArray","DataView"],e)}));const D=m(((e,t)=>{if(void 0!==e&&(null===e||"object"!=typeof e||!("aborted"in e)))throw new _(t,"AbortSignal",e)})),F=m(((e,t)=>{if("function"!=typeof e)throw new _(t,"Function",e)})),W=m(((e,t)=>{if("function"!=typeof e||A(e))throw new _(t,"Function",e)})),q=m(((e,t)=>{if(void 0!==e)throw new _(t,"undefined",e)}));const H=/^(?:<[^>]*>)(?:\s*;\s*[^;"\s]+(?:=(")?[^;"\s]*\1)?)*$/;function z(e,t){if(void 0===e||!d(H,e))throw new w(t,e,'must be an array or string of format "; rel=preload; as=style"')}t.exports={isInt32:function(e){return e===(0|e)},isUint32:function(e){return e===e>>>0},parseFileMode:function(e,t,r){if(void 0===e&&(e=r),"string"==typeof e){if(null===d(I,e))throw new w(t,e,"must be a 32-bit unsigned integer or an octal string");e=h(e,8)}return C(e,t),e},validateArray:N,validateStringArray:function(e,t){N(e,t);for(let r=0;rn||(null!=r||null!=n)&&l(e))throw new v(t,`${null!=r?`>= ${r}`:""}${null!=r&&null!=n?" && ":""}${null!=n?`<= ${n}`:""}`,e)},validateObject:L,validateOneOf:x,validatePlainFunction:W,validatePort:function(e,t="Port",r=!0){if("number"!=typeof e&&"string"!=typeof e||"string"==typeof e&&0===g(e).length||+e!=+e>>>0||e>65535||0===e&&!r)throw new y(t,e,r);return 0|e},validateSignalName:function(e,t="signal"){if(P(e,t),void 0===T[e]){if(void 0!==T[b(e)])throw new S(e+" (signals must use all capital letters)");throw new S(e)}},validateString:P,validateUint32:C,validateUndefined:q,validateUnion:function(e,t,r){if(!i(r,e))throw new _(t,`('${s(r,"|")}')`,e)},validateAbortSignal:D,validateLinkHeaderValue:function(e){if("string"==typeof e)return z(e,"hints"),e;if(n(e)){const t=e.length;let r="";if(0===t)return r;for(let n=0;n; rel=preload; as=style"')}}},{"../ours/errors":126,"../ours/primordials":127,"../ours/util":128}],125:[function(e,t,r){"use strict";const n=e("../stream"),i=e("../stream/promises"),s=n.Readable.destroy;t.exports=n.Readable,t.exports._uint8ArrayToBuffer=n._uint8ArrayToBuffer,t.exports._isUint8Array=n._isUint8Array,t.exports.isDisturbed=n.isDisturbed,t.exports.isErrored=n.isErrored,t.exports.isReadable=n.isReadable,t.exports.Readable=n.Readable,t.exports.Writable=n.Writable,t.exports.Duplex=n.Duplex,t.exports.Transform=n.Transform,t.exports.PassThrough=n.PassThrough,t.exports.addAbortSignal=n.addAbortSignal,t.exports.finished=n.finished,t.exports.destroy=n.destroy,t.exports.destroy=s,t.exports.pipeline=n.pipeline,t.exports.compose=n.compose,Object.defineProperty(n,"promises",{configurable:!0,enumerable:!0,get:()=>i}),t.exports.Stream=n.Stream,t.exports.default=t.exports},{"../stream":129,"../stream/promises":130}],126:[function(e,t,r){"use strict";const{format:n,inspect:i,AggregateError:s}=e("./util"),o=globalThis.AggregateError||s,a=Symbol("kIsNodeError"),l=["string","function","number","object","Function","Object","boolean","bigint","symbol"],u=/^([A-Z][a-z0-9]*)+$/,c={};function h(e,t){if(!e)throw new c.ERR_INTERNAL_ASSERTION(t)}function f(e){let t="",r=e.length;const n="-"===e[0]?1:0;for(;r>=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function d(e,t,r){r||(r=Error);class i extends r{constructor(...r){super(function(e,t,r){if("function"==typeof t)return h(t.length<=r.length,`Code: ${e}; The provided arguments length (${r.length}) does not match the required ones (${t.length}).`),t(...r);const i=(t.match(/%[dfijoOs]/g)||[]).length;return h(i===r.length,`Code: ${e}; The provided arguments length (${r.length}) does not match the required ones (${i}).`),0===r.length?t:n(t,...r)}(e,t,r))}toString(){return`${this.name} [${e}]: ${this.message}`}}Object.defineProperties(i.prototype,{name:{value:r.name,writable:!0,enumerable:!1,configurable:!0},toString:{value(){return`${this.name} [${e}]: ${this.message}`},writable:!0,enumerable:!1,configurable:!0}}),i.prototype.code=e,i.prototype[a]=!0,c[e]=i}function p(e){const t="__node_internal_"+e.name;return Object.defineProperty(e,"name",{value:t}),e}class b extends Error{constructor(e="The operation was aborted",t=void 0){if(void 0!==t&&"object"!=typeof t)throw new c.ERR_INVALID_ARG_TYPE("options","Object",t);super(e,t),this.code="ABORT_ERR",this.name="AbortError"}}d("ERR_ASSERTION","%s",Error),d("ERR_INVALID_ARG_TYPE",((e,t,r)=>{h("string"==typeof e,"'name' must be a string"),Array.isArray(t)||(t=[t]);let n="The ";e.endsWith(" argument")?n+=`${e} `:n+=`"${e}" ${e.includes(".")?"property":"argument"} `,n+="must be ";const s=[],o=[],a=[];for(const e of t)h("string"==typeof e,"All expected entries have to be of type string"),l.includes(e)?s.push(e.toLowerCase()):u.test(e)?o.push(e):(h("object"!==e,'The value "object" should be written as "Object"'),a.push(e));if(o.length>0){const e=s.indexOf("object");-1!==e&&(s.splice(s,e,1),o.push("Object"))}if(s.length>0){switch(s.length){case 1:n+=`of type ${s[0]}`;break;case 2:n+=`one of type ${s[0]} or ${s[1]}`;break;default:{const e=s.pop();n+=`one of type ${s.join(", ")}, or ${e}`}}(o.length>0||a.length>0)&&(n+=" or ")}if(o.length>0){switch(o.length){case 1:n+=`an instance of ${o[0]}`;break;case 2:n+=`an instance of ${o[0]} or ${o[1]}`;break;default:{const e=o.pop();n+=`an instance of ${o.join(", ")}, or ${e}`}}a.length>0&&(n+=" or ")}switch(a.length){case 0:break;case 1:a[0].toLowerCase()!==a[0]&&(n+="an "),n+=`${a[0]}`;break;case 2:n+=`one of ${a[0]} or ${a[1]}`;break;default:{const e=a.pop();n+=`one of ${a.join(", ")}, or ${e}`}}if(null==r)n+=`. Received ${r}`;else if("function"==typeof r&&r.name)n+=`. Received function ${r.name}`;else if("object"==typeof r){var c;if(null!==(c=r.constructor)&&void 0!==c&&c.name)n+=`. Received an instance of ${r.constructor.name}`;else{n+=`. Received ${i(r,{depth:-1})}`}}else{let e=i(r,{colors:!1});e.length>25&&(e=`${e.slice(0,25)}...`),n+=`. Received type ${typeof r} (${e})`}return n}),TypeError),d("ERR_INVALID_ARG_VALUE",((e,t,r="is invalid")=>{let n=i(t);n.length>128&&(n=n.slice(0,128)+"...");return`The ${e.includes(".")?"property":"argument"} '${e}' ${r}. Received ${n}`}),TypeError),d("ERR_INVALID_RETURN_VALUE",((e,t,r)=>{var n;return`Expected ${e} to be returned from the "${t}" function but got ${null!=r&&null!==(n=r.constructor)&&void 0!==n&&n.name?`instance of ${r.constructor.name}`:"type "+typeof r}.`}),TypeError),d("ERR_MISSING_ARGS",((...e)=>{let t;h(e.length>0,"At least one arg needs to be specified");const r=e.length;switch(e=(Array.isArray(e)?e:[e]).map((e=>`"${e}"`)).join(" or "),r){case 1:t+=`The ${e[0]} argument`;break;case 2:t+=`The ${e[0]} and ${e[1]} arguments`;break;default:{const r=e.pop();t+=`The ${e.join(", ")}, and ${r} arguments`}}return`${t} must be specified`}),TypeError),d("ERR_OUT_OF_RANGE",((e,t,r)=>{let n;return h(t,'Missing "range" argument'),Number.isInteger(r)&&Math.abs(r)>2**32?n=f(String(r)):"bigint"==typeof r?(n=String(r),(r>2n**32n||r<-(2n**32n))&&(n=f(n)),n+="n"):n=i(r),`The value of "${e}" is out of range. It must be ${t}. Received ${n}`}),RangeError),d("ERR_MULTIPLE_CALLBACK","Callback called multiple times",Error),d("ERR_METHOD_NOT_IMPLEMENTED","The %s method is not implemented",Error),d("ERR_STREAM_ALREADY_FINISHED","Cannot call %s after a stream was finished",Error),d("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable",Error),d("ERR_STREAM_DESTROYED","Cannot call %s after a stream was destroyed",Error),d("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),d("ERR_STREAM_PREMATURE_CLOSE","Premature close",Error),d("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF",Error),d("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event",Error),d("ERR_STREAM_WRITE_AFTER_END","write after end",Error),d("ERR_UNKNOWN_ENCODING","Unknown encoding: %s",TypeError),t.exports={AbortError:b,aggregateTwoErrors:p((function(e,t){if(e&&t&&e!==t){if(Array.isArray(t.errors))return t.errors.push(e),t;const r=new o([t,e],t.message);return r.code=t.code,r}return e||t})),hideStackFrames:p,codes:c}},{"./util":128}],127:[function(e,t,r){"use strict";t.exports={ArrayIsArray:e=>Array.isArray(e),ArrayPrototypeIncludes:(e,t)=>e.includes(t),ArrayPrototypeIndexOf:(e,t)=>e.indexOf(t),ArrayPrototypeJoin:(e,t)=>e.join(t),ArrayPrototypeMap:(e,t)=>e.map(t),ArrayPrototypePop:(e,t)=>e.pop(t),ArrayPrototypePush:(e,t)=>e.push(t),ArrayPrototypeSlice:(e,t,r)=>e.slice(t,r),Error:Error,FunctionPrototypeCall:(e,t,...r)=>e.call(t,...r),FunctionPrototypeSymbolHasInstance:(e,t)=>Function.prototype[Symbol.hasInstance].call(e,t),MathFloor:Math.floor,Number:Number,NumberIsInteger:Number.isInteger,NumberIsNaN:Number.isNaN,NumberMAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER,NumberMIN_SAFE_INTEGER:Number.MIN_SAFE_INTEGER,NumberParseInt:Number.parseInt,ObjectDefineProperties:(e,t)=>Object.defineProperties(e,t),ObjectDefineProperty:(e,t,r)=>Object.defineProperty(e,t,r),ObjectGetOwnPropertyDescriptor:(e,t)=>Object.getOwnPropertyDescriptor(e,t),ObjectKeys:e=>Object.keys(e),ObjectSetPrototypeOf:(e,t)=>Object.setPrototypeOf(e,t),Promise:Promise,PromisePrototypeCatch:(e,t)=>e.catch(t),PromisePrototypeThen:(e,t,r)=>e.then(t,r),PromiseReject:e=>Promise.reject(e),ReflectApply:Reflect.apply,RegExpPrototypeTest:(e,t)=>e.test(t),SafeSet:Set,String:String,StringPrototypeSlice:(e,t,r)=>e.slice(t,r),StringPrototypeToLowerCase:e=>e.toLowerCase(),StringPrototypeToUpperCase:e=>e.toUpperCase(),StringPrototypeTrim:e=>e.trim(),Symbol:Symbol,SymbolFor:Symbol.for,SymbolAsyncIterator:Symbol.asyncIterator,SymbolHasInstance:Symbol.hasInstance,SymbolIterator:Symbol.iterator,TypedArrayPrototypeSet:(e,t,r)=>e.set(t,r),Uint8Array:Uint8Array}},{}],128:[function(e,t,r){"use strict";const n=e("buffer"),i=Object.getPrototypeOf((async function(){})).constructor,s=globalThis.Blob||n.Blob,o=void 0!==s?function(e){return e instanceof s}:function(e){return!1};class a extends Error{constructor(e){if(!Array.isArray(e))throw new TypeError("Expected input to be an Array, got "+typeof e);let t="";for(let r=0;r{e=r,t=n})),resolve:e,reject:t}},promisify:e=>new Promise(((t,r)=>{e(((e,...n)=>e?r(e):t(...n)))})),debuglog:()=>function(){},format:(e,...t)=>e.replace(/%([sdifj])/g,(function(...[e,r]){const n=t.shift();if("f"===r)return n.toFixed(6);if("j"===r)return JSON.stringify(n);if("s"===r&&"object"==typeof n){return`${n.constructor!==Object?n.constructor.name:""} {}`.trim()}return n.toString()})),inspect(e){switch(typeof e){case"string":if(e.includes("'")){if(!e.includes('"'))return`"${e}"`;if(!e.includes("`")&&!e.includes("${"))return`\`${e}\``}return`'${e}'`;case"number":return isNaN(e)?"NaN":Object.is(e,-0)?String(e):e;case"bigint":return`${String(e)}n`;case"boolean":case"undefined":return String(e);case"object":return"{}"}},types:{isAsyncFunction:e=>e instanceof i,isArrayBufferView:e=>ArrayBuffer.isView(e)},isBlob:o},t.exports.promisify.custom=Symbol.for("nodejs.util.promisify.custom")},{buffer:29}],129:[function(e,t,r){const{Buffer:n}=e("buffer"),{ObjectDefineProperty:i,ObjectKeys:s,ReflectApply:o}=e("./ours/primordials"),{promisify:{custom:a}}=e("./ours/util"),{streamReturningOperators:l,promiseReturningOperators:u}=e("./internal/streams/operators"),{codes:{ERR_ILLEGAL_CONSTRUCTOR:c}}=e("./ours/errors"),h=e("./internal/streams/compose"),{pipeline:f}=e("./internal/streams/pipeline"),{destroyer:d}=e("./internal/streams/destroy"),p=e("./internal/streams/end-of-stream"),b=e("./stream/promises"),g=e("./internal/streams/utils"),m=t.exports=e("./internal/streams/legacy").Stream;m.isDisturbed=g.isDisturbed,m.isErrored=g.isErrored,m.isReadable=g.isReadable,m.Readable=e("./internal/streams/readable");for(const w of s(l)){const v=l[w];function y(...e){if(new.target)throw c();return m.Readable.from(o(v,this,e))}i(y,"name",{__proto__:null,value:v.name}),i(y,"length",{__proto__:null,value:v.length}),i(m.Readable.prototype,w,{__proto__:null,value:y,enumerable:!1,configurable:!0,writable:!0})}for(const S of s(u)){const E=u[S];function y(...e){if(new.target)throw c();return o(E,this,e)}i(y,"name",{__proto__:null,value:E.name}),i(y,"length",{__proto__:null,value:E.length}),i(m.Readable.prototype,S,{__proto__:null,value:y,enumerable:!1,configurable:!0,writable:!0})}m.Writable=e("./internal/streams/writable"),m.Duplex=e("./internal/streams/duplex"),m.Transform=e("./internal/streams/transform"),m.PassThrough=e("./internal/streams/passthrough"),m.pipeline=f;const{addAbortSignal:_}=e("./internal/streams/add-abort-signal");m.addAbortSignal=_,m.finished=p,m.destroy=d,m.compose=h,i(m,"promises",{__proto__:null,configurable:!0,enumerable:!0,get:()=>b}),i(f,a,{__proto__:null,enumerable:!0,get:()=>b.pipeline}),i(p,a,{__proto__:null,enumerable:!0,get:()=>b.finished}),m.Stream=m,m._isUint8Array=function(e){return e instanceof Uint8Array},m._uint8ArrayToBuffer=function(e){return n.from(e.buffer,e.byteOffset,e.byteLength)}},{"./internal/streams/add-abort-signal":107,"./internal/streams/compose":109,"./internal/streams/destroy":110,"./internal/streams/duplex":111,"./internal/streams/end-of-stream":113,"./internal/streams/legacy":115,"./internal/streams/operators":116,"./internal/streams/passthrough":117,"./internal/streams/pipeline":118,"./internal/streams/readable":119,"./internal/streams/transform":121,"./internal/streams/utils":122,"./internal/streams/writable":123,"./ours/errors":126,"./ours/primordials":127,"./ours/util":128,"./stream/promises":130,buffer:29}],130:[function(e,t,r){"use strict";const{ArrayPrototypePop:n,Promise:i}=e("../ours/primordials"),{isIterable:s,isNodeStream:o,isWebStream:a}=e("../internal/streams/utils"),{pipelineImpl:l}=e("../internal/streams/pipeline"),{finished:u}=e("../internal/streams/end-of-stream");e("../../lib/stream.js"),t.exports={finished:u,pipeline:function(...e){return new i(((t,r)=>{let i,u;const c=e[e.length-1];if(c&&"object"==typeof c&&!o(c)&&!s(c)&&!a(c)){const t=n(e);i=t.signal,u=t.end}l(e,((e,n)=>{e?r(e):t(n)}),{signal:i,end:u})}))}}},{"../../lib/stream.js":129,"../internal/streams/end-of-stream":113,"../internal/streams/pipeline":118,"../internal/streams/utils":122,"../ours/primordials":127}],131:[function(e,t,r){"use strict";function n(e,t,r){var n=this;this._callback=e,this._args=r,this._interval=setInterval(e,t,this._args),this.reschedule=function(e){e||(e=n._interval),n._interval&&clearInterval(n._interval),n._interval=setInterval(n._callback,e,n._args)},this.clear=function(){n._interval&&(clearInterval(n._interval),n._interval=void 0)},this.destroy=function(){n._interval&&clearInterval(n._interval),n._callback=void 0,n._interval=void 0,n._args=void 0}}t.exports=function(){if("function"!=typeof arguments[0])throw new Error("callback needed");if("number"!=typeof arguments[1])throw new Error("interval needed");var e;if(arguments.length>0){e=new Array(arguments.length-2);for(var t=0;t */ +var n=e("buffer"),i=n.Buffer;function s(e,t){for(var r in e)t[r]=e[r]}function o(e,t,r){return i(e,t,r)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=n:(s(n,r),r.Buffer=o),o.prototype=Object.create(i.prototype),s(i,o),o.from=function(e,t,r){if("number"==typeof e)throw new TypeError("Argument must not be a number");return i(e,t,r)},o.alloc=function(e,t,r){if("number"!=typeof e)throw new TypeError("Argument must be a number");var n=i(e);return void 0!==t?"string"==typeof r?n.fill(t,r):n.fill(t):n.fill(0),n},o.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return i(e)},o.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return n.SlowBuffer(e)}},{buffer:29}],135:[function(e,t,r){t.exports=function(e){var t=e._readableState;return t?t.objectMode||"number"==typeof e._duplexState?e.read():e.read(function(e){if(e.buffer.length)return e.buffer.head?e.buffer.head.data.length:e.buffer[0].length;return e.length}(t)):null}},{}],136:[function(e,t,r){arguments[4][28][0].apply(r,arguments)},{dup:28,"safe-buffer":134}],137:[function(e,t,r){"use strict";var n=e("punycode"),i=e("./util");function s(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}r.parse=_,r.resolve=function(e,t){return _(e,!1,!0).resolve(t)},r.resolveObject=function(e,t){return e?_(e,!1,!0).resolveObject(t):t},r.format=function(e){i.isString(e)&&(e=_(e));return e instanceof s?e.format():s.prototype.format.call(e)},r.Url=s;var o=/^([a-z0-9.+-]+:)/i,a=/:[0-9]*$/,l=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,u=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),c=["'"].concat(u),h=["%","/","?",";","#"].concat(c),f=["/","?","#"],d=/^[+a-z0-9A-Z_-]{0,63}$/,p=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,b={javascript:!0,"javascript:":!0},g={javascript:!0,"javascript:":!0},m={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},y=e("querystring");function _(e,t,r){if(e&&i.isObject(e)&&e instanceof s)return e;var n=new s;return n.parse(e,t,r),n}s.prototype.parse=function(e,t,r){if(!i.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var s=e.indexOf("?"),a=-1!==s&&s127?M+="x":M+=x[B];if(!M.match(d)){var j=C.slice(0,I),N=C.slice(I+1),U=x.match(p);U&&(j.push(U[1]),N.unshift(U[2])),N.length&&(_="/"+N.join(".")+_),this.hostname=j.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),O||(this.hostname=n.toASCII(this.hostname));var D=this.port?":"+this.port:"",F=this.hostname||"";this.host=F+D,this.href+=this.host,O&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==_[0]&&(_="/"+_))}if(!b[S])for(I=0,P=c.length;I0)&&r.host.split("@"))&&(r.auth=O.shift(),r.host=r.hostname=O.shift());return r.search=e.search,r.query=e.query,i.isNull(r.pathname)&&i.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!E.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var k=E.slice(-1)[0],T=(r.host||e.host||E.length>1)&&("."===k||".."===k)||""===k,I=0,R=E.length;R>=0;R--)"."===(k=E[R])?E.splice(R,1):".."===k?(E.splice(R,1),I++):I&&(E.splice(R,1),I--);if(!v&&!S)for(;I--;I)E.unshift("..");!v||""===E[0]||E[0]&&"/"===E[0].charAt(0)||E.unshift(""),T&&"/"!==E.join("/").substr(-1)&&E.push("");var O,C=""===E[0]||E[0]&&"/"===E[0].charAt(0);A&&(r.hostname=r.host=C?"":E.length?E.shift():"",(O=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=O.shift(),r.host=r.hostname=O.shift()));return(v=v||r.host&&E.length)&&!C&&E.unshift(""),E.length?r.pathname=E.join("/"):(r.pathname=null,r.path=null),i.isNull(r.pathname)&&i.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=e.auth||r.auth,r.slashes=r.slashes||e.slashes,r.href=r.format(),r},s.prototype.parseHost=function(){var e=this.host,t=a.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},{"./util":138,punycode:103,querystring:106}],138:[function(e,t,r){"use strict";t.exports={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},{}],139:[function(e,t,r){(function(e){(function(){function r(t){try{if(!e.localStorage)return!1}catch(e){return!1}var r=e.localStorage[t];return null!=r&&"true"===String(r).toLowerCase()}t.exports=function(e,t){if(r("noDeprecation"))return e;var n=!1;return function(){if(!n){if(r("throwDeprecation"))throw new Error(t);r("traceDeprecation")?console.trace(t):console.warn(t),n=!0}return e.apply(this,arguments)}}}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],140:[function(e,t,r){t.exports=function e(t,r){if(t&&r)return e(t)(r);if("function"!=typeof t)throw new TypeError("need wrapper function");return Object.keys(t).forEach((function(e){n[e]=t[e]})),n;function n(){for(var e=new Array(arguments.length),r=0;r **http-server-demo** 分为三个文件夹。 +> +> 1. **headers** :http请求头的demo代码 +> 2. **http-server** :http服务端,接收告警推送(无token版本) +> 3. **http-server-token** :http服务端,接收告警推送(有token版本) + +## headers + +如果需要将盒子产生的告警推送到您自建平台,并且你的平台需要验证**token**,则需要用到该文件夹下的`headers_demo.py`文件。 +你可自行修改`headers_demo.py`文件,并将此文件上传到盒子平台的【数据推送】-【告警】-【HTTP】-【配置token】。 +`headers_demo.py`文件说明: + +- 类名必须为`Headers`,继承`BaseHeaders`类。`BaseHeaders`类通过`api.http`导入 + + ```python + from api.http import Headers as BaseHeaders + ``` + +- 定义三个实例变量:`get_headers_url`、`timeout`、`interval`。 + + ​ `get_headers_url`:指定获取`token`的**URL**地址。 + + ​ `timeout`:指定获取`token`的超时时间(单位:秒)。 + + ​ `interval`:定时刷新`headers`的时间间隔(单位:秒)。 + + ```python + class Headers(BaseHeaders): + def __init__(self): + self.get_headers_url = None + self.timeout = 5 + interval = 60 * 10 + super().__init__(interval) + ``` + +- 必须实现`_generate_headers`方法。返回请求头字典`headers`。返回示例: + + + ```python + {'authorization': 'Bearer abcdefghijklmnopqrstuvwxyz'} + ``` + + +- 完整实例如下: + + ```python + import requests + from api.http import Headers as BaseHeaders + from logger import LOGGER + + class Headers(BaseHeaders): + def __init__(self): + self.get_headers_url = None + self.timeout = 5 + interval = 60 * 10 + super().__init__(interval) + + def _generate_headers(self): + try: + headers = { + 'authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkXXX' + } + return headers + except: + LOGGER.exception('_generate_headers') + return None + ``` + +## http-server + +该文件夹为**http**服务端代码,提供**python**和**java**代码。它主要用于接收盒子的**http**告警推送。如果您需要验证盒子的**http**推送功能是否正常,可使用此文件夹进行测试。 +运行该文件夹下的代码,即可开启一个**http**服务端。在盒子平台的【数据推送】-【告警】-【HTTP】中启用推送管理,并填写**http**服务端地址,即可开启推送功能。 + + +## http-server-token + +此文件夹同**http-server**文件夹,只是增加了**token**验证功能。 + +你首先需把其下的`headers_demo1.py`或`headers_demo2.py`文件上传到盒子平台的【数据推送】-【告警】-【HTTP】-【配置TOKEN】。 +`headers_demo1.py`:通过调用url接口获取token。(盒子必须可以ping通该url,文件中的`get_headers_url`变量为**http**服务端URL) +`headers_demo2.py`:固定token。 \ No newline at end of file diff --git a/快速接收设备告警/http-server-demo/headers/headers_demo.py b/快速接收设备告警/http-server-demo/headers/headers_demo.py new file mode 100644 index 0000000..1407265 --- /dev/null +++ b/快速接收设备告警/http-server-demo/headers/headers_demo.py @@ -0,0 +1,46 @@ +import requests + +from api.http import Headers as BaseHeaders +from logger import LOGGER + + +class Headers(BaseHeaders): + def __init__(self): + """ + 初始化Headers类 + - `self.get_headers_url`: 获取token的URL地址,根据实际环境修改。 + - `self.timeout`: 请求超时时间,设置为5秒。 + - `interval`: 定时刷新headers的时间间隔,设置为10分钟(60秒 * 10)。 + """ + self.get_headers_url = None + self.timeout = 5 + interval = 60 * 10 + super().__init__(interval) + + def _generate_headers(self): + """ + 生成请求头的方法,_generate_headers方法名不允许修改 + 通过向指定的URL发送GET请求获取token,并将token添加到请求头中 + :return: 请求头字典 + """ + try: + # 定义请求参数 + params = { + 'arg1': 'xxx', + 'arg2': 'xxx' + } + if self.get_headers_url is not None: + # 发送GET请求获取token + resp = requests.get(self.get_headers_url, params=params, timeout=self.timeout) + if resp.status_code == 200: + token = resp.text + headers = { + 'authorization': 'Bearer {}'.format(token) + } + return headers + else: + LOGGER.error('Get headers failed') + return None + except: + LOGGER.exception('_generate_headers') + return None diff --git a/快速接收设备告警/http-server-demo/http-server-token/headers_demo1.py b/快速接收设备告警/http-server-demo/http-server-token/headers_demo1.py new file mode 100644 index 0000000..2160f1c --- /dev/null +++ b/快速接收设备告警/http-server-demo/http-server-token/headers_demo1.py @@ -0,0 +1,47 @@ +import requests + +from api.http import Headers as BaseHeaders +from logger import LOGGER + + +class Headers(BaseHeaders): + def __init__(self): + """ + 初始化Headers类 + - `self.get_headers_url`: 获取token的URL地址,根据实际环境修改。 + - `self.timeout`: 请求超时时间,设置为5秒。 + - `interval`: 定时刷新headers的时间间隔,设置为10分钟(60秒 * 10)。 + """ + self.get_headers_url = 'http://192.168.1.75:10000/token' + self.timeout = 5 + interval = 60 * 10 + super().__init__(interval) + + def _generate_headers(self): + """ + 生成请求头的方法,_generate_headers方法名不允许修改 + 通过向指定的URL发送GET请求获取token,并将token添加到请求头中 + :return: 请求头字典 + """ + try: + # 定义请求参数 + params = { + 'arg1': 'xxx', + 'arg2': 'xxx' + } + if self.get_headers_url is not None: + # 发送GET请求获取token + resp = requests.get(self.get_headers_url, params=params, timeout=self.timeout) + LOGGER.info('Get headers resp {}'.format(resp)) + if resp.status_code == 200: + token = resp.text + headers = { + 'authorization': 'Bearer {}'.format(token) + } + return headers + else: + LOGGER.error('Get headers failed') + return None + except: + LOGGER.exception('_generate_headers') + return None diff --git a/快速接收设备告警/http-server-demo/http-server-token/headers_demo2.py b/快速接收设备告警/http-server-demo/http-server-token/headers_demo2.py new file mode 100644 index 0000000..6f031b0 --- /dev/null +++ b/快速接收设备告警/http-server-demo/http-server-token/headers_demo2.py @@ -0,0 +1,35 @@ +import requests + +from api.http import Headers as BaseHeaders +from logger import LOGGER + + +class Headers(BaseHeaders): + def __init__(self): + """ + 初始化Headers类 + - `self.get_headers_url`: 获取token的URL地址,根据实际环境修改。 + - `self.timeout`: 请求超时时间,设置为5秒。 + - `interval`: 定时刷新headers的时间间隔,设置为10分钟(60秒 * 10)。 + """ + self.get_headers_url = None + self.timeout = 5 + interval = 60 * 10 + super().__init__(interval) + + def _generate_headers(self): + """ + 生成请求头的方法,_generate_headers方法名不允许修改 + 固定http请求头,authorization以及值可自定义 + :return: 请求头字典 + """ + try: + + headers = { + 'authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkXXX' + } + return headers + + except: + LOGGER.exception('_generate_headers') + return None diff --git a/快速接收设备告警/http-server-demo/http-server-token/java/AlertController.java b/快速接收设备告警/http-server-demo/http-server-token/java/AlertController.java new file mode 100644 index 0000000..6437439 --- /dev/null +++ b/快速接收设备告警/http-server-demo/http-server-token/java/AlertController.java @@ -0,0 +1,45 @@ + +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Slf4j +@RestController +@RequestMapping(path = "") +public class AlertController { + + + /** + * 目标平台接收告警及告警图片 + * @param alertMsg + * @param authorization + */ + + @PostMapping(path = "/alert") + public void getAlertMsg(@RequestBody AlertMsg alertMsg, @RequestHeader("Authorization") String authorization) { + log.info("authorization:{}", authorization); + log.info("示例接收告警及告警图片:{}", alertMsg); + } + + + /** + * 目标平台接收告警及告警视频 + * + * @param alertVideo + */ + + @PostMapping(path = "/video") + public void getAlertVideo(@RequestBody AlertVideo alertVideo,@RequestHeader("Authorization") String authorization) { + log.info("authorization:{}", authorization); + log.info("示例接收告警及告警视频:{}", alertVideo); + } + + + + @GetMapping(path = "/token") + public String token() { + return RandomUtil.randomString(16); + } +} diff --git a/快速接收设备告警/http-server-demo/http-server-token/java/AlertMsg.java b/快速接收设备告警/http-server-demo/http-server-token/java/AlertMsg.java new file mode 100644 index 0000000..905054f --- /dev/null +++ b/快速接收设备告警/http-server-demo/http-server-token/java/AlertMsg.java @@ -0,0 +1,20 @@ + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class AlertMsg { + private String id; + @JsonProperty("alert_time") + private Double alertTime; + private Object device; + private Object source; + private Object alg; + private String image; + @JsonProperty("reserved_data") + private Object reservedData; + @JsonProperty("hazard_leve") + private String hazardLeve; +} diff --git a/快速接收设备告警/http-server-demo/http-server-token/java/AlertVideo.java b/快速接收设备告警/http-server-demo/http-server-token/java/AlertVideo.java new file mode 100644 index 0000000..2eac6db --- /dev/null +++ b/快速接收设备告警/http-server-demo/http-server-token/java/AlertVideo.java @@ -0,0 +1,18 @@ + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class AlertVideo { + private String id; + @JsonProperty("alert_time") + private Double alertTime; + private Object device; + private Object source; + private Object alg; + private String video; + @JsonProperty("hazard_leve") + private String hazardLeve; +} diff --git a/快速接收设备告警/http-server-demo/http-server-token/python/app/__init__.py b/快速接收设备告警/http-server-demo/http-server-token/python/app/__init__.py new file mode 100644 index 0000000..b4c6e51 --- /dev/null +++ b/快速接收设备告警/http-server-demo/http-server-token/python/app/__init__.py @@ -0,0 +1,23 @@ +import os +import sys + +from flask import Flask + +CURRENT_PATH = os.path.dirname(os.path.realpath(__file__)) +sys.path.append(CURRENT_PATH) + +url_prefix = '/' + +from app import alert + + +def create_app(): + # 初始化Flask对象 + app_ = Flask(__name__) + + # 注册蓝图 + app_.register_blueprint(alert.bp) + return app_ + + +app = create_app() diff --git a/快速接收设备告警/http-server-demo/http-server-token/python/app/alert.py b/快速接收设备告警/http-server-demo/http-server-token/python/app/alert.py new file mode 100644 index 0000000..17d2dfa --- /dev/null +++ b/快速接收设备告警/http-server-demo/http-server-token/python/app/alert.py @@ -0,0 +1,31 @@ +import base64 +import hashlib +import json +import secrets +import time + +from flask import Blueprint, request + +from app import url_prefix + +bp = Blueprint('alert', __name__, url_prefix=url_prefix) + + +@bp.route('alert', methods=['POST']) +def post_alert(): + # 获取token + auth_header = request.headers.get('authorization') + print(f"Authorization Header: {auth_header}") + data = json.loads(request.get_data().decode('utf-8')) + image = data.pop('image') + print(data) + with open('image.jpg', 'wb') as f: + f.write(base64.b64decode(image.encode('utf-8'))) + return data + + +@bp.route('/token', methods=['GET']) +def gen_token(): + print(request.args) + token = secrets.token_hex(32) + return token diff --git a/快速接收设备告警/http-server-demo/http-server-token/python/image.jpg b/快速接收设备告警/http-server-demo/http-server-token/python/image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2ac05f2d14eeb096ef24760d3bc58f228d5ddfa6 GIT binary patch literal 113605 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 UI~}UWs~?~k{Od@^OO}!U*$7PkMgRZ+ literal 0 HcmV?d00001 diff --git a/快速接收设备告警/http-server-demo/http-server-token/python/main.py b/快速接收设备告警/http-server-demo/http-server-token/python/main.py new file mode 100644 index 0000000..12b2b30 --- /dev/null +++ b/快速接收设备告警/http-server-demo/http-server-token/python/main.py @@ -0,0 +1,4 @@ +from app import app + +if '__main__' == __name__: + app.run(host='0.0.0.0', port=10000, debug=False) diff --git a/快速接收设备告警/http-server-demo/http-server/java/AlertController.java b/快速接收设备告警/http-server-demo/http-server/java/AlertController.java new file mode 100644 index 0000000..17e6e46 --- /dev/null +++ b/快速接收设备告警/http-server-demo/http-server/java/AlertController.java @@ -0,0 +1,37 @@ + + +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Slf4j +@RestController +@RequestMapping(path = "") +public class AlertController { + + + /** + * 目标平台接收告警及告警图片 + * + * @param alertMsg + */ + + @PostMapping(path = "/alert") + public void getAlertMsg(@RequestBody AlertMsg alertMsg) { + log.info("示例接收告警及告警图片:{}", alertMsg); + } + + /** + * 目标平台接收告警及告警视频 + * + * @param alertVideo + */ + + @PostMapping(path = "/video") + public void getAlertVideo(@RequestBody AlertVideo alertVideo) { + log.info("示例接收告警及告警视频:{}", alertVideo); + } + +} diff --git a/快速接收设备告警/http-server-demo/http-server/java/AlertMsg.java b/快速接收设备告警/http-server-demo/http-server/java/AlertMsg.java new file mode 100644 index 0000000..5c0904a --- /dev/null +++ b/快速接收设备告警/http-server-demo/http-server/java/AlertMsg.java @@ -0,0 +1,21 @@ + + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class AlertMsg { + private String id; + @JsonProperty("alert_time") + private Double alertTime; + private Object device; + private Object source; + private Object alg; + private String image; + @JsonProperty("reserved_data") + private Object reservedData; + @JsonProperty("hazard_leve") + private String hazardLeve; +} diff --git a/快速接收设备告警/http-server-demo/http-server/java/AlertVideo.java b/快速接收设备告警/http-server-demo/http-server/java/AlertVideo.java new file mode 100644 index 0000000..6641a42 --- /dev/null +++ b/快速接收设备告警/http-server-demo/http-server/java/AlertVideo.java @@ -0,0 +1,19 @@ + + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class AlertVideo { + private String id; + @JsonProperty("alert_time") + private Double alertTime; + private Object device; + private Object source; + private Object alg; + private String video; + @JsonProperty("hazard_leve") + private String hazardLeve; +} diff --git a/快速接收设备告警/http-server-demo/http-server/python/app/__init__.py b/快速接收设备告警/http-server-demo/http-server/python/app/__init__.py new file mode 100644 index 0000000..b4c6e51 --- /dev/null +++ b/快速接收设备告警/http-server-demo/http-server/python/app/__init__.py @@ -0,0 +1,23 @@ +import os +import sys + +from flask import Flask + +CURRENT_PATH = os.path.dirname(os.path.realpath(__file__)) +sys.path.append(CURRENT_PATH) + +url_prefix = '/' + +from app import alert + + +def create_app(): + # 初始化Flask对象 + app_ = Flask(__name__) + + # 注册蓝图 + app_.register_blueprint(alert.bp) + return app_ + + +app = create_app() diff --git a/快速接收设备告警/http-server-demo/http-server/python/app/alert.py b/快速接收设备告警/http-server-demo/http-server/python/app/alert.py new file mode 100644 index 0000000..0023fcb --- /dev/null +++ b/快速接收设备告警/http-server-demo/http-server/python/app/alert.py @@ -0,0 +1,28 @@ +import base64 +import json + +from flask import Blueprint, request + +from app import url_prefix + +bp = Blueprint('alert', __name__, url_prefix=url_prefix) + + +@bp.route('alert', methods=['POST']) +def post_alert(): + data = json.loads(request.get_data().decode('utf-8')) + image = data.pop('image') + print(data) + with open('image.jpg', 'wb') as f: + f.write(base64.b64decode(image.encode('utf-8'))) + return data + + +@bp.route('alert/video', methods=['POST']) +def post_alert_video(): + data = json.loads(request.get_data().decode('utf-8')) + video = data.pop('video') + print(data) + with open('video.mp4', 'wb') as f: + f.write(base64.b64decode(video.encode('utf-8'))) + return data diff --git a/快速接收设备告警/http-server-demo/http-server/python/image.jpg b/快速接收设备告警/http-server-demo/http-server/python/image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2ca1f224b3c2cd66a149a400298592db31723067 GIT binary patch literal 165536 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%0Ava6o?X@&Hn&;tRgH976F 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 G{Qm<6pYYWH literal 0 HcmV?d00001 diff --git a/快速接收设备告警/http-server-demo/http-server/python/main.py b/快速接收设备告警/http-server-demo/http-server/python/main.py new file mode 100644 index 0000000..12b2b30 --- /dev/null +++ b/快速接收设备告警/http-server-demo/http-server/python/main.py @@ -0,0 +1,4 @@ +from app import app + +if '__main__' == __name__: + app.run(host='0.0.0.0', port=10000, debug=False) diff --git a/快速接收设备告警/tcp-server-demo/server.py b/快速接收设备告警/tcp-server-demo/server.py new file mode 100644 index 0000000..ac59a97 --- /dev/null +++ b/快速接收设备告警/tcp-server-demo/server.py @@ -0,0 +1,107 @@ +import json +import socket +import struct +import threading +import time +import traceback + + +class SocketServer: + def __init__(self): + self.server_host = '0.0.0.0' + self.server_port = 10001 + self.socket_server = self.__listen() + self.conns = {} + self.__accept() + + @staticmethod + def __set_reuse_addr(socket_obj): + """ + 断开连接之后立马释放本地端口 + Args: + socket_obj: socket对象 + Returns: True or False + """ + socket_obj.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + return True + + def __listen(self): + socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + try: + self.__set_reuse_addr(socket_server) + # 绑定IP/端口 + socket_server.bind((self.server_host, self.server_port)) + # 最多同时处理5个连接请求 + socket_server.listen(5) + except: + print(traceback.format_exc()) + finally: + return socket_server + + def __disconnect(self, addr): + print('Disconnected, client={}'.format(addr)) + self.__close(self.conns[addr]) + self.conns.pop(addr) + return True + + def __accept(self): + def accept(): + while True: + try: + conn, addr = self.socket_server.accept() + print('Connection established, client={}'.format(addr)) + self.__set_reuse_addr(conn) + self.conns[addr] = conn + threading.Thread(target=self.__recv, args=(addr, conn), daemon=True).start() + except: + print(traceback.format_exc()) + + threading.Thread(target=accept, daemon=True).start() + return True + + def __recv(self, addr, client_socket, buff_size=1024): + while True: + try: + data_length = client_socket.recv(4) + # 读取data_length + if data_length: + data_length = struct.unpack('i', data_length)[0] + print('Recv from: {}, data_length: {}'.format(addr, data_length)) + # 读取data + if data_length <= buff_size: + data = client_socket.recv(data_length) + else: + buff_size_ = buff_size + # 已接收到的size + total_recv_size = 0 + data = b'' + while total_recv_size < data_length: + recv_data = client_socket.recv(buff_size_) + data += recv_data + total_recv_size += len(recv_data) + left_size = data_length - total_recv_size + if left_size < buff_size: + buff_size_ = left_size + data = json.loads(data.decode('utf-8')) + print('Recv from: {}, data: {}'.format(addr, data)) + else: + break + except: + print(traceback.format_exc()) + break + self.__disconnect(addr) + return False + + @staticmethod + def __close(socket_obj): + try: + socket_obj.close() + except: + print(traceback.format_exc()) + return True + + +if '__main__' == __name__: + tcp_server = SocketServer() + while True: + time.sleep(3) diff --git a/接收大模型复审告警/app/__init__.py b/接收大模型复审告警/app/__init__.py new file mode 100644 index 0000000..559add4 --- /dev/null +++ b/接收大模型复审告警/app/__init__.py @@ -0,0 +1,23 @@ +import os +import sys + +from flask import Flask + +CURRENT_PATH = os.path.dirname(os.path.realpath(__file__)) +sys.path.append(CURRENT_PATH) + +url_prefix = '/' + +from app import vlreview + + +def create_app(): + # 初始化Flask对象 + app_ = Flask(__name__) + + # 注册蓝图 + app_.register_blueprint(vlreview.bp) + return app_ + + +app = create_app() diff --git a/接收大模型复审告警/app/vlreview.py b/接收大模型复审告警/app/vlreview.py new file mode 100644 index 0000000..028a98f --- /dev/null +++ b/接收大模型复审告警/app/vlreview.py @@ -0,0 +1,15 @@ +import base64 +import json + +from flask import Blueprint, request + +from app import url_prefix + +bp = Blueprint('vlreview', __name__, url_prefix=url_prefix) + + +@bp.route('vlreview', methods=['POST']) +def post_alert(): + data = json.loads(request.get_data().decode('utf-8')) + print(data) + return data diff --git a/接收大模型复审告警/main.py b/接收大模型复审告警/main.py new file mode 100644 index 0000000..94612cc --- /dev/null +++ b/接收大模型复审告警/main.py @@ -0,0 +1,4 @@ +from app import app + +if '__main__' == __name__: + app.run(host='0.0.0.0', port=10010, debug=False) diff --git a/深度对接设备接口/assets/device.png b/深度对接设备接口/assets/device.png new file mode 100644 index 0000000000000000000000000000000000000000..fd1a160d9d27affa209d507da5bf7e388d8c747f GIT binary patch literal 87062 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 literal 0 HcmV?d00001 diff --git a/深度对接设备接口/assets/facelib.png b/深度对接设备接口/assets/facelib.png new file mode 100644 index 0000000000000000000000000000000000000000..78dafa5448c319eedfd33a28c7654d4164bca981 GIT binary patch literal 74416 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

        $gh zGj>WlI>C!1$j!LR0wkT~sZtkITl7xUD!QhhJBn?OGcN38@94}Y%wUsh;hDMsO%>H= zk}Z7ULC+18@49gCyXip3MU(YZ;Sawh-GPU0B{QZ;kFi9W`;fxG@AKE&%%COrv{9c+ zHT!&Z2Bel>#g1&7f``*-<&?0^B4AoIK$H>cU7IPM)pQn5$Gg-uyYK!FWa0O(*!MLy z>~G7@uM{JVN~iv)NE=6uvL_Wb_iNQRU)3Jx&jeWOyO|>di{EqpbdQQ<##SpUnNF>q zw@U4{YIMG_LdarF^_4fPxyG9c#8!l_QKhkv^ew}35K*NyQOV+*6IXS zCyLfQV{!J*85rRpU2E=ZyH@L_3mtXa&NG88Mwdf<3c^lQL~OHpMEZ8=Ya*1ibo^D-@h9xj+j%Q%y7=?mhab8+IX7@wRZ2*drDt8czxnK9G~Ey z+OkZ!Lljb?xAxZUgUiQ7Ha3WxZ^KdS18)vTrV|H>@QY=KfmidI>th3xZ&IG~}#m4xw`g$b1?KuxH#?QsOPM$uP>Vq-K+biKPr8uPSuPn;IhwQ5=!G5;6|LL&Ko1r0y_Pk zdk~#_z$K9`WEhaWKJu#hAvg4;q^h@S>qE&Uy0ho0S8k*E0bAmeuA5P%vbq{O;N-&& z!BiE=N45^X3lfG?wSa;iK9|57 zn60Gu&6YAG@eZM1Fy6lLad!Be@Y;?2k0zlpH9B^uV{ytL`ay6W7mESeoUf`CVQ=z- z*~s>^4nc7ifpqBZWz_pKhuOdl(2#+Fmo6cM%&YRGb)5e61!l9sj_@;sV6M_&Fb5-r zdwOhVOUkMnq0ij`wv&i?TgHSeLI65@&lI_p)C@ZgZzX(OI04867O$gsl;|LH!( z#a=|Y>3YlBp29{$divrUatf!e-Io*e@QL+^`*~`eIcu@YC)sIEqSO3MUJEtO?FG(G z7F#s5e)eR$e4sIK^J6l|8!|WM6W6o^&f6?wT;PEy4V7~C7pJR&0WEOt=V0F@u*EzV zLRZw*eft;bydCU=$aqz)G8%Q}8q?bY`P1A825 zkQP&#o-TJa;f5$tUpqGzh)L$h&c0nS1YMZ-ibNxiQ{g^Mg-0rA%_Ta;4n<{;FLkX0 z%S^YxMX66W+__%X8n-`+5Y}M49_R7hYjkVbvb2Vp_#1z&3X`?yu5}pCVFT?NiU_LT zCtvY0uylSeq(GFuKd!|BOpVewG()c4u5MghB#u~*Tw64?KM?YVH<`$4SoFBQIUb0G zVz#?KbGboDe6M-57T)Hw7gT86hI?17%>ReRrjxPUJzQA`^dYVDnN#mbiMd@#rGeX- zB~RcD>HrJ(2+f%PW5D3CC5mc({_yC9kF%`G8MCX` zZW;bgc=78u@kxv#jd&fn_pafFT6oiE@`7XVG;wQfJDkcYUF74EFi*YO@b;j#^ zkx(Udwlp~A!7O(;7k(UAYalJ#MOAQRpz{Gt0nDI6-({&T7Yb+jkK0aT^M>r{{;1i{ zD?QZ9=b=>PYoLFS=FPJQDQ~jsQA<@j(J8ErPQQ3h%URymhCS=kU=Uh@54hZB?Yyn0 z>Gw;-st~867na&h?1U>ogKVbH@nmIW&?huk<%I;z35@NC-`2gXMFoH-4!K#|A8D0q zRw`nd?O!GB+DPoiAKZZpnbd%RB`ic^u8E^=rn6F5H+ag_Eq zX8i&UNBx-(SK24Oof82pVdG6As~5<-c&D}z(iU#x)}K7&#|#!wTZvKdvM8HAsg21@ zMK_E3TFO2R#YxK$abk_ca9#0M;3V#7P9ShZ9!_j2feta<{V0yLrZ?mulbh>!uq%pf z%Q1%wM#PWeo{pmY0J-EV%6<4Dc4i9f?fR(eUkqu*v-ILc0>A!O|4ez7swYzVLbJ+P z?0q9Kog1YGk$O~Nu4CWOn9uheI@_LZ&~+{zMpO3M>eB0v;@41lBt%DJOZkUr|0GEI zT&+}D_Dm6*cp`&ppW?%LquVGbYw==2OG4Ccu|vLj7V0ky-{I*o-N9+FX)e03bQ
      • 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 literal 0 HcmV?d00001 diff --git a/深度对接设备接口/assets/live.png b/深度对接设备接口/assets/live.png new file mode 100644 index 0000000000000000000000000000000000000000..b3f475b7cda52c3f4b7206c34f894df594579cfa GIT binary patch literal 84175 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 literal 0 HcmV?d00001 diff --git a/深度对接设备接口/assets/source.png b/深度对接设备接口/assets/source.png new file mode 100644 index 0000000000000000000000000000000000000000..6d762c7a54cf53099fbe4ea7f812908a423414a1 GIT binary patch literal 95914 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 literal 0 HcmV?d00001 diff --git a/深度对接设备接口/device.html b/深度对接设备接口/device.html new file mode 100644 index 0000000..f3714a0 --- /dev/null +++ b/深度对接设备接口/device.html @@ -0,0 +1,65 @@ + + + + + + + 设备信息 + + + + + + +

        +
        +
        +

        设备信息

        +
        +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        +
        + +
        +
        +
        +
        +
        +
        + + + + + + + + + + \ No newline at end of file diff --git a/深度对接设备接口/device.js b/深度对接设备接口/device.js new file mode 100644 index 0000000..fd39e34 --- /dev/null +++ b/深度对接设备接口/device.js @@ -0,0 +1,67 @@ +class deviceInfo { + constructor() { + this.info = {}; + + this.init(); + } + init() { + deviceApis.getDeviceInfo().then(res => { + console.log(res) + this.info = res.data; + this.initForm() + }) + } + initForm() { + layui.use(() => { + var form = layui.form; + form.val('deviceForm', this.info); + form.on('submit(saveData)', (formData) => { + deviceApis.editDeviceInfo(Object.assign(this.info, formData.field)).then(res => { + console.log(res) + }) + return false; + }); + }) + } +} + +// 等待Layui加载完成后初始化 +layui.use(['layer', 'form'], () => { + // 初始化表格管理器 + window.deviceInfo = new deviceInfo(); +}); + +const deviceApis = { + getDeviceInfo: () => { + return new Promise((resolve, reject) => { + $.ajax({ + type: "GET", + dataType: "json", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.device}`, + success: function (res) { + resolve(res) + }, + error: function (err) { + reject(err) + } + }); + }) + }, + editDeviceInfo: (data) => { + return new Promise((resolve, reject) => { + $.ajax({ + type: "PUT", + contentType: "application/json", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.device}`, + data: JSON.stringify(data), + success: function (res) { + resolve(res) + }, + error: function (err) { + reject(err) + } + }); + }) + }, + +} \ No newline at end of file diff --git a/深度对接设备接口/facelib.html b/深度对接设备接口/facelib.html new file mode 100644 index 0000000..a8ac7da --- /dev/null +++ b/深度对接设备接口/facelib.html @@ -0,0 +1,100 @@ + + + + + + + 人脸底库管理 + + + + + + + +
        +
        +
        +

        人脸底库管理

        +
        +
        +

        人脸分组

        +
          +
        + +
        + + +
        + +
        + + +
        + + +
        + +
        +
        +
        + + + + + + + + + + + \ No newline at end of file diff --git a/深度对接设备接口/facelib.js b/深度对接设备接口/facelib.js new file mode 100644 index 0000000..5f4feab --- /dev/null +++ b/深度对接设备接口/facelib.js @@ -0,0 +1,560 @@ + +class FaceLibManager { + constructor() { + this.page = 1; + this.size = 10; + this.group_id = ''; + this.groupData = []; + this.data = []; + this.isEditing = false; + this.currentEditId = null; + this.table = null; + + this.init(); + } + + async init() { + this.initLayui(); + this.bindEvents(); + await this.getGroupData(); + this.getTableData(); + } + + // 初始化Layui + initLayui() { + layui.use(['table', 'layer', 'form'], () => { + const table = layui.table; + const layer = layui.layer; + const form = layui.form; + // 初始化表格 + this.table = table.render({ + elem: '#dataTable', + data: this.data, + cols: [[ + // { field: 'id', title: 'ID', width: 80, sort: true }, + { field: 'external_id', title: '外部ID', width: 150 }, + { field: 'name', title: '姓名', width: 150 }, + { field: 'image', title: '人脸图片', width: 150, templet: '#image' }, + { field: 'age', width: 100, title: '年龄', }, + { field: 'desc', title: '简介' }, + { field: 'update_time', width: 100, title: '更新时间', }, + { title: '操作', width: 200, toolbar: '#operationBar', fixed: 'right' } + ]], + page: true, + limit: 10, + limits: [10, 20, 50], + height: 'full-220', + text: { + none: '暂无数据' + } + }); + + // 监听工具条事件 + table.on('tool(dataTable)', (obj) => { + const data = obj.data; + if (obj.event === 'edit') { + this.editFaceModal(data, 'edit'); + } else if (obj.event === 'del') { + this.deleteData(data.id); + } + }); + }); + } + + getGroupData() { + return new Promise((resolve, reject) => { + faceLibApis.getGrpup().then(res => { + this.groupData = res.data.map(item => { + item.ext = JSON.parse(item.ext); + item.quality = item.ext.quality; + return item + }); + if (this.groupData.length > 0) { + this.group_id = this.groupData[0].id; + resolve() + } + let el = document.querySelector("#group-container"); + let innerHTML = '' + for (let i = 0; i < this.groupData.length; i++) { + if (i == 0) { + innerHTML += `
      • + ${this.groupData[i].name} + + +
      • `; + } else { + innerHTML += `
      • + ${this.groupData[i].name} + + +
      • `; + } + } + el.innerHTML = innerHTML; + + let editBtns = document.querySelectorAll("#group-container .layui-icon-edit"); + editBtns.forEach(editBtn => { + editBtn.addEventListener('click', (e) => { + let group_id = e.target.getAttribute("editId"); + this.editGroupModal(this.groupData.find(item => item.id == group_id), "edit") + }) + }) + + let delBtns = document.querySelectorAll("#group-container .layui-icon-delete"); + delBtns.forEach(delBtn => { + delBtn.addEventListener('click', (e) => { + let group_id = e.target.getAttribute("delId"); + faceLibApis.delGroup({ ids: [group_id] }).then(res => { + this.getGroupData(); + this.showNotification('数据更新成功!'); + }) + }) + }) + }) + }) + + } + getTableData() { + faceLibApis.getFaceList({ + page: this.page, + size: this.size, + group_id: this.group_id + }).then(res => { + this.data = res.data.data.map(item => { + // item.image = ZQLGLOBAL.serverIp + ':9092/staticdata' + item.image; + item.image = `http://${ZQLGLOBAL.serverIp}:9092/staticdata${item.image}` + return item + }); + if (this.table) { + layui.use('table', () => { + layui.table.reload('dataTable', { + data: this.data + }); + }); + } + }) + } + + // 绑定事件 + bindEvents() { + // 添加按钮事件 + document.getElementById('addGroup').addEventListener('click', () => { + this.editGroupModal({ + name: '', + quality: 0.35, + }, 'add'); + }); + + document.getElementById('addBtn').addEventListener('click', () => { + this.editFaceModal({ + name: '', + age: '', + sex: '', + desc: '', + external_id: '', + feature: '', + }, 'add'); + }); + + // 搜索功能 + document.getElementById('searchBtn').addEventListener('click', () => { + this.getTableData(); + }); + } + + // 编辑分组 + editGroupModal(data, type) { + layui.use(['layer', 'form'], () => { + const layer = layui.layer; + const form = layui.form; + + layer.open({ + type: 1, + title: type == 'add' ? '添加分组' : '编辑分组', + area: ['40vw', '40vh'], + content: ` +
        + +
        + +
        + +
        +
        + +
        + +
        + +
        +
        + +
        +
        + +
        +
        +
        + `, + success: () => { + form.render(); + // 监听表单提交 + form.on('submit(saveData)', (formData) => { + if (type == 'add') { + faceLibApis.addGroup({ + alg: 'face', + ext: { quality: formData.field.quality }, + name: formData.field.name + }).then(res => { + this.getGroupData(); + + // 关闭模态框 + layui.use('layer', () => { + layui.layer.closeAll(); + }); + this.showNotification('数据更新成功!'); + }) + } else { + faceLibApis.editGroup({ + id: data.id, + alg: 'face', + ext: { quality: formData.field.quality }, + name: formData.field.name + }).then(res => { + this.getGroupData(); + // 关闭模态框 + layui.use('layer', () => { + layui.layer.closeAll(); + }); + this.showNotification('数据更新成功!'); + }) + } + return false; + }); + } + }); + }); + } + + // 打开模态框 + editFaceModal(data, type) { + layui.use(['layer', 'form'], () => { + const layer = layui.layer; + const form = layui.form; + + layer.open({ + type: 1, + title: type == 'add' ? '添加数据' : '编辑数据', + area: ['80vw', '80vh'], + content: ` +
        + +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        +
        + +
        +
        +
        + `, + success: () => { + form.render(); + document.getElementById('faceImage').addEventListener('change', (event) => { + const files = event.target.files; + data.file = files[0] + }); + + // 监听表单提交 + form.on('submit(saveData)', (formData) => { + console.log(formData) + this.handleFormSubmit(formData.field, data); + return false; + }); + } + }); + }); + } + + // 提交:添加/编辑 + handleFormSubmit(formData, data) { + // 验证数据 + if (!this.validateData(formData)) { + return; + } + let params = { + group_id: this.group_id, + name: formData.name, + age: formData.age, + sex: formData.sex, + desc: formData.desc, + external_id: formData.external_id + } + + if (!data.id) { + faceLibApis.addFace(params).then(res => { + if (data.file) { + let formdata = new FormData(); + formdata.append('id', res.data); + formdata.append('image', data.file) + faceLibApis.addImage(formdata).then(res => { + this.facecb('add') + }) + } else { + this.facecb('add') + } + + }) + } else { + params.id = data.id; + faceLibApis.editFace(params).then(res => { + if (data.file) { + let formdata = new FormData(); + formdata.append('id', params.id); + formdata.append('image', data.file) + faceLibApis.addImage(formdata).then(res => { + this.facecb('edit') + }) + } else { + this.facecb('edit') + } + }) + } + + + } + + facecb(type) { + // 关闭模态框 + layui.use('layer', () => { + layui.layer.closeAll(); + }); + this.showNotification(type == 'add' ? '数据添加成功!' : '数据更新成功!'); + setTimeout(() => { + this.getTableData(); + }, 1500) + } + + // 验证数据 + validateData(data) { + if (!data.name) { + this.showNotification('请输入姓名', 'error'); + return false; + } + return true; + } + + // 删除数据 + deleteData(id) { + layui.use('layer', () => { + layui.layer.confirm('确定要删除这条数据吗?', { + icon: 3, + title: '提示' + }, (index) => { + faceLibApis.delSource({ id: id }).then(res => { + this.getTableData(); + this.showNotification('数据删除成功!'); + layui.layer.close(index); + }) + }); + }); + } + + // 显示通知 + showNotification(message, type = 'success') { + layui.use('layer', () => { + layui.layer.msg(message, { + icon: type === 'success' ? 1 : 2, + time: 2000 + }); + }); + } +} + +// 等待Layui加载完成后初始化 +layui.use(['table', 'layer', 'form'], () => { + // 初始化人脸列表 + window.faceLibManager = new FaceLibManager(); +}); + +const faceLibApis = { + getFaceList: (params) => { + return new Promise((resolve, reject) => { + $.ajax({ + type: "GET", + dataType: "json", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.face}?page=${params.page}&size=${params.size}&group_id=${params.group_id}`, + success: function (res) { + resolve(res) + }, + error: function (err) { + reject(err) + } + }); + }) + }, + addFace: (data) => { + return new Promise((resolve, reject) => { + $.ajax({ + type: "POST", + contentType: "application/json", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.face}`, + data: JSON.stringify(data), + success: function (res) { + resolve(res) + }, + error: function (err) { + reject(err) + } + }); + }) + }, + editFace: (data) => { + return new Promise((resolve, reject) => { + $.ajax({ + type: "PUT", + contentType: "application/json", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.face}`, + data: JSON.stringify(data), + success: function (res) { + resolve(res) + }, + error: function (err) { + reject(err) + } + }); + }) + }, + delFace: (data) => { + return new Promise((resolve, reject) => { + $.ajax({ + type: "DELETE", + contentType: "application/json", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.face}`, + data: JSON.stringify(data), + success: function (res) { + resolve(res) + }, + error: function (err) { + reject(err) + } + }); + }) + }, + addImage: (formdata) => { + return new Promise((resolve, reject) => { + $.ajax({ + type: "PUT", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.image}`, + data: formdata, // 使用FormData对象 + processData: false, // 告诉jQuery不要处理发送的数据 + contentType: false, + success: function (res) { + resolve(res) + }, + error: function (err) { + reject(err) + } + }); + }) + }, + getGrpup: () => { + let type = 'face'; + // 获取人脸分组 + return new Promise((resolve, reject) => { + $.ajax({ + type: "GET", + dataType: "json", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.group}?alg=${type}`, + success: function (res) { + resolve(res) + }, + error: function (err) { + reject(err) + } + }); + }) + }, + addGroup: (data) => { + return new Promise((resolve, reject) => { + $.ajax({ + type: "POST", + contentType: "application/json", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.group}`, + data: JSON.stringify(data), + success: function (res) { + resolve(res) + }, + error: function (err) { + reject(err) + } + }); + }) + }, + editGroup: (data) => { + return new Promise((resolve, reject) => { + $.ajax({ + type: "PUT", + contentType: "application/json", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.group}`, + data: JSON.stringify(data), + success: function (res) { + resolve(res) + }, + error: function (err) { + reject(err) + } + }); + }) + }, + delGroup: (data) => { + return new Promise((resolve, reject) => { + $.ajax({ + type: "DELETE", + contentType: "application/json", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.group}`, + data: JSON.stringify(data), + success: function (res) { + resolve(res) + }, + error: function (err) { + reject(err) + } + }); + }) + }, +} \ No newline at end of file diff --git a/深度对接设备接口/index.html b/深度对接设备接口/index.html new file mode 100644 index 0000000..5c5f876 --- /dev/null +++ b/深度对接设备接口/index.html @@ -0,0 +1,32 @@ + + + + + + + Document + + + +
        + + + \ No newline at end of file diff --git a/深度对接设备接口/live.css b/深度对接设备接口/live.css new file mode 100644 index 0000000..84dbbfb --- /dev/null +++ b/深度对接设备接口/live.css @@ -0,0 +1,137 @@ +.main-container { + width: 100vw; + height: 100vh; + display: flex; + justify-content: space-between; + padding: 10px; + box-sizing: border-box; +} + +#video-container { + width: calc(100% - 310px); + display: flex; + flex-wrap: wrap; + justify-content: space-between; +} + +.right-container { + width: 300px; + height: 100%; + overflow: auto; +} + +#video-container .video-box { + background-color: #000; + position: relative; +} + +#video-container .video-box .tips { + position: absolute; + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + position: absolute; + z-index: 1; + +} +#video-container .video-box .tips .deviceoffline{ + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + color: #fff; +} + +#video-container .video-box canvas { + position: absolute; +} + +#video-container.one-video .video-box { + width: 100%; + height: 100%; +} + +#video-container.four-video .video-box { + width: calc(50% - 2px); + height: calc(50% - 2px); +} + +#video-container.four-video .video-box:nth-child(1) { + margin-bottom: 4px; +} + +#video-container.four-video .video-box:nth-child(1) { + margin-bottom: 4px; +} + +.video-box .title-container { + position: absolute; + top: 0; + width: 100%; + height: 40px; + background-color: rgb(73 162 238 / 45%); + color: #00faff; + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 10px; + box-sizing: border-box; + z-index: 1; +} + +.video-box .title-container .alg { + width: 300px; + position: relative; +} + +.video-box .title-container ul { + display: none; + background-color: rgb(131 186 233 / 45%); +} + +.video-box .title-container:hover ul { + display: block; + position: absolute; + top: 30px; + left: 40px; + max-height: 300px; + overflow: auto; +} + +.video-box .title-container:hover ul li { + width: 100%; + height: 32px; + box-sizing: border-box; + padding: 5px; + cursor: pointer; +} + + +/* 加载中 */ +.icon-dot { + position: relative; + display: block; + border-radius: 50%; + background-color: #39f; + width: 40px; + height: 40px; + animation: ani-spin-bounce 1s 0s ease-in-out infinite; +} + +@keyframes ani-spin-bounce { + 0% { + transform: scale(0); + } + + 100% { + transform: scale(1); + opacity: 0; + } +} + +.layui-tree-main{ + position: relative; +} \ No newline at end of file diff --git a/深度对接设备接口/live.html b/深度对接设备接口/live.html new file mode 100644 index 0000000..03e2357 --- /dev/null +++ b/深度对接设备接口/live.html @@ -0,0 +1,66 @@ + + + + 实时画面叠加实时检测结果 + + + + + + + + + + + + + + +
        +
        +
        +
        + + +
        +
        +
        + +
        +
        +
        + + + + + + \ No newline at end of file diff --git a/深度对接设备接口/live.js b/深度对接设备接口/live.js new file mode 100644 index 0000000..5814fe9 --- /dev/null +++ b/深度对接设备接口/live.js @@ -0,0 +1,920 @@ + +const ZQL_multivideo = { + setVideoEl: () => { + let videoContainer = document.querySelector("#video-container"); + if (ZQL_playingSource.videoNum == 1) { + videoContainer.className = "one-video"; + videoContainer.innerHTML = ` +
        +
        +
        +
        + + 离线 +
        +
        +
        + + +
        + ` + } else { + videoContainer.className = "four-video"; + videoContainer.innerHTML = ` +
        +
        + +
        +
        + + +
        +
        +
        + +
        +
        + + +
        +
        +
        + +
        +
        + + +
        +
        +
        + +
        +
        + + +
        + ` + } + }, + liveLoading: (index) => { + let tipel = document.querySelector("#tip" + index); + tipel.innerHTML = `
        ` + }, + liveOffline: (index) => { + let tipel = document.querySelector("#tip" + index); + tipel.innerHTML = ` +
        + + 离线 +
        + ` + }, + liveStopLoading: (index) => { + let tipel = document.querySelector("#tip" + index); + if (tipel) { + tipel.innerHTML = `` + } + }, + setAlgList(index) { + let el = document.querySelector(`#video-title${index}`); + let algList = ZQL_sources[ZQL_playingSource[index]].alg; + let algEl = '
          '; + for (let alg in algList) { + let name = algList[alg].reserved_args.ch_name; + algEl = algEl + `
        • ${name}
        • ` + } + algEl = algEl + '
        ' + el.innerHTML = ` +
        ${ZQL_sources[ZQL_playingSource[index]].desc}
        +
        +
        算法: ${ZQL_playingSource[index].alg ? ZQL_sources[ZQL_playingSource[index]].alg[alg].reserved_args.ch_name : ''}
        + ${algEl} +
        +
        关闭
        + `; + el.querySelectorAll('li').forEach(item => { + item.addEventListener('click', (e) => { + let index = e.currentTarget.getAttribute("index"); + let alg = e.currentTarget.getAttribute("alg") + ZQL_videosInfos[index].alg = alg; + let videlel = document.querySelector(`#video-title${index}`); + videlel.querySelector(".algname").innerHTML = '算法:' + ZQL_sources[ZQL_playingSource[index]].alg[alg].reserved_args.ch_name + }) + }) + document.querySelector(`#close${index}`).addEventListener('click', () => { + ZQL_multivideo.clearAlgList(index); + ZQL_multivideo.liveStopLoading(index); + ZQL_multivideo.destoryVideoByIndex(index); + ZQL_playingSource[index] = null; + ZQL_videosInfos[index] = null; + }) + }, + clearAlgList(index) { + let el = document.querySelector(`#video-title${index}`); + if (el) { + el.innerHTML = "" + } + + }, + handleRefresh(index) { + if (!ZQL_videosInfos[index]) { + return; + } + if (ZQL_videosInfos[index].status == "离线") { + ZQL_multivideo.destoryVideoByIndex(index); + ZQL_multivideo.subscribeLive(ZQL_playingSource[index], index); + } else { + if (!ZQL_videosInfos[index].stream) { + return; + } + let video = document.getElementById("video" + index); + video && (video.srcObject = null); + if (ZQL_videosInfos[index] && ZQL_videosInfos[index].replayTimer) { + clearTimeout(ZQL_videosInfos[index].replayTimer); + ZQL_videosInfos[index].replayTimer = null; + } + ZQL_videosInfos[index] && + ZQL_videosInfos[index].srsrtc && + ZQL_videosInfos[index].srsrtc.destroy(); + ZQL_videosInfos[index].srsrtc = null; + ZQL_videosInfos[index].status = ""; + ZQL_multivideo.playVideo(ZQL_playingSource[index], index); + } + }, + subscribeLive(cameraId, index) { + ZQL_multivideo.getCameraSize(cameraId, index); + ZQL_multivideo.liveLoading(index); + ZQL_apis + .subscribeLive( + // ZQL_sources[cameraId].deviceId, + // ZQL_sources[cameraId].sourceId + cameraId + ) + .then((data) => { + let stream = data.data; + if (data && stream) { + ZQL_videosInfos[index].stream = stream; + ZQL_multivideo.playVideo(cameraId, index); + } else { + if (ZQL_playingSource[index] == cameraId) { + ZQL_multivideo.liveOffline(index); + // ZQL_videosInfos[index].status = "离线"; + // ZQL_videosInfos[index].loading = false; + // this.reSubcribe(cameraId, index); + } + } + }) + .catch((err) => { + if ( + ZQL_playingSource[index] == cameraId && + ZQL_videosInfos[index] + ) { + ZQL_multivideo.liveOffline(index); + // ZQL_videosInfos[index].status = "离线"; + // ZQL_videosInfos[index].loading = false; + // this.reSubcribe(cameraId, index); + } + }); + }, + playVideo(cameraId, index) { + if (ZQL_videosInfos[index].srsrtc) { + return; + } + ZQL_videosInfos[index].loading = true; + + let video = document.getElementById("video" + index); + let stream = ZQL_videosInfos[index].stream; + var srsrtc; + if (stream.indexOf("webrtc") >= 0) { + let src = + "webrtc://" + ZQLGLOBAL.serverIp + "/live" + stream.split("/live")[1]; + srsrtc = new JSWebrtc.Player(src, { + video: video, + autoplay: true, + onPlay: (obj) => { + ZQL_multivideo.liveStopLoading(index); + ZQL_videosInfos[index].loading = false; + ZQL_videosInfos[index].playerState = "success"; + }, + }); + } else if (stream.indexOf(".flv") >= 0) { + let src = `http://${ZQLGLOBAL.serverIp}:${ZQLGLOBAL.srs_http_server}/live${stream.split("/live")[1] + }`; + srsrtc = mpegts.createPlayer( + { + type: "flv", + url: src, + isLive: true, + }, + { enableWorker: true } + ); + srsrtc.attachMediaElement(video); + srsrtc.load(); + ZQL_videosInfos[index].playerState = ""; + srsrtc + .play() + .then((res) => { + ZQL_multivideo.liveStopLoading(index); + ZQL_videosInfos[index].playerState = "success"; + ZQL_videosInfos[index].loading = false; + + if (ZQL_videosInfos[index].refreshTimeInterval) { + clearInterval(ZQL_videosInfos[index].refreshTimeInterval); + } + ZQL_videosInfos[index].refreshTime = + parseInt((Math.random() * 5 + 5) * 1000) * 60; + ZQL_videosInfos[index].refreshTimeInterval = setInterval(() => { + handleRefresh(index); + }, ZQL_videosInfos[index].refreshTime); + }) + .catch((err) => { }); + if (ZQL_videosInfos[index].replayTimer) { + clearTimeout(ZQL_videosInfos[index].replayTimer); + } + ZQL_videosInfos[index].replayTimer = setTimeout(() => { + ZQL_multivideo.replayflv(srsrtc, cameraId, index); + }, 3000); + } + ZQL_videosInfos[index].srsrtc = srsrtc; + }, + replayflv(srsrtc, cameraId, index) { + if (!ZQL_videosInfos[index]) { + return; + } + if (ZQL_videosInfos[index].playerState == "success") { + return; + } else { + srsrtc.unload(); + srsrtc.load(); + srsrtc + .play() + .then((res) => { + ZQL_multivideo.liveStopLoading(index); + ZQL_videosInfos[index].playerState = "success"; + ZQL_videosInfos[index].loading = false; + if (ZQL_videosInfos[index].refreshTimeInterval) { + clearInterval(ZQL_videosInfos[index].refreshTimeInterval); + } + ZQL_videosInfos[index].refreshTime = + parseInt((Math.random() * 5 + 5) * 1000) * 60; + ZQL_videosInfos[index].refreshTimeInterval = setInterval(() => { + ZQL_multivideo.handleRefresh(index); + }, ZQL_videosInfos[index].refreshTime); + }) + .catch((err) => { + // this.destoryVideoByIndex(index); + // this.subscribeLive(cameraId, index); + }); + if (ZQL_videosInfos[index].replayTimer) { + clearTimeout(ZQL_videosInfos[index].replayTimer); + } + ZQL_videosInfos[index].replayTimer = setTimeout(() => { + ZQL_multivideo.replayflv(srsrtc, cameraId, index); + }, 3000); + } + }, + reSubcribe(cameraId, index) { + if (ZQL_videosInfos[index].subscribeTimeout) { + clearTimeout(ZQL_videosInfos[index].subscribeTimeout); + ZQL_videosInfos[index].subscribeTimeout = null; + } + ZQL_multivideo.videosInfos[index].subscribeTimeout = setTimeout(() => { + ZQL_multivideo.subscribeLive(cameraId, index); + }, 1000); + }, + getCameraSize(id, index) { + ZQL_multivideo.setOrisize( + ZQL_sources[id].draw_size[0], + ZQL_sources[id].draw_size[1], + index, id + ); + }, + setOrisize(width, height, index, id) { + let container = document.querySelector(".video-box"); + if (!container) { + return; + } + if (!ZQL_videosInfos[index]) { + let alg = null; + if (sessionStorage.getItem("curalgs")) { + let cameraId = ZQL_playingSource[index]; + let curalgs = JSON.parse(sessionStorage.getItem("curalgs")); + alg = curalgs[cameraId] + ? JSON.parse(JSON.stringify(curalgs[cameraId])) + : null; + } + ZQL_videosInfos[index] = { + id: id, + loading: true, + openWs: true, + alg: alg, + algListShow: false, + subscribeTimeout: null, + refreshTimeInterval: null, // 定时刷新定时器 + refreshTime: null, // 定时刷新时间 + replayTimer: null, + playerState: "pending", + detectInterval: null, + quanping: false, + srsrtc: null, + stream: "", + status: "", + stream_code: "", + }; + } + if (ZQL_videosInfos[index]) { + let oriWidth = width; + let oriHeight = height; + ZQL_videosInfos[index].oriWidth = oriWidth; + ZQL_videosInfos[index].oriHeight = oriHeight; + + if ( + oriWidth / container.offsetWidth > + oriHeight / container.offsetHeight + ) { + ZQL_videosInfos[index].actualHeight = container.offsetWidth / (oriWidth / oriHeight) + ZQL_videosInfos[index].actualWidth = container.offsetWidth; + } else { + ZQL_videosInfos[index].actualHeight = container.offsetHeight + ZQL_videosInfos[index].actualWidth = container.offsetHeight * (oriWidth / oriHeight) + } + // videoWidth = ZQL_videosInfos[index].actualWidth; + ZQL_multivideo.setPosition(index); + } + }, + setPosition(index) { + let container = document.querySelector(".video-box"); + let video = document.querySelector("#video" + index); + let canvas = document.getElementById("canvas" + index); + let width = ZQL_videosInfos[index].actualWidth, height = ZQL_videosInfos[index].actualHeight; + video.style.position = "absolute"; + video.style.width = width + "px"; + video.style.height = height + "px"; + canvas.width = width; + canvas.height = height; + if (width / container.offsetWidth < height / container.offsetHeight) { + let left = (container.offsetWidth - width) / 2; + video.style.left = Math.floor(left) + "px"; + video.style.top = 0 + "px"; + canvas.style.left = Math.floor(left) + "px"; + canvas.style.top = "0px"; + } else { + let top = (container.offsetHeight - height) / 2; + video.style.top = Math.floor(top) + "px"; + video.style.left = 0 + "px"; + canvas.style.top = Math.floor(top) + "px"; + canvas.style.left = "0px"; + } + }, + setAlarms: (data, index) => { + ZQL_multivideo.clearCanvas(index); + if (ZQL_videosInfos[index] && !ZQL_videosInfos[index].canvas) { + ZQL_videosInfos[index].canvas = document.getElementById("canvas" + index) + } + if ( + !ZQL_videosInfos[index] || + !ZQL_videosInfos[index].actualWidth || + !ZQL_videosInfos[index].actualHeight || + !ZQL_videosInfos[index].oriWidth || + !ZQL_videosInfos[index].oriHeight + ) { + return; + } + // let bbox = data.result.data.bbox; + let bbox = data.bbox; + if (Object.values(bbox.polygons).length > 0) { + Object.values(bbox.polygons).forEach((item) => { + let color = JSON.parse(JSON.stringify(item.color)).reverse(); + // let color = item.color; + let points = item.polygon.map((point) => { + return [ + Math.round( + (point[0] * ZQL_videosInfos[index].actualWidth) / + ZQL_videosInfos[index].oriWidth + ), + Math.round( + (point[1] * ZQL_videosInfos[index].actualHeight) / + ZQL_videosInfos[index].oriHeight + ), + ]; + }); + let context = ZQL_videosInfos[index].canvas.getContext("2d"); + context.font = "20px Arial bolder"; + context.fillStyle = "transparent"; + context.strokeStyle = "rgb(" + color.join(",") + ")"; + context.lineWidth = 2; + ZQL_multivideo.drawPolygons(points, context); + ZQL_multivideo.drawPolygonInfo(context, Object.values(bbox.polygons), index); + }); + } + + if (bbox.rectangles.length > 0) { + bbox.rectangles.forEach((item, i) => { + let color = JSON.parse(JSON.stringify(item.color)).reverse(); + let coordinates = { + x: Math.round( + (item.xyxy[0] * ZQL_videosInfos[index].actualWidth) / + ZQL_videosInfos[index].oriWidth + ), + y: Math.round( + (item.xyxy[1] * ZQL_videosInfos[index].actualHeight) / + ZQL_videosInfos[index].oriHeight + ), + x1: Math.round( + (item.xyxy[2] * ZQL_videosInfos[index].actualWidth) / + ZQL_videosInfos[index].oriWidth + ), + y1: Math.round( + (item.xyxy[3] * ZQL_videosInfos[index].actualHeight) / + ZQL_videosInfos[index].oriHeight + ), + }; + let context = ZQL_videosInfos[index].canvas.getContext("2d"); + context.font = "20px Arial bolder"; + context.fillStyle = "rgb(" + color.join(",") + ")"; + context.fillText(item.label || "", coordinates.x, coordinates.y - 10); + context.strokeStyle = "rgb(" + color.join(",") + ")"; + context.lineWidth = 2; + // context.strokeRect( + // coordinates.x, + // coordinates.y, + // coordinates.x1 - coordinates.x, + // coordinates.y1 - coordinates.y + // ); + let lines = []; + let lineWidth = (coordinates.x1 - coordinates.x) / 4; + let lineHeight = (coordinates.y1 - coordinates.y) / 4; + lines[0] = { + x: coordinates.x, + y: coordinates.y, + x1: coordinates.x + lineWidth, + y1: coordinates.y, + }; + lines[1] = { + x: coordinates.x, + y: coordinates.y, + x1: coordinates.x, + y1: coordinates.y + lineHeight, + }; + lines[2] = { + x: coordinates.x1, + y: coordinates.y, + x1: coordinates.x1 - lineWidth, + y1: coordinates.y, + }; + lines[3] = { + x: coordinates.x1, + y: coordinates.y, + x1: coordinates.x1, + y1: coordinates.y + lineHeight, + }; + lines[4] = { + x: coordinates.x, + y: coordinates.y1, + x1: coordinates.x + lineWidth, + y1: coordinates.y1, + }; + lines[5] = { + x: coordinates.x, + y: coordinates.y1, + x1: coordinates.x, + y1: coordinates.y1 - lineHeight, + }; + lines[6] = { + x: coordinates.x1, + y: coordinates.y1, + x1: coordinates.x1 - lineWidth, + y1: coordinates.y1, + }; + lines[7] = { + x: coordinates.x1, + y: coordinates.y1, + x1: coordinates.x1, + y1: coordinates.y1 - lineHeight, + }; + lines.forEach((item) => { + ZQL_multivideo.drawLine(context, item); + }); + }); + } + + if (Object.values(bbox.lines).length > 0) { + Object.values(bbox.lines).forEach((item, i) => { + let color = JSON.parse(JSON.stringify(item.color)).reverse(); + let coordinates = { + x: Math.round( + (item.line[0][0] * ZQL_videosInfos[index].actualWidth) / + ZQL_videosInfos[index].oriWidth + ), + y: Math.round( + (item.line[0][1] * ZQL_videosInfos[index].actualHeight) / + ZQL_videosInfos[index].oriHeight + ), + x1: Math.round( + (item.line[1][0] * ZQL_videosInfos[index].actualWidth) / + ZQL_videosInfos[index].oriWidth + ), + y1: Math.round( + (item.line[1][1] * ZQL_videosInfos[index].actualHeight) / + ZQL_videosInfos[index].oriHeight + ), + }; + let context = ZQL_videosInfos[index].canvas.getContext("2d"); + context.font = "20px Arial bolder"; + context.fillStyle = "rgb(" + color.join(",") + ")"; + if (item.ext.direction) { + context.fillText(item.name, (coordinates.x + coordinates.x1) / 2, (coordinates.y + coordinates.y1) / 2 + 20); + } + + context.strokeStyle = "rgb(" + color.join(",") + ")"; + context.lineWidth = 2; + ZQL_multivideo.drawLine(context, coordinates); + ZQL_multivideo.drawCountingInfo(context, Object.values(bbox.lines)); + }); + } + }, + drawPolygons(points, context) { + context.beginPath(); + context.moveTo(points[0][0], points[0][1]); + + for (var i = 1; i < points.length; i++) { + context.lineTo(points[i][0], points[i][1]); + } + context.closePath(); + context.fill(); + context.stroke(); + }, + drawLine(ctx, line) { + ctx.beginPath(); + ctx.moveTo(line.x, line.y); + ctx.lineTo(line.x1, line.y1); + ctx.stroke(); + }, + drawCountingInfo(context, lines) { + lines.forEach((item, index) => { + context.fillStyle = "rgb(255,0,0)"; + if (item.ext.direction.length == 2) { + context.fillText(`[${item.name}] ${item.ext.action.count}: ${item.ext.result.count}`, 0, 20 * index + 20); + } else { + context.fillText(`[${item.name}] ${item.ext.action.increase}: ${item.ext.result.increase},${item.ext.action.decrease}: ${item.ext.result.decrease},${item.ext.action.delta}: ${item.ext.result.delta}`, 0, 20 * index + 20); + } + }); + }, + drawPolygonInfo(context, polygons, videoindex) { + polygons.forEach((item, index) => { + context.fillStyle = + "rgb(" + + JSON.parse(JSON.stringify(item.color)).reverse().join(",") + + ")"; + let leftPoint = item.polygon[0]; + for (let i = 1; i < item.polygon.length; i++) { + if (item.polygon[i][0] < leftPoint[0]) { + leftPoint = item.polygon[i]; + } + } + context.fillText( + `${item.name}`, + (leftPoint[0] * ZQL_videosInfos[videoindex].actualWidth) / + ZQL_videosInfos[videoindex].oriWidth, + (leftPoint[1] * ZQL_videosInfos[videoindex].actualHeight) / + ZQL_videosInfos[videoindex].oriHeight + 20 + ); + if (item.ext.result) { + context.fillStyle = "rgb(255,0,0)"; + context.fillText(`${item.name}: ${item.ext.result}`, 0, 20 * index + 20); + } + }); + }, + destroyVideo(videonum) { + for (let i = 0; i < videonum; i++) { + ZQL_multivideo.destoryVideoByIndex(i); + } + }, + destoryVideoByIndex(index) { + ZQL_multivideo.clearCanvas(index); + if (ZQL_videosInfos[index]) { + if ( + ZQL_videosInfos[index] && + ZQL_videosInfos[index].subscribeTimeout + ) { + clearTimeout(ZQL_videosInfos[index].subscribeTimeout); + ZQL_videosInfos[index].subscribeTimeout = null; + } + if (ZQL_videosInfos[index] && ZQL_videosInfos[index].replayTimer) { + clearTimeout(ZQL_videosInfos[index].replayTimer); + ZQL_videosInfos[index].replayTimer = null; + } + if (ZQL_videosInfos[index].refreshTimeInterval) { + clearInterval(ZQL_videosInfos[index].refreshTimeInterval); + ZQL_videosInfos[index].refreshTimeInterval = null; + } + let video = document.getElementById("video" + index); + video && (video.srcObject = null); + ZQL_videosInfos[index].srsrtc && + ZQL_videosInfos[index].srsrtc.destroy(); + ZQL_multivideo.clearCanvas(index); + ZQL_videosInfos[index] = null; + } + }, + clearCanvas(index) { + let canvas = document.getElementById("canvas" + index); + if (canvas && canvas.getContext("2d")) { + canvas + .getContext("2d") + .clearRect(0, 0, canvas.offsetWidth, canvas.offsetHeight); + } + }, + connectMqtt() { + let mqttclient = mqtt.connect(`ws://${ZQLGLOBAL.serverIp}:${ZQLGLOBAL.websocket}/mqtt`); + mqttclient.subscribe( + ZQLGLOBAL.resultTopic, + { qos: 0 }, + (error) => { + if (error) { + console.log("subscribe error:", error); + return; + } + } + ); + mqttclient.subscribe( + ZQLGLOBAL.streamCodeTopic, + { qos: 0 }, + (error) => { + if (error) { + console.log("subscribe error:", error); + return; + } + } + ); + mqttclient.on("message", (topic, payload) => { + let msg = JSON.parse(payload.toString()); + if (msg.msg_type == "result") { + let id = msg.data.source.id; + for (let i = 0; i < 4; i++) { + if (ZQL_videosInfos[i]) { + let alg = + ZQL_videosInfos[i].alg && ZQL_videosInfos[i].alg.algname; + + if ( + id == ZQL_playingSource[i] && + msg.data.alg.name == ZQL_videosInfos[i].alg + ) { + ZQL_multivideo.setAlarms(msg.data.reserved_data, i); + if ( + ZQL_videosInfos[i] && + ZQL_videosInfos[i].canvasTimeout + ) { + clearTimeout(ZQL_videosInfos[i].canvasTimeout); + } + ZQL_videosInfos[i].canvasTimeout = setTimeout(() => { + ZQL_multivideo.clearCanvas(i); + }, 1000); + break; + } + } + } + } + if (msg.msg_type == "stream_code") { + let cameraId = msg.data.source_id; + for (let i = 0; i < ZQL_playingSource.videoNum; i++) { + if (cameraId == ZQL_playingSource[i] && ZQL_videosInfos[i]) { + if (!ZQL_videosInfos[i].stream_code) { + ZQL_videosInfos[i].stream_code = msg.data.stream_code; + } else if ( + msg.data.stream_code != ZQL_videosInfos[i].stream_code + ) { + ZQL_videosInfos[i].stream_code = msg.data.stream_code; + ZQL_multivideo.handleRefresh(i); + } + break; + } + } + } + + }); + } +} + +const ZQL_apis = { + getSources: () => { + return new Promise((resolve, reject) => { + $.ajax({ + type: "GET", + dataType: "json", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.getSources}`, + success: function (res) { + resolve(res) + }, + error: function (err) { + reject(err) + } + }); + }) + }, + subscribeLive: (source_id) => { + return new Promise((resolve, reject) => { + $.ajax({ + type: "GET", + dataType: "json", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.subscribe}?source_id=${source_id}`, + success: function (res) { + resolve(res) + }, + error: function (err) { + reject(err) + } + }); + }) + }, + sysArgs: () => { + return new Promise((resolve, reject) => { + $.ajax({ + type: "GET", + dataType: "json", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.tunnel}`, + success: function (tunnel) { + if (tunnel.data.enable == false) { + $.ajax({ + type: "GET", + dataType: "json", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.sysArgs}`, + success: function (res) { + resolve(res.data.map.local) + }, + error: function (err) { + reject(err) + } + }); + } else { + resolve({ + "srs_server": tunnel.data.srs_server, + "srs_http_api": tunnel.data.srs_http_api, + "srs_http_server": tunnel.data.srs_http_server, + "websocket": tunnel.data.websocket + }) + } + + }, + error: function (err) { + reject(err) + } + }); + + }) + }, + detectStream: () => { + return new Promise((resolve, reject) => { + $.ajax({ + type: "GET", + dataType: "json", + url: `http://${ZQLGLOBAL.serverIp}:${ZQLGLOBAL.srs_http_api}/api/v1/streams?start=0&count=10000`, + success: function (res) { + resolve(res) + }, + error: function (err) { + reject(err) + } + }); + }) + }, + detectVideo: (device_id, stream) => { + return new Promise((resolve, reject) => { + $.ajax({ + type: "GET", + dataType: "json", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.detect}?device_id=${device_id}&stream=${stream}&draw_size=1280`, + success: function (res) { + if (res.error == 0) { + resolve({ status: 1 }) + } else { + resolve({ status: 0 }) + } + }, + error: function (err) { + reject(err) + } + }); + }) + }, + gettoken: () => { + var ak = ZQLGLOBAL.accessKey; + var sk = ZQLGLOBAL.accessSecret; + var timestamp = parseInt(new Date().getTime() / 1000); + var nonce = ZQL_apis.generateRandomString(10); + let signature = ZQL_apis.generateSignature(ak, sk, timestamp, nonce) + return new Promise((resolve, reject) => { + $.ajax({ + type: "GET", + dataType: "json", + url: `http://${ZQLGLOBAL.serverIp}${ZQLGLOBAL.getToken}?signature=${signature}&ak=${ak}×tamp=${timestamp}&nonce=${nonce}`, + success: function (res) { + resolve(res) + }, + error: function (err) { + reject(err) + } + }); + }) + }, + generateSignature: (ak, sk, timestamp, nonce) => { + var message = `${ak}:${timestamp}:${nonce}`; + var hash = CryptoJS.HmacSHA256(message, sk); + var signature = CryptoJS.enc.Hex.stringify(hash); + return signature + }, + generateRandomString(length) { + let result = ''; + const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + + for (let i = 0; i < length; i++) { + result += characters.charAt(Math.floor(Math.random() * characters.length)); + } + + return result; + } +} + +function init() { + + // 设置文档结构 + ZQL_multivideo.setVideoEl(); + + // 设置事件监听 + // document.querySelector("#icon-oneviveo").addEventListener('click', () => { + // playingSource.videoNum = 1; + // setVideoEl(); + // }) + // document.querySelector("#icon-fourviveo").addEventListener('click', () => { + // playingSource.videoNum = 4; + // ZQL_multivideo.setVideoEl(); + // }) + + // 1. 获取摄像头列表 + Promise.all([ZQL_apis.getSources()]).then(res => { + let cameras = res[0].data.map(item => { + item.sourceId = item.id; + item.title = item.desc; + item.type = 'source'; + item.checked = false; + ZQL_sources[item.id] = item + return item + }); + + layui.use(function () { + var tree = layui.tree; + var layer = layui.layer; + tree.render({ + elem: '#ZQL_source_tree', + data: cameras, + // showCheckbox:true, + onlyIconControl: true, // 是否仅允许节点左侧图标控制展开收缩 + click: function (obj) { + if (obj.data.sourceId) { + let key = obj.data.sourceId; + if (ZQL_sources[key].checked == false) { + ZQL_sources[key].checked = true + if (ZQL_playingSource.videoNum == 1) { + ZQL_playingSource[0] = key; + ZQL_multivideo.subscribeLive(key, 0); + ZQL_multivideo.setAlgList(0); + } else { + for (let i = 0; i < 4; i++) { + if (!ZQL_playingSource[i]) { + ZQL_playingSource[i] = key; + ZQL_multivideo.subscribeLive(key, i); + ZQL_multivideo.setAlgList(i) + break; + } + } + } + } else { + ZQL_sources[key].checked = false + if (ZQL_playingSource.videoNum == 1) { + ZQL_playingSource[0] = null; + ZQL_multivideo.destoryVideoByIndex(0); + ZQL_multivideo.clearAlgList(0); + ZQL_multivideo.liveStopLoading(0); + } else { + for (let i = 0; i < 4; i++) { + if (ZQL_playingSource[i] == key) { + ZQL_playingSource[i] = null; + ZQL_multivideo.destoryVideoByIndex(i); + ZQL_multivideo.clearAlgList(i) + ZQL_multivideo.liveStopLoading(i); + } + } + } + } + } + } + }); + }); + }).catch(err => { + console.log(err) + }) + // 获取系统参数,连接mqtt,通过mqtt获取实时检测结果和视频流状态码 + ZQL_apis.sysArgs().then(res => { + ZQLGLOBAL = Object.assign(ZQLGLOBAL, res) + ZQL_multivideo.connectMqtt() + }).catch(err => { }) +} \ No newline at end of file diff --git a/深度对接设备接口/public/crypto-js.js b/深度对接设备接口/public/crypto-js.js new file mode 100644 index 0000000..17f2b11 --- /dev/null +++ b/深度对接设备接口/public/crypto-js.js @@ -0,0 +1,5988 @@ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(); + } + else if (typeof define === "function" && define.amd) { + // AMD + define([], factory); + } + else { + // Global (browser) + root.CryptoJS = factory(); + } +}(this, function () { + + /** + * CryptoJS core components. + */ + var CryptoJS = CryptoJS || (function (Math, undefined) { + /* + * Local polyfil of Object.create + */ + var create = Object.create || (function () { + function F() {}; + + return function (obj) { + var subtype; + + F.prototype = obj; + + subtype = new F(); + + F.prototype = null; + + return subtype; + }; + }()) + + /** + * CryptoJS namespace. + */ + var C = {}; + + /** + * Library namespace. + */ + var C_lib = C.lib = {}; + + /** + * Base object for prototypal inheritance. + */ + var Base = C_lib.Base = (function () { + + + return { + /** + * Creates a new object that inherits from this object. + * + * @param {Object} overrides Properties to copy into the new object. + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * field: 'value', + * + * method: function () { + * } + * }); + */ + extend: function (overrides) { + // Spawn + var subtype = create(this); + + // Augment + if (overrides) { + subtype.mixIn(overrides); + } + + // Create default initializer + if (!subtype.hasOwnProperty('init') || this.init === subtype.init) { + subtype.init = function () { + subtype.$super.init.apply(this, arguments); + }; + } + + // Initializer's prototype is the subtype object + subtype.init.prototype = subtype; + + // Reference supertype + subtype.$super = this; + + return subtype; + }, + + /** + * Extends this object and runs the init method. + * Arguments to create() will be passed to init(). + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var instance = MyType.create(); + */ + create: function () { + var instance = this.extend(); + instance.init.apply(instance, arguments); + + return instance; + }, + + /** + * Initializes a newly created object. + * Override this method to add some logic when your objects are created. + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * init: function () { + * // ... + * } + * }); + */ + init: function () { + }, + + /** + * Copies properties into this object. + * + * @param {Object} properties The properties to mix in. + * + * @example + * + * MyType.mixIn({ + * field: 'value' + * }); + */ + mixIn: function (properties) { + for (var propertyName in properties) { + if (properties.hasOwnProperty(propertyName)) { + this[propertyName] = properties[propertyName]; + } + } + + // IE won't copy toString using the loop above + if (properties.hasOwnProperty('toString')) { + this.toString = properties.toString; + } + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = instance.clone(); + */ + clone: function () { + return this.init.prototype.extend(this); + } + }; + }()); + + /** + * An array of 32-bit words. + * + * @property {Array} words The array of 32-bit words. + * @property {number} sigBytes The number of significant bytes in this word array. + */ + var WordArray = C_lib.WordArray = Base.extend({ + /** + * Initializes a newly created word array. + * + * @param {Array} words (Optional) An array of 32-bit words. + * @param {number} sigBytes (Optional) The number of significant bytes in the words. + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.create(); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); + */ + init: function (words, sigBytes) { + words = this.words = words || []; + + if (sigBytes != undefined) { + this.sigBytes = sigBytes; + } else { + this.sigBytes = words.length * 4; + } + }, + + /** + * Converts this word array to a string. + * + * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex + * + * @return {string} The stringified word array. + * + * @example + * + * var string = wordArray + ''; + * var string = wordArray.toString(); + * var string = wordArray.toString(CryptoJS.enc.Utf8); + */ + toString: function (encoder) { + return (encoder || Hex).stringify(this); + }, + + /** + * Concatenates a word array to this word array. + * + * @param {WordArray} wordArray The word array to append. + * + * @return {WordArray} This word array. + * + * @example + * + * wordArray1.concat(wordArray2); + */ + concat: function (wordArray) { + // Shortcuts + var thisWords = this.words; + var thatWords = wordArray.words; + var thisSigBytes = this.sigBytes; + var thatSigBytes = wordArray.sigBytes; + + // Clamp excess bits + this.clamp(); + + // Concat + if (thisSigBytes % 4) { + // Copy one byte at a time + for (var i = 0; i < thatSigBytes; i++) { + var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); + } + } else { + // Copy one word at a time + for (var i = 0; i < thatSigBytes; i += 4) { + thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; + } + } + this.sigBytes += thatSigBytes; + + // Chainable + return this; + }, + + /** + * Removes insignificant bits. + * + * @example + * + * wordArray.clamp(); + */ + clamp: function () { + // Shortcuts + var words = this.words; + var sigBytes = this.sigBytes; + + // Clamp + words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); + words.length = Math.ceil(sigBytes / 4); + }, + + /** + * Creates a copy of this word array. + * + * @return {WordArray} The clone. + * + * @example + * + * var clone = wordArray.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone.words = this.words.slice(0); + + return clone; + }, + + /** + * Creates a word array filled with random bytes. + * + * @param {number} nBytes The number of random bytes to generate. + * + * @return {WordArray} The random word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.random(16); + */ + random: function (nBytes) { + var words = []; + + var r = (function (m_w) { + var m_w = m_w; + var m_z = 0x3ade68b1; + var mask = 0xffffffff; + + return function () { + m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; + m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; + var result = ((m_z << 0x10) + m_w) & mask; + result /= 0x100000000; + result += 0.5; + return result * (Math.random() > .5 ? 1 : -1); + } + }); + + for (var i = 0, rcache; i < nBytes; i += 4) { + var _r = r((rcache || Math.random()) * 0x100000000); + + rcache = _r() * 0x3ade67b7; + words.push((_r() * 0x100000000) | 0); + } + + return new WordArray.init(words, nBytes); + } + }); + + /** + * Encoder namespace. + */ + var C_enc = C.enc = {}; + + /** + * Hex encoding strategy. + */ + var Hex = C_enc.Hex = { + /** + * Converts a word array to a hex string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The hex string. + * + * @static + * + * @example + * + * var hexString = CryptoJS.enc.Hex.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var hexChars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + hexChars.push((bite >>> 4).toString(16)); + hexChars.push((bite & 0x0f).toString(16)); + } + + return hexChars.join(''); + }, + + /** + * Converts a hex string to a word array. + * + * @param {string} hexStr The hex string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Hex.parse(hexString); + */ + parse: function (hexStr) { + // Shortcut + var hexStrLength = hexStr.length; + + // Convert + var words = []; + for (var i = 0; i < hexStrLength; i += 2) { + words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); + } + + return new WordArray.init(words, hexStrLength / 2); + } + }; + + /** + * Latin1 encoding strategy. + */ + var Latin1 = C_enc.Latin1 = { + /** + * Converts a word array to a Latin1 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Latin1 string. + * + * @static + * + * @example + * + * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var latin1Chars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + latin1Chars.push(String.fromCharCode(bite)); + } + + return latin1Chars.join(''); + }, + + /** + * Converts a Latin1 string to a word array. + * + * @param {string} latin1Str The Latin1 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); + */ + parse: function (latin1Str) { + // Shortcut + var latin1StrLength = latin1Str.length; + + // Convert + var words = []; + for (var i = 0; i < latin1StrLength; i++) { + words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); + } + + return new WordArray.init(words, latin1StrLength); + } + }; + + /** + * UTF-8 encoding strategy. + */ + var Utf8 = C_enc.Utf8 = { + /** + * Converts a word array to a UTF-8 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-8 string. + * + * @static + * + * @example + * + * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); + */ + stringify: function (wordArray) { + try { + return decodeURIComponent(escape(Latin1.stringify(wordArray))); + } catch (e) { + throw new Error('Malformed UTF-8 data'); + } + }, + + /** + * Converts a UTF-8 string to a word array. + * + * @param {string} utf8Str The UTF-8 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); + */ + parse: function (utf8Str) { + return Latin1.parse(unescape(encodeURIComponent(utf8Str))); + } + }; + + /** + * Abstract buffered block algorithm template. + * + * The property blockSize must be implemented in a concrete subtype. + * + * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 + */ + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ + /** + * Resets this block algorithm's data buffer to its initial state. + * + * @example + * + * bufferedBlockAlgorithm.reset(); + */ + reset: function () { + // Initial values + this._data = new WordArray.init(); + this._nDataBytes = 0; + }, + + /** + * Adds new data to this block algorithm's buffer. + * + * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. + * + * @example + * + * bufferedBlockAlgorithm._append('data'); + * bufferedBlockAlgorithm._append(wordArray); + */ + _append: function (data) { + // Convert string to WordArray, else assume WordArray already + if (typeof data == 'string') { + data = Utf8.parse(data); + } + + // Append + this._data.concat(data); + this._nDataBytes += data.sigBytes; + }, + + /** + * Processes available data blocks. + * + * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. + * + * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. + * + * @return {WordArray} The processed data. + * + * @example + * + * var processedData = bufferedBlockAlgorithm._process(); + * var processedData = bufferedBlockAlgorithm._process(!!'flush'); + */ + _process: function (doFlush) { + // Shortcuts + var data = this._data; + var dataWords = data.words; + var dataSigBytes = data.sigBytes; + var blockSize = this.blockSize; + var blockSizeBytes = blockSize * 4; + + // Count blocks ready + var nBlocksReady = dataSigBytes / blockSizeBytes; + if (doFlush) { + // Round up to include partial blocks + nBlocksReady = Math.ceil(nBlocksReady); + } else { + // Round down to include only full blocks, + // less the number of blocks that must remain in the buffer + nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); + } + + // Count words ready + var nWordsReady = nBlocksReady * blockSize; + + // Count bytes ready + var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); + + // Process blocks + if (nWordsReady) { + for (var offset = 0; offset < nWordsReady; offset += blockSize) { + // Perform concrete-algorithm logic + this._doProcessBlock(dataWords, offset); + } + + // Remove processed words + var processedWords = dataWords.splice(0, nWordsReady); + data.sigBytes -= nBytesReady; + } + + // Return processed words + return new WordArray.init(processedWords, nBytesReady); + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = bufferedBlockAlgorithm.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone._data = this._data.clone(); + + return clone; + }, + + _minBufferSize: 0 + }); + + /** + * Abstract hasher template. + * + * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) + */ + var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + */ + cfg: Base.extend(), + + /** + * Initializes a newly created hasher. + * + * @param {Object} cfg (Optional) The configuration options to use for this hash computation. + * + * @example + * + * var hasher = CryptoJS.algo.SHA256.create(); + */ + init: function (cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Set initial values + this.reset(); + }, + + /** + * Resets this hasher to its initial state. + * + * @example + * + * hasher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-hasher logic + this._doReset(); + }, + + /** + * Updates this hasher with a message. + * + * @param {WordArray|string} messageUpdate The message to append. + * + * @return {Hasher} This hasher. + * + * @example + * + * hasher.update('message'); + * hasher.update(wordArray); + */ + update: function (messageUpdate) { + // Append + this._append(messageUpdate); + + // Update the hash + this._process(); + + // Chainable + return this; + }, + + /** + * Finalizes the hash computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The hash. + * + * @example + * + * var hash = hasher.finalize(); + * var hash = hasher.finalize('message'); + * var hash = hasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Final message update + if (messageUpdate) { + this._append(messageUpdate); + } + + // Perform concrete-hasher logic + var hash = this._doFinalize(); + + return hash; + }, + + blockSize: 512/32, + + /** + * Creates a shortcut function to a hasher's object interface. + * + * @param {Hasher} hasher The hasher to create a helper for. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); + */ + _createHelper: function (hasher) { + return function (message, cfg) { + return new hasher.init(cfg).finalize(message); + }; + }, + + /** + * Creates a shortcut function to the HMAC's object interface. + * + * @param {Hasher} hasher The hasher to use in this HMAC helper. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); + */ + _createHmacHelper: function (hasher) { + return function (message, key) { + return new C_algo.HMAC.init(hasher, key).finalize(message); + }; + } + }); + + /** + * Algorithm namespace. + */ + var C_algo = C.algo = {}; + + return C; + }(Math)); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_enc = C.enc; + + /** + * Base64 encoding strategy. + */ + var Base64 = C_enc.Base64 = { + /** + * Converts a word array to a Base64 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Base64 string. + * + * @static + * + * @example + * + * var base64String = CryptoJS.enc.Base64.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + var map = this._map; + + // Clamp excess bits + wordArray.clamp(); + + // Convert + var base64Chars = []; + for (var i = 0; i < sigBytes; i += 3) { + var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; + var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; + + var triplet = (byte1 << 16) | (byte2 << 8) | byte3; + + for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { + base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); + } + } + + // Add padding + var paddingChar = map.charAt(64); + if (paddingChar) { + while (base64Chars.length % 4) { + base64Chars.push(paddingChar); + } + } + + return base64Chars.join(''); + }, + + /** + * Converts a Base64 string to a word array. + * + * @param {string} base64Str The Base64 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Base64.parse(base64String); + */ + parse: function (base64Str) { + // Shortcuts + var base64StrLength = base64Str.length; + var map = this._map; + var reverseMap = this._reverseMap; + + if (!reverseMap) { + reverseMap = this._reverseMap = []; + for (var j = 0; j < map.length; j++) { + reverseMap[map.charCodeAt(j)] = j; + } + } + + // Ignore padding + var paddingChar = map.charAt(64); + if (paddingChar) { + var paddingIndex = base64Str.indexOf(paddingChar); + if (paddingIndex !== -1) { + base64StrLength = paddingIndex; + } + } + + // Convert + return parseLoop(base64Str, base64StrLength, reverseMap); + + }, + + _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' + }; + + function parseLoop(base64Str, base64StrLength, reverseMap) { + var words = []; + var nBytes = 0; + for (var i = 0; i < base64StrLength; i++) { + if (i % 4) { + var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); + var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); + words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); + nBytes++; + } + } + return WordArray.create(words, nBytes); + } + }()); + + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Constants table + var T = []; + + // Compute constants + (function () { + for (var i = 0; i < 64; i++) { + T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; + } + }()); + + /** + * MD5 hash algorithm. + */ + var MD5 = C_algo.MD5 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0x67452301, 0xefcdab89, + 0x98badcfe, 0x10325476 + ]); + }, + + _doProcessBlock: function (M, offset) { + // Swap endian + for (var i = 0; i < 16; i++) { + // Shortcuts + var offset_i = offset + i; + var M_offset_i = M[offset_i]; + + M[offset_i] = ( + (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | + (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) + ); + } + + // Shortcuts + var H = this._hash.words; + + var M_offset_0 = M[offset + 0]; + var M_offset_1 = M[offset + 1]; + var M_offset_2 = M[offset + 2]; + var M_offset_3 = M[offset + 3]; + var M_offset_4 = M[offset + 4]; + var M_offset_5 = M[offset + 5]; + var M_offset_6 = M[offset + 6]; + var M_offset_7 = M[offset + 7]; + var M_offset_8 = M[offset + 8]; + var M_offset_9 = M[offset + 9]; + var M_offset_10 = M[offset + 10]; + var M_offset_11 = M[offset + 11]; + var M_offset_12 = M[offset + 12]; + var M_offset_13 = M[offset + 13]; + var M_offset_14 = M[offset + 14]; + var M_offset_15 = M[offset + 15]; + + // Working varialbes + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + + // Computation + a = FF(a, b, c, d, M_offset_0, 7, T[0]); + d = FF(d, a, b, c, M_offset_1, 12, T[1]); + c = FF(c, d, a, b, M_offset_2, 17, T[2]); + b = FF(b, c, d, a, M_offset_3, 22, T[3]); + a = FF(a, b, c, d, M_offset_4, 7, T[4]); + d = FF(d, a, b, c, M_offset_5, 12, T[5]); + c = FF(c, d, a, b, M_offset_6, 17, T[6]); + b = FF(b, c, d, a, M_offset_7, 22, T[7]); + a = FF(a, b, c, d, M_offset_8, 7, T[8]); + d = FF(d, a, b, c, M_offset_9, 12, T[9]); + c = FF(c, d, a, b, M_offset_10, 17, T[10]); + b = FF(b, c, d, a, M_offset_11, 22, T[11]); + a = FF(a, b, c, d, M_offset_12, 7, T[12]); + d = FF(d, a, b, c, M_offset_13, 12, T[13]); + c = FF(c, d, a, b, M_offset_14, 17, T[14]); + b = FF(b, c, d, a, M_offset_15, 22, T[15]); + + a = GG(a, b, c, d, M_offset_1, 5, T[16]); + d = GG(d, a, b, c, M_offset_6, 9, T[17]); + c = GG(c, d, a, b, M_offset_11, 14, T[18]); + b = GG(b, c, d, a, M_offset_0, 20, T[19]); + a = GG(a, b, c, d, M_offset_5, 5, T[20]); + d = GG(d, a, b, c, M_offset_10, 9, T[21]); + c = GG(c, d, a, b, M_offset_15, 14, T[22]); + b = GG(b, c, d, a, M_offset_4, 20, T[23]); + a = GG(a, b, c, d, M_offset_9, 5, T[24]); + d = GG(d, a, b, c, M_offset_14, 9, T[25]); + c = GG(c, d, a, b, M_offset_3, 14, T[26]); + b = GG(b, c, d, a, M_offset_8, 20, T[27]); + a = GG(a, b, c, d, M_offset_13, 5, T[28]); + d = GG(d, a, b, c, M_offset_2, 9, T[29]); + c = GG(c, d, a, b, M_offset_7, 14, T[30]); + b = GG(b, c, d, a, M_offset_12, 20, T[31]); + + a = HH(a, b, c, d, M_offset_5, 4, T[32]); + d = HH(d, a, b, c, M_offset_8, 11, T[33]); + c = HH(c, d, a, b, M_offset_11, 16, T[34]); + b = HH(b, c, d, a, M_offset_14, 23, T[35]); + a = HH(a, b, c, d, M_offset_1, 4, T[36]); + d = HH(d, a, b, c, M_offset_4, 11, T[37]); + c = HH(c, d, a, b, M_offset_7, 16, T[38]); + b = HH(b, c, d, a, M_offset_10, 23, T[39]); + a = HH(a, b, c, d, M_offset_13, 4, T[40]); + d = HH(d, a, b, c, M_offset_0, 11, T[41]); + c = HH(c, d, a, b, M_offset_3, 16, T[42]); + b = HH(b, c, d, a, M_offset_6, 23, T[43]); + a = HH(a, b, c, d, M_offset_9, 4, T[44]); + d = HH(d, a, b, c, M_offset_12, 11, T[45]); + c = HH(c, d, a, b, M_offset_15, 16, T[46]); + b = HH(b, c, d, a, M_offset_2, 23, T[47]); + + a = II(a, b, c, d, M_offset_0, 6, T[48]); + d = II(d, a, b, c, M_offset_7, 10, T[49]); + c = II(c, d, a, b, M_offset_14, 15, T[50]); + b = II(b, c, d, a, M_offset_5, 21, T[51]); + a = II(a, b, c, d, M_offset_12, 6, T[52]); + d = II(d, a, b, c, M_offset_3, 10, T[53]); + c = II(c, d, a, b, M_offset_10, 15, T[54]); + b = II(b, c, d, a, M_offset_1, 21, T[55]); + a = II(a, b, c, d, M_offset_8, 6, T[56]); + d = II(d, a, b, c, M_offset_15, 10, T[57]); + c = II(c, d, a, b, M_offset_6, 15, T[58]); + b = II(b, c, d, a, M_offset_13, 21, T[59]); + a = II(a, b, c, d, M_offset_4, 6, T[60]); + d = II(d, a, b, c, M_offset_11, 10, T[61]); + c = II(c, d, a, b, M_offset_2, 15, T[62]); + b = II(b, c, d, a, M_offset_9, 21, T[63]); + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + + var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); + var nBitsTotalL = nBitsTotal; + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( + (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | + (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) + ); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( + (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | + (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) + ); + + data.sigBytes = (dataWords.length + 1) * 4; + + // Hash final blocks + this._process(); + + // Shortcuts + var hash = this._hash; + var H = hash.words; + + // Swap endian + for (var i = 0; i < 4; i++) { + // Shortcut + var H_i = H[i]; + + H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | + (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); + } + + // Return final computed hash + return hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + function FF(a, b, c, d, x, s, t) { + var n = a + ((b & c) | (~b & d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function GG(a, b, c, d, x, s, t) { + var n = a + ((b & d) | (c & ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function HH(a, b, c, d, x, s, t) { + var n = a + (b ^ c ^ d) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function II(a, b, c, d, x, s, t) { + var n = a + (c ^ (b | ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.MD5('message'); + * var hash = CryptoJS.MD5(wordArray); + */ + C.MD5 = Hasher._createHelper(MD5); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacMD5(message, key); + */ + C.HmacMD5 = Hasher._createHmacHelper(MD5); + }(Math)); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Reusable object + var W = []; + + /** + * SHA-1 hash algorithm. + */ + var SHA1 = C_algo.SHA1 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0x67452301, 0xefcdab89, + 0x98badcfe, 0x10325476, + 0xc3d2e1f0 + ]); + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var H = this._hash.words; + + // Working variables + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + var e = H[4]; + + // Computation + for (var i = 0; i < 80; i++) { + if (i < 16) { + W[i] = M[offset + i] | 0; + } else { + var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; + W[i] = (n << 1) | (n >>> 31); + } + + var t = ((a << 5) | (a >>> 27)) + e + W[i]; + if (i < 20) { + t += ((b & c) | (~b & d)) + 0x5a827999; + } else if (i < 40) { + t += (b ^ c ^ d) + 0x6ed9eba1; + } else if (i < 60) { + t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; + } else /* if (i < 80) */ { + t += (b ^ c ^ d) - 0x359d3e2a; + } + + e = d; + d = c; + c = (b << 30) | (b >>> 2); + b = a; + a = t; + } + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + H[4] = (H[4] + e) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Return final computed hash + return this._hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA1('message'); + * var hash = CryptoJS.SHA1(wordArray); + */ + C.SHA1 = Hasher._createHelper(SHA1); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA1(message, key); + */ + C.HmacSHA1 = Hasher._createHmacHelper(SHA1); + }()); + + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Initialization and round constants tables + var H = []; + var K = []; + + // Compute constants + (function () { + function isPrime(n) { + var sqrtN = Math.sqrt(n); + for (var factor = 2; factor <= sqrtN; factor++) { + if (!(n % factor)) { + return false; + } + } + + return true; + } + + function getFractionalBits(n) { + return ((n - (n | 0)) * 0x100000000) | 0; + } + + var n = 2; + var nPrime = 0; + while (nPrime < 64) { + if (isPrime(n)) { + if (nPrime < 8) { + H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); + } + K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); + + nPrime++; + } + + n++; + } + }()); + + // Reusable object + var W = []; + + /** + * SHA-256 hash algorithm. + */ + var SHA256 = C_algo.SHA256 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init(H.slice(0)); + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var H = this._hash.words; + + // Working variables + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + var e = H[4]; + var f = H[5]; + var g = H[6]; + var h = H[7]; + + // Computation + for (var i = 0; i < 64; i++) { + if (i < 16) { + W[i] = M[offset + i] | 0; + } else { + var gamma0x = W[i - 15]; + var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ + ((gamma0x << 14) | (gamma0x >>> 18)) ^ + (gamma0x >>> 3); + + var gamma1x = W[i - 2]; + var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ + ((gamma1x << 13) | (gamma1x >>> 19)) ^ + (gamma1x >>> 10); + + W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; + } + + var ch = (e & f) ^ (~e & g); + var maj = (a & b) ^ (a & c) ^ (b & c); + + var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); + var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); + + var t1 = h + sigma1 + ch + K[i] + W[i]; + var t2 = sigma0 + maj; + + h = g; + g = f; + f = e; + e = (d + t1) | 0; + d = c; + c = b; + b = a; + a = (t1 + t2) | 0; + } + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + H[4] = (H[4] + e) | 0; + H[5] = (H[5] + f) | 0; + H[6] = (H[6] + g) | 0; + H[7] = (H[7] + h) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Return final computed hash + return this._hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA256('message'); + * var hash = CryptoJS.SHA256(wordArray); + */ + C.SHA256 = Hasher._createHelper(SHA256); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA256(message, key); + */ + C.HmacSHA256 = Hasher._createHmacHelper(SHA256); + }(Math)); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_enc = C.enc; + + /** + * UTF-16 BE encoding strategy. + */ + var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { + /** + * Converts a word array to a UTF-16 BE string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-16 BE string. + * + * @static + * + * @example + * + * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var utf16Chars = []; + for (var i = 0; i < sigBytes; i += 2) { + var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; + utf16Chars.push(String.fromCharCode(codePoint)); + } + + return utf16Chars.join(''); + }, + + /** + * Converts a UTF-16 BE string to a word array. + * + * @param {string} utf16Str The UTF-16 BE string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); + */ + parse: function (utf16Str) { + // Shortcut + var utf16StrLength = utf16Str.length; + + // Convert + var words = []; + for (var i = 0; i < utf16StrLength; i++) { + words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); + } + + return WordArray.create(words, utf16StrLength * 2); + } + }; + + /** + * UTF-16 LE encoding strategy. + */ + C_enc.Utf16LE = { + /** + * Converts a word array to a UTF-16 LE string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-16 LE string. + * + * @static + * + * @example + * + * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var utf16Chars = []; + for (var i = 0; i < sigBytes; i += 2) { + var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); + utf16Chars.push(String.fromCharCode(codePoint)); + } + + return utf16Chars.join(''); + }, + + /** + * Converts a UTF-16 LE string to a word array. + * + * @param {string} utf16Str The UTF-16 LE string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); + */ + parse: function (utf16Str) { + // Shortcut + var utf16StrLength = utf16Str.length; + + // Convert + var words = []; + for (var i = 0; i < utf16StrLength; i++) { + words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); + } + + return WordArray.create(words, utf16StrLength * 2); + } + }; + + function swapEndian(word) { + return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); + } + }()); + + + (function () { + // Check if typed arrays are supported + if (typeof ArrayBuffer != 'function') { + return; + } + + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + + // Reference original init + var superInit = WordArray.init; + + // Augment WordArray.init to handle typed arrays + var subInit = WordArray.init = function (typedArray) { + // Convert buffers to uint8 + if (typedArray instanceof ArrayBuffer) { + typedArray = new Uint8Array(typedArray); + } + + // Convert other array views to uint8 + if ( + typedArray instanceof Int8Array || + (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || + typedArray instanceof Int16Array || + typedArray instanceof Uint16Array || + typedArray instanceof Int32Array || + typedArray instanceof Uint32Array || + typedArray instanceof Float32Array || + typedArray instanceof Float64Array + ) { + typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); + } + + // Handle Uint8Array + if (typedArray instanceof Uint8Array) { + // Shortcut + var typedArrayByteLength = typedArray.byteLength; + + // Extract bytes + var words = []; + for (var i = 0; i < typedArrayByteLength; i++) { + words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); + } + + // Initialize this word array + superInit.call(this, words, typedArrayByteLength); + } else { + // Else call normal init + superInit.apply(this, arguments); + } + }; + + subInit.prototype = WordArray; + }()); + + + /** @preserve + (c) 2012 by Cédric Mesnil. All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Constants table + var _zl = WordArray.create([ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, + 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, + 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, + 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); + var _zr = WordArray.create([ + 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, + 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, + 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, + 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, + 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); + var _sl = WordArray.create([ + 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, + 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, + 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, + 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, + 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); + var _sr = WordArray.create([ + 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, + 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, + 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, + 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, + 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); + + var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); + var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); + + /** + * RIPEMD160 hash algorithm. + */ + var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ + _doReset: function () { + this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); + }, + + _doProcessBlock: function (M, offset) { + + // Swap endian + for (var i = 0; i < 16; i++) { + // Shortcuts + var offset_i = offset + i; + var M_offset_i = M[offset_i]; + + // Swap + M[offset_i] = ( + (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | + (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) + ); + } + // Shortcut + var H = this._hash.words; + var hl = _hl.words; + var hr = _hr.words; + var zl = _zl.words; + var zr = _zr.words; + var sl = _sl.words; + var sr = _sr.words; + + // Working variables + var al, bl, cl, dl, el; + var ar, br, cr, dr, er; + + ar = al = H[0]; + br = bl = H[1]; + cr = cl = H[2]; + dr = dl = H[3]; + er = el = H[4]; + // Computation + var t; + for (var i = 0; i < 80; i += 1) { + t = (al + M[offset+zl[i]])|0; + if (i<16){ + t += f1(bl,cl,dl) + hl[0]; + } else if (i<32) { + t += f2(bl,cl,dl) + hl[1]; + } else if (i<48) { + t += f3(bl,cl,dl) + hl[2]; + } else if (i<64) { + t += f4(bl,cl,dl) + hl[3]; + } else {// if (i<80) { + t += f5(bl,cl,dl) + hl[4]; + } + t = t|0; + t = rotl(t,sl[i]); + t = (t+el)|0; + al = el; + el = dl; + dl = rotl(cl, 10); + cl = bl; + bl = t; + + t = (ar + M[offset+zr[i]])|0; + if (i<16){ + t += f5(br,cr,dr) + hr[0]; + } else if (i<32) { + t += f4(br,cr,dr) + hr[1]; + } else if (i<48) { + t += f3(br,cr,dr) + hr[2]; + } else if (i<64) { + t += f2(br,cr,dr) + hr[3]; + } else {// if (i<80) { + t += f1(br,cr,dr) + hr[4]; + } + t = t|0; + t = rotl(t,sr[i]) ; + t = (t+er)|0; + ar = er; + er = dr; + dr = rotl(cr, 10); + cr = br; + br = t; + } + // Intermediate hash value + t = (H[1] + cl + dr)|0; + H[1] = (H[2] + dl + er)|0; + H[2] = (H[3] + el + ar)|0; + H[3] = (H[4] + al + br)|0; + H[4] = (H[0] + bl + cr)|0; + H[0] = t; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( + (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | + (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) + ); + data.sigBytes = (dataWords.length + 1) * 4; + + // Hash final blocks + this._process(); + + // Shortcuts + var hash = this._hash; + var H = hash.words; + + // Swap endian + for (var i = 0; i < 5; i++) { + // Shortcut + var H_i = H[i]; + + // Swap + H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | + (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); + } + + // Return final computed hash + return hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + + function f1(x, y, z) { + return ((x) ^ (y) ^ (z)); + + } + + function f2(x, y, z) { + return (((x)&(y)) | ((~x)&(z))); + } + + function f3(x, y, z) { + return (((x) | (~(y))) ^ (z)); + } + + function f4(x, y, z) { + return (((x) & (z)) | ((y)&(~(z)))); + } + + function f5(x, y, z) { + return ((x) ^ ((y) |(~(z)))); + + } + + function rotl(x,n) { + return (x<>>(32-n)); + } + + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.RIPEMD160('message'); + * var hash = CryptoJS.RIPEMD160(wordArray); + */ + C.RIPEMD160 = Hasher._createHelper(RIPEMD160); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacRIPEMD160(message, key); + */ + C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); + }(Math)); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var C_enc = C.enc; + var Utf8 = C_enc.Utf8; + var C_algo = C.algo; + + /** + * HMAC algorithm. + */ + var HMAC = C_algo.HMAC = Base.extend({ + /** + * Initializes a newly created HMAC. + * + * @param {Hasher} hasher The hash algorithm to use. + * @param {WordArray|string} key The secret key. + * + * @example + * + * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); + */ + init: function (hasher, key) { + // Init hasher + hasher = this._hasher = new hasher.init(); + + // Convert string to WordArray, else assume WordArray already + if (typeof key == 'string') { + key = Utf8.parse(key); + } + + // Shortcuts + var hasherBlockSize = hasher.blockSize; + var hasherBlockSizeBytes = hasherBlockSize * 4; + + // Allow arbitrary length keys + if (key.sigBytes > hasherBlockSizeBytes) { + key = hasher.finalize(key); + } + + // Clamp excess bits + key.clamp(); + + // Clone key for inner and outer pads + var oKey = this._oKey = key.clone(); + var iKey = this._iKey = key.clone(); + + // Shortcuts + var oKeyWords = oKey.words; + var iKeyWords = iKey.words; + + // XOR keys with pad constants + for (var i = 0; i < hasherBlockSize; i++) { + oKeyWords[i] ^= 0x5c5c5c5c; + iKeyWords[i] ^= 0x36363636; + } + oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; + + // Set initial values + this.reset(); + }, + + /** + * Resets this HMAC to its initial state. + * + * @example + * + * hmacHasher.reset(); + */ + reset: function () { + // Shortcut + var hasher = this._hasher; + + // Reset + hasher.reset(); + hasher.update(this._iKey); + }, + + /** + * Updates this HMAC with a message. + * + * @param {WordArray|string} messageUpdate The message to append. + * + * @return {HMAC} This HMAC instance. + * + * @example + * + * hmacHasher.update('message'); + * hmacHasher.update(wordArray); + */ + update: function (messageUpdate) { + this._hasher.update(messageUpdate); + + // Chainable + return this; + }, + + /** + * Finalizes the HMAC computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The HMAC. + * + * @example + * + * var hmac = hmacHasher.finalize(); + * var hmac = hmacHasher.finalize('message'); + * var hmac = hmacHasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Shortcut + var hasher = this._hasher; + + // Compute HMAC + var innerHash = hasher.finalize(messageUpdate); + hasher.reset(); + var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); + + return hmac; + } + }); + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var C_algo = C.algo; + var SHA1 = C_algo.SHA1; + var HMAC = C_algo.HMAC; + + /** + * Password-Based Key Derivation Function 2 algorithm. + */ + var PBKDF2 = C_algo.PBKDF2 = Base.extend({ + /** + * Configuration options. + * + * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) + * @property {Hasher} hasher The hasher to use. Default: SHA1 + * @property {number} iterations The number of iterations to perform. Default: 1 + */ + cfg: Base.extend({ + keySize: 128/32, + hasher: SHA1, + iterations: 1 + }), + + /** + * Initializes a newly created key derivation function. + * + * @param {Object} cfg (Optional) The configuration options to use for the derivation. + * + * @example + * + * var kdf = CryptoJS.algo.PBKDF2.create(); + * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); + * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); + */ + init: function (cfg) { + this.cfg = this.cfg.extend(cfg); + }, + + /** + * Computes the Password-Based Key Derivation Function 2. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * + * @return {WordArray} The derived key. + * + * @example + * + * var key = kdf.compute(password, salt); + */ + compute: function (password, salt) { + // Shortcut + var cfg = this.cfg; + + // Init HMAC + var hmac = HMAC.create(cfg.hasher, password); + + // Initial values + var derivedKey = WordArray.create(); + var blockIndex = WordArray.create([0x00000001]); + + // Shortcuts + var derivedKeyWords = derivedKey.words; + var blockIndexWords = blockIndex.words; + var keySize = cfg.keySize; + var iterations = cfg.iterations; + + // Generate key + while (derivedKeyWords.length < keySize) { + var block = hmac.update(salt).finalize(blockIndex); + hmac.reset(); + + // Shortcuts + var blockWords = block.words; + var blockWordsLength = blockWords.length; + + // Iterations + var intermediate = block; + for (var i = 1; i < iterations; i++) { + intermediate = hmac.finalize(intermediate); + hmac.reset(); + + // Shortcut + var intermediateWords = intermediate.words; + + // XOR intermediate with block + for (var j = 0; j < blockWordsLength; j++) { + blockWords[j] ^= intermediateWords[j]; + } + } + + derivedKey.concat(block); + blockIndexWords[0]++; + } + derivedKey.sigBytes = keySize * 4; + + return derivedKey; + } + }); + + /** + * Computes the Password-Based Key Derivation Function 2. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * @param {Object} cfg (Optional) The configuration options to use for this computation. + * + * @return {WordArray} The derived key. + * + * @static + * + * @example + * + * var key = CryptoJS.PBKDF2(password, salt); + * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); + * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); + */ + C.PBKDF2 = function (password, salt, cfg) { + return PBKDF2.create(cfg).compute(password, salt); + }; + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var C_algo = C.algo; + var MD5 = C_algo.MD5; + + /** + * This key derivation function is meant to conform with EVP_BytesToKey. + * www.openssl.org/docs/crypto/EVP_BytesToKey.html + */ + var EvpKDF = C_algo.EvpKDF = Base.extend({ + /** + * Configuration options. + * + * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) + * @property {Hasher} hasher The hash algorithm to use. Default: MD5 + * @property {number} iterations The number of iterations to perform. Default: 1 + */ + cfg: Base.extend({ + keySize: 128/32, + hasher: MD5, + iterations: 1 + }), + + /** + * Initializes a newly created key derivation function. + * + * @param {Object} cfg (Optional) The configuration options to use for the derivation. + * + * @example + * + * var kdf = CryptoJS.algo.EvpKDF.create(); + * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); + * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); + */ + init: function (cfg) { + this.cfg = this.cfg.extend(cfg); + }, + + /** + * Derives a key from a password. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * + * @return {WordArray} The derived key. + * + * @example + * + * var key = kdf.compute(password, salt); + */ + compute: function (password, salt) { + // Shortcut + var cfg = this.cfg; + + // Init hasher + var hasher = cfg.hasher.create(); + + // Initial values + var derivedKey = WordArray.create(); + + // Shortcuts + var derivedKeyWords = derivedKey.words; + var keySize = cfg.keySize; + var iterations = cfg.iterations; + + // Generate key + while (derivedKeyWords.length < keySize) { + if (block) { + hasher.update(block); + } + var block = hasher.update(password).finalize(salt); + hasher.reset(); + + // Iterations + for (var i = 1; i < iterations; i++) { + block = hasher.finalize(block); + hasher.reset(); + } + + derivedKey.concat(block); + } + derivedKey.sigBytes = keySize * 4; + + return derivedKey; + } + }); + + /** + * Derives a key from a password. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * @param {Object} cfg (Optional) The configuration options to use for this computation. + * + * @return {WordArray} The derived key. + * + * @static + * + * @example + * + * var key = CryptoJS.EvpKDF(password, salt); + * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); + * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); + */ + C.EvpKDF = function (password, salt, cfg) { + return EvpKDF.create(cfg).compute(password, salt); + }; + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_algo = C.algo; + var SHA256 = C_algo.SHA256; + + /** + * SHA-224 hash algorithm. + */ + var SHA224 = C_algo.SHA224 = SHA256.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, + 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 + ]); + }, + + _doFinalize: function () { + var hash = SHA256._doFinalize.call(this); + + hash.sigBytes -= 4; + + return hash; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA224('message'); + * var hash = CryptoJS.SHA224(wordArray); + */ + C.SHA224 = SHA256._createHelper(SHA224); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA224(message, key); + */ + C.HmacSHA224 = SHA256._createHmacHelper(SHA224); + }()); + + + (function (undefined) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var X32WordArray = C_lib.WordArray; + + /** + * x64 namespace. + */ + var C_x64 = C.x64 = {}; + + /** + * A 64-bit word. + */ + var X64Word = C_x64.Word = Base.extend({ + /** + * Initializes a newly created 64-bit word. + * + * @param {number} high The high 32 bits. + * @param {number} low The low 32 bits. + * + * @example + * + * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); + */ + init: function (high, low) { + this.high = high; + this.low = low; + } + + /** + * Bitwise NOTs this word. + * + * @return {X64Word} A new x64-Word object after negating. + * + * @example + * + * var negated = x64Word.not(); + */ + // not: function () { + // var high = ~this.high; + // var low = ~this.low; + + // return X64Word.create(high, low); + // }, + + /** + * Bitwise ANDs this word with the passed word. + * + * @param {X64Word} word The x64-Word to AND with this word. + * + * @return {X64Word} A new x64-Word object after ANDing. + * + * @example + * + * var anded = x64Word.and(anotherX64Word); + */ + // and: function (word) { + // var high = this.high & word.high; + // var low = this.low & word.low; + + // return X64Word.create(high, low); + // }, + + /** + * Bitwise ORs this word with the passed word. + * + * @param {X64Word} word The x64-Word to OR with this word. + * + * @return {X64Word} A new x64-Word object after ORing. + * + * @example + * + * var ored = x64Word.or(anotherX64Word); + */ + // or: function (word) { + // var high = this.high | word.high; + // var low = this.low | word.low; + + // return X64Word.create(high, low); + // }, + + /** + * Bitwise XORs this word with the passed word. + * + * @param {X64Word} word The x64-Word to XOR with this word. + * + * @return {X64Word} A new x64-Word object after XORing. + * + * @example + * + * var xored = x64Word.xor(anotherX64Word); + */ + // xor: function (word) { + // var high = this.high ^ word.high; + // var low = this.low ^ word.low; + + // return X64Word.create(high, low); + // }, + + /** + * Shifts this word n bits to the left. + * + * @param {number} n The number of bits to shift. + * + * @return {X64Word} A new x64-Word object after shifting. + * + * @example + * + * var shifted = x64Word.shiftL(25); + */ + // shiftL: function (n) { + // if (n < 32) { + // var high = (this.high << n) | (this.low >>> (32 - n)); + // var low = this.low << n; + // } else { + // var high = this.low << (n - 32); + // var low = 0; + // } + + // return X64Word.create(high, low); + // }, + + /** + * Shifts this word n bits to the right. + * + * @param {number} n The number of bits to shift. + * + * @return {X64Word} A new x64-Word object after shifting. + * + * @example + * + * var shifted = x64Word.shiftR(7); + */ + // shiftR: function (n) { + // if (n < 32) { + // var low = (this.low >>> n) | (this.high << (32 - n)); + // var high = this.high >>> n; + // } else { + // var low = this.high >>> (n - 32); + // var high = 0; + // } + + // return X64Word.create(high, low); + // }, + + /** + * Rotates this word n bits to the left. + * + * @param {number} n The number of bits to rotate. + * + * @return {X64Word} A new x64-Word object after rotating. + * + * @example + * + * var rotated = x64Word.rotL(25); + */ + // rotL: function (n) { + // return this.shiftL(n).or(this.shiftR(64 - n)); + // }, + + /** + * Rotates this word n bits to the right. + * + * @param {number} n The number of bits to rotate. + * + * @return {X64Word} A new x64-Word object after rotating. + * + * @example + * + * var rotated = x64Word.rotR(7); + */ + // rotR: function (n) { + // return this.shiftR(n).or(this.shiftL(64 - n)); + // }, + + /** + * Adds this word with the passed word. + * + * @param {X64Word} word The x64-Word to add with this word. + * + * @return {X64Word} A new x64-Word object after adding. + * + * @example + * + * var added = x64Word.add(anotherX64Word); + */ + // add: function (word) { + // var low = (this.low + word.low) | 0; + // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; + // var high = (this.high + word.high + carry) | 0; + + // return X64Word.create(high, low); + // } + }); + + /** + * An array of 64-bit words. + * + * @property {Array} words The array of CryptoJS.x64.Word objects. + * @property {number} sigBytes The number of significant bytes in this word array. + */ + var X64WordArray = C_x64.WordArray = Base.extend({ + /** + * Initializes a newly created word array. + * + * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. + * @param {number} sigBytes (Optional) The number of significant bytes in the words. + * + * @example + * + * var wordArray = CryptoJS.x64.WordArray.create(); + * + * var wordArray = CryptoJS.x64.WordArray.create([ + * CryptoJS.x64.Word.create(0x00010203, 0x04050607), + * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) + * ]); + * + * var wordArray = CryptoJS.x64.WordArray.create([ + * CryptoJS.x64.Word.create(0x00010203, 0x04050607), + * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) + * ], 10); + */ + init: function (words, sigBytes) { + words = this.words = words || []; + + if (sigBytes != undefined) { + this.sigBytes = sigBytes; + } else { + this.sigBytes = words.length * 8; + } + }, + + /** + * Converts this 64-bit word array to a 32-bit word array. + * + * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. + * + * @example + * + * var x32WordArray = x64WordArray.toX32(); + */ + toX32: function () { + // Shortcuts + var x64Words = this.words; + var x64WordsLength = x64Words.length; + + // Convert + var x32Words = []; + for (var i = 0; i < x64WordsLength; i++) { + var x64Word = x64Words[i]; + x32Words.push(x64Word.high); + x32Words.push(x64Word.low); + } + + return X32WordArray.create(x32Words, this.sigBytes); + }, + + /** + * Creates a copy of this word array. + * + * @return {X64WordArray} The clone. + * + * @example + * + * var clone = x64WordArray.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + + // Clone "words" array + var words = clone.words = this.words.slice(0); + + // Clone each X64Word object + var wordsLength = words.length; + for (var i = 0; i < wordsLength; i++) { + words[i] = words[i].clone(); + } + + return clone; + } + }); + }()); + + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_x64 = C.x64; + var X64Word = C_x64.Word; + var C_algo = C.algo; + + // Constants tables + var RHO_OFFSETS = []; + var PI_INDEXES = []; + var ROUND_CONSTANTS = []; + + // Compute Constants + (function () { + // Compute rho offset constants + var x = 1, y = 0; + for (var t = 0; t < 24; t++) { + RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; + + var newX = y % 5; + var newY = (2 * x + 3 * y) % 5; + x = newX; + y = newY; + } + + // Compute pi index constants + for (var x = 0; x < 5; x++) { + for (var y = 0; y < 5; y++) { + PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; + } + } + + // Compute round constants + var LFSR = 0x01; + for (var i = 0; i < 24; i++) { + var roundConstantMsw = 0; + var roundConstantLsw = 0; + + for (var j = 0; j < 7; j++) { + if (LFSR & 0x01) { + var bitPosition = (1 << j) - 1; + if (bitPosition < 32) { + roundConstantLsw ^= 1 << bitPosition; + } else /* if (bitPosition >= 32) */ { + roundConstantMsw ^= 1 << (bitPosition - 32); + } + } + + // Compute next LFSR + if (LFSR & 0x80) { + // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 + LFSR = (LFSR << 1) ^ 0x71; + } else { + LFSR <<= 1; + } + } + + ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); + } + }()); + + // Reusable objects for temporary values + var T = []; + (function () { + for (var i = 0; i < 25; i++) { + T[i] = X64Word.create(); + } + }()); + + /** + * SHA-3 hash algorithm. + */ + var SHA3 = C_algo.SHA3 = Hasher.extend({ + /** + * Configuration options. + * + * @property {number} outputLength + * The desired number of bits in the output hash. + * Only values permitted are: 224, 256, 384, 512. + * Default: 512 + */ + cfg: Hasher.cfg.extend({ + outputLength: 512 + }), + + _doReset: function () { + var state = this._state = [] + for (var i = 0; i < 25; i++) { + state[i] = new X64Word.init(); + } + + this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; + }, + + _doProcessBlock: function (M, offset) { + // Shortcuts + var state = this._state; + var nBlockSizeLanes = this.blockSize / 2; + + // Absorb + for (var i = 0; i < nBlockSizeLanes; i++) { + // Shortcuts + var M2i = M[offset + 2 * i]; + var M2i1 = M[offset + 2 * i + 1]; + + // Swap endian + M2i = ( + (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | + (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) + ); + M2i1 = ( + (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | + (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) + ); + + // Absorb message into state + var lane = state[i]; + lane.high ^= M2i1; + lane.low ^= M2i; + } + + // Rounds + for (var round = 0; round < 24; round++) { + // Theta + for (var x = 0; x < 5; x++) { + // Mix column lanes + var tMsw = 0, tLsw = 0; + for (var y = 0; y < 5; y++) { + var lane = state[x + 5 * y]; + tMsw ^= lane.high; + tLsw ^= lane.low; + } + + // Temporary values + var Tx = T[x]; + Tx.high = tMsw; + Tx.low = tLsw; + } + for (var x = 0; x < 5; x++) { + // Shortcuts + var Tx4 = T[(x + 4) % 5]; + var Tx1 = T[(x + 1) % 5]; + var Tx1Msw = Tx1.high; + var Tx1Lsw = Tx1.low; + + // Mix surrounding columns + var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); + var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); + for (var y = 0; y < 5; y++) { + var lane = state[x + 5 * y]; + lane.high ^= tMsw; + lane.low ^= tLsw; + } + } + + // Rho Pi + for (var laneIndex = 1; laneIndex < 25; laneIndex++) { + // Shortcuts + var lane = state[laneIndex]; + var laneMsw = lane.high; + var laneLsw = lane.low; + var rhoOffset = RHO_OFFSETS[laneIndex]; + + // Rotate lanes + if (rhoOffset < 32) { + var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); + var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); + } else /* if (rhoOffset >= 32) */ { + var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); + var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); + } + + // Transpose lanes + var TPiLane = T[PI_INDEXES[laneIndex]]; + TPiLane.high = tMsw; + TPiLane.low = tLsw; + } + + // Rho pi at x = y = 0 + var T0 = T[0]; + var state0 = state[0]; + T0.high = state0.high; + T0.low = state0.low; + + // Chi + for (var x = 0; x < 5; x++) { + for (var y = 0; y < 5; y++) { + // Shortcuts + var laneIndex = x + 5 * y; + var lane = state[laneIndex]; + var TLane = T[laneIndex]; + var Tx1Lane = T[((x + 1) % 5) + 5 * y]; + var Tx2Lane = T[((x + 2) % 5) + 5 * y]; + + // Mix rows + lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); + lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); + } + } + + // Iota + var lane = state[0]; + var roundConstant = ROUND_CONSTANTS[round]; + lane.high ^= roundConstant.high; + lane.low ^= roundConstant.low;; + } + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + var blockSizeBits = this.blockSize * 32; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); + dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Shortcuts + var state = this._state; + var outputLengthBytes = this.cfg.outputLength / 8; + var outputLengthLanes = outputLengthBytes / 8; + + // Squeeze + var hashWords = []; + for (var i = 0; i < outputLengthLanes; i++) { + // Shortcuts + var lane = state[i]; + var laneMsw = lane.high; + var laneLsw = lane.low; + + // Swap endian + laneMsw = ( + (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | + (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) + ); + laneLsw = ( + (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | + (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) + ); + + // Squeeze state to retrieve hash + hashWords.push(laneLsw); + hashWords.push(laneMsw); + } + + // Return final computed hash + return new WordArray.init(hashWords, outputLengthBytes); + }, + + clone: function () { + var clone = Hasher.clone.call(this); + + var state = clone._state = this._state.slice(0); + for (var i = 0; i < 25; i++) { + state[i] = state[i].clone(); + } + + return clone; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA3('message'); + * var hash = CryptoJS.SHA3(wordArray); + */ + C.SHA3 = Hasher._createHelper(SHA3); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA3(message, key); + */ + C.HmacSHA3 = Hasher._createHmacHelper(SHA3); + }(Math)); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Hasher = C_lib.Hasher; + var C_x64 = C.x64; + var X64Word = C_x64.Word; + var X64WordArray = C_x64.WordArray; + var C_algo = C.algo; + + function X64Word_create() { + return X64Word.create.apply(X64Word, arguments); + } + + // Constants + var K = [ + X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), + X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), + X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), + X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), + X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), + X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), + X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), + X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), + X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), + X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), + X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), + X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), + X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), + X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), + X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), + X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), + X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), + X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), + X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), + X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), + X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), + X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), + X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), + X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), + X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), + X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), + X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), + X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), + X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), + X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), + X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), + X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), + X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), + X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), + X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), + X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), + X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), + X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), + X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), + X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) + ]; + + // Reusable objects + var W = []; + (function () { + for (var i = 0; i < 80; i++) { + W[i] = X64Word_create(); + } + }()); + + /** + * SHA-512 hash algorithm. + */ + var SHA512 = C_algo.SHA512 = Hasher.extend({ + _doReset: function () { + this._hash = new X64WordArray.init([ + new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), + new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), + new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), + new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) + ]); + }, + + _doProcessBlock: function (M, offset) { + // Shortcuts + var H = this._hash.words; + + var H0 = H[0]; + var H1 = H[1]; + var H2 = H[2]; + var H3 = H[3]; + var H4 = H[4]; + var H5 = H[5]; + var H6 = H[6]; + var H7 = H[7]; + + var H0h = H0.high; + var H0l = H0.low; + var H1h = H1.high; + var H1l = H1.low; + var H2h = H2.high; + var H2l = H2.low; + var H3h = H3.high; + var H3l = H3.low; + var H4h = H4.high; + var H4l = H4.low; + var H5h = H5.high; + var H5l = H5.low; + var H6h = H6.high; + var H6l = H6.low; + var H7h = H7.high; + var H7l = H7.low; + + // Working variables + var ah = H0h; + var al = H0l; + var bh = H1h; + var bl = H1l; + var ch = H2h; + var cl = H2l; + var dh = H3h; + var dl = H3l; + var eh = H4h; + var el = H4l; + var fh = H5h; + var fl = H5l; + var gh = H6h; + var gl = H6l; + var hh = H7h; + var hl = H7l; + + // Rounds + for (var i = 0; i < 80; i++) { + // Shortcut + var Wi = W[i]; + + // Extend message + if (i < 16) { + var Wih = Wi.high = M[offset + i * 2] | 0; + var Wil = Wi.low = M[offset + i * 2 + 1] | 0; + } else { + // Gamma0 + var gamma0x = W[i - 15]; + var gamma0xh = gamma0x.high; + var gamma0xl = gamma0x.low; + var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); + var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); + + // Gamma1 + var gamma1x = W[i - 2]; + var gamma1xh = gamma1x.high; + var gamma1xl = gamma1x.low; + var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); + var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); + + // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] + var Wi7 = W[i - 7]; + var Wi7h = Wi7.high; + var Wi7l = Wi7.low; + + var Wi16 = W[i - 16]; + var Wi16h = Wi16.high; + var Wi16l = Wi16.low; + + var Wil = gamma0l + Wi7l; + var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); + var Wil = Wil + gamma1l; + var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); + var Wil = Wil + Wi16l; + var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); + + Wi.high = Wih; + Wi.low = Wil; + } + + var chh = (eh & fh) ^ (~eh & gh); + var chl = (el & fl) ^ (~el & gl); + var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); + var majl = (al & bl) ^ (al & cl) ^ (bl & cl); + + var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); + var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); + var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); + var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); + + // t1 = h + sigma1 + ch + K[i] + W[i] + var Ki = K[i]; + var Kih = Ki.high; + var Kil = Ki.low; + + var t1l = hl + sigma1l; + var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); + var t1l = t1l + chl; + var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); + var t1l = t1l + Kil; + var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); + var t1l = t1l + Wil; + var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); + + // t2 = sigma0 + maj + var t2l = sigma0l + majl; + var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); + + // Update working variables + hh = gh; + hl = gl; + gh = fh; + gl = fl; + fh = eh; + fl = el; + el = (dl + t1l) | 0; + eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; + dh = ch; + dl = cl; + ch = bh; + cl = bl; + bh = ah; + bl = al; + al = (t1l + t2l) | 0; + ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; + } + + // Intermediate hash value + H0l = H0.low = (H0l + al); + H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); + H1l = H1.low = (H1l + bl); + H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); + H2l = H2.low = (H2l + cl); + H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); + H3l = H3.low = (H3l + dl); + H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); + H4l = H4.low = (H4l + el); + H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); + H5l = H5.low = (H5l + fl); + H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); + H6l = H6.low = (H6l + gl); + H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); + H7l = H7.low = (H7l + hl); + H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Convert hash to 32-bit word array before returning + var hash = this._hash.toX32(); + + // Return final computed hash + return hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + }, + + blockSize: 1024/32 + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA512('message'); + * var hash = CryptoJS.SHA512(wordArray); + */ + C.SHA512 = Hasher._createHelper(SHA512); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA512(message, key); + */ + C.HmacSHA512 = Hasher._createHmacHelper(SHA512); + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_x64 = C.x64; + var X64Word = C_x64.Word; + var X64WordArray = C_x64.WordArray; + var C_algo = C.algo; + var SHA512 = C_algo.SHA512; + + /** + * SHA-384 hash algorithm. + */ + var SHA384 = C_algo.SHA384 = SHA512.extend({ + _doReset: function () { + this._hash = new X64WordArray.init([ + new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), + new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), + new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), + new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) + ]); + }, + + _doFinalize: function () { + var hash = SHA512._doFinalize.call(this); + + hash.sigBytes -= 16; + + return hash; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA384('message'); + * var hash = CryptoJS.SHA384(wordArray); + */ + C.SHA384 = SHA512._createHelper(SHA384); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA384(message, key); + */ + C.HmacSHA384 = SHA512._createHmacHelper(SHA384); + }()); + + + /** + * Cipher core components. + */ + CryptoJS.lib.Cipher || (function (undefined) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; + var C_enc = C.enc; + var Utf8 = C_enc.Utf8; + var Base64 = C_enc.Base64; + var C_algo = C.algo; + var EvpKDF = C_algo.EvpKDF; + + /** + * Abstract base cipher template. + * + * @property {number} keySize This cipher's key size. Default: 4 (128 bits) + * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) + * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. + * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. + */ + var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + * + * @property {WordArray} iv The IV to use for this operation. + */ + cfg: Base.extend(), + + /** + * Creates this cipher in encryption mode. + * + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {Cipher} A cipher instance. + * + * @static + * + * @example + * + * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); + */ + createEncryptor: function (key, cfg) { + return this.create(this._ENC_XFORM_MODE, key, cfg); + }, + + /** + * Creates this cipher in decryption mode. + * + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {Cipher} A cipher instance. + * + * @static + * + * @example + * + * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); + */ + createDecryptor: function (key, cfg) { + return this.create(this._DEC_XFORM_MODE, key, cfg); + }, + + /** + * Initializes a newly created cipher. + * + * @param {number} xformMode Either the encryption or decryption transormation mode constant. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @example + * + * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); + */ + init: function (xformMode, key, cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Store transform mode and key + this._xformMode = xformMode; + this._key = key; + + // Set initial values + this.reset(); + }, + + /** + * Resets this cipher to its initial state. + * + * @example + * + * cipher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-cipher logic + this._doReset(); + }, + + /** + * Adds data to be encrypted or decrypted. + * + * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. + * + * @return {WordArray} The data after processing. + * + * @example + * + * var encrypted = cipher.process('data'); + * var encrypted = cipher.process(wordArray); + */ + process: function (dataUpdate) { + // Append + this._append(dataUpdate); + + // Process available blocks + return this._process(); + }, + + /** + * Finalizes the encryption or decryption process. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. + * + * @return {WordArray} The data after final processing. + * + * @example + * + * var encrypted = cipher.finalize(); + * var encrypted = cipher.finalize('data'); + * var encrypted = cipher.finalize(wordArray); + */ + finalize: function (dataUpdate) { + // Final data update + if (dataUpdate) { + this._append(dataUpdate); + } + + // Perform concrete-cipher logic + var finalProcessedData = this._doFinalize(); + + return finalProcessedData; + }, + + keySize: 128/32, + + ivSize: 128/32, + + _ENC_XFORM_MODE: 1, + + _DEC_XFORM_MODE: 2, + + /** + * Creates shortcut functions to a cipher's object interface. + * + * @param {Cipher} cipher The cipher to create a helper for. + * + * @return {Object} An object with encrypt and decrypt shortcut functions. + * + * @static + * + * @example + * + * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); + */ + _createHelper: (function () { + function selectCipherStrategy(key) { + if (typeof key == 'string') { + return PasswordBasedCipher; + } else { + return SerializableCipher; + } + } + + return function (cipher) { + return { + encrypt: function (message, key, cfg) { + return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); + }, + + decrypt: function (ciphertext, key, cfg) { + return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); + } + }; + }; + }()) + }); + + /** + * Abstract base stream cipher template. + * + * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) + */ + var StreamCipher = C_lib.StreamCipher = Cipher.extend({ + _doFinalize: function () { + // Process partial blocks + var finalProcessedBlocks = this._process(!!'flush'); + + return finalProcessedBlocks; + }, + + blockSize: 1 + }); + + /** + * Mode namespace. + */ + var C_mode = C.mode = {}; + + /** + * Abstract base block cipher mode template. + */ + var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ + /** + * Creates this mode for encryption. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @static + * + * @example + * + * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); + */ + createEncryptor: function (cipher, iv) { + return this.Encryptor.create(cipher, iv); + }, + + /** + * Creates this mode for decryption. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @static + * + * @example + * + * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); + */ + createDecryptor: function (cipher, iv) { + return this.Decryptor.create(cipher, iv); + }, + + /** + * Initializes a newly created mode. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @example + * + * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); + */ + init: function (cipher, iv) { + this._cipher = cipher; + this._iv = iv; + } + }); + + /** + * Cipher Block Chaining mode. + */ + var CBC = C_mode.CBC = (function () { + /** + * Abstract base CBC mode. + */ + var CBC = BlockCipherMode.extend(); + + /** + * CBC encryptor. + */ + CBC.Encryptor = CBC.extend({ + /** + * Processes the data block at offset. + * + * @param {Array} words The data words to operate on. + * @param {number} offset The offset where the block starts. + * + * @example + * + * mode.processBlock(data.words, offset); + */ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // XOR and encrypt + xorBlock.call(this, words, offset, blockSize); + cipher.encryptBlock(words, offset); + + // Remember this block to use with next block + this._prevBlock = words.slice(offset, offset + blockSize); + } + }); + + /** + * CBC decryptor. + */ + CBC.Decryptor = CBC.extend({ + /** + * Processes the data block at offset. + * + * @param {Array} words The data words to operate on. + * @param {number} offset The offset where the block starts. + * + * @example + * + * mode.processBlock(data.words, offset); + */ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // Remember this block to use with next block + var thisBlock = words.slice(offset, offset + blockSize); + + // Decrypt and XOR + cipher.decryptBlock(words, offset); + xorBlock.call(this, words, offset, blockSize); + + // This block becomes the previous block + this._prevBlock = thisBlock; + } + }); + + function xorBlock(words, offset, blockSize) { + // Shortcut + var iv = this._iv; + + // Choose mixing block + if (iv) { + var block = iv; + + // Remove IV for subsequent blocks + this._iv = undefined; + } else { + var block = this._prevBlock; + } + + // XOR blocks + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= block[i]; + } + } + + return CBC; + }()); + + /** + * Padding namespace. + */ + var C_pad = C.pad = {}; + + /** + * PKCS #5/7 padding strategy. + */ + var Pkcs7 = C_pad.Pkcs7 = { + /** + * Pads data using the algorithm defined in PKCS #5/7. + * + * @param {WordArray} data The data to pad. + * @param {number} blockSize The multiple that the data should be padded to. + * + * @static + * + * @example + * + * CryptoJS.pad.Pkcs7.pad(wordArray, 4); + */ + pad: function (data, blockSize) { + // Shortcut + var blockSizeBytes = blockSize * 4; + + // Count padding bytes + var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; + + // Create padding word + var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; + + // Create padding + var paddingWords = []; + for (var i = 0; i < nPaddingBytes; i += 4) { + paddingWords.push(paddingWord); + } + var padding = WordArray.create(paddingWords, nPaddingBytes); + + // Add padding + data.concat(padding); + }, + + /** + * Unpads data that had been padded using the algorithm defined in PKCS #5/7. + * + * @param {WordArray} data The data to unpad. + * + * @static + * + * @example + * + * CryptoJS.pad.Pkcs7.unpad(wordArray); + */ + unpad: function (data) { + // Get number of padding bytes from last byte + var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; + + // Remove padding + data.sigBytes -= nPaddingBytes; + } + }; + + /** + * Abstract base block cipher template. + * + * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) + */ + var BlockCipher = C_lib.BlockCipher = Cipher.extend({ + /** + * Configuration options. + * + * @property {Mode} mode The block mode to use. Default: CBC + * @property {Padding} padding The padding strategy to use. Default: Pkcs7 + */ + cfg: Cipher.cfg.extend({ + mode: CBC, + padding: Pkcs7 + }), + + reset: function () { + // Reset cipher + Cipher.reset.call(this); + + // Shortcuts + var cfg = this.cfg; + var iv = cfg.iv; + var mode = cfg.mode; + + // Reset block mode + if (this._xformMode == this._ENC_XFORM_MODE) { + var modeCreator = mode.createEncryptor; + } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { + var modeCreator = mode.createDecryptor; + // Keep at least one block in the buffer for unpadding + this._minBufferSize = 1; + } + + if (this._mode && this._mode.__creator == modeCreator) { + this._mode.init(this, iv && iv.words); + } else { + this._mode = modeCreator.call(mode, this, iv && iv.words); + this._mode.__creator = modeCreator; + } + }, + + _doProcessBlock: function (words, offset) { + this._mode.processBlock(words, offset); + }, + + _doFinalize: function () { + // Shortcut + var padding = this.cfg.padding; + + // Finalize + if (this._xformMode == this._ENC_XFORM_MODE) { + // Pad data + padding.pad(this._data, this.blockSize); + + // Process final blocks + var finalProcessedBlocks = this._process(!!'flush'); + } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { + // Process final blocks + var finalProcessedBlocks = this._process(!!'flush'); + + // Unpad data + padding.unpad(finalProcessedBlocks); + } + + return finalProcessedBlocks; + }, + + blockSize: 128/32 + }); + + /** + * A collection of cipher parameters. + * + * @property {WordArray} ciphertext The raw ciphertext. + * @property {WordArray} key The key to this ciphertext. + * @property {WordArray} iv The IV used in the ciphering operation. + * @property {WordArray} salt The salt used with a key derivation function. + * @property {Cipher} algorithm The cipher algorithm. + * @property {Mode} mode The block mode used in the ciphering operation. + * @property {Padding} padding The padding scheme used in the ciphering operation. + * @property {number} blockSize The block size of the cipher. + * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. + */ + var CipherParams = C_lib.CipherParams = Base.extend({ + /** + * Initializes a newly created cipher params object. + * + * @param {Object} cipherParams An object with any of the possible cipher parameters. + * + * @example + * + * var cipherParams = CryptoJS.lib.CipherParams.create({ + * ciphertext: ciphertextWordArray, + * key: keyWordArray, + * iv: ivWordArray, + * salt: saltWordArray, + * algorithm: CryptoJS.algo.AES, + * mode: CryptoJS.mode.CBC, + * padding: CryptoJS.pad.PKCS7, + * blockSize: 4, + * formatter: CryptoJS.format.OpenSSL + * }); + */ + init: function (cipherParams) { + this.mixIn(cipherParams); + }, + + /** + * Converts this cipher params object to a string. + * + * @param {Format} formatter (Optional) The formatting strategy to use. + * + * @return {string} The stringified cipher params. + * + * @throws Error If neither the formatter nor the default formatter is set. + * + * @example + * + * var string = cipherParams + ''; + * var string = cipherParams.toString(); + * var string = cipherParams.toString(CryptoJS.format.OpenSSL); + */ + toString: function (formatter) { + return (formatter || this.formatter).stringify(this); + } + }); + + /** + * Format namespace. + */ + var C_format = C.format = {}; + + /** + * OpenSSL formatting strategy. + */ + var OpenSSLFormatter = C_format.OpenSSL = { + /** + * Converts a cipher params object to an OpenSSL-compatible string. + * + * @param {CipherParams} cipherParams The cipher params object. + * + * @return {string} The OpenSSL-compatible string. + * + * @static + * + * @example + * + * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); + */ + stringify: function (cipherParams) { + // Shortcuts + var ciphertext = cipherParams.ciphertext; + var salt = cipherParams.salt; + + // Format + if (salt) { + var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); + } else { + var wordArray = ciphertext; + } + + return wordArray.toString(Base64); + }, + + /** + * Converts an OpenSSL-compatible string to a cipher params object. + * + * @param {string} openSSLStr The OpenSSL-compatible string. + * + * @return {CipherParams} The cipher params object. + * + * @static + * + * @example + * + * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); + */ + parse: function (openSSLStr) { + // Parse base64 + var ciphertext = Base64.parse(openSSLStr); + + // Shortcut + var ciphertextWords = ciphertext.words; + + // Test for salt + if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { + // Extract salt + var salt = WordArray.create(ciphertextWords.slice(2, 4)); + + // Remove salt from ciphertext + ciphertextWords.splice(0, 4); + ciphertext.sigBytes -= 16; + } + + return CipherParams.create({ ciphertext: ciphertext, salt: salt }); + } + }; + + /** + * A cipher wrapper that returns ciphertext as a serializable cipher params object. + */ + var SerializableCipher = C_lib.SerializableCipher = Base.extend({ + /** + * Configuration options. + * + * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL + */ + cfg: Base.extend({ + format: OpenSSLFormatter + }), + + /** + * Encrypts a message. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {WordArray|string} message The message to encrypt. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {CipherParams} A cipher params object. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + */ + encrypt: function (cipher, message, key, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Encrypt + var encryptor = cipher.createEncryptor(key, cfg); + var ciphertext = encryptor.finalize(message); + + // Shortcut + var cipherCfg = encryptor.cfg; + + // Create and return serializable cipher params + return CipherParams.create({ + ciphertext: ciphertext, + key: key, + iv: cipherCfg.iv, + algorithm: cipher, + mode: cipherCfg.mode, + padding: cipherCfg.padding, + blockSize: cipher.blockSize, + formatter: cfg.format + }); + }, + + /** + * Decrypts serialized ciphertext. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {CipherParams|string} ciphertext The ciphertext to decrypt. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {WordArray} The plaintext. + * + * @static + * + * @example + * + * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + */ + decrypt: function (cipher, ciphertext, key, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Convert string to CipherParams + ciphertext = this._parse(ciphertext, cfg.format); + + // Decrypt + var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); + + return plaintext; + }, + + /** + * Converts serialized ciphertext to CipherParams, + * else assumed CipherParams already and returns ciphertext unchanged. + * + * @param {CipherParams|string} ciphertext The ciphertext. + * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. + * + * @return {CipherParams} The unserialized ciphertext. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); + */ + _parse: function (ciphertext, format) { + if (typeof ciphertext == 'string') { + return format.parse(ciphertext, this); + } else { + return ciphertext; + } + } + }); + + /** + * Key derivation function namespace. + */ + var C_kdf = C.kdf = {}; + + /** + * OpenSSL key derivation function. + */ + var OpenSSLKdf = C_kdf.OpenSSL = { + /** + * Derives a key and IV from a password. + * + * @param {string} password The password to derive from. + * @param {number} keySize The size in words of the key to generate. + * @param {number} ivSize The size in words of the IV to generate. + * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. + * + * @return {CipherParams} A cipher params object with the key, IV, and salt. + * + * @static + * + * @example + * + * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); + * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); + */ + execute: function (password, keySize, ivSize, salt) { + // Generate random salt + if (!salt) { + salt = WordArray.random(64/8); + } + + // Derive key and IV + var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); + + // Separate key and IV + var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); + key.sigBytes = keySize * 4; + + // Return params + return CipherParams.create({ key: key, iv: iv, salt: salt }); + } + }; + + /** + * A serializable cipher wrapper that derives the key from a password, + * and returns ciphertext as a serializable cipher params object. + */ + var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ + /** + * Configuration options. + * + * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL + */ + cfg: SerializableCipher.cfg.extend({ + kdf: OpenSSLKdf + }), + + /** + * Encrypts a message using a password. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {WordArray|string} message The message to encrypt. + * @param {string} password The password. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {CipherParams} A cipher params object. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); + * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); + */ + encrypt: function (cipher, message, password, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Derive key and other params + var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); + + // Add IV to config + cfg.iv = derivedParams.iv; + + // Encrypt + var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); + + // Mix in derived params + ciphertext.mixIn(derivedParams); + + return ciphertext; + }, + + /** + * Decrypts serialized ciphertext using a password. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {CipherParams|string} ciphertext The ciphertext to decrypt. + * @param {string} password The password. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {WordArray} The plaintext. + * + * @static + * + * @example + * + * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); + * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); + */ + decrypt: function (cipher, ciphertext, password, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Convert string to CipherParams + ciphertext = this._parse(ciphertext, cfg.format); + + // Derive key and other params + var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); + + // Add IV to config + cfg.iv = derivedParams.iv; + + // Decrypt + var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); + + return plaintext; + } + }); + }()); + + + /** + * Cipher Feedback block mode. + */ + CryptoJS.mode.CFB = (function () { + var CFB = CryptoJS.lib.BlockCipherMode.extend(); + + CFB.Encryptor = CFB.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); + + // Remember this block to use with next block + this._prevBlock = words.slice(offset, offset + blockSize); + } + }); + + CFB.Decryptor = CFB.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // Remember this block to use with next block + var thisBlock = words.slice(offset, offset + blockSize); + + generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); + + // This block becomes the previous block + this._prevBlock = thisBlock; + } + }); + + function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { + // Shortcut + var iv = this._iv; + + // Generate keystream + if (iv) { + var keystream = iv.slice(0); + + // Remove IV for subsequent blocks + this._iv = undefined; + } else { + var keystream = this._prevBlock; + } + cipher.encryptBlock(keystream, 0); + + // Encrypt + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= keystream[i]; + } + } + + return CFB; + }()); + + + /** + * Electronic Codebook block mode. + */ + CryptoJS.mode.ECB = (function () { + var ECB = CryptoJS.lib.BlockCipherMode.extend(); + + ECB.Encryptor = ECB.extend({ + processBlock: function (words, offset) { + this._cipher.encryptBlock(words, offset); + } + }); + + ECB.Decryptor = ECB.extend({ + processBlock: function (words, offset) { + this._cipher.decryptBlock(words, offset); + } + }); + + return ECB; + }()); + + + /** + * ANSI X.923 padding strategy. + */ + CryptoJS.pad.AnsiX923 = { + pad: function (data, blockSize) { + // Shortcuts + var dataSigBytes = data.sigBytes; + var blockSizeBytes = blockSize * 4; + + // Count padding bytes + var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; + + // Compute last byte position + var lastBytePos = dataSigBytes + nPaddingBytes - 1; + + // Pad + data.clamp(); + data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); + data.sigBytes += nPaddingBytes; + }, + + unpad: function (data) { + // Get number of padding bytes from last byte + var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; + + // Remove padding + data.sigBytes -= nPaddingBytes; + } + }; + + + /** + * ISO 10126 padding strategy. + */ + CryptoJS.pad.Iso10126 = { + pad: function (data, blockSize) { + // Shortcut + var blockSizeBytes = blockSize * 4; + + // Count padding bytes + var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; + + // Pad + data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). + concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); + }, + + unpad: function (data) { + // Get number of padding bytes from last byte + var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; + + // Remove padding + data.sigBytes -= nPaddingBytes; + } + }; + + + /** + * ISO/IEC 9797-1 Padding Method 2. + */ + CryptoJS.pad.Iso97971 = { + pad: function (data, blockSize) { + // Add 0x80 byte + data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); + + // Zero pad the rest + CryptoJS.pad.ZeroPadding.pad(data, blockSize); + }, + + unpad: function (data) { + // Remove zero padding + CryptoJS.pad.ZeroPadding.unpad(data); + + // Remove one more byte -- the 0x80 byte + data.sigBytes--; + } + }; + + + /** + * Output Feedback block mode. + */ + CryptoJS.mode.OFB = (function () { + var OFB = CryptoJS.lib.BlockCipherMode.extend(); + + var Encryptor = OFB.Encryptor = OFB.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher + var blockSize = cipher.blockSize; + var iv = this._iv; + var keystream = this._keystream; + + // Generate keystream + if (iv) { + keystream = this._keystream = iv.slice(0); + + // Remove IV for subsequent blocks + this._iv = undefined; + } + cipher.encryptBlock(keystream, 0); + + // Encrypt + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= keystream[i]; + } + } + }); + + OFB.Decryptor = Encryptor; + + return OFB; + }()); + + + /** + * A noop padding strategy. + */ + CryptoJS.pad.NoPadding = { + pad: function () { + }, + + unpad: function () { + } + }; + + + (function (undefined) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var CipherParams = C_lib.CipherParams; + var C_enc = C.enc; + var Hex = C_enc.Hex; + var C_format = C.format; + + var HexFormatter = C_format.Hex = { + /** + * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. + * + * @param {CipherParams} cipherParams The cipher params object. + * + * @return {string} The hexadecimally encoded string. + * + * @static + * + * @example + * + * var hexString = CryptoJS.format.Hex.stringify(cipherParams); + */ + stringify: function (cipherParams) { + return cipherParams.ciphertext.toString(Hex); + }, + + /** + * Converts a hexadecimally encoded ciphertext string to a cipher params object. + * + * @param {string} input The hexadecimally encoded string. + * + * @return {CipherParams} The cipher params object. + * + * @static + * + * @example + * + * var cipherParams = CryptoJS.format.Hex.parse(hexString); + */ + parse: function (input) { + var ciphertext = Hex.parse(input); + return CipherParams.create({ ciphertext: ciphertext }); + } + }; + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var BlockCipher = C_lib.BlockCipher; + var C_algo = C.algo; + + // Lookup tables + var SBOX = []; + var INV_SBOX = []; + var SUB_MIX_0 = []; + var SUB_MIX_1 = []; + var SUB_MIX_2 = []; + var SUB_MIX_3 = []; + var INV_SUB_MIX_0 = []; + var INV_SUB_MIX_1 = []; + var INV_SUB_MIX_2 = []; + var INV_SUB_MIX_3 = []; + + // Compute lookup tables + (function () { + // Compute double table + var d = []; + for (var i = 0; i < 256; i++) { + if (i < 128) { + d[i] = i << 1; + } else { + d[i] = (i << 1) ^ 0x11b; + } + } + + // Walk GF(2^8) + var x = 0; + var xi = 0; + for (var i = 0; i < 256; i++) { + // Compute sbox + var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); + sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; + SBOX[x] = sx; + INV_SBOX[sx] = x; + + // Compute multiplication + var x2 = d[x]; + var x4 = d[x2]; + var x8 = d[x4]; + + // Compute sub bytes, mix columns tables + var t = (d[sx] * 0x101) ^ (sx * 0x1010100); + SUB_MIX_0[x] = (t << 24) | (t >>> 8); + SUB_MIX_1[x] = (t << 16) | (t >>> 16); + SUB_MIX_2[x] = (t << 8) | (t >>> 24); + SUB_MIX_3[x] = t; + + // Compute inv sub bytes, inv mix columns tables + var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); + INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); + INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); + INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); + INV_SUB_MIX_3[sx] = t; + + // Compute next counter + if (!x) { + x = xi = 1; + } else { + x = x2 ^ d[d[d[x8 ^ x2]]]; + xi ^= d[d[xi]]; + } + } + }()); + + // Precomputed Rcon lookup + var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; + + /** + * AES block cipher algorithm. + */ + var AES = C_algo.AES = BlockCipher.extend({ + _doReset: function () { + // Skip reset of nRounds has been set before and key did not change + if (this._nRounds && this._keyPriorReset === this._key) { + return; + } + + // Shortcuts + var key = this._keyPriorReset = this._key; + var keyWords = key.words; + var keySize = key.sigBytes / 4; + + // Compute number of rounds + var nRounds = this._nRounds = keySize + 6; + + // Compute number of key schedule rows + var ksRows = (nRounds + 1) * 4; + + // Compute key schedule + var keySchedule = this._keySchedule = []; + for (var ksRow = 0; ksRow < ksRows; ksRow++) { + if (ksRow < keySize) { + keySchedule[ksRow] = keyWords[ksRow]; + } else { + var t = keySchedule[ksRow - 1]; + + if (!(ksRow % keySize)) { + // Rot word + t = (t << 8) | (t >>> 24); + + // Sub word + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + + // Mix Rcon + t ^= RCON[(ksRow / keySize) | 0] << 24; + } else if (keySize > 6 && ksRow % keySize == 4) { + // Sub word + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + } + + keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; + } + } + + // Compute inv key schedule + var invKeySchedule = this._invKeySchedule = []; + for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { + var ksRow = ksRows - invKsRow; + + if (invKsRow % 4) { + var t = keySchedule[ksRow]; + } else { + var t = keySchedule[ksRow - 4]; + } + + if (invKsRow < 4 || ksRow <= 4) { + invKeySchedule[invKsRow] = t; + } else { + invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ + INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; + } + } + }, + + encryptBlock: function (M, offset) { + this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); + }, + + decryptBlock: function (M, offset) { + // Swap 2nd and 4th rows + var t = M[offset + 1]; + M[offset + 1] = M[offset + 3]; + M[offset + 3] = t; + + this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); + + // Inv swap 2nd and 4th rows + var t = M[offset + 1]; + M[offset + 1] = M[offset + 3]; + M[offset + 3] = t; + }, + + _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { + // Shortcut + var nRounds = this._nRounds; + + // Get input, add round key + var s0 = M[offset] ^ keySchedule[0]; + var s1 = M[offset + 1] ^ keySchedule[1]; + var s2 = M[offset + 2] ^ keySchedule[2]; + var s3 = M[offset + 3] ^ keySchedule[3]; + + // Key schedule row counter + var ksRow = 4; + + // Rounds + for (var round = 1; round < nRounds; round++) { + // Shift rows, sub bytes, mix columns, add round key + var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; + var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; + var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; + var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; + + // Update state + s0 = t0; + s1 = t1; + s2 = t2; + s3 = t3; + } + + // Shift rows, sub bytes, add round key + var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; + var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; + var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; + var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; + + // Set output + M[offset] = t0; + M[offset + 1] = t1; + M[offset + 2] = t2; + M[offset + 3] = t3; + }, + + keySize: 256/32 + }); + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); + * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); + */ + C.AES = BlockCipher._createHelper(AES); + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var BlockCipher = C_lib.BlockCipher; + var C_algo = C.algo; + + // Permuted Choice 1 constants + var PC1 = [ + 57, 49, 41, 33, 25, 17, 9, 1, + 58, 50, 42, 34, 26, 18, 10, 2, + 59, 51, 43, 35, 27, 19, 11, 3, + 60, 52, 44, 36, 63, 55, 47, 39, + 31, 23, 15, 7, 62, 54, 46, 38, + 30, 22, 14, 6, 61, 53, 45, 37, + 29, 21, 13, 5, 28, 20, 12, 4 + ]; + + // Permuted Choice 2 constants + var PC2 = [ + 14, 17, 11, 24, 1, 5, + 3, 28, 15, 6, 21, 10, + 23, 19, 12, 4, 26, 8, + 16, 7, 27, 20, 13, 2, + 41, 52, 31, 37, 47, 55, + 30, 40, 51, 45, 33, 48, + 44, 49, 39, 56, 34, 53, + 46, 42, 50, 36, 29, 32 + ]; + + // Cumulative bit shift constants + var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; + + // SBOXes and round permutation constants + var SBOX_P = [ + { + 0x0: 0x808200, + 0x10000000: 0x8000, + 0x20000000: 0x808002, + 0x30000000: 0x2, + 0x40000000: 0x200, + 0x50000000: 0x808202, + 0x60000000: 0x800202, + 0x70000000: 0x800000, + 0x80000000: 0x202, + 0x90000000: 0x800200, + 0xa0000000: 0x8200, + 0xb0000000: 0x808000, + 0xc0000000: 0x8002, + 0xd0000000: 0x800002, + 0xe0000000: 0x0, + 0xf0000000: 0x8202, + 0x8000000: 0x0, + 0x18000000: 0x808202, + 0x28000000: 0x8202, + 0x38000000: 0x8000, + 0x48000000: 0x808200, + 0x58000000: 0x200, + 0x68000000: 0x808002, + 0x78000000: 0x2, + 0x88000000: 0x800200, + 0x98000000: 0x8200, + 0xa8000000: 0x808000, + 0xb8000000: 0x800202, + 0xc8000000: 0x800002, + 0xd8000000: 0x8002, + 0xe8000000: 0x202, + 0xf8000000: 0x800000, + 0x1: 0x8000, + 0x10000001: 0x2, + 0x20000001: 0x808200, + 0x30000001: 0x800000, + 0x40000001: 0x808002, + 0x50000001: 0x8200, + 0x60000001: 0x200, + 0x70000001: 0x800202, + 0x80000001: 0x808202, + 0x90000001: 0x808000, + 0xa0000001: 0x800002, + 0xb0000001: 0x8202, + 0xc0000001: 0x202, + 0xd0000001: 0x800200, + 0xe0000001: 0x8002, + 0xf0000001: 0x0, + 0x8000001: 0x808202, + 0x18000001: 0x808000, + 0x28000001: 0x800000, + 0x38000001: 0x200, + 0x48000001: 0x8000, + 0x58000001: 0x800002, + 0x68000001: 0x2, + 0x78000001: 0x8202, + 0x88000001: 0x8002, + 0x98000001: 0x800202, + 0xa8000001: 0x202, + 0xb8000001: 0x808200, + 0xc8000001: 0x800200, + 0xd8000001: 0x0, + 0xe8000001: 0x8200, + 0xf8000001: 0x808002 + }, + { + 0x0: 0x40084010, + 0x1000000: 0x4000, + 0x2000000: 0x80000, + 0x3000000: 0x40080010, + 0x4000000: 0x40000010, + 0x5000000: 0x40084000, + 0x6000000: 0x40004000, + 0x7000000: 0x10, + 0x8000000: 0x84000, + 0x9000000: 0x40004010, + 0xa000000: 0x40000000, + 0xb000000: 0x84010, + 0xc000000: 0x80010, + 0xd000000: 0x0, + 0xe000000: 0x4010, + 0xf000000: 0x40080000, + 0x800000: 0x40004000, + 0x1800000: 0x84010, + 0x2800000: 0x10, + 0x3800000: 0x40004010, + 0x4800000: 0x40084010, + 0x5800000: 0x40000000, + 0x6800000: 0x80000, + 0x7800000: 0x40080010, + 0x8800000: 0x80010, + 0x9800000: 0x0, + 0xa800000: 0x4000, + 0xb800000: 0x40080000, + 0xc800000: 0x40000010, + 0xd800000: 0x84000, + 0xe800000: 0x40084000, + 0xf800000: 0x4010, + 0x10000000: 0x0, + 0x11000000: 0x40080010, + 0x12000000: 0x40004010, + 0x13000000: 0x40084000, + 0x14000000: 0x40080000, + 0x15000000: 0x10, + 0x16000000: 0x84010, + 0x17000000: 0x4000, + 0x18000000: 0x4010, + 0x19000000: 0x80000, + 0x1a000000: 0x80010, + 0x1b000000: 0x40000010, + 0x1c000000: 0x84000, + 0x1d000000: 0x40004000, + 0x1e000000: 0x40000000, + 0x1f000000: 0x40084010, + 0x10800000: 0x84010, + 0x11800000: 0x80000, + 0x12800000: 0x40080000, + 0x13800000: 0x4000, + 0x14800000: 0x40004000, + 0x15800000: 0x40084010, + 0x16800000: 0x10, + 0x17800000: 0x40000000, + 0x18800000: 0x40084000, + 0x19800000: 0x40000010, + 0x1a800000: 0x40004010, + 0x1b800000: 0x80010, + 0x1c800000: 0x0, + 0x1d800000: 0x4010, + 0x1e800000: 0x40080010, + 0x1f800000: 0x84000 + }, + { + 0x0: 0x104, + 0x100000: 0x0, + 0x200000: 0x4000100, + 0x300000: 0x10104, + 0x400000: 0x10004, + 0x500000: 0x4000004, + 0x600000: 0x4010104, + 0x700000: 0x4010000, + 0x800000: 0x4000000, + 0x900000: 0x4010100, + 0xa00000: 0x10100, + 0xb00000: 0x4010004, + 0xc00000: 0x4000104, + 0xd00000: 0x10000, + 0xe00000: 0x4, + 0xf00000: 0x100, + 0x80000: 0x4010100, + 0x180000: 0x4010004, + 0x280000: 0x0, + 0x380000: 0x4000100, + 0x480000: 0x4000004, + 0x580000: 0x10000, + 0x680000: 0x10004, + 0x780000: 0x104, + 0x880000: 0x4, + 0x980000: 0x100, + 0xa80000: 0x4010000, + 0xb80000: 0x10104, + 0xc80000: 0x10100, + 0xd80000: 0x4000104, + 0xe80000: 0x4010104, + 0xf80000: 0x4000000, + 0x1000000: 0x4010100, + 0x1100000: 0x10004, + 0x1200000: 0x10000, + 0x1300000: 0x4000100, + 0x1400000: 0x100, + 0x1500000: 0x4010104, + 0x1600000: 0x4000004, + 0x1700000: 0x0, + 0x1800000: 0x4000104, + 0x1900000: 0x4000000, + 0x1a00000: 0x4, + 0x1b00000: 0x10100, + 0x1c00000: 0x4010000, + 0x1d00000: 0x104, + 0x1e00000: 0x10104, + 0x1f00000: 0x4010004, + 0x1080000: 0x4000000, + 0x1180000: 0x104, + 0x1280000: 0x4010100, + 0x1380000: 0x0, + 0x1480000: 0x10004, + 0x1580000: 0x4000100, + 0x1680000: 0x100, + 0x1780000: 0x4010004, + 0x1880000: 0x10000, + 0x1980000: 0x4010104, + 0x1a80000: 0x10104, + 0x1b80000: 0x4000004, + 0x1c80000: 0x4000104, + 0x1d80000: 0x4010000, + 0x1e80000: 0x4, + 0x1f80000: 0x10100 + }, + { + 0x0: 0x80401000, + 0x10000: 0x80001040, + 0x20000: 0x401040, + 0x30000: 0x80400000, + 0x40000: 0x0, + 0x50000: 0x401000, + 0x60000: 0x80000040, + 0x70000: 0x400040, + 0x80000: 0x80000000, + 0x90000: 0x400000, + 0xa0000: 0x40, + 0xb0000: 0x80001000, + 0xc0000: 0x80400040, + 0xd0000: 0x1040, + 0xe0000: 0x1000, + 0xf0000: 0x80401040, + 0x8000: 0x80001040, + 0x18000: 0x40, + 0x28000: 0x80400040, + 0x38000: 0x80001000, + 0x48000: 0x401000, + 0x58000: 0x80401040, + 0x68000: 0x0, + 0x78000: 0x80400000, + 0x88000: 0x1000, + 0x98000: 0x80401000, + 0xa8000: 0x400000, + 0xb8000: 0x1040, + 0xc8000: 0x80000000, + 0xd8000: 0x400040, + 0xe8000: 0x401040, + 0xf8000: 0x80000040, + 0x100000: 0x400040, + 0x110000: 0x401000, + 0x120000: 0x80000040, + 0x130000: 0x0, + 0x140000: 0x1040, + 0x150000: 0x80400040, + 0x160000: 0x80401000, + 0x170000: 0x80001040, + 0x180000: 0x80401040, + 0x190000: 0x80000000, + 0x1a0000: 0x80400000, + 0x1b0000: 0x401040, + 0x1c0000: 0x80001000, + 0x1d0000: 0x400000, + 0x1e0000: 0x40, + 0x1f0000: 0x1000, + 0x108000: 0x80400000, + 0x118000: 0x80401040, + 0x128000: 0x0, + 0x138000: 0x401000, + 0x148000: 0x400040, + 0x158000: 0x80000000, + 0x168000: 0x80001040, + 0x178000: 0x40, + 0x188000: 0x80000040, + 0x198000: 0x1000, + 0x1a8000: 0x80001000, + 0x1b8000: 0x80400040, + 0x1c8000: 0x1040, + 0x1d8000: 0x80401000, + 0x1e8000: 0x400000, + 0x1f8000: 0x401040 + }, + { + 0x0: 0x80, + 0x1000: 0x1040000, + 0x2000: 0x40000, + 0x3000: 0x20000000, + 0x4000: 0x20040080, + 0x5000: 0x1000080, + 0x6000: 0x21000080, + 0x7000: 0x40080, + 0x8000: 0x1000000, + 0x9000: 0x20040000, + 0xa000: 0x20000080, + 0xb000: 0x21040080, + 0xc000: 0x21040000, + 0xd000: 0x0, + 0xe000: 0x1040080, + 0xf000: 0x21000000, + 0x800: 0x1040080, + 0x1800: 0x21000080, + 0x2800: 0x80, + 0x3800: 0x1040000, + 0x4800: 0x40000, + 0x5800: 0x20040080, + 0x6800: 0x21040000, + 0x7800: 0x20000000, + 0x8800: 0x20040000, + 0x9800: 0x0, + 0xa800: 0x21040080, + 0xb800: 0x1000080, + 0xc800: 0x20000080, + 0xd800: 0x21000000, + 0xe800: 0x1000000, + 0xf800: 0x40080, + 0x10000: 0x40000, + 0x11000: 0x80, + 0x12000: 0x20000000, + 0x13000: 0x21000080, + 0x14000: 0x1000080, + 0x15000: 0x21040000, + 0x16000: 0x20040080, + 0x17000: 0x1000000, + 0x18000: 0x21040080, + 0x19000: 0x21000000, + 0x1a000: 0x1040000, + 0x1b000: 0x20040000, + 0x1c000: 0x40080, + 0x1d000: 0x20000080, + 0x1e000: 0x0, + 0x1f000: 0x1040080, + 0x10800: 0x21000080, + 0x11800: 0x1000000, + 0x12800: 0x1040000, + 0x13800: 0x20040080, + 0x14800: 0x20000000, + 0x15800: 0x1040080, + 0x16800: 0x80, + 0x17800: 0x21040000, + 0x18800: 0x40080, + 0x19800: 0x21040080, + 0x1a800: 0x0, + 0x1b800: 0x21000000, + 0x1c800: 0x1000080, + 0x1d800: 0x40000, + 0x1e800: 0x20040000, + 0x1f800: 0x20000080 + }, + { + 0x0: 0x10000008, + 0x100: 0x2000, + 0x200: 0x10200000, + 0x300: 0x10202008, + 0x400: 0x10002000, + 0x500: 0x200000, + 0x600: 0x200008, + 0x700: 0x10000000, + 0x800: 0x0, + 0x900: 0x10002008, + 0xa00: 0x202000, + 0xb00: 0x8, + 0xc00: 0x10200008, + 0xd00: 0x202008, + 0xe00: 0x2008, + 0xf00: 0x10202000, + 0x80: 0x10200000, + 0x180: 0x10202008, + 0x280: 0x8, + 0x380: 0x200000, + 0x480: 0x202008, + 0x580: 0x10000008, + 0x680: 0x10002000, + 0x780: 0x2008, + 0x880: 0x200008, + 0x980: 0x2000, + 0xa80: 0x10002008, + 0xb80: 0x10200008, + 0xc80: 0x0, + 0xd80: 0x10202000, + 0xe80: 0x202000, + 0xf80: 0x10000000, + 0x1000: 0x10002000, + 0x1100: 0x10200008, + 0x1200: 0x10202008, + 0x1300: 0x2008, + 0x1400: 0x200000, + 0x1500: 0x10000000, + 0x1600: 0x10000008, + 0x1700: 0x202000, + 0x1800: 0x202008, + 0x1900: 0x0, + 0x1a00: 0x8, + 0x1b00: 0x10200000, + 0x1c00: 0x2000, + 0x1d00: 0x10002008, + 0x1e00: 0x10202000, + 0x1f00: 0x200008, + 0x1080: 0x8, + 0x1180: 0x202000, + 0x1280: 0x200000, + 0x1380: 0x10000008, + 0x1480: 0x10002000, + 0x1580: 0x2008, + 0x1680: 0x10202008, + 0x1780: 0x10200000, + 0x1880: 0x10202000, + 0x1980: 0x10200008, + 0x1a80: 0x2000, + 0x1b80: 0x202008, + 0x1c80: 0x200008, + 0x1d80: 0x0, + 0x1e80: 0x10000000, + 0x1f80: 0x10002008 + }, + { + 0x0: 0x100000, + 0x10: 0x2000401, + 0x20: 0x400, + 0x30: 0x100401, + 0x40: 0x2100401, + 0x50: 0x0, + 0x60: 0x1, + 0x70: 0x2100001, + 0x80: 0x2000400, + 0x90: 0x100001, + 0xa0: 0x2000001, + 0xb0: 0x2100400, + 0xc0: 0x2100000, + 0xd0: 0x401, + 0xe0: 0x100400, + 0xf0: 0x2000000, + 0x8: 0x2100001, + 0x18: 0x0, + 0x28: 0x2000401, + 0x38: 0x2100400, + 0x48: 0x100000, + 0x58: 0x2000001, + 0x68: 0x2000000, + 0x78: 0x401, + 0x88: 0x100401, + 0x98: 0x2000400, + 0xa8: 0x2100000, + 0xb8: 0x100001, + 0xc8: 0x400, + 0xd8: 0x2100401, + 0xe8: 0x1, + 0xf8: 0x100400, + 0x100: 0x2000000, + 0x110: 0x100000, + 0x120: 0x2000401, + 0x130: 0x2100001, + 0x140: 0x100001, + 0x150: 0x2000400, + 0x160: 0x2100400, + 0x170: 0x100401, + 0x180: 0x401, + 0x190: 0x2100401, + 0x1a0: 0x100400, + 0x1b0: 0x1, + 0x1c0: 0x0, + 0x1d0: 0x2100000, + 0x1e0: 0x2000001, + 0x1f0: 0x400, + 0x108: 0x100400, + 0x118: 0x2000401, + 0x128: 0x2100001, + 0x138: 0x1, + 0x148: 0x2000000, + 0x158: 0x100000, + 0x168: 0x401, + 0x178: 0x2100400, + 0x188: 0x2000001, + 0x198: 0x2100000, + 0x1a8: 0x0, + 0x1b8: 0x2100401, + 0x1c8: 0x100401, + 0x1d8: 0x400, + 0x1e8: 0x2000400, + 0x1f8: 0x100001 + }, + { + 0x0: 0x8000820, + 0x1: 0x20000, + 0x2: 0x8000000, + 0x3: 0x20, + 0x4: 0x20020, + 0x5: 0x8020820, + 0x6: 0x8020800, + 0x7: 0x800, + 0x8: 0x8020000, + 0x9: 0x8000800, + 0xa: 0x20800, + 0xb: 0x8020020, + 0xc: 0x820, + 0xd: 0x0, + 0xe: 0x8000020, + 0xf: 0x20820, + 0x80000000: 0x800, + 0x80000001: 0x8020820, + 0x80000002: 0x8000820, + 0x80000003: 0x8000000, + 0x80000004: 0x8020000, + 0x80000005: 0x20800, + 0x80000006: 0x20820, + 0x80000007: 0x20, + 0x80000008: 0x8000020, + 0x80000009: 0x820, + 0x8000000a: 0x20020, + 0x8000000b: 0x8020800, + 0x8000000c: 0x0, + 0x8000000d: 0x8020020, + 0x8000000e: 0x8000800, + 0x8000000f: 0x20000, + 0x10: 0x20820, + 0x11: 0x8020800, + 0x12: 0x20, + 0x13: 0x800, + 0x14: 0x8000800, + 0x15: 0x8000020, + 0x16: 0x8020020, + 0x17: 0x20000, + 0x18: 0x0, + 0x19: 0x20020, + 0x1a: 0x8020000, + 0x1b: 0x8000820, + 0x1c: 0x8020820, + 0x1d: 0x20800, + 0x1e: 0x820, + 0x1f: 0x8000000, + 0x80000010: 0x20000, + 0x80000011: 0x800, + 0x80000012: 0x8020020, + 0x80000013: 0x20820, + 0x80000014: 0x20, + 0x80000015: 0x8020000, + 0x80000016: 0x8000000, + 0x80000017: 0x8000820, + 0x80000018: 0x8020820, + 0x80000019: 0x8000020, + 0x8000001a: 0x8000800, + 0x8000001b: 0x0, + 0x8000001c: 0x20800, + 0x8000001d: 0x820, + 0x8000001e: 0x20020, + 0x8000001f: 0x8020800 + } + ]; + + // Masks that select the SBOX input + var SBOX_MASK = [ + 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, + 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f + ]; + + /** + * DES block cipher algorithm. + */ + var DES = C_algo.DES = BlockCipher.extend({ + _doReset: function () { + // Shortcuts + var key = this._key; + var keyWords = key.words; + + // Select 56 bits according to PC1 + var keyBits = []; + for (var i = 0; i < 56; i++) { + var keyBitPos = PC1[i] - 1; + keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; + } + + // Assemble 16 subkeys + var subKeys = this._subKeys = []; + for (var nSubKey = 0; nSubKey < 16; nSubKey++) { + // Create subkey + var subKey = subKeys[nSubKey] = []; + + // Shortcut + var bitShift = BIT_SHIFTS[nSubKey]; + + // Select 48 bits according to PC2 + for (var i = 0; i < 24; i++) { + // Select from the left 28 key bits + subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); + + // Select from the right 28 key bits + subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); + } + + // Since each subkey is applied to an expanded 32-bit input, + // the subkey can be broken into 8 values scaled to 32-bits, + // which allows the key to be used without expansion + subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); + for (var i = 1; i < 7; i++) { + subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); + } + subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); + } + + // Compute inverse subkeys + var invSubKeys = this._invSubKeys = []; + for (var i = 0; i < 16; i++) { + invSubKeys[i] = subKeys[15 - i]; + } + }, + + encryptBlock: function (M, offset) { + this._doCryptBlock(M, offset, this._subKeys); + }, + + decryptBlock: function (M, offset) { + this._doCryptBlock(M, offset, this._invSubKeys); + }, + + _doCryptBlock: function (M, offset, subKeys) { + // Get input + this._lBlock = M[offset]; + this._rBlock = M[offset + 1]; + + // Initial permutation + exchangeLR.call(this, 4, 0x0f0f0f0f); + exchangeLR.call(this, 16, 0x0000ffff); + exchangeRL.call(this, 2, 0x33333333); + exchangeRL.call(this, 8, 0x00ff00ff); + exchangeLR.call(this, 1, 0x55555555); + + // Rounds + for (var round = 0; round < 16; round++) { + // Shortcuts + var subKey = subKeys[round]; + var lBlock = this._lBlock; + var rBlock = this._rBlock; + + // Feistel function + var f = 0; + for (var i = 0; i < 8; i++) { + f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; + } + this._lBlock = rBlock; + this._rBlock = lBlock ^ f; + } + + // Undo swap from last round + var t = this._lBlock; + this._lBlock = this._rBlock; + this._rBlock = t; + + // Final permutation + exchangeLR.call(this, 1, 0x55555555); + exchangeRL.call(this, 8, 0x00ff00ff); + exchangeRL.call(this, 2, 0x33333333); + exchangeLR.call(this, 16, 0x0000ffff); + exchangeLR.call(this, 4, 0x0f0f0f0f); + + // Set output + M[offset] = this._lBlock; + M[offset + 1] = this._rBlock; + }, + + keySize: 64/32, + + ivSize: 64/32, + + blockSize: 64/32 + }); + + // Swap bits across the left and right words + function exchangeLR(offset, mask) { + var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; + this._rBlock ^= t; + this._lBlock ^= t << offset; + } + + function exchangeRL(offset, mask) { + var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; + this._lBlock ^= t; + this._rBlock ^= t << offset; + } + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); + * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); + */ + C.DES = BlockCipher._createHelper(DES); + + /** + * Triple-DES block cipher algorithm. + */ + var TripleDES = C_algo.TripleDES = BlockCipher.extend({ + _doReset: function () { + // Shortcuts + var key = this._key; + var keyWords = key.words; + + // Create DES instances + this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2))); + this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4))); + this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6))); + }, + + encryptBlock: function (M, offset) { + this._des1.encryptBlock(M, offset); + this._des2.decryptBlock(M, offset); + this._des3.encryptBlock(M, offset); + }, + + decryptBlock: function (M, offset) { + this._des3.decryptBlock(M, offset); + this._des2.encryptBlock(M, offset); + this._des1.decryptBlock(M, offset); + }, + + keySize: 192/32, + + ivSize: 64/32, + + blockSize: 64/32 + }); + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); + * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); + */ + C.TripleDES = BlockCipher._createHelper(TripleDES); + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var StreamCipher = C_lib.StreamCipher; + var C_algo = C.algo; + + /** + * RC4 stream cipher algorithm. + */ + var RC4 = C_algo.RC4 = StreamCipher.extend({ + _doReset: function () { + // Shortcuts + var key = this._key; + var keyWords = key.words; + var keySigBytes = key.sigBytes; + + // Init sbox + var S = this._S = []; + for (var i = 0; i < 256; i++) { + S[i] = i; + } + + // Key setup + for (var i = 0, j = 0; i < 256; i++) { + var keyByteIndex = i % keySigBytes; + var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; + + j = (j + S[i] + keyByte) % 256; + + // Swap + var t = S[i]; + S[i] = S[j]; + S[j] = t; + } + + // Counters + this._i = this._j = 0; + }, + + _doProcessBlock: function (M, offset) { + M[offset] ^= generateKeystreamWord.call(this); + }, + + keySize: 256/32, + + ivSize: 0 + }); + + function generateKeystreamWord() { + // Shortcuts + var S = this._S; + var i = this._i; + var j = this._j; + + // Generate keystream word + var keystreamWord = 0; + for (var n = 0; n < 4; n++) { + i = (i + 1) % 256; + j = (j + S[i]) % 256; + + // Swap + var t = S[i]; + S[i] = S[j]; + S[j] = t; + + keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); + } + + // Update counters + this._i = i; + this._j = j; + + return keystreamWord; + } + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); + * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); + */ + C.RC4 = StreamCipher._createHelper(RC4); + + /** + * Modified RC4 stream cipher algorithm. + */ + var RC4Drop = C_algo.RC4Drop = RC4.extend({ + /** + * Configuration options. + * + * @property {number} drop The number of keystream words to drop. Default 192 + */ + cfg: RC4.cfg.extend({ + drop: 192 + }), + + _doReset: function () { + RC4._doReset.call(this); + + // Drop + for (var i = this.cfg.drop; i > 0; i--) { + generateKeystreamWord.call(this); + } + } + }); + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); + * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); + */ + C.RC4Drop = StreamCipher._createHelper(RC4Drop); + }()); + + + /** @preserve + * Counter block mode compatible with Dr Brian Gladman fileenc.c + * derived from CryptoJS.mode.CTR + * Jan Hruby jhruby.web@gmail.com + */ + CryptoJS.mode.CTRGladman = (function () { + var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); + + function incWord(word) + { + if (((word >> 24) & 0xff) === 0xff) { //overflow + var b1 = (word >> 16)&0xff; + var b2 = (word >> 8)&0xff; + var b3 = word & 0xff; + + if (b1 === 0xff) // overflow b1 + { + b1 = 0; + if (b2 === 0xff) + { + b2 = 0; + if (b3 === 0xff) + { + b3 = 0; + } + else + { + ++b3; + } + } + else + { + ++b2; + } + } + else + { + ++b1; + } + + word = 0; + word += (b1 << 16); + word += (b2 << 8); + word += b3; + } + else + { + word += (0x01 << 24); + } + return word; + } + + function incCounter(counter) + { + if ((counter[0] = incWord(counter[0])) === 0) + { + // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 + counter[1] = incWord(counter[1]); + } + return counter; + } + + var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher + var blockSize = cipher.blockSize; + var iv = this._iv; + var counter = this._counter; + + // Generate keystream + if (iv) { + counter = this._counter = iv.slice(0); + + // Remove IV for subsequent blocks + this._iv = undefined; + } + + incCounter(counter); + + var keystream = counter.slice(0); + cipher.encryptBlock(keystream, 0); + + // Encrypt + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= keystream[i]; + } + } + }); + + CTRGladman.Decryptor = Encryptor; + + return CTRGladman; + }()); + + + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var StreamCipher = C_lib.StreamCipher; + var C_algo = C.algo; + + // Reusable objects + var S = []; + var C_ = []; + var G = []; + + /** + * Rabbit stream cipher algorithm + */ + var Rabbit = C_algo.Rabbit = StreamCipher.extend({ + _doReset: function () { + // Shortcuts + var K = this._key.words; + var iv = this.cfg.iv; + + // Swap endian + for (var i = 0; i < 4; i++) { + K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | + (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); + } + + // Generate initial state values + var X = this._X = [ + K[0], (K[3] << 16) | (K[2] >>> 16), + K[1], (K[0] << 16) | (K[3] >>> 16), + K[2], (K[1] << 16) | (K[0] >>> 16), + K[3], (K[2] << 16) | (K[1] >>> 16) + ]; + + // Generate initial counter values + var C = this._C = [ + (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), + (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), + (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), + (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) + ]; + + // Carry bit + this._b = 0; + + // Iterate the system four times + for (var i = 0; i < 4; i++) { + nextState.call(this); + } + + // Modify the counters + for (var i = 0; i < 8; i++) { + C[i] ^= X[(i + 4) & 7]; + } + + // IV setup + if (iv) { + // Shortcuts + var IV = iv.words; + var IV_0 = IV[0]; + var IV_1 = IV[1]; + + // Generate four subvectors + var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); + var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); + var i1 = (i0 >>> 16) | (i2 & 0xffff0000); + var i3 = (i2 << 16) | (i0 & 0x0000ffff); + + // Modify counter values + C[0] ^= i0; + C[1] ^= i1; + C[2] ^= i2; + C[3] ^= i3; + C[4] ^= i0; + C[5] ^= i1; + C[6] ^= i2; + C[7] ^= i3; + + // Iterate the system four times + for (var i = 0; i < 4; i++) { + nextState.call(this); + } + } + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var X = this._X; + + // Iterate the system + nextState.call(this); + + // Generate four keystream words + S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); + S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); + S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); + S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); + + for (var i = 0; i < 4; i++) { + // Swap endian + S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | + (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); + + // Encrypt + M[offset + i] ^= S[i]; + } + }, + + blockSize: 128/32, + + ivSize: 64/32 + }); + + function nextState() { + // Shortcuts + var X = this._X; + var C = this._C; + + // Save old counter values + for (var i = 0; i < 8; i++) { + C_[i] = C[i]; + } + + // Calculate new counter values + C[0] = (C[0] + 0x4d34d34d + this._b) | 0; + C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; + C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; + C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; + C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; + C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; + C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; + C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; + this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; + + // Calculate the g-values + for (var i = 0; i < 8; i++) { + var gx = X[i] + C[i]; + + // Construct high and low argument for squaring + var ga = gx & 0xffff; + var gb = gx >>> 16; + + // Calculate high and low result of squaring + var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; + var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); + + // High XOR low + G[i] = gh ^ gl; + } + + // Calculate new state values + X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; + X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; + X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; + X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; + X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; + X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; + X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; + X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; + } + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); + * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); + */ + C.Rabbit = StreamCipher._createHelper(Rabbit); + }()); + + + /** + * Counter block mode. + */ + CryptoJS.mode.CTR = (function () { + var CTR = CryptoJS.lib.BlockCipherMode.extend(); + + var Encryptor = CTR.Encryptor = CTR.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher + var blockSize = cipher.blockSize; + var iv = this._iv; + var counter = this._counter; + + // Generate keystream + if (iv) { + counter = this._counter = iv.slice(0); + + // Remove IV for subsequent blocks + this._iv = undefined; + } + var keystream = counter.slice(0); + cipher.encryptBlock(keystream, 0); + + // Increment counter + counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 + + // Encrypt + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= keystream[i]; + } + } + }); + + CTR.Decryptor = Encryptor; + + return CTR; + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var StreamCipher = C_lib.StreamCipher; + var C_algo = C.algo; + + // Reusable objects + var S = []; + var C_ = []; + var G = []; + + /** + * Rabbit stream cipher algorithm. + * + * This is a legacy version that neglected to convert the key to little-endian. + * This error doesn't affect the cipher's security, + * but it does affect its compatibility with other implementations. + */ + var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ + _doReset: function () { + // Shortcuts + var K = this._key.words; + var iv = this.cfg.iv; + + // Generate initial state values + var X = this._X = [ + K[0], (K[3] << 16) | (K[2] >>> 16), + K[1], (K[0] << 16) | (K[3] >>> 16), + K[2], (K[1] << 16) | (K[0] >>> 16), + K[3], (K[2] << 16) | (K[1] >>> 16) + ]; + + // Generate initial counter values + var C = this._C = [ + (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), + (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), + (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), + (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) + ]; + + // Carry bit + this._b = 0; + + // Iterate the system four times + for (var i = 0; i < 4; i++) { + nextState.call(this); + } + + // Modify the counters + for (var i = 0; i < 8; i++) { + C[i] ^= X[(i + 4) & 7]; + } + + // IV setup + if (iv) { + // Shortcuts + var IV = iv.words; + var IV_0 = IV[0]; + var IV_1 = IV[1]; + + // Generate four subvectors + var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); + var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); + var i1 = (i0 >>> 16) | (i2 & 0xffff0000); + var i3 = (i2 << 16) | (i0 & 0x0000ffff); + + // Modify counter values + C[0] ^= i0; + C[1] ^= i1; + C[2] ^= i2; + C[3] ^= i3; + C[4] ^= i0; + C[5] ^= i1; + C[6] ^= i2; + C[7] ^= i3; + + // Iterate the system four times + for (var i = 0; i < 4; i++) { + nextState.call(this); + } + } + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var X = this._X; + + // Iterate the system + nextState.call(this); + + // Generate four keystream words + S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); + S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); + S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); + S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); + + for (var i = 0; i < 4; i++) { + // Swap endian + S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | + (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); + + // Encrypt + M[offset + i] ^= S[i]; + } + }, + + blockSize: 128/32, + + ivSize: 64/32 + }); + + function nextState() { + // Shortcuts + var X = this._X; + var C = this._C; + + // Save old counter values + for (var i = 0; i < 8; i++) { + C_[i] = C[i]; + } + + // Calculate new counter values + C[0] = (C[0] + 0x4d34d34d + this._b) | 0; + C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; + C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; + C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; + C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; + C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; + C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; + C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; + this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; + + // Calculate the g-values + for (var i = 0; i < 8; i++) { + var gx = X[i] + C[i]; + + // Construct high and low argument for squaring + var ga = gx & 0xffff; + var gb = gx >>> 16; + + // Calculate high and low result of squaring + var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; + var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); + + // High XOR low + G[i] = gh ^ gl; + } + + // Calculate new state values + X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; + X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; + X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; + X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; + X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; + X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; + X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; + X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; + } + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); + * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); + */ + C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); + }()); + + + /** + * Zero padding strategy. + */ + CryptoJS.pad.ZeroPadding = { + pad: function (data, blockSize) { + // Shortcut + var blockSizeBytes = blockSize * 4; + + // Pad + data.clamp(); + data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); + }, + + unpad: function (data) { + // Shortcut + var dataWords = data.words; + + // Unpad + var i = data.sigBytes - 1; + while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { + i--; + } + data.sigBytes = i + 1; + } + }; + + + return CryptoJS; + +})); \ No newline at end of file diff --git a/深度对接设备接口/public/jquery-1.10.2.min.js b/深度对接设备接口/public/jquery-1.10.2.min.js new file mode 100644 index 0000000..da41706 --- /dev/null +++ b/深度对接设备接口/public/jquery-1.10.2.min.js @@ -0,0 +1,6 @@ +/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license +//@ sourceMappingURL=jquery-1.10.2.min.map +*/ +(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="
        ",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
        a",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="
        t
        ",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
        ",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t +}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
        ","
        "],area:[1,"",""],param:[1,"",""],thead:[1,"","
        "],tr:[2,"","
        "],col:[2,"","
        "],td:[3,"","
        "],_default:x.support.htmlSerialize?[0,"",""]:[1,"X
        ","
        "]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle); +u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("