tcic-electron-sdk 1.5.241 → 1.5.245

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1,402 @@
1
- (()=>{"use strict";var e={761:function(e,t,o){var r=this&&this.__createBinding||(Object.create?function(e,t,o,r){void 0===r&&(r=o),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[o]}})}:function(e,t,o,r){void 0===r&&(r=o),e[r]=t[o]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),d=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)"default"!==o&&Object.hasOwnProperty.call(e,o)&&r(t,e,o);return n(t,e),t};Object.defineProperty(t,"__esModule",{value:!0});const s=o(933),a=d(o(280));class i{static setVisibleRect(e){e?(0!==i.screenHeight&&0!==i.screenWidth||(i.screenHeight=screen.height,i.screenWidth=screen.width,i.boardElement.style.width=`${screen.width}px`,i.boardElement.style.height=`${screen.height}px`),i.boardWrapElement.style.width=`${e.width}px`,i.boardWrapElement.style.height=`${e.height}px`,i.boardWrapElement.style.left=`${e.x}px`,i.boardWrapElement.style.top=`${e.y}px`,i.boardWrapElement.style.position="absolute"):(i.boardWrapElement.removeAttribute("style"),i.boardElement.removeAttribute("style"))}static updateCursor(){if(!i.teduBoard)return;const e=i.teduBoard.getToolType(),t=i.teduBoard.getBrushColor();if(e===i.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_PEN){const o=`data:image/svg+xml;charset=utf-8,${escape(`<?xml version="1.0" encoding="UTF-8"?><svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><title>mouse_pen</title>\n <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="光标及状态栏状态" transform="translate(-89.000000, -268.000000)">\n <g id="mouse_pen" transform="translate(89.000000, 268.000000)">\n <rect id="矩形" x="0" y="0" width="40" height="40"></rect>\n <g id="编组-13" transform="translate(8.000000, 3.000000)" fill="${t}" stroke="#182E25">\n <path d="M0.756984031,32.1383216 L3.68816089e-13,26.5292023 L17.8941729,7.81597009e-14 L24.5264735,4.47354323 L6.63230058,31.0027455 L0.756984031,32.1383216 Z" id="形状结合"></path>\n </g>\n </g>\n </g>\n </g>\n </svg>`)}`;i.teduBoard.setCursorIcon(e,{cursor:"url",url:o,offsetX:10,offsetY:40})}else if(e===i.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_LINE){const o=`<?xml version="1.0" encoding="UTF-8"?>\n <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>mouse_line</title>\n <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="光标及状态栏状态" transform="translate(-785.000000, -272.000000)">\n <g id="mouse_line" transform="translate(785.000000, 272.000000)">\n <g id="编组-3">\n <rect id="矩形" x="0" y="0" width="40" height="40"></rect>\n <g id="编组" transform="translate(2.628157, 2.500000)" fill="#000000" stroke="#FFFFFF">\n <path d="M19.6574089,0 L19.657,15.5 L34.6259534,15.5 L34.6259534,19.5 L19.657,19.5 L19.6574089,35 L15.6574089,35 L15.657,19.5 L-1.13686838e-13,19.5 L-1.13686838e-13,15.5 L15.657,15.5 L15.6574089,0 L19.6574089,0 Z" id="形状结合"></path>\n </g>\n </g>\n <line x1="28.5" y1="7.5" x2="36.5" y2="7.5" id="直线-6" stroke="${t}" stroke-width="2" stroke-linecap="square"></line>\n </g>\n </g>\n </g>\n </svg>`,r=`data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(o)))}`;i.teduBoard.setCursorIcon(e,{cursor:"url",url:r,offsetX:20,offsetY:20})}else if(e===i.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_RECT){const o=`<?xml version="1.0" encoding="UTF-8"?>\n <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>mouse_rectangle</title>\n <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="光标及状态栏状态" transform="translate(-551.000000, -272.000000)">\n <g id="mouse_rectangle" transform="translate(551.000000, 272.000000)">\n <g id="编组-3">\n <rect id="矩形" x="0" y="0" width="40" height="40"></rect>\n <g id="编组" transform="translate(2.628157, 2.500000)" fill="#000000" stroke="#FFFFFF">\n <path d="M19.6574089,0 L19.657,15.5 L34.6259534,15.5 L34.6259534,19.5 L19.657,19.5 L19.6574089,35 L15.6574089,35 L15.657,19.5 L-1.13686838e-13,19.5 L-1.13686838e-13,15.5 L15.657,15.5 L15.6574089,0 L19.6574089,0 Z" id="形状结合"></path>\n </g>\n </g>\n <rect id="矩形" stroke="${t}" stroke-width="2" x="28" y="3" width="8" height="8"></rect>\n </g>\n </g>\n </g>\n </svg>`,r=`data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(o)))}`;i.teduBoard.setCursorIcon(e,{cursor:"url",url:r,offsetX:20,offsetY:20}),i.teduBoard.setCursorIcon(i.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_SQUARE,{cursor:"url",url:r,offsetX:20,offsetY:20})}else if(e===i.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_OVAL){const o=`<?xml version="1.0" encoding="UTF-8"?>\n <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>mouse_circle</title>\n <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="光标及状态栏状态" transform="translate(-323.000000, -272.000000)">\n <g id="mouse_circle" transform="translate(323.000000, 272.000000)">\n <g id="编组-3">\n <rect id="矩形" x="0" y="0" width="40" height="40"></rect>\n <g id="编组" transform="translate(2.628157, 2.500000)" fill="#000000" stroke="#FFFFFF">\n <path d="M19.6574089,0 L19.657,15.5 L34.6259534,15.5 L34.6259534,19.5 L19.657,19.5 L19.6574089,35 L15.6574089,35 L15.657,19.5 L-1.13686838e-13,19.5 L-1.13686838e-13,15.5 L15.657,15.5 L15.6574089,0 L19.6574089,0 Z" id="形状结合"></path>\n </g>\n </g>\n <circle id="椭圆形" stroke="${t}" stroke-width="2" cx="32" cy="7" r="4"></circle>\n </g>\n </g>\n </g>\n </svg>`,r=`data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(o)))}`;i.teduBoard.setCursorIcon(e,{cursor:"url",url:r,offsetX:20,offsetY:20}),i.teduBoard.setCursorIcon(i.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_CIRCLE,{cursor:"url",url:r,offsetX:20,offsetY:20})}i.teduBoard.setToolType(e)}static callBoardMethod(e){console.log("callBoardMethod",i.teduBoard,JSON.stringify(e)),i.teduBoard&&(i.teduBoard[e.method].apply(i.teduBoard,e.params),i.updateCursor())}}i.TEduBoard=window.TEduBoard,i.teduBoard=null,i.boardElement=null,i.boardWrapElement=null,i.screenWidth=0,i.screenHeight=0,i.callMethodCache=[],i.isBoardReady=!1,window.BoardRender=i,s.ipcRenderer.on("initBoard",((e,t)=>{const o=window.BoardRender;if(o.teduBoard)return;const r={id:"board",sdkAppId:t.sdkAppId,classId:t.roomId,userId:t.userId,userSig:t.userSig,ratio:`${screen.width}:${screen.height}`,systemCursorEnable:!1,enableLocalMode:!0,styleConfig:{globalBackgroundColor:"rgba(0, 0, 0, 0.01)",textColor:"#ff0000",selectBoxColor:"#727272",cursorSize:[40,40],brushThin:50,selectAnchorColor:"#006eff"}};o.teduBoard=new o.TEduBoard(r),o.teduBoard.on(o.TEduBoard.EVENT.TEB_ERROR,((e,t)=>{})),o.teduBoard.on(o.TEduBoard.EVENT.TEB_WARNING,((e,t)=>{})),o.teduBoard.on(o.TEduBoard.EVENT.TEB_HISTROYDATA_SYNCCOMPLETED,(()=>{o.teduBoard.setToolType(o.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_MOUSE),o.teduBoard.setHandwritingEnable(!0),o.teduBoard.setCursorIcon(o.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_ERASER,{cursor:"url",url:"https://res.qcloudtiw.com/board/icons/xkt/eraser.svg",offsetX:7,offsetY:25}),o.updateCursor(),0===o.callMethodCache.length?o.teduBoard.setToolType(0):(o.callMethodCache.forEach((e=>{o.callBoardMethod(e)})),o.callMethodCache=[]),o.isBoardReady=!0})),o.teduBoard.on(o.TEduBoard.EVENT.TEB_SNAPSHOT,(e=>{s.ipcRenderer.send("onScreenShareSnapshot",e)})),o.teduBoard.on(o.TEduBoard.EVENT.TEB_OPERATE_CANREDO_STATUS_CHANGED,(e=>{s.ipcRenderer.send("onBoardCanRedoChange",e)})),o.teduBoard.on(o.TEduBoard.EVENT.TEB_OPERATE_CANUNDO_STATUS_CHANGED,(e=>{s.ipcRenderer.send("onBoardCanUndoChange",e)})),o.setVisibleRect(t.shareWindowBounds)})),s.ipcRenderer.on("onShareWindowBoundsChanged",((e,t)=>{window.BoardRender.setVisibleRect(t)})),s.ipcRenderer.on("callMethod",((e,t)=>{const o=window.BoardRender;o.isBoardReady?o.callBoardMethod(t):o.callMethodCache.push(t)}));const l=["touchstart","touchend"];s.ipcRenderer.on("enableWatchMouseMoveEvent",((e,t)=>{a.watchEvents(document,l,t)})),window.onload=()=>{i.boardWrapElement=document.getElementById("board-wrap"),i.boardElement=document.getElementById("board")}},280:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.watchEvents=void 0;const r=o(933),n=e=>{let t,o;if(e instanceof TouchEvent?(t=Math.round(e.changedTouches[0].screenX),o=Math.round(e.changedTouches[0].screenY)):(t=e.screenX,o=e.screenY),0!==t||0!==o){const n={type:e.type,x:t,y:o};r.ipcRenderer.send("onMouseEvent",n),console.log("onMouseEvent",n)}};t.watchEvents=function(e,t,o){t.forEach((t=>{o?e.addEventListener(t,n,{capture:!0,passive:!1}):e.removeEventListener(t,n,{capture:!0})}))}},933:e=>{e.exports=require("electron")}},t={};!function o(r){var n=t[r];if(void 0!==n)return n.exports;var d=t[r]={exports:{}};return e[r].call(d.exports,d,d.exports,o),d.exports}(761)})();
1
+ /******/ (() => { // webpackBootstrap
2
+ /******/ "use strict";
3
+ /******/ var __webpack_modules__ = ({
4
+
5
+ /***/ "./src/boardRenderer.ts":
6
+ /*!******************************!*\
7
+ !*** ./src/boardRenderer.ts ***!
8
+ \******************************/
9
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
10
+
11
+
12
+ // This file is required by the board.html file and will
13
+ // be executed in the renderer process for that window.
14
+ // No Node.js APIs are available in this process because
15
+ // `nodeIntegration` is turned off. Use `preload.js` to
16
+ // selectively enable features needed in the rendering
17
+ // process.
18
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
27
+ }) : function(o, v) {
28
+ o["default"] = v;
29
+ });
30
+ var __importStar = (this && this.__importStar) || function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
38
+ const electron_1 = __webpack_require__(/*! electron */ "electron");
39
+ const rendererUtil = __importStar(__webpack_require__(/*! ./rendererUtil */ "./src/rendererUtil.ts"));
40
+ // import { tcicSdkVersion } from './sentry'; // 用于初始化异常捕获,切勿删除
41
+ // console.log('version', tcicSdkVersion);
42
+ class BoardRender {
43
+ static setVisibleRect(bounds) {
44
+ if (bounds) {
45
+ if (BoardRender.screenHeight === 0 || BoardRender.screenWidth === 0) {
46
+ BoardRender.screenHeight = screen.height;
47
+ BoardRender.screenWidth = screen.width;
48
+ BoardRender.boardElement.style.width = `${screen.width}px`;
49
+ BoardRender.boardElement.style.height = `${screen.height}px`;
50
+ }
51
+ BoardRender.boardWrapElement.style.width = `${bounds.width}px`;
52
+ BoardRender.boardWrapElement.style.height = `${bounds.height}px`;
53
+ BoardRender.boardWrapElement.style.left = `${bounds.x}px`;
54
+ BoardRender.boardWrapElement.style.top = `${bounds.y}px`;
55
+ BoardRender.boardWrapElement.style.position = 'absolute';
56
+ }
57
+ else {
58
+ BoardRender.boardWrapElement.removeAttribute('style');
59
+ BoardRender.boardElement.removeAttribute('style');
60
+ }
61
+ }
62
+ ;
63
+ static updateCursor() {
64
+ if (!BoardRender.teduBoard)
65
+ return;
66
+ const toolType = BoardRender.teduBoard.getToolType();
67
+ const brushColor = BoardRender.teduBoard.getBrushColor();
68
+ if (toolType === BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_PEN) {
69
+ const cursorSvg = `<?xml version="1.0" encoding="UTF-8"?><svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><title>mouse_pen</title>
70
+ <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
71
+ <g id="光标及状态栏状态" transform="translate(-89.000000, -268.000000)">
72
+ <g id="mouse_pen" transform="translate(89.000000, 268.000000)">
73
+ <rect id="矩形" x="0" y="0" width="40" height="40"></rect>
74
+ <g id="编组-13" transform="translate(8.000000, 3.000000)" fill="${brushColor}" stroke="#182E25">
75
+ <path d="M0.756984031,32.1383216 L3.68816089e-13,26.5292023 L17.8941729,7.81597009e-14 L24.5264735,4.47354323 L6.63230058,31.0027455 L0.756984031,32.1383216 Z" id="形状结合"></path>
76
+ </g>
77
+ </g>
78
+ </g>
79
+ </g>
80
+ </svg>`;
81
+ const cursorBase64 = `data:image/svg+xml;charset=utf-8,${escape(cursorSvg)}`;
82
+ BoardRender.teduBoard.setCursorIcon(toolType, {
83
+ cursor: 'url',
84
+ url: cursorBase64,
85
+ offsetX: 10,
86
+ offsetY: 40,
87
+ });
88
+ }
89
+ else if (toolType === BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_LINE) {
90
+ const cursorSvg = `<?xml version="1.0" encoding="UTF-8"?>
91
+ <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
92
+ <title>mouse_line</title>
93
+ <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
94
+ <g id="光标及状态栏状态" transform="translate(-785.000000, -272.000000)">
95
+ <g id="mouse_line" transform="translate(785.000000, 272.000000)">
96
+ <g id="编组-3">
97
+ <rect id="矩形" x="0" y="0" width="40" height="40"></rect>
98
+ <g id="编组" transform="translate(2.628157, 2.500000)" fill="#000000" stroke="#FFFFFF">
99
+ <path d="M19.6574089,0 L19.657,15.5 L34.6259534,15.5 L34.6259534,19.5 L19.657,19.5 L19.6574089,35 L15.6574089,35 L15.657,19.5 L-1.13686838e-13,19.5 L-1.13686838e-13,15.5 L15.657,15.5 L15.6574089,0 L19.6574089,0 Z" id="形状结合"></path>
100
+ </g>
101
+ </g>
102
+ <line x1="28.5" y1="7.5" x2="36.5" y2="7.5" id="直线-6" stroke="${brushColor}" stroke-width="2" stroke-linecap="square"></line>
103
+ </g>
104
+ </g>
105
+ </g>
106
+ </svg>`;
107
+ const cursorBase64 = `data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(cursorSvg)))}`;
108
+ BoardRender.teduBoard.setCursorIcon(toolType, {
109
+ cursor: 'url',
110
+ url: cursorBase64,
111
+ offsetX: 20,
112
+ offsetY: 20,
113
+ });
114
+ }
115
+ else if (toolType === BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_RECT) {
116
+ const cursorSvg = `<?xml version="1.0" encoding="UTF-8"?>
117
+ <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
118
+ <title>mouse_rectangle</title>
119
+ <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
120
+ <g id="光标及状态栏状态" transform="translate(-551.000000, -272.000000)">
121
+ <g id="mouse_rectangle" transform="translate(551.000000, 272.000000)">
122
+ <g id="编组-3">
123
+ <rect id="矩形" x="0" y="0" width="40" height="40"></rect>
124
+ <g id="编组" transform="translate(2.628157, 2.500000)" fill="#000000" stroke="#FFFFFF">
125
+ <path d="M19.6574089,0 L19.657,15.5 L34.6259534,15.5 L34.6259534,19.5 L19.657,19.5 L19.6574089,35 L15.6574089,35 L15.657,19.5 L-1.13686838e-13,19.5 L-1.13686838e-13,15.5 L15.657,15.5 L15.6574089,0 L19.6574089,0 Z" id="形状结合"></path>
126
+ </g>
127
+ </g>
128
+ <rect id="矩形" stroke="${brushColor}" stroke-width="2" x="28" y="3" width="8" height="8"></rect>
129
+ </g>
130
+ </g>
131
+ </g>
132
+ </svg>`;
133
+ const cursorBase64 = `data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(cursorSvg)))}`;
134
+ BoardRender.teduBoard.setCursorIcon(toolType, {
135
+ cursor: 'url',
136
+ url: cursorBase64,
137
+ offsetX: 20,
138
+ offsetY: 20,
139
+ });
140
+ // 矩形也设置一下(当按住shift键的时候,工具会切换为矩形)
141
+ BoardRender.teduBoard.setCursorIcon(BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_SQUARE, {
142
+ cursor: 'url',
143
+ url: cursorBase64,
144
+ offsetX: 20,
145
+ offsetY: 20,
146
+ });
147
+ }
148
+ else if (toolType === BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_OVAL) {
149
+ const cursorSvg = `<?xml version="1.0" encoding="UTF-8"?>
150
+ <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
151
+ <title>mouse_circle</title>
152
+ <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
153
+ <g id="光标及状态栏状态" transform="translate(-323.000000, -272.000000)">
154
+ <g id="mouse_circle" transform="translate(323.000000, 272.000000)">
155
+ <g id="编组-3">
156
+ <rect id="矩形" x="0" y="0" width="40" height="40"></rect>
157
+ <g id="编组" transform="translate(2.628157, 2.500000)" fill="#000000" stroke="#FFFFFF">
158
+ <path d="M19.6574089,0 L19.657,15.5 L34.6259534,15.5 L34.6259534,19.5 L19.657,19.5 L19.6574089,35 L15.6574089,35 L15.657,19.5 L-1.13686838e-13,19.5 L-1.13686838e-13,15.5 L15.657,15.5 L15.6574089,0 L19.6574089,0 Z" id="形状结合"></path>
159
+ </g>
160
+ </g>
161
+ <circle id="椭圆形" stroke="${brushColor}" stroke-width="2" cx="32" cy="7" r="4"></circle>
162
+ </g>
163
+ </g>
164
+ </g>
165
+ </svg>`;
166
+ const cursorBase64 = `data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(cursorSvg)))}`;
167
+ BoardRender.teduBoard.setCursorIcon(toolType, {
168
+ cursor: 'url',
169
+ url: cursorBase64,
170
+ offsetX: 20,
171
+ offsetY: 20,
172
+ });
173
+ // 正圆也设置一下(当按住shift键的时候,工具会切换为正圆)
174
+ BoardRender.teduBoard.setCursorIcon(BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_CIRCLE, {
175
+ cursor: 'url',
176
+ url: cursorBase64,
177
+ offsetX: 20,
178
+ offsetY: 20,
179
+ });
180
+ }
181
+ BoardRender.teduBoard.setToolType(toolType); // 马上再更新一下工具,保证光标生效(白板bug)
182
+ }
183
+ ;
184
+ static callBoardMethod(arg) {
185
+ console.log('callBoardMethod', BoardRender.teduBoard, JSON.stringify(arg));
186
+ if (BoardRender.teduBoard) {
187
+ // eslint-disable-next-line prefer-spread
188
+ BoardRender.teduBoard[arg.method].apply(BoardRender.teduBoard, arg.params);
189
+ BoardRender.updateCursor();
190
+ // if (arg.method === 'setToolType') {
191
+ // const toolType = arg.params[0];
192
+ // // 系统光标对阴影滤镜支持不好,激光笔渐变部分会出现黑色阴影,目前先将激光笔用模拟的方式来实现,其他工具继续使用系统光标(同时在touch设备下系统光标也不会出现)
193
+ // if (toolType === BoardRender.teduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_LASER) {
194
+ // BoardRender.teduBoard.setSystemCursorEnable(false);
195
+ // } else {
196
+ // BoardRender.teduBoard.setSystemCursorEnable(true);
197
+ // }
198
+ // }
199
+ }
200
+ }
201
+ ;
202
+ }
203
+ BoardRender.TEduBoard = window.TEduBoard;
204
+ BoardRender.teduBoard = null;
205
+ BoardRender.boardElement = null;
206
+ BoardRender.boardWrapElement = null;
207
+ BoardRender.screenWidth = 0;
208
+ BoardRender.screenHeight = 0;
209
+ BoardRender.callMethodCache = []; // 缓存白板初始化完成前的指令
210
+ BoardRender.isBoardReady = false;
211
+ ;
212
+ window.BoardRender = BoardRender;
213
+ electron_1.ipcRenderer.on('initBoard', (event, params) => {
214
+ const BoardRender = window.BoardRender;
215
+ if (BoardRender.teduBoard) {
216
+ return;
217
+ }
218
+ const initParams = {
219
+ id: 'board',
220
+ sdkAppId: params.sdkAppId,
221
+ classId: params.roomId,
222
+ userId: params.userId,
223
+ userSig: params.userSig,
224
+ ratio: `${screen.width}:${screen.height}`,
225
+ systemCursorEnable: false,
226
+ enableLocalMode: true,
227
+ styleConfig: {
228
+ globalBackgroundColor: 'rgba(0, 0, 0, 0.01)',
229
+ textColor: '#ff0000',
230
+ selectBoxColor: '#727272',
231
+ cursorSize: [40, 40],
232
+ brushThin: 50,
233
+ selectAnchorColor: '#006eff',
234
+ },
235
+ };
236
+ BoardRender.teduBoard = new BoardRender.TEduBoard(initParams);
237
+ // 监听白板错误事件
238
+ BoardRender.teduBoard.on(BoardRender.TEduBoard.EVENT.TEB_ERROR, (code, msg) => {
239
+ });
240
+ // 监听白板告警事件
241
+ BoardRender.teduBoard.on(BoardRender.TEduBoard.EVENT.TEB_WARNING, (code, msg) => {
242
+ });
243
+ BoardRender.teduBoard.on(BoardRender.TEduBoard.EVENT.TEB_HISTROYDATA_SYNCCOMPLETED, () => {
244
+ // 默认使用鼠标工具
245
+ BoardRender.teduBoard.setToolType(BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_MOUSE);
246
+ // 启用笔锋特性
247
+ BoardRender.teduBoard.setHandwritingEnable(true);
248
+ // 设置橡皮擦自定义图标
249
+ BoardRender.teduBoard.setCursorIcon(BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_ERASER, {
250
+ cursor: 'url',
251
+ url: 'https://res.qcloudtiw.com/board/icons/xkt/eraser.svg',
252
+ offsetX: 7,
253
+ offsetY: 25,
254
+ });
255
+ BoardRender.updateCursor();
256
+ if (BoardRender.callMethodCache.length === 0) {
257
+ // 没有指令,则默认设置未鼠标工具
258
+ BoardRender.teduBoard.setToolType(0);
259
+ }
260
+ else {
261
+ // 执行缓存指令
262
+ BoardRender.callMethodCache.forEach((arg) => {
263
+ BoardRender.callBoardMethod(arg);
264
+ });
265
+ BoardRender.callMethodCache = [];
266
+ }
267
+ BoardRender.isBoardReady = true;
268
+ });
269
+ // 监听事件,image为截图内容的base64数据
270
+ BoardRender.teduBoard.on(BoardRender.TEduBoard.EVENT.TEB_SNAPSHOT, (data) => {
271
+ electron_1.ipcRenderer.send('onScreenShareSnapshot', data);
272
+ });
273
+ BoardRender.teduBoard.on(BoardRender.TEduBoard.EVENT.TEB_OPERATE_CANREDO_STATUS_CHANGED, (status) => {
274
+ electron_1.ipcRenderer.send('onBoardCanRedoChange', status);
275
+ });
276
+ BoardRender.teduBoard.on(BoardRender.TEduBoard.EVENT.TEB_OPERATE_CANUNDO_STATUS_CHANGED, (status) => {
277
+ electron_1.ipcRenderer.send('onBoardCanUndoChange', status);
278
+ });
279
+ BoardRender.setVisibleRect(params.shareWindowBounds);
280
+ });
281
+ electron_1.ipcRenderer.on('onShareWindowBoundsChanged', (event, bounds) => {
282
+ const BoardRender = window.BoardRender;
283
+ BoardRender.setVisibleRect(bounds);
284
+ });
285
+ electron_1.ipcRenderer.on('callMethod', (event, arg) => {
286
+ const BoardRender = window.BoardRender;
287
+ if (!BoardRender.isBoardReady) { // 白板为初始化完成,缓存白板指令
288
+ BoardRender.callMethodCache.push(arg);
289
+ return;
290
+ }
291
+ BoardRender.callBoardMethod(arg);
292
+ });
293
+ const events = ['touchstart', 'touchend'];
294
+ electron_1.ipcRenderer.on('enableWatchMouseMoveEvent', (event, enabled) => {
295
+ rendererUtil.watchEvents(document, events, enabled);
296
+ });
297
+ window.onload = () => {
298
+ BoardRender.boardWrapElement = document.getElementById('board-wrap');
299
+ BoardRender.boardElement = document.getElementById('board');
300
+ };
301
+
302
+
303
+ /***/ }),
304
+
305
+ /***/ "./src/rendererUtil.ts":
306
+ /*!*****************************!*\
307
+ !*** ./src/rendererUtil.ts ***!
308
+ \*****************************/
309
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
310
+
311
+
312
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
313
+ exports.watchEvents = void 0;
314
+ const electron_1 = __webpack_require__(/*! electron */ "electron");
315
+ function createMouseMoveProcessor() {
316
+ const lastX = 0;
317
+ const lastY = 0;
318
+ return (e) => {
319
+ let x;
320
+ let y;
321
+ if (e instanceof TouchEvent) { // 触摸事件
322
+ x = Math.round(e.changedTouches[0].screenX);
323
+ y = Math.round(e.changedTouches[0].screenY);
324
+ }
325
+ else { // 鼠标事件
326
+ x = e.screenX;
327
+ y = e.screenY;
328
+ }
329
+ if (x !== lastX || y !== lastY) { // 只有位置发生变化时才发送消息,减少资源消耗
330
+ const args = { type: e.type, x, y };
331
+ electron_1.ipcRenderer.send('onMouseEvent', args);
332
+ console.log('onMouseEvent', args);
333
+ }
334
+ };
335
+ }
336
+ const eventProcessor = createMouseMoveProcessor();
337
+ function watchEvents(target, events, enabled) {
338
+ events.forEach((event) => {
339
+ if (enabled) {
340
+ target.addEventListener(event, eventProcessor, {
341
+ capture: true,
342
+ passive: false,
343
+ });
344
+ }
345
+ else {
346
+ target.removeEventListener(event, eventProcessor, {
347
+ capture: true,
348
+ });
349
+ }
350
+ });
351
+ }
352
+ exports.watchEvents = watchEvents;
353
+
354
+
355
+ /***/ }),
356
+
357
+ /***/ "electron":
358
+ /*!***************************!*\
359
+ !*** external "electron" ***!
360
+ \***************************/
361
+ /***/ ((module) => {
362
+
363
+ module.exports = require("electron");
364
+
365
+ /***/ })
366
+
367
+ /******/ });
368
+ /************************************************************************/
369
+ /******/ // The module cache
370
+ /******/ var __webpack_module_cache__ = {};
371
+ /******/
372
+ /******/ // The require function
373
+ /******/ function __webpack_require__(moduleId) {
374
+ /******/ // Check if module is in cache
375
+ /******/ var cachedModule = __webpack_module_cache__[moduleId];
376
+ /******/ if (cachedModule !== undefined) {
377
+ /******/ return cachedModule.exports;
378
+ /******/ }
379
+ /******/ // Create a new module (and put it into the cache)
380
+ /******/ var module = __webpack_module_cache__[moduleId] = {
381
+ /******/ // no module.id needed
382
+ /******/ // no module.loaded needed
383
+ /******/ exports: {}
384
+ /******/ };
385
+ /******/
386
+ /******/ // Execute the module function
387
+ /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
388
+ /******/
389
+ /******/ // Return the exports of the module
390
+ /******/ return module.exports;
391
+ /******/ }
392
+ /******/
393
+ /************************************************************************/
394
+ /******/
395
+ /******/ // startup
396
+ /******/ // Load entry module and return exports
397
+ /******/ // This entry module is referenced by other modules so it can't be inlined
398
+ /******/ var __webpack_exports__ = __webpack_require__("./src/boardRenderer.ts");
399
+ /******/
400
+ /******/ })()
401
+ ;
402
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90Y2ljLWVsZWN0cm9uLXNkay8uL3NyYy9ib2FyZFJlbmRlcmVyLnRzIiwid2VicGFjazovL3RjaWMtZWxlY3Ryb24tc2RrLy4vc3JjL3JlbmRlcmVyVXRpbC50cyIsIndlYnBhY2s6Ly90Y2ljLWVsZWN0cm9uLXNkay9leHRlcm5hbCBcImVsZWN0cm9uXCIiLCJ3ZWJwYWNrOi8vdGNpYy1lbGVjdHJvbi1zZGsvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vdGNpYy1lbGVjdHJvbi1zZGsvd2VicGFjay9zdGFydHVwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsd0RBQXdEO0FBQ3hELHVEQUF1RDtBQUN2RCx3REFBd0Q7QUFDeEQsdURBQXVEO0FBQ3ZELHNEQUFzRDtBQUN0RCxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFWCxtRUFBdUM7QUFDdkMsc0dBQStDO0FBQy9DLCtEQUErRDtBQUUvRCwwQ0FBMEM7QUFFMUMsTUFBTSxXQUFXO0lBU1IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFXO1FBQ3RDLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxXQUFXLENBQUMsWUFBWSxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsV0FBVyxLQUFLLENBQUMsRUFBRTtnQkFDbkUsV0FBVyxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUN6QyxXQUFXLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ3ZDLFdBQVcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQztnQkFDM0QsV0FBVyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDO2FBQzlEO1lBQ0QsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUM7WUFDL0QsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUM7WUFDakUsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDMUQsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDekQsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1NBQzFEO2FBQU07WUFDTCxXQUFXLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RELFdBQVcsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ25EO0lBQ0gsQ0FBQztJQUFBLENBQUM7SUFDSyxNQUFNLENBQUMsWUFBWTtRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVM7WUFBRSxPQUFPO1FBQ25DLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckQsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6RCxJQUFJLFFBQVEsS0FBSyxXQUFXLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLHdCQUF3QixFQUFFO1lBQ2pGLE1BQU0sU0FBUyxHQUFHOzs7OzswRkFLa0UsVUFBVTs7Ozs7O2lCQU1uRixDQUFDO1lBQ1osTUFBTSxZQUFZLEdBQUcsb0NBQW9DLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzdFLFdBQVcsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRTtnQkFDNUMsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsR0FBRyxFQUFFLFlBQVk7Z0JBQ2pCLE9BQU8sRUFBRSxFQUFFO2dCQUNYLE9BQU8sRUFBRSxFQUFFO2FBQ1osQ0FBQyxDQUFDO1NBQ0o7YUFBTSxJQUFJLFFBQVEsS0FBSyxXQUFXLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixFQUFFO1lBQ3pGLE1BQU0sU0FBUyxHQUFHOzs7Ozs7Ozs7Ozs7NEZBWW9FLFVBQVU7Ozs7bUJBSW5GLENBQUM7WUFDZCxNQUFNLFlBQVksR0FBRyw2QkFBNkIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFO2dCQUM1QyxNQUFNLEVBQUUsS0FBSztnQkFDYixHQUFHLEVBQUUsWUFBWTtnQkFDakIsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsT0FBTyxFQUFFLEVBQUU7YUFDWixDQUFDLENBQUM7U0FDSjthQUFNLElBQUksUUFBUSxLQUFLLFdBQVcsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMseUJBQXlCLEVBQUU7WUFDekYsTUFBTSxTQUFTLEdBQUc7Ozs7Ozs7Ozs7OzswQ0FZa0IsVUFBVTs7OztTQUkzQyxDQUFDO1lBQ0osTUFBTSxZQUFZLEdBQUcsNkJBQTZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pHLFdBQVcsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRTtnQkFDNUMsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsR0FBRyxFQUFFLFlBQVk7Z0JBQ2pCLE9BQU8sRUFBRSxFQUFFO2dCQUNYLE9BQU8sRUFBRSxFQUFFO2FBQ1osQ0FBQyxDQUFDO1lBQ0gsaUNBQWlDO1lBQ2pDLFdBQVcsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsMkJBQTJCLEVBQUU7Z0JBQ3ZHLE1BQU0sRUFBRSxLQUFLO2dCQUNiLEdBQUcsRUFBRSxZQUFZO2dCQUNqQixPQUFPLEVBQUUsRUFBRTtnQkFDWCxPQUFPLEVBQUUsRUFBRTthQUNaLENBQUMsQ0FBQztTQUNKO2FBQU0sSUFBSSxRQUFRLEtBQUssV0FBVyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyx5QkFBeUIsRUFBRTtZQUN6RixNQUFNLFNBQVMsR0FBRzs7Ozs7Ozs7Ozs7OzZDQVlxQixVQUFVOzs7O1NBSTlDLENBQUM7WUFDSixNQUFNLFlBQVksR0FBRyw2QkFBNkIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFO2dCQUM1QyxNQUFNLEVBQUUsS0FBSztnQkFDYixHQUFHLEVBQUUsWUFBWTtnQkFDakIsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsT0FBTyxFQUFFLEVBQUU7YUFDWixDQUFDLENBQUM7WUFDSCxpQ0FBaUM7WUFDakMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQywyQkFBMkIsRUFBRTtnQkFDdkcsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsR0FBRyxFQUFFLFlBQVk7Z0JBQ2pCLE9BQU8sRUFBRSxFQUFFO2dCQUNYLE9BQU8sRUFBRSxFQUFFO2FBQ1osQ0FBQyxDQUFDO1NBQ0o7UUFDRCxXQUFXLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFFLDBCQUEwQjtJQUMxRSxDQUFDO0lBQUEsQ0FBQztJQUVLLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBUTtRQUNwQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzNFLElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRTtZQUN6Qix5Q0FBeUM7WUFDekMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzNFLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMzQixzQ0FBc0M7WUFDdEMsb0NBQW9DO1lBQ3BDLHdGQUF3RjtZQUN4RiwyRkFBMkY7WUFDM0YsMERBQTBEO1lBQzFELGFBQWE7WUFDYix5REFBeUQ7WUFDekQsTUFBTTtZQUNOLElBQUk7U0FDTDtJQUNILENBQUM7SUFBQSxDQUFDOztBQS9KWSxxQkFBUyxHQUFTLE1BQWMsQ0FBQyxTQUFTLENBQUM7QUFDM0MscUJBQVMsR0FBUSxJQUFJLENBQUM7QUFDdEIsd0JBQVksR0FBUSxJQUFJLENBQUM7QUFDekIsNEJBQWdCLEdBQVEsSUFBSSxDQUFDO0FBQzdCLHVCQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLHdCQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLDJCQUFlLEdBQVEsRUFBRSxDQUFDLENBQUMsZ0JBQWdCO0FBQzNDLHdCQUFZLEdBQUcsS0FBSyxDQUFDO0FBeUpwQyxDQUFDO0FBRUQsTUFBYyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFFMUMsc0JBQVcsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBVSxFQUFFLE1BQVcsRUFBRSxFQUFFO0lBQ3RELE1BQU0sV0FBVyxHQUFJLE1BQWMsQ0FBQyxXQUFXLENBQUM7SUFDaEQsSUFBSSxXQUFXLENBQUMsU0FBUyxFQUFFO1FBQ3pCLE9BQU87S0FDUjtJQUVELE1BQU0sVUFBVSxHQUFHO1FBQ2pCLEVBQUUsRUFBRSxPQUFPO1FBQ1gsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1FBQ3pCLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTTtRQUN0QixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDckIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1FBQ3ZCLEtBQUssRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtRQUN6QyxrQkFBa0IsRUFBRSxLQUFLO1FBQ3pCLGVBQWUsRUFBRSxJQUFJO1FBQ3JCLFdBQVcsRUFBRTtZQUNYLHFCQUFxQixFQUFFLHFCQUFxQjtZQUM1QyxTQUFTLEVBQUUsU0FBUztZQUNwQixjQUFjLEVBQUUsU0FBUztZQUN6QixVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ3BCLFNBQVMsRUFBRSxFQUFFO1lBQ2IsaUJBQWlCLEVBQUUsU0FBUztTQUM3QjtLQUNGLENBQUM7SUFDRixXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUU5RCxXQUFXO0lBQ1gsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBWSxFQUFFLEdBQVcsRUFBRSxFQUFFO0lBQzlGLENBQUMsQ0FBQyxDQUFDO0lBRUgsV0FBVztJQUNYLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQVksRUFBRSxHQUFXLEVBQUUsRUFBRTtJQUNoRyxDQUFDLENBQUMsQ0FBQztJQUVILFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLDZCQUE2QixFQUFFLEdBQUcsRUFBRTtRQUN2RixXQUFXO1FBQ1gsV0FBVyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBRXRHLFNBQVM7UUFDVCxXQUFXLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpELGFBQWE7UUFDYixXQUFXLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLDJCQUEyQixFQUFFO1lBQ3ZHLE1BQU0sRUFBRSxLQUFLO1lBQ2IsR0FBRyxFQUFFLHNEQUFzRDtZQUMzRCxPQUFPLEVBQUUsQ0FBQztZQUNWLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQyxDQUFDO1FBRUgsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTNCLElBQUksV0FBVyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzVDLGtCQUFrQjtZQUNsQixXQUFXLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0QzthQUFNO1lBQ0wsU0FBUztZQUNULFdBQVcsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQy9DLFdBQVcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQUM7WUFDSCxXQUFXLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztTQUNsQztRQUNELFdBQVcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBRUgsMkJBQTJCO0lBQzNCLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQVMsRUFBRSxFQUFFO1FBQy9FLHNCQUFXLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xELENBQUMsQ0FBQyxDQUFDO0lBRUgsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsa0NBQWtDLEVBQUUsQ0FBQyxNQUFXLEVBQUUsRUFBRTtRQUN2RyxzQkFBVyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUMsQ0FBQztJQUVILFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxFQUFFLENBQUMsTUFBVyxFQUFFLEVBQUU7UUFDdkcsc0JBQVcsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFFSCxXQUFXLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3ZELENBQUMsQ0FBQyxDQUFDO0FBR0gsc0JBQVcsQ0FBQyxFQUFFLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7SUFDN0QsTUFBTSxXQUFXLEdBQUksTUFBYyxDQUFDLFdBQVcsQ0FBQztJQUNoRCxXQUFXLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQyxDQUFDO0FBRUgsc0JBQVcsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO0lBQzFDLE1BQU0sV0FBVyxHQUFJLE1BQWMsQ0FBQyxXQUFXLENBQUM7SUFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxrQkFBa0I7UUFDakQsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsT0FBTztLQUNSO0lBQ0QsV0FBVyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxDQUFDLENBQUMsQ0FBQztBQUVILE1BQU0sTUFBTSxHQUFHLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzFDLHNCQUFXLENBQUMsRUFBRSxDQUFDLDJCQUEyQixFQUFFLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQzdELFlBQVksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN0RCxDQUFDLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO0lBQ25CLFdBQVcsQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3JFLFdBQVcsQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RCxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FDelJGLG1FQUF1QztBQUV2QyxTQUFTLHdCQUF3QjtJQUMvQixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDaEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLE9BQU8sQ0FBQyxDQUFNLEVBQUUsRUFBRTtRQUNoQixJQUFJLENBQUMsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2IsSUFBSSxDQUFDLFlBQVksVUFBVSxFQUFFLEVBQUcsT0FBTztZQUNyQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDN0M7YUFBTSxFQUFHLE9BQU87WUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNkLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO1NBQ2Y7UUFDRCxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssRUFBRSxFQUFHLHdCQUF3QjtZQUN6RCxNQUFNLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNwQyxzQkFBVyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDbkM7SUFDSCxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxjQUFjLEdBQUcsd0JBQXdCLEVBQUUsQ0FBQztBQUVsRCxTQUFnQixXQUFXLENBQUMsTUFBbUIsRUFBRSxNQUFnQixFQUFFLE9BQWdCO0lBQ2pGLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUN2QixJQUFJLE9BQU8sRUFBRTtZQUNYLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFO2dCQUM3QyxPQUFPLEVBQUUsSUFBSTtnQkFDYixPQUFPLEVBQUUsS0FBSzthQUNmLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRTtnQkFDaEQsT0FBTyxFQUFFLElBQUk7YUFDZCxDQUFDLENBQUM7U0FDSjtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQWJELGtDQWFDOzs7Ozs7Ozs7OztBQ3JDRCxxQzs7Ozs7O1VDQUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7OztVQ3RCQTtVQUNBO1VBQ0E7VUFDQSIsImZpbGUiOiJib2FyZFJlbmRlcmVyLmJ1bmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgZmlsZSBpcyByZXF1aXJlZCBieSB0aGUgYm9hcmQuaHRtbCBmaWxlIGFuZCB3aWxsXG4vLyBiZSBleGVjdXRlZCBpbiB0aGUgcmVuZGVyZXIgcHJvY2VzcyBmb3IgdGhhdCB3aW5kb3cuXG4vLyBObyBOb2RlLmpzIEFQSXMgYXJlIGF2YWlsYWJsZSBpbiB0aGlzIHByb2Nlc3MgYmVjYXVzZVxuLy8gYG5vZGVJbnRlZ3JhdGlvbmAgaXMgdHVybmVkIG9mZi4gVXNlIGBwcmVsb2FkLmpzYCB0b1xuLy8gc2VsZWN0aXZlbHkgZW5hYmxlIGZlYXR1cmVzIG5lZWRlZCBpbiB0aGUgcmVuZGVyaW5nXG4vLyBwcm9jZXNzLlxuXG5pbXBvcnQgeyBpcGNSZW5kZXJlciB9IGZyb20gJ2VsZWN0cm9uJztcbmltcG9ydCAqIGFzIHJlbmRlcmVyVXRpbCBmcm9tICcuL3JlbmRlcmVyVXRpbCc7XG4vLyBpbXBvcnQgeyB0Y2ljU2RrVmVyc2lvbiB9IGZyb20gJy4vc2VudHJ5JzsgLy8g55So5LqO5Yid5aeL5YyW5byC5bi45o2V6I6377yM5YiH5Yu/5Yig6ZmkXG5cbi8vIGNvbnNvbGUubG9nKCd2ZXJzaW9uJywgdGNpY1Nka1ZlcnNpb24pO1xuXG5jbGFzcyBCb2FyZFJlbmRlciB7XG4gIHB1YmxpYyBzdGF0aWMgVEVkdUJvYXJkOiBhbnkgPSAod2luZG93IGFzIGFueSkuVEVkdUJvYXJkO1xuICBwdWJsaWMgc3RhdGljIHRlZHVCb2FyZDogYW55ID0gbnVsbDtcbiAgcHVibGljIHN0YXRpYyBib2FyZEVsZW1lbnQ6IGFueSA9IG51bGw7XG4gIHB1YmxpYyBzdGF0aWMgYm9hcmRXcmFwRWxlbWVudDogYW55ID0gbnVsbDtcbiAgcHVibGljIHN0YXRpYyBzY3JlZW5XaWR0aCA9IDA7XG4gIHB1YmxpYyBzdGF0aWMgc2NyZWVuSGVpZ2h0ID0gMDtcbiAgcHVibGljIHN0YXRpYyBjYWxsTWV0aG9kQ2FjaGU6IGFueSA9IFtdOyAvLyDnvJPlrZjnmb3mnb/liJ3lp4vljJblrozmiJDliY3nmoTmjIfku6RcbiAgcHVibGljIHN0YXRpYyBpc0JvYXJkUmVhZHkgPSBmYWxzZTtcbiAgcHVibGljIHN0YXRpYyBzZXRWaXNpYmxlUmVjdChib3VuZHM6IGFueSkge1xuICAgIGlmIChib3VuZHMpIHtcbiAgICAgIGlmIChCb2FyZFJlbmRlci5zY3JlZW5IZWlnaHQgPT09IDAgfHwgQm9hcmRSZW5kZXIuc2NyZWVuV2lkdGggPT09IDApIHtcbiAgICAgICAgQm9hcmRSZW5kZXIuc2NyZWVuSGVpZ2h0ID0gc2NyZWVuLmhlaWdodDtcbiAgICAgICAgQm9hcmRSZW5kZXIuc2NyZWVuV2lkdGggPSBzY3JlZW4ud2lkdGg7XG4gICAgICAgIEJvYXJkUmVuZGVyLmJvYXJkRWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3NjcmVlbi53aWR0aH1weGA7XG4gICAgICAgIEJvYXJkUmVuZGVyLmJvYXJkRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtzY3JlZW4uaGVpZ2h0fXB4YDtcbiAgICAgIH1cbiAgICAgIEJvYXJkUmVuZGVyLmJvYXJkV3JhcEVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtib3VuZHMud2lkdGh9cHhgO1xuICAgICAgQm9hcmRSZW5kZXIuYm9hcmRXcmFwRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtib3VuZHMuaGVpZ2h0fXB4YDtcbiAgICAgIEJvYXJkUmVuZGVyLmJvYXJkV3JhcEVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2JvdW5kcy54fXB4YDtcbiAgICAgIEJvYXJkUmVuZGVyLmJvYXJkV3JhcEVsZW1lbnQuc3R5bGUudG9wID0gYCR7Ym91bmRzLnl9cHhgO1xuICAgICAgQm9hcmRSZW5kZXIuYm9hcmRXcmFwRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIEJvYXJkUmVuZGVyLmJvYXJkV3JhcEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgQm9hcmRSZW5kZXIuYm9hcmRFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICB9XG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgdXBkYXRlQ3Vyc29yKCkge1xuICAgIGlmICghQm9hcmRSZW5kZXIudGVkdUJvYXJkKSByZXR1cm47XG4gICAgY29uc3QgdG9vbFR5cGUgPSBCb2FyZFJlbmRlci50ZWR1Qm9hcmQuZ2V0VG9vbFR5cGUoKTtcbiAgICBjb25zdCBicnVzaENvbG9yID0gQm9hcmRSZW5kZXIudGVkdUJvYXJkLmdldEJydXNoQ29sb3IoKTtcbiAgICBpZiAodG9vbFR5cGUgPT09IEJvYXJkUmVuZGVyLlRFZHVCb2FyZC5URWR1Qm9hcmRUb29sVHlwZS5URURVX0JPQVJEX1RPT0xfVFlQRV9QRU4pIHtcbiAgICAgIGNvbnN0IGN1cnNvclN2ZyA9IGA8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz48c3ZnIHdpZHRoPVwiNDBweFwiIGhlaWdodD1cIjQwcHhcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIj48dGl0bGU+bW91c2VfcGVuPC90aXRsZT5cbiAgICAgICAgICAgICAgPGcgaWQ9XCLpobXpnaItMVwiIHN0cm9rZT1cIm5vbmVcIiBzdHJva2Utd2lkdGg9XCIxXCIgZmlsbD1cIm5vbmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+XG4gICAgICAgICAgICAgICAgICA8ZyBpZD1cIuWFieagh+WPiueKtuaAgeagj+eKtuaAgVwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtODkuMDAwMDAwLCAtMjY4LjAwMDAwMClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD1cIm1vdXNlX3BlblwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg4OS4wMDAwMDAsIDI2OC4wMDAwMDApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IGlkPVwi55+p5b2iXCIgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiPjwvcmVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9XCLnvJbnu4QtMTNcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoOC4wMDAwMDAsIDMuMDAwMDAwKVwiIGZpbGw9XCIke2JydXNoQ29sb3J9XCIgc3Ryb2tlPVwiIzE4MkUyNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wLjc1Njk4NDAzMSwzMi4xMzgzMjE2IEwzLjY4ODE2MDg5ZS0xMywyNi41MjkyMDIzIEwxNy44OTQxNzI5LDcuODE1OTcwMDllLTE0IEwyNC41MjY0NzM1LDQuNDczNTQzMjMgTDYuNjMyMzAwNTgsMzEuMDAyNzQ1NSBMMC43NTY5ODQwMzEsMzIuMTM4MzIxNiBaXCIgaWQ9XCLlvaLnirbnu5PlkIhcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICA8L3N2Zz5gO1xuICAgICAgY29uc3QgY3Vyc29yQmFzZTY0ID0gYGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCR7ZXNjYXBlKGN1cnNvclN2Zyl9YDtcbiAgICAgIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5zZXRDdXJzb3JJY29uKHRvb2xUeXBlLCB7XG4gICAgICAgIGN1cnNvcjogJ3VybCcsXG4gICAgICAgIHVybDogY3Vyc29yQmFzZTY0LFxuICAgICAgICBvZmZzZXRYOiAxMCxcbiAgICAgICAgb2Zmc2V0WTogNDAsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRvb2xUeXBlID09PSBCb2FyZFJlbmRlci5URWR1Qm9hcmQuVEVkdUJvYXJkVG9vbFR5cGUuVEVEVV9CT0FSRF9UT09MX1RZUEVfTElORSkge1xuICAgICAgY29uc3QgY3Vyc29yU3ZnID0gYDw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PlxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjQwcHhcIiBoZWlnaHQ9XCI0MHB4XCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI+XG4gICAgICAgICAgICAgICAgPHRpdGxlPm1vdXNlX2xpbmU8L3RpdGxlPlxuICAgICAgICAgICAgICAgIDxnIGlkPVwi6aG16Z2iLTFcIiBzdHJva2U9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZyBpZD1cIuWFieagh+WPiueKtuaAgeagj+eKtuaAgVwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNzg1LjAwMDAwMCwgLTI3Mi4wMDAwMDApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD1cIm1vdXNlX2xpbmVcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNzg1LjAwMDAwMCwgMjcyLjAwMDAwMClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD1cIue8lue7hC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IGlkPVwi55+p5b2iXCIgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiPjwvcmVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9XCLnvJbnu4RcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMi42MjgxNTcsIDIuNTAwMDAwKVwiIGZpbGw9XCIjMDAwMDAwXCIgc3Ryb2tlPVwiI0ZGRkZGRlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xOS42NTc0MDg5LDAgTDE5LjY1NywxNS41IEwzNC42MjU5NTM0LDE1LjUgTDM0LjYyNTk1MzQsMTkuNSBMMTkuNjU3LDE5LjUgTDE5LjY1NzQwODksMzUgTDE1LjY1NzQwODksMzUgTDE1LjY1NywxOS41IEwtMS4xMzY4NjgzOGUtMTMsMTkuNSBMLTEuMTM2ODY4MzhlLTEzLDE1LjUgTDE1LjY1NywxNS41IEwxNS42NTc0MDg5LDAgTDE5LjY1NzQwODksMCBaXCIgaWQ9XCLlvaLnirbnu5PlkIhcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmUgeDE9XCIyOC41XCIgeTE9XCI3LjVcIiB4Mj1cIjM2LjVcIiB5Mj1cIjcuNVwiIGlkPVwi55u057q/LTZcIiBzdHJva2U9XCIke2JydXNoQ29sb3J9XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwic3F1YXJlXCI+PC9saW5lPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgPC9zdmc+YDtcbiAgICAgIGNvbnN0IGN1cnNvckJhc2U2NCA9IGBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7d2luZG93LmJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGN1cnNvclN2ZykpKX1gO1xuICAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldEN1cnNvckljb24odG9vbFR5cGUsIHtcbiAgICAgICAgY3Vyc29yOiAndXJsJyxcbiAgICAgICAgdXJsOiBjdXJzb3JCYXNlNjQsXG4gICAgICAgIG9mZnNldFg6IDIwLFxuICAgICAgICBvZmZzZXRZOiAyMCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodG9vbFR5cGUgPT09IEJvYXJkUmVuZGVyLlRFZHVCb2FyZC5URWR1Qm9hcmRUb29sVHlwZS5URURVX0JPQVJEX1RPT0xfVFlQRV9SRUNUKSB7XG4gICAgICBjb25zdCBjdXJzb3JTdmcgPSBgPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XG4gIDxzdmcgd2lkdGg9XCI0MHB4XCIgaGVpZ2h0PVwiNDBweFwiIHZpZXdCb3g9XCIwIDAgNDAgNDBcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiPlxuICAgICAgPHRpdGxlPm1vdXNlX3JlY3RhbmdsZTwvdGl0bGU+XG4gICAgICA8ZyBpZD1cIumhtemdoi0xXCIgc3Ryb2tlPVwibm9uZVwiIHN0cm9rZS13aWR0aD1cIjFcIiBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj5cbiAgICAgICAgICA8ZyBpZD1cIuWFieagh+WPiueKtuaAgeagj+eKtuaAgVwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNTUxLjAwMDAwMCwgLTI3Mi4wMDAwMDApXCI+XG4gICAgICAgICAgICAgIDxnIGlkPVwibW91c2VfcmVjdGFuZ2xlXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDU1MS4wMDAwMDAsIDI3Mi4wMDAwMDApXCI+XG4gICAgICAgICAgICAgICAgICA8ZyBpZD1cIue8lue7hC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHJlY3QgaWQ9XCLnn6nlvaJcIiB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCI+PC9yZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDxnIGlkPVwi57yW57uEXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDIuNjI4MTU3LCAyLjUwMDAwMClcIiBmaWxsPVwiIzAwMDAwMFwiIHN0cm9rZT1cIiNGRkZGRkZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xOS42NTc0MDg5LDAgTDE5LjY1NywxNS41IEwzNC42MjU5NTM0LDE1LjUgTDM0LjYyNTk1MzQsMTkuNSBMMTkuNjU3LDE5LjUgTDE5LjY1NzQwODksMzUgTDE1LjY1NzQwODksMzUgTDE1LjY1NywxOS41IEwtMS4xMzY4NjgzOGUtMTMsMTkuNSBMLTEuMTM2ODY4MzhlLTEzLDE1LjUgTDE1LjY1NywxNS41IEwxNS42NTc0MDg5LDAgTDE5LjY1NzQwODksMCBaXCIgaWQ9XCLlvaLnirbnu5PlkIhcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgPHJlY3QgaWQ9XCLnn6nlvaJcIiBzdHJva2U9XCIke2JydXNoQ29sb3J9XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHg9XCIyOFwiIHk9XCIzXCIgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiOFwiPjwvcmVjdD5cbiAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgIDwvZz5cbiAgICAgIDwvZz5cbiAgPC9zdmc+YDtcbiAgICAgIGNvbnN0IGN1cnNvckJhc2U2NCA9IGBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7d2luZG93LmJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGN1cnNvclN2ZykpKX1gO1xuICAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldEN1cnNvckljb24odG9vbFR5cGUsIHtcbiAgICAgICAgY3Vyc29yOiAndXJsJyxcbiAgICAgICAgdXJsOiBjdXJzb3JCYXNlNjQsXG4gICAgICAgIG9mZnNldFg6IDIwLFxuICAgICAgICBvZmZzZXRZOiAyMCxcbiAgICAgIH0pO1xuICAgICAgLy8g55+p5b2i5Lmf6K6+572u5LiA5LiLKOW9k+aMieS9j3NoaWZ06ZSu55qE5pe25YCZ77yM5bel5YW35Lya5YiH5o2i5Li655+p5b2iKVxuICAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldEN1cnNvckljb24oQm9hcmRSZW5kZXIuVEVkdUJvYXJkLlRFZHVCb2FyZFRvb2xUeXBlLlRFRFVfQk9BUkRfVE9PTF9UWVBFX1NRVUFSRSwge1xuICAgICAgICBjdXJzb3I6ICd1cmwnLFxuICAgICAgICB1cmw6IGN1cnNvckJhc2U2NCxcbiAgICAgICAgb2Zmc2V0WDogMjAsXG4gICAgICAgIG9mZnNldFk6IDIwLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0b29sVHlwZSA9PT0gQm9hcmRSZW5kZXIuVEVkdUJvYXJkLlRFZHVCb2FyZFRvb2xUeXBlLlRFRFVfQk9BUkRfVE9PTF9UWVBFX09WQUwpIHtcbiAgICAgIGNvbnN0IGN1cnNvclN2ZyA9IGA8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz5cbiAgPHN2ZyB3aWR0aD1cIjQwcHhcIiBoZWlnaHQ9XCI0MHB4XCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI+XG4gICAgICA8dGl0bGU+bW91c2VfY2lyY2xlPC90aXRsZT5cbiAgICAgIDxnIGlkPVwi6aG16Z2iLTFcIiBzdHJva2U9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxuICAgICAgICAgIDxnIGlkPVwi5YWJ5qCH5Y+K54q25oCB5qCP54q25oCBXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC0zMjMuMDAwMDAwLCAtMjcyLjAwMDAwMClcIj5cbiAgICAgICAgICAgICAgPGcgaWQ9XCJtb3VzZV9jaXJjbGVcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMzIzLjAwMDAwMCwgMjcyLjAwMDAwMClcIj5cbiAgICAgICAgICAgICAgICAgIDxnIGlkPVwi57yW57uELTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBpZD1cIuefqeW9olwiIHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIj48L3JlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9XCLnvJbnu4RcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMi42MjgxNTcsIDIuNTAwMDAwKVwiIGZpbGw9XCIjMDAwMDAwXCIgc3Ryb2tlPVwiI0ZGRkZGRlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE5LjY1NzQwODksMCBMMTkuNjU3LDE1LjUgTDM0LjYyNTk1MzQsMTUuNSBMMzQuNjI1OTUzNCwxOS41IEwxOS42NTcsMTkuNSBMMTkuNjU3NDA4OSwzNSBMMTUuNjU3NDA4OSwzNSBMMTUuNjU3LDE5LjUgTC0xLjEzNjg2ODM4ZS0xMywxOS41IEwtMS4xMzY4NjgzOGUtMTMsMTUuNSBMMTUuNjU3LDE1LjUgTDE1LjY1NzQwODksMCBMMTkuNjU3NDA4OSwwIFpcIiBpZD1cIuW9oueKtue7k+WQiFwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPVwi5qSt5ZyG5b2iXCIgc3Ryb2tlPVwiJHticnVzaENvbG9yfVwiIHN0cm9rZS13aWR0aD1cIjJcIiBjeD1cIjMyXCIgY3k9XCI3XCIgcj1cIjRcIj48L2NpcmNsZT5cbiAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgIDwvZz5cbiAgICAgIDwvZz5cbiAgPC9zdmc+YDtcbiAgICAgIGNvbnN0IGN1cnNvckJhc2U2NCA9IGBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7d2luZG93LmJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGN1cnNvclN2ZykpKX1gO1xuICAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldEN1cnNvckljb24odG9vbFR5cGUsIHtcbiAgICAgICAgY3Vyc29yOiAndXJsJyxcbiAgICAgICAgdXJsOiBjdXJzb3JCYXNlNjQsXG4gICAgICAgIG9mZnNldFg6IDIwLFxuICAgICAgICBvZmZzZXRZOiAyMCxcbiAgICAgIH0pO1xuICAgICAgLy8g5q2j5ZyG5Lmf6K6+572u5LiA5LiLKOW9k+aMieS9j3NoaWZ06ZSu55qE5pe25YCZ77yM5bel5YW35Lya5YiH5o2i5Li65q2j5ZyGKVxuICAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldEN1cnNvckljb24oQm9hcmRSZW5kZXIuVEVkdUJvYXJkLlRFZHVCb2FyZFRvb2xUeXBlLlRFRFVfQk9BUkRfVE9PTF9UWVBFX0NJUkNMRSwge1xuICAgICAgICBjdXJzb3I6ICd1cmwnLFxuICAgICAgICB1cmw6IGN1cnNvckJhc2U2NCxcbiAgICAgICAgb2Zmc2V0WDogMjAsXG4gICAgICAgIG9mZnNldFk6IDIwLFxuICAgICAgfSk7XG4gICAgfVxuICAgIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5zZXRUb29sVHlwZSh0b29sVHlwZSk7ICAvLyDpqazkuIrlho3mm7TmlrDkuIDkuIvlt6XlhbfvvIzkv53or4HlhYnmoIfnlJ/mlYjvvIjnmb3mnb9idWfvvIlcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIGNhbGxCb2FyZE1ldGhvZChhcmc6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCdjYWxsQm9hcmRNZXRob2QnLCBCb2FyZFJlbmRlci50ZWR1Qm9hcmQsIEpTT04uc3RyaW5naWZ5KGFyZykpO1xuICAgIGlmIChCb2FyZFJlbmRlci50ZWR1Qm9hcmQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItc3ByZWFkXG4gICAgICBCb2FyZFJlbmRlci50ZWR1Qm9hcmRbYXJnLm1ldGhvZF0uYXBwbHkoQm9hcmRSZW5kZXIudGVkdUJvYXJkLCBhcmcucGFyYW1zKTtcbiAgICAgIEJvYXJkUmVuZGVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgLy8gaWYgKGFyZy5tZXRob2QgPT09ICdzZXRUb29sVHlwZScpIHtcbiAgICAgIC8vICAgY29uc3QgdG9vbFR5cGUgPSBhcmcucGFyYW1zWzBdO1xuICAgICAgLy8gICAvLyDns7vnu5/lhYnmoIflr7npmLTlvbHmu6TplZzmlK/mjIHkuI3lpb3vvIzmv4DlhYnnrJTmuJDlj5jpg6jliIbkvJrlh7rnjrDpu5HoibLpmLTlvbHvvIznm67liY3lhYjlsIbmv4DlhYnnrJTnlKjmqKHmi5/nmoTmlrnlvI/mnaXlrp7njrDvvIzlhbbku5blt6Xlhbfnu6fnu63kvb/nlKjns7vnu5/lhYnmoIco5ZCM5pe25ZyodG91Y2jorr7lpIfkuIvns7vnu5/lhYnmoIfkuZ/kuI3kvJrlh7rnjrApXG4gICAgICAvLyAgIGlmICh0b29sVHlwZSA9PT0gQm9hcmRSZW5kZXIudGVkdUJvYXJkLlRFZHVCb2FyZFRvb2xUeXBlLlRFRFVfQk9BUkRfVE9PTF9UWVBFX0xBU0VSKSB7XG4gICAgICAvLyAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldFN5c3RlbUN1cnNvckVuYWJsZShmYWxzZSk7XG4gICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldFN5c3RlbUN1cnNvckVuYWJsZSh0cnVlKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgIH1cbiAgfTtcbn07XG5cbih3aW5kb3cgYXMgYW55KS5Cb2FyZFJlbmRlciA9IEJvYXJkUmVuZGVyO1xuXG5pcGNSZW5kZXJlci5vbignaW5pdEJvYXJkJywgKGV2ZW50OiBhbnksIHBhcmFtczogYW55KSA9PiB7XG4gIGNvbnN0IEJvYXJkUmVuZGVyID0gKHdpbmRvdyBhcyBhbnkpLkJvYXJkUmVuZGVyO1xuICBpZiAoQm9hcmRSZW5kZXIudGVkdUJvYXJkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaW5pdFBhcmFtcyA9IHtcbiAgICBpZDogJ2JvYXJkJywgLy8gZG9t6IqC54K5aWRcbiAgICBzZGtBcHBJZDogcGFyYW1zLnNka0FwcElkLCAvLyDmlbTmlbBcbiAgICBjbGFzc0lkOiBwYXJhbXMucm9vbUlkLCAvLyDor77loIIgSUTvvIwzMuS9jeaVtOWei++8jOWPluWAvOiMg+WbtFsxLCA0Mjk0OTY3Mjk0XVxuICAgIHVzZXJJZDogcGFyYW1zLnVzZXJJZCwgLy8g5a2X56ym5LiyXG4gICAgdXNlclNpZzogcGFyYW1zLnVzZXJTaWcsXG4gICAgcmF0aW86IGAke3NjcmVlbi53aWR0aH06JHtzY3JlZW4uaGVpZ2h0fWAsXG4gICAgc3lzdGVtQ3Vyc29yRW5hYmxlOiBmYWxzZSxcbiAgICBlbmFibGVMb2NhbE1vZGU6IHRydWUsXG4gICAgc3R5bGVDb25maWc6IHtcbiAgICAgIGdsb2JhbEJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC4wMSknLFxuICAgICAgdGV4dENvbG9yOiAnI2ZmMDAwMCcsXG4gICAgICBzZWxlY3RCb3hDb2xvcjogJyM3MjcyNzInLFxuICAgICAgY3Vyc29yU2l6ZTogWzQwLCA0MF0sXG4gICAgICBicnVzaFRoaW46IDUwLFxuICAgICAgc2VsZWN0QW5jaG9yQ29sb3I6ICcjMDA2ZWZmJyxcbiAgICB9LFxuICB9O1xuICBCb2FyZFJlbmRlci50ZWR1Qm9hcmQgPSBuZXcgQm9hcmRSZW5kZXIuVEVkdUJvYXJkKGluaXRQYXJhbXMpO1xuXG4gIC8vIOebkeWQrOeZveadv+mUmeivr+S6i+S7tlxuICBCb2FyZFJlbmRlci50ZWR1Qm9hcmQub24oQm9hcmRSZW5kZXIuVEVkdUJvYXJkLkVWRU5ULlRFQl9FUlJPUiwgKGNvZGU6IG51bWJlciwgbXNnOiBzdHJpbmcpID0+IHtcbiAgfSk7XG5cbiAgLy8g55uR5ZCs55m95p2/5ZGK6K2m5LqL5Lu2XG4gIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5vbihCb2FyZFJlbmRlci5URWR1Qm9hcmQuRVZFTlQuVEVCX1dBUk5JTkcsIChjb2RlOiBudW1iZXIsIG1zZzogc3RyaW5nKSA9PiB7XG4gIH0pO1xuXG4gIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5vbihCb2FyZFJlbmRlci5URWR1Qm9hcmQuRVZFTlQuVEVCX0hJU1RST1lEQVRBX1NZTkNDT01QTEVURUQsICgpID0+IHtcbiAgICAvLyDpu5jorqTkvb/nlKjpvKDmoIflt6XlhbdcbiAgICBCb2FyZFJlbmRlci50ZWR1Qm9hcmQuc2V0VG9vbFR5cGUoQm9hcmRSZW5kZXIuVEVkdUJvYXJkLlRFZHVCb2FyZFRvb2xUeXBlLlRFRFVfQk9BUkRfVE9PTF9UWVBFX01PVVNFKTtcblxuICAgIC8vIOWQr+eUqOeslOmUi+eJueaAp1xuICAgIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5zZXRIYW5kd3JpdGluZ0VuYWJsZSh0cnVlKTtcblxuICAgIC8vIOiuvue9ruapoeearuaTpuiHquWumuS5ieWbvuagh1xuICAgIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5zZXRDdXJzb3JJY29uKEJvYXJkUmVuZGVyLlRFZHVCb2FyZC5URWR1Qm9hcmRUb29sVHlwZS5URURVX0JPQVJEX1RPT0xfVFlQRV9FUkFTRVIsIHtcbiAgICAgIGN1cnNvcjogJ3VybCcsXG4gICAgICB1cmw6ICdodHRwczovL3Jlcy5xY2xvdWR0aXcuY29tL2JvYXJkL2ljb25zL3hrdC9lcmFzZXIuc3ZnJyxcbiAgICAgIG9mZnNldFg6IDcsXG4gICAgICBvZmZzZXRZOiAyNSxcbiAgICB9KTtcblxuICAgIEJvYXJkUmVuZGVyLnVwZGF0ZUN1cnNvcigpO1xuXG4gICAgaWYgKEJvYXJkUmVuZGVyLmNhbGxNZXRob2RDYWNoZS5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIOayoeacieaMh+S7pO+8jOWImem7mOiupOiuvue9ruacqum8oOagh+W3peWFt1xuICAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldFRvb2xUeXBlKDApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDmiafooYznvJPlrZjmjIfku6RcbiAgICAgIEJvYXJkUmVuZGVyLmNhbGxNZXRob2RDYWNoZS5mb3JFYWNoKChhcmc6IGFueSkgPT4ge1xuICAgICAgICBCb2FyZFJlbmRlci5jYWxsQm9hcmRNZXRob2QoYXJnKTtcbiAgICAgIH0pO1xuICAgICAgQm9hcmRSZW5kZXIuY2FsbE1ldGhvZENhY2hlID0gW107XG4gICAgfVxuICAgIEJvYXJkUmVuZGVyLmlzQm9hcmRSZWFkeSA9IHRydWU7XG4gIH0pO1xuXG4gIC8vIOebkeWQrOS6i+S7tu+8jGltYWdl5Li65oiq5Zu+5YaF5a6555qEYmFzZTY05pWw5o2uXG4gIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5vbihCb2FyZFJlbmRlci5URWR1Qm9hcmQuRVZFTlQuVEVCX1NOQVBTSE9ULCAoZGF0YTogYW55KSA9PiB7XG4gICAgaXBjUmVuZGVyZXIuc2VuZCgnb25TY3JlZW5TaGFyZVNuYXBzaG90JywgZGF0YSk7XG4gIH0pO1xuXG4gIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5vbihCb2FyZFJlbmRlci5URWR1Qm9hcmQuRVZFTlQuVEVCX09QRVJBVEVfQ0FOUkVET19TVEFUVVNfQ0hBTkdFRCwgKHN0YXR1czogYW55KSA9PiB7XG4gICAgaXBjUmVuZGVyZXIuc2VuZCgnb25Cb2FyZENhblJlZG9DaGFuZ2UnLCBzdGF0dXMpO1xuICB9KTtcblxuICBCb2FyZFJlbmRlci50ZWR1Qm9hcmQub24oQm9hcmRSZW5kZXIuVEVkdUJvYXJkLkVWRU5ULlRFQl9PUEVSQVRFX0NBTlVORE9fU1RBVFVTX0NIQU5HRUQsIChzdGF0dXM6IGFueSkgPT4ge1xuICAgIGlwY1JlbmRlcmVyLnNlbmQoJ29uQm9hcmRDYW5VbmRvQ2hhbmdlJywgc3RhdHVzKTtcbiAgfSk7XG5cbiAgQm9hcmRSZW5kZXIuc2V0VmlzaWJsZVJlY3QocGFyYW1zLnNoYXJlV2luZG93Qm91bmRzKTtcbn0pO1xuXG5cbmlwY1JlbmRlcmVyLm9uKCdvblNoYXJlV2luZG93Qm91bmRzQ2hhbmdlZCcsIChldmVudCwgYm91bmRzKSA9PiB7XG4gIGNvbnN0IEJvYXJkUmVuZGVyID0gKHdpbmRvdyBhcyBhbnkpLkJvYXJkUmVuZGVyO1xuICBCb2FyZFJlbmRlci5zZXRWaXNpYmxlUmVjdChib3VuZHMpO1xufSk7XG5cbmlwY1JlbmRlcmVyLm9uKCdjYWxsTWV0aG9kJywgKGV2ZW50LCBhcmcpID0+IHtcbiAgY29uc3QgQm9hcmRSZW5kZXIgPSAod2luZG93IGFzIGFueSkuQm9hcmRSZW5kZXI7XG4gIGlmICghQm9hcmRSZW5kZXIuaXNCb2FyZFJlYWR5KSB7IC8vIOeZveadv+S4uuWIneWni+WMluWujOaIkO+8jOe8k+WtmOeZveadv+aMh+S7pFxuICAgIEJvYXJkUmVuZGVyLmNhbGxNZXRob2RDYWNoZS5wdXNoKGFyZyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIEJvYXJkUmVuZGVyLmNhbGxCb2FyZE1ldGhvZChhcmcpO1xufSk7XG5cbmNvbnN0IGV2ZW50cyA9IFsndG91Y2hzdGFydCcsICd0b3VjaGVuZCddO1xuaXBjUmVuZGVyZXIub24oJ2VuYWJsZVdhdGNoTW91c2VNb3ZlRXZlbnQnLCAoZXZlbnQsIGVuYWJsZWQpID0+IHtcbiAgcmVuZGVyZXJVdGlsLndhdGNoRXZlbnRzKGRvY3VtZW50LCBldmVudHMsIGVuYWJsZWQpO1xufSk7XG5cbndpbmRvdy5vbmxvYWQgPSAoKSA9PiB7XG4gIEJvYXJkUmVuZGVyLmJvYXJkV3JhcEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm9hcmQtd3JhcCcpO1xuICBCb2FyZFJlbmRlci5ib2FyZEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm9hcmQnKTtcbn07XG4iLCJpbXBvcnQgeyBpcGNSZW5kZXJlciB9IGZyb20gJ2VsZWN0cm9uJztcblxuZnVuY3Rpb24gY3JlYXRlTW91c2VNb3ZlUHJvY2Vzc29yKCkge1xuICBjb25zdCBsYXN0WCA9IDA7XG4gIGNvbnN0IGxhc3RZID0gMDtcbiAgcmV0dXJuIChlOiBhbnkpID0+IHtcbiAgICBsZXQgeDsgbGV0IHk7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBUb3VjaEV2ZW50KSB7ICAvLyDop6bmkbjkuovku7ZcbiAgICAgIHggPSBNYXRoLnJvdW5kKGUuY2hhbmdlZFRvdWNoZXNbMF0uc2NyZWVuWCk7XG4gICAgICB5ID0gTWF0aC5yb3VuZChlLmNoYW5nZWRUb3VjaGVzWzBdLnNjcmVlblkpO1xuICAgIH0gZWxzZSB7ICAvLyDpvKDmoIfkuovku7ZcbiAgICAgIHggPSBlLnNjcmVlblg7XG4gICAgICB5ID0gZS5zY3JlZW5ZO1xuICAgIH1cbiAgICBpZiAoeCAhPT0gbGFzdFggfHwgeSAhPT0gbGFzdFkpIHsgIC8vIOWPquacieS9jee9ruWPkeeUn+WPmOWMluaXtuaJjeWPkemAgea2iOaBr++8jOWHj+Wwkei1hOa6kOa2iOiAl1xuICAgICAgY29uc3QgYXJncyA9IHsgdHlwZTogZS50eXBlLCB4LCB5IH07XG4gICAgICBpcGNSZW5kZXJlci5zZW5kKCdvbk1vdXNlRXZlbnQnLCBhcmdzKTtcbiAgICAgIGNvbnNvbGUubG9nKCdvbk1vdXNlRXZlbnQnLCBhcmdzKTtcbiAgICB9XG4gIH07XG59XG5cbmNvbnN0IGV2ZW50UHJvY2Vzc29yID0gY3JlYXRlTW91c2VNb3ZlUHJvY2Vzc29yKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiB3YXRjaEV2ZW50cyh0YXJnZXQ6IEV2ZW50VGFyZ2V0LCBldmVudHM6IHN0cmluZ1tdLCBlbmFibGVkOiBib29sZWFuKSB7XG4gIGV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgIGlmIChlbmFibGVkKSB7XG4gICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgZXZlbnRQcm9jZXNzb3IsIHtcbiAgICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICAgICAgcGFzc2l2ZTogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGV2ZW50UHJvY2Vzc29yLCB7XG4gICAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlY3Ryb25cIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL2JvYXJkUmVuZGVyZXIudHNcIik7XG4iXSwic291cmNlUm9vdCI6IiJ9
@@ -1 +1,112 @@
1
- (()=>{"use strict";var e={933:e=>{e.exports=require("electron")}},t={};function i(n){var s=t[n];if(void 0!==s)return s.exports;var r=t[n]={exports:{}};return e[n](r,r.exports,i),r.exports}(()=>{const e=i(933);class t{constructor(){this._videoElement=document.getElementById("camera"),this._videoElement.addEventListener("timeupdate",(()=>{})),this._videoElement.addEventListener("durationchange",(()=>{})),this._videoElement.addEventListener("seeked",(()=>{})),this._videoElement.addEventListener("playing",(()=>{e.ipcRenderer.send("playing",{width:this._params.width,height:this._params.height})}))}static get instance(){return null===this._instance&&(this._instance=new t),this._instance}start(e){return new Promise(((t,i)=>{this._params=e,navigator.mediaDevices.enumerateDevices().then((t=>{const n=t.filter((e=>"videoinput"===e.kind));navigator.mediaDevices.getUserMedia({video:{deviceId:n[e.deviceIndex].deviceId,aspectRatio:1.7777777778,width:e.width,height:e.height},audio:!1}).then((e=>{this._videoElement.srcObject=e,this._videoElement.play()})).catch((e=>{i(e)}))}))}))}stop(){this._videoElement.stop()}}t._instance=null,e.ipcRenderer.on("start",((e,i)=>{t.instance.start(i)}))})()})();
1
+ /******/ (() => { // webpackBootstrap
2
+ /******/ "use strict";
3
+ /******/ var __webpack_modules__ = ({
4
+
5
+ /***/ "electron":
6
+ /*!***************************!*\
7
+ !*** external "electron" ***!
8
+ \***************************/
9
+ /***/ ((module) => {
10
+
11
+ module.exports = require("electron");
12
+
13
+ /***/ })
14
+
15
+ /******/ });
16
+ /************************************************************************/
17
+ /******/ // The module cache
18
+ /******/ var __webpack_module_cache__ = {};
19
+ /******/
20
+ /******/ // The require function
21
+ /******/ function __webpack_require__(moduleId) {
22
+ /******/ // Check if module is in cache
23
+ /******/ var cachedModule = __webpack_module_cache__[moduleId];
24
+ /******/ if (cachedModule !== undefined) {
25
+ /******/ return cachedModule.exports;
26
+ /******/ }
27
+ /******/ // Create a new module (and put it into the cache)
28
+ /******/ var module = __webpack_module_cache__[moduleId] = {
29
+ /******/ // no module.id needed
30
+ /******/ // no module.loaded needed
31
+ /******/ exports: {}
32
+ /******/ };
33
+ /******/
34
+ /******/ // Execute the module function
35
+ /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
36
+ /******/
37
+ /******/ // Return the exports of the module
38
+ /******/ return module.exports;
39
+ /******/ }
40
+ /******/
41
+ /************************************************************************/
42
+ var __webpack_exports__ = {};
43
+ // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
44
+ (() => {
45
+ var exports = __webpack_exports__;
46
+ /*!*******************************!*\
47
+ !*** ./src/cameraRenderer.ts ***!
48
+ \*******************************/
49
+
50
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
51
+ const electron_1 = __webpack_require__(/*! electron */ "electron");
52
+ class CameraController {
53
+ constructor() {
54
+ this._videoElement = document.getElementById('camera');
55
+ this._videoElement.addEventListener('timeupdate', () => {
56
+ });
57
+ this._videoElement.addEventListener('durationchange', () => {
58
+ });
59
+ this._videoElement.addEventListener('seeked', () => {
60
+ });
61
+ this._videoElement.addEventListener('playing', () => {
62
+ electron_1.ipcRenderer.send('playing', {
63
+ width: this._params.width,
64
+ height: this._params.height,
65
+ });
66
+ });
67
+ }
68
+ static get instance() {
69
+ if (this._instance === null) {
70
+ this._instance = new CameraController();
71
+ }
72
+ return this._instance;
73
+ }
74
+ start(params) {
75
+ return new Promise((resolve, reject) => {
76
+ this._params = params;
77
+ navigator.mediaDevices.enumerateDevices()
78
+ .then((devices) => {
79
+ const cameraDevices = devices.filter(device => device.kind === 'videoinput');
80
+ navigator.mediaDevices.getUserMedia({
81
+ video: {
82
+ deviceId: cameraDevices[params.deviceIndex].deviceId,
83
+ aspectRatio: 1.7777777778,
84
+ width: params.width,
85
+ height: params.height,
86
+ },
87
+ audio: false,
88
+ })
89
+ .then((stream) => {
90
+ this._videoElement.srcObject = stream;
91
+ this._videoElement.play();
92
+ })
93
+ .catch((error) => {
94
+ reject(error);
95
+ });
96
+ });
97
+ });
98
+ }
99
+ stop() {
100
+ this._videoElement.stop();
101
+ }
102
+ }
103
+ CameraController._instance = null;
104
+ electron_1.ipcRenderer.on('start', (event, params) => {
105
+ CameraController.instance.start(params);
106
+ });
107
+
108
+ })();
109
+
110
+ /******/ })()
111
+ ;
112
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90Y2ljLWVsZWN0cm9uLXNkay9leHRlcm5hbCBcImVsZWN0cm9uXCIiLCJ3ZWJwYWNrOi8vdGNpYy1lbGVjdHJvbi1zZGsvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vdGNpYy1lbGVjdHJvbi1zZGsvLi9zcmMvY2FtZXJhUmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLHFDOzs7Ozs7VUNBQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7Ozs7Ozs7Ozs7QUN0QkEsbUVBQXVDO0FBRXZDLE1BQU0sZ0JBQWdCO0lBVXBCO1FBQ0UsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO1FBQzNELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ25ELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO1lBQ2xELHNCQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDMUIsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSztnQkFDekIsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTthQUM1QixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUF2Qk0sTUFBTSxLQUFLLFFBQVE7UUFDeEIsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksRUFBRTtZQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztTQUN6QztRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBbUJNLEtBQUssQ0FBQyxNQUFXO1FBQ3RCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDdEIsU0FBUyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRTtpQkFDdEMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ2hCLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxDQUFDO2dCQUM3RSxTQUFTLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztvQkFDbEMsS0FBSyxFQUFFO3dCQUNMLFFBQVEsRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVE7d0JBQ3BELFdBQVcsRUFBRSxZQUFZO3dCQUN6QixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7d0JBQ25CLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtxQkFDdEI7b0JBQ0QsS0FBSyxFQUFFLEtBQUs7aUJBQ2IsQ0FBQztxQkFDQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDZixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzVCLENBQUMsQ0FBQztxQkFDRCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDZixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDTSxJQUFJO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QixDQUFDOztBQTdDYywwQkFBUyxHQUFxQixJQUFJLENBQUM7QUFnRHBELHNCQUFXLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtJQUN4QyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLENBQUMsQ0FBQyxDQUFDIiwiZmlsZSI6ImNhbWVyYVJlbmRlcmVyLmJ1bmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZWN0cm9uXCIpOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJpbXBvcnQgeyBpcGNSZW5kZXJlciB9IGZyb20gJ2VsZWN0cm9uJztcblxuY2xhc3MgQ2FtZXJhQ29udHJvbGxlciB7XG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGluc3RhbmNlKCk6IENhbWVyYUNvbnRyb2xsZXIge1xuICAgIGlmICh0aGlzLl9pbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5faW5zdGFuY2UgPSBuZXcgQ2FtZXJhQ29udHJvbGxlcigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gIH1cbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBDYW1lcmFDb250cm9sbGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBfdmlkZW9FbGVtZW50OiBhbnk7XG4gIHByaXZhdGUgX3BhcmFtczogYW55O1xuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbWVyYScpO1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgKCkgPT4ge1xuICAgIH0pO1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdkdXJhdGlvbmNoYW5nZScsICgpID0+IHtcbiAgICB9KTtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Vla2VkJywgKCkgPT4ge1xuICAgIH0pO1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgKCkgPT4ge1xuICAgICAgaXBjUmVuZGVyZXIuc2VuZCgncGxheWluZycsIHtcbiAgICAgICAgd2lkdGg6IHRoaXMuX3BhcmFtcy53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiB0aGlzLl9wYXJhbXMuaGVpZ2h0LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIHN0YXJ0KHBhcmFtczogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtcztcbiAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygpXG4gICAgICAgIC50aGVuKChkZXZpY2VzKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2FtZXJhRGV2aWNlcyA9IGRldmljZXMuZmlsdGVyKGRldmljZSA9PiBkZXZpY2Uua2luZCA9PT0gJ3ZpZGVvaW5wdXQnKTtcbiAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7XG4gICAgICAgICAgICB2aWRlbzoge1xuICAgICAgICAgICAgICBkZXZpY2VJZDogY2FtZXJhRGV2aWNlc1twYXJhbXMuZGV2aWNlSW5kZXhdLmRldmljZUlkLFxuICAgICAgICAgICAgICBhc3BlY3RSYXRpbzogMS43Nzc3Nzc3Nzc4LFxuICAgICAgICAgICAgICB3aWR0aDogcGFyYW1zLndpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQ6IHBhcmFtcy5oZWlnaHQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXVkaW86IGZhbHNlLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoc3RyZWFtKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBzdHJlYW07XG4gICAgICAgICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBzdG9wKCkge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5zdG9wKCk7XG4gIH1cbn1cblxuaXBjUmVuZGVyZXIub24oJ3N0YXJ0JywgKGV2ZW50LCBwYXJhbXMpID0+IHtcbiAgQ2FtZXJhQ29udHJvbGxlci5pbnN0YW5jZS5zdGFydChwYXJhbXMpO1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9
package/dist/config.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "resources": [
3
3
  {
4
- "version": "2bba1550e59203774b31fd7461df051ee931a380",
4
+ "version": "dc315e8af8eec26e1135b77b545a8a7586b911d5",
5
5
  "sdkAppId": "0",
6
6
  "schoolId": "0",
7
- "url": "https://class.qcloudclass.com/1.5.0/cache/offline_2bba1550e59203774b31fd7461df051ee931a380.zip",
7
+ "url": "https://class.qcloudclass.com/1.5.0/cache/offline_dc315e8af8eec26e1135b77b545a8a7586b911d5.zip",
8
8
  "files": {
9
9
  },
10
10
  "regexes": {
@@ -25,7 +25,7 @@
25
25
  "supportFomats": "mp4|rmvb|avi|mov|flv|wmv|m3u8|mpeg|mp3|wav|pcm|aac|ogg"
26
26
  },
27
27
  "expired": 200,
28
- "devBuildTime": 1638450414,
28
+ "devBuildTime": 1638533502,
29
29
  "domains": {
30
30
  "www.xxx.com": [
31
31
  "www.aaa.com"